Hound Web MCP

Los servidores Hound MCP le dan a tu agente una capacidad de búsqueda y fetch realmente buena, sin costo, sin trucos, sin claves API ni niveles gratuitos, completamente gratis.

Documentación

Hound logo

🐕 Hound

Dale a tu agente de IA la web. $0. Dos comandos. Sin claves.

Fetch · crawl · evita muros anti-bots · lee PDFs (incluso escaneados) · busca en la web Un servidor MCP · un navegador cálido · cero cuentas · se ejecuta en tu máquina

PyPI Python License: MIT CI Downloads GitHub stars

pip install hound-mcp[all] && playwright install chromium

Instalar · Las 6 herramientas · Búsqueda · Comparación · Advertencias · Límites honestos


Hound gives your AI agent the web

🎬 Demo

Mismo prompt, tres herramientas. Hound hace todo por sí solo, búsqueda + fetch + crawl, localmente. Los demás se quedan atascados en las partes que no hacen.

OpenCode + Hound

Pi + Hound


✨ Nuevo en 12.1.2

Búsqueda BYOK · fan-out multi-consulta consciente de la intención · ranking de seis señales · motor de sigilo de nueva generación.

  • 🔑 Búsqueda Trae Tu Propia Clave (BYOK): añade tus propias claves de API para Serper, Tavily, Exa, Firecrawl o TinyFish vía hound keys add. Las claves se convierten en la fuente de búsqueda principal con apilamiento de claves (múltiples claves por proveedor, rotación automática al alcanzar el límite de tasa), con respaldo automático a los motores locales sin clave de Hound cuando todas las claves se agotan. Gestión de claves por CLI: hound keys add/list/test/remove/clear.
  • 🧠 Fan-out multi-consulta consciente de la intención: Hound detecta la intención de la consulta (comparación, cómo hacer, investigación, código, referencia, noticias, factual) y genera variantes de consulta expandidas distribuidas entre motores de diversidad. Misma cantidad de solicitudes paralelas, cero latencia añadida, mayor cobertura. Consenso entre variantes: una URL aparecida en diferentes consultas de diferentes motores es una señal de autoridad más fuerte.
  • 📊 Ranking de seis señales: consenso entre variantes + reputación de dominio + puntuación de señal de respuesta + relevancia del título + relevancia de la URL + diversidad de resultados (máx. 2 por dominio en los resultados principales). La detección de tipo de fuente etiqueta cada resultado como docs/paper/repo/blog/foro/referencia/noticias.
  • 🧬 Motor de sigilo de nueva generación: auto-detección de Chrome del sistema, 4 perfiles de huella coherentes, parches a nivel de JS (fix de UA HeadlessChrome, navigator.webdriver=undefined, ruido en canvas, API de permisos), simulación de comportamiento humano (curvas de ratón Bezier, scroll natural), solucionador de CF Turnstile con movimiento de ratón similar al humano. Pasa bot.sannysoft.com, evita Cloudflare Turnstile en CanadianInsider (el más difícil en un benchmark de 31 sitios), Medium, StackOverflow, NowSecure, Glassdoor (DataDome). Ver el benchmark de sigilo abajo.
  • 🐍 No más scrapling. Toda la funcionalidad de scrapling reemplazada con módulos propios de hound: fetcher.py (HTTP basado en primp), browser.py (navegador basado en patchright), extractor.py (trafilatura + markdownify). Instalación más pequeña, menos dependencias transitivas, arranque en frío más rápido.
  • 📱 Funciona en todas partes. La instalación ligera pip install hound-mcp no trae dependencias de navegador. En plataformas sin playwright (Termux, aarch64), hound se ejecuta en modo solo-HTTP con degradación elegante.
  • 🔒 Correcciones de fiabilidad: detección universal de errores (las páginas de error ya no parecen éxito), respaldo de Internet Archive muerto eliminado, CLI auto-reparable + limpieza de procesos obsoletos, los errores de selector CSS se propagan en lugar de devolver silenciosamente [], el fallo de arranque del navegador limpia sesiones parciales, hound --rollback funciona para versiones antiguas fijadas, focus y actions ahora se reenvían del despachador MCP a smart_fetch.
  • 🐳 Soporte Docker: Dockerfile multi-etapa, docker-compose con shm_size 1gb, usuario no root, healthcheck. Por @imonlinux.
  • 🧪 673 pruebas.

Por qué deberías elegir Hound

Hound es un servidor MCP que da a cualquier agente (Claude Code, Cursor, OpenCode, Hermes, Pi, cualquier cosa que hable MCP) investigación web completa desde un único proceso local.

  • 🆓 $0 para siempre, MIT: sin claves, sin cuentas, sin facturación por solicitud, sin datos enrutados a un scraper de terceros. La búsqueda es sin clave y local.
  • 🧠 Dominado al conectar: un bloque instructions de una sola vez entrega al agente el modelo mental, el flujo de trabajo #1 y los límites conocidos. Efectivo desde el primer turno.
  • 📐 ~2.9K tokens, 6 herramientas: definiciones de herramientas hechas a mano, sin inflado de esquema Pydantic. Más capacidad que herramientas que envían 5K+.
  • 🎯 Cada respuesta es accionable: content_ok, next_action, summary, page_type, content_age_days/is_stale, source_type/is_official, relevance_score, fetch_relevance. Los agentes ramifican en campos estructurados, no en texto de error. Los bloqueos duros (404/bot/auth) devuelven errores limpios, no contenido falso.
  • 🛡️ Arranque y apagado seguros para producción: arranque en frío bajo 1s para que el handshake MCP nunca expire; sale con 0 y stderr limpio, sin ruido de cierre tipo crash.

