Read the web pages your AI agent's fetch can't.
Built-in fetch tools return empty JavaScript shells, cookie walls, raw PDF bytes, or HTML where menus and ads burn thousands of tokens. AgentReader returns the actual content as clean, compact Markdown or JSON. If a site blocks bots, you get a clear error fast and pay nothing. 5 free reads a day, then $0.005 per call in USDC via x402, no account needed.
Connect your agentTry it on a pagePricing
Returns the Markdown your agent would get. Uses the free tier: 5 reads a day per IP. Or try an example: React docs · arXiv PDF · BBC News headlines
Agents fetch web pages all the time, and the result is often useless. These are the cases AgentReader is built for:
What it can't do: some sites (large news and shopping sites, for example) block automated readers with bot protection. AgentReader doesn't try to get around that. You get a blocked error within seconds and are not charged, so your agent can move on.
A real example: the React docs page react.dev/learn, measured on 18 Oct 2026 with the cl100k_base tokenizer.
Plain HTTP fetch: 265 KB of HTML, ~91,900 tokens
<!DOCTYPE html><html lang="en" dir="ltr"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1" data-next-head=""/><script async="" src="https://www.googletagmanager.com/gtag/js?id=G-B1E83PJ3RT"></script><title data-next-head="">Quick Start – React</title><link rel="canonical" href="https://react.dev/learn" data-next-head=""/><link rel=… (15 script tags, inline styles, navigation for the whole site…)
AgentReader: 17 KB of Markdown, ~4,100 tokens
# Quick Start Welcome to the React documentation! This page will give you an introduction to 80% of the React concepts that you will use on a daily basis. ### You will learn - How to create and nest components - How to add markup and styles - How to display data - How to render conditions and lists …
Same content, about 22 times fewer tokens. Savings vary by page: simple pages shrink less, heavy pages more. Some agent tools already convert HTML to text, but they usually can't render JavaScript, get past consent walls or read PDFs.
With format=json you also get structured fields: title, author, date, siteName, lang, wordCount, links[], tables[] and meta (for example whether a browser was used).
AgentReader is a remote MCP server at https://agentreader.xyz/mcp (streamable HTTP) with the tools read_url, search and get_balance, and a plain REST API. No key is needed for the 5 free reads a day.
claude mcp add --transport http agentreader https://agentreader.xyz/mcp # with an API key for prepaid credits: claude mcp add --transport http agentreader https://agentreader.xyz/mcp --header "Authorization: Bearer ar_..."
~/.cursor/mcp.json) and other clients with an mcpServers config{
"mcpServers": {
"agentreader": {
"url": "https://agentreader.xyz/mcp",
"headers": { "Authorization": "Bearer ar_..." }
}
}
}
Leave out headers if you don't have a key.
Settings → Connectors → Add custom connector, then paste https://agentreader.xyz/mcp. Custom connectors can't send an API key header, so this uses the free daily reads.
opencode.json){
"$schema": "https://opencode.ai/config.json",
"mcp": {
"agentreader": {
"type": "remote",
"url": "https://agentreader.xyz/mcp",
"enabled": true,
"headers": { "Authorization": "Bearer ar_..." }
}
}
}
curl "https://agentreader.xyz/v1/read?url=https://react.dev/learn" curl "https://agentreader.xyz/v1/read?url=https://react.dev/learn" -H "Authorization: Bearer ar_..." # use prepaid credits
Authorization: Bearer ar_..., or x-api-key): uses the prepaid credits on that key. You get a key when you buy a bundle or card pack.https://agentreader.xyz/v1/x402/read?url=… always uses x402.For GET /v1/read. The MCP tool read_url takes the same url, format, mode, render and extract arguments. Unknown values return a 400 error that explains the valid ones.
| Parameter | Values | Default | What it does | When to use it | Example |
|---|---|---|---|---|---|
url | any http(s) URL | (required) | The page, PDF or RSS/Atom feed to read. Also accepted as u or link, without https://, or path style /v1/read/https://…. | Always. URL-encode it if it has its own ?query. | /v1/read?url=https://react.dev/learn |
format | markdown, json | markdown | markdown returns the content as Markdown only. json wraps the same Markdown with title, author, date, word count, links, tables and metadata (meta.warning flags results that may be incomplete); there is no separate plain-text copy. | json when your code needs fields; markdown to pass straight to a model. | /v1/read?url=https://arxiv.org/pdf/1706.03762&format=json |
mode | auto, article, links, full | auto | article: main content only. links: list of headlines with links. full: the whole page, including non-article parts. auto picks article or links based on the page. RSS/Atom feeds always return their items. | links for homepages and index pages; full when the main-content extraction misses something. | /v1/read?url=https://www.bbc.com/news&mode=links |
render | auto, never, always | auto | Whether to load the page in headless Chromium. auto does so only when plain fetching returns too little. | always if a JavaScript page comes back incomplete; never for speed when you know the page is static. | /v1/read?url=https://react.dev/learn&render=never |
extract | comma list of field names, or a JSON schema | (none) | Returns named fields (title, author, date, price, currency, image, brand, sku, rating, availability, summary…) from JSON-LD, OpenGraph, microdata and meta tags. No LLM. Missing fields are null. In JSON as fields, in Markdown as front matter. | Product pages, articles and other pages with structured data. | /v1/read?url=https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html&format=json&extract=title,price,currency |
nocache | 1 | off | Skips the 10-minute result cache and reads the page again. | When the page changed in the last few minutes. | /v1/read?url=https://react.dev/learn&nocache=1 |
POST /v1/read with the same fields in a JSON body also works.
You only pay for successful reads. Blocked sites, timeouts and errors are free.
| Option | What you get | Price |
|---|---|---|
| Free | 5 calls/day per IP, no key | $0 |
| Pay per call | No account. Via x402 once free calls run out, or always at /v1/x402/read | $0.005 per call in USDC on Base |
| Credit bundle | 500 calls for $1 USDC, no expiry | $0.0020/call, one x402 payment |
| Credit bundle | 5,000 calls for $8 USDC, no expiry | $0.0016/call, one x402 payment |
| Card pack | 7,000 calls, no expiry | $10 by card (buy) |
A search costs the same as a read. Buying without a key gives you a new API key that holds the credits. Keys don't include the free daily calls. Pay by card at agentreader.xyz/buy; the card provider handles verification, and credits arrive once the payment confirms on Base.
curl -X POST "https://agentreader.xyz/v1/credits/buy?bundle=500" -H "Authorization: Bearer ar_..." # 402 with x402 payment request; pay and retry curl "https://agentreader.xyz/v1/balance" -H "Authorization: Bearer ar_..." # free calls left and credits
/v1/search?q=… and the MCP search tool return results (title, url, snippet) for your agent to read next. Example: /v1/search?q=x402+protocol&limit=5/v1/read?url=https://feeds.bbci.co.uk/news/world/rss.xmlNo. Sites with strong bot protection (Cloudflare challenges, DataDome, PerimeterX) usually block it. You get a blocked error quickly and pay nothing. Pages behind a login aren't supported.
Static pages usually take under a second or two. Pages that need a browser take longer, often several seconds. Results are cached for 10 minutes.
No account. For the free tier you need nothing. Beyond that, an agent can pay per call with x402, or you can buy a credit pack by card and use the API key.
Private and internal network addresses, and non-http(s) URLs. Requests are rate limited.
llms.txt · OpenAPI · MCP server card · x402 resources · status