Skip to main content
Glama
babelcloud
by babelcloud
README.md
# Playwriter Browser MCP

一个独立的 MCP (Model Context Protocol) 服务,通过 [Playwriter](https://github.com/remorses/playwriter) Chrome 扩展连接用户的真实浏览器,提供 **37 个结构化浏览器自动化工具**。

**对于任意 Agent 来说,只需添加一个 MCP 配置,就能操控用户真实的 Chrome 浏览器(带完整登录态)—— 无需 `--remote-debugging-port`,不受 Chrome 136+ 安全限制。**

## 为什么需要这个项目

| 方案 | 能用真实 Profile | 结构化工具 | 不需要调试端口 |
|------|:-:|:-:|:-:|
| Playwright MCP (`@playwright/mcp`) | ❌ | ✅ 38 个工具 | ❌ |
| Playwriter | ✅ | ❌ 仅 1 个 `execute` | ✅ |
| **Browser MCP (本项目)** | **✅** | **✅ 37 个工具** | **✅** |

Browser MCP = Playwriter 的连接方式 + Playwright MCP 的工具生态。

## 架构

```
AI Agent (Claude Code / VisionClaw / ...)
   │ MCP Protocol (HTTP / SSE)
   ▼
┌──────────────────────────────────┐
│  Browser MCP Server (port 3280)  │
│                                  │
│  37 个结构化工具:                 │
│  ├── browser_navigate            │
│  ├── browser_snapshot            │
│  ├── browser_click               │
│  ├── browser_type                │
│  ├── browser_take_screenshot     │
│  ├── ... (共 37 个)              │
│                                  │
│  连接层:                          │
│  Playwriter API → connectOverCDP │
└──────────────┬───────────────────┘
               │ WebSocket
               ▼
┌──────────────────────────────────┐
│  Playwriter Relay (port 19988)   │
│  (已有的 relay 或自动启动)        │
└──────────────┬───────────────────┘
               │ chrome.debugger API
               ▼
┌──────────────────────────────────┐
│  Chrome 浏览器 (用户真实 Profile) │
│  ├── 已登录的网站                 │
│  ├── Cookies / Sessions          │
│  └── Playwriter 扩展 (已安装)    │
└──────────────────────────────────┘
```

## 快速开始

### 前置条件

1. **Chrome 浏览器** — 安装 [Playwriter 扩展](https://chromewebstore.google.com/detail/playwriter-mcp/jfeammnjpkecdekppnclgkkffahnhfhe)
2. **Node.js >= 18**
3. **Playwriter CLI** — `npm install -g playwriter`

### 启动

```bash
# 1. 安装依赖
npm install

# 2. 配置环境变量(可选)
cp .env.example .env

# 3. 启动
npm run dev
```

服务启动后,MCP 端点在 `http://localhost:3280/mcp`。

### 多 Profile 场景

如果 Chrome 登录了多个 Google 账号,需要指定连接哪个:

```bash
# 查看可用的 Profile
playwriter browser list

# 指定 Profile 启动
PLAYWRITER_EXTENSION_ID="profile:104623951740642372686" npm run dev
```

## MCP 工具列表 (37 个)

### 导航

| 工具 | 说明 |
|------|------|
| `browser_navigate` | 导航到 URL,返回页面快照 |
| `browser_navigate_back` | 返回上一页 |

### 快照与截图

| 工具 | 说明 |
|------|------|
| `browser_snapshot` | 获取页面 accessibility tree(带 `[ref]` 标记,用于后续交互) |
| `browser_take_screenshot` | 截图(支持 png/jpeg、全页、指定元素) |

### 输入操作

| 工具 | 说明 |
|------|------|
| `browser_click` | 点击元素(通过 ref 定位) |
| `browser_type` | 向元素输入文本 |
| `browser_press_key` | 按下键盘按键(Enter、Tab、Escape 等) |
| `browser_hover` | 鼠标悬停在元素上 |
| `browser_drag` | 拖拽元素到目标 |
| `browser_select_option` | 在下拉框中选择选项 |
| `browser_fill_form` | 批量填写表单(文本框、复选框、单选按钮) |

### 页面管理

| 工具 | 说明 |
|------|------|
| `browser_tabs` | 标签页管理(list / new / close / select) |
| `browser_close` | 关闭当前页面 |
| `browser_wait_for` | 等待文本出现/消失或指定时间 |
| `browser_resize` | 调整浏览器窗口大小 |

### 代码执行

| 工具 | 说明 |
|------|------|
| `browser_evaluate` | 在页面中执行 JavaScript |
| `browser_run_code` | 运行 Playwright 代码片段 |

### 观测

| 工具 | 说明 |
|------|------|
| `browser_console_messages` | 获取控制台日志 |
| `browser_network_requests` | 获取网络请求列表 |

### 文件与对话框

| 工具 | 说明 |
|------|------|
| `browser_file_upload` | 上传文件到 file input |
| `browser_handle_dialog` | 处理 alert/confirm/prompt 弹窗 |

### Vision(坐标操作)

| 工具 | 说明 |
|------|------|
| `browser_mouse_move_xy` | 移动鼠标到坐标 |
| `browser_mouse_click_xy` | 在坐标处点击 |
| `browser_mouse_drag_xy` | 从坐标 A 拖拽到坐标 B |
| `browser_mouse_down` | 按下鼠标按键 |
| `browser_mouse_up` | 释放鼠标按键 |
| `browser_mouse_wheel` | 滚动鼠标滚轮 |

### 测试验证

| 工具 | 说明 |
|------|------|
| `browser_generate_locator` | 生成 Playwright locator(用于编写测试) |
| `browser_verify_text_visible` | 验证文本在页面上可见 |
| `browser_verify_element_visible` | 验证元素可见 |
| `browser_verify_list_visible` | 验证列表包含指定项 |
| `browser_verify_value` | 验证元素的值 |

### PDF 与追踪

| 工具 | 说明 |
|------|------|
| `browser_pdf_save` | 将页面保存为 PDF |
| `browser_start_tracing` | 开始录制 Playwright trace |
| `browser_stop_tracing` | 停止录制并保存 trace 文件 |

### 其他

| 工具 | 说明 |
|------|------|
| `browser_install` | 安装 Chromium 浏览器二进制文件 |
| `browser_session` | 诊断工具:检查连接状态(**无需主动调用,连接是自动的**) |

## 接入方式

### 作为 HTTP MCP Server

```json
{
  "mcpServers": {
    "browser": {
      "type": "http",
      "url": "http://localhost:3280/mcp"
    }
  }
}
```

### 接入 VisionClaw

在 VisionClaw 的 `mcp-servers.json` 中添加上述配置即可。Agent 无需任何额外操作,直接调用 `browser_navigate` 等工具,连接会自动建立。

## 工作流程示例

AI 使用这套工具的典型流程:

```
1. browser_navigate({ url: "https://x.com" })
   → 自动连接浏览器,导航到 X,返回页面快照

2. browser_snapshot()
   → 获取 accessibility tree,包含 [ref] 标记

3. browser_click({ ref: "compose-btn" })
   → 点击发帖按钮

4. browser_type({ ref: "tweet-input", text: "Hello World!" })
   → 输入帖子内容

5. browser_click({ ref: "post-btn" })
   → 发布
```

无需手动连接、创建 session、选择 tab —— 一切自动完成。

## 环境变量

| 变量 | 默认值 | 说明 |
|------|--------|------|
| `MCP_PORT` | `3280` | MCP HTTP 服务端口 |
| `PLAYWRITER_RELAY_PORT` | `19988` | Playwriter WebSocket relay 端口 |
| `PLAYWRITER_RELAY_HOST` | `127.0.0.1` | Relay 地址 |
| `PLAYWRITER_EXTENSION_ID` | (自动检测) | 多 Profile 时指定连接哪个扩展 |
| `OUTPUT_DIR` | `./output` | 截图、PDF、trace 文件输出目录 |

## 技术原理

传统方案需要 `--remote-debugging-port` 来让程序操控浏览器,但 Chrome 136+ 禁止在默认 Profile 上使用该参数。

本项目利用 Playwriter 的 Chrome 扩展,通过 `chrome.debugger` API 从浏览器内部获取 CDP 访问权限,再通过 WebSocket relay 转发给 Playwright。这样:

- ✅ 不需要 `--remote-debugging-port`
- ✅ 可以使用用户的真实 Chrome Profile(带登录态)
- ✅ 暴露 37 个结构化 MCP 工具(与 Playwright MCP 对齐)
- ✅ 连接自动建立,无需手动操作

## 开发

```bash
npm install          # 安装依赖
npm run dev          # 开发模式启动
npm run build        # 编译 TypeScript
npm run lint         # 类型检查
npm test             # 运行测试
```

TDQS

B3.4/5.0

Scored across 30 tools

Disambiguation4/5

Most tools have clear distinct purposes, but browser_evaluate and browser_run_code overlap in executing JavaScript, and some verification tools could be merged. Descriptions help differentiate.

Naming Consistency5/5

All tools follow a consistent 'browser_verb_noun' pattern with underscores, making naming predictable and readable.

Tool Count4/5

30 tools is slightly high, but the domain of browser automation justifies the breadth. Some tools could be combined (e.g., verification tools) without loss.

Completeness5/5

Covers navigation, interaction, form handling, dialogs, screenshots, PDF, tracing, network, console, tabs, JS execution, and verification. Missing cookie/storage management but core workflows are fully covered.

Maintenance

ActivityInactive
ResponsivenessNo issues