npm site-shot-mcpstdioMITupdated 20d ago
Give Claude, Cursor, and other AI agents the ability to see any web page โ take website screenshots with Site-Shot over the Model Context Protocol.
What can you do with Site Shot?
Site-Shot MCP server
Give Claude, Cursor, and other AI agents the ability to see any web page โ take website screenshots with Site-Shot over the Model Context Protocol.
Real Chromium rendering ยท full-page capture ยท country proxies ยท automatic ad & cookie-banner removal (cleaner images, fewer vision tokens).
Quick start (Claude Desktop)
- Get a Site-Shot API key at https://www.site-shot.com/start/.
- Add this to your Claude Desktop config (
claude_desktop_config.json):
{
"mcpServers": {
"site-shot": {
"command": "npx",
"args": ["-y", "site-shot-mcp"],
"env": { "SITESHOT_API_KEY": "YOUR_API_KEY" }
}
}
}
- Restart Claude Desktop. Ask it to "take a full-page screenshot of https://news.ycombinator.com" and it will call the server and show you the image.
Works the same way in any MCP client (Cursor, Cline, VS Code, LangChain, CrewAI) โ point the client at
npx -y site-shot-mcp with SITESHOT_API_KEY in the environment.
Tools
capture_screenshot
Screenshot a web page (viewport by default).
| Param | Type | Default | Notes |
|---|---|---|---|
url |
string (required) | โ | Page to capture |
full_page |
boolean | false |
Capture the whole scrollable page |
width / height |
number | API default | Viewport / device size |
format |
"png" | "jpeg" |
png |
Image format |
block_ads |
boolean | true |
Remove ads |
block_cookie_banners |
boolean | true |
Remove cookie-consent popups |
country |
string | โ | Proxy country as a two-letter ISO 3166-1 alpha-2 code, e.g. "DE" (auto IP/lang/tz/geo) |
strict_country |
boolean | true |
Error out if the country has no proxy, instead of falling back to the US |
language / time_zone / geolocation |
string | โ | Manual overrides |
wait_ms |
number | API default | Extra wait before capture (SPAs/animations) |
max_height |
number | 20000 (full page) | Cap captured height |
Returns the screenshot as an MCP image.
"API default" is not a number this package gets to state.
width,heightandwait_msare forwarded only when you pass them, so whatever applies when you don't is decided by the Site-Shot API and can change without a release here. Versions up to 1.1.0 printed pixel sizes forwidth/heightthat the API does not use โ an agent that omitted them to take "the default" got a different viewport, with nothing in the returned image to reveal it. Pass explicit values whenever the size matters.
Country codes are ISO codes, never names. Pass
"DE", not"Germany". The API matches codes exactly and would otherwise render through a US proxy without telling you, so the server rejects full names before spending a render.strict_country(on by default) likewise turns an unavailable country into an error instead of a silent US screenshot โ passfalseto opt back into the fallback. Supported countries โ
capture_full_page
Same as capture_screenshot with full-page capture enabled.
Why call this server instead of the agent's own browser?
If your agent drives a browser, it can screenshot pages itself โ and for pages that must be signed
into or stepped through a flow, that is the right tool. For public URLs, delegating the capture to
this server is usually better engineering: every capture runs the same pipeline (no re-planning
between runs), can be taken from a specific country with matching locale and time zone
(country + strict_country), is scored by an image classifier with an escalating retry ladder
behind it before being returned, and costs a fraction of a cent instead of a browser session plus
vision tokens per look. The full comparison, both directions honestly argued:
AI agent vs. screenshot API โ who should capture the page.
Configuration
| Env var | Required | Description |
|---|---|---|
SITESHOT_API_KEY |
yes | Your Site-Shot API key (used as userkey). |
The server is a thin wrapper over the existing Site-Shot HTTP API (https://api.site-shot.com/) โ no
separate backend.
Local development
npm install
npm run check # syntax check
npm run smoke # offline tests (stubbed fetch, no API key needed)
SITESHOT_API_KEY=yourkey npm start # run the server on stdio
Requirements
Node.js โฅ 18 (uses the built-in fetch).
License
MIT
Install
Add Site Shot to your client. Pick the one you use.
claude mcp add site-shot-mcp -- npx -y site-shot-mcpcodex mcp add site-shot-mcp -- npx -y site-shot-mcpamp mcp add site-shot-mcp -- npx -y site-shot-mcp{
"mcpServers": {
"site-shot-mcp": {
"command": "npx",
"args": [
"-y",
"site-shot-mcp"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"site-shot-mcp": {
"command": "npx",
"args": [
"-y",
"site-shot-mcp"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
code --add-mcp '{"name":"site-shot-mcp","command":"npx","args":["-y","site-shot-mcp"]}'Or add the block manually to `.vscode/mcp.json` under `servers`.
{
"mcpServers": {
"site-shot-mcp": {
"command": "npx",
"args": [
"-y",
"site-shot-mcp"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"site-shot-mcp": {
"command": "npx",
"args": [
"-y",
"site-shot-mcp"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"site-shot-mcp": {
"command": "npx",
"args": [
"-y",
"site-shot-mcp"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"site-shot-mcp": {
"type": "local",
"command": "npx",
"args": [
"-y",
"site-shot-mcp"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"site-shot-mcp": {
"command": {
"path": "npx",
"args": [
"-y",
"site-shot-mcp"
]
}
}
}
}Add to your Zed `settings.json`.
npx -y site-shot-mcpRun `goose configure`, choose **Add Extension โ Command-line Extension**, and paste this command.
Score
39 / 100
Incomplete
- Documentation25/25
- Maintenance25/25
- Trust13/20
- Capability0/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 13 days ago
- Has a release history
- Repository is not archived
- Licensed MIT
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 12 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint โ no local install
Version history
| Versions | Published |
|---|---|
| 1.1.2Latest | Aug 16, 2026 |
| 1.0.1 | Jul 2, 2026 |
| 0.1.1 | Jun 14, 2026 |