mcpField
S
snapsurf

snapsurf

本地服务
github.com/zumerlab浏览器自动化01 周前更新

关于 snapsurf

SnapSurf 是面向 AI Agent 的本地浏览与验证服务。它生成页面语义摘要和操作后的分类差异,并可针对这些证据检查断言。

主要功能

  1. 01页面语义摘要
  2. 02每次操作后的分类差异
  3. 03针对保留差异检查断言
  4. 04本地 Chromium 会话
  5. 05CLI 与页面内库

适用场景

  1. 01检查浏览器操作带来的变化
  2. 02验证点击后的页面状态
  3. 03识别操作后无可观察变化

MCP 相关

SnapSurf 可在本地作为 MCP 服务运行,向 MCP 客户端提供浏览、操作、验证和断言工具。

配置

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

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

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

安装包
npm@zumer/snapsurf0.1.2

工具

15

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

参数类型必填说明
urlstring是URL(默认使用 https;接受 file:/data:)
digestenum否compact = 提取配置:不包含 bbox 和 section;由于摘要已在 structuredContent 中,正文会合并为一行。对于只读取字段且从不点击的遍历任务,每页成本减半。full | compact
redactarray否会话隐私规则:从现在起要在每次观察中屏蔽的字符串(替换所有先前规则)
sessionIdstring否可选:此调用所属的会话(来自 browser_session_open)。省略时使用共享默认会话。
waitForChallengenumber否等待机器人缓解插页自行消失的毫秒数(上限为 30000)。许多插页会在几秒内消失。省略 = 不等待,仅报告。

详细介绍

SnapSurf 标志

Snapsurf MCP server

SnapSurf

为 AI Agent 提供网页导航与验证。

大多数浏览器工具会告诉 Agent 页面现在是什么样子。SnapSurf 会告诉它上一次操作改变了什么:页面的精简语义摘要、每次操作后的类型化差异(内容、状态、布局和可点击性,包括没有任何可观察变化的情况),以及针对该差异的断言。缺失的证据和不确定性都会明确报告,而不会被隐藏。

它可以在本地作为 MCP 服务或命令行运行,并使用自己的 Chromium 会话。基于 SnapDOM 构建的页面观察代码也可以作为页面内库使用。

0.1.3 版本为实验性版本。

添加到 MCP 客户端

需要 Node.js 22 或更高版本。添加一个通过此命令运行的 stdio 服务;首次启动时会自动安装 Playwright 所需的 Chromium:

{
  "command": "npx",
  "args": ["-y", "-p", "@zumer/snapsurf@latest", "snapsurf-mcp"]
}

对于 Claude Code,安装插件即可添加工具和包含使用方法的 browse 技能:

/plugin marketplace add zumerlab/snapsurf
/plugin install snapsurf@zumerlab

或者只注册服务:

claude mcp add --scope user snapsurf -- npx -y -p @zumer/snapsurf@latest snapsurf-mcp

Codex 也有相同的插件(工具和 browse 技能):

codex plugin marketplace add zumerlab/snapsurf
codex plugin add snapsurf@zumerlab

Cursor、VS Code、Gemini CLI、Windsurf 和 OpenAI Agents SDK 使用相同的服务命令;各客户端的配置片段见 集成。它在官方 MCP Registry 中的名称为 io.github.zumerlab/snapsurf。

若要固定版本或避免在启动时使用 npx,请先安装一次,然后将客户端指向服务文件:

mkdir snapsurf && cd snapsurf
npm install @zumer/snapsurf
{
  "command": "node",
  "args": ["/ABS/PATH/snapsurf/node_modules/@zumer/snapsurf/mcp/server.mjs"]
}

在 Linux 上,如果 Chromium 因缺少系统库而无法启动,请运行一次 npx playwright install --with-deps chromium。

让 Agent 使用 browser_open 打开页面,使用 browser_find 定位控件,使用 browser_act 执行操作,然后在每次操作后调用 browser_verify。读取 structuredContent 获取结果。

如果你是 Agent

