fetchrouter-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fetchrouter-mcpfetch this page and verify it loaded: https://example.com/article"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
fetchrouter-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.
Related MCP server: webscout-mcp
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
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_..."Other clients: URL https://fetchrouter.dev/mcp, header Authorization: Bearer fr_... (or X-API-Key: fr_...).
Claude Code plugin (MCP server plus a verified-fetch skill; asks for your key once and stores it securely):
claude plugin marketplace add JonnoGit/fetchrouter-mcp
claude plugin install fetchrouter@fetchrouterLocal (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
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, 5 (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, 5 per browser-rendered page, failures free. Details: https://fetchrouter.dev/#pricing
Environment (stdio)
Variable | Default |
| required |
|
|
|
|
Development
npm install
npm run build
FETCHROUTER_API_KEY=fr_... node dist/index.jsThe 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: hello@fetchrouter.dev
Available Tools
2 toolsdomain_reliabilityWhich fetch routes work for a siteARead-onlyInspect
Pass rates per route (plain HTTP, browser, providers) for a domain over the last 30 days, from real verified fetches. Use it to choose mode/max_cost before fetching a hard site. Free, no key needed.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain or URL, e.g. zillow.com |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds useful behavioral context beyond that: a 30-day window, real verified fetches as the data source, and no cost or key requirement. It does not describe output shape or latency, but the annotation coverage lowers the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with what the tool returns and followed by when to use it. Every clause contributes useful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter, read-only lookup, the description covers the result type, time window, data source, and cost/auth context. Without an output schema it could say more about response structure, but it is sufficient for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single domain parameter is documented in the schema with an example. The description mentions 'for a domain' but adds no syntax or format meaning beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific data resource and scope: pass rates per route for a domain over the last 30 days. It implicitly distinguishes itself from fetch_page by framing itself as a pre-fetch reliability check, though it does not explicitly name the sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: use it to choose mode/max_cost before fetching a hard site. It also notes free access and no key needed. It lacks explicit when-not guidance or a named alternative, but the intended moment of use is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_pageFetch a web page (verified)ARead-onlyInspect
Fetch a public URL and get its content only if it really loaded. Checks for block pages, CAPTCHAs, login walls and empty JavaScript shells, and retries through other routes (including a headless browser) automatically. Billed only on success. Returns markdown by default. If ok is false, the reason says why (e.g. blocked:cloudflare, http_404, expect_text_missing): don't retry the same URL with the same settings.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Public http(s) URL | |
| mode | No | markdown (default, main content), html (raw page), rendered (always use a browser) | |
| max_cost | No | Most credits to pay: 1 static only, 5 (default) allows a browser, 10-25 allows premium unblocking | |
| expect_text | No | Text that must appear on the page for it to count as loaded, e.g. a product name | |
| expect_selector | No | CSS selector that must match |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state readOnlyHint and openWorldHint; the description adds substantial context beyond them: automatic route retries including headless browser, block/CAPTCHA/login-wall detection, and success-only billing. It also discloses the failure contract (ok=false plus reason codes like blocked:cloudflare, http_404) and the anti-retry policy. That is exactly the behavioral load the annotations do not carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the purpose and the success guarantee, then behavior, then cost, then the failure contract. Every sentence carries distinct information and nothing is redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must explain return semantics, and it does: markdown by default, an ok flag, and a reason string on failure. Combined with cost and retry policy, an agent has everything needed to call it and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters are already documented with defaults, enums and ranges; baseline is 3. The description only restates that markdown is the default return mode and refers vaguely to 'settings', adding no new meaning for max_cost, expect_text or expect_selector.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch a public URL') plus the differentiator that content is returned 'only if it really loaded'. An agent can immediately tell this is a verified fetch rather than a blind HTTP GET. It does not explicitly contrast with the sibling domain_reliability, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear situational guidance: use it to obtain page content, and if ok is false, do not retry the same URL with the same settings. That is a real exclusion rule with an example error taxonomy. It lacks explicit routing to/against the sibling domain_reliability tool, so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.1- First observed
domain_reliability - First observed
fetch_page
TDQS
Scored across 2 tools
The two tools have completely non-overlapping purposes: one performs a fetch, the other reports historical pass-rate statistics for routing decisions. An agent cannot reasonably confuse them, and the descriptions reinforce the distinction (fetch is billed, stats are free).
Both names use clean snake_case, which is consistent at the style level. However, 'fetch_page' is verb_noun while 'domain_reliability' is a noun phrase, so the action-oriented pattern isn't uniform across the set.
Two tools is on the thin side relative to the typical 3-15 range, but each earns its place: a core fetch operation plus a supporting diagnostic for choosing fetch settings. The surface is deliberately minimal rather than padded.
The stated purpose—reliably fetching a URL and choosing the right route—is well covered, including error reasons and a route-reliability lookup to guide retries. Minor gaps remain, such as batch fetching or a way to enumerate available routes/providers directly.
Maintenance
Related MCP Connectors
Reliable web access for AI agents: smart HTTP, rotating proxies, and full-browser rendering.
Web search, browser automation, scraping, crawling and CAPTCHA solving for AI agents.
Reliable web fetching for AI agents with retry, circuit breaker, caching, and anti-bot bypass
Hosted browser for AI agents: screenshots, post-JS DOM, console, WCAG. No install, no API key.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides AI agents with reliable web fetching capabilities, handling retries, caching, and anti-bot bypass automatically.MIT
- AlicenseAqualityAmaintenanceEnables AI agents to perform web searches, fetch and extract page content, and crawl sites with caching, rate limiting, and robots.txt compliance, all without needing API keys.15325 PyPI1MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to search the web, read and extract content from webpages, fetch JSON from REST APIs, and collect links while bypassing anti-bot protections.22 npmISC
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to reliably fetch public web URLs and extract clean, agent-ready text, Markdown, links, and metadata, with automatic browser fallback and optional x402 payment support.-