Hound es para el propio agente. Lo instalas una vez; el agente lo llama siempre que necesite la web.


🚀 Inicio rápido

pip install hound-mcp[all]          # fetch + crawl + keyless search + PDF + OCR + neural rerank
playwright install chromium         # the anti-detect browser engine

Luego apunta cualquier cliente MCP al comando hound. Sin argumentos, sin claves, sin variables de entorno. Ver Instalar para la opción ligera y Dile a tu agente que lo instale para un prompt de copiar y pegar.

hound -v          # version + update status
hound -u          # update to latest (brick-proof, self-healing)
hound --doctor    # health check + fix advice
hound --rollback  # undo the last update

Si hound alguna vez se rompe (una actualización fallida, un lanzador bloqueado), recupérate con python ~/.hound/repair.py, o ejecuta hound --doctor para diagnosticar.


🐳 Docker

Hound puede ejecutarse en Docker con modo HTTP, ideal para:

  • Ejecutarse en un servidor
  • Despliegue aislado

Inicio rápido con Docker Compose

git clone https://github.com/dondai1234/master-fetch.git
cd master-fetch
docker-compose up -d

Hound estará disponible en http://<your-host-ip>:8765/mcp como servidor MCP HTTP (usa localhost si se ejecuta en la misma máquina).

Compilación manual de Docker

docker build -t hound-mcp .
docker run -p 8765:8765 hound-mcp

Variables de entorno

VariablePredeterminadoDescripción
HOUND_BROWSER_IDLE_TIMEOUT300Segundos antes de que el navegador se cierre (0 = nunca)
HOUND_SEARCH_PROXY-Proxy para todos los backends de búsqueda (http/https/socks5/socks5h)
HOUND_SEARCH_DEADLINE8Plazo de búsqueda en segundos
HTTP_PROXY-Proxy para solicitudes de fetch HTTP
HTTPS_PROXY-Proxy para solicitudes de fetch HTTPS

Conexión al modo HTTP

Para clientes MCP que soporten HTTP (Claude Code, Open WebUI), usa la IP LAN de tu host:

http://<your-host-ip>:8765/mcp

(O localhost:8765/mcp si se ejecuta en la misma máquina.)


🧰 Las 6 herramientas

HerramientaDescripción breve
smart_fetchFetch de cualquier URL. HTTP primero, auto-escala al navegador anti-detección si está bloqueado. Lotes, PDFs (con OCR + puntuación de calidad), css_selector, focus, actions, paginación.
smart_crawlCrawl mismo-dominio mejor-primero. Cada página como markdown con content_ok + page_type (artículo / lista / js_shell). discover_only, crawl_urls, focus, modo sitemap, límites de tiempo + tokens.
smart_searchBúsqueda web local sin clave. 10 backends en paralelo, fusiona + rankea con re-rank neuronal + consenso entre backends. relevance_score + engines_consensus por resultado.
screenshotCaptura una página como imagen. Para agentes multimodales (canvas, imagen-de-texto, diseño visual).
cache_clearLimpia la caché de fetch. all=true borra todo.
versionVersión instalada + estado de actualización.

🔎 Búsqueda local sin clave

Hound fetches the web and brings it back to your agent

Sin clave de API, sin cuenta, sin servicio de terceros. smart_search ejecuta 10 backends sin clave en paralelo en tu máquina, fusiona, deduplica y rankea. Devuelve URLs + ranking, no contenido de página: el agente hace smart_fetch de los resultados que coinciden con lo que necesita (el ranking es una pista, no una directiva).

  • 🌐 10 backends independientes: duckduckgo, brave, mojeek, yahoo, yandex, startpage, google, qwant, más wikipedia y grokipedia opcionales. Seis+ familias de índices independientes, no la misma fuente dos veces.
  • 🧠 Re-rank neuronal: un cross-encoder ONNX local (ms-marco-MiniLM-L-6-v2, Apache-2.0) ejecutándose en el onnxruntime que Hound ya incluye para OCR. Ranking semántico estilo Exa, $0, en tu máquina. El modelo se descarga una vez (~80MB, en caché, no incluido). Las instalaciones ligeras recurren a consenso entre motores + orden por posición de motor.
  • 🎯 Consenso entre backends: una URL devuelta por varios índices independientes recibe un impulso de consenso: una señal de autoridad gratuita de la fusión, sin fetches extra. Cada resultado lleva relevance_score (0–1), fetch_relevance (alta/media/baja) y engines_consensus.
  • 🔍 find_similar: pasa url=; Hound obtiene una página que te gusta, deriva una consulta y re-rankea candidatos contra esa página fuente. El find-similar de Exa, local.
  • 🛡️ Nunca muerto: un quórum de diversidad espera al menos 3 backends que contribuyan antes de devolver, así el sesgo o límite de tasa de un solo backend no puede dominar. Un backend que hace CAPTCHA o limita tasa se aísla por 60s y los demás lo cubren. engine_blocked en la respuesta informa cuáles se enfriaron.
  • 📊 Filtros: site / exclude_sites (inclusión/exclusión de dominio), location / language / region (geo), page (0–10), freshness (día | semana | mes | año). Predeterminado 6 resultados. Un filtro de calidad descarta resultados de baja relevancia en lugar de rellenar al máximo con basura.
  • 📈 related_queries: consultas de seguimiento extraídas de títulos + fragmentos de resultados (sin LLM). Busca uno para refinar una consulta amplia.

