Public Browser 是一个 MCP 服务器,用于让 Claude Code、Cursor 以及任何兼容 MCP 的客户端驱动 Chrome 浏览器。它直接通过 Chrome DevTools Protocol(CDP)与 Chrome 通信,不依赖 Playwright、扩展桥接,也不需要为每一步执行 shell 命令。安装只需一条命令,零配置。
主要能力
- 更少的 token 消耗:每个工具调用都会让模型重新读取此前的对话,因此会话总 token 量才是实际成本。在基准测试页面上,Public Browser 3.0 五次运行的中位 token 为 3.0M,而 agent-browser 需要 4.5M。其优势来自更少、更密集的步骤:run_plan 可在一次调用中执行多个带变量和条件的动作;自 3.0 起,响应减少重复,差异只显示变化内容,父行已显示的文本不再重复,提示每会话只出现一次。
- 显式失败而非静默失败:匹配多个元素的 CSS 选择器不会执行任何操作,而是返回候选元素及其引用。引用按标签页保存且从不复用,因此来自已离开页面的引用会报告 stale ref,而不是点击当前占用该编号的节点。拖拽无反应时返回 Drag not confirmed,点击打开新标签页时会指明新标签页。
- 支持嵌套跨域 iframe 和 shadow DOM:点击可以到达位于另一个跨域 iframe 内部的跨域 iframe 中的元素;开放和封闭的 shadow root 也可读取。
- 两种无 LLM 接入方式:Node 库(createSession())和 Python 客户端(pip install publicbrowser)运行与 MCP 服务器相同的工具处理器。
使用方式 在 Claude Code 中安装:一条命令即可全局安装到所有项目。安装后必须完全退出并重新打开 Claude Code,/mcp reconnect 不够,因为 Claude Code 只在会话开始时读取 mcpServers 配置并缓存。重启后首次工具调用会自动启动可见的 Chrome,无需 headless 或端口设置。若要启用并行 Python Script API 访问,可在参数中添加 --script。 在 Cursor 中安装:添加到 ~/.cursor/mcp.json。 在 Cline 中安装:添加到 cline_mcp_settings.json。 其他 MCP 客户端:任何支持 stdio MCP 服务器的客户端,使用 npx -y public-browser@latest 且不带参数。
Chrome 配置文件 默认情况下,Public Browser 使用全新的临时配置文件启动 Chrome,没有 cookie、登录信息或扩展。也可以使用自己的 Chrome 配置文件启动。Chrome 拒绝在其默认数据目录上进行远程控制,因此 Public Browser 会创建一个轻量包装目录,其中包含指向配置文件文件夹的符号链接,并在该目录上启动 Chrome。包装目录在 Public Browser 关闭 Chrome 时删除,崩溃遗留的包装目录会在下次启动时删除;配置文件文件夹本身永远不会被删除。书签、历史记录、扩展和 Chrome 自身的 Google 登录会保留,因此 Google 站点处于登录状态。其他站点在 macOS 上不会保留登录状态:当前 Chrome 不会通过符号链接加载配置文件的 cookie,站点会以登出状态开始,会话期间进行的登录也不会保存到配置文件。Linux 和 Windows 未测试。
无开放调试端口 真实配置文件通过 --remote-debugging-pipe 驱动:CDP 通过只有 Public Browser 持有的管道运行,没有 TCP 端口监听,其他程序无法接管浏览器。代价是 --attach 和 Script API 的逃生舱(page.cdp)在真实配置文件下不可用。如果 Chrome 拒绝管道,Public Browser 会用随机调试端口(从不是 9222)重启,并在 stderr 和下一次工具响应中说明。
如果 Chrome 已经打开 Public Browser 通过锁文件检查检测到这一点。如果 Chrome 已启用远程调试,则通过 CDP 附加。如果没有,则显示明确错误,要求先关闭 Chrome。一个配置文件一次只能在一个 Public Browser 中打开:第二个实例会停止并报错,指出持有该配置文件的 Chrome 的 PID。
Script API(Python) 第二种使用方式:从 Python 进行确定性浏览器自动化,无需 LLM 参与。脚本使用与 MCP 服务器相同的工具实现(Shared Core),因此对 click、navigate、fill_form 等的每一项改进都会自动惠及脚本。MCP 服务器处理 AI 驱动的工作流;Script API 用于你自己编写的可重复脚本。Chrome.connect() 会自动通过本地 public-browser 二进制文件或 npx 回退将 Public Browser 服务器作为子进程启动,无需手动启动 Chrome 或设置端口。脚本向端口 9223 上的 Public Browser 服务器发送 HTTP 请求。服务器执行与 MCP 服务器完全相同的工具处理器——一个代码库、一个测试套件(2,700+ 测试)、两条访问路径。Script API 只应答携带其密钥的请求(Authorization: Bearer <key>),因此网页和其他用户账户下运行的程序无法通过它驱动浏览器。
适用场景
- 让 Claude Code、Cursor 等 AI 编码助手通过 MCP 驱动 Chrome 完成网页操作、表单填写、数据提取等任务。
- 为决策模型(如 Jev)提供浏览器侧支持:Jev 接收程序状态和有界选项集,返回一个带校准概率的类型化选择,无法生成自由文本,因此不会虚构不存在的选择器。Public Browser 为其提供菜单式选项。
- 使用 Python 编写确定性、可重复的浏览器自动化脚本,无需 LLM。
- 需要处理嵌套跨域 iframe、shadow DOM 等复杂页面结构的场景。
限制
- 真实配置文件模式下,--attach 和 Script API 逃生舱不可用。
- 在 macOS 上,使用真实配置文件时其他站点的登录状态不会保留。
- Linux 和 Windows 上的配置文件行为未测试。
- 一个配置文件一次只能在一个 Public Browser 实例中打开。
- 项目采用 MIT 许可,无付费层级。
- 基准测试数据来自特定环境(Claude Code 2.1.281、Claude Opus 5、Chrome 153,2026-09-23/24),测试页面为自有页面。