Skip to main content
Glama
readfetch

@readfetch/mcp-x402-proxy

readfetch_screenshot

Read-only

Capture a public URL as PNG or JPEG with headless Chromium and return base64 image data plus metadata for viewport, full-page, or element-specific screenshots.

Instructions

Capture a public URL in headless Chromium and return PNG or JPEG as JSON (image_base64, mime, width, height, status_code, billed) — not a hosted URL. Scope: viewport (full_page: false), the full scrollable page (default), or one element (selector). mode is the whole-call budget: fast (15 s), render (30 s, default), or full (60 s, always full-page). Set width/height before navigation (default 1280×800); use delay_ms after load for SPAs and lazy media. Prefer readfetch_text or readfetch_scrape for readable text, readfetch_pdf for PDF documents, readfetch_fetch for raw HTTP. Blank or bot-check frames may still include an image but billed: false with a hint; paid x402 like other routes.

Input Schema

NameRequiredDescriptionDefault
urlYesPublic http(s) URL to render in headless Chromium.
modeNoWhole-call budget: fast (15 s), render (30 s, default), or full (60 s; always captures the full scrollable page).render
widthNoViewport width in pixels before navigation (default 1280, max 3840).
formatNoImage encoding for `image_base64` (png default, or jpeg).png
heightNoViewport height in pixels before navigation (default 800, max 2160).
delay_msNoMilliseconds to wait after navigation before capture (0–30000); use for SPAs and lazy-loaded content.
selectorNoCSS selector — capture that element's box only. Omit for page/viewport per full_page.
full_pageNotrue (default): entire scrollable document; false: viewport only. Ignored when mode=full.

Output Schema

NameRequiredDescriptionDefault
urlNo
hintNo
mimeNo
sizeNo
widthNo
billedNo
formatNo
heightNo
statusNo
status_codeNo
image_base64No
content_sha256No

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changedv0.1.13
    • addedInput schema / properties / delay_ms / description
      Added value: +"Milliseconds to wait after navigation before capture (0–30000); use for SPAs and lazy-loaded content."
    • addedInput schema / properties / format / description
      Added value: +"Image encoding for `image_base64` (png default, or jpeg)."
    • addedInput schema / properties / full_page / description
      Added value: +"true (default): entire scrollable document; false: viewport only. Ignored when mode=full."
    • addedInput schema / properties / height / description
      Added value: +"Viewport height in pixels before navigation (default 800, max 2160)."
    • addedInput schema / properties / mode / description
      Added value: +"Whole-call budget: fast (15 s), render (30 s, default), or full (60 s; always captures the full scrollable page)."
    • changedInput schema / properties / selector / description
      Previous value: -"Capture one element."New value: +"CSS selector — capture that element's box only. Omit for page/viewport per full_page."
    • addedInput schema / properties / url / description
      Added value: +"Public http(s) URL to render in headless Chromium."
    • addedInput schema / properties / width / description
      Added value: +"Viewport width in pixels before navigation (default 1280, max 3840)."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "billed": {
      +      "type": "boolean"
      +    },
      +    "content_sha256": {
      +      "type": "string"
      +    },
      +    "format": {
      +      "type": "string"
      +    },
      +    "height": {
      +      "type": "integer"
      +    },
      +    "hint": {
      +      "type": "null"
      +    },
      +    "image_base64": {
      +      "type": "string"
      +    },
      +    "mime": {
      +      "type": "string"
      +    },
      +    "size": {
      +      "type": "integer"
      +    },
      +    "status": {
      +      "type": "string"
      +    },
      +    "status_code": {
      +      "type": "integer"
      +    },
      +    "url": {
      +      "format": "uri",
      +      "type": "string"
      +    },
      +    "width": {
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
  2. First observedv0.1.0

TDQS

A4.6/5.0
Behavior4/5

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

Adds substantial context beyond the annotations: budget semantics per mode, viewport-before-navigation ordering, full_page being ignored under mode=full, billing behavior on blank/bot-check frames (billed: false plus a hint), and that payment is x402 like other routes. Annotations already cover read-only/open-world, so the remaining gap is minor (e.g., no rate limits or size caps on the returned image).

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 the crucial 'returns base64, not a URL' fact, then scope, then budget, then siblings. Dense and nearly waste-free, though the parenthetical output-field enumeration overlaps what the output schema already declares.

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 an 8-parameter, open-world capture tool with an output schema and annotations, everything needed to call it correctly is present: scope selection, timing budget, delay guidance, billing caveats, and sibling routing. The output schema handles the return contract, so no further return documentation is required.

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 baseline is 3, but the description adds cross-parameter meaning the schema does not: width/height must be set before navigation, mode acts as a whole-call budget, and delay_ms is specifically for SPAs and lazy content. This is genuine value-add beyond the field-level descriptions.

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 precise verb+resource ('Capture a public URL in headless Chromium') and immediately pins the return shape (PNG/JPEG as JSON with base64, not a hosted URL). It explicitly differentiates itself from five siblings by naming them, so an agent can route without opening another 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 explicit branching alternatives: readfetch_text/scrape for readable text, readfetch_pdf for PDFs, readfetch_fetch for raw HTTP. Also states when to use delay_ms (SPAs, lazy media) and the scope options (viewport, full page, selector element).

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