Web Researcher MCP
Servidor MCP de grado productivo para búsqueda web, extracción de contenido e investigación multifuente: 8 herramientas, 5 proveedores de búsqueda con conmutación por error automática, canal de scraping de 4 niveles. Binario único en Go.
Documentación
web-researcher-mcp
Tu asistente de investigación con IA que cita fuentes reales y se mantiene honesto.
Busca en toda la web o limítalo solo a los sitios en los que confías;
revistas médicas, bases de datos judiciales, medios de noticias, artículos académicos.
Analiza la fuente completa, no solo fragmentos. Enlaces que funcionan, citas en las que puedes confiar,
sin resultados pre-sintetizados inventados de jardines cerrados.
⭐ Si estás cansado de que la IA invente cosas, y web-researcher-mcp te ayuda, danos una estrella ⭐ — ayuda a que más equipos descubran el proyecto.
Comienza en 30 segundos
Usuarios de Python — uvx (sin compilar, cualquier sistema operativo):
# One-time: install uv (skip if you already have it)
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS/Linux (Windows: winget install astral-sh.uv)
claude mcp add --scope user web-researcher -- uvx web-researcher-mcp
uv obtiene el binario precompilado correcto para tu plataforma y lo ejecuta — sin Go, sin compilar, sin PATH manual. Apunta cualquier cliente MCP a uvx web-researcher-mcp. También funciona con uv tool install web-researcher-mcp o pip install web-researcher-mcp.
SDK de Python
from web_researcher_mcp import WebResearcherClient
async with WebResearcherClient() as client:
response = await client.web_search("CRISPR off-target effects 2024", num_results=5)
for r in response.results:
verified = await client.verify_citation(r.url)
print(r.title, "—", "✓" if verified.exists else "?")
Documentación completa: docs/PYTHON_CLIENT.md
Wrapper síncrono (para scripts y notebooks que no usan async):
with WebResearcherClient.sync() as client:
response = client.web_search("climate change 2024")
print(response.results[0].title)
macOS (Homebrew):
brew install zoharbabin/tap/web-researcher-mcp
claude mcp add --scope user web-researcher -- web-researcher-mcp
macOS / Linux (sin gestor de paquetes):
curl -fsSL https://raw.githubusercontent.com/zoharbabin/web-researcher-mcp/main/install.sh | sh
Windows (PowerShell):
powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/zoharbabin/web-researcher-mcp/main/install.ps1 | iex"
No se necesitan herramientas de desarrollo — cada método incluye el mismo binario firmado (los wheels de PyPI lo incluyen; los demás lo descargan y verifican su checksum) y lo coloca en tu PATH. Los instaladores de curl/PowerShell también lo registran automáticamente con Claude Code cuando el CLI de claude está presente; Homebrew instala el binario, así que ejecuta la línea de claude mcp add de arriba para conectarlo.
Instalación con un clic:
Los botones de Cursor / VS Code / LM Studio instalan la configuración de uvx sin configuración (tu editor te pedirá confirmación antes de agregarla; necesita uv — ver arriba). Ejecuta búsqueda web de DuckDuckGo sin clave de API — ideal para probar al instante; image_search/news_search y proveedores más completos necesitan una clave (2 min, ver Configuración). Claude Desktop: descarga el paquete de .mcpb para tu plataforma y haz doble clic (Configuración → Extensiones), o usa la línea de uvx de arriba.
¿Usas un cliente MCP diferente o quieres pasar claves de API? Consulta Conecta a tu asistente de IA para la configuración por aplicación, y Configuración para elegir un proveedor de búsqueda.
Tu IA ahora puede buscar en la web, leer artículos completos, encontrar artículos académicos, consultar patentes y realizar investigaciones de varios pasos — solo de las fuentes que elijas.
¿Por qué existe esto?
Perplexity se equivoca en sus citas más de un tercio de las veces. Enlaza a artículos que no existen, inventa DOIs y presenta spam de SEO con la misma confianza que la investigación revisada por pares. La búsqueda web de ChatGPT no es mucho mejor — no puede distinguir una publicación de blog de un documento judicial.
Si tu trabajo se cita, se publica, se presenta ante un tribunal o se muestra a un cliente — no puedes permitirte fuentes "probablemente reales".
Esta herramienta corrige la causa raíz: en lugar de buscar en toda la web y esperar, le dices a tu IA exactamente qué fuentes buscar. A esto lo llamamos "lentes de búsqueda" — listas curadas de sitios confiables para cada campo.
| Lo que obtienes | Lo que significa para ti |
|---|---|
| Lentes de búsqueda — elige tus fuentes por campo | Tu IA solo ve los sitios en los que confías (PubMed, SEC.gov, arXiv — no blogs aleatorios) |
| Herramientas de investigación para cada tipo de fuente | Artículos, patentes, presentaciones SEC, registros judiciales de EE. UU., datos económicos, noticias, páginas web, imágenes, lectura de texto completo, respuestas fundamentadas con citas, extracción estructurada e investigación profunda de varios pasos |
| Siempre tiene un respaldo | Múltiples motores de búsqueda trabajando juntos — si uno tiene problemas, los demás se activan automáticamente |
| Lee artículos completos | No solo te da fragmentos — extrae y lee páginas enteras, PDFs, documentos de Word, incluso transcripciones de YouTube e hilos de Hacker News |
| Citas reales, formateadas | Cada fuente viene con una cita APA/MLA adecuada y un enlace que realmente funciona |
| Tus consultas permanecen privadas | Se ejecuta en tu máquina — nadie ve lo que investigas. Ni nosotros, ni nadie. |
| Rastro documental | Cada búsqueda se registra para que puedas reproducir tu proceso de investigación meses después |
Funciona con Claude, Claude Desktop, Cursor y cualquier asistente de IA que admita uso de herramientas.
Quién usa esto
- Investigadores académicos — "Necesito una revisión de literatura con DOIs reales, no citas inventadas"
- Analistas de negocios — "Mi entregable necesita fuentes que un cliente pueda hacer clic y verificar"
- Abogados — "Si cito un caso que no existe, me multan con $50,000"
- Periodistas — "Necesito verificar registros gubernamentales y presentaciones judiciales, no resúmenes de Perplexity"
- Investigadores médicos — "Decisiones clínicas basadas en un blog de salud podrían dañar a alguien"
- Estudiantes de posgrado — "Pasé 3 horas rastreando una cita que mi IA inventó"
- Equipos empresariales — "Nuestra investigación competitiva no puede pasar por los servidores de un tercero"

Cómo se compara
| web-researcher-mcp | Perplexity | Scite.ai | Elicit | |
|---|---|---|---|---|
| Tú eliges qué fuentes se buscan | Sí (lentes integradas + personalizadas) | No | No | No |
| Inventa citas | Nunca — cada enlace es real | ~37% incorrectas | Rara vez (solo revistas) | Rara vez |
| Funciona en todos los campos | Sí — legal, médico, noticias, patentes, todo | Sí | Solo revistas | Solo artículos |
| Mantiene tu investigación privada | Sí — se ejecuta en tu máquina | No (ellos ven todo) | No | No |
| Funciona dentro de tu IA existente (Claude, Cursor, etc.) | Sí | No (aplicación separada) | Parcialmente | No (aplicación separada) |
| Puede leer artículos completos, no solo fragmentos | Sí — páginas, PDFs, documentos de Word, YouTube | No | No | Limitado |
| Costo | Gratis para siempre (código abierto) | $20/mes | $20/mes | $10-49/mes |
Cuándo usar qué
- Perplexity — Consultas rápidas e informales donde no necesitas citar tus fuentes
- Scite.ai / Elicit — Navegar una base de datos específica de artículos académicos
- web-researcher-mcp — Cualquier cosa donde tu reputación esté ligada a la investigación: trabajo de clientes, presentaciones judiciales, publicaciones, propuestas de subvenciones, decisiones médicas, periodismo
- Búsqueda integrada de Claude — Consultas rápidas y puntuales a mitad de conversación
Lo que tu IA puede hacer con esto

