dsh-mcp-hub:在 Web 设置里管理 MCP 服务器并导入多客户端配置

前言

在 DeepSeek Harness(DSH)里,每台 MCP 服务器通常对应配置里一行 @deepseek-ai/dsh-mcp-client 的 Loader 条目。日常增删改、启停和排查连接,往往要直接编辑 YAML,还要把 Codex、Claude Desktop、Cursor、VS Code 等工具里的 MCP 配置手工翻译成 DSH 写法。

下面介绍社区插件 dsh-mcp-hub(维护者 hlyyh21201-prog):在 Web GUI 的 设置 → MCP Hub 面板里做列表、启停、连接测试和表单编辑,并支持从多种常见格式一键导入。插件分类为客户端,在 SkillHub 目录页 可查看元信息;源码与说明见 GitHub 仓库。

这是什么

dsh-mcp-hub 是 DSH 插件(npm 包名 @yyh/dsh-mcp-hub),定位是可视化 MCP 服务器管理 + 多格式导入。它不替代 DSH 自带的 MCP 客户端能力,而是把「写 YAML、对格式、试握手」收敛到一个设置面板,数据写在当前 profile 下的独立文件里,通过 cordis:include 挂进 Loader,写入后可触发热重载,无需为开关某台服务器重启整个进程。

核心功能

列表与状态

面板展示每台服务器的 serverName、传输方式、目标(URL 或命令)、启用状态、加载阶段,以及已注册工具数量。写在其他插件配置文件里的条目会标为「外部配置」,默认只读,避免两个插件抢同一行。

启动、关闭与连接测试

启停会写回配置文件并触发热重载:关闭会立即断开该服务器的工具,开启会立即连接。连接测试会执行真实 MCP 握手(initialize → tools/list),报告工具数与耗时;失败时给出可读原因,不做乐观假设。

增删改

通过表单编辑服务器,支持 stdio 与 streamable-http 两种传输。新增或更新时会拒绝重复的 serverName(返回 duplicate-server-name)。

多格式导入

支持的格式包括:

来源 典型位置或形态
Codex ~/.codex/config.toml 中的 [mcp_servers.*]
Claude / Cursor 等 带 mcpServers 外层键的 JSON
裸 JSON 顶层即为服务器名 → 配置的对象
VS Code .vscode/mcp.json 或用户级 mcp.json(servers 键,允许注释与尾逗号)

传输类型会做归一化:http / remote / streamable-http / sse → streamable-http;stdio / local → stdio。缺少 type 时按是否存在 command 或 url 自动判定。

三种导入入口:

  1. 粘贴配置文本:将上述任意格式粘进文本框。
  2. 从本地文件导入:填写绝对路径(支持 ~),或在 Host 侧解析后只把服务器清单返回界面(不会把整份配置文件原文回传到浏览器)。
  3. 扫描本机已知位置:按平台探测 Codex、Claude Code、Cursor、MCP CLI、Gemini / Antigravity、VS Code、Windsurf、Claude Desktop 等已知路径,并显示各文件内有多少台 MCP;没有 MCP 条目的文件不会出现在结果里。

解析后会得到可勾选清单:与已有服务器重名的条目默认不勾选,并提示如 idea → idea-2 的改名建议;不冲突的默认勾选。清单支持全选 / 全不选,底部显示「已勾选 N 台」。

导入时, env / headers 里名称含 pass、secret、token、key、credential、auth 等的值会被替换为占位符 __DSH_MCP_HUB_SET_ME__,条目标为「待补密钥」,需在面板中手动补填。远程传输(streamable-http)下 dsh-mcp-client 不读 env,仅 url 与 headers;若配置里带了 env 会告警。stdio 传输不支持 headers,同样会告警。

接管(adopt)外部条目

