Site-Shot

io.github.site-shot由 GitHub 账号 site-shot 发布v1.2.1更新于 Oct 31, 2026

Website screenshots for AI agents: full-page, country proxies, ad & cookie-banner removal

概览

AI 生成的概览

Site-Shot MCP 让助手通过 Site-Shot API 截取公开网页的截图,并以图片形式返回。

可以做什么
  • 截取网页截图并以图片返回,可设置视口或设备尺寸、图片格式、去除广告与 Cookie 弹窗,以及国家代理
  • 截取整页(完整可滚动高度)的截图
  • 调整语言、时区、地理位置、等待时间与最大高度等截图参数
适用场景
适合需要让助手以图片方式查看公开网页的场景,例如检查页面渲染效果、截取整页供审阅,或查看某国家/地区视角下的页面。对于需要登录或分步操作的页面,使用助手自带的浏览器更合适。
运行要求
通过 npx 以 stdio 在本地运行,需要 Node.js 18 或更高版本。需要在 SITESHOT_API_KEY 环境变量中提供 Site-Shot API 密钥;免费方案每月 100 次截图,付费方案每月 5 美元起。需要能访问 Site-Shot API 的网络。
安装前请注意
截图会消耗账户的 API 配额;免费方案用满 100 次后接口返回 403,免费方案下请求不支持的国家会被拒绝但仍计入当月配额。API 密钥是可计费凭据,尽量避免写入配置文件或聊天内容。被截取的页面内容会发送至 Site-Shot 服务。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Site-Shot,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Site-Shot MCP server

Give Claude, Cursor, and other AI agents the ability to see public web pages — 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).

A Site-Shot API key is required. A confirmed account's API key comes with the free plan: 100 API captures a month, no card needed; paid plans start at $5/mo for 2,000. The free plan renews every month; once its 100 captures are spent, the API answers 403 until it renews. Free-plan captures come from the default location or the US; other countries need a paid plan, and a request for one is refused but still counts toward the month. Accounts confirmed before 2026-10-30 switch the free plan on with one button on https://www.site-shot.com/start/; an account that has had a paid plan before does not get it. Captures draw on that account's API allowance and limits. Get the key at https://www.site-shot.com/start/ or from your Site-Shot dashboard; pricing lists the plans. The no-signup browser tool at https://www.site-shot.com/ is for checking output quality; it does not issue keys.

Claude Code (plugin)

This repository doubles as a Claude Code plugin marketplace. The plugin runs the published site-shot-mcp package over stdio and declares the API key as a required sensitive setting, so Claude Code prompts you for it rather than asking you to paste it into this repository, a config file, or a chat message.

Install

bash
claude plugin marketplace add site-shot/site-shot-mcpclaude plugin install site-shot@site-shot

or from inside a session:

/plugin marketplace add site-shot/site-shot-mcp/plugin install site-shot@site-shot

Both forms resolve the marketplace from GitHub, so they work only after these manifests are published on the repository's public default branch — not from a local branch or a fork you have not pushed.

Try it before that

Load the plugin directory for a single session:

bash
claude --plugin-dir /absolute/path/to/site-shot-mcp/plugins/site-shot

Two things matter here. Pass an absolute path — --plugin-dir is resolved against the session's working directory. And start that session from an ordinary project directory, not from this checkout: this repo is the site-shot-mcp package, so npm resolves the name locally, finds no linked binary, and the server dies with sh: site-shot-mcp: command not found before Claude Code ever sees it. From an unrelated directory npx fetches the published package and starts it normally — checked both ways: exit 127 in this checkout, clean stdio start from an empty one.

To exercise the real install path instead — marketplace resolution, manifests and the required setting — add the checkout itself as a marketplace:

bash
claude plugin marketplace add /absolute/path/to/site-shot-mcpclaude plugin install site-shot@site-shot

That installs into your user scope; undo it with claude plugin uninstall site-shot@site-shot and claude plugin marketplace remove site-shot.

The API key

The plugin declares SITESHOT_API_KEY as a required, sensitive setting. Claude Code prompts you for the key, masks it as you type, and substitutes it into the server's environment as ${user_config.SITESHOT_API_KEY}. Storage of the value is Claude Code's to handle.

Installing without one is not an error — Claude Code records it as still owed (1 userConfig option not yet set (1 required)). Supply it through the masked prompt:

/plugin configure site-shot@site-shot

Configure it before expecting a capture: that setting is what feeds the server its key. What Claude Code does while it is unset — whether the server is launched at all, whether the tools are offered — is Claude Code's own behaviour and is not something documented here from observation.

The server's side is independent of that. When run directly over stdio without a key, it still starts and prints a warning on stderr. Capture tools return a clear missing-key error instead of an image.

The plugin adds one skill (site-shot:website-screenshots) and the two capture tools below. It declares no hooks, no monitors and no scheduled capture jobs; the only process it launches is the declared stdio MCP server.

Codex CLI (plugin)

This repository is also a Codex plugin marketplace. It installs the same plugin directory as Claude Code does — one shared skill, the same pinned [email protected] over stdio — with its own manifest, because the two hosts wire the credential differently.

Install

bash
codex plugin marketplace add site-shot/site-shot-mcpcodex plugin add site-shot@site-shot

Exercised against Codex CLI 0.147.0 on macOS (arm64). As with Claude Code, these resolve the marketplace from GitHub, so they work only once these manifests are on the public default branch; before that, point codex plugin marketplace add at a local checkout path instead.

Installing is not the same as being configured, and neither is the same as a capture succeeding. Installation only puts the manifests in place. The server still needs the key below, and a capture still needs allowance left on that key's account, from the free plan or a paid plan.

The API key

Codex forwards the variable named in the plugin's descriptor:

json
{ "command": "npx", "args": ["-y", "[email protected]"], "env_vars": ["SITESHOT_API_KEY"] }

env_vars is an allow-list of names, not values: no key appears in this descriptor, in the command below, or in the manual config.toml entry further down. You provision the key in the environment of the session you start Codex from.

macOS defaults to zsh, where read -p starts a coprocess rather than printing a prompt — and a bash-labelled code fence does not change the shell you paste into. Invoke bash explicitly:

bash
bash -c 'read -r -s -p "Site-Shot API key: " SITESHOT_API_KEY && printf "\n" && export SITESHOT_API_KEY && exec codex'

-s keeps the key off the screen, nothing here puts it in argv, and the export is scoped to that child session instead of lingering in the shell you typed from.

What this does not do is configure a Codex you start some other way. A desktop launcher or a remote session begins from its own environment, so it will run the server without a key until you provision one there too.

Manual MCP setup instead

If you would rather not install the plugin, the same stdio server can be configured by hand. This is an alternative to the plugin, not an addition — run both and you have two configurations of one server. Pick one.

toml
[mcp_servers.site-shot]command = "npx"args = ["-y", "[email protected]"]env_vars = ["SITESHOT_API_KEY"]

codex mcp add site-shot -- npx -y [email protected] writes that entry for you; add env_vars afterwards, since codex mcp add --env KEY=VALUE would store the key in the file in clear text. Check it with codex mcp get site-shot. If you already have an entry like this and now install the plugin, remove the manual one deliberately with codex mcp remove site-shot — nothing here edits your configuration for you.

Either route, the caveat from the Claude Code section applies: unless the entry sets cwd, Codex starts the server from wherever you ran Codex, so running it inside this repo hits the same local-name collision.

Claude Desktop & other MCP clients

  1. Get a Site-Shot API key at https://www.site-shot.com/start/.
  2. Add this to your Claude Desktop config (claude_desktop_config.json):
json
{  "mcpServers": {    "site-shot": {      "command": "npx",      "args": ["-y", "site-shot-mcp"],      "env": { "SITESHOT_API_KEY": "YOUR_API_KEY" }    }  }}
  1. 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.

Every integration above runs the same local stdio server, published on npm and in the official MCP Registry. Hosted HTTPS MCP is a separate deployment and client-compatibility path, not something these plugin install commands configure. Publication here does not imply listing in the shared ChatGPT/Codex public plugin directory or Claude's remote connector directory.

Tools

Two tools, both returning the screenshot as an MCP image. There is no saved library, no listing, no markdown conversion and no scheduling — this server captures images and hands them back.

capture_screenshot

Screenshot a web page (viewport by default).

ParamTypeDefaultNotes
urlstring (required)—Page to capture
full_pagebooleanfalseCapture the whole scrollable page
width / heightnumberAPI defaultViewport / device size
format"png" | "jpeg" | "webp"pngImage format. webp is lossless, about 35% smaller than png on the median page, max 16,383 px per side
block_adsbooleantrueRemove ads
block_cookie_bannersbooleantrueRemove cookie-consent popups
countrystring—Proxy country as a two-letter ISO 3166-1 alpha-2 code, e.g. "DE" (auto IP/lang/tz/geo)
strict_countrybooleantrueError out if the country has no proxy, instead of falling back to the US
language / time_zone / geolocationstring—Manual overrides
wait_msnumberAPI defaultExtra wait before capture (SPAs/animations)
max_heightnumber20000 (full page)Cap captured height

Returns the screenshot as an MCP image.

"API default" is not a number this package gets to state. width, height and wait_ms are 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 for width / height that 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 — pass false to 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 varRequiredDescription
SITESHOT_API_KEYyesYour 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

bash
npm installnpm run check            # syntax checknpm run smoke            # offline tests (stubbed fetch, no API key needed)node test/integration.mjs  # real stdio handshake against the local sourcenpm run test:plugin      # plugin/marketplace metadata testsnpm run validate:plugin  # claude plugin validate --strict (needs the claude CLI)SITESHOT_API_KEY=yourkey npm start   # run the server on stdio

Requirements

Node.js ≥ 18 (uses the built-in fetch).

License

MIT

来源:README.md,提交 348fe17

工具

2

capture_screenshot

Capture website screenshot

Take a screenshot of a web page with Site-Shot and return it as an image. Renders in a real Chromium browser. Supports viewport/device sizing, full-page capture, country proxies, and automatic ad & cookie-banner removal (cleaner image, fewer vision tokens).

输入参数url必填widthformatheightcountrywait_mslanguageblock_adsfull_pagetime_zonemax_heightgeolocation另有 2 个

capture_full_page

Capture full-page website screenshot

Take a full-page (entire scrollable height) screenshot of a web page with Site-Shot and return it as an image. Convenience wrapper around capture_screenshot with full-page capture enabled.

输入参数url必填widthformatheightcountrywait_mslanguageblock_adstime_zonemax_heightgeolocationstrict_country另有 1 个

版本历史

3
  1. v1.2.1最新Oct 31, 2026
  2. v1.2.0Sep 24, 2026
  3. v1.1.2Sep 16, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分