La búsqueda es 100% HTTP: nunca toca el navegador (el navegador Patchright único es solo de smart_fetch).

🔧 Capa de Resiliencia de Motores de Búsqueda

Rascar motores públicos desde tu IP puede ser limitado por tasa o CAPTCHA. Ninguna herramienta local sin clave es a prueba de balas contra bloqueo sostenido sin proxy: Hound es honesto sobre eso, y luego hace el caso sin proxy tan fiable como sea posible para un solo usuario:

#MecanismoQué hace
1Sesión cálida persistente por motorUna sesión de larga duración reutilizada entre búsquedas: cookies + TLS se acumulan, así el motor ve un humano que regresa, no un bot nuevo. También más rápido.
2Ritmo por motor + jitterDentro de una búsqueda todos los motores se disparan en paralelo (gratis); solo ráfagas del mismo motor entre búsquedas reciben un pequeño retraso con jitter.
3Interruptor de circuito + enfriamientoUn motor bloqueado se enfría automáticamente (60s) mientras los demás siguen sirviendo.
4202 / 429 / 503 / 403 + Retry-AfterEl límite de tasa suave HTTP 202 de DDG se detecta; Retry-After se respeta.
5Rotación de huellaUn grupo de perfiles TLS reales de Chrome / Edge / Firefox / Safari, elegidos por solicitud.
6Grupo diverso + consenso10 backends en 6+ familias de índices se ejecutan en paralelo: ningún motor es un cuello de botella, y el acuerdo entre índices independientes es una señal de autoridad gratuita.
7HOUND_SEARCH_PROXY + grupo de rotaciónEnruta solicitudes de motor a través de uno o más proxies. Añade hasta 20 y Hound rota por llamada de búsqueda: el camino a prueba de balas para uso intensivo.

Misma postura de zona gris que SearXNG / ddgs; no se reclama cumplimiento de ToS de motores de búsqueda.

Rotación inteligente de proxies

La búsqueda local sin clave rasca motores públicos desde tu IP. El uso sostenido puede ser limitado por tasa. La rotación de proxies de Hound te permite añadir múltiples proxies y los recorre automáticamente: cada llamada de búsqueda usa el siguiente proxy, distribuyendo el tráfico entre todas las IPs. Los proxies no saludables (errores de conexión) se enfrían automáticamente por 60s y se omiten. Si todos los proxies están caídos, Hound recurre a conexión directa para que la búsqueda nunca falle.

Configuración en 30 segundos:

# Add proxies (supports http, https, socks5, socks5h + auth)
hound proxy add "http://user:pass@31.59.20.176:6754"
hound proxy add "socks5://1.2.3.4:1080"
hound proxy add "http://1.2.3.4:8080" "socks5://5.6.7.8:1080"  # bulk add

# List configured proxies (credentials redacted)
hound proxy list

# Remove by index or clear all
hound proxy remove 0
hound proxy clear

O configúralo vía variable de entorno (separada por comas):

export HOUND_SEARCH_PROXY="http://p1:8080,socks5://p2:1080,http://user:pass@p3:3128"

Máximo 20 proxies. La configuración persiste en ~/.hound/search_proxies.json. La rotación es por llamada de búsqueda (no por motor), por lo que todos los motores en una búsqueda comparten una IP, y la siguiente búsqueda rota al siguiente proxy. hound doctor muestra el estado de tu grupo de proxies.

Fuentes de proxy gratuitas probadas con Hound:

PlataformaRegistroResultado probadoRecomendado
WebshareCuenta gratuita (sin tarjeta)10 proxies dedicados, 100% de tasa de éxito, 6 paísesAltamente recomendado
ProxyScrapeNingunoMás de 2,000 proxies, ~10% funcionan, se actualizan cada minutoInicio rápido, sin cuenta

Los 10 proxies gratuitos de Webshare son dedicados (solo tuyos, no compartidos con otros scrapers), por eso logran un 100% de éxito. La lista pública de ProxyScrape es compartida y de corta duración, pero no requiere registro. SOCKS5 supera a HTTP para motores de búsqueda porque tuneliza HTTPS de manera confiable.

# ProxyScrape: grab working SOCKS5 proxies (no signup needed)
curl -sL "https://api.proxyscrape.com/v4/free-proxy-list/get?request=display_proxies&proxy_format=protocolipport&format=text" | grep "^socks5://" | head -5

