Skip to main content
Glama
TZH-user

aggregate-search

by TZH-user

aggregate-search โ€” Multi-Engine Search MCP Server

Overview

aggregate-search turns multiple search backends โ€” Bocha / Zhipu (China-friendly), Tavily / Serper (overseas) and an optional self-hosted SearXNG โ€” into a single MCP tool pair (web_search, engine_status) served over stdio with FastMCP. Chinese queries automatically boost domestic engines (weight 1.3) and English queries boost overseas ones; when an overseas engine is unreachable it lands in a 300 s health blacklist and the request falls back to domestic sources instead of timing out.

๐Ÿ‡จ๐Ÿ‡ณ ไธญๆ–‡็‰ˆ่ฏดๆ˜Ž่ง README_CN.md

Related MCP server: evo-scry

Highlights

  • ๐Ÿ”€ Weighted RRF fusion โ€” score = ฮฃ w/(60+rank) with a cross-engine hit bonus (+0.25), so results confirmed by multiple engines rank higher; each result carries an engines field listing its sources

  • ๐Ÿฉบ Health blacklist & failure taxonomy โ€” failing engines are benched for 300 s; every failure is classified (quota_exhausted / auth_failed / network_unreachable / timeout / rate_limited / server_error) with an actionable hint in engine_errors

  • ๐ŸŒ Proxy auto-negotiation โ€” overseas engines go through AGG_PROXY (env โ†’ common Clash ports โ†’ Windows registry proxy), validated by a real CONNECT + TLS handshake before use, with automatic direct-retry fallback; domestic engines always connect directly

  • ๐Ÿงช 35 offline tests + stdio E2E + real-quota check โ€” pytest suite (fusion / engines / orchestrator / failure classification) runs without network or quota; verify_e2e.py drives the server through a real MCP stdio client; real_check.py exercises live keys

  • ๐Ÿงฉ Pluggable engines โ€” add one adapter file + one config.SPECS registration; per-engine kill switch via AGG_ENABLE_<NAME>=0

Tech Stack

Architecture

             query (zh/en auto-detected)
                      โ”‚
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ orchestrator โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚  parallel dispatch + timeoutsโ”‚
        โ–ผ                              โ–ผ
  domestic engines              overseas engines
  Bocha ยท Zhipu                 Tavily ยท Serper   (optional SearXNG)
  always direct                 via validated proxy or direct
        โ”‚                              โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ fusion โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
      URL normalization โ†’ dedup โ†’ weighted RRF (k=60)
      + cross-engine bonus โ†’ top-K + engine_errors
                      โ”‚
                      โ–ผ
        MCP tools: web_search / engine_status (stdio)

Getting Started

bash setup.sh                                   # uv venv (Python 3.12) + deps
cp .env.example .env                            # fill at least one engine key
.venv/Scripts/python.exe -m pytest -q           # 35 offline tests (no network)
.venv/Scripts/python.exe verify_e2e.py          # stdio end-to-end (mocked)
.venv/Scripts/python.exe real_check.py          # live quota check

Register with any MCP client (ZCode / Claude Code etc.):

"aggregate-search": {
  "type": "stdio",
  "command": "<abs-path>/.venv/Scripts/python.exe",
  "args": ["<abs-path>/server.py"],
  "cwd": "<abs-path>"
}

No key ships with this repository โ€” obtain your own: Bocha https://open.bochaai.com (CN, 1000 free), Zhipu https://open.bigmodel.cn, Tavily https://app.tavily.com (1000/month free), Serper https://serper.dev, or point SEARXNG_BASE_URL at a self-hosted instance (no key). See .env.example.

Configuration

  • BOCHA_API_KEY / ZHIPU_API_KEY / TAVILY_API_KEY / SERPER_API_KEY / SEARXNG_BASE_URL โ€” all optional; whichever is set gets used

  • AGG_PROXY โ€” egress proxy for overseas engines only; empty = env โ†’ probe ports 7897/7890/10809 โ†’ Windows registry proxy

  • AGG_ENABLE_<NAME>=0 โ€” force-disable an engine; AGG_TIMEOUT_S (20) / AGG_CONNECT_TIMEOUT_S (10) / AGG_UNHEALTHY_TTL_S (300)

  • ZHIPU_SEARCH_ENGINE โ€” search_std (default) / search_pro / search_pro_sogou / search_pro_quark

Repository Layout

server.py              MCP entry (stdio): web_search / engine_status
aggregate_search/
  config.py            engine registry + zh/en weights + key detection
  models.py            unified SearchResult model
  fusion.py            URL normalization, dedup, weighted RRF, cross-source bonus
  orchestrator.py      parallel dispatch, health blacklist, failure taxonomy, proxy probing
  engines/             per-engine adapters (add file + register in config.SPECS)
tests/                 35 mocked tests (fusion / engines / orchestrator / failures)
verify_e2e.py          stdio E2E via a real MCP client
real_check.py          live-key verification (spends quota, prints failure kinds)
HANDOFF_ๆŽฅ็ฎก่ฏŠๆ–ญ.md     engineering diagnosis report (CN)
.env.example           key template

Known Limitations

  • Engine adapters follow official docs; after API changes only the adapter file needs updating

  • Fusion is weighted RRF + cross-source bonus in v1; LLM re-ranking is planned

  • Overseas engines need a working egress proxy; on machines without one, disable them via AGG_ENABLE_<NAME>=0 to skip cold-start timeouts

License

MIT ยฉ 2026 TZH-user โ€” see LICENSE.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that enables web search capabilities by integrating with a SearXNG instance to aggregate results from over 130 engines. It allows users to perform filtered searches across categories like news, science, and social media while supporting advanced parameters for language and time range.
    14
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for internet search via direct Google and DuckDuckGo HTML scraping with AI-powered result normalization and optional summarization, requiring no API keys for search.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that aggregates web search results from multiple engines and optionally renders pages to Markdown, providing a unified search interface.
    3 npm
    3
    ISC