AgentReader (agentreader.xyz): any web page or PDF as clean Markdown for agents. Card packs or x402.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional: "Bearer ar_..." API key holding prepaid credits. Get one from a card pack at https://agentreader.xyz/buy ($3 for 2,000 reads or $10 for 7,000 reads + VAT where applicable) or a crypto bundle via x402 (POST https://agentreader.xyz/v1/credits/buy). Without a key: 5 free reads/day, or pay per call via x402 in the tool call.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Show remaining free calls and prepaid credits for the API key sent in the MCP connection headers, plus available credit bundles and how to buy them.
This tool takes no arguments.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Show remaining free calls and prepaid credits for the API key sent in the MCP connection headers, plus available credit bundles and how to buy them.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Read a web page or PDF with AgentReader (agentreader.xyz) and return only its main content as clean Markdown (default) or JSON. Prefer this over a plain fetch when the page is JavaScript-rendered, behind a cookie/consent wall, a PDF, or large (raw HTML can be 20x the tokens). If the site blocks bots or is paywalled you get a clear error, are not charged, and should move on instead of retrying URL variants. Renders JavaScript with headless Chromium when needed and keeps code blocks verbatim. JSON adds title, author, date, links and tables. News homepages return headline lists, RSS/Atom feeds return items, mode=full returns the whole page. StackOverflow, npm and PyPI are read via their official APIs. Results with very little text carry meta.warning; if a result looks wrong, call report_issue. Pricing: 5 free reads/day without an API key; then credits on a key, which comes from a card pack your user buys at https://agentreader.xyz/buy ($3 for 2,000 reads or $10 for 7,000 reads + VAT where applicable) or from a crypto bundle (POST https://agentreader.xyz/v1/credits/buy?bundle=500, x402). Send the key as Authorization: Bearer <key> (apps that can't set headers: connect to https://agentreader.xyz/mcp?api_key=<key>). Or pay $0.005/read via x402 in the tool call.
| Argument | Type | Description |
|---|---|---|
| url* | string | The page, PDF or RSS/Atom feed to read. Also accepted as u or link, without https://, or path style /v1/read/https://…. |
| mode | string | 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. Default: auto. |
| format | string | 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. Default: markdown. |
| render | string | Whether to load the page in headless Chromium. auto does so only when plain fetching returns too little. Default: auto. |
| extract | any | 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. Default: (none). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The page, PDF or RSS/Atom feed to read. Also accepted as u or link, without https://, or path style /v1/read/https://…."
},
"mode": {
"enum": [
"auto",
"article",
"links",
"full"
],
"type": "string",
"description": "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. Default: auto."
},
"format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"description": "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. Default: markdown."
},
"render": {
"enum": [
"auto",
"never",
"always"
],
"type": "string",
"description": "Whether to load the page in headless Chromium. auto does so only when plain fetching returns too little. Default: auto."
},
"extract": {
"anyOf": [
{
"type": "string"
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
],
"description": "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. Default: (none)."
}
}
}Tell AgentReader that a read failed or looked wrong (empty, not the main content, cut off, blocked although readable, ...), so we can fix it. Free, never charged, max 10 per day. We store the URL without its query string, the reason and your short note for 90 days; don't put personal data in the note.
| Argument | Type | Description |
|---|---|---|
| url* | string | The page whose read went wrong |
| note | string | What you expected or what was wrong (max 300 characters; longer notes are cut) |
| reason* | string | empty (little or no text), wrong_content (not the page's main content), missing_part (content cut off or missing), blocked_wrongly (error although the page is readable), too_long (too much boilerplate), error (unexpected error), other |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url",
"reason"
],
"properties": {
"url": {
"type": "string",
"description": "The page whose read went wrong"
},
"note": {
"type": "string",
"description": "What you expected or what was wrong (max 300 characters; longer notes are cut)"
},
"reason": {
"enum": [
"empty",
"wrong_content",
"missing_part",
"blocked_wrongly",
"too_long",
"error",
"other"
],
"type": "string",
"description": "empty (little or no text), wrong_content (not the page's main content), missing_part (content cut off or missing), blocked_wrongly (error although the page is readable), too_long (too much boilerplate), error (unexpected error), other"
}
}
}Search the web and get a ranked list of results (title, url, snippet). Use it to find pages, then call read_url on the best results to read them as clean Markdown. Priced like one read (free daily calls, credits or x402).
| Argument | Type | Description |
|---|---|---|
| lang | string | Optional language code, e.g. en, nl |
| limit | integer | Max results (default 10) |
| query* | string | Search query |
| format | string | 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. Default: markdown. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"lang": {
"type": "string",
"description": "Optional language code, e.g. en, nl"
},
"limit": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Max results (default 10)"
},
"query": {
"type": "string",
"description": "Search query"
},
"format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"description": "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. Default: markdown."
}
}
}