Search Gateways Compared: Hound (master-fetch) vs SearXNG vs ddgs
A research article on the three open-source ways to get multi-engine web search without paying a search API: a local MCP server (Hound), a self-hosted metasearch service (SearXNG), and a search library (ddgs). Research date: Aug 2, 2026. All facts verified by direct fetch (GitHub API, raw READMEs, official docs). Companion articles: web-search-ecosystem.md (provider ecosystem, rate limits, free quotas), same-model-different-cli.md, agent-loop-pattern.md.
TL;DR
If you want multi-engine web search in an agent CLI, the ecosystem has three open-source options, and they are not competitors — they are layers:
- Hound (
dondai1234/master-fetch, 760★, MIT) — a local MCP server with 6 tools (search/fetch/crawl/screenshot). It vendors ddgs as its keyless search backbone (NOTICE.ddgs.txt), adds a stealth browser, circuit breakers, consensus ranking, and a BYOK API layer. The only one that speaks MCP natively. - SearXNG (34.8k★, AGPL-3.0) — a self-hosted metasearch web service aggregating up to 274 search services, with a web UI and JSON API. Its privacy model: the server's IP takes the heat, so your IP never touches engines.
- ddgs (2.9k★, MIT) — a Python library that aggregates diverse search services. The building block, not a product.
The honest lineage, in Hound's own words: "Same gray-area posture as SearXNG / ddgs; no search-engine ToS compliance is claimed" (https://github.com/dondai1234/master-fetch/blob/master/README.md).
Recommendation for agent-CLI research (protect IP + BYOK ok + one framework + max free quota): Hound with all five BYOK providers configured (≈48.5k free searches/month via official APIs, IP never scraped). Add SearXNG only if you want a server-side, keyless IP shield. ddgs is already inside Hound — never install it separately.
Part 1 — The three candidates
1.1 Hound (a.k.a. master-fetch, hound-mcp on PyPI)
- Repo: https://github.com/dondai1234/master-fetch — 760★, MIT, Python, created 2026-06-01, active (pushed 2026-07-24).
- Self-description (GitHub API): "MCP server for web fetching with Cloudflare bypass, Trafilatura extraction, and smart routing. Free, self-hosted, no API keys."
- One MCP server, 6 tools:
smart_fetch(HTTP-first, auto-escalates to anti-detect browser; bulk, PDF+OCR, css_selector, focus),smart_crawl(best-first same-domain),smart_search(keyless multi-engine),screenshot,cache_clear,version— hand-crafted tool defs ≈2.9K tokens. - Search backbone: vendored ddgs (
src/master_fetch/search_metasearch.py, MIT, attributed in https://github.com/dondai1234/master-fetch/blob/master/NOTICE.ddgs.txt), "stripped to text search only, and adapted (async-native parallel aggregation with early-return-on-quorum)". - 10 keyless backends: duckduckgo, brave, mojeek, yahoo, yandex, startpage, google, qwant (+ opt-in wikipedia, grokipedia) — mapped to index families so consensus is counted across independent indexes (DDG+Yahoo = 1 family, DDG+Brave = 2): https://github.com/dondai1234/master-fetch/blob/master/src/master_fetch/search_engines.py
- Ranking: six-signal composite (neural ONNX cross-encoder
ms-marco-MiniLM-L-6-v2, cross-family consensus, domain reputation, answer-signal scoring, title/URL relevance, diversity max-2-per-domain): https://github.com/dondai1234/master-fetch/blob/master/src/master_fetch/search.py - Resilience layer (README): persistent warm sessions, per-engine jittered pacing, circuit breaker + 60s cooldown, DDG 202-soft-limit detection +
Retry-Afterhonoring, TLS fingerprint rotation (primp), diversity quorum (≥3 backends),HOUND_SEARCH_PROXYrotation pool (≤20 proxies). - BYOK:
hound keys addfor Serper / Tavily / Exa / Firecrawl / TinyFish. Keys become primary; keyless engines shut off;KeyPoolround-robin with 429 → 60s cooldown → next key → keyless as last resort (https://github.com/dondai1234/master-fetch/blob/master/src/master_fetch/search_api_keys.py). One provider per search, sequential exhaustion. - Intent-aware fan-out: query intent detection (comparison/howto/research/code/reference/news/factual) → expanded query variant + specialized free JSON-API backends (Semantic Scholar, GitHub API @10 req/min unauth, Hacker News): https://github.com/dondai1234/master-fetch/blob/master/src/master_fetch/api_backends.py
- Deployment:
pip install hound-mcp[all] && playwright install chromium; Docker HTTP mode on:8765/mcp; graceful HTTP-only degradation without browser deps.
1.2 SearXNG
- Repo: https://github.com/searxng/searxng — 34.8k★, AGPL-3.0, fork of searx (2021).
- Official docs (https://docs.searxng.org/): "SearXNG is a free internet metasearch engine which aggregates results from up to 274 search services. Users are neither tracked nor profiled. Additionally, SearXNG can be used over Tor."
- Engine breadth includes API-backed engines, not just scraping: Brave, Exa API, arXiv, Semantic Scholar, GitHub Code, Wikimedia, PubMed, Qwant, Google, Bing, DuckDuckGo, Startpage, Yahoo, Kagi… (engine list: https://docs.searxng.org/dev/engines/engine_overview.html).
- Interfaces: web UI (JS/cookies optional), JSON API (https://docs.searxng.org/dev/search_api.html), ~70 public instances at https://searx.space.
- Privacy model: the server's IP does the scraping — that is the whole point of a private instance ("Why use a private instance?" https://docs.searxng.org/own-instance.html). Includes a limiter (https://docs.searxng.org/admin/searx.limiter.html) and an admin flow to "Answer CAPTCHA from server's IP" (https://docs.searxng.org/admin/answer-captcha.html).
- No native MCP server, no fetch/crawl tools, no neural reranking.
1.3 ddgs
- Repo: https://github.com/deedy5/ddgs — 2.9k★, MIT, Python.
- GitHub API description: "A metasearch library that aggregates results from diverse web search services."
- Per Hound's NOTICE: it is the metasearch engine layer (scraping + parsing + rotation) that Hound vendored; runtime deps primp/httpx/fake-useragent/lxml.
- Library-level API only: you write the app/MCP layer, ranking, and resilience yourself.
1.4 Also in this space (smaller, unproven)
busigui2023/mcp-server-metasearch— local MCP aggregating 15 tools across 5 API providers (Jina, Tavily, Exa, Firecrawl, Bocha), ~0★.positive666/Deep_search_lightning— multi-engine aggregated search + reflection loop with an MCP server, ~0★.
Part 2 — Head-to-head (verified Aug 2, 2026)
| Dimension | Hound (master-fetch) | SearXNG | ddgs |
|---|---|---|---|
| What it is | Local MCP server for agents | Self-hosted metasearch web service (UI + JSON API) | Python library |
| Stars / license | 760★ / MIT | 34.8k★ / AGPL-3.0 | 2.9k★ / MIT |
| Engines | 10 keyless + 3 specialized free APIs (Semantic Scholar, GitHub, HN) | up to 274 services (web, image, video, news, code, papers…) incl. API engines | "diverse web search services" (scraping) |
| Relationship | vendors ddgs (NOTICE.ddgs.txt) | independent lineage (searx fork, 2021) | building block used by Hound |
| BYOK / official-API mode | Yes — Serper, Tavily, Exa, Firecrawl, TinyFish; key stacking, 429 rotation, keyless fallback | Yes — per-engine API keys in settings.yml (e.g., Brave, Exa API) |
No |
| Where the scraping heat lands | your IP (keyless mode); nobody (BYOK mode) | the server's IP — your IP never touches engines | your IP (you handle proxies) |
| Agent integration | Native MCP (6 tools), works with Claude Code / OpenCode / Cursor / Pi | JSON API only — needs a wrapper for MCP | none — build it |
| Fetch / crawl / anti-bot | Yes — smart_fetch with patchright stealth browser, CF Turnstile solver, PDF+OCR, sitemap crawl | No fetch layer; CAPTCHA answered server-side | No |
| Ranking | Six-signal: neural rerank + cross-family consensus + domain/answer signals | Engine merging with per-engine weights; no neural rerank | Raw merged results |
| Rate-limit resilience | Built-in: circuit breakers, 60s cooldowns, Retry-After, quorum, warm sessions, proxy rotation | Server-side limiter, engine timeouts, ~70 maintained public instances absorb the heat | DIY |
| Multi-user | Single local user | Yes (web UI, limiter, Tor support) | N/A |
| Setup cost | 2 commands + MCP config | Docker + settings.yml (or use a public instance) | pip + code |
| Best for | Single-user agent-CLI research | Privacy-first multi-user search / shared search backend / Tor | Embedding metasearch in custom code |
Part 3 — Composition and the recommended approach
3.1 The three are layers, not rivals
ddgs ──vendored──▶ Hound ──MCP──▶ your agent CLI
▲
BYOK: Tavily/Exa/Serper/Firecrawl/TinyFish (official APIs)
SearXNG ──JSON API──▶ your agent (or Hound's keyless engines via proxy) — server-side IP shield
3.2 Decision ladder for the "protect IP + BYOK ok + one framework + max free quota" constraints
| Step | Choice | Why (verified) |
|---|---|---|
| 1. Default | Hound + BYOK, all five providers | Single MCP framework; keys = official APIs (IP never scraped); providers consumed sequentially, ≈2,500+1,000+1,000+1,000+43,000 ≈ 48.5k free searches/month; keyless engines only as last-resort fallback |
| 2. If a provider quota dies | hound keys test/status, or stack a second key for that provider |
KeyPool round-robins with 429 → 60s cooldown; capacity scales per provider |
| 3. If strict "never scrape from my IP" | Remove/hold keys at exhaustion instead of letting keyless fallback fire | The fallback is the only path that touches your IP (README) |
| 4. If you want keyless + IP-protected | Host SearXNG on a VPS; point your agent at its JSON API | Server IP takes the heat; ~70 public instances also exist — but this adds infra for a single user |
| 5. Never | ddgs directly | It's already inside Hound (vendored, MIT-attributed) |
3.3 Where this sits in the ecosystem article
This is the "self-hosted gateway" tier below the API tier from web-search-ecosystem.md: Hound reproduces the rate-limit playbook from Part 2 of that article (Retry-After honoring, exponential backoff via cooldowns, batching via parallel fan-out, caching via SQLite) and the free-quota dials from Part 3 (per-provider free tiers as BYOK sources, structured free APIs as specialized backends). The one thing no keyless tool can escape — per-IP throttling — is handled either by HOUND_SEARCH_PROXY rotation or by BYOK keys, which is why the recommended stack leads with BYOK.
Conclusion
Hound, SearXNG, and ddgs solve the same problem at three different altitudes: ddgs is the engine layer (already vendored inside Hound), SearXNG is the server-side IP shield with unmatched engine breadth (274 services), and Hound is the only MCP-native, agent-ready gateway with ranking, fetch/crawl/anti-bot, and a BYOK path that turns free API tiers into 48.5k protected searches/month. For a single-user agent CLI, the recommended approach is Hound + BYOK-all-five, with SearXNG as an optional upgrade only if keyless, IP-shielded search is required.
References (all verified Aug 2, 2026)
Hound (master-fetch) - Repo (meta, 760★, MIT): https://github.com/dondai1234/master-fetch · README: https://raw.githubusercontent.com/dondai1234/master-fetch/master/README.md - Vendored ddgs attribution: https://github.com/dondai1234/master-fetch/blob/master/NOTICE.ddgs.txt - Engine layer / index families: https://github.com/dondai1234/master-fetch/blob/master/src/master_fetch/search_engines.py - Six-signal ranking + intent fan-out: https://github.com/dondai1234/master-fetch/blob/master/src/master_fetch/search.py - BYOK key pooling: https://github.com/dondai1234/master-fetch/blob/master/src/master_fetch/search_api_keys.py - Specialized free-API backends: https://github.com/dondai1234/master-fetch/blob/master/src/master_fetch/api_backends.py - MCP server / tools / instructions: https://github.com/dondai1234/master-fetch/blob/master/src/master_fetch/server.py
SearXNG - Repo (34.8k★, AGPL-3.0): https://github.com/searxng/searxng - Docs (274 engines, Tor, instances): https://docs.searxng.org/ - JSON API: https://docs.searxng.org/dev/search_api.html · limiter: https://docs.searxng.org/admin/searx.limiter.html · server-IP CAPTCHA: https://docs.searxng.org/admin/answer-captcha.html - Public instances: https://searx.space
ddgs - Repo (2.9k★, MIT): https://github.com/deedy5/ddgs
Related (small, unproven) - mcp-server-metasearch (5 providers, 15 tools): https://github.com/busigui2023/mcp-server-metasearch - Deep_search_lightning (multi-engine + reflection): https://github.com/positive666/Deep_search_lightning