Endpoint
https://snap.i2dev.com/mcpA remote MCP server over Streamable HTTP. It speaks the 2026-07-28 protocol and also serves clients still on the 2025 protocol, so current and older clients connect to the same URL. There is nothing to install.
Connect a client
Without a key, take_screenshot uses a free daily MCP screenshot allowance per IP, with a shared per-network ceiling. This is separate from the anonymous image URL endpoint's allowance. To use your organisation's pooled monthly credits instead, add your API key as an Authorization header. Create keys in the dashboard; a key is shown only once, when you create it. Keyed captures use one credit each, shared across the organisation's keys and the HTTP API, and reset monthly at 00:00 UTC.
Claude Code
claude mcp add --transport http snap https://snap.i2dev.com/mcp
# with an API key
claude mcp add --transport http snap https://snap.i2dev.com/mcp \
--header "Authorization: Bearer YOUR_API_KEY"Cursor
In .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"snap": {
"url": "https://snap.i2dev.com/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}VS Code
In .vscode/mcp.json:
{
"servers": {
"snap": {
"type": "http",
"url": "https://snap.i2dev.com/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}Leave out the headers to connect anonymously.
Claude.ai and ChatGPT
Add https://snap.i2dev.com/mcp as a custom connector. These apps cannot send an API key header yet, so they connect anonymously. Their requests come from the vendor's servers, which means the anonymous allowance is shared with everyone else using that app. For dependable use, connect from a client that can send your key.
Free vs. API key
| Mode | How | Allowance |
|---|---|---|
| Anonymous | No header | A free daily MCP screenshot allowance per IP, with a shared per-network ceiling. It is separate from the anonymous image URL endpoint. Cached captures are free. |
| API key | Authorization: Bearer YOUR_API_KEY | Your organisation's monthly credits, shared with its other keys and the HTTP API. Each capture uses one credit, and credits reset at 00:00 UTC on the first day of each month. See pricing. |
A key that is wrong or revoked is rejected with HTTP 401. It never falls back to the anonymous allowance. Only the Authorization header is read. Ask the get_quota tool for what is left.
Tools
take_screenshot
Renders a public http(s) URL in Chromium and returns the screenshot.
| Argument | Default | Description |
|---|---|---|
url | required | Public http(s) URL to capture (e.g. https://example.com). |
format | webp | png, jpeg, or webp. |
width, height | 1280, 720 | Viewport size in CSS pixels. Values above the service maximum are clamped. |
fullPage | false | Capture the whole scrollable page. A WebP capture of a page taller than 16,383 px is clipped to that height; the result reports fullPageClip and the text says so — request jpeg or png for the whole page. |
waitUntil | load | load, domcontentloaded, or networkidle. |
waitForSelector | — | CSS selector that must appear before capturing. |
timezoneId, locale | — | For example Europe/Berlin and de-DE. |
The result includes the image itself, so the model can look at it, plus a URL for the full image. Structured output gives imageUrl, contentType, bytes, width, height, inlined, cache, and — when a fullPage WebP capture was clipped to the WebP encoder's 16,383 px limit — fullPageClip.
Images over 3.5 MB, or taller or wider than 8,000 px, come back as the URL only, because model APIs reject larger images. Very tall full-page captures usually hit this. Request a viewport capture, or jpeg/webp, to see them inline.
get_quota
Reports the allowance for the current mode: limit, used, remaining, and resetsAt. Anonymous callers see their daily screenshot allowance per IP, with the shared network ceiling when it applies; keyed callers see monthly credits pooled across their organisation's API keys. The public GET /v1/screenshot allowance is separate. Calling get_quota takes no parameters and draws no capture allowance, making it suitable for testing connectivity.
Errors
A refused capture returns a tool error that the agent can explain, with the reason code in the text. Codes include unsafe_url (localhost, private networks, and non-web schemes are blocked), quota_exceeded, rate_limited (with the time to wait), and the render failures listed under error codes. With an API key, going over the key’s concurrency budget (too many parallel calls) is an HTTP 429 with too_many_inflight and a Retry-After header — the request never reaches the tool layer, so pace the retry and resend. If Snap cannot verify an API key at that moment, the call is an HTTP 503 with auth_unavailable and a Retry-After header; the key is not at fault, so retry after the wait. The MCP tools do not send request headers or cookies; pages behind a login need the HTTP API.