前言¶
在 DeepSeek Harness(DSH)里接 MCP,常见做法是改 cordis.patch.yml 或 profile 下的 patch:手写 - id: 行、核对 transport 与凭据,改完还要确认 @deepseek-ai/dsh-mcp-client 是否加载成功。行一多,启停、改 URL、查重和 id 冲突都容易散落在多个文件里。
@yiyunet/dsh-mcp-client-manager 是社区维护的 DSH 插件(MIT,维护者 yiyunet),在 设置 → 侧栏 提供「MCP 客户端」面板:列出、添加、改写、启停、删除挂在 dsh-mcp-client 下的 MCP 服务器行;点保存才写盘,写完通常不重启宿主。包已发布到 npm,当前版本 1.0.4,零构建、零运行依赖(宿主侧 node:* + ctx,浏览器侧官方 module-loader)。
这是什么¶
一句话:DSH 设置里的 MCP 客户端管理面板,把受管行写进 $DSH_HOME 自有层,手写行走 DSH 官方配置编辑器与插件管理通道,且凭据类字段按设计不回传到浏览器。
分类属于 客户端 类插件;能力边界与已知限制以 GitHub README 为准,文档未承诺的行为不要假设。
核心功能¶
面板能做什么¶
- 列出 当前 MCP 行:服务名、行 id、来源(受管 / 手写)、状态、操作。
- 添加 / 改写 / 启停 / 删除 受管行(行 id 前缀
mcpx-)。 - 手写行(例如 profile patch 里
insert下的行):可改凭据族字段与启用/禁用;不能删除,不能改serverName/transport;面板提供「撤销覆盖」还原官方覆盖行。 - 保存前校验:
serverName查重、受管 id 三级冲突检测(避免官方判unaddressable)。 - 状态列:基于行阶段与工具计数的大白话(已启用、已禁用、加载失败等);不做协议层探活,不代表远端服务健康。
写盘模型(两层、两条路径)¶
| 层 | 文件 | 谁写 | 作用 |
|---|---|---|---|
| 真源(受管清单) | $DSH_HOME/mcp-manager/servers.json |
本插件 | 面板管理的清单(含 url / env 等,权限 0600) |
| 生成物(自有层) | $DSH_HOME/cordis.patch.yml |
本插件全量重写 | 渲染受管 MCP 行;home 层在 HMR 范围内 → 落盘即热生效 |
| 手写层 | profiles/<profile>/cordis.patch.yml |
手工 / 官方配置编辑器 | 面板添加/删除的受管行不在这里;手写行改写与启停走 ctx.configEditor / ctx.pluginManager |
下面这点常被问:面板新增/删除的行写在 $DSH_HOME/cordis.patch.yml($DSH_HOME 即 DSH 数据根,例如 %USERPROFILE%\.dsh),不在 profiles\<profile>\cordis.patch.yml。面板顶部会显示符号化路径(如 $DSH_HOME\…),不含用户名绝对路径。
安全口径(设计硬约束)¶
- url 永不回传浏览器:列表只显示
协议//主机/…,不含路径、查询串或 key 片段。 - stdio 的 env 取值永不回传:只回传键名与「已设置」。
- 凭据族字段留空 = 保留原值;要改须整段重填
url、command、env。 - 密钥留在宿主进程侧,面板 RPC 载荷经自测断言不回传 url 与 env 取值。
安装与启用¶
已发布 npm 时,README 给出的最省事命令如下:
dsh plugin --profile web add @yiyunet/dsh-mcp-client-manager
其他方式(任选):
本地目录(侧栏 插件 → 添加插件,粘贴仓库目录绝对路径,或 CLI):
dsh plugin --profile web add "<本仓库绝对路径>"
GitHub 源(README 注明可用性依赖包管理器与 dsh plugin 对 git 说明符的解析,失败可改本地目录):
dsh plugin --profile web add github:yiyunet/dsh-mcp-client-manager
本包无 prepare / 构建脚本,git 源安装不会触发「构建脚本批准」。profile 若 patchReload: live 且 bundles 在 HMR 范围内,通常无需重启;若设置里没出现「MCP 客户端」,重启一次宿主。
运行环境:package.json 要求 Node >= 22.19。
典型用法与验证¶
经过安装,可按 README「生效与验证」表做冒烟:
- 打开 设置 → 侧栏,应出现「MCP 客户端」。
- 打开面板:手写行来源为「手写」,状态为「已启用」或「已启用 · 未发现工具」;端点/命令在「修改」表单与悬停提示中,表格为 5 列。
- 添加 HTTP 或 stdio 行 → 保存:
$DSH_HOME/cordis.patch.yml出现,列表新增mcpx-*;挂载后 MCP 工具可用。 - 改手写行 url → 保存:来源变为「手写 + 已覆盖」;
profiles/web/cordis.patch.yml末尾追加顶层覆盖行(官方行为),原insert行不动。 - 撤销覆盖:覆盖行移除,值回到
insert原值。 - 删除受管行:自有层该行消失;手写行无删除按钮。
- 若手工改坏
$DSH_HOME/cordis.patch.yml导致漂移:面板转只读,并提供重建 / 清空清单等处置。
只读核对配置(输出可能含 key,勿外传):
dsh --profile web --dump-config
适用场景与注意¶
适合谁:已在 DSH Web profile 使用 dsh-mcp-client、希望用 GUI 管理多条 MCP 行、又需要区分「插件受管行」与「profile 里手写行」的开发者。
使用前请知悉:
- 插件以当前 DSH 进程权限运行;安装前应查看 源码与 MIT 许可证。
- 手写行已被面板覆盖后,直接改
insert不生效,须先「撤销覆盖」。 - 状态列只反映加载与工具发现,断线重连期间工具仍可能列出、调用才失败(mcp-client 既定行为)。
- 卸载 CLI:
dsh plugin --profile web remove "@yiyunet/dsh-mcp-client-manager";受管层文件与mcp-manager目录需按 README「回滚」节自行清理,手写行不受影响。
社区插件目录 SkillHub 条目 与 GitHub 仓库相互独立索引;DSH 生态是「一切皆插件」,目录站与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-mcp-client-manager 把 MCP 行的日常运维收进 设置 → MCP 客户端 一张表:受管行走 $DSH_HOME 自有层并热生效,手写行走官方编辑通道且边界写死在文档里。若要逐项对照写回路径与 RPC 细节,可读仓库内 docs/架构与写回模型.md。
- 目录页:https://www.skillhub.cn/plugins/yiyunet/dsh-mcp-client-manager
- GitHub:https://github.com/yiyunet/dsh-mcp-client-manager
- npm:
@yiyunet/dsh-mcp-client-manager