前言¶
在 DSH 里做需要浏览器的能力时,常见做法是单独挂 MCP 服务端,再在另一个通道里和「另一台机器或另一个会话」对聊。路径一多,档案目录、登录态和回执状态就容易对不齐。下面介绍的 mira_browser(维护者 Stella-Mira,GitHub Stella-Mira/mira_browser,当前版本 0.2.0,MIT)把两件事收进一个 DSH 工作流插件:通过补丁拉起 ai_browser 的 Python MCP,注册 mcp__aibrowser__*;同时提供 collab_*,把同机或其它机器上的 DSH 会话当作对端收发消息。社区目录 SkillHub 分类为「工作流」,见 目录页。
这是什么¶
一句话:DSH 浏览器与协作插件——接上 ai_browser 的 MCP 服务端,并把另一个 DSH 会话当成对端收发消息(collab_*)。
插件在宿主里通过 cordis.patch.yml 插入两行(顺序不能颠倒):mira-browser-dirs 由本包 lib/index.js 在 apply 时同步建好浏览器档案与临时目录;mcp-aibrowser 由 @deepseek-ai/dsh-mcp-client 以 stdio 拉起 ai_browser.mcp_server。所有工具返回 JSON 文本({ok:true,...} 或 {ok:false,error:{code,message,hint}})。
核心功能¶
ai_browser 作为 DSH 浏览器工具¶
补丁注册后,模型侧可用 MCP 浏览器工具,例如:
| 工具 | 作用 |
|---|---|
mcp__aibrowser__browse |
渲染网页并返回纯数据 JSON |
mcp__aibrowser__session_open / session_act / session_list / session_close |
有状态会话 |
mcp__aibrowser__collect |
记录级抓取(自动翻页) |
mcp__aibrowser__cookies_import |
把 cookie 文件导进某个 profile |
缺 listen 时,上述 MCP 工具不受影响;只有 collab_* 会报配置缺失。
collab_*:跨会话协作¶
保留 0.1.0 的浏览器驱动思路(结构信号、选中行守卫、默认插话),0.2.0 新增稳定别名表、两级回执、send_many、以及 queue/inflight 可观测。共 10 个 collab_* 工具,例如 collab_list / collab_read / collab_send / collab_send_many / collab_wait / collab_receipt / collab_status,以及 collab_alias_set / collab_alias_list / collab_alias_remove。
collab_send 成功时会带 receiptId、一级 receipt 与二级回执字段(见 README「工具清单」)。session 与会话标题寻址在 0.2.0 改为精确匹配;若以前靠标题前缀,需用 collab_alias_set 登记别名。
本节点 listen 与入站投递¶
在配置里手填 listen 后,本节点开始监听;对端可向本机 POST /collab/deliver 直投会话(走宿主 sessionController 的 steer/followup,不是去点本机 GUI)。非回环监听时,入站需 Authorization: Bearer <listen-token 文件内容>;无令牌文件时除 /healthz 外一律 403。
配置要点¶
运行期文件落在 $DSH_HOME/mira_config/mira_browser/(DSH_HOME 默认为 ~/.dsh),包括 config.json、aliases.json、可选 listen-token 与 creds/<target>.json 等。优先级为:内置默认值 ← config.json ← 宿主 profile 补丁里的 config:,最显式的一方生效。
profile 层常见键(与 0.1.0 兼容,本轮只新增 listen)示例:
config:
enabled: true
python: $HOME/DeepSeek/Browser/.venv/bin/python
aiBrowserHome: $HOME/DeepSeek/Browser
playwrightBrowsersPath: $HOME/.cache/ms-playwright
root: $HOME
profilesDir: $HOME/.mira_browser/profiles
tmpDir: $HOME/.mira_browser/tmp
localGuiUrl: http://127.0.0.1:3080/
proxyPort: 8543
targets: []
listen 必须在 config.json 中手填,否则全部 collab_* 返回 config/missing;首次加载若无 config.json 会生成带空 listen 的模板(权限 600),填完后重载插件即可。对象形态示例:
{ "schemaVersion": 1, "listen": { "ip": "192.0.2.10", "port": 8544 } }
同机快速试验可用:
{ "schemaVersion": 1, "listen": "loopback" }
cordis.patch.yml 里 mira-browser-dirs 与 mcp-aibrowser 必须共用同一套 profilesDir / tmpDir,否则 MCP 与 collab_* 各用一套浏览器档案,登录态不共享。
安装与启用¶
DSH 生态里插件以 bundle 形式挂载;本包在 package.json 中声明 "dsh": { "bundle": { "patch": "./cordis.patch.yml" } },安装后补丁会自动注入上述两行。
SkillHub 目录页给出的安装表述为:请安装 DSH 插件 Stella-Mira/mira_browser(页面未提供其它 shell 安装命令,勿自行拼接未在文档出现的 dsh plugin add 形式)。安装前请阅读 GitHub 仓库 源码与 MIT 许可证;插件以当前 dsh 进程权限运行,远程目标口令建议放在 creds/<target>.json(600),而非明文写在可共享的配置里。
启用协作前完成:
- 准备好 ai_browser 运行环境(
python、aiBrowserHome、playwrightBrowsersPath;Windows 等环境见 README「跨平台默认值」或环境变量MIRA_BROWSER_*)。 - 在
config.json填写listen,必要时配置targets与listen-token。 - 重载插件;用
collab_status查看 listen、别名、queue/inflight 等状态。
典型用法¶
只用车载浏览器 MCP¶
profile 里配好 Python 与 ai_browser 路径即可;不必填 listen。在会话中调用 mcp__aibrowser__browse 或 session_* 做有状态操作。
本机两个 DSH 会话互发¶
- 协作端 A:
listen设为"loopback",记下collab_status里的实际监听与reply_to(回环下为http://127.0.0.1:<端口>/,仅适合同机)。 - 用
collab_alias_set给对端会话登记稳定别名(精确标题或sessionId)。 - 调用
collab_send投递文本;需要批量时用collab_send_many。 - 用
collab_wait等对端回复,或用collab_receipt刷新二级回执;排障时看collab_status的 queue/inflight。
远程 DSH 实例¶
在 profile 或 config.json 的 targets 中增加 { name, baseUrl, user?, pass? }(baseUrl 为对方 mira_proxy 入口,名称精确匹配)。口令优先读 creds/<target>.json。对端需能把 HTTP 投递打回你配置的 listen 地址(跨机勿用仅 127.0.0.1 可回的 loopback)。
适用场景与注意¶
适合谁:需要在 DSH 工作流里统一使用 Playwright 浏览器 MCP,并驱动本地 GUI 或其它 DSH 节点会话做自动化协作的开发者。
务必注意:
- 未配置
listen时插件仍会加载并建目录,但所有collab_*不可用;MCP 浏览器工具照常。 - 0.2.0 工具返回由中文文本改为 JSON;升级自 0.1.0 请先看 README「升级注意」。
targets在 profile 层若写targets: []会整体覆盖config.json里的 targets;要加远程目标需改 profile 或去掉 profile 中的空数组。- SkillHub 为社区目录,与 DeepSeek / 幻方无官方从属关系;星标与更新节奏以 GitHub 与目录页为准。
结尾¶
mira_browser 把 ai_browser 的 MCP 与 DSH 会话协作收进同一插件:浏览器侧用 mcp__aibrowser__*,协作侧用 collab_* 与手填 listen。进一步细节以 README 的配置表与工具清单为准。