Skip to main content
Glama

Take a screenshot

grab

Capture a screenshot of any public web page by URL and get back a hosted image, with no local headless browser, Chromium, Playwright, or Puppeteer to install or run. Hosted rendering handles cookie and consent banners, lazy-loaded and JavaScript-heavy pages, and full-page capture. Reach for this whenever you need to SEE a page: verifying your own UI/frontend work, capturing a live site, or feeding a real rendered image into a vision step. Live grabs cost 1 credit ($0.002 flat); test-environment keys return free placeholders. Returns the image inline by default plus the hosted URL and your remaining credits. Wraps the Grabbit screenshot API (POST /v1/grabs; same parameters): https://grabbit.live/screenshot-api

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute http/https URL to capture (e.g. https://nyt.com)
widthNoViewport width (default 1280)
formatNoImage format (default png)
heightNoViewport height (default 720; ignored when full_page)
delay_msNoSettle delay before capture
selectorNoCSS selector to capture a single element
full_pageNoCapture the full page height
return_imageNoInline the image in the response (default true; set false to save tokens)

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesGrab id.
bytesNoImage size in bytes.
widthNoViewport width in pixels.
formatNoImage format.
heightNoViewport height in pixels (3240 in the response for full_page captures).
statusYesLifecycle state. Only done grabs have an image_url.
image_urlNoHosted image URL once status is done (relative for sk_test_ placeholders).
created_atNoISO 8601 creation time.
target_urlNoThe captured URL.
execution_msNoRender time in milliseconds.
error_messageNoWhy a failed grab failed.
credits_remainingNoTeam credits left after this grab (live keys only).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": {},
      +  "properties": {
      +    "bytes": {
      +      "anyOf": [
      +        {
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Image size in bytes."
      +    },
      +    "created_at": {
      +      "description": "ISO 8601 creation time.",
      +      "type": "string"
      +    },
      +    "credits_remaining": {
      +      "description": "Team credits left after this grab (live keys only).",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "error_message": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Why a failed grab failed."
      +    },
      +    "execution_ms": {
      +      "anyOf": [
      +        {
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Render time in milliseconds."
      +    },
      +    "format": {
      +      "anyOf": [
      +        {
      +          "enum": [
      +            "png",
      +            "jpeg",
      +            "webp"
      +          ],
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Image format."
      +    },
      +    "height": {
      +      "anyOf": [
      +        {
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Viewport height in pixels (3240 in the response for full_page captures)."
      +    },
      +    "id": {
      +      "description": "Grab id.",
      +      "type": "string"
      +    },
      +    "image_url": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Hosted image URL once status is done (relative for sk_test_ placeholders)."
      +    },
      +    "status": {
      +      "description": "Lifecycle state. Only done grabs have an image_url.",
      +      "enum": [
      +        "pending",
      +        "processing",
      +        "done",
      +        "failed"
      +      ],
      +      "type": "string"
      +    },
      +    "target_url": {
      +      "description": "The captured URL.",
      +      "type": "string"
      +    },
      +    "width": {
      +      "anyOf": [
      +        {
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Viewport width in pixels."
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "status"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations (openWorldHint, idempotentHint=false) by disclosing the credit cost (1 credit, $0.002 flat), that test keys return free placeholders, that hosted rendering handles cookie/consent banners and lazy-loaded JS, and that the response includes the inline image plus hosted URL and remaining credits. This is the rich behavioral context annotations cannot carry.

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 benefit, then cost and return behavior; every sentence carries usable signal. Slight bloat from the 'no Playwright/Puppeteer to install' framing and the trailing API endpoint citation, which are marketing/reference rather than decision-critical.

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?

With an output schema present, the description needn't explain return values yet still notes the inline image plus hosted URL and remaining credits. For a single-required-param, 8-parameter tool it covers purpose, cost, use cases, and rendering behavior completely.

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?

Schema coverage is 100%, so all 8 parameters carry their own descriptions, including defaults, bounds, and the height/full_page interaction. The description reinforces a couple of these (inline image by default, full-page capture) but adds little syntax or semantics beyond the schema, so the baseline 3 is correct.

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 ('Capture a screenshot of any public web page by URL and get back a hosted image') and clearly distinguishes itself from the sibling read/listing tools (get_grab, list_grabs) by being the creation tool. An agent can tell this apart from the retrieval siblings without opening schemas.

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-to-use framing ('Reach for this whenever you need to SEE a page: verifying your own UI/frontend work, capturing a live site, or feeding a real rendered image into a vision step'). It does not name the sibling alternatives or state when not to use this versus get_grab/list_grabs, so it stops short of a 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.