Skip to main content
Glama

Read URL / web page / PDF to Markdown

read_url
Read-onlyIdempotent

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. JSON URLs (APIs, e.g. datasets-server.huggingface.co) come back pretty-printed in a json block, or as parsed `data` with format=json; plain-text and Markdown files (.txt, .md, raw.githubusercontent.com) are returned cleaned; CSV (text/csv, .csv) comes back in a csv block, with parsed rows as data/tables when cheap. Images, audio, video, archives and office files get HTTP 415 (not charged). 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 (apps that can't set headers: connect to https://agentreader.xyz/mcp?api_key=). Or pay $0.005/read via x402 in the tool call.

Input Schema

NameRequiredDescriptionDefault
urlYesThe page, PDF or RSS/Atom feed to read. Also accepted as u or link, without https://, or path style /v1/read/https://….
modeNoarticle: 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.
formatNomarkdown 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.
renderNoWhether to load the page in headless Chromium. auto does so only when plain fetching returns too little. Default: auto.
extractNoReturns 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).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / format / description
      Previous value: -"markdown returns the text only. json adds title, author, date, links, tables and metadata. Default: markdown."New value: +"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."
  2. Changed5 schema fields changed
    • changedInput schema / properties / extract / description
      Previous value: -"Optional structured fields to pull from page metadata (JSON-LD, OpenGraph, microdata) and heuristics: comma list like 'title,author,date,price,currency,summary,image,brand,rating' or a JSON schema {properties:{price:{type:'number'}}}. Returned as `fields` (front matter in markdown)."New value: +"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)."
    • changedInput schema / properties / format / description
      Previous value: -"markdown (default) or json"New value: +"markdown returns the text only. json adds title, author, date, links, tables and metadata. Default: markdown."
    • changedInput schema / properties / mode / description
      Previous value: -"auto (default): article text, or a headline+link list for news homepages/index pages; article: main article only; links: headline+link list; full: whole page as Markdown. RSS/Atom feeds always return their items."New value: +"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."
    • changedInput schema / properties / render / description
      Previous value: -"JavaScript rendering with headless Chromium: auto (default), never, always"New value: +"Whether to load the page in headless Chromium. auto does so only when plain fetching returns too little. Default: auto."
    • changedInput schema / properties / url / description
      Previous value: -"http(s) URL of a web page, RSS/Atom feed or PDF (https:// assumed if omitted)"New value: +"The page, PDF or RSS/Atom feed to read. Also accepted as u or link, without https://, or path style /v1/read/https://…."
  3. Changed1 schema field changed
    • removedInput schema / properties / archive
      Removed value: -{
      -  "description": "auto (default): if the live page is bot-blocked, return the latest Wayback Machine copy, flagged with meta.source='archive.org' and its snapshot time; never: fail instead",
      -  "enum": [
      -    "auto",
      -    "never"
      -  ],
      -  "type": "string"
      -}
  4. Changed1 schema field changed
    • addedInput schema / properties / archive
      Added value: +{
      +  "description": "auto (default): if the live page is bot-blocked, return the latest Wayback Machine copy, flagged with meta.source='archive.org' and its snapshot time; never: fail instead",
      +  "enum": [
      +    "auto",
      +    "never"
      +  ],
      +  "type": "string"
      +}
  5. Changed3 schema fields changed
    • addedInput schema / properties / extract
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "additionalProperties": {},
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    }
      +  ],
      +  "description": "Optional structured fields to pull from page metadata (JSON-LD, OpenGraph, microdata) and heuristics: comma list like 'title,author,date,price,currency,summary,image,brand,rating' or a JSON schema {properties:{price:{type:'number'}}}. Returned as `fields` (front matter in markdown)."
      +}
    • changedInput schema / properties / url / description
      Previous value: -"http(s) URL of an HTML page or PDF"New value: +"http(s) URL of a web page, RSS/Atom feed or PDF (https:// assumed if omitted)"
    • removedInput schema / properties / url / format
      Removed value: -"uri"
  6. Changed1 schema field changed
    • addedInput schema / properties / mode
      Added value: +{
      +  "description": "auto (default): article text, or a headline+link list for news homepages/index pages; article: main article only; links: headline+link list; full: whole page as Markdown. RSS/Atom feeds always return their items.",
      +  "enum": [
      +    "auto",
      +    "article",
      +    "links",
      +    "full"
      +  ],
      +  "type": "string"
      +}
  7. Changed1 schema field changed
    • changedInput schema / properties / render / description
      Previous value: -"headless browser rendering: auto (default), never, always"New value: +"JavaScript rendering with headless Chromium: auto (default), never, always"
  8. First observed

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the readOnly/idempotent annotations: discloses headless Chromium rendering fallback, verbatim code-block preservation, HTTP 415 for unsupported media types, no charge on failure, meta.warning on thin results, API-backed sources (StackOverflow/npm/PyPI), and per-read pricing/auth mechanics. An agent knows both the failure modes and the cost consequences before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded correctly in the first sentence, but the rest is a dense run-on paragraph mixing usage guidance, content-type behavior, and lengthy pricing detail (card packs in dollars, VAT, crypto bundle endpoint, x402 per-read rate). The pricing block is useful for cost awareness but is disproportionately verbose relative to selection needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates fully: it explains the Markdown vs JSON return shapes, the extra JSON fields (`fields`, links, tables), the `data` key for JSON/CSV URLs, and the meta.warning signal. Nothing an agent needs to interpret results or avoid misuse is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning about what the url parameter accepts and how each content type behaves (JSON pretty-printed into a ```json block, CSV into ```csv with parsed rows, .txt/.md cleaned, images/audio/video/office → 415). The mode and format explanations largely restate the schema descriptions rather than extending them, which keeps it out of 5 territory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read a web page or PDF with AgentReader') plus the exact output shape ('only its main content as clean Markdown (default) or JSON'). It also distinguishes itself from the generic alternative by naming when a plain fetch is insufficient, so an agent can identify it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit selection rule ('Prefer this over a plain fetch when the page is JavaScript-rendered, behind a cookie/consent wall, a PDF, or large') and an explicit stop rule ('if the site blocks bots or is paywalled ... move on instead of retrying URL variants'). It also routes to a sibling ('call report_issue') when results look wrong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources