dsh-mcp-client-manager:在 DSH 设置侧栏管理 MCP 客户端行

前言

在 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 为准,文档未承诺的行为不要假设。

核心功能

面板能做什么

  1. 列出 当前 MCP 行:服务名、行 id、来源(受管 / 手写)、状态、操作。
  2. 添加 / 改写 / 启停 / 删除 受管行(行 id 前缀 mcpx-)。
  3. 手写行(例如 profile patch 里 insert 下的行):可改凭据族字段与启用/禁用;不能删除,不能改 serverName / transport;面板提供「撤销覆盖」还原官方覆盖行。
  4. 保存前校验:serverName 查重、受管 id 三级冲突检测(避免官方判 unaddressable)。
  5. 状态列:基于行阶段与工具计数的大白话(已启用、已禁用、加载失败等);不做协议层探活,不代表远端服务健康。

写盘模型(两层、两条路径)

层 文件 谁写 作用
真源(受管清单) $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「生效与验证」表做冒烟:

  1. 打开 设置 → 侧栏,应出现「MCP 客户端」。
  2. 打开面板:手写行来源为「手写」,状态为「已启用」或「已启用 · 未发现工具」;端点/命令在「修改」表单与悬停提示中,表格为 5 列。
  3. 添加 HTTP 或 stdio 行 → 保存:$DSH_HOME/cordis.patch.yml 出现,列表新增 mcpx-*;挂载后 MCP 工具可用。
  4. 改手写行 url → 保存:来源变为「手写 + 已覆盖」;profiles/web/cordis.patch.yml 末尾追加顶层覆盖行(官方行为),原 insert 行不动。
  5. 撤销覆盖:覆盖行移除,值回到 insert 原值。
  6. 删除受管行:自有层该行消失;手写行无删除按钮。
  7. 若手工改坏 $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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye