关于 cloak-browser-mcp
cloak-browser-mcp 是基于 CloakBrowser Chromium 的 Playwright 兼容 MCP 服务,面向需要隐身浏览、持久配置文件及可选网络、存储、视觉或测试工具的 MCP 客户端。
主要功能
- 01兼容 Playwright 的浏览与交互
- 02隐身检测与审计工具
- 03管理持久化配置文件
- 04代理、区域、时区和指纹设置
- 05可选网络、存储、视觉和测试能力
适用场景
- 01自动化访问启用机器人检测的网站
- 02检查并测试浏览器网络行为
- 03复用浏览器配置文件和存储状态
- 04生成定位器并验证页面元素
MCP 相关
它向 MCP 客户端提供浏览器自动化及 CloakBrowser 专属工具,并可通过能力标志启用额外工具组。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
35收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 是 | 要加载的绝对 URL。受 --allowed-domains / --blocked-domains 限制。 |
| timeoutMs | number | 否 | |
| waitUntil | enum | 否 | load | domcontentloaded | networkidle | commit |
详细介绍
cloak-browser-mcp
由 CloakHQ/CloakBrowser 提供支持的 Model Context Protocol(MCP)服务——CloakBrowser 是经过源码补丁修改的 Chromium,无需在运行时注入 JS,即可通过 Cloudflare Turnstile、reCAPTCHA v3、FingerprintJS、BrowserScan 及其他 30 多种机器人检测服务。
可直接替换 @playwright/mcp,包含 86 个工具:除 browser_annotate 外的所有 Playwright MCP 工具(请参阅尚未实现),以及 Cloak 独有的隐身/配置文件/审计层。
兼容 Claude Code、Cursor、VS Code、Codex、Gemini CLI、Windsurf 及任何 MCP 客户端。
目录
- 为什么选择 CloakBrowser,而不是原版 Playwright?
- 快速开始
- 功能(
--caps) - CloakBrowser 独有工具
- CLI 标志
- 工具清单
- 交互工具的目标语法
- 示例工作流
- 安全模型
- 更新日志
- 许可证
为什么选择 CloakBrowser,而不是原版 Playwright?
@playwright/mcp | cloak-browser-mcp | |
|---|---|---|
| Chromium | 原版 | 源码补丁修改(58 个 C++ 补丁) |
navigator.webdriver | true(会泄露) | 不存在 |
| Cloudflare Turnstile | 无法通过 | 自动通过 |
| reCAPTCHA v3 评分 | ~0.1 | ~0.9 |
| 拟人化鼠标/键盘操作 | 无 | 贝塞尔曲线、纠正拼写错误 |
| 持久化配置文件 | 手动 | 一流的 CLI 标志和管理工具 |
| 感知 GeoIP 的模拟 | 无 | 根据代理出口 IP 自动设置时区/区域设置 |
| 隐身审计/检测探测 | 无 | 内置 cloak_stealth_audit 和 cloak_detection_test |
如果不需要隐身功能,@playwright/mcp 更快、更轻量——请使用它。如果网站启用了任何机器人检测(Cloudflare、DataDome、PerimeterX、FingerprintJS),请使用此工具。
快速开始
1. 安装一次即可
此封装包通过 npm 安装;首次使用时,CloakBrowser Chromium 二进制文件(约 200 MB)会下载到 ~/.cloakbrowser/。
需要 Node.js ^20.19.0 || >=22.12.0(CloakBrowser 本身所需的最低版本)。
二进制文件分为两个等级。不使用密钥时,将获得免费版二进制文件。在 MCP 服务的环境中设置 CLOAKBROWSER_LICENSE_KEY,即可使用 CloakBrowser Pro 许可证;CloakBrowser 库也会读取 CLOAKBROWSER_RELEASE_CHANNEL(stable 或 preview)和 CLOAKBROWSER_VERSION。各等级包含的内容请参阅 cloakbrowser.dev。cloak_binary_info 会报告当前使用的等级。
npm install -g @devinwangd/cloak-browser-mcp
也可以按需运行,无需安装:
npx @devinwangd/cloak-browser-mcp --caps all
安装后,PATH 中的二进制文件名为 cloak-browser-mcp(无作用域)——下方 MCP 客户端配置中应引用此名称。
2. 接入 MCP 客户端
Claude Code(~/.claude.json 或项目的 .mcp.json)
{
"mcpServers": {
"cloak-browser": {
"command": "cloak-browser-mcp",
"args": ["--caps", "all"]
}
}
}
Cursor / VS Code(.cursor/mcp.json 或 .vscode/mcp.json)
{
"servers": {
"cloak-browser": {
"command": "cloak-browser-mcp",
"args": ["--caps", "all"]
}
}
}
持久化配置文件 + 代理 + 拟人化输入
{
"mcpServers": {
"cloak-browser": {
"command": "cloak-browser-mcp",
"args": [
"--caps", "all",
"--profile-dir", "/Users/me/.cloak-browser-mcp/profiles/work",
"--proxy", "http://user:[email protected]:8080",
"--timezone", "Europe/London",
"--locale", "en-GB",
"--geoip",
"--humanize",
"--viewport", "1920x1080",
"--allowed-domains", "*.example.com,*.cloudflare.com"
]
}
}
}
3. 开始使用
在 Claude Code 中:
“打开 example.com,点击搜索框,搜索 ‘hello’,并截取屏幕截图。”
Agent 将依次调用 browser_navigate → browser_snapshot → browser_click → browser_type → browser_take_screenshot。
能力(--caps)
| 能力 | 工具 | 适用场景 |
|---|---|---|
| (始终启用) | navigation、interaction、page state | 标准浏览 |
network | 请求检查、路由模拟、离线模拟 | 调试 API、测试故障模式 |
storage | cookies、localStorage、sessionStorage、存储状态导出 / 导入 | 身份验证状态持久化、会话重放 |
vision | 像素坐标鼠标 | 绕过无障碍树操作 canvas / SVG 应用 |
pdf | browser_pdf_save | 将页面快照保存为 PDF |
testing | verify_* + generate_locator | 为 Playwright 测试生成代码 |
devtools | 高亮、追踪、视频、恢复 | 调试 Agent 的决策 |
config | get_config、close、run_code_unsafe | 内省 +(配合 --enable-unsafe-eval)执行任意 JS |
humanize | cloak_humanize_set | 调整拟人化输入参数 |
--caps all 会启用所有功能(但 run_code_unsafe 还需要 --enable-unsafe-eval)。
CloakBrowser 专属工具(始终启用)
| 工具 | 用途 |
|---|---|
cloak_set_fingerprint | 覆盖 canvas 种子、GPU 厂商 / 渲染器、屏幕尺寸、硬件并发数、设备内存、UA 品牌、平台、存储配额 |
cloak_set_timezone | 通过 CDP 实时设置时区(无需重新启动) |
cloak_set_locale | 覆盖 navigator.language 和 Accept-Language |
cloak_set_geolocation | 设置坐标,或根据代理出口 IP 自动解析 |
cloak_set_proxy | 在会话中途切换代理 |
cloak_detection_test | 加载已知探测页面(CreepJS、FingerprintJS、BrowserScan、SannySoft、Cloudflare Turnstile)并导出结果 |
cloak_stealth_audit | 程序化检查:navigator.webdriver、插件数量、WebGL 厂商、语言、UA、chrome.runtime、canvas 哈希、$cdc_* CDP 信号 |
cloak_request_signal_inspect | 捕获单个 URL 每个请求的 TLS / 标头信号 |
cloak_persistent_profile_create / list / delete | 管理 ~/.cloak-browser-mcp/profiles/ |
cloak_binary_info / cloak_binary_update | 检查 / 更新 CloakBrowser Chromium 二进制文件 |
CLI 标志
| 标志 | 值 | 默认值 | 说明 |
|---|---|---|---|
--caps <csv> | all 或任意子集 | (无) | 启用受能力控制的工具 |
--profile-dir <path> | 绝对路径 | (临时) | 持久化用户数据目录 |
--headless / --headed | (布尔值) | headed(可见) | 批处理 / CI 运行时传入 --headless。 |
--proxy <url> | 带内联身份验证的 http(s)/socks5 | 无 | |
--timezone <tz> | IANA 时区 | 系统 | 例如 America/New_York |
--locale <bcp47> | BCP-47 | 系统 | 例如 en-US |
--user-agent <ua> | 字符串 | (cloak 默认值) | |
--viewport <WxH> | 例如 1920x1080 | 1280×720 | |
--geoip | 布尔值 | 关闭 | 根据代理 IP 自动解析地理位置 |
--humanize | 布尔值 | 关闭 | 启用贝塞尔曲线鼠标 + 自动纠正拼写错误的键盘 |
--fingerprint-seed <int> | int | 随机 | 确定性 canvas / WebGL 噪声 |
--allowed-domains <csv> | 主机模式 | (开放) | browser_navigate 的白名单 |
--blocked-domains <csv> | 主机模式 | (无) | browser_navigate 的阻止列表 |
--enable-unsafe-eval | 布尔值 | 关闭 | browser_run_code_unsafe 的必需标志 |
--upload-allow-dir <path> | 路径 | (无) | 限制文件上传来源路径 |
--download-dir <path> | 路径 | (cwd) | 下载文件的保存位置 |
--max-pages <n> | int | 20 | 并发标签页上限 |
--self-test | 布尔值 | 关闭 | 打印工具列表并退出 |
工具清单
工具按能力分组。“始终启用”部分无论 --caps 的值为何都会公开;受能力控制的部分则需要在 --caps 中添加相应条目。
始终启用
导航
| 工具 | 必填 | 可选 | 说明 |
|---|---|---|---|
browser_navigate | url | waitUntil, timeoutMs | 受 --allowed-domains / --blocked-domains 限制。返回新的 [eN] 快照。 |
browser_navigate_back | — | — | 在当前标签页中返回上一页。 |
browser_tabs | action(list/new/switch/close) | index, id, url | 可通过 id(t1、…)或从 0 开始的索引管理标签页。 |
交互
| 工具 | 必填 | 可选 | 说明 |
|---|---|---|---|
browser_click | target | element, doubleClick, button, modifiers | target 是 eN 引用或 Playwright 选择器。 |
browser_type | target, text | element, submit, slowly | slowly:true 会逐字符输入;与 --humanize 搭配使用。 |
browser_hover | target | element | |
browser_drag | startTarget, endTarget | startElement, endElement | |
browser_drop | target | paths, data | 通过 setInputFiles 提供文件路径;通过合成的 DataTransfer 提供任意 MIME 数据。 |
browser_select_option | target, values | element | |
browser_press_key | key | — | 在页面级别按键(例如 Control+A、ArrowDown)。 |
browser_handle_dialog | accept | promptText | 响应最近捕获的对话框。 |
browser_file_upload | paths | — | 如果设置了 --upload-allow-dir,则路径受其限制。 |
browser_fill_form | fields | — | 每个字段包含 target + value(以及可选的 kind)。 |
browser_scroll | — | target, direction, amount | 可限定到元素或作用于整个页面。 |
页面状态
| 工具 | 必填 | 可选 | 说明 |
|---|---|---|---|
browser_snapshot | — | — | 可访问性树,其中交互节点带有 [eN] 引用。 |
browser_find | text 或 regex | filename | 在快照中搜索,而不是返回全部内容。每个匹配项会显示其从根节点开始的路径及几行上下文,最多显示 20 个匹配项。除非写为 /pattern/i,否则 regex 区分大小写。 |
browser_emulate_media | — | colorScheme, reducedMotion, forcedColors, contrast, media | 未提供的参数保持不变;null 会清除覆盖设置并恢复为系统设置。 |
browser_take_screenshot | — | element, target, type, fullPage, quality, saveAs | 图片以内嵌形式返回;也可选择保存到磁盘。 |
browser_console_messages | — | level, limit | 缓冲的控制台消息和 pageerror。 |
browser_wait_for | — | timeMs, text, textGone, selector, state, timeoutMs | |
browser_resize | width, height | — | |
browser_evaluate | function | element, target | 函数源码必须是箭头函数或函数表达式。 |
CloakBrowser 专属
| 工具 | 必需 | 可选 | 说明 |
|---|---|---|---|
cloak_set_fingerprint | — | seed, gpuVendor, gpuRenderer, screenWidth, screenHeight, hardwareConcurrency, deviceMemoryGB, uaBrand, uaBrandVersion, platform, storageQuotaMB | 某些标志仅在下次启动时生效——调用 browser_close,然后调用任意工具即可重新启动。 |
cloak_set_timezone | timezone | — | 通过 CDP 实时生效。 |
cloak_set_locale | locale | — | 设置 navigator.language 和 Accept-Language 请求头。 |
cloak_set_geolocation | — | latitude, longitude, accuracy, fromProxyIp | fromProxyIp 会通过当前代理调用 ipapi.co/json/。 |
cloak_set_proxy | proxy | — | 重新创建上下文。 |
cloak_detection_test | — | suite, customUrl | 测试套件:creepjs、fingerprintjs、browserscan、sannysoft、cloudflare-turnstile。 |
cloak_stealth_audit | — | — | 程序化审计。 |
cloak_request_signal_inspect | url | — | 返回 TLS 详情、响应状态、请求头和响应头。 |
cloak_persistent_profile_create | name | — | 创建 ~/.cloak-browser-mcp/profiles/<name>。 |
cloak_persistent_profile_list | — | — | |
cloak_persistent_profile_delete | name, confirm=true | — | |
cloak_binary_info | — | — | |
cloak_binary_update | — | — |
按功能权限启用
--caps network — browser_network_requests、browser_network_request、browser_route、browser_route_list、browser_unroute、browser_network_state_set。
--caps storage — browser_cookie_set/get/list/delete/clear、browser_localstorage_*、browser_sessionstorage_*、browser_storage_state、browser_set_storage_state。
--caps vision — browser_mouse_click_xy、browser_mouse_move_xy、browser_mouse_drag_xy、browser_mouse_down、browser_mouse_up、browser_mouse_wheel。
--caps pdf — browser_pdf_save。
--caps testing — browser_verify_element_visible、browser_verify_text_visible、browser_verify_list_visible、browser_verify_value、browser_generate_locator。
--caps devtools — browser_highlight、browser_hide_highlight、browser_start_tracing、browser_stop_tracing、browser_start_video、browser_stop_video、browser_video_chapter、browser_resume、browser_video_show_actions、browser_video_hide_actions、browser_start_recording、browser_stop_recording。
--caps config — browser_get_config、browser_close、browser_run_code_unsafe(还需要 --enable-unsafe-eval)。
--caps humanize — cloak_humanize_set。
尚未实现
不提供 Playwright MCP 中的 browser_annotate。它会打开 Playwright 的仪表板窗口,并等待用户在页面上绘制标注;Playwright 会将其作为内部进程运行,而本服务不会启动该进程。
交互工具的目标语法
target 参数接受:
- 来自先前
browser_snapshot的eN引用——例如e7。最可靠。 - CSS 选择器——例如
button.primary。 xpath=…——例如xpath=//button[contains(., "Submit")]。text=…——例如text=Sign in。role=…[name="…"]——例如role=button[name="Submit"]。
每次导航或发生重大 DOM 变更后,都要再次调用 browser_snapshot 刷新引用。
示例流程
1. 截取受 Cloudflare 保护的页面
You: Open https://example-cloudflare-protected.com, wait for the page to settle, take a full-page screenshot.
Agent calls:
browser_navigate(url="https://...")
browser_wait_for(textGone="Checking your browser")
browser_take_screenshot(fullPage=true)
原版 @playwright/mcp 无法通过 Turnstile 检查;cloak-browser-mcp 会自动通过,因为隐身补丁位于 JS 层之下。
2. 登录 SaaS 控制面板、持久化身份验证信息,并在稍后重新打开
阶段 1 — 使用全新配置文件首次登录:
// .mcp.json
{
"mcpServers": {
"cloak": {
"command": "cloak-browser-mcp",
"args": [
"--caps", "all",
"--profile-dir", "/Users/me/.cloak-browser-mcp/profiles/saas-prod",
"--humanize"
]
}
}
}
You: Open https://saas.example.com, sign in as [email protected] / <password>, then confirm I'm on the dashboard.
阶段 2 — 稍后重新打开,所有 Cookie 仍然存在:
You: Open https://saas.example.com — you should already be signed in from yesterday's session.
3. 探测隐身效果
You: Run a stealth audit and then load the SannySoft bot detection test.
Agent:
cloak_stealth_audit()
cloak_detection_test(suite="sannysoft")
如果隐身功能完好,你会看到所有项目都显示为绿色。
4. 在会话期间通过代理切换地理位置/时区
You: Switch to a UK proxy, align my timezone/locale/geo to match, then load a country-specific landing page.
Agent:
cloak_set_proxy(proxy="http://uk-proxy.example.com:8080")
cloak_set_timezone(timezone="Europe/London")
cloak_set_locale(locale="en-GB")
cloak_set_geolocation(fromProxyIp=true)
browser_navigate(url="https://example.com/uk")
5. 在测试前端时模拟 API 响应
You: While loading example.com, return a fake 500 to /api/orders so I can verify the error state.
Agent:
browser_route(pattern="**/api/orders", status=500, body='{"error":"simulated"}', contentType="application/json")
browser_navigate(url="https://example.com")
browser_take_screenshot()
browser_unroute(pattern="**/api/orders")
6. 导出存储状态,并在新会话中重放
Agent:
browser_storage_state(filename="/tmp/saas-state.json")
# …later, in a new ephemeral session…
browser_set_storage_state(filename="/tmp/saas-state.json")
browser_navigate(url="https://saas.example.com")
7. 运行 Playwright 跟踪以供人工审查
You: Trace this whole flow so I can replay it in Playwright Trace Viewer.
Agent:
browser_start_tracing(filename="/tmp/trace.zip", screenshots=true, snapshots=true)
# …agent runs the flow…
browser_stop_tracing()
You: open /tmp/trace.zip in Playwright Trace Viewer (https://trace.playwright.dev)
安全模型
在任何存有生产凭据的机器上部署之前,请先阅读本文。
简要说明
| 资产 | 信任边界 |
|---|---|
cloak-browser-mcp 源代码(此仓库) | MIT 许可,公开,可通过阅读进行审计。 |
cloakbrowser npm 包 | 信任 CloakHQ 维护者和 npm registry。 |
| CloakBrowser Chromium 二进制文件 | 首次使用时从 cloakbrowser.dev 下载。由上游封装程序验证 SHA-256。根据许可,该二进制文件为闭源。 |
| 你的环境变量 / Keychain / shell 历史记录 | MCP 服务会继承你的进程环境。除非你信任供应链,否则不要在生产凭据可见的环境中运行。 |
此软件包引入的威胁
1. 供应链遭到入侵
安装或运行时会引入三个软件包:@modelcontextprotocol/sdk、playwright-core 和 cloakbrowser,以及其下载的 Chromium 二进制文件。如果 CloakHQ 的 npm 发布令牌或 cloakbrowser.dev 遭到入侵,攻击者就可能推送在你的用户账户下运行的恶意二进制文件。
缓解措施:
- 固定使用已知安全的
cloakbrowser版本。 - 将
CLOAKBROWSER_BINARY_PATH设置为经过审计的二进制文件。 - 保持
CLOAKBROWSER_SKIP_CHECKSUM为默认值(false)。 - 审计
~/.cloakbrowser/及你使用的任何--profile-dir。
2. Agent 驱动的浏览器导航
默认情况下,browser_navigate 接受任何 URL。LLM Agent 可能受到提示词注入攻击,被诱导导航到恶意网站。
缓解措施:
--allowed-domains <csv>(支持*.example.com)。--blocked-domains <csv>(优先检查)。- 使用专用的临时
--profile-dir,不要使用真实的浏览器配置文件。 - 使用
--max-pages <n>限制标签页数量。
3. 任意 JS 执行
browser_evaluate— 在页面沙箱中运行 JS。无法读取你的本地文件系统。始终可用。browser_run_code_unsafe— 在此 Node.js 服务进程中运行 JS。可以执行 Node 能执行的任何操作。需要双重明确授权:必须同时设置--caps config和--enable-unsafe-eval。
**缓解措施:**切勿在含有生产凭据环境变量的机器上同时使用 --enable-unsafe-eval。
4. 文件系统访问范围
browser_file_upload 和 browser_drop 可以附加你有读取权限的任何文件。使用 --upload-allow-dir <path> 限制访问范围。
写入方面:browser_take_screenshot --saveAs、browser_pdf_save、browser_storage_state 和 browser_start_tracing 会在 Agent 指定的路径写入文件。如果不希望发生这种情况,请省略 --caps pdf / storage / devtools。
5. 持久化配置文件泄露
--profile-dir 会累积 Cookie/localStorage/IndexedDB。如果同步到云存储,那么通过 Agent 登录过的每个网站都可能被拥有该同步令牌的任何人访问。默认路径 ~/.cloak-browser-mcp/profiles/<name> 位于常见云同步目录之外。
6. 提示词注入导致数据外泄
恶意页面可能通过提示词注入,诱导 Agent 使用被盗状态导航到其他位置,或将 DOM 中的秘密通过 POST 请求发送出去。这是 LLM 问题,不是 MCP 问题。
- 每项任务使用独立会话 — 不相关的任务之间调用
browser_close。 - 处理敏感流程时,优先使用临时配置文件,而非持久化配置文件。
- 如果任务涉及任何已通过身份验证的内容,请审查 Agent 的工具调用。
7. 网络出站流量
| 调用 | 目标 | 时机 |
|---|---|---|
| CloakBrowser 二进制文件下载 | cloakbrowser.dev(通过 CLOAKBROWSER_DOWNLOAD_URL 覆盖) | 安装后首次使用时 |
| 浏览器流量 | Agent 导航到的任意位置 | 始终 |
cloak_set_geolocation --fromProxyIp | ipapi.co/json/ | 仅在明确调用时 |
此封装程序不会回连,也不会收集遥测数据。
推荐的部署配置
“紧凑”(敏感机器——持有生产凭据):
--caps network,storage,pdf
--profile-dir /Users/me/.cloak-browser-mcp/profiles/scoped
--allowed-domains *.target.com
--upload-allow-dir /tmp/cloak-uploads
--max-pages 5
不使用 --enable-unsafe-eval。不启用 vision 功能(通过 xy 点击可绕过允许列表)。
“开放”(研究/个人浏览):
--caps all
--humanize
--max-pages 20
“不受信任”(你还不完全信任上游二进制文件)——在 Docker 容器中运行,或使用全新的 macOS 用户帐户运行,且不授予 Keychain 访问权限,也不挂载任何 .env 文件。
报告漏洞
如果你在 cloak-browser-mcp 中发现安全问题(而不是上游 cloakbrowser 软件包或其二进制文件中的问题),请在 https://github.com/devinwang/cloak-browser-mcp/security/advisories/new 提交私密安全公告。
对于上游 CloakBrowser 中的问题,请访问:https://github.com/CloakHQ/CloakBrowser/security/advisories/new。
更新日志
[0.2.0] - 2026-10-21
- 将
cloakbrowser从 0.3.x 升级到 0.6.3。 新版本新增了 Pro 许可、发布渠道和签名下载验证。服务使用的功能均未移除。没有新增 MCP 工具;工具数量仍为 80。 - 修复:库的日志行可能会破坏 stdio 流。
cloakbrowser会使用console.info报告某些事件(例如代理凭据中特殊字符的自动编码),而 Node 会将其写入 stdout;MCP 客户端在该流中只接受 JSON-RPC。现在服务运行时会将console.log、console.info和console.debug重定向到 stderr。 - Node 要求现在为
^20.19.0 || >=22.12.0(原先声明为>=18)。CloakBrowser 0.3.30 已要求 Node 20 或更高版本,而 0.6.x 需要 20.19 或更高版本。CI 不再测试 Node 18。 - 新增 6 个工具,以匹配 Playwright MCP 0.0.83(80 → 86):
browser_find— 在快照中搜索文本或正则表达式。browser_emulate_media— 配色方案、减少动态效果、强制颜色、对比度、媒体类型。null会清除覆盖设置。browser_video_show_actions/browser_video_hide_actions(devtools)— 在录制或屏幕录制期间为页面上的操作添加注释。browser_start_recording/browser_stop_recording(devtools)— 录制用户在浏览器中的操作,并以 Playwright 代码的形式返回。
- 不提供
browser_annotate:它会启动 Playwright 的内部仪表板进程,并且需要有人在页面上绘制。 playwright-core的最低版本要求提高至^1.61.0,这是首个支持page.screencast.showActions()的版本;解析后的版本从 1.60.0 升至 1.64.1。- 输入 schema 现在会将可为空参数声明为
{ oneOf: [<type>, null] }(转换器以前会丢弃 null),这是browser_emulate_media所需的。 - 在
package.json中添加了mcpName,并为官方 MCP Registry 添加了server.json,其中包含可选的CLOAKBROWSER_LICENSE_KEY变量。
[0.1.4] - 2026-08-23
- 修复:不带
target的browser_evaluate总是失败。 函数曾以字符串表达式的形式传给 Playwright,因此返回的是函数对象而不是函数结果;该对象会被序列化为undefined,导致 MCP 结果验证失败。现在会调用该函数;如果函数正常返回undefined,则会报告字符串"undefined"。
[0.1.3] - 2026-08-23
- 修复:浏览器启动失败后无法重试。 被拒绝的启动 Promise 会被缓存并不断重新等待,因此一次临时错误就会迫使进程重启。现在启动失败时会清除该 Promise。
- 错误信息更清晰。 占用配置文件目录的旧 CloakBrowser 进程以前会导致显示“No active page”。现在新增了
NO_BROWSER错误(BrowserNotLaunchedError),其中包含底层启动错误和查找残留进程的命令;对于未知标签页 ID,还新增了TAB_NOT_FOUND错误。NoActivePageError不再提示调用方运行当前失败的调用。
[0.1.2] - 2026-08-03
- 行为没有变化。仅调整发布流水线:改为通过 npm 可信发布(OIDC) 发布,而不再使用
NPM_TOKEN密钥。长期有效的令牌会悄无声息地过期,而 npm 遇到未经授权的发布请求时会返回404 Not Found - PUT——这看起来像是软件包不存在,而不是身份验证失败。OIDC 不存在过期问题。 - 从
actions/setup-node中移除了registry-url:它会写入一个包含_authToken=${NODE_AUTH_TOKEN}的.npmrc,而在未提供令牌时,会将 NODE_AUTH_TOKEN 导出为字面占位符XXXXX-XXXXX-XXXXX-XXXXX,导致 npm 使用无效令牌进行身份验证,而不是回退到 OIDC。 - 发布任务会在发布前将 npm 固定到
11.x系列——OIDC 需要 >= 11.5.1,而 Node 22 仍捆绑 10.x。可信发布会自动生成来源证明,因此移除了显式的--provenance标志;证明覆盖范围保持不变。
[0.1.1] - 2026-05-24
- 破坏性变更(用户体验):默认模式现在为有头模式(显示浏览器),不再是无头模式。交互式 MCP 服务应让用户看到 Agent 的操作过程。批处理或 CI 场景请显式传入
--headless。Smithery 的默认设置也已相应调整。
[0.1.0] - 2026-05-24
- 初始版本。约 62 个由 CloakHQ/CloakBrowser 提供支持的 MCP 工具,涵盖完整的 Playwright-MCP 功能对等,以及 Cloak 独有的隐身、配置文件、审计和二进制文件管理功能。
- CLI:
--caps、--profile-dir、--headless/--headed、--proxy、--timezone、--locale、--user-agent、--viewport、--geoip、--humanize、--fingerprint-seed、--allowed-domains、--blocked-domains、--enable-unsafe-eval、--upload-allow-dir、--download-dir、--max-pages、--self-test。 - 提供 Smithery YAML,支持一键集成。
- 采用 MIT 许可的封装代码;上游 CloakBrowser Chromium 二进制文件为专有软件,可免费使用,但禁止再分发。
许可证
- 封装代码:MIT(本软件包)。
- CloakBrowser Chromium 二进制文件:专有软件,可免费使用,但不得再分发。请参阅 https://github.com/CloakHQ/CloakBrowser/blob/main/BINARY-LICENSE.md。
致谢
- CloakHQ/CloakBrowser — 实际执行工作的定制 Chromium。
- @playwright/mcp — 本服务的工具命名和以无障碍树为先的设计深受其启发。
- @modelcontextprotocol/sdk — MCP 基础设施。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。