dsh-mcp-manager:在 DSH 设置页管理 MCP 服务器

前言

在 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 起不来」。

核心功能

列表与运行状态

从当前 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。

典型用法

  1. 确认插件已装进当前 profile 并已重启 DSH。
  2. 打开 设置 → MCP 服务器。
  3. 点「新增服务器」,按传输类型填表并保存;插件会改写 cordis.patch.yml,DSH 监视该文件并热加载(README 实测约 2–6 秒)。
  4. 看卡片上的状态是否为「运行中」;若为「待重启生效」,可稍等热加载或重启 DSH。
  5. 需要核对路径时,用「查看配置文件」确认插件定位到的 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 服务器 使用。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye