给 Agent 接入 Playwright MCP + CloakBrowser

不少 Agent 内置的 browser_* 工具,拿来读个网页还行,但需要交互登录、填表提交的时候就不好用了。Playwright MCP 是微软官方维护的 MCP server,工具覆盖面广。

问题是:裸 Playwright 碰上现代网站的 anti-bot 检测基本一碰就碎。navigator.webdriver = true、空插件列表、TLS 指纹不对——这些都是对着自动化浏览器来的。这就是为什么要换上 CloakBrowser。

CloakBrowser 是什么

CloakBrowser 是 C++ 层面对 Chromium 做的反检测 patch。不是 JS 层的 stealth 补丁(那种不改 TLS 指纹),而是 49+ 个源码级 patch。官方宣称 30/30 bot 检测测试通过,reCAPTCHA v3 评分 0.9(人类水平)。

安装 CloakBrowser

uv tool install cloakbrowser

# 如果需要设置环境变量
# uv tool update-shell

# 浏览器二进制文件被安装在 /home/<username>/.cloakbrowser
cloakbrowser install

# 检查安装的浏览器信息
cloakbrowser info

配置 MCP server

两个配置文件。第一个是 Playwright MCP 自己的,告诉它用 CloakBrowser 而不是内置 Chromium:

/home/<username>/.agents/mcp/playwright-mcp/config.json

第二个是 Agent 的 MCP 配置,这里以 hermes agent 为例。其他 Agent 工具参考对应配置指南。

/home/<username>/.hermes/config.yaml 中的 mcp_servers 段:

mcp_servers:
  playwright-cloak:
    enabled: true
    command: npx
    args:
      - "@playwright/mcp@latest"
      - "--config"
      - "/home/<username>/.agents/mcp/playwright-mcp/config.json"
      - "--headless"

可以在 args 加上 --caps=storage 开启 cookie 持久化相关工具。

Playwright MCP 有两种持久化机制:

  1. Persistent Profile Mode(默认)— 浏览器状态自动存到 /home/<username>/.cache/ms-playwright/mcp-chrome-profile/。但用 CloakBrowser 的 executablePath 时这个目录不会被创建,所以这条路走不通。

  2. --storage-state 显式加载/保存 — 用 --isolated 禁用 profile 模式,配合 --storage-state=<path> 在启动时加载之前保存的状态文件。

实际可行的配置:

mcp_servers:
  playwright-cloak:
    enabled: true
    command: npx
    args:
      - "@playwright/mcp@latest"
      - "--caps=storage"
      - "--config"
      - "/home/<username>/.hermes/playwright-mcp/config.json"
      - "--headless"
      - "--isolated"
      - "--storage-state=/home/<username>/.hermes/playwright-mcp/storage-state.json"

工作流程:

  1. 首次使用:手动登录目标网站
  2. 调用 browser_storage_state 保存到 storage-state.json
  3. 下次启动:MCP server 自动从 storage-state.json 恢复 cookies 和 localStorage

--caps=storage 额外提供的工具:

工具 作用
browser_storage_state 保存 cookies + localStorage 到文件
browser_set_storage_state 从文件恢复
browser_cookie_list/get/set/delete/clear 精细操作单个 cookie

相关链接