@readfetch/mcp-x402-proxy
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| READFETCH_DEV | No | Set to 1 only for local MCP URLs (localhost / 127.0.0.1 / [::1]) and enables Sepolia there. Never set it when READFETCH_MCP_URL points at production. | |
| EVM_PRIVATE_KEY | Yes | Private key for a wallet on Base mainnet with USDC for paid tools. tools/list does not load your key; the first tools/call does. Never commit it. | |
| READFETCH_MCP_URL | No | Optional upstream MCP URL. Must be https for readfetch.com / www.readfetch.com, or localhost / 127.0.0.1 / [::1] with READFETCH_DEV=1. Upstream redirects are rejected. | https://readfetch.com/mcp |
| READFETCH_EXPECTED_PAYTO | No | Optional expected payee address. On readfetch.com upstream, payments must match this address (defaults to the catalog payee). | |
| READFETCH_MAX_PAYMENT_USD | No | Optional cap for each x402 authorization in USD. Maximum is 100. | 1 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| readfetch_textA | Fetch a public URL and return its main readable content as Markdown or plain text, plus title, author, published date and site name. Strips navigation, ads and boilerplate. No JavaScript rendering by default (cheaper than readfetch_scrape); one Chromium fallback when plain HTTP is blocked. Prefer readfetch_fetch when you need raw status, headers, or non-HTML bytes; readfetch_scrape when the article only appears after JavaScript runs. |
| readfetch_mapA | Discover a site's crawlable surface without crawling it: parse robots.txt allow/disallow rules, collect URLs from sitemap.xml and sitemap indexes, find RSS, Atom and JSON feeds, and count internal and external links on the homepage. Use the returned URLs to plan a /v1/scrape or /v1/crawl. |
| readfetch_scrapeA | Load a public URL in headless Chromium and return Markdown, plain text, or HTML ( |
| readfetch_residentialA | Identical request and response to /v1/scrape, but the render leaves through a residential address instead of the datacentre. For targets that block by IP reputation (DataDome, PerimeterX, Cloudflare, AWS WAF). One attempt, no retries: residential bandwidth is the cost, and four times the scrape price is what it takes to cover it honestly. |
| readfetch_fetchA | Send an HTTP request (GET, POST, PUT, PATCH, DELETE, HEAD) through egress and return status_code, response headers, and body as text or base64 ( |
| readfetch_batchA | Read a fixed list of public HTML pages in one call—the same article extraction as POST /v1/text for each URL (Markdown or plain text plus title and metadata). One x402 payment covers the batch (minimum 10 pages quoted; URLs deduped, max 50). Returns results in input order: each item has url, status_code, text, billed, and hint when undelivered, plus batch-level delivered, failed, billed_pages, and optional credit for unused pages. Undelivered pages are not billed. Use readfetch_text for one URL, readfetch_map then readfetch_crawl to discover and walk a site, readfetch_scrape when JavaScript is required. Read-only; 402 without PAYMENT-SIGNATURE like other paid tools. |
| readfetch_pdfA | Extract text from a PDF (%PDF- magic, not Content-Type): send exactly one of |
| readfetch_sectionA | Extract one heading or one CSS selector from a public page instead of the whole document. Returns matched Markdown or text, title, chars, content_sha256, and billed. If the heading is missing, returns HTTP 200 with empty text and |
| readfetch_diffA | Stateless change detection: send the hash you hold, get changed/unchanged and a bounded diff. A no-change answer is billable. |
| readfetch_screenshotA | Capture a public URL in headless Chromium and return PNG or JPEG as JSON ( |
| readfetch_searchA | Run a web search without a separate search API subscription. Returns titles, URLs, and snippets only — not full page text; follow with readfetch_text, readfetch_probe, or readfetch_scrape on a chosen result URL. |
| readfetch_crawlA | Start a bounded async crawl from one seed URL. Returns job_id, status (queued), pages_quoted, and price_usd — then poll readfetch_crawl_status with that id until status is completed or failed. Completed jobs include per-page url and Markdown in the status payload. Cap scope with max_pages (default 20, max 100) and max_depth (default 2, max 3); include/exclude filter paths by prefix (* suffix on include). Prefer readfetch_batch for a fixed URL list; readfetch_map to list URLs without fetching bodies; readfetch_text for a single page. |
| readfetch_crawl_statusA | FREE — no payment or wallet: Poll a crawl job started with readfetch_crawl. FREE — no payment or wallet; unauthenticated. Pass |
| readfetch_probeA | FREE — no payment or wallet: Free preflight on a URL: HTTP status, content type, byte size, title, language, and whether a bot wall is waiting ( |
| readfetch_feedbackA | FREE — report integration, docs or site issues for a prior call. Bind with request_id from X-Request-Id. Paid delivery disputes use /v1/claims, not this tool. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 15 tools
Descriptions explicitly route the agent between overlapping extraction tools (text = no JS, scrape = Chromium render, residential = IP-blocked sites, section = single selector, batch = many URLs), which resolves most ambiguity. Some boundary cases remain (text vs scrape vs residential on a JS-heavy blocked site), but the 'prefer X when Y' guidance is unusually explicit.
Every tool uses the readfetch_ prefix followed by a lowercase snake_case noun (text, scrape, fetch, batch, pdf, screenshot, search, crawl, crawl_status, probe, feedback). The pattern is uniform and predictable, with the nested crawl_status being the only compound and it reads naturally.
15 tools sits at the top of the well-scoped range but each maps to a distinct capability of a scraping proxy (discovery, extraction variants, rendering, raw HTTP, utilities). Nothing appears redundant enough to cut without losing a real use case.
The surface covers the full pipeline: discovery (map, search, probe), extraction (text, scrape, section, batch, pdf), crawling (crawl + crawl_status), raw HTTP, screenshots, and change detection. Minor gaps exist—no crawl cancel/delete, no structured/schema extraction, and the referenced claims/refund route is not exposed as a tool—but agents can work around these.