Skip to main content
Glama

readfetch_screenshot

Read-only

Screenshot a public URL in headless Chromium (page JavaScript runs; no ad blocker) and return PNG or JPEG in JSON — image_base64, mime, width, height, status_code, billed (not a hosted URL). Scope: viewport only (full_page: false), full scrollable page (default), or one element (selector). mode caps total render time: fast (15 s), render (30 s, default), full (60 s, always full-page regardless of full_page). Set width/height before navigation (default 1280×800, max 3840×2160). delay_ms (0–30000) waits after navigation, then captures — raise it or use mode=full for slow SPAs and lazy media. Prefer readfetch_text or readfetch_scrape for extractable text; readfetch_pdf for PDF files; readfetch_fetch for raw HTTP without rendering. Read-only on the origin (GET + render, no form POST). Bot-check or blank frames may still return pixels with billed: false and 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. Changed1 schema field changed
    • changedOutput schema / properties / hint / type
      Previous value: -"null"New value: +[
      +  "string",
      +  "null"
      +]
  2. Changed9 schema fields changed
    • 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"
      +}
  3. Changed1 schema field changed
    • removedInput schema / properties / egress
      Removed value: -{
      -  "description": "Exit to leave through: `direct` (this service's own datacentre egress) or `residential` (a residential address pool, for targets that refuse datacentre addresses). Omit to use the default route.",
      -  "title": "Egress",
      -  "type": "string"
      -}
  4. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only say readOnly+openWorld, but the description adds substantial behavioral context: JavaScript runs, no ad blocker, bot-check/blank frames may still return pixels with billed:false and a hint, and billing is x402-paid like other routes. It also confirms read-only semantics (GET + render, no form POST), consistent with the annotation.

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 the core action and return fields, then scoping, then timing, then sibling routing — a sensible priority order with no filler. It is dense semicolon-chained prose rather than structured bullets, which costs a point for scanability given eight parameters.

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?

Covers the full decision surface: scope modes, viewport constraints, timing budget, delay-based waiting for SPAs, degradation cases (bot checks, blank frames) and billing behavior. An output schema exists, so the brief field enumeration is sufficient rather than 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 would be 3; the description goes further by explaining cross-parameter interaction the schema cannot express — mode=full overrides full_page, width/height apply before navigation, and delay_ms runs after navigation and before capture. Minor remaining gap: no guidance on practical selector failure behavior.

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?

Opens with a specific verb + resource + environment ("Screenshot a public URL in headless Chromium") and immediately states the return shape (PNG/JPEG in JSON with named fields). An agent can distinguish this from readfetch_fetch, readfetch_pdf, and readfetch_text without opening a 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?

Explicitly routes to alternatives with conditions: readfetch_text/readfetch_scrape for extractable text, readfetch_pdf for PDF files, readfetch_fetch for raw HTTP without rendering. Also gives in-tool selection guidance (mode tradeoffs, when to raise delay_ms or use mode=full for slow SPAs).

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