Screenshots for AI agents via x402

MCP Tools

Browser screenshots and vision over MCP Streamable HTTP with x402 USDC micropayments at this deployment. Paid tools require an x402-aware MCP client and a funded wallet (or platform-managed signer); URLs and page-derived data are processed off-host here. Triggers: take_screenshot, analyze_screenshot, discovery.json, pay-per-call capture, Streamable HTTP MCP, 402 payment.

Install

openclaw skills install screenshots-for-ai-agents

screenshot-x402 — MCP screenshots + x402

Remote Model Context Protocol server (Streamable HTTP only). All tools are invoked through MCP — there is no separate REST “screenshot URL” for paid capture.

Base URL: https://screenshotx402.com
MCP endpoint: https://screenshotx402.com/mcp

Before you install or use

  1. Read https://screenshotx402.com/discovery.json for list prices, x402 network, and mcp.url — avoid surprise charges.
  2. Confirm your agent host can run an x402-aware MCP client and sign USDC payment authorizations on that network.
  3. Trust this deployment (https://screenshotx402.com) before placing wallet / signing secrets in environment or vaults.
  4. Call health (free) before paid tools.

Credentials and signing (paid tools only)

Free: health and discovery HTTP need no wallet.

Paid (take_screenshot, analyze_screenshot): the client must sign x402 USDC authorizations and retry with payment proof headers (e.g. PAYMENT-SIGNATURE / X-PAYMENT). Use a stack such as Cloudflare agents/x402 withX402Client with a viem account. Private keys belong in your host env (examples in project docs: AGENT_PRIVATE_KEY, X402_PRIVATE_KEY in sample clients) — never in prompts. The signer needs USDC on the advertised network.

If your platform cannot attach payment proofs, use only free discovery + health, or another capture method.

Privacy and off-host data

URLs you submit are sent to this deployment (https://screenshotx402.com). The service fetches and renders pages on operator infrastructure; screenshots and, for analyze_screenshot, your prompt and vision output, are processed off your machine.

Do not use for non-public or sensitive URLs (internal hosts, auth-gated content you cannot leak, secrets in query strings). Use local or self-controlled tooling for private systems.

Discovery (free HTTP)

ResourceURLPurpose
This skillhttps://screenshotx402.com/skill.mdHuman + agent onboarding (this file)
Machine discoveryhttps://screenshotx402.com/discovery.jsonmcp.url, x402Network, tool list, list prices
API referencehttps://screenshotx402.com/docsFull parameter tables and return shapes
Landinghttps://screenshotx402.com/Tools overview and examples

Always read https://screenshotx402.com/discovery.json for current USD list prices — do not hard-code amounts.

Tools overview

ToolCostPurpose
healthFreeSmoke test MCP + advertised x402 network
take_screenshotx402 / USDCBrowser PNG or JPEG of a public https URL
analyze_screenshotx402 / USDCJPEG capture + vision text answer to your prompt

x402 payment flow (MCP)

This service uses MCP tool calls instead of raw GET /api/..., but the idea matches HTTP x402:

  1. Connect a Streamable HTTP MCP session to https://screenshotx402.com/mcp.
  2. Call a paid tool (take_screenshot / analyze_screenshot) with normal arguments.
  3. First response encodes payment required: tool result includes x402 metadata (version, accepts with price, network, pay-to, asset, facilitator expectations). No image payload yet.
  4. Complete the USDC payment on the chain advertised in that payload (this deployment’s network in discovery is base — confirm in discovery.json / health).
  5. Retry the same callTool with the payment proof attached the way your MCP client expects (e.g. PAYMENT-SIGNATURE / X-PAYMENT on the MCP HTTP session, per your stack).
  6. Server verifies via the facilitator, then returns the real tool result (image and optional text).

Automatic handling: Use an x402-aware MCP client (for example Cloudflare agents/x402 withX402Client around the MCP Client) so payment discovery, signing, and retries are handled like an x402 HTTP client would handle 402 + X-Payment — without you manually copying headers.

1. health (free)

MCP: callTool with name health, arguments: {}.

Parameters: none (empty object).

Successful result (shape):

{
  "content": [
    {
      "type": "text",
      "text": "{ \"ok\": true, \"name\": \"screenshot-x402\", \"x402Network\": \"base\" }"
    }
  ]
}

content[0].text is a JSON string — parse it for ok, name, x402Network.

2. take_screenshot (paid — x402)

MCP: callTooltake_screenshot.

Parameters:

| Param | Type | Required | Default | Description | | ----------------- | ------------ | -------- | --------------- | ----------------------------------------- | ------ | --------------- | | url | string (URL) | yes | — | Absolute https:// page to capture | | width | number | no | 1920 | Viewport width (100–3840) | | height | number | no | 1080 | Viewport height (100–2160) | | fullPage | boolean | no | false | Capture full scrollable page | | delay | number | no | 0 | Extra wait after load (ms, max 30000) | | cacheTtl | number | no | 86400 | R2 cache TTL seconds; 0 skips cache reads | | format | string | no | png | png or jpeg | | colorScheme | string | no | no-preference | light | dark | no-preference | | deviceScaleFactor | number | no | 1 | Pixel ratio 1–3 (sharpness) | | hideSelectors | string[] | no | [] | Up to 40 CSS selectors to hide |

Successful result (shape):

{
  "content": [
    {
      "type": "image",
      "data": "<base64 PNG or JPEG>",
      "mimeType": "image/png | image/jpeg"
    }
  ],
  "_meta": {
    "cached": true,
    "renderTimeMs": 1234
  }
}

_meta.cached and _meta.renderTimeMs may be omitted depending on path.

3. analyze_screenshot (paid — x402)

MCP: callToolanalyze_screenshot.

Parameters:

ParamTypeRequiredDefaultDescription
urlstring (URL)yesPage to capture
promptstringyesQuestion/instruction for the vision model
widthnumberno1920Viewport width
heightnumberno1080Viewport height
fullPagebooleannofalseFull page capture
colorSchemestringnono-preferenceSame as take_screenshot
deviceScaleFactornumberno1Same as take_screenshot
hideSelectorsstring[]no[]Same as take_screenshot

Successful result (shape):

{
  "content": [
    {
      "type": "image",
      "data": "<base64 JPEG>",
      "mimeType": "image/jpeg"
    },
    {
      "type": "text",
      "text": "<vision model answer>"
    }
  ],
  "_meta": {
    "renderTimeMs": 1234
  }
}

Decision guide

GoalToolCost
Verify MCP + networkhealthFree
Still image capturetake_screenshotPaid (see discovery)
Capture + describe / extractanalyze_screenshotPaid (see discovery)

Constraints

  • Targets must be https:// URLs (see /docs).
  • Vision output for analyze_screenshot depends on the operator’s server configuration (not something callers configure through MCP).

More links