MCP server unifying web-search and scraping providers behind a few agent tools
Wellknown found it in public sources; nobody has proven control of it yet. Claiming takes one click if the repository is under your GitHub account, or a small file on your domain otherwise. Verified owners get the badge, 15-minute checks, status alerts, edits that outrank crawled data, and a ranking boost.
Agents can do it too: POST https://wellknown.network/api/v1/claims with {"agent":"scrape-n-search-mcp","method":"well_known_file"} — machine-readable steps at claim.json, guide at /docs/claim.
Everything here was measured by our prober or read from a registry. Nothing is self-reported.
Attributed to the source that supplied each field. Treated as claims, not facts.
# scrape-n-search MCP server Unified web-search and scraping tools for AI agents, backed by multiple providers (TinyFish, Tavily, Exa, ZenRows, Scrappey, Firecrawl, Serper, Jina). The agent calls a handful of tools and never needs to know which provider served the request. Because every provider fetches on **its own servers**, the client's IP (e.g. a VPN IP that target sites reject) is never seen by the target site. ## Architecture ``` MCP client (agent) │ MCP stdio protocol ▼ MCPServer (server.py) ── 7 tools: web_search, web_fetch, web_browser_actions, web_screenshot, web_session, web_crawl, web_extract │ ▼ Router (router.py) ── picks provider by priority + capability, fails over on error │ ├── TinyFish (search, fetch) ├── Tavily (search, fetch) ├── Exa (search, fetch) ├── ZenRows (fetch, extract) ├── Scrappey (fetch, browser_actions, screenshot, session) ├── Firecrawl (search, fetch, crawl, extract) ├── Serper (search) └── Jina (search*, fetch) ``` - **Normalization**: every adapter maps its provider-specific response into the shared models (`SearchResult`, `FetchedPage`, `CrawlPage`), so results look the same regardless of provider. - **Selection**: the router uses the first *enabled* provider (API key present) that supports the requested tool, in priority order. - **Failover**: if the chosen provider errors, the router tries the next candidate and aggregates errors if all fail. The response always names the provider that served it. - **Default provider**: `DEFAULT_PROVIDER` forces a preferred provider for every call (the agent can still override per-call with the `provider` parameter). When set, tools that provider cannot serve are **hidden** from the client. ## Tools Every tool returns a JSON string. All accept an optional `provider` parameter to force a specific provider; otherwise the default/auto-selected provider is used. ### `web_searc…
Mapped onto the structured taxonomy from declared text and observed tool names. Confidence shown for derived entries.
Every source is kept verbatim. Field changes are logged as events.