Skip to main content
Glama
readfetch

@readfetch/mcp-x402-proxy

readfetch_scrape

Read-only

Load public URLs in headless Chromium and return Markdown, plain text, or HTML; choose fast, full JavaScript render, or deep scroll modes for dynamic pages.

Instructions

Load a public URL in headless Chromium and return Markdown, plain text, or HTML (format, plus status_code, title, cache_status, billed; optional links via advanced.include_links). mode sets latency and depth: fast (15 s, minimal render), render (30 s, default, full JS), full (60 s, scroll the page). fresh: true bypasses cache. Put scroll, wait_for, js_code, headers, cookies, and auth in advanced (options is deprecated, same shape). Prefer readfetch_text when JavaScript is not required; readfetch_fetch for raw HTTP/API bytes; readfetch_residential when the site blocks datacentre IPs; readfetch_screenshot for a PNG/JPEG. Bot-check or empty extractions may return billed: false with a hint.

Input Schema

NameRequiredDescriptionDefault
urlYesPublic http(s) URL to load in Chromium.
authNoOptional cookie, bearer, or basic auth for the page load.
modeNoWhole-call budget and render depth: fast (15 s), render (30 s, default), or full (60 s with page scroll).render
freshNoWhen true, bypass cached scrape results (default false).
formatNoPrimary body field returned: markdown (default), plain text, or raw HTML.markdown
optionsNoDeprecated — use `advanced` instead (same ScrapeOptions shape). Scheduled for removal in a future API semver bump.
advancedNoBrowser interactions: scroll, wait_for selector, js_code, headers, cookies, locale, include_links, etc.

Output Schema

NameRequiredDescriptionDefault
urlNo
titleNo
billedNo
statusNo
markdownNo
status_codeNo
cache_statusNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changedv0.1.13
    • addedInput schema / properties / advanced / description
      Added value: +"Browser interactions: scroll, wait_for selector, js_code, headers, cookies, locale, include_links, etc."
    • addedInput schema / properties / auth / description
      Added value: +"Optional cookie, bearer, or basic auth for the page load."
    • addedInput schema / properties / format / description
      Added value: +"Primary body field returned: markdown (default), plain text, or raw HTML."
    • addedInput schema / properties / fresh / description
      Added value: +"When true, bypass cached scrape results (default false)."
    • addedInput schema / properties / mode / description
      Added value: +"Whole-call budget and render depth: fast (15 s), render (30 s, default), or full (60 s with page scroll)."
    • addedInput schema / properties / url / description
      Added value: +"Public http(s) URL to load in Chromium."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "billed": {
      +      "type": "boolean"
      +    },
      +    "cache_status": {
      +      "type": "string"
      +    },
      +    "markdown": {
      +      "type": "string"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "status_code": {
      +      "type": "integer"
      +    },
      +    "title": {
      +      "type": "string"
      +    },
      +    "url": {
      +      "format": "uri",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  2. First observedv0.1.0

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint/openWorldHint annotations, it discloses per-mode latency budgets, that `fresh` bypasses cache, that `options` is deprecated in favour of `advanced`, and the edge case that bot-check or empty extractions can return billed: false with a hint. That is substantive behavioral context the agent could not infer from structured fields.

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

Conciseness4/5

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

Front-loaded with purpose and output, then parameters and routing; nearly every clause carries information. It is dense in a single block, and the parenthetical output-field list is slightly redundant given the output schema.

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?

For a 7-parameter scrape tool with an output schema present, the description covers rendering depth, latency budget, caching, auth, deprecation, and failure modes — nothing an agent needs before calling 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 already 100%, so the baseline is 3; the description still adds meaning by mapping mode to concrete time budgets (15/30/60 s), enumerating which knobs live in `advanced` (scroll, wait_for, js_code, headers, cookies, auth), and calling out the deprecated `options` alias.

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 ('Load a public URL in headless Chromium') and names the exact return artifacts, so it is immediately distinguishable from readfetch_fetch and readfetch_text.

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 explicit routing rules: 'Prefer readfetch_text when JavaScript is not required; readfetch_fetch for raw HTTP/API bytes; readfetch_residential when the site blocks datacentre IPs; readfetch_screenshot for a PNG/JPEG.' Each alternative comes with the condition that selects it.

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