mcpField
P
pagesnap

pagesnap

本地服务
github.com/CloudCorpRecords浏览器自动化02 天前更新

关于 pagesnap

pagesnap 是面向 Agent 的 MCP 服务,通过托管的 Chromium 服务将公开网页截取为图像。它支持视口或整页截图,并可查询剩余额度。

主要功能

  1. 01截取公开网页
  2. 02支持视口或整页图像
  3. 03输出 WebP、JPEG 和 PNG
  4. 04设置等待条件、语言区域和时区
  5. 05查询剩余截图额度

适用场景

  1. 01截取落地页以供检查
  2. 02将长网页保存为整页图像
  3. 03在工作流开始前检查截图额度

MCP 相关

向 MCP 客户端提供截图和额度查询工具,并将调用转发到托管的 snap 服务后原样返回回复。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cloudcorprecords-pagesnap": {
"command": "npx",
"args": [
"-y",
"@reneturcios/pagesnap"
]
}
}
}
启动命令npx -y @reneturcios/pagesnap

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@reneturcios/pagesnap0.1.0
ocighcr.io/cloudcorprecords/pagesnap:0.1.0

工具

2

收录的工具列表 · 更新于 2 天前

参数类型必填说明
urlstring是要截取的公开 http(s) URL,例如 'https://example.com'。
widthinteger否视口宽度,单位为 CSS 像素。超过服务上限的值会被限制在上限。
formatenum否图像格式。webp 和 jpeg 比 png 小得多。png | jpeg | webp
heightinteger否视口高度,单位为 CSS 像素。超过服务上限的值会被限制在上限。
localestring否BCP 47 区域设置,例如 de-DE。
fullPageboolean否截取整个可滚动页面。
waitUntilenum否截图前要等待的导航事件。load | domcontentloaded | networkidle
timezoneIdstring否IANA 时区,例如 Europe/Berlin。
waitForSelectorstring否截图前必须出现的 CSS 选择器。

详细介绍

pagesnap

pagesnap 可以让 Agent 将任意公开网页转换为图片。提供一个 URL,它就会在 Chromium 上游中渲染页面并返回截图——可以截取视口,也可以截取整个可滚动页面;支持 webp、jpeg 或 png 格式,并可指定视口尺寸。你可以等到某个选择器出现后再截图,选择要等待的导航事件,并设置页面所看到的时区和区域设置;如果网站会因地区或语言而呈现不同内容,这些设置就很重要。另一个工具会报告剩余截图次数,让工作流可以在开始消耗额度前先检查可用额度。

这个包本身不进行渲染。它只是连接到托管 snap 服务的轻量本地桥接层:工具列表由本地直接返回,内容与从实时端点捕获的完全一致;每次调用都会转发到上游,并原样返回结果。无需注册即可免费使用服务;提供你自己的 API 密钥后,可用额度会从每日免费额度提升为组织的月度额度,get_quota 会报告相应额度。

工具

  • take_screenshot — 渲染公开网页并返回截图。必需参数:url(公开的 http(s) URL)。可选参数:format(webp、jpeg 或 png,默认为 webp——webp 和 jpeg 的体积远小于 png)、width(视口宽度,单位为 CSS 像素,默认为 1280)和 height(默认为 720;超过服务上限的值会被截为上限)、fullPage(截取整个可滚动页面,默认为 false)、waitUntil(load、domcontentloaded 或 networkidle,默认为 load)、waitForSelector(必须在截图前出现的 CSS 选择器)、timezoneId(IANA 时区,例如 Europe/Berlin)和 locale(BCP 47 区域设置,例如 de-DE)。高度很大的整页截图会以链接而非内嵌图片的形式返回;对于高于 16383px 的页面,fullPage WebP 截图会被裁剪到该高度(并通过 fullPageClip 报告)——如此高的页面请使用 jpeg 或 png。
  • get_quota — 查询剩余截图次数。无需参数。如果未使用密钥,则返回每日免费额度;如果使用了密钥,则返回组织的月度额度。此工具只读取你自己的额度;这个包不会购买、充值或管理账户。

配置

  • SNAP_MCP_URL(可选)— 覆盖上游端点。默认为 https://snap.i2dev.com/mcp。(此覆盖钩子是本次重建自行标注的还原内容。)
  • SNAP_API_KEY(可选)— 设置后,每个上游请求都会携带一个 Authorization: Bearer <key> 标头,其中包含你的 snap API 密钥。未设置时,不会发送密钥标头,并适用免费额度。(原始注册表记录声明了一个名为 Authorization 的密钥标头,因此标头名称有据可依;记录并未指定软件包环境变量名称,因此环境变量名称、Bearer 格式和转发行为均为自行标注的还原内容——原始接口是在未提供密钥的情况下捕获的。)
转发机制

首次调用工具时,客户端会在上游打开一个可流式传输的 HTTP 会话:先发送 JSON-RPC initialize 请求(protocolVersion 2025-03-26,clientInfo name pagesnap),再发送 notifications/initialized 通知,然后发送携带调用方原样参数的 tools/call 请求。上游通过 initialize 返回 Mcp-Session-Id 标头时,该值会附加到此会话之后的每个请求中;此会话会在进程整个生命周期内复用。回复可能以普通 JSON 或服务器发送事件的形式到达,两种形式都会读取。

上游成功结果会原样透传,包括上游设置的任何 isError 标志。失败情况——JSON-RPC 错误、非 2xx 状态、无法读取响应或无法完成的请求——会作为 isError 结果返回,文本以 pagesnap error: 开头(这种错误呈现方式是本次重建自行标注的还原内容)。

命令行

每个工具也是一个子命令,接受一个 JSON 参数字符串:

npx @reneturcios/pagesnap take_screenshot '{"url":"https://example.com"}'
npx @reneturcios/pagesnap take_screenshot '{"url":"https://example.com","fullPage":true,"format":"png"}'
npx @reneturcios/pagesnap get_quota '{}'
npx @reneturcios/pagesnap --version

退出代码:成功时为 0,返回 isError 结果时为 1,用法错误时为 2。

MCP 服务

npx -y @reneturcios/pagesnap mcp

MCP 客户端配置:

{
  "mcpServers": {
    "pagesnap": {
      "command": "npx",
      "args": ["-y", "@reneturcios/pagesnap", "mcp"]
    }
  }
}

Docker

docker run -i ghcr.io/cloudcorprecords/pagesnap
docker run --rm ghcr.io/cloudcorprecords/pagesnap --version

容器的默认命令是 mcp,因此第一种形式是 stdio MCP 服务;任何其他参数都会正常传递给命令行。

开发

npm install
npm run build
npm test
npm run dev

测试套件完全针对存根化的 JSON-RPC 上游运行,不会进行实时网络调用。

许可证

MIT — 参见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。