| Herramienta | Qué hace |
|---|---|
web_search | Busca en la web — opcionalmente restringido solo a las fuentes en las que confías mediante lentes |
scrape_page | Lee cualquier URL completa — páginas web, PDFs, documentos de Word, presentaciones, transcripciones de YouTube, hilos de Hacker News (leídos nativamente a través de la API de HN); admite mode: raw para fuente textual sin saneamiento (por ejemplo, inspeccionar JSON o HTML) |
search_and_scrape | Busca y luego lee los mejores resultados — con puntuación de calidad para destacar las fuentes más fiables |
image_search | Encuentra imágenes por tamaño, tipo, color o formato |
news_search | Busca noticias recientes con controles de fecha y filtrado por fuente |
academic_search | Encuentra artículos reales con DOIs reales — autores, recuentos de citas, enlaces de acceso abierto |
paper_fulltext | Obtén el texto completo de un artículo en una sola llamada desde su DOI, ID de Semantic Scholar o URL — sin necesidad de encadenar academic_search y luego scrape_page |
citation_graph | Recorre el vecindario de citas de un artículo — obras que cita y obras que lo citan, con señales de intención/influencia |
patent_search | Busca en oficinas de patentes (EE. UU., Europa, internacional) con códigos de clasificación |
filing_search | Busca en SEC EDGAR presentaciones de empresas públicas de EE. UU. (10-K, 10-Q, 8-K, …) — o extrae hechos estructurados XBRL de empresas |
legal_search | Busca opiniones judiciales y expedientes de EE. UU. a través de CourtListener — casos reales con citas reales |
econ_search | Consulta datos económicos — indicadores de desarrollo global del Banco Mundial, indicadores económicos de la OCDE, estadísticas europeas de Eurostat (todos sin clave), y series macro de EE. UU. de FRED (PIB, IPC, desempleo, tasas; requiere FRED_API_KEY) |
clinical_search | Busca en ClinicalTrials.gov — registros de ensayos clínicos con estado, fase, patrocinador y si los resultados están publicados (descubrimiento, no consejo médico) |
monarch_search | Consulta el grafo de conocimiento biomédico de Monarch Initiative — clasifica enfermedades y genes por similitud fenotípica, consulta entidades de enfermedad/gen/fenotipo, recorre asociaciones gen-enfermedad-fenotipo |
awesome_list_search | Busca en la API Awesome de ecosyste.ms listas "awesome-*" curadas por la comunidad sobre un tema de GitHub — cobertura estructurada y filtrable (estrellas, recuento de entradas curadas, temas) más allá de la búsqueda de texto libre |
local_search | Busca lugares físicos (restaurantes, tiendas, servicios, puntos de interés) por consulta de intención local — detalles y descripciones estructurados de POI. Requiere BRAVE_API_KEY |
brand_research | Investiga la identidad de marca completa de una empresa — colores (hex), logotipos, tipografía, tono de voz y redes sociales — desde cualquier dominio o nombre de empresa. Devuelve JSON estructurado para generación de contenido con IA. No se requiere clave API; la clave de BrandFetch es opcional para datos más ricos |
company_recon | Reconocimiento OSINT de empresas — SANs de registros de transparencia de certificados, inventario histórico de URLs de Wayback Machine, subdominios derivados y un resumen de la empresa mediante búsqueda web. Cada fase falla de forma suave y es seleccionable de forma independiente |
verify_citation | Verifica una cita antes de confiar en ella — ¿existe, coincide con un registro real y está retractada o es un enlace muerto? Evidencia, no un veredicto |
audit_bibliography | Audita una lista de referencias completa de una sola vez — pega un archivo CSL-JSON/RIS/BibTeX (o una sesión) y obtén marcadores por entrada y a nivel de corpus para citas retractadas, con enlaces muertos y no verificables |
verify_recommendation | Audita una lista de recomendaciones generada por IA (lista, ranking de productos) por autopromoción, conflictos de interés del autor, reputación del dominio y enlaces muertos — detecta selecciones manipuladas por GEO. Evidencia, no un veredicto |
archive_source | Captura una instantánea nueva de Internet Archive (Wayback Machine) de una URL mediante Save Page Now para que una fuente citada siga siendo verificable si la página cambia o desaparece después — devuelve URL de la instantánea + marca de tiempo (herramienta de escritura) |
sequential_search | Investigación profunda en varios pasos — tu IA recuerda lo que ya encontró y construye sobre ello |
get_research_session | Recupera una sesión de investigación después de una pérdida de contexto — continúa justo donde lo dejaste |
research_export | Exporta una sesión de investigación como informe compartible (markdown o JSON), con procedencia completa por paso |
format_bibliography | Convierte las fuentes recopiladas en una bibliografía formateada — APA, MLA, BibTeX, RIS o CSL-JSON (listo para Zotero/EndNote/Mendeley) |
research_panel | Haz la misma pregunta a un panel de LLMs configurados de forma independiente y compara las respuestas — consenso, contradicciones y puntos únicos de cada modelo, calculados de forma determinista, nunca suavizados por un modelo árbitro |
La mayoría de las herramientas anteriores están siempre disponibles. Algunas se activan solo cuando está presente el proveedor o la configuración correcta: citation_graph y research_panel requieren al menos un proveedor de respaldo configurado; filing_search requiere EDGAR_CONTACT_EMAIL; local_search requiere BRAVE_API_KEY. Los operadores también pueden habilitar herramientas opcionales con consentimiento (análisis por usuario, memoria a largo plazo, espacios de trabajo compartidos, monitoreo de consultas guardadas) que aparecen solo cuando su función está activada — consulta docs/TOOLS.md para la lista de herramientas autoritativa verificada por CI y los esquemas completos.
Plantillas de investigación listas para usar
El servidor también incluye plantillas de prompt guiadas que tu asistente de IA puede cargar con un clic — lo guían a través de un proceso probado de varios pasos para que no tengas que escribir cada instrucción:
| Plantilla | Qué guía a tu IA a hacer |
|---|---|
comprehensive-research | Realiza una inmersión profunda estructurada y de varios pasos sobre un tema |
fact-check | Verifica una afirmación contra múltiples fuentes independientes |
competitive-analysis | Evalúa una empresa y su mercado (noticias, patentes, web) |
literature-review | Revisa sistemáticamente la literatura académica sobre un tema |
brand-guidelines | Investiga una marca y produce dirección creativa específica para el caso de uso (página de destino, correo electrónico, brief de video) — llama a brand_research e interpreta el JSON estructurado por ti |
company-recon | Reconocimiento OSINT profundo de una empresa — mapea infraestructura, presentaciones, personal y huella pública |
curriculum-research | Investiga la cobertura del plan de estudios de un tema, el clima institucional y el contexto de libertad académica — llama a web_search con la lente curriculum |
En la mayoría de las aplicaciones de IA, estos aparecen donde eliges un prompt o el comando "/". El servidor expone recursos de estado en vivo (stats://tools, stats://sessions, stats://rate-limits, stats://providers), un catálogo de lentes (lenses://catalog), diagnósticos (diagnostics://errors/recent, diagnostics://health) y un almacén de artefactos de gran tamaño (research://artifact/{id}) para que tú — o tu IA — puedan verificar el uso, los límites y qué proveedores están activos. Consulta docs/DEPLOYMENT.md para la lista completa.
Inicio rápido
Opción 1: Homebrew (macOS / Linux — recomendado)
brew install zoharbabin/tap/web-researcher-mcp
claude mcp add --scope user web-researcher -- web-researcher-mcp
Homebrew gestiona la confianza, las actualizaciones y el PATH por ti — sin advertencias de firma.
Opción 2: Instalación con un comando (cualquier sistema operativo — sin necesidad de herramientas de desarrollo)
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/zoharbabin/web-researcher-mcp/main/install.sh | sh
Windows (PowerShell):
powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/zoharbabin/web-researcher-mcp/main/install.ps1 | iex"
Descarga el binario, verifica su suma de verificación SHA-256 contra la versión firmada, lo coloca en tu PATH y lo registra con Claude Code si está instalado. Personaliza la ubicación de instalación:
INSTALL_DIR=/opt/tools curl -fsSL https://raw.githubusercontent.com/zoharbabin/web-researcher-mcp/main/install.sh | sh
Otros métodos de instalación
AUR (Arch Linux):
# Using any AUR helper (yay, paru, etc.)
yay -S web-researcher-mcp
O manualmente: git clone https://aur.archlinux.org/web-researcher-mcp.git && cd web-researcher-mcp && makepkg -si
Nix / NixOS:
# Run without installing
nix run github:zoharbabin/web-researcher-mcp
# Add to your flake inputs
nix profile install github:zoharbabin/web-researcher-mcp
Consulta packaging/nix/flake.nix para el uso del módulo NixOS.
Continue.dev:
Añade a tu ~/.continue/config.json de Continue:
{
"mcpServers": {
"web-researcher": {
"command": "uvx",
"args": ["web-researcher-mcp"]
}
}
}
O copia packaging/continue/config.json como punto de partida.
WinGet (Windows):
winget install zoharbabin.web-researcher-mcp
Scoop (Windows):
scoop bucket add zoharbabin https://github.com/zoharbabin/scoop-bucket
scoop install web-researcher-mcp
Chocolatey (Windows):
choco install web-researcher-mcp
Homebrew Cask (macOS — binario firmado con Developer ID + notarizado):
brew install --cask zoharbabin/tap/web-researcher-mcp
El cask incluye el binario darwin notarizado (limpio para Gatekeeper). La mayoría de los usuarios quieren la fórmula anterior (brew install zoharbabin/tap/web-researcher-mcp), a la que resuelve el nombre simple; pasa --cask explícitamente para el artefacto notarizado.
Instalación con Go (si tienes Go):
go install github.com/zoharbabin/web-researcher-mcp/cmd/web-researcher-mcp@latest
claude mcp add --scope user web-researcher -- web-researcher-mcp
Docker:
# STDIO mode needs -i so the container's stdin stays attached for MCP JSON-RPC
docker run -i --rm \
-e GOOGLE_CUSTOM_SEARCH_API_KEY=YOUR_KEY \
-e GOOGLE_CUSTOM_SEARCH_ID=YOUR_CX \
docker.io/zoharbabin/web-researcher-mcp:latest
Compilar desde el código fuente:
git clone https://github.com/zoharbabin/web-researcher-mcp.git
cd web-researcher-mcp
go build -o web-researcher-mcp ./cmd/web-researcher-mcp
Conéctate a tu asistente de IA
El script de instalación se registra automáticamente con Claude Code. Para otras aplicaciones, añade a tu archivo de configuración de IA:
{
"mcpServers": {
"web-researcher": {
"command": "web-researcher-mcp",
"env": {
"GOOGLE_CUSTOM_SEARCH_API_KEY": "YOUR_GOOGLE_API_KEY",
"GOOGLE_CUSTOM_SEARCH_ID": "YOUR_SEARCH_ENGINE_ID"
}
}
}
}
Cualquier proveedor funciona — elige uno y establece su clave. Por ejemplo, Brave (sin necesidad de claves de Google):
{
"mcpServers": {
"web-researcher": {
"command": "web-researcher-mcp",
"env": {
"SEARCH_PROVIDER": "brave",
"BRAVE_API_KEY": "YOUR_BRAVE_API_KEY"
}
}
}
}
Cambia a cualquier proveedor de la tabla de Configuración estableciendo SEARCH_PROVIDER y la clave de ese proveedor. Listo — tu asistente de IA ahora tiene acceso a todas las herramientas de investigación.
Configuración

No se requiere clave API. DuckDuckGo es el respaldo integrado de configuración cero — instala y listo. Para aumentar la calidad de los resultados y desbloquear la búsqueda de imágenes/noticias, añade cualquiera de los proveedores a continuación. Todos son opcionales e intercambiables — elige el que ya uses o prefieras; el servidor los trata por igual.
Proveedores de búsqueda
Establece SEARCH_PROVIDER=<name> y proporciona la clave de ese proveedor. Cada proveedor funciona con lentes de búsqueda, y cualquiera de ellos se puede combinar para conmutación por error automática (consulta Proveedores de búsqueda).
| Proveedor | SEARCH_PROVIDER | Variable(s) de clave | Obtener una clave |
|---|---|---|---|
| DuckDuckGo | duckduckgo | ninguna | Integrado — configuración cero |
| Google PSE | google | GOOGLE_CUSTOM_SEARCH_API_KEY + GOOGLE_CUSTOM_SEARCH_ID | consola en la nube + motor |
| Brave | brave | BRAVE_API_KEY | brave.com/search/api |
| Serper | serper | SERPER_API_KEY | serper.dev |
| SearchAPI.io | searchapi | SEARCHAPI_API_KEY | searchapi.io |
| You.com | youcom | YOUDOTCOM_API_KEY | you.com/docs/api-reference/search/v1-search |
| SearXNG | searxng | SEARXNG_URL | autoalojado |
| Tavily | tavily | TAVILY_API_KEY | app.tavily.com |
| Exa | exa | EXA_API_KEY | dashboard.exa.ai |
| Hacker News | hackernews | ninguna | Integrado — configuración cero (índice HN Algolia) |
reddit | ninguna | Integrado — configuración cero (RSS público) | |
| Bluesky | bluesky | ninguna | Integrado — configuración cero (API pública del Protocolo AT) |
| GitHub | github | ninguna (GITHUB_TOKEN opcional, aumenta el límite de tasa) | Integrado — configuración cero (API pública de búsqueda REST) |
| Xquik | xquik | XQUIK_API_KEY | dashboard.xquik.com |
Cada proveedor tiene su propio nivel gratuito, flujo de registro y combinación de capacidades (imágenes, noticias, actualidad). Consulta docs/PROVIDERS.md para una comparación completa (clasificación de índices, matriz de capacidades, guía de selección rápida) y docs/API_SETUP.md para la configuración de claves paso a paso. Configura más de uno y el servidor conmuta por error automáticamente — consulta Proveedores de búsqueda.
Cuando SEARCH_PROVIDER no está establecido, el servidor usa Google si sus claves están presentes y, de lo contrario, recurre al proveedor DuckDuckGo de configuración cero — por lo que siempre funciona desde el primer momento, con o sin claves.
Búsqueda académica (Opcional — sin necesidad de registro)
Los proveedores de búsqueda académica (OpenAlex, CrossRef) aceptan un correo electrónico de contacto para desbloquear acceso más rápido a través del grupo de cortesía — sin registro, solo un correo. Consulta docs/API_SETUP.md para la configuración y docs/DEPLOYMENT.md para la referencia completa de variables.
Con estos establecidos,
academic_searchdevuelve artículos reales con DOIs, autores, recuentos de citas y enlaces PDF de acceso abierto. Sin ellos, sigue funcionando pero usa la búsqueda web como respaldo.
Búsqueda de patentes (Opcional)
Los proveedores de patentes (EPO, USPTO, The Lens) requieren claves API para datos estructurados de patentes. Consulta docs/API_SETUP.md para la configuración paso a paso y docs/DEPLOYMENT.md para la referencia completa de variables.
Con estas,
patent_searchdevuelve datos estructurados de patentes con códigos de clasificación, fechas e inventores. Sin ellas, recurre a la búsqueda web.
Avanzado: modo HTTP, OAuth y todos los demás ajustes
El modo HTTP, OAuth, límites de tasa, caché, scraping y ajustes de observabilidad están documentados en docs/DEPLOYMENT.md.
Bajo el Capó
Arquitectura (para desarrolladores y contribuidores)
El mapa completo por paquete y el diagrama en capas (transportes MCP → despacho de herramientas → capa de servicios → infraestructura) viven en ARCHITECTURE.md — mantenidos en un solo lugar para evitar divergencias.
Principios de diseño (para desarrolladores)
- Cero estado global — todas las dependencias se inyectan mediante constructores
- Orientado a interfaces — cada dependencia externa detrás de una interfaz para pruebas e intercambio
- Concurrencia acotada — semáforos explícitos para llamadas API externas
- Defensa en profundidad — protección SSRF, límites de tasa, saneamiento de contenido en cada capa
- Fallar alto — los errores se devuelven, nunca se tragan; validación en los límites
Proveedores de Búsqueda
Tú eliges qué motor de búsqueda impulsa tu investigación. Todos funcionan con lentes.
| Proveedor | Web completa | Imágenes | Noticias | Notas |
|---|---|---|---|---|
| DuckDuckGo | Sí | — | — | Predeterminado sin configuración (no requiere clave API); limitado por tasa para uso intensivo |
| Google PSE | Sí | Sí | Sí | Motor de Búsqueda Programable; nivel gratuito: 100 consultas/día |
| Brave Search | Sí | Sí | Sí | Índice independiente; nivel gratuito disponible |
| Serper.dev | Sí | Sí | Sí | Resultados idénticos a Google |
| SearXNG | Sí | Sí | Sí | Autoalojado, centrado en privacidad, despliegues aislados |
| SearchAPI.io | Sí | Sí | Sí | API unificada con múltiples motores backend |
| Tavily | Sí | — | Sí | Búsqueda para agentes de IA; contenido limpio y listo para LLM |
| Exa | Sí | — | Sí | Búsqueda neuronal/semántica; también respalda academic_search y el nivel de scraping pago opcional |
| Hacker News | Solo HN | — | Sí | Sin configuración (índice HN Algolia); busca hilos de HN, no toda la web |
| Solo Reddit | — | Sí | Sin configuración (RSS público); busca publicaciones de Reddit, no toda la web | |
| Bluesky | Solo Bluesky | — | — | Sin configuración (API pública AT Protocol); busca publicaciones de Bluesky, no toda la web |
| GitHub | Solo GitHub | — | Sí | Sin configuración (API REST pública de búsqueda); busca issues/PRs, no toda la web |
Múltiples Proveedores (recomendado)
Configura múltiples motores de búsqueda para que si uno tiene problemas, tu investigación no se detenga:
export SEARCH_ROUTING=brave,google,serper
Si Brave está caído, automáticamente prueba Google. Si Google está limitado por tasa, pasa a Serper. Tu investigación simplemente funciona.
Consulta docs/PROVIDERS.md para una comparación completa de proveedores (clasificación de índices, capacidades, niveles gratuitos) y docs/DEPLOYMENT.md para opciones de enrutamiento avanzadas (enrutamiento por tema, proveedores específicos de patentes, etc.).
Proveedor Único
Si solo tienes una clave API de búsqueda, eso también funciona — solo configúrala y listo.
Ejemplos de Configuración de Proveedores
Enrutamiento multi-proveedor (recomendado):
export SEARCH_ROUTING=brave,google,serper
export BRAVE_API_KEY=BSAxxxxxxxxxx
export GOOGLE_CUSTOM_SEARCH_API_KEY=AIza...
export GOOGLE_CUSTOM_SEARCH_ID=017...
export SERPER_API_KEY=...
Proveedor único — Brave Search:
export SEARCH_PROVIDER=brave
export BRAVE_API_KEY=BSAxxxxxxxxxx
Proveedor único — SearXNG (autoalojado, centrado en privacidad):
export SEARCH_PROVIDER=searxng
export SEARXNG_URL=http://localhost:8080
Proveedor único — Exa:
export SEARCH_PROVIDER=exa
export EXA_API_KEY=...
Proveedor único — Google PSE:
export SEARCH_PROVIDER=google
export GOOGLE_CUSTOM_SEARCH_API_KEY=AIza...
export GOOGLE_CUSTOM_SEARCH_ID=017...
Cualquier proveedor de la tabla de Configuración funciona de la misma manera — establece SEARCH_PROVIDER y su(s) clave(s).
Lentes de Búsqueda
Las lentes de búsqueda te permiten controlar qué sitios web tu IA puede buscar. En lugar de buscar en toda la web (y obtener blogs, spam y basura generada por IA), una lente restringe los resultados solo a las fuentes en las que confías para ese tema.
Lentes Integradas
| Lente | Enfoque |
|---|---|
docs | Solo documentación oficial y referencias API |
academic | Servidores de preprints, repositorios, revistas de acceso abierto |
academic-extended | Servidores de preprints, agregadores de OA y repositorios más allá de los índices de revistas principales |
biomed | Fuentes de conocimiento biomédico sobre enfermedades raras — portales de ontologías, bases de datos gen-enfermedad, registros curados de enfermedades raras |
clinical | Ensayos clínicos, seguridad de medicamentos, medicina basada en evidencia |
curriculum | Datos de currículos académicos, clima de libertad de expresión institucional y estadísticas globales de educación |
security | CVEs, avisos, investigación de vulnerabilidades |
investigative_records | Registros públicos, presentaciones corporativas, FOIA |
programming | Documentación de código, tutoriales, Q&A |
programming-goggle | Resultados centrados en desarrolladores re-clasificados por el Goggle de Programación de Brave — muestra documentación, repositorios y contenido técnico autoritativo (requiere Brave) |
devops | Infraestructura y operaciones — Kubernetes, Docker, Terraform, nube, CI/CD |
news | Eventos actuales, periodismo |
tech | Industria tecnológica |
legal | Derecho, casos, estatutos |
medical | Salud, medicina |
finance | Mercados, presentaciones |
science | Investigación, artículos |
government | Políticas, regulaciones |
osint | Inteligencia de código abierto — registros públicos, registros corporativos, huella social, infraestructura |
awesome-lists | Listas "awesome-*" curadas por la comunidad en GitHub — colecciones de herramientas y recursos revisadas por PR en cada dominio |
También puedes crear tus propias lentes para cualquier campo — solo lista los dominios en los que confías.
Cómo funciona
Cuando tú (o tu IA) usas una lente, los resultados provienen solo de los sitios en esa lente. Por ejemplo, usar la lente medical significa que tu IA busca en PubMed, WHO, NIH y otras fuentes clínicas — nunca blogs de salud o anuncios de suplementos.
Tu IA usa lentes automáticamente cuando se lo pides. Por ejemplo: "Busca hallazgos recientes sobre inhibidores de SGLT2 usando la lente clínica."
Creando Tu Propia Lente
Crea un directorio para tus lentes personalizadas y agrega un archivo JSON para cada una:
{
"name": "my-industry",
"description": "Only searches sources I trust for my field",
"domains": [
"trusted-source.com",
"industry-journal.org",
"official-database.gov"
],
"cx": "",
"routing": ""
}
Luego apunta el servidor a tu directorio de lentes:
export CUSTOM_LENSES_PATH=/path/to/my-lenses
Tu IA ahora tendrá my-industry como una lente disponible. Las lentes personalizadas se cargan después del conjunto integrado — una lente personalizada con el mismo name que una integrada la sobrescribe. Puedes agregar hasta ~10 dominios por lente.
Opciones avanzadas (opcional — la mayoría de los usuarios pueden ignorarlas):
- cx — Si tienes un Motor de Búsqueda Programable de Google con hasta 5,000 dominios, coloca el ID del motor aquí
- routing — Fuerza esta lente a usar un proveedor de búsqueda específico (por ejemplo,
"google")
Privacidad y Seguridad
Tus consultas de investigación van directamente desde tu máquina al proveedor de búsqueda que elegiste. Nunca pasan por nuestros servidores (no tenemos servidores). La herramienta se ejecuta completamente en tu computadora.
Detalles técnicos de seguridad (para equipos empresariales / de cumplimiento)
- Protección SSRF — bloquea acceso a redes internas, endpoints de metadatos en la nube, ataques de rebinding DNS
- OAuth 2.1 (modo HTTP) — validación de tokens JWKS, aislamiento por inquilino, validación de audiencia/emisor
- Límites de tasa (modo HTTP) — límites por inquilino + globales para proteger APIs ascendentes
- Saneamiento de contenido — HTML limpiado mediante política de lista blanca, deduplicación, puntuación de calidad
Para el modelo de amenazas completo, consulta docs/SECURITY.md.
Configuración para Cada Aplicación de IA
Claude Code
Agrega a tu configuración MCP (~/.claude.json). Establece SEARCH_PROVIDER y la clave correspondiente para el proveedor que uses (consulta la tabla de Configuración) — este ejemplo usa Google:
{
"mcpServers": {
"web-researcher": {
"command": "/path/to/web-researcher-mcp",
"env": {
"SEARCH_PROVIDER": "google",
"GOOGLE_CUSTOM_SEARCH_API_KEY": "AIza...",
"GOOGLE_CUSTOM_SEARCH_ID": "017..."
}
}
}
}
Claude Desktop
Agrega a ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"web-researcher": {
"command": "/path/to/web-researcher-mcp",
"env": {
"GOOGLE_CUSTOM_SEARCH_API_KEY": "AIza...",
"GOOGLE_CUSTOM_SEARCH_ID": "017..."
}
}
}
}
Cursor
Agrega a .cursor/mcp.json en la raíz de tu proyecto:
{
"mcpServers": {
"web-researcher": {
"command": "/path/to/web-researcher-mcp",
"env": {
"GOOGLE_CUSTOM_SEARCH_API_KEY": "AIza...",
"GOOGLE_CUSTOM_SEARCH_ID": "017..."
}
}
}
}
Modo HTTP (Equipos / Servidor Compartido)
Para equipos que quieren una instancia compartida a la que todos se conecten:
PORT=3000 \
OAUTH_ISSUER_URL=https://auth.example.com \
OAUTH_AUDIENCE=https://api.example.com \
./web-researcher-mcp
Luego conecta cualquier aplicación de IA a http://localhost:3000/mcp/.
Ejemplo de Docker Compose
services:
web-researcher:
image: zoharbabin/web-researcher-mcp
ports:
- "3000:3000"
environment:
PORT: "3000"
SEARCH_PROVIDER: brave
BRAVE_API_KEY: ${BRAVE_API_KEY}
Nota: El comportamiento de la herramienta es idéntico en todos los modos de conexión (STDIO y HTTP). Las únicas diferencias son la autenticación (HTTP requiere OAuth) y los límites de tasa (HTTP aplica límites por inquilino; STDIO solo tiene cuotas de API ascendentes). Consulta docs/DEPLOYMENT.md para detalles.
Rendimiento
Las búsquedas regresan en menos de un segundo. Los resultados previamente vistos se almacenan en caché para que las repeticiones sean instantáneas. La extracción completa de artículos funciona en el 95%+ de la web — incluidos sitios que intentan bloquear bots. Los sitios con mucho JavaScript obtienen un navegador real detrás de escena (automático, sin configuración necesaria).
Desarrollo
go build -o web-researcher-mcp ./cmd/web-researcher-mcp # Build
go test -race ./... # Test (with race detector)
make verify # Full CI gate (see Makefile for steps)
Las herramientas lint, gosec y govulncheck están fijadas como directivas de herramienta go.mod, por lo que make verify las ejecuta en las versiones exactas que usa CI (sin instalaciones globales necesarias). La protección de ramas requiere que las verificaciones Lint, Test, Security y E2E pasen.
Consulta CONTRIBUTING.md para el flujo de trabajo completo de desarrollo, guía de estilo de código y proceso de PR.
Solución de Problemas
El servidor inicia pero las herramientas fallan con errores de "clave API"
El servidor inicia incluso sin credenciales (para permitir el handshake de MCP). Establece tus claves API en el bloque env de la configuración de tu cliente MCP, no en tu perfil de shell.
Algunas páginas regresan vacías
Para sitios con mucho JavaScript, la herramienta usa un navegador real (Chromium). Con la instalación binaria, se descarga automáticamente en el primer uso (~200MB). Si ya tienes Chrome instalado, establece CHROME_PATH para apuntar a él. La imagen de Docker incluye Chromium integrado (preajuste CHROME_PATH), por lo que el renderizado de JavaScript funciona de inmediato — sin descarga.
La caché sirve resultados obsoletos después de una actualización
La caché de disco vive en el directorio de caché de tu sistema operativo (por ejemplo, ~/Library/Caches/web-researcher-mcp/ en macOS, ~/.cache/web-researcher-mcp/ en Linux). Elimina ese directorio para limpiarlo, o establece CACHE_DIR a una ruta personalizada.
Alcanzando límites de búsqueda (errores 429)
Si el nivel gratuito de tu proveedor se agota (por ejemplo, Google PSE permite 100 búsquedas/día):
- Cambia a un proveedor diferente — establece
SEARCH_PROVIDERa cualquier otra opción (consulta Configuración); cada uno tiene su propio nivel gratuito - Configura múltiples proveedores (por ejemplo,
SEARCH_ROUTING=brave,google) — si uno está limitado por tasa, automáticamente pasa al siguiente - O mejora el plan de tu proveedor
macOS: "Failed to reconnect" / error -32000 después de una actualización manual
Esto ocurre solo si reemplazaste el binario copiando bytes nuevos sobre el archivo existente en su lugar (cp new /path/to/web-researcher-mcp). En Apple Silicon, macOS almacena en caché la firma de código ad-hoc del binario contra el archivo, y sobrescribirlo en su lugar puede hacer que el siguiente lanzamiento se elimine antes de que comience. Los instaladores oficiales (Homebrew, el comando único install.sh y el plugin de Claude Code) evitan esto instalando en un archivo nuevo. Para corregir una instalación manual, reemplázalo limpiamente y vuelve a firmar:
rm -f /path/to/web-researcher-mcp
cp /path/to/new-build /path/to/web-researcher-mcp
codesign --force -s - /path/to/web-researcher-mcp # ad-hoc re-sign
Luego vuelve a conectar tu cliente. (Volver a ejecutar install.sh hace esto correctamente por ti).
Contribuciones
Las contribuciones son bienvenidas. Consulta CONTRIBUTING.md para conocer las pautas de estilo de código, el flujo de trabajo de desarrollo y cómo enviar solicitudes de extracción.
Documentación
| Documento | Descripción |
|---|---|
| ARCHITECTURE.md | Decisiones de diseño, pila tecnológica, dependencias |
| CONTRIBUTING.md | Configuración de desarrollo, estilo de código, flujo de trabajo de PR |
| docs/TOOLS.md | Especificaciones de herramientas y esquemas de parámetros |
| docs/EXAMPLES.md | Ejemplos de uso con llamadas de herramientas JSON |
| docs/API_SETUP.md | Configuración de claves API del proveedor de búsqueda para todos los proveedores |
| docs/SECURITY.md | Modelo de amenazas, SSRF, autenticación, cumplimiento (SOC2/GDPR/FedRAMP) |
| docs/PRIVACY.md | Qué datos van a dónde, procesadores de terceros, retención |
| docs/DEPLOYMENT.md | Compilación, Docker, Kubernetes, configuraciones de cliente, escalado |
| docs/PYTHON_CLIENT.md | SDK de Python — referencia de WebResearcherClient, envoltorio síncrono, instalación |
| docs/LESSONS_LEARNED.md | Historia de migración de Node.js a Go y lecciones aprendidas |
| docs/SESSION_PERSISTENCE.md | Cómo sobreviven las sesiones a la pérdida de contexto — diseño, flujo de datos, citas |
| docs/MIGRATION.md | Migración desde el obsoleto google-researcher-mcp |
Licencia
Construido por Zohar Babin, con Go y el Model Context Protocol