# Add them to Hound's rotation pool
# (paste each one: hound proxy add "socks5://ip:port")

🔑 Trae tu propia clave (BYOK)

La búsqueda local sin claves de Hound funciona con cero configuración y nunca desaparece. Pero algunos usuarios tienen claves API de proveedores de búsqueda, ya sea de niveles gratuitos o planes de pago. Hound respeta eso: trae tus claves, y Hound las convierte en ciudadanos de primera clase con las mismas garantías de confiabilidad que sus propios motores sin claves.

Cuando las claves están configuradas, esos proveedores se convierten en la fuente de búsqueda principal y los motores locales sin claves de Hound se apagan por completo. Este es el punto central de BYOK: evitar golpear motores de búsqueda públicos desde tu IP. Los motores locales solo se ejecutan como respaldo de último recurso cuando cada clave API está agotada o limitada por tasa, para que la búsqueda nunca falle.

Hound usa un proveedor por búsqueda. Si tienes claves para múltiples proveedores, Hound elige el primero disponible, y solo cambia al siguiente proveedor cuando el primero está agotado. Esto significa que tu capacidad de búsqueda escala con cuántas claves configures para un solo proveedor, no con cuántos proveedores acumules.

Proveedores compatibles

ProveedorNivel gratuitoAutenticaciónFortaleza
Serper2,500 créditos únicosX-API-KEYSERP de Google, rápido
Tavily1,000 créditos/mesBearerResultados clasificados por IA
Exa1,000 búsquedas/mesx-api-keyBúsqueda neuronal
Firecrawl1,000 créditos/mesBearerBúsqueda web + rastreo
TinyFish30 req/min (~43K/mes)X-API-KeyAlto rendimiento

Mezcla y combina. Usa un proveedor, usa los cinco, cambia de proveedor cuando quieras. Hound los trata como motores paralelos en el mismo pipeline de clasificación.

Acumulación de claves

Agrega múltiples claves por proveedor. Hound las acumula en un grupo de rotación por proveedor:

  • 🔁 Rotación automática: cuando una clave alcanza un límite de tasa (HTTP 429), Hound cambia a la siguiente clave para el mismo proveedor en milisegundos. La búsqueda se completa sin que el agente sepa que una clave fue limitada por tasa.
  • Enfriamiento por clave: una clave limitada por tasa entra en un enfriamiento de 60 segundos. Una clave inválida (401/403) entra en un enfriamiento de 300 segundos. Hound sigue intentando con las claves restantes en el grupo.
  • 🛡️ Agotamiento elegante: solo cuando todas las claves de todos los proveedores están agotadas, Hound recurre a sus motores locales sin claves. La transición es fluida: el agente obtiene resultados de cualquier manera.
  • 📊 Prueba de claves en vivo: hound keys test hace una llamada API real por clave e informa cuáles son válidas, limitadas por tasa o inválidas. Sepa antes de buscar.

Esto significa que tu capacidad de búsqueda escala con cuántas claves configures, no con el límite de tasa de una sola clave.

Gestión de claves por CLI

# Add a key (stack multiple keys for the same provider)
hound keys add serper YOUR_SERPER_KEY
hound keys add serper ANOTHER_SERPER_KEY   # stacked, auto-rotated
hound keys add tavily YOUR_TAVILY_KEY

# List all configured keys (redacted for safety)
hound keys list

# Test all keys (live API call per key)
hound keys test

# Test a specific provider
hound keys test serper

# Remove a specific key by index (0-based)
hound keys remove serper 0

# Remove all keys for a provider
hound keys remove serper

# Remove all keys across all providers
hound keys clear

Las claves se almacenan en ~/.hound/search_keys.json con redacción al mostrar. El estado de rotación de claves es solo en memoria (se reinicia al reiniciar).

Variables de entorno

Para CI/CD, Docker o entornos efímeros, establece variables de entorno en lugar del archivo de configuración. Separadas por comas para múltiples claves:

export HOUND_SEARCH_SERPER_KEYS=key1,key2,key3
export HOUND_SEARCH_TAVILY_KEYS=key1
export HOUND_SEARCH_EXA_KEYS=key1
export HOUND_SEARCH_FIRECRAWL_KEYS=key1
export HOUND_SEARCH_TINYFISH_KEYS=key1

Las variables de entorno anulan el archivo de configuración para cualquier proveedor que tenga variables de entorno establecidas. Los proveedores sin variables de entorno recurren al archivo de configuración. Mezcla ambos: algunos proveedores en el archivo de configuración, otros mediante variables de entorno.

Integración con hound doctor

hound --doctor informa el estado de tu configuración BYOK: qué proveedores tienen claves, cuántas claves por proveedor y si alguna está en enfriamiento. Un comando para ver el panorama completo.


🌐 Fetch y anti-bot