若某台服务器写在别的插件文件(例如 cordis.patch.yml 由 dsh-mcp-manager 维护),面板对该行只读。展开后可用 接管:在来源文件旁生成带时间戳的 .bak 备份,行级摘除该行后并入本插件的 mcp-hub.yml,此后可正常启停与编辑。写入时使用与宿主 dsh-config-editor 相同的文件锁,并原子落盘。

数据文件位置

本插件独占 $DSH_HOME/profiles/<profile>/mcp-hub.yml(默认权限 0600),可通过行的 dataFile 覆盖。放在 profile 目录内是为了让 @deepseek-ai/dsh-mcp-client 的模块解析与当前 DSH 安装一致,避免误解析到工作区父目录里的旧版 node_modules。从旧路径升级时,若检测到迁移条件会自动搬移数据,旧文件改名为 mcp-hub.yml.migrated-<时间戳> 保留。

本插件不会修改同目录下的 cordis.patch.yml,可与例如 @js2hou/dsh-mcp-manager 等插件共存;但若两个文件里出现同名 serverName,工具名会冲突,应通过面板的接管合并,而不是手工重复添加。

安装与启用

README 中的安装示例为本地路径(请按你实际获取插件的方式替换路径):

dsh plugin --profile web add /home/yyh/yyh/dsh-mcp-hub

也可通过 Agent 的 plugin_manager 的 install_bundle 安装插件目录。装好后重启 DSH 或在 GUI 里应用配置,再打开 设置 → MCP Hub。

典型用法

从 Codex 配置迁移一台 stdio 服务器

Codex 侧片段示例(摘自 README):

[mcp_servers.mysql-dev]
type = "stdio"
command = "/usr/bin/npx"
args = ["-y", "mysql-mcp-server"]

[mcp_servers.mysql-dev.env]
MYSQL_HOST = "dev.example.com"
MYSQL_PASSWORD = "secret"

在 MCP Hub 中选择「粘贴」或「读取」~/.codex/config.toml,在勾选清单中选中 mysql-dev,确认导入后在列表中补填被占位符替换的密码,再点连接测试确认 tools/list 成功。

从 Cursor 的 mcpServers JSON 导入

{
  "mcpServers": {
    "idea": {
      "enabled": true,
      "type": "remote",
      "url": "http://127.0.0.1:64342/stream"
    }
  }
}

导入后 remote 会归一为 streamable-http。启用服务器后,工具应以 mcp__<serverName>__* 形式出现在上下文中。

验证连接

对任意已配置条目使用面板上的连接测试,应看到握手耗时与工具数量;若失败,根据面板提示检查 URL、命令、环境变量或 headers。

适用场景与注意

适合谁:经常在 DSH Web 环境里维护多台 MCP、或已从 Codex / Claude / Cursor / VS Code / Gemini 等工具积累配置、希望少手写 YAML 的开发者。

权限与安全:插件以当前 dsh 进程权限运行,扫描与读取本机路径、写入 profile 下的 mcp-hub.yml 均在该权限下完成。安装前请自行查看 源码 与许可证(MIT)。SkillHub 为社区目录,与 DeepSeek / 幻方无官方从属关系;目录页当前星标为 0,不代表功能完备性,请以 README 与自测说明为准。

实现要点(便于排障):插件自述为零依赖实现(YAML、TOML、握手探测均用 Node 内置模块);UI 仅使用宿主主题 token,不额外引入 Harness Client 包。仓库内提供多组 node lib/*.test.mjs 自测脚本(README 称共 324 项),均在临时目录运行,不触碰真实 profile。

结尾

若你的痛点是「MCP 配置分散在各客户端格式里、DSH 里又要手改 Loader 行」,dsh-mcp-hub 把列表、启停、真实握手测试和多格式导入放到 设置 → MCP Hub,并把数据收敛到 profile 内的 mcp-hub.yml,与同目录其他 patch 文件按文件名分层共存。进一步了解可访问 SkillHub 插件页 与 GitHub:hlyyh21201-prog/dsh-mcp-hub。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye