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, calls use the free anonymous allowance. To use your plan's monthly allowance instead, add your API key as an Authorization header. Create keys in the dashboard.
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 small free daily allowance per network, separate from the anonymous image URL endpoint. Cached captures are free. |
| API key | Authorization: Bearer YOUR_API_KEY | Your organisation's monthly allowance, shared with its other keys and the HTTP API. 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. |
format | webp | png, jpeg, or webp. |
width, height | 1280, 720 | Viewport size in CSS pixels. |
fullPage | false | Capture the whole scrollable 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, and cache.
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 allowances are daily, keyed allowances monthly.
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. The MCP tools do not send request headers or cookies; pages behind a login need the HTTP API.