MCP Server

Let an AI agent screenshot any public web page through the Model Context Protocol.

Endpoint

https://snap.i2dev.com/mcp

A 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

bash
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):

json
{
  "mcpServers": {
    "snap": {
      "url": "https://snap.i2dev.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

VS Code

In .vscode/mcp.json:

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

ModeHowAllowance
AnonymousNo headerA small free daily allowance per network, separate from the anonymous image URL endpoint. Cached captures are free.
API keyAuthorization: Bearer YOUR_API_KEYYour 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.

ArgumentDefaultDescription
urlrequiredPublic http(s) URL to capture.
formatwebppng, jpeg, or webp.
width, height1280, 720Viewport size in CSS pixels.
fullPagefalseCapture the whole scrollable page.
waitUntilloadload, 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.