browser
浏览器 MCP 插件(v3.0):纯 Lightpanda 单后端透传,提供 28 个通用浏览器 MCP 工具, 为各环境 agent 暴露与 Lightpanda 上游一致的浏览器能力。
设计理念
Lightpanda 的 lightpanda mcp 子命令本身就是一个标准 stdio MCP server,自带 28 个工具(27 browser tool + save)
(含 JSON Schema 与标准化错误码)。本插件不重新发明浏览器语义,只做四件事:
- 子进程生命周期:单例长驻
lightpanda mcp子进程,复用会话,支持链式操作 (goto→click→extract)。 - JSON-RPC 透传:行分隔协议,
initialize握手 +tools/call透传。 - run_log 埋点:每次调用创建 run,记录 init/call/complete/error 事件。
- 错误码归一:上游错误归一为
BrowserError,前端可据 code 给修复指引。
工具名、参数、返回结构、错误码全部由 Lightpanda 上游决定——平台层零手写 schema、零漂移。
为什么纯 Lightpanda
云端服务器资源不足以运行 Chrome。Lightpanda 是轻量无头浏览器,无需 Chrome/Chromium, 适合资源受限环境。Playwright 兜底依赖 Chrome,在本场景下失效,已移除。
28 个工具
| 类别 | 工具 |
|---|---|
| 导航 | browser-goto browser-search browser-getUrl |
| 读取 | browser-markdown browser-html browser-links browser-evaluate browser-extract browser-tree browser-nodeDetails browser-interactiveElements browser-structuredData browser-detectForms browser-findElement browser-consoleLogs browser-getCookies browser-getEnv |
| 交互 | browser-click browser-fill browser-scroll browser-hover browser-press browser-selectOption browser-setChecked |
| 等待 | browser-waitForSelector browser-waitForScript browser-waitForState |
| 录制 | browser-save(把会话存为可复用 agent 脚本,写磁盘) |
工具名格式为 browser-{上游名}(保留 camelCase);入参统一 params: dict 透传给上游,校验由 Lightpanda 负责。
完整参数说明见 /api/tools 端点或各工具 description。
架构
agent ──FastMCP──▶ mcp.py(28 个 @mcp_tool 薄壳)
│
▼
LightpandaClient(单例长驻)
├─ initialize 握手(一次性)
├─ tools/list 缓存(一次性,漂移校验)
└─ tools/call 透传(每次调用)
▼
ProcessSupervisor(stderr→日志文件)
▼
lightpanda mcp 子进程(stdio JSON-RPC)
plugins/browser/
├── plugin.json 元数据 + binary_dependencies
├── main.py Plugin 类(on_enable/on_disable/check_readiness/get_status)
├── api.py FastAPI 路由
├── mcp.py 28 个 @mcp_tool(工厂从 tools_meta 生成)
├── frontend/index.html 静态 UI
└── browser/
├── binary_locator.py 探测 lightpanda 二进制(env/PATH/常见路径/WSL)
├── process_supervisor.py 子进程监管(stderr→文件)
├── mcp_client.py 行分隔 JSON-RPC 客户端
├── client.py LightpandaClient 单例
├── tools_meta.py 28 工具元数据(27 browser tool + save)
└── errors.py BrowserError + 错误码(对齐上游)
配置
环境变量
| 变量 | 默认 | 说明 |
|---|---|---|
LIGHTPANDA_BINARY |
自动探测 | Lightpanda 可执行文件绝对路径 |
子进程
- 懒启动:插件 enable 时不预启动;首次工具调用时拉起子进程并握手。
- 长驻:子进程持续运行,复用会话;
on_disable或/process/stop时关闭。 - 日志:stderr 重定向到
data/lightpanda/mcp.log(stdio 协议强约束:stderr 不能走 PIPE)。
安装
详见 INSTALL.md。快速概览:
- Linux / macOS:下载 nightly release 二进制
- Windows:Lightpanda 无原生二进制,需 WSL2 或 Docker
- HuggingFace Spaces:Dockerfile 内置 nightly release
使用
通过 MCP 客户端(Claude Desktop 等)
插件通过平台 FastMCP 暴露 28 个工具,agent 直接调用 browser-goto / browser-markdown 等。
通过平台 UI
- 访问
/tool/browser - 顶部"Lightpanda 二进制"卡片显示状态;未找到时按 OS 显示安装命令
- "工具调用"面板选工具 + 填参数,点"执行"
- "运行日志"与"结果"区展示调用过程与返回
- "健康检查"显示二进制/子进程/工具缓存状态及漂移校验
通过 HTTP API
# 探测二进制
curl http://localhost:7860/plugins/browser/api/binary-check
# 列出工具
curl http://localhost:7860/plugins/browser/api/tools
# 健康检查
curl http://localhost:7860/plugins/browser/api/health
# 调用 goto
curl -X POST http://localhost:7860/plugins/browser/api/mcp/browser-goto \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
# 查看子进程日志
curl http://localhost:7860/plugins/browser/api/process/logs?tail=50
限制
- Lightpanda 是 Beta:参考 https://lightpanda.io/#status,部分网站可能不兼容
- WSL2 局限:Windows 上 WSL 与主进程通信经 stdin/stdout 转发,可能比 Linux 直接调用慢
- 工具集漂移:
tools_meta.py是静态锚点;上游新增工具时需同步。/health端点提供漂移校验预警
故障排查
| 现象 | 原因 | 解决 |
|---|---|---|
BINARY_NOT_FOUND |
PATH 中无 lightpanda | 按顶部卡片安装命令安装;或设 LIGHTPANDA_BINARY |
PROCESS_NOT_READY |
子进程启动/握手失败 | 查看 /process/logs;可能二进制损坏或版本不兼容 |
PROTOCOL_TIMEOUT |
子进程未及时响应 | 增大 timeout;查 /process/logs 找根因 |
NODE_NOT_FOUND |
selector 未命中元素 | 先用 browser-tree/browser-findElement 定位元素 |
FRAME_NOT_LOADED |
未先 goto 导航 | 先调 browser-goto 加载页面 |
变更记录
见 CHANGELOG。v3.0 相对 v2.0:废弃多 driver 抽象与 Playwright/CDP,改为纯 Lightpanda 透传; 工具数 12 → 28(与上游对齐);修复 v2 多个必现 bug。
v3.0
- 纯 Lightpanda 单后端,删除 Playwright/CDP/lightpanda_driver/registry/driver 抽象
- 28 个工具从上游
tools.zig静态提取,工厂生成,零手写 schema - 单例长驻子进程,复用会话
- 修复 v2 的
mcp_markdownparams.timeout 崩溃、/binary-checkimport 错、registry key 失效等