Skip to main content
Glama

website-screenshots.capture

Capture a screenshot of a public website so the user or agent can inspect its layout, content, and UI.

The image is saved to account file storage. The response includes screenshot_url for API users and download_code for agents to run vee3-get-file.

Cost = 20 tokens.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesPublic http or https URL to capture. Private, localhost, and internal network addresses are blocked.
formatNoOutput image format. 'png' preserves lossless quality (default). 'jpeg' produces smaller files.png
qualityNoJPEG compression quality from 0 (smallest) to 100 (best). Only applies when format is 'jpeg'; ignored for PNG.
dark_modeNoWhen true, emulate prefers-color-scheme: dark so sites with dark-mode CSS render in dark mode. Has no effect on sites without dark-mode styling.
file_nameNoOptional account-relative storage path for the screenshot. If omitted, the file is stored under downloads/ with a generated name.
full_pageNoCapture the full scrollable page. When false, only the viewport area is captured.
wait_untilNoWhen to take the screenshot: 'load' (load event), 'domcontentloaded' (DOM ready, faster; use with post_load_wait to let the page settle), or 'networkidle' (no network activity for 500ms; can time out on pages with ongoing requests).domcontentloaded
post_load_waitNoExtra seconds to wait after wait_until before capturing. Only valid when wait_until is domcontentloaded. Use this instead of networkidle when pages keep network activity.
viewport_widthNoBrowser viewport width in pixels.
timeout_secondsNoMaximum seconds to wait for the page to load before failing.
viewport_heightNoBrowser viewport height in pixels.
block_cookie_bannersNoWhen true, attempt to dismiss common cookie consent banners and overlays before capture. Best-effort - custom or first-party banners may remain.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNoEcho of requested URL.
formatNoEcho of the requested output format (png or jpeg).
statusNoAlways "completed" for synchronous capture.
commandNoSuggested terminal command for downloading to a local path.
qualityNoEcho of JPEG quality used when format is jpeg.
dark_modeNoEcho of whether dark color scheme emulation was used.
file_nameNoAccount-relative path where the screenshot was stored.
full_pageNoWhether full page was captured.
created_atNoISO 8601 timestamp.
expires_atNoISO 8601 timestamp when the download code can no longer be resolved (60 minutes after reserve).
download_idNoStable identifier for the reserved download.
download_codeNoShort code to pass to the @vee3/cli `vee3-get-file` command.
screenshot_idNoUnique identifier, prefix ss_.
retained_untilNoISO 8601 timestamp when account storage retention expires.
screenshot_urlNoSigned download URL from account file storage.
viewport_widthNoActual viewport width used.
file_size_bytesNoImage file size in bytes.
install_commandNoOne-time command to install the Vee3 CLI (`npm install -g @vee3/cli`). On networks that inspect HTTPS, install may require Node 22.15+ with NODE_OPTIONS=--use-system-ca.
troubleshootingNoWhat to do if installation or downloading fails: re-read this tool's description via meta-tools.describe for setup and troubleshooting steps.
viewport_heightNoActual viewport height used.
block_cookie_bannersNoEcho of whether cookie banner dismissal was attempted.

