前言¶
在 DeepSeek Harness(DSH)里,每个 MCP 服务器通常对应 profile 里一行 @deepseek-ai/dsh-mcp-client。这些行一旦启用,Loader 会在启动时逐个建立连接;连不上时 supervisor 会按退避策略重试(500ms 起,最长 30s,最多 10 次),后台每隔几十秒仍可能再试。对不常用的服务器,这会拖慢启动,并持续占用子进程与连接尝试。
常见做法是手动把不用的行关掉,或改 cordis.patch.yml 写 disabled: true,但「要不要连」仍分散在配置编辑里,且与「这一轮对话实际要用哪几个」并不总是一致。社区插件 dsh-mcp-status(npm:@my-dsh/dsh-mcp-status,维护者 my-dsh,分类:客户端)在对话输入框下方工具栏增加 MCP 连接面板:列出本机已配置的 MCP 服务器,由你逐个开关连接;每次启动默认全关,不持久化「上次开着」的状态,从而把连接成本从启动期挪到使用时。
这是什么¶
dsh-mcp-status 是 DSH 的 MCP 连接面板插件:工具栏按钮展示已连接数/总数(例如 MCP 2/3),点开 320px 面板按「已连接 / 未连接」分组列出服务器,用开关在本轮运行内挂载或卸载官方 dsh-mcp-client,使 DSH 可以在 profile 仍保留 MCP 行配置的前提下,启动时不连接任何 MCP(需配合将原有 MCP 行设为 disabled: true,见下文)。
插件不存数据库、不写连接状态到磁盘;开关是运行时动作,一般不修改 profile(唯一例外:关闭仍由 profile 自行维护的「已启用行」时,会通过 Plugin Manager 把该行 disabled: true 写回)。
核心功能¶
工具栏与面板¶
- 位置:输入框下方工具栏,与「+」「工作区内修改」同一
.tools容器,紧挨「工作区内修改」右侧。 - 按钮:显示
MCP 已连接数/总数;左侧圆点表示是否有连接(有连接为绿色,读取失败为红色)。 - 面板:320px 宽;列表按连接状态分组,组标题右侧显示条数;每行约 44px,含状态点、服务器名、一行元信息(host、脚本名或传输方式等)、工具数(右对齐,无工具显示
—)、开关。完整命令行可在title悬停查看。 - 面板打开时每 4 秒刷新状态(只读,不改动连接);关闭时不发请求。中英文案跟随界面语言。
行为模型(与默认 DSH 的差异)¶
- 行仍是纯配置:transport / command / args / env / url 仍来自各
@deepseek-ai/dsh-mcp-client行;建议将这些行disabled: true,Loader 启动时不挂载,从而零连接、零重连计时器。 - 不持久化开关集合:开着哪些服务器只存在于当前插件实例内存;重启 DSH、重载插件或改 profile 后集合清空,需重新手动打开。
- 连接由面板接管:打开开关时,插件用该行配置在自身 context 挂载
dsh-mcp-client,工具注册到ctx.tools;关闭时 dispose,传输关闭、工具注销。GET api/mcp-status.list仅为投影,不会触发连接或拆连。 - 兼容仍启用的行:若某 MCP 行在 profile 里仍为启用,面板显示为「已连接(由该行自己维护)」;若要恢复「启动不连」,在面板关开关即可,会持久化
disabled: true。
Host API¶
两条路由均在需认证的 /api 通道,客户端用同源 fetch('api/...'):
GET api/mcp-status.list→{ servers: [{ entryId, serverName, transport, target, enabled, connected, phase, tools, managedBy, editable }] }POST api/mcp-status.set{ entryId, enabled }→{ ok, application, status };连不上时{ ok: false, reason: 'connect-failed', diagnostic }
均不需要 sessionId。
可选配置¶
在 profile 的 cordis.patch.yml 中可对插件行覆盖:
- id: mcp-status
name: '@my-dsh/dsh-mcp-status'
config:
connectTimeoutMs: 8000
connectTimeoutMs 为单次连接等待上限(毫秒,默认 8000);超时后面板仍显示「连接中」并继续等待,不会立刻判失败。
从带 SQLite 的旧版本升级时,可删除不再使用的目录:
rm -rf ~/.dsh/mcp-status
安装与启用¶
需要 web surface profile(dsh web 默认 profile 名一般为 web),且 git 与 pnpm 在 PATH 上。包声明了 dsh.bundle,安装后自动进入 profile 的 bundle 层栈,重启 DSH 后生效。
# 从 GitHub 直装
dsh plugin --profile web add github:my-dsh/dsh-mcp-status
# 或安装已发布到 npm 的版本
dsh plugin --profile web add @my-dsh/dsh-mcp-status
装完后建议把已有 MCP 行关掉,使 disabled: true 写入 profile,避免下次启动仍自动连接。可在 GUI 点对应开关(关闭会写回 profile),或直接编辑 ~/.dsh/profiles/<name>/cordis.patch.yml:
- id: mcp-chrome
disabled: true
- id: mcp-mysql
disabled: true
典型用法¶
- 按上文安装插件并重启 DSH,确认工具栏出现 MCP 按钮。
- 将 profile 里不需要启动即连的 MCP 行设为
disabled: true。 - 开始一轮工作时,点开面板,对本轮要用的服务器打开开关;用完后可关闭开关释放子进程与长连接。
- 若某服务器连不上,
POST api/mcp-status.set会返回connect-failed与diagnostic,面板据此展示;列表刷新不会替你重连。
peer 依赖:@deepseek-ai/cordis >= 4.0.1(optional)。当前 package 版本为 0.1.0,许可证 MIT。
适用场景与注意¶
适合谁:本地配置了多个 MCP 服务器,但多数会话只用其中一两个;希望缩短 DSH 冷启动、减少后台重连与子进程开销,又愿意在每轮手动打开所需连接的智能体开发者。
注意:
- 插件以当前 DSH 进程权限运行;安装前请自行查看 GitHub 仓库 源码与 MIT 许可证,确认符合你的安全与合规要求。
- 不记「上次开着」是刻意设计:自动恢复会把启动期连接成本换种形式加回来;若你需要开机即连某几个固定 MCP,仍应使用 profile 里启用对应行,或接受每次手动开面板。
- 社区目录 skillhub.cn 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系;插件列表与星标等信息以目录与仓库为准(当前 GitHub 星标为 0)。
结尾¶
dsh-mcp-status 把 MCP「连不连」从 Loader 启动路径挪到工具栏面板:配置行保留、连接按需、进程内开关、启动默认零连接。需要时可从 npm 或 GitHub 安装到 web profile,再配合关闭原有 MCP 行的自动挂载即可使用。
- 目录页:https://www.skillhub.cn/plugins/my-dsh/dsh-mcp-status
- 源码与说明:https://github.com/my-dsh/dsh-mcp-status