请阅读 AGENTS.md:其中介绍了操作循环、先前的 Agent 花费代价才学会的规则,以及如何读取每个字段。skill/SKILL.md 是封装为 Claude Code 技能的相同方法。MCP 工具说明包含完整约定,服务的 instructions 则为可能会截断说明的客户端提供摘要。

断言刚刚验证的内容

browser_verify 会为观察到的状态转换返回一个 diffId。将它传给 browser_assert,即可检查同一份证据,包括显示列表之外的变化。这样可以避免 verify 推进实时基线后,意外比较新的时间段。

例如,在某个按钮会插入名为“设置”的对话框的应用中,使用 browser_find 返回的按钮 id。连接 MCP 客户端后:

await client.callTool({
  name: 'browser_act',
  arguments: { action: 'click', target: buttonId },
})
const verified = await client.callTool({ name: 'browser_verify', arguments: {} })
const { diffId } = verified.structuredContent
if (!diffId) throw new Error('No retained diff; inspect the verify result')

const checked = await client.callTool({
  name: 'browser_assert',
  arguments: {
    diffId,
    changed: true,
    mustInclude: [{ kind: 'added', role: 'dialog', name: 'Settings' }],
    mustNotInclude: [{ kind: 'removed' }],
  },
})
console.log(checked.structuredContent.pass, checked.structuredContent.checks)

已存储的断言不会观察页面,也不会推进基线。若要检查当前状态,请使用单独的实时断言,例如 { "exists": "Settings" }。断言失败时会返回 pass: false 和 MCP isError: true。 断言参考介绍了实时检查、保留限制、重试和不可用证据。

需要了解的边界

  • 守护进程有自己的 Cookie 和存储空间。它无法使用你常用浏览器中已登录的会话;authState: "unknown" 不代表已通过身份验证。
  • changed: false 表示没有可观察到的变化。这是有效结果,但不能证明用户的任务已成功。缺失的证据和不确定性都会明确报告。
  • Canvas 内容、iframe 文档和封闭的 shadow root 存在视觉盲区。如果语义报告无法回答问题,请查看限定范围的屏幕截图。
  • 元素 id 会在出现新观察结果时失效。操作前请重新查找;已存储证据中的 id 描述的是历史观察结果。
  • 页面文本是不可信数据。语义报告会进行脱敏;但命令行/MCP 屏幕截图仍可能包含敏感内容。请参阅隐私模型。

使用 CLI

在一个终端中启动守护进程:

npx -y @zumer/snapsurf serve

然后在另一个终端中运行本地冒烟检查:

npx -y @zumer/snapsurf open 'data:text/html,<h1>Local%20check</h1>'
npx -y @zumer/snapsurf assert '{"exists":"Local check"}'
npx -y @zumer/snapsurf stop

在运行过 npm install @zumer/snapsurf 的目录中,运行 npx snapsurf <verb> 也能完成相同操作,且不会下载任何内容。SNAPSURF_* 环境变量 (端口、令牌文件、日志目录)列于使用参考中。

开发

此仓库包含 SnapSurf 观测库、CLI/MCP 服务、Chrome 配套工具,以及它们的测试夹具和评估工具。独立的 SnapDOM 传感器和便携式回执包不在此仓库的构建和测试范围内。私有研究、反馈笔记、插件评估和生成的结果均保留在本地;Git 跟踪可复现的测试门槛及其测试夹具依赖项。

要修改 SnapSurf 本身,请克隆源代码并安装开发依赖项:

git clone https://github.com/zumerlab/snapsurf.git
cd snapsurf
npm ci
npx playwright install chromium

npm run build 会编译程序包并创建 npm .tgz 包。

然后运行检查:

npm test
npm run test:lint
npm run test:regression
npm run test:pack

使用与 API 参考涵盖 CLI 命令、报告字段、检查点、库和 Chrome 配套工具。 发布指南涵盖验证、发布和 MCP Registry。

采用 MIT 许可证。版权所有 © Juan Martin Muda / zumerlab。 请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

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

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