Skip to main content
Glama
alterlab-mcp-server

alterlab-mcp-server

alterlab_screenshot

Capture a full-page PNG screenshot of a URL in a real headless browser, even when normal fetches hit 403/429, bot challenges, CAPTCHAs, or empty JavaScript shells.

Instructions

Capture a full-page PNG screenshot of one URL, an image rather than text content. Use when a normal fetch returns 403/429, a bot-protection challenge page, a CAPTCHA, or an empty JavaScript shell. Works on anti-bot-protected sites, rendered in a real headless browser. Use wait_for to wait for an element and wait_until to control load timing. Pass actions (for example dismiss_consent or evaluate) to prepare the page; the screenshot is captured after they run and action_results is returned.

Input Schema

NameRequiredDescriptionDefault
urlYesURL to take a screenshot of
cookiesNoInline cookies for a one-off authenticated screenshot
timeoutNoRequest timeout in seconds (1-300, API default 90)
locationNoGeo-targeting parameters for localized content scraping. Controls proxy country routing, Accept-Language header, and browser locale.
wait_forNoCSS selector to wait for before taking screenshot
use_proxyNoRoute through AlterLab's premium proxy (+$0.0002)
session_idNoUUID of a stored session, to screenshot a logged-in page
wait_untilNoPage load event to wait for before screenshotnetworkidle
proxy_countryNoISO country code for proxy geo-targeting. Requires use_proxy=true

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changedv1.9.0
    • addedInput schema / properties / cookies
      Added value: +{
      +  "additionalProperties": {
      +    "type": "string"
      +  },
      +  "description": "Inline cookies for a one-off authenticated screenshot",
      +  "type": "object"
      +}
    • addedInput schema / properties / location
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Geo-targeting parameters for localized content scraping. Controls proxy country routing, Accept-Language header, and browser locale.",
      +  "properties": {
      +    "country": {
      +      "description": "ISO 3166-1 alpha-2 country code for geo-targeting (e.g., 'US', 'DE', 'JP'). Routes request through a proxy in the specified country.",
      +      "maxLength": 2,
      +      "minLength": 2,
      +      "type": "string"
      +    },
      +    "language": {
      +      "description": "ISO 639-1 language code (e.g., 'en', 'de', 'ja'). Sets the Accept-Language header and browser locale.",
      +      "maxLength": 5,
      +      "minLength": 2,
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / proxy_country
      Added value: +{
      +  "description": "ISO country code for proxy geo-targeting. Requires use_proxy=true",
      +  "type": "string"
      +}
    • addedInput schema / properties / session_id
      Added value: +{
      +  "description": "UUID of a stored session, to screenshot a logged-in page",
      +  "format": "uuid",
      +  "type": "string"
      +}
    • addedInput schema / properties / timeout
      Added value: +{
      +  "description": "Request timeout in seconds (1-300, API default 90)",
      +  "maximum": 300,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / url / maxLength
      Added value: +2083
    • addedInput schema / properties / use_proxy
      Added value: +{
      +  "description": "Route through AlterLab's premium proxy (+$0.0002)",
      +  "type": "boolean"
      +}
  2. First observedv1.5.0

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden and does good work on the rendering model ('real headless browser', anti-bot handling) and on operation ordering (actions run before capture). However, it never says what the response actually contains as an image (base64? URL? how large?), and it instructs the agent to 'pass actions' with 'action_results' returned — neither of which exists in the input schema, which would mislead an agent into a failed call.

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 and dense: purpose in sentence one, failure triggers in sentence two, timing and ordering after. The final sentence about actions/action_results is the only bloat, and it is also the one passage that is factually wrong about the tool's signature.

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

Completeness3/5

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

With 9 parameters, nested objects, no annotations and no output schema, the description should at minimum say what a caller receives back for the screenshot and note the auth/session options. It covers the tricky timing and anti-bot behavior well but leaves the return value, the cookie/session path, and the geo/proxy options entirely to the schema, and references a phantom actions parameter.

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 the baseline is 3, and the description mainly restates what the schema already documents for wait_for and wait_until. Worse, the only parameter-level detail it adds — the 'actions' object and 'action_results' return — is not in the schema at all (additionalProperties: false), so it adds noise rather than meaning, while cookies, session_id, location, proxy_country and timeout get no coverage in the description.

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 concrete verb and resource — capture a full-page PNG screenshot of one URL — and immediately disambiguates output type ('an image rather than text content'), which separates it from text-returning siblings like alterlab_scrape and alterlab_extract. An agent can pick this tool without opening the 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 triggering conditions: normal fetch returning 403/429, a bot-protection challenge, a CAPTCHA, or an empty JavaScript shell. That is a named alternative (plain fetch) plus the exact failure conditions that should route the agent here, with no guessing required.

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