MCP 极简管理:在 DSH Web 里一览并停用 MCP 服务器

前言

在 DeepSeek Harness(DSH)里接 MCP,常见做法是往 cordis.yml 或各 bundle 的 cordis.patch.yml 里加 @deepseek-ai/dsh-mcp-client 实例。装多了之后,「当前进程到底加载了哪些 MCP、哪条还在跑、哪条已经手写停掉」并没有一个统一界面:往往要翻 profile 与用户层的补丁文件,自己辨认哪一行是 MCP,再决定怎么改。停用一个 MCP 同样没有 Web 入口。

MCP 极简管理(插件 id:dsh-mcp-mini-manager)由社区维护者 runcat-tommy 发布,分类为 admin-security。它在 DSH Web 的「设置」侧边栏增加一页,与「插件」同级(设置页 id:mcp-mini-manager,order 16),列出当前 DSH 实际装载的每个 MCP 服务器、简介与状态,并支持逐个「移除」(写入可恢复的停用补丁)。仓库与目录页:

  • GitHub:https://github.com/runcat-tommy/dsh-mcp-mini-manager
  • SkillHub 目录:https://www.skillhub.cn/plugins/runcat-tommy/dsh-mcp-mini-manager

SkillHub 是社区插件目录站点,与 DeepSeek / 幻方无官方从属关系;安装前请自行查看源码与 MIT 许可证。插件以当前 dsh web 进程权限运行,涉及读写 profile 与用户层 cordis.patch.yml。

这是什么

一句话:Minimal MCP manager for DeepSeek Harness Web——同一级设置页里汇总 MCP、看状态、可逐个停用,停用通过 profile 层补丁完成且可恢复。

DSH 理念是「一切皆插件」;本插件是标准 DSH bundle(声明 dsh.bundle.patch 与 dsh.client),当前 npm 包版本为 1.5.4(以仓库 package.json 为准)。

它怎么知道「装了哪些 MCP」

在 DSH 里,一个 MCP 服务器对应 cordis 装载树里的一行,模块为 @deepseek-ai/dsh-mcp-client:每个插件实例连一个 MCP,多服务器则在 cordis.yml 里加载多个实例。

本插件从两处读取并合并:

来源 提供什么 局限
运行中的 Loader(ctx.loader.entries()) 权威 config(serverName、transport、command、url 等)与 fiber 状态 看不见已停用行(不在树里)
补丁层(各 bundle 的 cordis.patch.yml、profile 的 cordis.patch.yml、~/.dsh/cordis.patch.yml) 被停用的行及来源包 仅静态配置,无运行状态

合并后,昨天「移除」的 MCP 仍会显示为「已移除」,并保留原始配置(来自移除记录)。运行中的树在能观测的事情上优先,补丁层补上树里看不见的部分。

安全边界:浏览器请求只带本插件目录接口返回的行 id;host 端确认该行确实是 MCP 客户端行后,才推导要写的文件与段落。浏览器不发送路径或 YAML 正文。

核心功能

列表与状态

每个 MCP 服务器一行展示:

  • 简介:stdio 显示命令行,streamable-http 显示 endpoint;配置含 !!js 时只标字段名,不显示值。
  • 状态:在用 / 已移除 / 启动失败 / 启动中 / 未观测(由 Loader fiber 与补丁层共同推导)。
  • 工具:该服务器经 mcp__<serverName>__<rawName> 注册给模型的工具及描述。

另有 疑似自带 MCP 能力的插件(只读):不经过 dsh-mcp-client、自行连远端 MCP 的插件仅列出,不提供移除(移除语义等于卸载插件)。

页面底部 诊断信息:profile 目录、写入目标、home 层补丁、读取了哪些补丁层、各层无法解析的内容。

移除与恢复

「移除」= 向 profile 自己的 cordis.patch.yml 追加按 id 定位的停用补丁,例如:

# >>> dsh-mcp-mini-manager: disabled mcp row mcp-github
# server: github
# removed: <ISO 时间戳> by dsh-mcp-mini-manager
# restore this server from the MCP 极简管理 settings page, or delete
# these lines to re-enable the row by hand.
- id: mcp-github
  disabled: true
# <<< dsh-mcp-mini-manager: disabled mcp row mcp-github

