mcpField
S
Stealth Agent Browser

Stealth Agent Browser

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

关于 Stealth Agent Browser

Stealth Agent Browser 为 MCP 兼容的 AI Agent 提供 Chromium 浏览器操作,面向需要网页浏览与内容提取的任务。它结合无障碍快照、标注截图和 Readability Markdown 提取,并支持代理配置。

主要功能

  1. 01使用 Chromium 浏览网页
  2. 02生成含元素引用的无障碍快照
  3. 03提供标注截图视觉模式
  4. 04提取 Readability Markdown 内容
  5. 05配置代理与浏览器会话

适用场景

  1. 01浏览网页并操作交互元素
  2. 02从文章页面提取 Markdown
  3. 03通过截图定位页面元素
  4. 04在代理配置下执行网页任务

MCP 相关

作为 MCP 服务,它向客户端提供浏览器导航、快照、点击、输入、滚动读取及会话管理等工具。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"ykshah1309-stealth-agent-browser": {
"command": "npx",
"args": [
"-y",
"stealth-agent-browser-mcp"
],
"env": {
"SAB_HEADLESS": "<SAB_HEADLESS>",
"SAB_STEALTH_LEVEL": "<SAB_STEALTH_LEVEL>",
"SAB_PROXY_SERVER": "<SAB_PROXY_SERVER>",
"SAB_PROXY_USERNAME": "<SAB_PROXY_USERNAME>",
"SAB_PROXY_PASSWORD": "<SAB_PROXY_PASSWORD>",
"SAB_USER_DATA_DIR": "<SAB_USER_DATA_DIR>"
}
}
}
}
启动命令npx -y stealth-agent-browser-mcp
需要配置的环境变量
SAB_HEADLESSRun Chromium headless. Default: true.
SAB_STEALTH_LEVELoff | patched | paranoid. Default: patched.
SAB_PROXY_SERVEROptional proxy URL, e.g. http://host:port.
SAB_PROXY_USERNAME密钥Optional proxy username.
SAB_PROXY_PASSWORD密钥Optional proxy password.
SAB_USER_DATA_DIRPersistent browser profile directory.

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

安装包
npmstealth-agent-browser-mcp0.2.0

工具

13

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

参数类型必填说明
urlstring是要导航到的完整 URL。
modeenum否导航后返回的快照模式。'aom' 成本最低;'hybrid' 会额外添加带有 Set-of-Mark 标注的屏幕截图。aom | vision | hybrid
waitUntilenum否要等待的页面生命周期事件。load | domcontentloaded | networkidle | commit

详细介绍

stealth-agent-browser-mcp

一个模型上下文协议(MCP)服务,为 AI Agent 提供具备隐身级别的 Chromium 浏览器,并采用混合式辅助功能对象模型 + 标记集视觉界面。专为 Claude 构建,可与任何兼容 MCP 的宿主配合使用。

  • 隐身优先。 使用 rebrowser-playwright 修补 Runtime.Enable CDP 泄漏,该泄漏可绕过 playwright-extra 类隐身插件。在常规 Playwright 失效的现代机器人检测套件(CreepJS、bot.sannysoft.com)中通过检测。
  • 默认精简令牌用量。 browser_snapshot 返回 Playwright aria 快照 YAML(约 2–5 KB),而非原始 HTML(100 KB 以上)。每个交互元素都带有操作可直接使用的 [ref=eN] ID——无需选择器,也不会漂移。
  • 在需要时启用混合视觉。 请求 mode: "hybrid",服务就会在屏幕截图上叠加带编号的红框,帮助模型进行视觉定位(标记集提示,Yang 等人)。图像上的 ref ID 与 YAML 中的 ID 一致,无需担心两套编号不同步。
  • 基于可读性的内容提取。 browser_scroll_read 通过 JSDOM 运行 Mozilla Readability,并返回整洁的 Markdown;也可仅返回增量,在内容未变时重新读取无需花费。
  • 支持代理。 每个会话均可进行代理身份验证,适用于住宅代理池。