smart_fetch intenta HTTP simple primero (~1s). Si el sitio bloquea HTTP o sirve un shell de JS, escala automáticamente a un navegador anti-detección Patchright con resolución de desafíos de Cloudflare. Dos niveles, nada que configurar.

  • 🛡️ Bypass integrado de Cloudflare: un único Chrome sigiloso se calienta al inicio. Se cierra después de 5 min de inactividad para liberar RAM (HOUND_BROWSER_IDLE_TIMEOUT, establece 0 para mantenerlo vivo para siempre) y se relanza en ~2s en el siguiente fetch. Las páginas se cierran después de cada fetch, la memoria inactiva se mantiene cerca de la línea base. Un navegador en total.
  • 🧬 Motor sigiloso (v11.1+): auto-detección de Chrome del sistema (channel=chrome para huella TLS real), perfiles de huella coherentes, parches en la capa JS (corrección de UA de HeadlessChrome, navigator.webdriver=undefined, ruido de canvas mediante intercepción de getImageData+toDataURL, API de permisos), simulación de comportamiento humano (curvas de mouse Bezier, scroll natural, tiempo de permanencia) y un solucionador de Cloudflare Turnstile con movimiento de mouse similar al humano. Consulta el benchmark de sigilo a continuación.
  • 🎯 Extracción enfocada en consulta: smart_fetch(url, focus="...") devuelve solo los bloques relevantes por BM25. Reduce el contexto 80%+ en páginas largas, sin re-fetch (se ejecuta post-caché). Re-pasa el mismo focus al paginar.
  • 🖱️ Interacción con la página: actions=[{click:'button.load-more'},{fill:{selector:'#q',text:'x'}},{press:'Enter'},{wait:500},{scroll:3},{wait_selector:'.item'}] para cargar más, formularios de búsqueda, paginación, scroll infinito. Fuerza sigiloso y omite la caché.
  • 🏷️ Metadatos en cada respuesta: título, descripción, nombre del sitio, tipo, imagen, URL canónica, idioma, hora de publicación, autor (OpenGraph + JSON-LD + canónico).
  • 🔗 Enlaces salientes: include_links=true llena response.links clasificados como citations (referencias de contenido principal, las que vale la pena seguir) / navigation / external + una pista de primary_source. Sigue la cadena de fuentes de una página en un solo paso.
  • 🐕 Reddit, optimizado: las URLs de Reddit se reescriben automáticamente a old.reddit.com (7× más pequeño) y saltan al navegador sigiloso. Los listados de subreddits se analizan en publicaciones estructuradas con anuncios promocionados filtrados.
  • 💾 Caché inteligente: SQLite (modo WAL), clave por URL + tipo de extracción + css_selector + pages. El contenido malo nunca se almacena en caché; un límite de tamaño expulsa lo más antiguo para que la caché de un agente de larga duración no pueda crecer sin límite. cache_ttl=0 fuerza contenido fresco.
  • 📐 Paginación: el contenido de más de 40KB se divide en fragmentos; la respuesta da next_offset para que el agente pagine con una llamada más (servida instantáneamente desde la caché).

🧬 Benchmark de sigilo

Resultados del mundo real de v11.1.0, probados contra objetivos anti-bot difíciles.

Sitios de prueba de detección (todas las comprobaciones pasan):

SitioQué pruebaResultado
bot.sannysoft.comUA de HeadlessChrome, webdriver, plugins, WebGL, permisos, SeleniumTODO PASA
CreepJSHash de canvas, huella de audio, detección de mentiras200 OK
BrowserScanDetección de CDP, análisis de huella200 OK
PixelscanDetección de headless, consistencia de huella200 OK

Sitios protegidos anti-bot (contenido extraído):

SitioProtecciónEstadoContenido
CanadianInsiderCloudflare Turnstile (el más difícil en benchmark de 31 sitios)20078 KB, título: "Canadian Insider"
MediumIntersticial de Cloudflare20093 KB, título: "Medium"
StackOverflowCloudflare2001.1 MB, página de pregunta completa
NowSecureDesafío de Cloudflare200180 KB, título: "nowsecure.nl"
GlassdoorDataDome200849 KB
RedditCloudflare lite2001 MB
Hacker NewsNinguno (línea base)20035 KB, título: "Hacker News"
GitHubNinguno (línea base)200523 KB

Nota: Google Search devuelve 429 (limitado por tasa) ya que usa su propia detección de bots independiente de Cloudflare. Esto es esperado.

Señales de sigilo verificadas:

SeñalValorEstado de detección
navigator.webdriverundefined (parcheado desde false)No detectado
navigator.userAgentChrome/150 (HeadlessChrome eliminado)No detectado
navigator.platformWin32 (Chrome real del sistema)No detectado
navigator.plugins.length5 (Chrome real del sistema)No detectado
window.chromeobject (presente)No detectado
Proveedor/renderizador WebGLGPU real (Intel UHD, Direct3D11)No detectado
Huella de canvasRuido por sesión (diferente en cada sesión)No detectado
Huella TLSChrome 150 JA4 real (Chrome del sistema)No detectado

Eficiencia de memoria (5 fetches secuenciales):

RSS disminuyó 3.5 MB en 5 fetches. Sin crecimiento de RAM. El comando CDP Memory.simulatePressureNotification activa el GC interno de Chrome + caída de caché después de cada fetch (~5ms, no disruptivo).


🕷️ Rastreo

