Skip to main content
Glama

Web Search MCP

Многоисточниковый MCP-сервер для веб-поиска с RRF-фузией, 4-уровневым извлечением URL и отслеживанием работоспособности провайдеров.

Статус

Фаза 2: 5 провайдеров (SearXNG/ddgr/Tavily/Exa/opencli-zh), RRF-фузия, очистка сниппетов (правила + опциональное LLM-сжатие), инструменты search/extract/doctor, отслеживание работоспособности провайдеров с автоматической деградацией.

Related MCP server: Prism

Установка

Добавьте в конфигурацию 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"
  }
}

После публикации в npm замените command: "node" + абсолютный путь на command: "npx" + args: ["-y", "@thehappyboy/web-search-mcp@latest"].

Конфигурация

Переменные окружения (или .env в текущей рабочей директории или ~/.agents/skills/web-search/.env):

Var

По умолчанию

Обязательная

Описание

SEARXNG_URL

http://localhost:18443

нет

Базовый URL SearXNG

TAVILY_API_KEY

нет

Включает провайдер Tavily

EXA_API_KEY

нет

Включает провайдер Exa

FIRECRAWL_API_KEY

нет

Включает Firecrawl в конвейере извлечения (уровень 3)

WSM_LLM_PROVIDER

none

нет

haiku для Anthropic, local для Ollama, none для отключения

ANTHROPIC_API_KEY

нет

Требуется, когда WSM_LLM_PROVIDER=haiku

WSM_LOCAL_LLM_URL

нет

Требуется, когда WSM_LLM_PROVIDER=local

WSM_MAX_RESULTS

10

нет

Максимальное количество результатов по умолчанию

WSM_TIMEOUT_MS

25000

нет

Глобальный таймаут поиска

Провайдеры без ключей автоматически отключаются. Инструмент поиска по-прежнему работает с тем, что доступно. ddgr, opencli, defuddle автоматически обнаруживаются через which.

Инструменты

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

Возвращает:

{
  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: Когда запрос содержит ключевые слова, такие как 知乎, 小红书, 雪球, B站, 微博, или шаблоны вроде 600519.SH, провайдер opencli-zh направляет запрос к соответствующему адаптеру. Принудительно укажите конкретный сайт с помощью opencli_sites (передается через расширение провайдеров, см. оркестратор).

extract

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

Пытается использовать 4 уровня по порядку, пока один не сработает:

  1. defuddle — самый быстрый, сайты с чистым текстом

  2. адаптер opencli — для известных сайтов (zhihu/xiaohongshu/xueqiu/bilibili/weibo)

  3. Firecrawl — страницы с JS-рендерингом (требуется FIRECRAWL_API_KEY)

  4. браузер opencli — крайняя мера, запускает реальный Chrome

Возвращает:

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

doctor

{} // no arguments

Возвращает доступность провайдеров + статистику работоспособности во время выполнения:

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

Когда success_rate провайдера падает ниже 0,5 при наличии не менее 20 образцов, он автоматически пропускается (рекомендация: degraded). Статистика работоспособности хранится в памяти и сбрасывается при перезапуске.

Разработка

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

Архитектура

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)

История фаз

  • Фаза 1 (15 задач): 4 провайдера (searxng/ddgr/tavily/exa), RRF-фузия, очистка на основе правил, stdio MCP, только инструмент search

  • Фаза 2 (8 задач): провайдер opencli-zh, режим качества LLM, 4-уровневое extract, doctor + автоматическая деградация работоспособности

Лицензия

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