Schema Changelog

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

  1. Changed2 schema fields changed
    • addedInput schema / properties / post_load_wait
      Added value: +{
      +  "default": 0,
      +  "description": "Extra seconds to wait after wait_until before capturing. Only valid when wait_until is domcontentloaded. Use this instead of networkidle when pages keep network activity.",
      +  "maximum": 20,
      +  "minimum": 0,
      +  "title": "Post Load Wait",
      +  "type": "integer"
      +}
    • changedInput schema / properties / wait_until / description
      Previous value: -"When to take the screenshot: 'load' (load event), 'domcontentloaded' (DOM ready, faster), or 'networkidle' (no network activity for 500ms, slowest but most complete)."New value: +"When to take the screenshot: 'load' (load event), 'domcontentloaded' (DOM ready, faster; use with post_load_wait to let the page settle), or 'networkidle' (no network activity for 500ms; can time out on pages with ongoing requests)."
  2. Changed17 schema fields changed
    • addedInput schema / properties / file_name
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 255,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Optional account-relative storage path for the screenshot. If omitted, the file is stored under downloads/ with a generated name.",
      +  "title": "File Name"
      +}
    • removedInput schema / properties / return_mode
      Removed value: -{
      -  "default": "both",
      -  "description": "How to deliver the result. 'url' returns JSON with a signed screenshot_url (valid ~1 hour). 'image' returns an inline image the agent can view directly. 'both' returns JSON metadata plus an inline image (default). Inline images over 10 MB fall back to the signed URL.",
      -  "enum": [
      -    "url",
      -    "image",
      -    "both"
      -  ],
      -  "title": "Return Mode",
      -  "type": "string"
      -}
    • addedOutput schema / properties / command
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Suggested terminal command for downloading to a local path.",
      +  "title": "Command"
      +}
    • addedOutput schema / properties / download_code
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Short code to pass to the @vee3/cli `vee3-get-file` command.",
      +  "title": "Download Code"
      +}
    • addedOutput schema / properties / download_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Stable identifier for the reserved download.",
      +  "title": "Download Id"
      +}
    • removedOutput schema / properties / error
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Present on HTTP 200 when return_mode is \"image\" and the image exceeds the inline size limit. Value is \"inline_image_unavailable\".",
      -  "title": "Error"
      -}
    • addedOutput schema / properties / expires_at
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "ISO 8601 timestamp when the download code can no longer be resolved (60 minutes after reserve).",
      +  "title": "Expires At"
      +}
    • addedOutput schema / properties / file_name
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Account-relative path where the screenshot was stored.",
      +  "title": "File Name"
      +}
    • removedOutput schema / properties / inline_image
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "boolean"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Whether an inline image is included in inline_image_data.",
      -  "title": "Inline Image"
      -}
    • removedOutput schema / properties / inline_image_data
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Base64-encoded image when return_mode is image or both.",
      -  "title": "Inline Image Data"
      -}
    • removedOutput schema / properties / inline_image_skip_reason
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Reason the inline image was omitted when over the size limit.",
      -  "title": "Inline Image Skip Reason"
      -}
    • addedOutput schema / properties / install_command
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "One-time command to install the Vee3 CLI (`npm install -g @vee3/cli`). On networks that inspect HTTPS, install may require Node 22.15+ with NODE_OPTIONS=--use-system-ca.",
      +  "title": "Install Command"
      +}
    • removedOutput schema / properties / message
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Human-readable detail when error is set on an otherwise successful capture.",
      -  "title": "Message"
      -}
    • addedOutput schema / properties / retained_until
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "ISO 8601 timestamp when account storage retention expires.",
      +  "title": "Retained Until"
      +}
    • removedOutput schema / properties / return_mode
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Echo of the requested return mode.",
      -  "title": "Return Mode"
      -}
    • changedOutput schema / properties / screenshot_url / description
      Previous value: -"Signed download URL, valid for about 1 hour."New value: +"Signed download URL from account file storage."
    • addedOutput schema / properties / troubleshooting
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "What to do if installation or downloading fails: re-read this tool's description via meta-tools.describe for setup and troubleshooting steps.",
      +  "title": "Troubleshooting"
      +}
  3. First observed

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral disclosure. It reveals that images are saved to account file storage, the response includes screenshot_url and download_code for retrieval, and the cost is 20 tokens. It also states the restriction to public websites. These are significant behavioral details, though it could mention potential failure modes or rate limits.

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?

The description is three concise sentences, each providing distinct information: the core purpose, storage/response details, and cost. It is front-loaded with the primary action and avoids unnecessary elaboration or repetition of schema content.

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

Completeness4/5

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

Given the tool's complexity (12 parameters, output schema present), the description covers the essential non-schema aspects: purpose, storage, response fields, and cost. It does not need to explain return values because an output schema exists. It could mention more behavioral limitations, but the schema covers parameter constraints, making this description sufficiently complete.

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

Parameters3/5

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

The input schema has 100% description coverage across all 12 parameters, with detailed explanations for each (e.g., wait_until, post_load_wait, format, etc.). The tool description itself does not add parameter-specific meaning, but since the schema fully documents parameters, a baseline score of 3 is appropriate.

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?

The description clearly states the tool's purpose: 'Capture a screenshot of a public website so the user or agent can inspect its layout, content, and UI.' This is a specific verb and resource, and it distinguishes the tool from other siblings that handle data retrieval or management rather than visual inspection.

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?

The description provides clear context for when to use the tool ('so the user or agent can inspect its layout, content, and UI') and implies that it is for public websites only. Though it does not explicitly mention alternatives or exclusions, there are no direct sibling screenshot tools, making this guidance adequate.

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.

TDQS

A4.1/5.0
Disambiguation5/5

Each tool has a distinct purpose, further clarified by group prefixes and clear descriptions. Within each group, tools perform different operations (e.g., domains.lookup vs. domains.whois vs. domains.rdap) with no ambiguity.

Naming Consistency5/5

All tools follow a consistent group.tool_name pattern using snake_case. The naming is predictable and uniformly applied across all groups.

Tool Count4/5

78 tools is high, but the server aggregates multiple distinct API domains (11 groups). Each group has a reasonable number of tools, typically under 10, with TikTok having 17. The count reflects breadth, not bloat.

Completeness5/5

Each domain's tool set covers the primary expected operations (e.g., search, details, reviews, metrics, user info). There are no obvious gaps for read-only analytical use; features like posting are likely out of scope.