仅限授权用途。 隐身工具有正当用途(无障碍审计、自动化操作自己的账户、针对自有或获准测试的网站进行 QA)。请勿使用此服务违反网站服务条款或适用法律。请参阅 SECURITY.md。


安装

npm install -g stealth-agent-browser-mcp
# Chromium binary is fetched automatically on first launch
npx playwright-core install chromium

也可以通过 npx stealth-agent-browser-mcp 直接运行,无需安装。

快速开始(Claude Desktop / Claude Code / Cursor)

将以下内容添加到 MCP 配置中:

{
  "mcpServers": {
    "stealth-browser": {
      "command": "npx",
      "args": ["-y", "stealth-agent-browser-mcp"],
      "env": {
        "SAB_HEADLESS": "true",
        "SAB_STEALTH_LEVEL": "patched"
      }
    }
  }
}

重启宿主。Agent 就会看到下方列出的工具。

工具

工具用途
browser_navigate访问 URL 并返回快照。
browser_snapshotaom(仅 YAML,成本最低)、vision(原始屏幕截图)或 hybrid(YAML + 标记集屏幕截图)。
browser_click通过元素的 [ref=eN] ID 点击元素。
browser_type通过 ref 在输入框/文本区域中输入内容。
browser_select通过 ref 选择 <select> 中的选项。
browser_scroll_read滚动并返回 Readability Markdown(默认仅返回增量)。
browser_wait_for等待文本或 ref 变为可见。
browser_tabslist / new / close / switch。
browser_eval在页面的 MAIN 世界中计算 JS 表达式;返回 JSON 结果。
browser_set_proxy更新单个代理配置(在 browser_restart 后生效)。
browser_set_proxy_pool在运行时替换住宅代理池(在 browser_restart 后生效)。
browser_solve_captcha备用验证码求解器(CapSolver / 2Captcha)。检测页面上的 Turnstile/hCaptcha/reCAPTCHA。
browser_restart使用当前配置关闭并重新打开活动浏览器会话。

所有操作工具都通过最近一次 AOM 快照中提供的 ref 进行寻址。Ref 是 Playwright 自带的 aria-ref=eN ID——不存在第二套编号方案。

配置

全部通过环境变量配置:

