MCP Server
Connect Claude, Cursor, VS Code, and other MCP clients to Screenshot Scout, and capture webpages as images or PDFs with a single tool.
The Model Context Protocol (MCP) is an open standard that lets AI assistants call external tools. The official Screenshot Scout MCP server gives MCP clients one tool, capture_screenshot, which captures an HTTP or HTTPS webpage as an image or a PDF using your Screenshot Scout account.
You can run the server three ways: as a local process installed from npm, as a Claude Desktop extension, or through a hosted endpoint that we maintain. All three expose the same tool and produce the same results. The screenshot options the tool exposes behave as described in the screenshot option reference, while the tool applies its own defaults, described below.
The server is open source. It's developed in the screenshotscout-mcp repository and published on npm as @screenshotscout/mcp.
What you need
- A Screenshot Scout account and an access key from the API Keys page.
- Node.js 22 or newer, but only for the local npm option. The Claude Desktop extension and the hosted endpoint don't need it.
- The secret key, but only when your API key has Require signed requests enabled, and only for the two local options. See signed requests.
Captures run on your account and use your plan's quota and rate limits. Failed captures and cache hits don't count toward the quota.
Choose how to run it
| Option | Best for | Credentials |
|---|---|---|
| Local server (npm) | Any MCP client that can start a local process. Requires Node.js 22 or newer. | Access key, plus the secret key for signed-request API keys |
| Claude Desktop extension | Claude Desktop users: installation takes a few clicks, with no configuration files to edit. | Access key, plus the secret key for signed-request API keys |
| Hosted endpoint | Clients that support static HTTP headers, with no local process to run or update. | Access key only, and only for API keys that don't require signed requests |
If you use Claude Desktop, the extension is the easiest start. Otherwise, start with the local server: it works in every client listed on this page and supports every API key.
Local server (npm)
Add this entry to your client's MCP configuration (the exact steps for each client are in Client setup):
{
"mcpServers": {
"screenshotscout": {
"command": "npx",
"args": ["-y", "@screenshotscout/mcp"],
"env": {
"SCREENSHOTSCOUT_ACCESS_KEY": "YOUR_ACCESS_KEY"
}
}
}
}The client starts the server with npx, which downloads @screenshotscout/mcp on first use and runs it as a local process. The server reads its credentials from two environment variables at startup:
SCREENSHOTSCOUT_ACCESS_KEY(required): your access key.SCREENSHOTSCOUT_SECRET_KEY(optional): the matching secret key. Set it only when the API key has Require signed requests enabled. The server uses it locally to sign each capture request; the secret itself is never transmitted.
For a signed-request key, the env block becomes:
"env": {
"SCREENSHOTSCOUT_ACCESS_KEY": "YOUR_ACCESS_KEY",
"SCREENSHOTSCOUT_SECRET_KEY": "YOUR_SECRET_KEY"
}Two things worth noting:
- Credentials belong in the client configuration, never in a prompt. Keep configuration files that contain real keys private.
- If a Windows client reports that it can't start
npx, use"command": "cmd"with"args": ["/c", "npx", "-y", "@screenshotscout/mcp"]instead.
Claude Desktop extension (MCPB)
The extension installs the same server in Claude Desktop without any configuration files to edit:
- Download
screenshotscout-mcp-<version>.mcpbfrom the latest GitHub release. - In Claude Desktop, open Settings → Extensions → Advanced settings and click Install Extension….
- Select the downloaded file.
- Enter your access key when prompted. Enter the secret key only if the API key requires signed requests; otherwise leave it empty.
Claude Desktop stores both keys as sensitive settings. The extension is currently available for Windows; on other platforms, use the npm configuration above inside Claude Desktop's developer settings.
Hosted endpoint
We run the same server as a hosted endpoint at:
https://mcp.screenshotscout.com/mcp/api-keyThere's nothing to install or update. Connect from a client that can attach a static HTTP header to an MCP connection:
Authorization: Bearer YOUR_ACCESS_KEYThe hosted endpoint has three rules:
- Access key only. Never send your secret key to the hosted endpoint, and never put either key in a URL or a prompt. The endpoint rejects credentials sent any way other than the
Authorizationheader. - Unsigned API keys only. If your API key has Require signed requests enabled, captures fail with a
signature_requirederror that explains your options. Use the local server (it signs requests on your machine), or create a dedicated API key that doesn't require signatures. - Header-capable clients only. Clients that can't send a static
Authorizationheader can't use this endpoint. That includes Claude's web and mobile custom connectors; with Claude, use the desktop extension or the local server instead.
Client setup
The snippets below match each client's currently documented configuration format. If a menu path has moved, check the client's own MCP documentation.
The easiest path is the extension. To run the npm server instead, open Settings → Developer → Edit Config and add this to claude_desktop_config.json:
{
"mcpServers": {
"screenshotscout": {
"command": "npx",
"args": ["-y", "@screenshotscout/mcp"],
"env": {
"SCREENSHOTSCOUT_ACCESS_KEY": "YOUR_ACCESS_KEY"
}
}
}
}The file is normally at:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Restart Claude Desktop after saving.
For the hosted endpoint, add this to a private .mcp.json and keep the access key in the environment where Claude Code runs:
{
"mcpServers": {
"screenshotscout": {
"type": "http",
"url": "https://mcp.screenshotscout.com/mcp/api-key",
"headers": {
"Authorization": "Bearer ${SCREENSHOTSCOUT_ACCESS_KEY}"
}
}
}
}For the local server, register it at user scope:
claude mcp add --env SCREENSHOTSCOUT_ACCESS_KEY=YOUR_ACCESS_KEY --transport stdio --scope user screenshotscout -- npx -y @screenshotscout/mcpFor an API key that requires signed requests, add --env SCREENSHOTSCOUT_SECRET_KEY=YOUR_SECRET_KEY. On native Windows, put cmd /c before npx. Check the connection with claude mcp list or the /mcp command.
Add this to .cursor/mcp.json in a project, or to ~/.cursor/mcp.json for all projects. For the hosted endpoint:
{
"mcpServers": {
"screenshotscout": {
"url": "https://mcp.screenshotscout.com/mcp/api-key",
"headers": {
"Authorization": "Bearer YOUR_ACCESS_KEY"
}
}
}
}For the local server:
{
"mcpServers": {
"screenshotscout": {
"command": "npx",
"args": ["-y", "@screenshotscout/mcp"],
"env": {
"SCREENSHOTSCOUT_ACCESS_KEY": "YOUR_ACCESS_KEY"
}
}
}
}These files contain the key directly, so prefer the user-level file and keep it private. Open Cursor settings, select Tools & MCP, and confirm the server is enabled.
Run MCP: Open User Configuration from the command palette for a private user-level setup, or create .vscode/mcp.json in a workspace. This local-server configuration prompts for the access key as a masked input, so the key is never stored in the file:
{
"inputs": [
{
"type": "promptString",
"id": "screenshotscout-access-key",
"description": "Screenshot Scout access key",
"password": true
}
],
"servers": {
"screenshotscout": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@screenshotscout/mcp"],
"env": {
"SCREENSHOTSCOUT_ACCESS_KEY": "${input:screenshotscout-access-key}"
}
}
}
}For an API key that requires signed requests, add a second password input and map it to SCREENSHOTSCOUT_SECRET_KEY. For the hosted endpoint, keep the same inputs block and use this server entry instead:
"servers": {
"screenshotscout": {
"type": "http",
"url": "https://mcp.screenshotscout.com/mcp/api-key",
"headers": {
"Authorization": "Bearer ${input:screenshotscout-access-key}"
}
}
}In Devin, open Settings → Connections → MCP servers, select Add a custom MCP, and configure:
- Transport: HTTP
- Server URL:
https://mcp.screenshotscout.com/mcp/api-key - Authentication: Auth Header
- Header name:
Authorization - Header value:
Bearer YOUR_ACCESS_KEY
Save the server and choose Test listing tools. The result should contain exactly one tool, capture_screenshot. Don't enter a secret key anywhere.
Open MCP Servers → Configure → Configure MCP Servers. For the hosted endpoint:
{
"mcpServers": {
"screenshotscout": {
"type": "streamableHttp",
"url": "https://mcp.screenshotscout.com/mcp/api-key",
"headers": {
"Authorization": "Bearer YOUR_ACCESS_KEY"
},
"disabled": false,
"autoApprove": []
}
}
}For the local server:
{
"mcpServers": {
"screenshotscout": {
"command": "npx",
"args": ["-y", "@screenshotscout/mcp"],
"env": {
"SCREENSHOTSCOUT_ACCESS_KEY": "YOUR_ACCESS_KEY"
},
"disabled": false,
"autoApprove": []
}
}
}Keep the configuration private and enable the server after saving.
Verify the connection
After restarting or reloading the client:
- Confirm the
screenshotscoutserver shows as connected. - Confirm it exposes exactly one tool,
capture_screenshot. - Try a prompt like: "Capture
https://example.comas a 1280×720 PNG and return only a URL."
The capture_screenshot tool
The server exposes exactly one tool. Give the agent a page URL and describe the screenshot you want; the agent chooses the screenshot options from your request. Only the URL is required.
What you can ask for
- Output format: JPEG (the default), PNG, WebP, GIF, TIFF, or PDF.
- Framing: the visible part of the page, the full scrollable page, or a single element on the page.
- Device and appearance: a real device preset such as an iPhone or a Pixel, a custom viewport size, and light or dark mode.
- Location: capture from a specific country.
- Cleanup: block cookie banners, ads, and chat widgets, or hide and click specific elements before the capture.
- Timing: wait longer for slow pages, or add a delay before the capture is taken.
- Caching: reuse the result of identical captures instead of re-rendering them.
- PDF layout: paper size, landscape orientation, CSS backgrounds, margins, and scale.
- Result form: the image itself when possible, or a URL only.
The tool can't log in to pages, send cookies or custom headers, use proxies, or inject CSS and JavaScript. Those capabilities are available through the API and SDKs only.
For the exact input names, allowed values, and limits, see the README.
Defaults
You don't call the tool directly. You write a prompt, and the agent turns it into a tool call, deciding which screenshot options to include. When the agent includes nothing but the URL, the tool applies its defaults, and the capture comes back as a 1280×720 JPEG at quality 60.
The defaults aren't guaranteed, though. The options are the agent's choice, and it may include screenshot options you never asked for, overriding the defaults. When the exact output matters, say so in the prompt: "as PNG", "full page", "at quality 80". A device preset or an explicit viewport size replaces the default 1280×720.
What you get back
Every successful capture returns a temporary URL for the result. When the image is small enough (the default settings are chosen to fit), the image itself is returned along with it. A capture that returns only the URL is still a success: the agent explains why the image was left out (too large, a TIFF, and so on). A PDF capture always arrives as a link.
Where the returned image shows up depends on the client. Most show it inside the tool call, which you expand in the chat. A few show it directly in the conversation, and some never pass it to the model at all; when that happens the agent can't see the screenshot. If your client never displays images, ask for a URL-only result.
Result URLs expire. Without caching, a URL stays available for up to about 4 hours; with caching enabled, it stays available for the cache lifetime. Treat the URLs as sensitive: anyone who has one can view the capture until it expires.
When something fails
A failed capture comes back as a readable error that the agent relays: out of monthly quota, an invalid option value, a page that timed out, and so on. The full list of error codes is in Errors.
One case needs action outside the conversation. A signature_required error on the hosted endpoint means your API key has Require signed requests enabled, which the hosted endpoint doesn't support. Switch to the local server, which signs requests on your machine, or use a dedicated API key without that setting.
Security and privacy
- Captures load real webpages. The server sends the target URL and your selected options to Screenshot Scout, which renders the page on its infrastructure. Capture only pages you are authorized to access, and review the privacy policy before capturing private or regulated material.
- Captured content is untrusted. A webpage can contain text written to manipulate an AI assistant. Treat captured content as data, not instructions, and be careful acting on captures of pages you don't trust.
- Keep keys out of the conversation. The agent never needs them, so never paste a key into a prompt. Keys belong only in the places shown on this page, and the hosted endpoint rejects credentials sent any other way.
- No local telemetry. The npm package and the desktop extension send nothing anywhere except your capture requests to Screenshot Scout. The hosted endpoint keeps one operational log per request, limited to fixed service labels, the HTTP method, response status, duration, and sanitized unexpected errors, with no credentials, target URLs, screenshot URLs, or image bytes.
- Found a vulnerability? Report it privately as described in SECURITY.md.
Example prompts
- "Capture
https://example.comas a full-page PNG in dark mode. Return only a URL." - "Take a 1280×720 JPEG screenshot of
https://example.com/pricing, block cookie banners and ads, and use quality 80." - "Screenshot
https://example.comas it looks on an iPhone 15." - "Create an A4 PDF of
https://example.com/reportwith backgrounds enabled and 10 mm margins." - "Take a screenshot of
https://example.com/stats, but wait a few extra seconds so the charts can finish loading." - "Capture
https://example.com, cache the result for a day, and give me the URL."
Resources
- GitHub repository: source code, the full tool input reference, issues, and releases.
@screenshotscout/mcpon npm: the local server package.- GitHub releases: the Claude Desktop extension (
.mcpb) and its checksum for each version. - Screenshot option reference: service behavior for every option the tool exposes.
- Errors: all API error codes.
- Questions or problems: contact us.