Skip to main content
Glama

Web Search MCP

Servidor MCP de búsqueda web multi-fuente con fusión RRF, extracción de URL de 4 capas y seguimiento de salud del proveedor.

Estado

Fase 2: 5 proveedores (SearXNG/ddgr/Tavily/Exa/opencli-zh), fusión RRF, limpieza de fragmentos (reglas + compresión LLM opcional), herramientas search/extract/doctor, seguimiento de salud del proveedor con degradación automática.

Related MCP server: Prism

Instalación

Añadir a la configuración de Claude Desktop 3P (~/Library/Application Support/Claude-3p/configLibrary/<uuid>.json):

{
  "name": "web-search",
  "source": "user",
  "transport": "stdio",
  "command": "node",
  "args": ["/Users/hades/projects/web-search-mcp/bin/cli.js"],
  "env": {
    "SEARXNG_URL": "http://localhost:18443",
    "TAVILY_API_KEY": "...",
    "EXA_API_KEY": "...",
    "FIRECRAWL_API_KEY": "...",
    "WSM_LLM_PROVIDER": "haiku",
    "ANTHROPIC_API_KEY": "..."
  },
  "toolPolicy": {
    "search": "allow",
    "extract": "allow",
    "doctor": "allow"
  }
}

Una vez publicado en npm, reemplazar command: "node" + ruta absoluta con command: "npx" + args: ["-y", "@thehappyboy/web-search-mcp@latest"].

Configuración

Variables de entorno (o .env en el directorio de trabajo o ~/.agents/skills/web-search/.env):

Variable

Por defecto

Requerido

Descripción

SEARXNG_URL

http://localhost:18443

no

URL base de SearXNG

TAVILY_API_KEY

no

Habilita el proveedor Tavily

EXA_API_KEY

no

Habilita el proveedor Exa

FIRECRAWL_API_KEY

no

Habilita Firecrawl en el pipeline de extracción (capa 3)

WSM_LLM_PROVIDER

none

no

haiku para Anthropic, local para Ollama, none para deshabilitar

ANTHROPIC_API_KEY

no

Requerido cuando WSM_LLM_PROVIDER=haiku

WSM_LOCAL_LLM_URL

no

Requerido cuando WSM_LLM_PROVIDER=local

WSM_MAX_RESULTS

10

no

Máximo de resultados por defecto

WSM_TIMEOUT_MS

25000

no

Tiempo de espera global de búsqueda

Los proveedores sin claves se deshabilitan automáticamente. La herramienta de búsqueda sigue funcionando con lo que esté disponible. ddgr, opencli, defuddle se detectan automáticamente mediante which.

Herramientas

{
  query: string,              // required
  max_results?: number,       // 1-30, default 10
  category?: 'general'|'news'|'science',
  mode?: 'fast'|'quality',    // quality = LLM compression (top-5 results)
  providers?: string[],       // override default list (replace semantics)
}

Devuelve:

{
  count: number,
  took_ms: number,
  providers_used: string[],     // providers that returned ≥1 result
  providers_failed: string[],   // providers that errored OR returned []
  results: [{
    title, url, snippet,
    providers: string[],        // which sources surfaced this URL (multi-source corroboration)
    rrf_score: number,          // reciprocal rank fusion score
  }]
}

Enrutamiento automático de opencli-zh: Cuando la consulta contiene palabras clave como 知乎, 小红书, 雪球, B站, 微博, o patrones como 600519.SH, el proveedor opencli-zh enruta al adaptador correspondiente. Forzar un sitio específico con opencli_sites (pasado a través de la extensión de proveedores, ver orquestador).

extract

{
  url: string,                 // required
  timeout?: number,            // 5-60 seconds, default 20
}

Intenta 4 capas en orden hasta que una tenga éxito:

  1. defuddle — más rápido, sitios de texto puro

  2. adaptador opencli — para sitios conocidos (zhihu/xiaohongshu/xueqiu/bilibili/weibo)

  3. Firecrawl — páginas renderizadas con JS (requiere FIRECRAWL_API_KEY)

  4. navegador opencli — último recurso, utiliza Chrome real

Devuelve:

{
  content: string,             // markdown
  source: 'defuddle'|'opencli'|'firecrawl'|'opencli-browser'|'none',
  took_ms: number,
  error?: string,              // only when source === 'none'
}

doctor

{} // no arguments

Devuelve disponibilidad del proveedor + estadísticas de salud en tiempo de ejecución:

{
  providers: {
    searxng:    { available: true, url: "http://localhost:18443" },
    ddgr:       { available: true },
    tavily:     { available: true },
    exa:        { available: true },
    opencli_zh: { available: true },
    firecrawl:  { available: true },
    llm:        { available: true, provider: "haiku" },
  },
  health: {
    tavily: {
      total: 24,
      success: 15,
      fail: 9,
      success_rate: 0.625,
      last_failure: "2026-07-06T...",
      last_failure_reason: "timeout",
      recommendation: "healthy" | "insufficient" | "degraded",
    },
    // ...
  },
  version: "0.2.0",
}

Cuando la success_rate de un proveedor cae por debajo de 0.5 con al menos 20 muestras, se omite automáticamente (recomendación: degraded). Las estadísticas de salud están en memoria y se restablecen al reiniciar.

Desarrollo

npm test                  # all tests (unit + integration, 158 total)
npm run test:unit         # unit only
npm run test:integration  # integration only (needs searxng at SEARXNG_URL)
npm start                 # start stdio server

Arquitectura

MCP client (Claude/Cowork)
  │ JSON-RPC over stdio
  ▼
server.js ───┬── search tool ──→ search.js (orchestrator)
             ├── extract tool ─→ extract/index.js (4-layer pipeline)
             └── doctor tool ──→ health tracker snapshot

search.js:
  Provider layer (parallel, isolated failure)
    searxng | ddgr | tavily | exa | opencli-zh
  ▼
  Merger layer: normalize → dedup(URL) → RRF(k=60)
  ▼
  Cleaner layer: rules (default) | LLM compression (quality mode, top-5)
  ▼
  Health tracker records success/failure per provider

extract/index.js:
  defuddle → opencli adapter → Firecrawl → opencli browser
  (each layer returns null on failure, falls through to next)

Historial de fases

  • Fase 1 (15 tareas): 4 proveedores (searxng/ddgr/tavily/exa), fusión RRF, limpieza basada en reglas, stdio MCP, solo herramienta search

  • Fase 2 (8 tareas): proveedor opencli-zh, modo de calidad LLM, extract de 4 capas, doctor + degradación automática de salud

Licencia

MIT

Install Server
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • MCP server for Google search results via SERP API

  • Multi-engine search for AI agents. Trust scoring, local corpus, MCP-native. Self-hostable, BYOK.

  • Fast, intelligent web search and web crawling. New mcp tool: Exa-code is a context tool for coding

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/thehappyboy/web-search-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server