设计要点(README 原文归纳):

  1. 不改任何包文件,停用写在用户层,重装包不会抹掉你的停用选择。
  2. 通常不需重启:DSH 对 profile / home 层有 watchUserPatches;写完后 host 会再读运行树,如实提示「已即时生效」或「重启后生效」。
  3. 可恢复:写入前原始行会存到 <harness home>/.mcp-mini-manager/removed/<rowId>.json;「恢复」只删除对应停用块,行级拼接,不重写整份 YAML(避免破坏注释与其它插件的 !!js)。

会被拒绝的情况包括:行已停用、起止标记不配对、补丁文件末尾无换行、行 id 形如路径、浏览器跨站 Origin 与 Host 不一致(403)等。

「清空移除记录」为唯一不可逆操作:只删记录文件,不恢复也不删除任何 MCP,需二次确认。

局限(文档明示)

  • fiber 为 active 只表示装载成功,不代表远端已连通;连接状态见 dsh-mcp-client 日志,本页不猜测。
  • 必须有 loader 服务才能列出运行中行;读不到时页面会说明,而非显示「没有 MCP」。
  • 只覆盖经 dsh-mcp-client 桥接的工具;resources / prompts 不在范围内。

安装与启用

三条安装路径装的是同一包;装好后均需重启一次 dsh web(新 bundle 在启动时由 profile manifest 读取,只刷新页面不够)。停用 / 恢复 MCP 本身则依赖补丁热加载,一般无需再重启。

① 从 GitHub 直接装

适合不想 clone、本机有 git 的情况:

dsh plugin --profile web add github:runcat-tommy/dsh-mcp-mini-manager

仓库已提交 lib/ 运行产物且无 install 类脚本,通常不触发构建审批。更新:重跑同一条命令。

② 下载 ZIP 再装

不用 git、不用 npm:在 GitHub 下载 ZIP 解压到固定目录后:

dsh plugin --profile web add D:\plugins\dsh-mcp-mini-manager

(Linux/macOS 将路径换成你的解压目录。)更新:覆盖目录后重跑 add 并重启。

③ 从 npm 装

dsh plugin --profile web add dsh-mcp-mini-manager

包地址:https://www.npmjs.com/package/dsh-mcp-mini-manager

更新:

dsh plugin --profile web up dsh-mcp-mini-manager

查看与卸载插件(与「停用某个 MCP」不同):

dsh plugin --profile web list
dsh plugin --profile web remove dsh-mcp-mini-manager

典型用法

  1. 按上面任选一种方式把 dsh-mcp-mini-manager 加入 web profile,重启 dsh web。
  2. 打开 Web 设置,在侧边栏找到与「插件」同级的 MCP 极简管理(mcp-mini-manager)。
  3. 浏览列表中的命令行或 endpoint、状态、已注册工具;需要下线某个 MCP 时对该行执行「移除」,必要时在页面上「恢复」或手动删除 profile cordis.patch.yml 里带标记的停用块。
  4. 若状态与预期不符,展开诊断信息核对补丁层;连接问题到日志里查 dsh-mcp-client 的重连与失败记录。

宿主 HTTP 接口(供脚本或调试,浏览器跨站带 Origin 时需与 Host 一致):

方法 路径 作用
GET /dsh-mcp-mini-manager/api/catalog 目录 + 移除记录 + 诊断
POST /dsh-mcp-mini-manager/api/disable 停用,body:{"rowId":"..."}
POST /dsh-mcp-mini-manager/api/restore 恢复,body:{"rowId":"..."}

适用场景与注意

适合:已在 DSH Web profile 里通过 dsh-mcp-client 接了一个或多个 MCP,希望用界面统一查看状态、临时下线某个服务器而不改第三方 bundle 文件的人。

注意:

  • 安装与写补丁发生在本机 profile / harness home,权限与当前 DSH 进程一致;生产或共享机器上请先审阅 lib/index.js 等宿主逻辑。
  • 不管理「插件内置 MCP」的启停;那些条目只读。
  • 社区目录与 GitHub 星标等以站点为准(目录页当前星标为 0),版本以 npm / 仓库标签为准。

结尾

MCP 极简管理把「看清 loaded MCP」和「可恢复地停用一行」收进一页设置,补丁写在用户层、行级读写,避免整文件 YAML 重序列化。需要安装命令与边界细节时,以仓库 README 为准:

  • 目录页:https://www.skillhub.cn/plugins/runcat-tommy/dsh-mcp-mini-manager
  • 源码与说明:https://github.com/runcat-tommy/dsh-mcp-mini-manager
羽毛球分组比赛记分
小程序二维码

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

小夜