变量默认值说明
SAB_HEADLESStrue设为 false 可显示窗口(用于调试)。
SAB_STEALTH_LEVELpatchedoff | patched | paranoid。
SAB_PROXY_SERVER—单代理模式。例如:http://host:port
SAB_PROXY_USERNAME / SAB_PROXY_PASSWORD—
SAB_PROXY_POOL—住宅代理池。使用逗号分隔的 URL(http://u:p@host:port,...),或包含 {server, username, password} 的 JSON 数组。
SAB_PROXY_ROTATIONper-restartper-session | per-restart | static。
SAB_PROXY_STICKY_TEMPLATE—粘性 IP 服务商的用户名模板。${sessionId} 会进行插值。例如:brd-customer-c1-zone-res-session-${sessionId}。
SAB_HUMAN_MOUSEtrue使用贝塞尔路径点击,并在点击前稍作停顿。可防止 Datadome 进行轨迹分析。
SAB_CAPTCHA_PROVIDERnonecapsolver | twocaptcha | none。
SAB_CAPTCHA_API_KEY—服务商 API 密钥。
SAB_USER_DATA_DIR—持久化配置文件目录(Cookie 会积累信誉)。
SAB_DEFAULT_TIMEOUT_MS15000每项操作的超时时间。
SAB_MAX_ANNOTATED75混合模式下最多标注的方框数。
SAB_VIEWPORT_W / SAB_VIEWPORT_H1366 / 768
SAB_LOCALEen-US
SAB_TIMEZONEAmerica/New_York
LOG_LEVELinfodebug、warn 等。始终写入 stderr。

架构

src/
├── index.ts         # Entry (stdio)
├── server.ts        # MCP server + tool registration
├── tools.ts         # Tool handlers
├── browser.ts       # Stealth Chromium launcher (rebrowser-playwright)
├── session.ts       # Per-connection browser/context/page state
├── snapshot.ts      # AOM + Set-of-Mark pipeline
├── annotate.ts      # SVG overlay compositing (sharp)
├── reader.ts        # Readability → Markdown (pierces open shadow roots)
├── fingerprint.ts   # Rotatable UA/viewport/timezone profiles
├── proxy.ts         # Residential pool + rotation + sticky-session template
├── human-mouse.ts   # Bezier-curve cursor paths (ghost-cursor math)
├── captcha.ts       # CapSolver / 2Captcha REST adapters
├── config.ts        # Zod-validated env config
└── logger.ts        # pino → stderr (never stdout)

所有日志都写入 stderr——stdout 专用于 JSON-RPC。切勿添加 console.log。

TLS / JA3 指纹——为何这里没有 Node 层的伪装器

爬虫常见的需求是:“通过 curl-impersonate 或 node-tls-client 伪装 TLS ClientHello(JA3),使其看起来像 Chrome。”

这适用于 Node 层的 HTTP 爬虫(fetch、got、axios):TCP 连接由 Node 的 OpenSSL 发起,它发出的 ClientHello 签名与 Chrome 的 BoringSSL 不同,因此 Cloudflare / Akamai Bot Manager 会在网络层拦截请求,此时甚至还没有一个字节的 JavaScript 运行。

此 MCP 并非这种架构。 每个请求都通过 Chromium 发出。Chromium 的 TLS 堆栈就是 Chrome 的 TLS 堆栈(实际上使用相同的 BoringSSL 构建版本),因此 ClientHello JA3 从架构上来说就是 Chrome 的 JA3。无需也无法在 JS 层进行重写。

唯一仍可能暴露 TLS 信息的情况,是流量经过了会终止并重新发起 TLS 的代理(MITM)。住宅代理服务商(Bright Data、DataImpulse、Oxylabs residential、SOAX)在 TCP 层进行路由,不会对 TLS 进行 MITM,Chromium 握手会原样到达源站。确实会对 TLS 进行 MITM 的产品是托管式爬虫浏览器(Bright Data 的 Scraping Browser、Oxylabs Web Unblocker);它们自带无头 Chrome,会取代此 MCP,而不是叠加在其上。

**总之:**使用 rebrowser-playwright + 住宅代理池(P1)+ 人类鼠标操作(P2),TLS 指纹、CDP 运行时、DOM 特征和行为层都与真实 Chrome 一致。验证码求解(P3)是后备方案,用于仍被标记的 1–5% 会话。

基准测试

npm run bench:stealth 会启动配置好的浏览器,访问公开的机器人检测测试页面(bot.sannysoft.com、CreepJS、pixelscan、BrowserLeaks WebRTC),并报告通过或失败。这些测试框架与 rebrowser-patches 和 Patchright 项目使用的相同——参考测试套件请参阅 rebrowser-bot-detector。

典型的本地测试运行结果(参见 test/):

测试结果
AOM YAML 包含所有交互元素的引用✓
hybrid 模式返回 PNG + YAML,引用匹配✓
按引用执行 click / type 后产生预期的 DOM 变化✓
Readability 将文章提取为 Markdown✓
重复滚动时,仅增量滚动返回 (no readable content change)✓

对比

stealth-agent-browser-mcpplaywright-mcpbrowser-use MCPcomputer use
CDP 级隐蔽性(Cloudflare/DataDome)✓✗部分支持✗
无障碍树快照✓✓✓✗
Set-of-Mark 视觉(带引用标签的截图)✓✗✗纯视觉
基于可读性的滚动与阅读✓✗✗✗
默认精简 Token✓✓✗✗
内置 Agent 循环✗(由宿主的模型驱动)✗✓✗

开发

npm install
npx playwright-core install chromium
npm run build
npm test

贡献

请参阅 CONTRIBUTING.md。所有贡献均采用 Apache-2.0 许可。

许可证

Apache-2.0

评论

支持 Markdown

第一次接触 MCP?

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

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