dsh-mcp-status:按需连接 MCP,让 DSH 启动时不自动拉起服务器

前言

在 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

典型用法

  1. 按上文安装插件并重启 DSH,确认工具栏出现 MCP 按钮。
  2. 将 profile 里不需要启动即连的 MCP 行设为 disabled: true。
  3. 开始一轮工作时,点开面板,对本轮要用的服务器打开开关;用完后可关闭开关释放子进程与长连接。
  4. 若某服务器连不上,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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye