Skip to main content
Glama

Razi Web Tools

screenshot_url

Capture a screenshot of any public web page, rendered in a real headless browser so JavaScript, web fonts and lazy-loaded images all appear. Returns JSON with a hosted image URL — not image bytes: { url, screenshotUrl (the same value under the older key), width, height, format, bytes, cached, source }. When source is "vps" the image is on razi.pro's CDN and every field is populated, except that height is null for a fullPage capture. If source is "thumbio" the renderer was unavailable and a third-party fallback produced the image: the URL points at image.thum.io rather than razi.pro, only width accompanies it (height, format and bytes are absent), and the fullPage, format, darkMode and delayMs options were ignored. Public pages only: every capture runs in a fresh browser with no cookies or credentials, so anything behind a login is unreachable, and a URL that is not http(s) or that resolves to a loopback, private or link-local address is refused with 400. Identical requests are cached for 7 days and return the same image (cached: true), so this cannot be used to poll a page for changes. Out-of-range numeric options are clamped to their stated range rather than rejected. Other failures: 429 over either rate limit, 403 when screenshots are switched off platform-wide, 502 when the render fails and no fallback is available. This is the most expensive call on the platform: it holds a whole browser worker for up to 50 seconds. Limited to 10 captures per minute and 100 per day per IP.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to capture. Must be publicly reachable over http or https; the scheme is required. Part of the cache key, so two spellings of the same page render twice.
widthNoViewport width in pixels. Default 1280; values outside 200-3840 are clamped into that range and fractions are truncated.
formatNoImage format. Default webp; an unrecognised value also falls back to webp.
heightNoViewport height in pixels. Default 800; values outside 200-4320 are clamped. Ignored when fullPage is true, where the returned height is null.
delayMsNoExtra wait after load, in milliseconds. Default 0, clamped to 0-5000. Use for pages with entrance animations or slow client-side rendering; it comes out of the same 50-second render budget.
darkModeNoRender with prefers-color-scheme: dark. Default false. Has no effect on sites that do not implement a dark theme.
fullPageNoCapture the entire scrollable page rather than just the viewport. Default false. Pages taller than 12000px are truncated at 12000px, which is a browser encoding limit, so a very long article returns only its top portion.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed7 schema fields changed
    • changedInput schema / properties / darkMode / description
      Previous value: -"Render with prefers-color-scheme: dark. Has no effect on sites that do not implement a dark theme."New value: +"Render with prefers-color-scheme: dark. Default false. Has no effect on sites that do not implement a dark theme."
    • changedInput schema / properties / delayMs / description
      Previous value: -"Extra wait after load, in milliseconds (max 5000). Use for pages with entrance animations or slow client-side rendering."New value: +"Extra wait after load, in milliseconds. Default 0, clamped to 0-5000. Use for pages with entrance animations or slow client-side rendering; it comes out of the same 50-second render budget."
    • changedInput schema / properties / format / description
      Previous value: -"Image format (default webp)"New value: +"Image format. Default webp; an unrecognised value also falls back to webp."
    • changedInput schema / properties / fullPage / description
      Previous value: -"Capture the entire scrollable page rather than just the viewport. Pages taller than 12000px are truncated at 12000px, which is a browser encoding limit, so a very long article returns only its top portion."New value: +"Capture the entire scrollable page rather than just the viewport. Default false. Pages taller than 12000px are truncated at 12000px, which is a browser encoding limit, so a very long article returns only its top portion."
    • changedInput schema / properties / height / description
      Previous value: -"Viewport height in pixels (200-4320, default 800). Ignored when fullPage is true."New value: +"Viewport height in pixels. Default 800; values outside 200-4320 are clamped. Ignored when fullPage is true, where the returned height is null."
    • changedInput schema / properties / url / description
      Previous value: -"The page to capture. Must be publicly reachable over http(s)."New value: +"The page to capture. Must be publicly reachable over http or https; the scheme is required. Part of the cache key, so two spellings of the same page render twice."
    • changedInput schema / properties / width / description
      Previous value: -"Viewport width in pixels (200-3840, default 1280)"New value: +"Viewport width in pixels. Default 1280; values outside 200-3840 are clamped into that range and fractions are truncated."
  2. First observed

TDQS

A4.7/5.0
Behavior5/5

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

No annotations are present, so the description carries the burden. It discloses fresh browser/no credentials, 7-day caching, parameter clamping, 429/403/502 errors, rate limits, 50s render budget, and thumbio fallback behavior that ignores some options. This is far beyond the bare minimum.

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

Conciseness5/5

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

Front-loaded with purpose and return shape, then fallback and constraints; every sentence adds a distinct fact (auth state, caching, clamping, error codes, cost). No fluff or unnecessary repetition despite the length, which is justified by the tool's complexity and absence of annotations.

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 complex 7-param tool with no output schema and no annotations, the description covers return values (including legacy key), source variants, edge cases (fullPage null height, truncation at 12000px), error codes, rate limits, and cost. An agent has all the context needed to decide when and how to call it.

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. The description adds extra context not in the schema: delayMs consumes the same 50-second budget, thumbio fallback ignores fullPage/format/darkMode/delayMs, and height is null for fullPage captures. This is meaningful but not essential given the schema's strong 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 specific action ('Capture a screenshot') with a clear resource ('any public web page') and rendering detail (headless browser with JS/fonts/lazy images). This distinguishes it from the sibling fetch_page_metadata and fetch_site_logo, which are about metadata/logo, not rendering.

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

Usage Guidelines4/5

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

Gives explicit when-not conditions: public pages only (no login), no polling due to 7-day cache, and HTTP/private-address restrictions. Does not name alternative sibling tools or say 'use fetch_page_metadata instead', so it stops short of a full 5.

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