Ask in plain language
“Take a full page screenshot of our pricing page on mobile” is a complete instruction. The assistant fills in the parameters.
Your assistant cannot see a website. Connect it to Add Screenshots and it can — capture any page, read what is on it, and tell you what changed. One remote endpoint, your own API key, nothing to install.
/mcpAvailableThe Model Context Protocol is an open standard that lets AI assistants call external tools directly. Our MCP server exposes the Add Screenshots capture engine as one of those tools, so any compatible assistant can screenshot a page without you writing a line of API code — or installing anything at all.
“Take a full page screenshot of our pricing page on mobile” is a complete instruction. The assistant fills in the parameters.
Every capture runs on your own API key and counts against your own plan. We store no key and there is no shared account in between.
A hosted HTTPS endpoint. No package, no local process, no Docker. Paste a URL and a key into your client and you are done.
A browser extension only sees the tab it is sitting in, on the computer it is installed on. A script means Node, a package, and something to keep updated.
Your assistant calls our servers over HTTPS and we run the browser. The capture never touches your device, so there is nothing to install anywhere.
Nothing new for IT to approve. There is no software to deploy or keep patched — a connector is a URL and an API key, added in your assistant’s own settings. Since the browser runs on our infrastructure, a capture works the same whether you are at your desk or on a phone.
https://mcp.addscreenshots.com/mcpStreamable HTTPScreenshots are rarely the point. Knowing a competitor moved their pricing, that your own release broke a layout, or what a customer in another country actually sees — that is the point. An assistant that can see the page can tell you which of those just happened.
Catch a broken layout before a customer does, without opening dev tools or reaching for a phone.
“Screenshot our pricing page on an iPhone viewport and tell me if anything is cut off”Prices, currencies, consent banners, and localised copy all change by region. Capture from the US, Europe, or Asia Pacific and compare.
“Capture competitor.com from Europe and from Australia, then tell me what differs”A dated, full-page capture with the cookie banner dismissed, filed straight into your own cloud storage.
“Take a full page screenshot of their terms page with consent accepted”Pricing, plan limits, positioning, new features. Capture the same pages on a schedule and have the assistant tell you what moved since last time.
“Screenshot our competitors’ pricing pages and list what changed this week”Capture the pages you care about before a change and again afterwards, then compare. Regressions show up as something that moved, disappeared, or got slower.
“Screenshot these pages, then again after I deploy, and tell me what broke”The assistant can look at the capture and interpret it — not just store it. Ask what is unclear, what is cut off, what a first-time visitor would miss.
“Screenshot our homepage and suggest three things that would make the offer clearer”Ordinary web fetching runs no JavaScript and gets blocked constantly. A real browser gets the rendered page, from the region you choose.
“Read that product page and pull out every price and SKU”Sign in, dismiss the modal, click through the steps, then capture or read whatever is on the other side.
“Log into the staging site and screenshot the dashboard”You do not have to know the parameters. Say what you want in plain language and the assistant picks the options — viewport, region, waiting for late content, hiding a banner. Everything the REST API can do is available by asking for it.
Every capture runs on your own account and counts against your own plan, so you need a key before you connect. Creating one takes a minute.
Pick a plan on the pricing page. Every plan includes a monthly allowance of screenshots.
Open the API keys page and copy your Primary key. Treat it like a password.
Add the server URL and your key using the guide for your client below. There is nothing to install.
Your Primary key is enough. Primary, Secondary and Secret keys can all produce signed screenshot URLs, which is what keeps responses small and fast. Only the Public key cannot, because it holds no signing material — it is the half you are meant to expose. See signed requests.
Every client needs the same two things: the server URL and your API key as a header. Replace YOUR_API_KEY with your own key everywhere it appears.
| Client | Where the configuration lives | Jump to |
|---|---|---|
| Claude (web & desktop) | Connector settings | Setup |
| Claude Code | One CLI command | Setup |
| Cursor | .cursor/mcp.json | Setup |
| VS Code & GitHub Copilot | .vscode/mcp.json | Setup |
| Windsurf | mcp_config.json | Setup |
| OpenAI Codex CLI | ~/.codex/config.toml | Setup |
| Anything else | Plain HTTP | Setup |
Settings → Connectors → Add custom connector. Paste the URL, then add your key.
Name Add Screenshots
URL https://mcp.addscreenshots.com/mcp
// Under Request headers
X-API-Key YOUR_API_KEY
// No header field? Put the key in the URL instead:
https://mcp.addscreenshots.com/mcp?apikey=YOUR_API_KEYA single command, then /mcp in any session to confirm it is connected.
claude mcp add addscreenshots \
--transport http https://mcp.addscreenshots.com/mcp \
--header "X-API-Key: YOUR_API_KEY"
// Verify
claude mcp listCreate .cursor/mcp.json in your project, then restart Cursor.
{
"mcpServers": {
"addscreenshots": {
"transport": "http",
"url": "https://mcp.addscreenshots.com/mcp",
"headers": {
"X-API-Key": "YOUR_API_KEY"
}
}
}
}Create .vscode/mcp.json in your workspace. Note the key is servers, not mcpServers.
{
"servers": {
"addscreenshots": {
"type": "http",
"url": "https://mcp.addscreenshots.com/mcp",
"headers": {
"X-API-Key": "YOUR_API_KEY"
}
}
}
}Edit the MCP config from Settings → Cascade → MCP Servers. Windsurf uses serverUrl rather than url.
{
"mcpServers": {
"addscreenshots": {
"serverUrl": "https://mcp.addscreenshots.com/mcp",
"headers": {
"X-API-Key": "YOUR_API_KEY"
}
}
}
}Add to ~/.codex/config.toml. The headers need their own table section — the inline { } form is valid TOML but Codex does not pick it up.
[mcp_servers.addscreenshots]
url = "https://mcp.addscreenshots.com/mcp"
[mcp_servers.addscreenshots.http_headers]
X-API-Key = "YOUR_API_KEY"
# To keep the key out of the file, swap the table above for
# env_http_headers and give it the NAME of an environment
# variable that holds your key:
#
# [mcp_servers.addscreenshots.env_http_headers]
# X-API-Key = "ADDSCREENSHOTS_API_KEY"Streamable HTTP, protocol revision 2026-07-28. This lists the available tools.
POST https://mcp.addscreenshots.com/mcp
X-API-Key: YOUR_API_KEY
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/list
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}Three ways to send the key. An X-API-Key header, an Authorization: Bearer header, or ?apikey= on the server URL. Prefer a header where your client supports one — a key in a URL is stored in the client’s configuration and appears in request logs.
A deliberately small surface, so the assistant never has to guess between near-identical options. Both accept the same parameters as the REST API, so anything the API can do is available by asking for it.
Every capture option: full page, device size, region, format, quality, cropping, hiding elements, and the rest.
A real browser renders the page, then returns its readable text — or exactly the fields you describe. Built on HTML to JSON.
Why reading matters. An assistant’s built-in web fetch runs no JavaScript, is blocked by most bot protection, cannot choose a country, and floods itself with raw HTML. This reads the page the way a person’s browser would, then hands back just the part that matters.
| Ask for | Parameter | Notes |
|---|---|---|
| The whole page, not just the visible area | fullpage | See full page capture |
| A phone or tablet view | mobile, viewport | See device emulation |
| Just one element on the page | section | A CSS selector |
| The cookie banner gone | consent, hide, click | See consent handling |
| Ads hidden or images off | blockads, blockimages | Lighter, cleaner captures |
| A capture from another country | region | See regions |
| A wait for late content | wait, scroll_wait | Capped by plan |
| A specific format or quality | format, quality, dpr | PNG, JPEG, WebP, AVIF, GIF |
You will rarely name these directly. Ask for the outcome and the assistant chooses the parameters — see what to ask for for the phrasing people actually use.
Plenty of the pages worth capturing are not on the open web. Both tools accept a list of steps to run in the page first — navigate, click, type, focus, wait for an element — so the assistant can get through and then capture or read what is on the other side.
| Step | What it does |
|---|---|
navigate | Go to a URL. Every sequence has to start with one |
click | Click an element by CSS selector |
focus · type | Focus a field and type into it |
keypress | Press a key, such as Enter |
select · hover · hide | Choose an option, hover, or hide an element |
wait · waitfor | Pause, or wait for an element to appear |
About passwords. Signing in this way means the password passes through the AI assistant making the request, and is kept in that client’s conversation history. Add Screenshots masks typed values in your usage logs, but we cannot mask the assistant’s own transcript. Use a dedicated account with the least access it needs, never a personal or administrator login — and where a session already exists, the cookies, bearer, and basic authentication options are a better fit. See website authentication.
Automation steps require the Pro or Enterprise plan. The same capability is available in the REST API, where credentials stay inside your own code.
Screenshots are big and AI context is small, so the tool returns a signed URL rather than image data unless you ask otherwise.
A few hundred bytes instead of several megabytes, returned almost instantly. The screenshot is captured when the link is opened, so it is never stale.
Ask the assistant to look at the screenshot and it will request the image data so it can actually read the page.
A screenshot on its own tells you what a page looked like. The numbers alongside it tell you how it behaved — which is what turns a one-off capture into something worth tracking week over week.
| What comes back | Why it matters |
|---|---|
| Page load time | The headline number for performance. Capture the same page on a schedule and a slowdown shows up long before anyone complains |
| Page process time | How long rendering took after the page loaded, which separates a slow server from a heavy front end |
| HTTP status and any page error | Catches the capture that succeeded technically but landed on a 404 or an error page |
| Final URL after redirects | Shows when a page has quietly moved, or when you were sent to a country-specific version |
| Image dimensions and size | A page that suddenly got much taller usually means a layout change worth looking at |
| Percentage of pixels changed | The before-and-after number. Small means a copy tweak; large means something moved. See tracking changes |
| Consent and CAPTCHA outcome | Tells you whether a banner was actually dismissed, so you know the capture shows the real page |
Measurements arrive when a capture actually happens. The default response is a link, and the page is only rendered when that link is opened — so ask for the image, or read the page, when you want the numbers in the same reply. Every capture is also recorded in your usage logs.
Most problems are the API key or the way it is being sent.
| What you see | What it means | Fix |
|---|---|---|
| The connection fails immediately | No key reached the server | Check the header name is exactly X-API-Key, or put the key in the URL as ?apikey= |
| “Invalid API key format” | The value is not a key | Copy it again from the API keys page. Watch for a trailing space |
| “An invalid API key was specified” | The key is not recognised | The key may have been renewed or deleted |
| Images come back instead of links | The key cannot sign | Use your Primary, Secondary or Secret key. The Public key cannot sign, by design |
| “Your account is …” | Billing needs attention | Check the dashboard. Retrying will not help |
| A wait or size is quietly reduced | A plan limit | See pricing for the limits on each plan |
| Requests refused on a restricted account | Domain or IP rules | AI clients send no referring domain. Review the API security page |
Your key stays yours. The MCP server holds no credentials of its own and stores nothing. It passes your key to the capture API on each request, exactly as your own code would. See security.
Create a key, paste it into your assistant, and ask for the first screenshot. Every capture runs on your plan, in your account, with the same engine behind the REST API.