Skip to main content
Glama

Web Search MCP

Multi-Source-Websuche MCP-Server mit RRF-Fusion, 4-schichtiger URL-Extraktion und Provider-Statusüberwachung.

Status

Phase 2: 5 Provider (SearXNG/ddgr/Tavily/Exa/opencli-zh), RRF-Fusion, Snippet-Bereinigung (Regeln + optionale LLM-Kompression), search/extract/doctor-Tools, Provider-Statusüberwachung mit automatischer Degradierung.

Related MCP server: Prism

Installation

In Claude Desktop 3P-Konfiguration hinzufügen (~/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"
  }
}

Nach der Veröffentlichung auf npm ersetzen Sie command: "node" + absoluten Pfad durch command: "npx" + args: ["-y", "@thehappyboy/web-search-mcp@latest"].

Konfiguration

Umgebungsvariablen (oder .env im aktuellen Arbeitsverzeichnis oder unter ~/.agents/skills/web-search/.env):

Variable

Standard

Erforderlich

Beschreibung

SEARXNG_URL

http://localhost:18443

nein

SearXNG-Basis-URL

TAVILY_API_KEY

nein

Aktiviert den Tavily-Provider

EXA_API_KEY

nein

Aktiviert den Exa-Provider

FIRECRAWL_API_KEY

nein

Aktiviert Firecrawl in der Extract-Pipeline (Schicht 3)

WSM_LLM_PROVIDER

none

nein

haiku für Anthropic, local für Ollama, none zum Deaktivieren

ANTHROPIC_API_KEY

nein

Erforderlich, wenn WSM_LLM_PROVIDER=haiku

WSM_LOCAL_LLM_URL

nein

Erforderlich, wenn WSM_LLM_PROVIDER=local

WSM_MAX_RESULTS

10

nein

Standard-Maximalergebnisse

WSM_TIMEOUT_MS

25000

nein

Globales Such-Timeout

Provider ohne Schlüssel werden automatisch deaktiviert. Das Such-Tool funktioniert weiterhin mit dem, was verfügbar ist. ddgr, opencli, defuddle werden automatisch über which erkannt.

Tools

{
  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)
}

Gibt zurück:

{
  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
  }]
}

opencli-zh automatische Weiterleitung: Wenn die Abfrage Schlüsselwörter wie 知乎, 小红书, 雪球, B站, 微博 oder Muster wie 600519.SH enthält, leitet der opencli-zh-Provider an den entsprechenden Adapter weiter. Erzwingen Sie eine bestimmte Seite mit opencli_sites (über die Provider-Erweiterung übergeben, siehe Orchestrator).

extract

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

Versucht nacheinander 4 Schichten, bis eine erfolgreich ist:

  1. defuddle — schnellste, reine Textseiten

  2. opencli-Adapter — für bekannte Seiten (zhihu/xiaohongshu/xueqiu/bilibili/weibo)

  3. Firecrawl — JS-gerenderte Seiten (erfordert FIRECRAWL_API_KEY)

  4. opencli-Browser — letzter Ausweg, startet echten Chrome

Gibt zurück:

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

doctor

{} // no arguments

Gibt Provider-Verfügbarkeit + Laufzeit-Statusstatistiken zurück:

{
  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",
}

Wenn die success_rate eines Providers unter 0,5 fällt und mindestens 20 Stichproben vorliegen, wird er automatisch übersprungen (Empfehlung: degraded). Die Statusstatistiken befinden sich im Arbeitsspeicher und werden beim Neustart zurückgesetzt.

Entwicklung

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

Architektur

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)

Phasenverlauf

  • Phase 1 (15 Aufgaben): 4 Provider (searxng/ddgr/tavily/exa), RRF-Fusion, regelbasierte Bereinigung, stdio MCP, nur search-Tool

  • Phase 2 (8 Aufgaben): opencli-zh-Provider, LLM-Qualitätsmodus, 4-schichtiges extract, doctor + automatische Gesundheitsdegradierung

Lizenz

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