Install
openclaw skills install screenshots-for-ai-agentsBrowser 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.
openclaw skills install screenshots-for-ai-agentsRemote 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
https://screenshotx402.com/discovery.json for list prices, x402 network, and mcp.url — avoid surprise charges.https://screenshotx402.com) before placing wallet / signing secrets in environment or vaults.health (free) before paid tools.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.
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.
| Resource | URL | Purpose |
|---|---|---|
| This skill | https://screenshotx402.com/skill.md | Human + agent onboarding (this file) |
| Machine discovery | https://screenshotx402.com/discovery.json | mcp.url, x402Network, tool list, list prices |
| API reference | https://screenshotx402.com/docs | Full parameter tables and return shapes |
| Landing | https://screenshotx402.com/ | Tools overview and examples |
Always read https://screenshotx402.com/discovery.json for current USD list prices — do not hard-code amounts.
| Tool | Cost | Purpose |
|---|---|---|
health | Free | Smoke test MCP + advertised x402 network |
take_screenshot | x402 / USDC | Browser PNG or JPEG of a public https URL |
analyze_screenshot | x402 / USDC | JPEG capture + vision text answer to your prompt |
This service uses MCP tool calls instead of raw GET /api/..., but the idea matches HTTP x402:
https://screenshotx402.com/mcp.take_screenshot / analyze_screenshot) with normal arguments.accepts with price, network, pay-to, asset, facilitator expectations). No image payload yet.base — confirm in discovery.json / health).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).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.
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.
take_screenshot (paid — x402)MCP: callTool → take_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.
analyze_screenshot (paid — x402)MCP: callTool → analyze_screenshot.
Parameters:
| Param | Type | Required | Default | Description |
|---|---|---|---|---|
| url | string (URL) | yes | — | Page to capture |
| prompt | string | yes | — | Question/instruction for the vision model |
| width | number | no | 1920 | Viewport width |
| height | number | no | 1080 | Viewport height |
| fullPage | boolean | no | false | Full page capture |
| colorScheme | string | no | no-preference | Same as take_screenshot |
| deviceScaleFactor | number | no | 1 | Same as take_screenshot |
| hideSelectors | string[] | 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
}
}
| Goal | Tool | Cost |
|---|---|---|
| Verify MCP + network | health | Free |
| Still image capture | take_screenshot | Paid (see discovery) |
| Capture + describe / extract | analyze_screenshot | Paid (see discovery) |
https:// URLs (see /docs).analyze_screenshot depends on the operator’s server configuration (not something callers configure through MCP).