smart_crawl recorre enlaces del mismo dominio en orden mejor-primero: las URLs descubiertas se puntúan por relevancia de enfoque + probabilidad de contenido (docs/guía/api potenciados, login/enviar/carrito penalizados) + profundidad superficial, para que las páginas de contenido se rastreen antes que la basura cuando el presupuesto es ajustado.

  • 🎯 Extracción adaptativa al contenido: artículo/docs → contenido principal de trafilatura; páginas de lista/índice (HN, agregadores, directorios) → una lista de enlaces estructurada * [title](url); shells de JS → detectados e informados honestamente.
  • 🗺️ Modo sitemap: options sitemap=true mapea todo el sitio desde sitemap.xml en UN fetch (lista completa de URLs + lastmod, sin BFS). sitemap='auto' lo usa si el sitio tiene uno, si no, recurre a BFS. Colapsa un rastreo de descubrimiento de cientos de páginas en una sola llamada.
  • 📍 discover_only=true: solo mapa de URLs (basado en BFS). Para sitios grandes prefiere sitemap=true en su lugar.
  • 🎯 focus='query': prioriza páginas relevantes dentro del presupuesto Y filtra por enfoque el contenido de cada página.
  • 📋 crawl_urls=[...]: rastreo selectivo de segunda fase de un subconjunto elegido (sin re-descubrimiento).
  • 🛡️ Deduplicación + alcance: URLs normalizadas para que /docs y /docs/ nunca se rastreen dos veces. Solo mismo dominio por defecto; path_include / path_exclude para definir el alcance.
  • ⏱️ Límites: max_pages (predeterminado 10), max_depth (predeterminado 2), max_total_chars (presupuesto de tokens), deadline_ms (tiempo total, predeterminado 120000). Cada página lleva content_ok + status + fetched_at; next_action te dice si el rastreo se detuvo temprano.

📄 PDF + OCR de PDF escaneado

smart_fetch detecta un PDF (por tipo de contenido o bytes mágicos %PDF) y lo extrae a markdown estructurado con pdfplumber (MIT): orden de lectura multicolumna, tablas reales como tablas markdown, encabezados por tamaño de fuente, párrafos sin guiones, un encabezado de metadatos y marcadores --- Page N ---.

  • 📑 table_of_contents: el esquema del PDF como [{level, title, page, end_page}]. Los PDFs sin marcadores obtienen un mapa de respaldo basado en encabezados. Pasa pages='23-31' para tomar una sección por rango y ahorrar tokens.
  • 🔍 Auto-OCR por corrupción CID (el truco insignia): los artículos académicos incrustan subconjuntos de fuentes sin un mapa Unicode, por lo que los extractores emiten basura (cid:71)(cid:302)... para figuras/diagramas/matemáticas. Pero los glifos se renderizan correctamente. Hound detecta páginas con basura CID, las renderiza mediante pypdfium2 y les aplica OCR con rapidocr, recuperando el texto real automáticamente.
  • 🖼️ PDFs escaneados / solo imagen (y páginas web solo imagen) también reciben OCR automático. Solo pip, sin binario del sistema, con [all].
  • 📊 quality_score (0.0–1.0) + content_ok honesto: confía más en el contenido del PDF cuanto más cerca esté la puntuación de 1.0.
  • 📎 password para PDFs cifrados; include_media=true para metadatos de imagen por página; una URL .pdf que devuelve un muro de pago/inicio de sesión se informa como auth_required.

📸 Captura de pantalla

screenshot captura una página como imagen. Solo para agentes multimodales: úsalo cuando el contenido se renderice como imágenes / canvas / imagen-de-texto o necesites el diseño visual. Los agentes solo de texto deben usar smart_fetch en su lugar. Una sesión de navegador sigilosa se gestiona automáticamente.


📊 Comparación: herramientas gratuitas

La mayoría de las herramientas web gratuitas para agentes hacen una cosa y se pierden el resto. Hound es la única que lo integra todo en un único servidor MCP local por $0, sin claves.

HoundCrawl4AIParallel SearchJina ReaderFirecrawl (OSS/gratis)
Precio$0 para siempre$0 (auto-alojado)gratis, con límite de tasagratis, con límite de tasa$0 auto-alojado / 1K gratis
Se ejecuta localmenteno (sus servidores)no (su API)auto-alojado: sí (Redis + Docker)
Búsqueda websí (local sin claves, 10 backends)nosí (remota)no
Rastreo profundosí (mejor-primero, sitemap, presupuesto)nonosí (nube)
Anti-bot / Cloudflareintegrado (Patchright)limitadosí (su infraestructura)ningunono por defecto
PDF → markdown estructuradosí (tablas, ToC, subconjunto)parcialnosí (nativo)sí (nube + OCR)
PDF escaneado / OCR de imágenessí (rapidocr, pure-pip)nononosí (nube de pago)
Interacción con la páginasí (actions)hooks (código)nonosí (nube)
Extracción enfocada en consultassí (focus, BM25)sí (filtro BM25)nonono
Señales de agentesí (content_ok/next_action/summary/relevance_score)nononono
instructions en tiempo de conexiónnononono
Servidor MCPsí (oficial)comunidadsí (oficial)sí (oficial)constrúyelo
Costo de tokens (tools/list)~2.7K (6 herramientas)varían/dn/dvaría (12 herramientas)

