# Super Search — MCP Server Build Reference **Built:** July 11, 2026 · **Updated:** July 15, 2026 (v2.0.0) **Server:** Core (152.53.192.33) **Service:** `super-search.service` (systemd, auto-restart) **Endpoint:** http://127.0.0.1:8899/mcp ## Architecture ``` Super Search (FastMCP v2.0.0) — 10 tools, 7 providers ├── web_search(query, limit, category, time_range, site_filter) │ └── SearXNG → Exa → OpenCorporates → CourtListener → DuckDuckGo → Firecrawl ├── web_extract(url, char_limit) │ └── Trafilatura → Firecrawl ├── web_search_premium(query, limit, include_domains, exclude_domains, date_start, date_end) │ └── Exa direct (DRE-grade) ├── web_search_news(query, limit, days) ★ NEW │ └── SearXNG (news) → Exa ├── web_search_academic(query, limit) ★ NEW │ └── SearXNG (science) → Exa ├── web_extract_batch(urls, char_limit) ★ NEW │ └── Parallel Trafilatura → Firecrawl (max 10 URLs) ├── web_suggest_queries(query, limit) ★ NEW │ └── SearXNG suggestions ├── health_check() ★ NEW │ └── Provider statuses + cache stats + rate limit buckets ├── web_lookup(query, limit) ★ NEW │ └── DuckDuckGo Instant Answers + Wikipedia └── web_search_images(query, limit) ★ NEW └── SearXNG (images) → general fallback ``` ## File Layout ``` /root/docker/super-search/ ├── server.py ← FastMCP server (192 lines) ├── super-search.service ← systemd unit file (copied to /etc/systemd/system/) ├── venv/ ← Python virtualenv ├── exa.env ← Exa API key (chmod 600) ├── check_api.py ← test artifacts (cleanup) └── check_api2.py ← test artifacts (cleanup) ``` ## Key Design Decisions 1. **Async I/O everywhere** — httpx.AsyncClient for all HTTP calls. The searxng, exa, firecrawl, duckduckgo, and wikipedia search functions are all async, allowing the server to handle concurrent requests without blocking. 2. **Seven-provider fallback chain** — SearXNG (free, privacy-respecting) → Exa (premium neural) → OpenCorporates (company records) → CourtListener (case law) → DuckDuckGo (instant answers) → Wikipedia (encyclopedia) → Firecrawl (last resort). Each tier fails independently with full telemetry reporting. 3. **Extraction fallback** — Trafilatura (local, fast, free) → Firecrawl scrape (remote, paid). Trafilatura handles most HTML pages; Firecrawl handles JavaScript-heavy and paywalled sites. 4. **Batch extraction** — `web_extract_batch` extracts up to 10 URLs in parallel using `asyncio.gather`, dramatically faster than sequential extraction. 5. **Domain-specific tools** — News, academic, image search, and factual lookups each get dedicated tools with appropriate fallback chains and defaults (date ranges for news, science category for academic). 6. **Credentials from .env** — FIRECRAWL_API_KEY and EXA_API_KEY loaded from ~/.hermes/.env via python-dotenv. The systemd service uses EnvironmentFile to pass them. 7. **Rate limiting** — Token bucket per provider (7 providers), TTL caching per provider, retry with exponential backoff on 429/5xx. 8. **Provider health telemetry** — Every search tool returns which providers were tried, their status, result counts, and upstream engine health (SearXNG unresponsive engines with reasons). ## Hermes Integration ```yaml mcp_servers: super-search: url: http://127.0.0.1:8899/mcp enabled: true ``` After deploying a new version, the Hermes gateway must be restarted to pick up new tools: ```bash systemctl restart hermes.service # or from outside the gateway: hermes gateway restart ``` ## Version History - v1.0 — Initial build (SearXNG → Firecrawl, Trafilatura → Firecrawl) — 3 tools - v1.1 — Added Exa as premium tier (SearXNG → Exa → Firecrawl) — 3 tools - v1.2 — Added OpenCorporates + CourtListener to fallback chain + rate limiting — 3 tools - v2.0.0 — Major expansion: 7 new tools (10 total), 2 new providers (DuckDuckGo, Wikipedia), enhanced params on all existing tools — July 15, 2026