配置¶
使用上游 PLAYWRIGHT_MCP_* 变量来实现 Playwright MCP 行为。 仅将 CLOAK_PLAYWRIGHT_MCP_* 用于 Cloak 特有的桥接行为。
旧版 CLOAKBROWSER_MCP_* 变量已不被支持。 生成的 CLI 参考 是桥接 CLI 标志及其对应环境变量的权威列表。
桥接选项¶
| Variable | Default | Description |
|---|---|---|
CLOAK_PLAYWRIGHT_MCP_TRANSPORT | stdio | Bridge transport: stdio or streamable-http. |
CLOAK_PLAYWRIGHT_MCP_HTTP_PROTOCOL | http | Streamable HTTP listener protocol: http or https. |
CLOAK_PLAYWRIGHT_MCP_HTTP_HOST | 127.0.0.1 | Streamable HTTP bind host. |
CLOAK_PLAYWRIGHT_MCP_HTTP_PORT | 3000 | Streamable HTTP bind port. Use 0 for an ephemeral port in tests. |
CLOAK_PLAYWRIGHT_MCP_HTTP_ENDPOINT | /mcp | Streamable HTTP endpoint path. /healthz and /readyz are reserved for probes. |
CLOAK_PLAYWRIGHT_MCP_HTTP_AUTH_TOKEN | unset | Optional Bearer token required on Streamable HTTP requests. |
CLOAK_PLAYWRIGHT_MCP_HTTP_SESSION_BACKEND | memory | Session metadata backend. Only memory is implemented in this release. |
CLOAK_PLAYWRIGHT_MCP_HTTP_SESSION_IDLE_TTL_MS | 3600000 | Idle TTL for Streamable HTTP sessions. Expired sessions dispose their bridge and upstream child process. |
CLOAK_PLAYWRIGHT_MCP_HTTP_SESSION_MAX | 32 | Maximum active Streamable HTTP sessions in one process. |
CLOAK_PLAYWRIGHT_MCP_HTTPS_CERT | unset | TLS certificate PEM path for HTTPS Streamable HTTP. |
CLOAK_PLAYWRIGHT_MCP_HTTPS_KEY | unset | TLS private key PEM path for HTTPS Streamable HTTP. |
CLOAK_PLAYWRIGHT_MCP_HTTPS_PFX | unset | TLS PFX/PKCS12 path for HTTPS Streamable HTTP. |
CLOAK_PLAYWRIGHT_MCP_HTTPS_PASSPHRASE | unset | Passphrase for an encrypted HTTPS key or PFX. |
CLOAK_PLAYWRIGHT_MCP_LOG_LEVEL | info | Streamable HTTP operational log level: trace, debug, info, warn, error, fatal, or silent. |
PLAYWRIGHT_MCP_PROXY_SERVER | unset | Upstream Playwright MCP proxy server. Used as the GeoIP source when matching is enabled. |
PLAYWRIGHT_MCP_PROXY_BYPASS | unset | Upstream proxy bypass list for hosts that should not use PLAYWRIGHT_MCP_PROXY_SERVER. |
CLOAK_PLAYWRIGHT_MCP_GEOIP_PROXY_MATCH | false | Resolves PLAYWRIGHT_MCP_PROXY_SERVER GeoIP and matches CloakBrowser timezone and locale fingerprint flags to that proxy location. |
CLOAK_PLAYWRIGHT_MCP_HUMANIZE | false | Enables CloakBrowser human-like mouse, keyboard, and scroll behavior. |
CLOAK_PLAYWRIGHT_MCP_HUMAN_PRESET | default | CloakBrowser human behavior preset: default or careful. Used only when humanize is enabled. |
CLOAK_PLAYWRIGHT_MCP_RELEASE_CHANNEL | stable | CloakBrowser 二进制文件发布通道:stable 或仅限 Pro 的 preview。 |
CLOAKBROWSER_BINARY_PATH | unset | 自定义 CloakBrowser 可执行文件的路径。CLI 选项 --binary-path 优先。 |
CLOAKBROWSER_VERSION | unset | 未选择自定义可执行文件时传递给 CloakBrowser 缓存解析器的版本固定。 |
PLAYWRIGHT_MCP_BROWSER_ENGINE | cloak | cloak uses the CloakBrowser binary. playwright skips Cloak-specific executable replacement. |
PLAYWRIGHT_MCP_HEADLESS | true | Runs Chromium in headless mode. |
PLAYWRIGHT_MCP_OUTPUT_DIR | .playwright-mcp | Artifact directory for npm. Docker sets /data. |
PLAYWRIGHT_MCP_CODEGEN | typescript | 代码生成目标语言:typescript、python、java、csharp 或 none。桥接会验证该值,并将 codegen 写入生成的 Playwright MCP 配置。 |
PLAYWRIGHT_MCP_SNAPSHOT_BOXES | false | true 或 false;在快照中以 [box=x,y,width,height] 包含每个元素的边界框。桥接会验证该值,并将 snapshot.boxes 写入生成的 Playwright MCP 配置。 |
PLAYWRIGHT_MCP_TIMEOUT_SETTLE | 500 | 操作后等待触发工作稳定的上游时间(毫秒)。直接转发给 Playwright MCP。 |
PLAYWRIGHT_MCP_TIMEOUT_ACTION | 5000 | Default action timeout in milliseconds. |
PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION | 60000 | Default navigation timeout in milliseconds. |
PLAYWRIGHT_MCP_VIEWPORT_SIZE | upstream default | Browser viewport in WIDTHxHEIGHT format. |
PLAYWRIGHT_MCP_USER_DATA_DIR | unset | 持久化 Chromium 配置文件目录。桥接器会将其解析为绝对路径,在缺失时创建它,验证其可写,并写入生成的 browser.userDataDir。 |
CLOAK_PLAYWRIGHT_MCP_CONTEXT_OPTIONS | unset | 包含已验证上下文选项的 JSON 对象。支持的字段列在下方。 |
CLOAK_PLAYWRIGHT_MCP_EXTENSION_PATHS | unset | 现有 Chrome 扩展目录的 JSON 数组或逗号分隔列表。需要 PLAYWRIGHT_MCP_USER_DATA_DIR。对于 Windows 路径或包含逗号的路径,请使用 JSON 数组。 |
CLOAK_PLAYWRIGHT_MCP_CONSOLE_FALLBACK | true | Enables the console message compatibility patch. |
CLOAK_PLAYWRIGHT_MCP_STEALTH_ARGS | true | Adds CloakBrowser default stealth launch arguments. |
CLOAK_PLAYWRIGHT_MCP_EXTRA_ARGS | unset | Comma-separated or JSON array of extra Chromium arguments. |
CLOAK_PLAYWRIGHT_MCP_NO_SANDBOX | true | Adds --no-sandbox and disables Chromium sandboxing. |
CloakBrowser 许可证与 GitHub 登录¶
许可证设置使用上游 CloakBrowser CLI;cloakbrowser-mcp 不会添加登录或退出命令:
login 可接受付费密钥,也可启动 GitHub 登录以获取免费层密钥。验证后的密钥存储在 ~/.cloakbrowser/license.key 中;logout 会删除该文件。info 会报告当前许可证 层级;对于 Pro 许可证,还会报告活动会话数。
也可以在 MCP 服务器环境中设置 CLOAKBROWSER_LICENSE_KEY。桥接器会将该变量转发给 上游/浏览器子进程,但不会记录它。当 CLOAKBROWSER_CACHE_DIR 指向包含 license.key 的自定义缓存时,CloakBrowser 会解析密钥,而桥接器只会从生成的浏览器 环境中转发该解析后的密钥。其他生成的环境条目不会被复制。
如果 CloakBrowser 拒绝提供的许可证密钥、无法验证该密钥或无法连接许可证 服务器,启动会因明确的 CloakBrowser 错误而失败。桥接会保留该错误;它不会 掩盖错误,也不会静默切换到其他浏览器或许可证级别。
已管理 CDP¶
托管的 Chrome 开发者工具协议 (CDP) 访问是需要明确选择加入的。它公开了 由 MCP 通过具备能力的方式控制的相同 Chromium 浏览器版本 发现 URL。仅配置端口池并不会启用 CDP。
| CLI 选项 | 环境变量 | 默认 | 目的 |
|---|---|---|---|
--cdp-enabled, --no-cdp-enabled | CLOAK_PLAYWRIGHT_MCP_CDP_ENABLED | false | 设置 stdio 值和 Streamable HTTP 会话默认值。 |
--cdp-port-range <port\|start-end> | CLOAK_PLAYWRIGHT_MCP_CDP_PORT_RANGE | 未设置 | 配置进程本地外部代理端口池。每个启用的会话租用一个端口。 |
--cdp-host <host> | CLOAK_PLAYWRIGHT_MCP_CDP_HOST | 127.0.0.1 | 绑定托管的 CDP 代理。 |
--cdp-allow-remote, --no-cdp-allow-remote | CLOAK_PLAYWRIGHT_MCP_CDP_ALLOW_REMOTE | false | 允许或拒绝非回环绑定。 |
--cdp-advertised-host <host> | CLOAK_PLAYWRIGHT_MCP_CDP_ADVERTISED_HOST | 未设置 | 在发现 URL 中放置一个可外部访问的具体主机。通配符绑定需要此项。 |
--cdp-advertised-scheme <http\|https> | CLOAK_PLAYWRIGHT_MCP_CDP_ADVERTISED_SCHEME | http | 发布 http/ws 或 https/wss URL。这不会启用 TLS。 |
每个 CLI 值仅覆盖其对应的环境变量。特别是, --no-cdp-enabled 覆盖 CLOAK_PLAYWRIGHT_MCP_CDP_ENABLED=true,并且 --no-cdp-allow-remote 覆盖 CLOAK_PLAYWRIGHT_MCP_CDP_ALLOW_REMOTE=true。 启用的会话在其上游子开始之前,如果没有端口池,将被拒绝。 一个有效的假值不会创建监听器、端口租赁或能力。
对于 stdio,该进程值直接适用:
对于 Streamable HTTP,经过身份验证的平坦 cdpEnabled 布尔值 initialize 元数据覆盖该会话的进程默认设置。省略 字段继承流程值。这些示例明确选择了一个会话并 另一个出:
一个启用 CDP 的 HTTP 会话拥有一个外部端口租用。已禁用的会话没有。 消耗池。分配是进程本地的,选择未租用的最低候选项, 如果所选的外部端口已被占用,则会立即使该会话失败。 关闭会话以释放端口,或在池耗尽时配置更大的范围。
从 cloakbrowser_bridge_info 检索当前的 URL,然后传递它的 structuredContent.cdp.discoveryUrl 到像 Playwright 的 CDP 客户 chromium.connectOverCDP()。将那个 URL 视为凭证:它包含一个随机值 每代能力,并且在浏览器更换后会变得过时。托管的 CDP 是 不是 Playwright 服务器端点。chromium.connect() 和当前的 Open WebUI 不支持 PLAYWRIGHT_WS_URL 流。
--cdp-advertised-scheme https 发布 https 发现和 wss WebSocket 链接 仅此而已。该桥不为受管 CDP 提供 TLS:它的外部监听器和 Chromium 保持明文 HTTP/WebSocket。必须有运营商拥有的 TLS 终端器 在相同的广告租用端口上监听,保留广告的 Host 和 Origin 授权,并将其一对一地转发给该会话的明文监听器。
CDP 启用从 MCP 初始化期间开始 Chromium,以便所有权和外部 可以验证就绪情况。将 MCP 客户端初始化超时配置为至少 60 秒。当启用管理的 CDP 时,由用户提供的 CLOAK_PLAYWRIGHT_MCP_EXTRA_ARGS 不得包含 --remote-debugging-port, --remote-debugging-address,或 --remote-debugging-pipe(包括 = 形式)。 Playwright 自身的内部 --remote-debugging-pipe 仍然保持启用状态,同时 由网桥管理的回环 TCP 端点。
请参阅 工具, Docker, 安全,以及 架构 用于发现状态、部署, 限制和重启行为。
CloakBrowser 发布通道¶
CLOAK_PLAYWRIGHT_MCP_RELEASE_CHANNEL 选择 CloakBrowser 二进制文件的发布通道。默认值为 stable。preview 请求 Pro 浏览器预览构建,且仅适用于 Pro 许可证。显式固定的 CLOAKBROWSER_VERSION 优先。如果平台没有可用的 Preview,CloakBrowser 会回退到 Stable。
发布通道在桥接进程启动时选定。它适用于所有 Streamable HTTP 会话,且不能在 initialize 元数据中设置或覆盖。请重启桥接进程以更改它。
自定义 CloakBrowser 二进制文件¶
--binary-path <path> 为当前桥接进程选择自定义的 CloakBrowser 可执行文件。 CLOAKBROWSER_BINARY_PATH 为基于环境的部署提供相同设置;CLI 选项优先。桥接会 解析该路径,要求它是可读的普通文件,并将解析后的路径写入生成的 Playwright MCP 配置的 browser.launchOptions.executablePath。
桥接不会下载或更新自定义可执行文件。未选择自定义路径时,可使用 CLOAKBROWSER_VERSION 固定由 CloakBrowser 管理的二进制版本。
对于 Streamable HTTP,所选二进制文件属于桥接进程,并由其创建的每个 MCP 会话 使用。initialize 元数据不能选择或覆盖可执行文件路径;需要不同二进制文件的 会话应运行单独的桥接进程。
当所选二进制文件实现 document.modelContext 时,上游 Playwright MCP 可在页面快照后添加 webmcp_<page-tool> 形式的工具。它会发送 tools/list_changed;桥接会转发该通知和更新后的工具列表。每个动态工具的名称和模式由页面定义。
GeoIP 代理匹配¶
将 CLOAK_PLAYWRIGHT_MCP_GEOIP_PROXY_MATCH=true 与 PLAYWRIGHT_MCP_PROXY_SERVER 一起设置,以根据代理出口位置推导 CloakBrowser 的 时区、语言和区域设置指纹标志。对于受支持的二进制文件,CloakBrowser 会选择原生 URL 内联身份验证;对于较旧的二进制文件,则保留 Playwright 代理对象作为回退。
有关配置示例、运行时 可流式传输的 HTTP 代理元数据、用例、优先级规则和限制,请参阅 GeoIP 代理匹配。
匹配采用 fail-closed 行为:如果 CloakBrowser 无法解析代理出口 IP、GeoIP 数据库、时区或区域设置,浏览器不会以部分匹配的指纹启动。GeoIP 解析最长为 20 秒;首次下载离线 GeoIP 数据库独立进行,可能需要更长时间。
拟人化的输入行为¶
将 CLOAK_PLAYWRIGHT_MCP_HUMANIZE=true 设置为启用 CloakBrowser 的类人 鼠标、键盘和滚动层,用于页面交互。 该桥接器通过 Playwright MCP 的页面初始化钩子应用此设置,因此上游浏览器工具 的架构保持不变。
有关配置示例、 运行时可流式传输的 HTTP 元数据、用例及限制,请参阅 人性化输入行为。
Chrome 扩展¶
Chrome 扩展会在浏览器启动时加载,因此请在启动桥接器之前,或在创建 Streamable HTTP 会话之前完成配置。扩展必须是已解压的目录,并且需要 持久化配置文件:
PLAYWRIGHT_MCP_USER_DATA_DIR="$PWD/.profiles/default" \
CLOAK_PLAYWRIGHT_MCP_EXTENSION_PATHS='["/absolute/path/to/my-extension"]' \
npx -y cloakbrowser-mcp@latest
对于 Streamable HTTP,请在 initialize 元数据中传入配置文件目录和扩展 目录:
{
"params": {
"_meta": {
"io.github.swimmwatch/cloakbrowser-mcp": {
"userDataDir": "/absolute/path/to/profile",
"extensionPaths": ["/absolute/path/to/my-extension"]
}
}
}
}
更改扩展文件或扩展路径后,请重启桥接器或创建新的 HTTP 会话。当路径包含 逗号、传入多个扩展,或使用带盘符的 Windows 路径时,请为 CLOAK_PLAYWRIGHT_MCP_EXTENSION_PATHS 使用 JSON 数组。
Playwright Extension 连接模式¶
此模式通过已安装在 Chrome 或 Edge 配置文件中的官方 Playwright Extension 连接,与通过 CLOAK_PLAYWRIGHT_MCP_EXTENSION_PATHS 加载解压扩展不同。对于 stdio,请设置 PLAYWRIGHT_MCP_EXTENSION=true、PLAYWRIGHT_MCP_EXTENSION_TOKEN、PLAYWRIGHT_MCP_USER_DATA_DIR,并可设置仅含一个相对路径段的 PLAYWRIGHT_MCP_PROFILE_DIR_NAME。在 Streamable HTTP 中,extensionMode、profileDirName 和 userDataDir 元数据覆盖进程值,但 token 只能来自进程环境。并行会话必须使用不同的 userDataDir;launch、CDP、proxy、GeoIP、humanization、context 和 extensionPaths 配置与此模式不兼容。
可流式传输的 HTTP 运行时元数据¶
支持流式传输的 HTTP 客户端可以通过在 initialize 请求中添加 特定于桥接器的元数据,为每个 MCP 会话选择相应的运行时选项:
{
"params": {
"_meta": {
"io.github.swimmwatch/cloakbrowser-mcp": {
"proxyServer": "http://user:pass@proxy.example:8080",
"proxyBypass": ".internal,localhost",
"geoipProxyMatch": true,
"headless": false,
"humanize": true,
"humanPreset": "careful",
"userDataDir": "/absolute/path/to/profile",
"contextOptions": {
"viewport": { "width": 1280, "height": 720 },
"locale": "en-US",
"timezoneId": "America/New_York"
},
"extensionPaths": ["/absolute/path/to/extension"]
}
}
}
}
proxyServer 在该 HTTP 会话中覆盖了 PLAYWRIGHT_MCP_PROXY_SERVER。 proxyBypass 仅在存在 proxyServer 时,才覆盖 PLAYWRIGHT_MCP_PROXY_BYPASS,但仅当 proxyServer 存在时 才生效。 geoipProxyMatch 可在无需重启 MCP 服务器的情况下, 启用或禁用该会话的 GeoIP 匹配功能。现有会话将保留其初始代理; 需创建新的 HTTP 会话才能切换位置。
humanize 可以为该会话启用或禁用人性化输入行为, 而不会影响其他会话。 humanPreset 可为该会话选择 default 或 careful ,但本身不会启用人性化行为。 现有 会话将保留在 initialize 期间捕获的行为。
在 Docker 中,headless: false 会按需启动私有虚拟显示器。在镜像外,有头会话仍需要可用的显示环境。
userDataDir 为该会话启用持久化 Chromium 配置文件,并覆盖 PLAYWRIGHT_MCP_USER_DATA_DIR。桥接器会将目录解析为平台原生绝对路径, 在缺失时创建它,验证其可写,并写入生成的 browser.userDataDir。 持久化配置文件会禁用该会话默认的 Streamable HTTP 隔离配置文件。桥接器会 拒绝同一进程内重复的活动配置文件目录;跨进程配置文件冲突仍由 Chromium/Playwright 报错。
contextOptions 会经过验证,并在 CLOAK_PLAYWRIGHT_MCP_CONTEXT_OPTIONS 之上进行浅合并;嵌套对象会整体替换。支持的字段为 userAgent、 viewport、locale、timezoneId、colorScheme、permissions、 geolocation、extraHTTPHeaders、httpCredentials、ignoreHTTPSErrors、 offline、deviceScaleFactor、isMobile 和 hasTouch。本版本不支持任意 传递 BrowserContextOptions。
extensionPaths 必须指向现有目录,并且需要持久化的 userDataDir。 桥接器会将扩展路径解析为平台原生绝对路径,传给 CloakBrowser,并把生成的 Chromium 参数 --load-extension 和 --disable-extensions-except 写入生成的 Playwright MCP 配置。
经过身份验证的 HTTP 代理凭据可以嵌入到 proxyServer 中,例如 http://user:pass@proxy.example:8080。对具有 URL 含义的凭据 字符进行百分比编码,例如 @、 :、/、 ?、 #,以及 %。
对于受支持的 CloakBrowser 二进制文件,经过身份验证的 HTTP 代理会使用原生 URL 内联身份验证,桥接器则会移除重复的 Playwright 代理对象。较旧的二进制文件会保留 Playwright 代理对象作为兼容性回退。
有关多地点质量保证模式,请参阅 GeoIP 代理匹配。 有关交互真实性模式,请参阅 人性化输入行为。
上游选项¶
该桥接器将 PLAYWRIGHT_MCP_* 的设置转发给上游的 Playwright MCP。其中包括以下上游选项:
PLAYWRIGHT_MCP_ALLOWED_ORIGINSPLAYWRIGHT_MCP_BLOCKED_ORIGINSPLAYWRIGHT_MCP_ALLOW_UNRESTRICTED_FILE_ACCESSPLAYWRIGHT_MCP_CAPSPLAYWRIGHT_MCP_CONSOLE_LEVELPLAYWRIGHT_MCP_IMAGE_RESPONSESPLAYWRIGHT_MCP_SNAPSHOT_MODEPLAYWRIGHT_MCP_STORAGE_STATE
有关完整的上游选项列表,请参阅上游 Playwright MCP 文档。
PLAYWRIGHT_MCP_CAPS=devtools 会由上游子进程继承,并启用该能力控制的 工具,无需桥接专用的 --caps 标志。
日志记录¶
可流式传输的 HTTP 模式会将易于人类阅读的启动和请求日志写入 stdout。Stdio 模式不会输出常规操作日志,因此 MCP JSON-RPC 的 stdout 保持协议纯净。命令行界面(CLI)启动时的致命错误仍会写入 stderr。
HTTPS¶
Streamable HTTP 默认使用本地 HTTP。若要选择直接 TLS,请使用 --http-protocol https 或 CLOAK_PLAYWRIGHT_MCP_HTTP_PROTOCOL=https 选择“直接 TLS”模式,然后提供证书/密钥对或 PFX 文件:
cloakbrowser-mcp --transport streamable-http \
--http-protocol https \
--https-cert ./cert.pem \
--https-key ./key.pem
对于外部或非回环暴露,请使用 HTTPS 并配合 --http-auth-token,或者在可信的反向代理上终止 TLS,该代理还应强制执行身份验证和网络访问控制。
可流式传输的 HTTP 会话¶
每个 Streamable HTTP MCP 会话都拥有自己的桥接运行时和上游 Playwright MCP 子进程。HTTP 会话使用隔离的浏览器配置文件运行上游 Playwright MCP,因此并发用户不会争夺同一个持久性 Chromium 配置文件。 内置的 memory 会话后端仅存储会话 ID、时间戳、过期时间和状态等元数据。 浏览器状态仍保留在活跃的上游子进程中,而相关资源仍由 PLAYWRIGHT_MCP_OUTPUT_DIR 控制。
对于水平扩展,请在负载均衡器后运行多个服务器副本,并使用以 mcp-session-id 头为键的粘性会话。 未来的 Redis、Postgres 或 SQLite 后端可以协调元数据和锁,但当拥有该会话的进程退出后,它们无法恢复正在运行的浏览器会话。
可流式传输的 HTTP 探针¶
当桥接器运行时,若使用 --transport streamable-http,它会在与 MCP 端点相同的主机和端口上暴露固定的探针端点:
GET /healthz返回进程健康状况元数据:status、version、transport,以及uptimeMs。GET /readyz返回就绪状态元数据和会话容量:sessions.active、sessions.pending、sessions.max以及sessions.available。
当会话容量可用时,就绪状态返回 HTTP 200,而当 503,而当 active + pending >= max 时则返回 active + pending >= max。 如果配置了 --http-auth-token 或 CLOAK_PLAYWRIGHT_MCP_HTTP_AUTH_TOKEN 已配置,则这两个探针都需要与 MCP 请求相同的 Authorization: Bearer ... 标头。 如果没有身份验证令牌,探针将在配置的 HTTP 绑定地址上保持开放状态。
更多实用路径¶
要在 upstream Playwright MCP 和本包之间选择,请查看对比。快速任务请使用操作示例:持久配置文件、扩展、reverse proxy、区域 QA、Claude Desktop、Codex CLI 和 CI 冒烟测试。