About Fetch Router
Fetch Router is an MCP server for agents that need reliable results from individual web pages. It detects blocks, login walls, empty JavaScript shells and failed checks, then retries through another route; unsuccessful fetches are not billed.
Key features
- 01Validate page loads and expected text
- 02Detect blocks and login walls
- 03Retry through alternate routes
- 04Return Markdown or HTML
- 05Check domain route reliability
Use cases
- 01Read search results and user-provided links
- 02Fetch JavaScript-rendered pages without managing Playwright
- 03Verify that a page loaded before summarizing
MCP support
The hosted MCP server is available at https://fetchrouter.dev/mcp, with a local stdio option. It exposes `fetch_page` for verified fetching and `domain_reliability` for route pass rates.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://fetchrouter.dev/mcpclaude mcp add --transport http dev-fetchrouter-fetchrouter https://fetchrouter.dev/mcp{"mcpServers":{"dev-fetchrouter-fetchrouter":{"type":"http","url":"https://fetchrouter.dev/mcp"}}}Open in Cursor{"servers":{"dev-fetchrouter-fetchrouter":{"type":"http","url":"https://fetchrouter.dev/mcp"}}}Open in VS Code{"mcpServers":{"dev-fetchrouter-fetchrouter":{"type":"http","url":"https://fetchrouter.dev/mcp"}}}{"mcpServers":{"dev-fetchrouter-fetchrouter":{"serverUrl":"https://fetchrouter.dev/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
https://fetchrouter.dev/mcpAuth requiredTools
Details
From the project READMEfetchrouter-mcp
MCP server for Fetch Router: web fetch for AI agents that only bills when the page actually loaded.
Agents often get a 200 OK that is really a Cloudflare challenge, a DataDome block or an empty React shell, and then summarise the error page. Fetch Router checks every page for HTTP errors, block and challenge pages (Cloudflare, DataDome, PerimeterX, Akamai, Imperva, Kasada…), login walls, empty JavaScript shells and text you expect to see. If a check fails it retries through another route, such as a headless browser. Failed fetches cost nothing.
When to use it
- Your agent reads pages it didn't choose: search results, links from users, sites you don't control.
- You need to know whether a page really loaded, not just that the request returned 200.
- Some targets are single-page apps that need a browser, and you don't want to run Playwright yourself.
- You want to pay per page that works, not per request.
When not to use it
- Crawling a whole site, mapping links or search. Use a crawler (Firecrawl, Crawl4AI, Apify). Fetch Router does one URL at a time.
- Pages behind a login or paywall. Not supported, by policy.
- One or two sites you know well. A plain
fetchor your own Playwright script is cheaper. - Heavily protected retail and travel sites today. Premium unblocking routes aren't live for customer traffic yet. See the benchmark for what passes.
Setup
Works without a key, up to 25 free pages a day per IP address. For more, get a free key (500 credits, no card) at https://fetchrouter.dev/#signup.
Remote (no install). Streamable HTTP at https://fetchrouter.dev/mcp, with your key in a header:
claude mcp add --transport http fetchrouter https://fetchrouter.dev/mcp --header "Authorization: Bearer fr_..."
Or try it with no key (the free daily allowance):
claude mcp add --transport http fetchrouter https://fetchrouter.dev/mcp
Other clients: URL https://fetchrouter.dev/mcp, optional header Authorization: Bearer fr_... (or X-API-Key: fr_...).
Claude Code plugin (MCP server plus a verified-fetch skill; asks once for an optional key and stores it securely):
claude plugin marketplace add JonnoGit/fetchrouter-mcp
claude plugin install fetchrouter@fetchrouter
Local (stdio via npx).
{
"mcpServers": {
"fetchrouter": {
"command": "npx",
"args": ["-y", "fetchrouter-mcp"],
"env": { "FETCHROUTER_API_KEY": "fr_..." }
}
}
}
Claude Code: claude mcp add fetchrouter -e FETCHROUTER_API_KEY=fr_... -- npx -y fetchrouter-mcp. Leave out the key (-e …, or the env block) to use the free daily allowance.
Tools
fetch_page(url, mode?, expect_text?, expect_selector?, max_cost?): returns markdown (default) or HTML, plus which route delivered it and what was tried.max_costcaps credits: 1 = plain HTTP only, 2 (default) allows a browser. If the page can't be loaded, the error says why (blocked:cloudflare,http_404,expect_text_missing…) and nothing is billed.domain_reliability(domain): pass rate per route for a site over the last 30 days, from real verified fetches. Free, no key needed.
How well does it work?
A fixed list of 166 public pages in six site types is fetched every night with plain HTTP and with a headless browser, from a datacenter IP. Results, method and CSV: https://fetchrouter.dev/benchmark
Pricing
1 credit ($0.001) per static page, 2 per browser-rendered page, failures free. Details: https://fetchrouter.dev/#pricing
Environment (stdio)
| Variable | Default |
|---|---|
FETCHROUTER_API_KEY | optional (without it: 25 free pages a day) |
FETCHROUTER_BASE_URL | https://fetchrouter.dev |
FETCHROUTER_MAX_CHARS | 60000 (longer pages are truncated) |
Development
npm install
npm run build
FETCHROUTER_API_KEY=fr_... node dist/index.js
The tool definitions live in src/tools.ts and are shared with the hosted endpoint at https://fetchrouter.dev/mcp.
MIT licensed. Operated by One + Done LLC. Contact: [email protected]
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.