前言¶
在 DeepSeek Harness(DSH)里接入 MCP,配置最终都落在当前 profile 目录下的 cordis.patch.yml。条目必须是 - insert: 块里、名为 @deepseek-ai/dsh-mcp-client 的结构,serverName 还有字符集与唯一性约束,写错形状或缩进可能导致 DSH 启动期直接失败。手改文件之后,也很难立刻知道进程里是否真的加载成功。
下面介绍社区插件 dsh-mcp-manager(维护者 ZnonEn,分类:客户端)。它在 DSH 桌面端设置里增加 设置 → MCP 服务器 一页,用表单完成列表、增删改、启停,并显示实测运行状态,直接读写 profile 的 cordis.patch.yml,host 侧零 npm 依赖。
这是什么¶
dsh-mcp-manager 是 DSH 的标准形态插件:host 半边注册 HTTP 路由并操作 patch 文件,client 半边在设置里渲染管理界面。装好后会在 设置 → MCP 服务器(settings.section,order 12,排在「模型」与「插件」之间)出现。
它解决三件事:按官方 schema 校验表单、写盘后探测运行状态、写盘前后自检并在失败时整份回滚,避免「文件对了但服务没起来」或「写坏 profile 起不来」。
- 目录页:https://www.skillhub.cn/plugins/ZnonEn/dsh-mcp-manager
- 源码:https://github.com/ZnonEn/dsh-mcp-manager
- 许可:MIT
- 版本(package.json):0.1.0
- 运行环境:Node ≥ 20
核心功能¶
列表与运行状态¶
从当前 profile 的 cordis.patch.yml 读出所有 @deepseek-ai/dsh-mcp-client 条目,摘要展示传输方式、command/url、环境变量、超时等字段。运行状态合并 pluginManager.listPlugins() 的实测结果,而不是凭文件猜测。
| 界面显示 | 含义 |
|---|---|
| 运行中 | 条目在运行树里且 fiber 已 active |
| 加载中 | 已进运行树,尚未就绪 |
| 已停用 | 文件里标记停用 |
| 加载失败 | 在运行树里但加载报错(如 command 路径不对、握手超时) |
| 待重启生效 | 文件里有条目,运行树里还没有 |
新增、编辑、删除¶
- 新增:填写
serverName、传输方式(stdio / streamable-http);stdio 填 command/args/env/cwd,HTTP 填 url/headers;高级项含调用超时、启动失败策略、重连参数。 - 编辑:可改条目 ID(会重建条目并清理旧行);
serverName与同条目同名允许,与他人冲突则拒绝。 - 删除:二次确认;删最后一个条目时会清理
- insert:块或还原新建 profile 的[]。
启用与停用¶
条目已在运行树里时调用 pluginManager.setPluginEnabled,立即生效。停用状态写入 profile patch 顶层覆盖(- id: <条目id> + disabled: true),重启后仍有效。
其它¶
- 查看配置文件:设置页内只读展示
cordis.patch.yml原文及当前定位的 profile。 - 刷新:重新读磁盘并刷新运行状态;保存/启停/删除后约 4 秒会自动回读一次以确认是否生效。页面不主动轮询,外部改文件需点刷新或重新打开页面。
安装与启用¶
方式 A:命令行(任意 profile,推荐)¶
适用于非 desktop 独占管理的 profile。安装后需重启 DSH(bundle 插件下次启动才加载)。
dsh plugin add github:ZnonEn/dsh-mcp-manager
# 或固定版本
dsh plugin add github:ZnonEn/dsh-mcp-manager#v0.1.0
卸载:
dsh plugin remove dsh-mcp-manager
卸载只移除插件,不会删除已有 MCP 服务器配置。
方式 B:DSH 桌面端(设置 → 插件)¶
桌面 profile 由 Electron 独占管理,命令行会直接拒绝,例如:
$ dsh plugin --profile desktop add github:ZnonEn/dsh-mcp-manager
error: profile "desktop" is managed exclusively by the Electron application
应在 设置 → 插件 的安装入口粘贴仓库 clone 后的本地目录绝对路径,装完后完全退出并重启 DSH。
典型用法¶
- 确认插件已装进当前 profile 并已重启 DSH。
- 打开 设置 → MCP 服务器。
- 点「新增服务器」,按传输类型填表并保存;插件会改写
cordis.patch.yml,DSH 监视该文件并热加载(README 实测约 2–6 秒)。 - 看卡片上的状态是否为「运行中」;若为「待重启生效」,可稍等热加载或重启 DSH。
- 需要核对路径时,用「查看配置文件」确认插件定位到的 profile 与文件内容。
支持的配置字段与 @deepseek-ai/dsh-mcp-client 官方 schema 对齐(README 注明对齐已安装版本的 0.1.7-rc.2)。例如 serverName 必填,规则为 [A-Za-z0-9_-]{1,32},profile 内唯一,决定工具前缀 mcp__<serverName>__<tool>;未填的字段不会写入文件,由客户端包使用默认值。
若需脚本或二次开发,host 注册了 JSON 接口,例如 GET /mcp-manager/state(完整状态)、GET /mcp-manager/raw(patch 原文)、POST /mcp-manager/save、POST /mcp-manager/remove、POST /mcp-manager/toggle、POST /mcp-manager/refresh。
排错时可显式指定 profile(Windows 示例):
setx DSH_MCP_MANAGER_PROFILE "C:\Users\<你>\.dsh\profiles\desktop"
或在仓库目录执行只读检查:
node tools/inspect-patch.js
node tools/inspect-patch.js "C:\Users\<你>\.dsh\profiles\desktop\cordis.patch.yml"
适用场景与注意¶
适合谁:经常在 DSH 里增删 MCP、又不想手改 YAML 的开发者;需要在界面里区分「文件已写」与「进程已加载」的场景。
安全与权限:插件以当前 DSH 进程权限读写 profile 下的 cordis.patch.yml。安装前应查看源码与 MIT 许可证,确认符合你的环境策略。写操作带自动备份(cordis.patch.yml.bak-mcp-manager-<时间戳>,保留最近 10 份)、原子写与失败回滚;只改目标 MCP 条目行范围,其它插件条目、!!js、注释尽量逐字节保留。
已知限制(来自 README):
- 写在
- id: <group>内部insert:里的 MCP 条目不会出现在列表中,也不会被本插件编辑,但 DSH 仍会加载它们。 - 只管理 profile 的
cordis.patch.yml这一层,不处理cordis.yml或其它层。 - YAML 解析器只覆盖 profile patch 常见写法,遇到块标量、锚点等不支持的结构会拒绝解析并在界面标红。
生态说明:DSH 社区插件目录(如 SkillHub)是独立站点,与 DeepSeek / 幻方无官方从属关系;安装第三方插件前自行评估维护者与代码。
结尾¶
dsh-mcp-manager 把 MCP 声明集中到设置页:校验、写盘、状态探测与回滚一条龙,减少手改 cordis.patch.yml 的风险。若你已在用 DSH 桌面端或 CLI profile,可按上文命令或桌面插件页安装,重启后在 设置 → MCP 服务器 使用。