DSH Hub
dsh-mcp-manage cover

null119/dsh-mcp-manage

dsh-mcp-manage

UIWorkflow16 GitHub stars· updated 2026-08-30

dsh-mcp-manage is a community DeepSeek Harness plugin. Read the repository README before installing.

Install

npx @deepseek-ai/dsh plugin --profile web add link:<本仓库路径>

Restart `dsh web` after install. Bundle APIs can change during the developer preview.

README badge

dsh-mcp-manage DSH Hub badge
[![DSH Hub](https://dshhub.dev/badge/dsh-mcp-manage.svg)](https://dshhub.dev/plugins/dsh-mcp-manage)

Paste this into your README. The star count updates with every catalog sync.

From the README

Excerpt from null119/dsh-mcp-manage, cleaned of badges and images.

dsh-mcp-manage

English | 中文

DSH(DeepSeek Harness)Web GUI 的 MCP 管理插件:在 设置 → MCP 管理 页面里查看、添加、编辑、删除、启用/停用 MCP 服务器;组合配置(cordis.yml / patch)提供的 MCP 同样可在运行时直接管理。全部操作即时生效,无需重启宿主,也无需修改任何 dsh 源码。

功能

  • 查看所有已安装的 MCP 工具:每个服务器以“N 个工具”可点击计数展示,点击展开/收起工具列表(mcp__名称__*),默认隐藏。
  • 添加:支持 stdio(本地命令 + 参数 + 环境变量 + 工作目录)与 streamable-http(URL + 附加请求头)两种传输;保存后立即加载为运行实例,工具马上注册到会话。
  • 修改:编辑任意字段后自动以新配置重启该实例。
  • 删除:卸载运行实例并删除持久化记录。
  • 启用 / 停用:一键开关,停用立即卸载、启用立即加载。
  • 组合配置的 MCP 同样可管:cordis.yml / patch 提供的行(如 cebridge)可在运行时直接编辑——表单从当前配置预填,保存为运行时覆盖并立即重启(停用中的行保持停用,配置待下次启用生效;编辑在停用/启用之间保留,改错再次编辑即可),也可停用或移除(可随时恢复)。覆盖状态持久化并在宿主重启后自动维持;源组合文件不会被修改。
  • 持久化:记录与覆盖保存在 $DSH_HOME/mcp-manage/servers.json,宿主重启后自动恢复所有已启用的服务器并维持组合覆盖。
  • 启动失败可见:默认 failOnStartupError,坏定义会显示“启动失败”及错误信息,而不是静默后台重试。

安装

dsh plugin --profile web add link:<本仓库路径>
# 或发布后:
dsh plugin --profile web add dsh-mcp-manage

然后重启 dsh web,打开 设置 → MCP 管理。

要求:DSH ≥ 0.1.0-rc.6(组合中已包含 @deepseek-ai/dsh-web-app)。

卸载

dsh plugin --profile web remove dsh-mcp-manage

管理页删除所有记录后,$DSH_HOME/mcp-manage/ 可以安全移除。

工作原理

  • host 半(src/index.ts + src/host/):在 ctx.webServer 上注册 /api/dsh-mcp-manage/* 路由族;每个启用的记录通过 ctx.plugin() 加载为一个 @deepseek-ai/dsh-mcp-client 实例(作为本插件 fiber 的 effect 作用域子节点,插件卸载时自动清理)。@deepseek-ai/dsh-mcp-client 从运行中的 dsh 安装解析(可选 peer 依赖),本插件自身不携带它。组合行管理走 Loader 的 Entry.update / group.remove(绕过 tree.write(),不物化、不修改源组合文件):启用开关与配置编辑(PUT /external/:entryId/config,载荷与受管编辑同构,经同一 toConfig 映射生成客户端配置)都经 Entry.update 即时重启行内实例,首次编辑快照原始 loader 选项供还原(POST /external/:entryId/revert)。覆盖状态存于本插件存储,通过 loader/entry-init / loader/config-update 钩子与列表读取时的收敛式强化在启动与热重载后自动重建。
  • client 半(src/client/):通过 dsh.client 声明加载到 Web GUI,向 settings.section 槽位注册 "MCP 管理" 导航页,纯 fetch 与 host 半通信。
  • 工具枚举读取 ctx.tools.schemas() 中所有 mcp__* 前缀的名字,按 serverName 分组——这就是“当前宿主已安装的全部 MCP 工具”的权威列表。

dsh.bundle 声明清单

本插件在 package.json 的 dsh 段声明双面 bundle,该清单是 dsh plugin 与 Web GUI 识别并加载本插件的依据:

"dsh": {
  "bundle": { "patch": "./cordis.patch.yml" },
  "client": {
    "inject": [
      "@deepseek-ai/dsh-client-runtime",
      "@deepseek-ai/dsh-client-ui-settings"
    ],
    "platform": "web"
  }
}
  • dsh.bundle.patch:bundle 对外导出的组合 patch 层(相对包根的路径)。dsh plugin --profile <name> add 据此把本包识别为可安装插件——安装后以补丁层加入该 profile 的 dsh.profile.bundles 叠层栈;未声明 dsh.bundle 的包只会作为普通依赖安装(伴随告警),不成为任何一层。
  • dsh.client:浏览器半声明。inject 列出加载 client 包前需先注入的对等包(运行时与设置页 UI),platform: "web" 声明目标平台。

HTTP API

页面之外,路由族也可直接调用(同源前缀 /api/dsh-mcp-manage,统一 JSON 信封 { ok, error? }):

路由说明
GET /servers全量快照:受管行、组合行与存储路径
POST /servers添加(body { server })
PUT /servers/:id编辑并重启实例
DELETE /servers/:id删除
POST /servers/:id/enabled启用 / 停用(body { enabled })
POST /external/:entryId/enabled组合行启用 / 停用
PUT /external/:entryId/config组合行配置编辑(body { server },与受管编辑同构;保存为覆盖并即时重启)
POST /external/:entryId/revert组合行还原为组合原始配置(无编辑时 404)
DELETE /external/:entryId组合行移除(可恢复)
POST /external/:entryId/restore组合行恢复

开发

pnpm install
pnpm run typecheck   # tsc --noEmit
pnpm test            # vitest 单元测试(store 校验 / 往返 / 覆盖携带)
pnpm run build       # tsc 声明 + tsdown(lib/index.js + lib/client.js)

tests/fixtures/echo-mcp-server.mjs 是零依赖的手写 stdio MCP 服务器,用于端到端验证。

已验证的端到端路径

…

Related plugins