威尼斯浏览器MCP桥是一个轻量级、适用于生产环境的浏览器桥接工具,它通过标准输入/输出使用类似JSON - RPC的协议进行通信。该工具支持两种传输帧格式,使用Playwright实现真实浏览器自动化,并对常见的编程陷阱进行了优化。
line(每行一个JSON消息)和content - length(类似HTTP的Content - Length: N帧消息)两种传输帧格式,分别适用于快速原型开发和严格的MCP主机。asyncio.StreamWriter(sys.stdout, ...)的常见问题,如避免向标准输出日志记录、防止协议不匹配,并能按消息进行干净的刷新。python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
playwright install chromium
make run-line
make test-line
Navigate...
{"id":"nav-1","result":{"ok":true,"final_url":"https://example.com/","title":"Example Domain"}}
make run-cl # 终端A
make test-cl # 终端B
按照快速开始部分的步骤,依次创建隔离环境、安装依赖并运行桥接工具即可完成安装和启动。
在快速开始部分已经展示了基础的使用方法,通过make run-line或make run-cl启动桥接工具,然后使用make test-line或make test-cl运行示例主机进行测试。
venice-browser-mcp/
├─ src/
│ ├─ venice_browser_mcp.py # 入口点
│ ├─ venice_browser_mcp_core.py # 环境配置
│ └─ venice_browser_mcp_v23_impl.py # 帧格式 + 浏览器逻辑(已修补)
├─ examples/
│ ├─ line_host.py # 启动桥接工具(行帧格式)并发送请求
│ └─ hard_mcp_host.py # 启动桥接工具(Content - Length帧格式)并发送请求
├─ docs/
│ ├─ ARCHITECTURE.md
│ └─ TROUBLESHOOTING.md
├─ Makefile
├─ requirements.txt
├─ .gitignore
├─ LICENSE
└─ README.md
桥接工具通过环境变量进行配置,为新手选择了合理的默认值。
| 属性 | 详情 |
|---|---|
MCP_FRAMING |
line或content - length |
HEADLESS |
Playwright的true或false |
MCP_STORAGE_STATE |
用于持久会话的storage_state JSON文件路径 |
NAV_TIMEOUT |
导航超时时间(毫秒) |
BROWSER |
浏览器名称chromium | firefox | webkit |
⚠️ 重要提示
所有日志都输出到标准错误输出。切勿将非协议文本打印到标准输出,否则会破坏传输。
browser.navigate — { "url": "https://example.com" }{ ok, status, final_url, title }。ping — { "echo": "value" }{ "echo": "value" }。mcp.shutdown — 无参数。你可以在venice_browser_mcp_v23_impl.py的dispatch()函数中添加更多处理程序。
make install — 安装Python依赖和Playwright浏览器make run-line — 以行模式运行桥接工具(前台)make run-cl — 以Content - Length模式运行桥接工具(前台)make test-line — 运行行模式的示例主机make test-cl — 运行Content - Length模式的示例主机make fmt — 基本的Python格式化(通过python -m json.tool检查和清理空白)make clean — 删除缓存/工件AssertionError或'Protocol' object has no attribute '_drain_helper'原因:asyncio.StreamWriter构造不正确(常见陷阱)。
解决方法:本仓库不使用该模式,而是使用安全的写入器。确保你运行的是这些源代码,而不是未修补的文件。使用git clean -xfd重新安装或重新解压压缩包。
json.decoder.JSONDecodeError: Extra data原因:你向标准输出泄露了非JSON行(例如,打印信息、其他工具的警告)。
解决方法:确保所有诊断信息都输出到标准错误输出。在Python中:print("dbg", file=sys.stderr, flush=True)。
Expecting value: line 1 column 1 (char 0)原因:主机期望一个JSON行,但得到了空值/垃圾数据,通常是因为子进程在JSON之前向标准输出打印了横幅信息。
解决方法:同上,保持标准输出仅包含协议内容。同时验证你的帧模式是否匹配(主机与桥接工具)。
playwright._impl._errors.Error: BrowserType.launch: Executable doesn't exist原因:你忘记安装浏览器。
解决方法:playwright install chromium(如果你更改了BROWSER,则安装firefox / webkit)。
MCP_STORAGE_STATE=state.json(默认已经设置)。HEADLESS=false登录一次,然后关闭。后续会话将重用该状态。如果主机使用PTY或非管道标准输出,行缓冲可能会出现故障。建议使用包含的示例主机,它们通过管道生成桥接工具并进行干净的通信。
本项目的许可证信息请查看仓库中的LICENSE文件。