前言¶
在 DeepSeek Harness(DSH)里接入 MCP 后,服务往往来自多处:cordis.patch.yml 里静态声明的 @deepseek-ai/dsh-mcp-client 行、本机其它客户端(Cursor、Claude Desktop 等)的配置,以及运行中临时改过的启停状态。条目多了之后,单靠改 YAML 或翻 loader 日志,很难一眼看清「谁连上了、工具有几个、改完会不会重启丢」。社区里也有多款 MCP 面板类插件,但有的会动用户 profile、有的带远程目录或 OAuth,和「只管好本机已接入 MCP」的需求并不完全一致。
下面介绍维护者 gainaixiaobing 的客户端插件 dsh-mcp-manager(GitHub:gainaixiaobing/dsh-mcp-manager):轻量级 MCP 服务管理器,零 npm 依赖,带设置页 UI,并暴露 10 个对话工具 mcp_manager_*。它不做插件市场、不做远程目录、不做 OAuth 授权流,专注本机 MCP 的清单、启停、增删改、握手探针,以及从常见客户端扫描与 mcpServers JSON 互操作。
这是什么¶
dsh-mcp-manager 是 DSH 生态中的客户端插件(package.json 中 dsh.client.platform 为 web,注入设置页槽位)。当前仓库版本为 0.2.0,许可证 MIT,要求 Node.js >= 20。
插件在 Harness 运行时读取 ctx.loader.entries() 与 ctx.tools.schemas(),把 profile 静态行与本插件受管存储里的连接合成一张服务清单;启停与编辑通过 ctx.loader.create/update/remove 作用在本次运行,受管部分写入磁盘并在重启后由插件自动 provision 成 dsh-mcp-client 条目。
核心功能¶
能力在 README 中以「对话工具 + 设置页」双入口列出,下面按使用场景归纳。
清单与详情¶
- 列出服务(
mcp_manager_list/ 设置页):来源(profile / 受管)、状态、传输方式、端点(脱敏)、工具数;支持关键词与状态过滤。 - 查看详情(
mcp_manager_inspect/ 展开行):工具名与说明;状态区分「已连接 / 已停用 / 无工具 / 加载失败 / 未生效」。
状态语义以工具是否注册、fiber 是否存在为准;README 明确说明「已连接」不等于远端业务一定可用,真实连通性应靠探针。
启停、增删改¶
- 启用 / 停用(
mcp_manager_set_enabled):受管服务持久化;profile 静态行只影响本次运行,重启恢复。 - 新增(
mcp_manager_add):支持streamable-http或stdio,默认写入受管存储。 - 编辑(
mcp_manager_update):URL、headers、command、args、env、cwd、超时;密钥支持保留 / 覆盖 / 删除三态。 - 移除(
mcp_manager_remove):受管记录删条目+存储;profile 行仅本次运行生效。
同名重复(profile 与受管共用一个 serverName)会在列表标「同名」;解析时要求传条目 id,不猜测。
探针、扫描、导入、导出¶
- 握手探针(
mcp_manager_probe):真实initialize+tools/list,返回延迟、协议版本、工具数、结构化错误码与脱敏后的 stderr。 - 扫描本机(
mcp_manager_scan):只读扫描 Claude Desktop、Claude Code、Cursor、Windsurf、VS Code、Cline、Zed、Continue 等客户端配置,不写回。 - 导入 JSON(
mcp_manager_import):粘贴mcpServers形态 JSON,先预览新增/冲突再写入;冲突可跳过、覆盖受管或自动改名,可导入为停用。 - 导出(
mcp_manager_export):patch(cordis.patch.yml,!!js process.env.*)、json(mcpServers,${ENV})、markdown清单。
持久化与安全边界¶
受管连接写在:
<DSH_HOME>/mcp-manager/connections-<profile>.json
默认目录为 ~/.dsh/mcp-manager/。文件权限 0600、目录 0700;原子写(临时文件 + rename),覆盖前保留 .bak;写操作在同一进程内串行化,JSON 损坏时不覆盖原文件。
profile 里 @deepseek-ai/dsh-mcp-client 静态声明保持只读:要长期固化变更,需用导出 patch 后手动合并到 profile,插件不会自动改用户 profile 文件。
安全方面:凭据进受管存储或由用户放在 ~/.dsh/.env;列表、扫描、导出不回显密钥值;对外文本经 lib/sanitize.js 脱敏;HTTP API 仅接受本机回环 Host 并校验 Origin;探针 stdio 子进程会清洗父进程环境中的敏感环境变量名。插件以当前 DSH 进程权限运行,安装前建议阅读源码与 MIT 许可证,自行评估信任边界。
安装与启用¶
任选一种方式安装,完成后重启 DeepSeek Harness(Host 半区需重启;带 dsh-client-hmr 的发行版中 Client 半区可热替换)。
方式一:DSH 面板
设置 → 插件 → 安装,spec 填:
github:gainaixiaobing/dsh-mcp-manager
方式二:CLI
dsh plugin --profile <profile> add github:gainaixiaobing/dsh-mcp-manager
方式三:从源码手动安装(离线)
README 提供 install.sh,需自行 clone 仓库后执行(本文不展开 clone 步骤)。装好后同样重启 Harness。
卸载:面板或 CLI 停用/卸载插件即可;受管存储文件不会自动删除,需手动清理。
典型用法¶
设置页
- 打开 设置 → MCP 服务。
- 用搜索或状态筛选定位条目,对单行做启停、探针、编辑、删除。
- 顶部使用「新增 / 导入 / 导出」完成接入或迁移配置。
对话
可直接用自然语言驱动同一套能力,README 举例:
- 「列出我的 MCP 服务」
- 「探测 qcc-company 通的吗」
- 「把 Cursor 里的 MCP 配置导入进来」
- 「把当前配置导出成 patch」
对应工具名为 mcp_manager_list、mcp_manager_probe、mcp_manager_scan / mcp_manager_import、mcp_manager_export 等。
适用场景与限制¶
适合谁
- 已在 DSH 中挂多个 MCP,需要统一视图和启停,又不想插件改写
cordis.patch.yml。 - 从 Cursor、Claude Desktop 等迁配置到 DSH,或把当前受管连接导出成 patch /
mcpServers给其它环境。 - 需要结构化探针结果排查连接问题,而不是只看「工具数」。
需要注意
- 不做 OAuth:需 OAuth 的服务请自行拿 token,经
headers或env传入。 - 探针
tools/list只取第一页,工具极多的服务可能少计。 - 受管存储为明文 JSON(0600),勿提交进 git。
- 社区目录 SkillHub 插件页 与 GitHub 仓库独立维护,与 DeepSeek / 幻方无官方从属关系;安装 spec 以 README 为准。
结尾¶
dsh-mcp-manager 把「本机已接入 DSH 的 MCP」和常见客户端里的 mcpServers 配置接到同一套清单与操作上:受管连接可持久化,profile 静态行保持只读,探针与脱敏边界在 README 里写清。若你正在 DSH 里堆 MCP 又不想手改 YAML,可先按上文 spec 安装,在设置页或对话里完成导入与探针,再按需导出 patch。
- 目录页:https://www.skillhub.cn/plugins/gainaixiaobing/dsh-mcp-manager
- 源码与文档:https://github.com/gainaixiaobing/dsh-mcp-manager