La versión corta: Crawl4AI rastrea bien pero no tiene búsqueda y tropieza con Cloudflare. Parallel Search es solo búsqueda remota, sin rastreo, y se ejecuta en sus servidores. Jina obtiene contenido pero limita la tasa y lo enruta a través de Jina. Firecrawl mantiene lo bueno detrás de la nube de pago. Hound es la única herramienta gratuita que combina búsqueda local sin claves, evasión integrada de Cloudflare, rastreo mejor-primero, OCR de PDF escaneado, interacción con la página y extracción enfocada en consultas en un único servidor local MIT: $0, sin cuentas, sin claves.

Cuándo tiene sentido un servicio de pago

Los scrapers de pago (Bright Data, ZenRows, Firecrawl de pago, Spider.cloud) pueden superar a las herramientas gratuitas en los anti-bots más difíciles (DataDome, Akamai, Cloudflare Turnstile) y a escala masiva, porque ejecutan grandes redes de proxies residenciales. Las APIs de búsqueda de pago (Exa, Tavily) ofrecen búsqueda neuronal alojada. Cuestan de $16 a $500+/mes, requieren cuentas + claves API, y envían tus consultas + contenido a través de sus servidores. Usa Hound para investigación web local de $0 sin cuentas ni claves; recurre a un servicio de pago solo para escala empresarial, sitios que Hound explícitamente no puede descifrar, o búsqueda neuronal alojada a escala.


📦 Instalación

pip install hound-mcp[all]          # recommended: fetch + crawl + keyless search + PDF + OCR + neural rerank
playwright install chromium
Instalación ligera (solo modo HTTP, sin navegador/OCR)
pip install hound-mcp               # fetch + crawl + keyless search (HTTP-only, no stealthy browser)

La instalación ligera funciona en todas las plataformas (incluido Termux/Android). Te da búsqueda sin claves multi-motor, fetch HTTP con escalado automático (solo nivel HTTP, sin navegador sigiloso), rastreo y caché. El escalado con navegador sigiloso y las capturas de pantalla requieren dependencias de navegador del extra [all].

Variables de entorno opcionales
VariablePropósito
HOUND_SEARCH_PROXYEnruta todas las solicitudes de motores de búsqueda a través de tu propio proxy (http://host:port, socks5://... o user:pass@host:port). Para uso sostenido de búsqueda intensa con un proxy rotativo / residencial. No es necesario para uso normal de un solo usuario.
HOUND_SEARCH_MIN_INTERVALSobrescribe el piso de ritmo por motor (segundos, flotante). 0 = usa los valores predeterminados integrados (DDG 1.2s, Bing 1.5s, Wikipedia 0.3s). Ajuste para usuarios avanzados.
HOUND_BROWSER_IDLE_TIMEOUTSegundos de inactividad del navegador antes de que el Chrome caliente se cierre por completo para liberar RAM (predeterminado 300, es decir, 5 min). El siguiente fetch lo relanza en ~2s. Establécelo en 0 para mantener Chrome vivo para siempre (comportamiento anterior).

No se necesitan claves API ni cuentas para nada: la búsqueda es sin claves y local.

Actualizar, revertir y reparar
hound -u          # update to latest (brick-proof: --no-deps, detached helper, self-heal)
hound --doctor    # health check: launcher, imports, metadata, deps, PyPI, repair script
hound --rollback  # reinstall the version from before the last update

hound -u está diseñado para nunca romper la instalación. Se actualiza con --no-deps (sin extras pesados que fallen a mitad de instalación); en Windows ejecuta pip en un helper separado después de que el launcher sale (Windows no puede sobrescribir un .exe en ejecución), liberando el launcher mediante el truco de renombrado. Si una pasada de pip deja la versión sin cambios, se auto-repara con una pasada de --force-reinstall --no-deps.

Si hound alguna vez se rompe (un pip manual fallido mientras un servidor tenía el launcher, una actualización a medias), la red de seguridad es un script independiente escrito fuera de site-packages en cada actualización:

python ~/.hound/repair.py   # stops hound, force-reinstalls hound-mcp from PyPI, verifies

Sobrevive porque no es parte del paquete hound-mcp, por lo que un pip uninstall fallido nunca lo elimina. hound --doctor diagnostica la instalación y te dice la solución correcta.


🤖 Dile a tu agente que lo instale

Pega esto en tu agente:

Install the Hound MCP server on this machine. Follow every step. Do not skip any.

1. Figure out which agent harness you are running on (OpenCode, Hermes, Pi, etc). Then find: (a) where the MCP config file lives, and (b) what format it expects for adding a local MCP server. Read the harness docs if needed. Do not guess.

2. Run: pip install hound-mcp[all]
   Then run: playwright install chromium (But only if it isnt installed already, verify first about its existence)
   If either fails, stop and tell the user.

3. Find the MCP config file from step 1 and back it up before editing. Add a new MCP server named "hound" with command "hound", no arguments, in the format your harness requires. No API keys or environment variables are needed (search is keyless and local).

4. Save the file. Tell the user to restart the agent. After restart, smart_fetch, smart_crawl, smart_search, screenshot, cache_clear and version should be available.
Para usuarios del agente Pi

Instala el servidor MCP de Hound, luego la extensión de Pi:

pip install hound-mcp[all]
pi install npm:@houndmcp/hound-mcp-pi

Sin claves API, sin archivo de configuración, sin adaptador MCP necesario. La extensión lanza hound como un subproceso singleton y registra las 6 herramientas (web_fetch, web_search, web_crawl, web_screenshot, cache_clear, hound_version) como herramientas nativas de Pi. Precalentado al inicio de la sesión. Ejecuta /reload para activarlo.

Actualización:

hound -u                              # update the MCP server
pi update npm:@houndmcp/hound-mcp-pi  # update the extension

La extensión verifica la sincronización de versiones al inicio de la sesión y advierte si la extensión y hound divergen en una versión mayor.

Para usuarios de Open WebUI (HTTP)

Open WebUI v0.6.31+ habla el transporte HTTP transmisible de forma nativa. Ejecuta Hound en modo HTTP y apunta Open WebUI hacia él, sin necesidad de proxy mcpo:

hound --http --host 127.0.0.1 --port 8765

Luego en Open WebUI agrega un servidor MCP con URL http://127.0.0.1:8765/mcp. Los clientes Stdio (Claude Code, Cursor, OpenCode, Pi, etc.) solo usan hound sin bandera.


⚠️ Problemas conocidos

Cosas que podrían sorprenderte si no las conoces:

ProblemaQué saber
Las claves API y credenciales de proxy se almacenan en texto plano~/.hound/search_keys.json y ~/.hound/search_proxies.json son JSON plano. Si estás en una máquina compartida, establece permisos de archivo o usa variables de entorno en lugar de los archivos de configuración.
robots.txt está desactivado por defectoHound verifica robots.txt solo cuando respect_robots=True se pasa a smart_fetch. Esto es intencional: muchos sitios deshabilitan todos los agentes que no son Googlebot, y respetar eso por defecto haría la herramienta inútil para la investigación. La función existe para usuarios que quieren cumplimiento.
El navegador Playwright no se instala con pip installhound-mcp[all] instala dependencias de Python, pero el binario de Chromium requiere un python -m playwright install chromium separado. hound doctor verifica esto e informa si falta. Sin él, Hound recurre a fetch solo HTTP (sin navegador sigiloso, sin renderizado JS, sin resolución de CAPTCHA).
La caché sirve contenido durante 1 hora por defectocache_ttl tiene un valor predeterminado de 3600 segundos. Para contenido fresco, pasa cache_ttl=0 para forzar un fetch en vivo. Las respuestas en caché muestran duration_ms: 0 en la salida.
No está diseñado para scraping masivoHound está diseñado para investigación agéntica: agentes de IA que obtienen páginas, buscan información, rastrean documentación. No es una herramienta de scraping masivo. Si lo usas para raspar miles de páginas a escala, encontrarás límites de tasa, topes de ancho de banda y muros anti-bot. Esos no son errores. Usa una plataforma de scraping dedicada para eso.

⚠️ Límites honestos

Ninguna herramienta gratuita puede hacerlo todo. Hound es transparente sobre lo que no puede:

LímiteQué sucede en su lugar
DataDome / Akamai / Cloudflare Turnstile (interactivo)No se evita. next_action le dice al agente que cambie de fuente en lugar de reintentar.
Límites de tasa de búsqueda / CAPTCHAsSe resuelven con diversidad: 10 backends sin claves se ejecutan en paralelo; un backend que limita la tasa/CAPTCHA se abre en circuito para un enfriamiento para que los demás lo cubran. hound proxy add (v12.4.0+) agrega hasta 20 proxies rotativos que ciclan por llamada de búsqueda, manteniendo tu IP real intacta.
Búsqueda neuronal / find_similarNecesita hound-mcp[all] (el reranker ONNX se ejecuta en el mismo onnxruntime que el OCR; el modelo se descarga una vez). Las instalaciones ligeras obtienen consenso entre backends + clasificación por posición de motor.
Sitios que requieren inicio de sesiónFuera de alcance (Hound hace interacción con la página, no sesiones autenticadas).
Shadow-DOM profundo / SPAs difícilesactions (scroll, clic, wait_selector) alcanza la mayor parte; la penetración profunda de shadow-DOM aún no está conectada.
YouTubeTexto mínimo.

Cuando un fetch o búsqueda falla, la respuesta dice exactamente por qué y qué intentar a continuación, para que el agente no desperdicie llamadas adivinando.


🪙 Costo de tokens

La mayoría de los servidores MCP cuestan 3–5K tokens solo por existir. Las 6 herramientas de Hound cuestan ~2.7K tokens en tools/list (medido con cl100k_base); los instructions en tiempo de conexión (~0.8K, el documento de orientación) se inyectan UNA VEZ en el apretón de manos, no se repiten en cada turno. Tu ventana de contexto es cara; Hound la respeta.


Si Hound te ahorra tiempo, ⭐ el repositorio: ayuda a otros a encontrarlo.

GitHub stars

MIT · Changelog · Issues · PyPI