← 返回列表
✓ 可直接安装
DSHDeepSeek HarnessWeb GUI 插件:在设置页管理 MCP…
自动检查通过:npm 包已发布且 engines 声明满足基线(声明 Node ^22.19.0 || >=24.0.0);该结论来自程序自动检查,未经人工实机验证。 · 最近上游提交 2026/8/30 · 已提供中文文档
DSH(DeepSeek Harness)Web GUI 插件:在设置页管理 MCP 服务器——列出已安装工具,添加/编辑/删除、启用/停用;组合配置提供的 MCP 同样可在运行时直接编辑、停用、移除并恢复,无需重启宿主。
综合分
39.4
GitHub 分
39.4
用户评分
—
★ Stars
16
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add dsh-mcp-managenpm 包 dsh-mcp-manage 已校验归属本仓库,走 npm 安装最省事
信任档位:已验证本站已于 4 天前真实安装成功(L4 · 真实安装)
- 是什么
- dsh 原生插件 · tool
- 装得上吗
- 本站已真实安装成功(L4 · 真实安装,非静态推断)
- 安全吗
- 本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
- 还在维护吗
- 活跃:最近一次提交在 26 天前
档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →
🟢实装验证通过· 2026/9/21
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/21(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查✓ 自动检查通过
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-mcp-manage @ 1.1.0
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/21 20:14:46
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-host-webserver用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
由 DeepSeek 最新模型翻译生成dsh-mcp-manage
DSH(DeepSeek Harness)Web GUI 的 MCP 管理插件:在 设置 → MCP 管理 页面里查看、添加、编辑、删除、启用/停用 MCP 服务器;组合配置(cordis.yml / patch)提供的 MCP 同样可在运行时直接管理。全部操作即时生效,无需重启宿主,也无需修改任何 dsh 源码。
DSH 版本 License: MIT
MCP 管理设置页截图
功能
- 查看所有已安装的 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 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 服务器,用于端到端验证。
已验证的端到端路径
在独立 profile(--profile mcp-test --port 3999)上实测通过:外部目录列出 9 个组合 MCP 服务器及其全部工具;添加 / 编辑(实例重启)/ 停用 / 启用 / 删除;组合行停用(175→0 工具)/ 移除 / 恢复(13 工具回归);停用状态跨宿主重启保持;浏览器表单添加与工具计数点击展开。
组合行运行时编辑的覆盖携带(停用/启用/恢复间保留)与存储往返由单元测试覆盖(tests/store.spec.ts,14 项)。
许可
MIT
dsh-mcp-manage(英文)
DSH(DeepSeek Harness)Web GUI 的 MCP 管理插件:一个 设置 → MCP 管理 页面,用于列出、添加、编辑、删除和启用/停用 MCP 服务器;由组合(cordis.yml / patches)提供的 MCP 行在运行时同样可管理。一切即时生效——无需重启宿主,无需修改 dsh 源码。
MCP 管理设置页面截图
功能
- 列出所有已安装的 MCP 工具:每个服务器显示一个可点击的“N 个工具”计数,可展开/折叠其工具列表(mcp__name__),默认隐藏。
- 添加:stdio(command / args / env / cwd)和 streamable-http(URL / headers)传输;保存后立即加载一个实时实例,其工具随即注册。
- 编辑:自动在新配置下重启实例。
- 删除:销毁实时实例并移除持久化记录。
- 启用 / 停用:一个开关——停用立即卸载,启用立即加载。
- 组合提供的 MCP 行同样是一等公民:来自 cordis.yml / patches(例如 cebridge)的行可以在运行时编辑——表单会从该行的当前配置预填,编辑会持久化为覆盖并立即重启该行(停用的行保持休眠,并在下次启用时采用该配置;编辑在切换后依然保留,出错可通过再次编辑修复)——同样可以停用或移除(可恢复)。覆盖在宿主重启后依然保留,且源组合文件绝不会被修改。
- 持久化:记录和覆盖存放在 $DSH_HOME/mcp-manage/servers.json;启用的服务器和组合覆盖在宿主启动时恢复。
- 失败可见:错误的定义会显示为带有错误文本的失败行,而不是静默的后台重试。
安装
dsh plugin --profile web add link:
or, once published:
dsh plugin --profile web add dsh-mcp-manage
重启 dsh web,然后打开 设置 → MCP 管理。需要 DSH ≥ 0.1.0-rc.6(一个 Web 应用组合)。
工作原理
宿主端在 ctx.webServer 上提供 /api/dsh-mcp-manage/,并将每条启用的记录加载为一个 @deepseek-ai/dsh-mcp-client 实例(作为本插件 fiber 的 effect 作用域子级——销毁会自动级联;该客户端包作为可选 peer 从正在运行的 dsh 安装中解析)。浏览器端通过 settings.section 插槽注册设置页面,并通过普通 fetch 与宿主通信。工具枚举读取 ctx.tools.schemas(),并按服务器命名空间对每个 mcp__ 名称进行分组。组合行通过加载器的 Entry.update / group.remove 进行管理(绕过 tree.write()——不会将任何内容物化回源组合文件):启用开关和运行时配置编辑(PUT /external/:entryId/config,其负载形状类似于受管理的编辑,并通过相同的 toConfig 映射)都会立即重启该行的 fiber,原始加载器选项在首次编辑时被快照以便还原(POST /external/:entryId/revert),并且持久化的覆盖会在启动和热重载后通过 loader/entry-init / loader/config-update 钩子重新强制执行。
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 导出的组合补丁层(相对于包根目录)。dsh plugin --profile add 使用它来将该包识别为可安装插件——一旦安装,它便作为补丁层加入该 profile 的 dsh.profile.bundles 层栈;没有 dsh.bundle 声明的包会作为普通依赖安装(并带有警告),且永远不会成为一层。
- dsh.client:浏览器端声明。inject 列出了必须在客户端 bundle 之前加载的 peer 包(运行时和设置页面 UI),而 platform: "web" 声明了目标平台。
HTTP API
除页面外,该路由族也可直接调用(同源前缀 /api/dsh-mcp-manage;每个响应都是一个 JSON 信封 { ok, error? }):
| 路由 | 描述 |
| --- | --- |
| GET /servers | 完整快照:受管理的行、组合行、存储路径 |
| POST /servers | 添加(请求体 { server }) |
| PUT /servers/:id | 编辑并重启实例 |
| DELETE /servers/:id | 删除 |
| POST /servers/:id/enabled | 启用 / 禁用(请求体 { enabled }) |
| POST /external/:entryId/enabled | 启用 / 禁用某个组合行 |
| PUT /external/:entryId/config | 编辑组合行的配置(请求体 { server },与管理端编辑的形状相同;作为覆盖持久化,并立即重启) |
| POST /external/:entryId/revert | 将组合行还原为其原始组合选项(无可还原内容时返回 404) |
| DELETE /external/:entryId | 移除组合行(可恢复) |
| POST /external/:entryId/restore | 恢复组合行 |
开发
pnpm install
pnpm run typecheck && pnpm test && pnpm run build
tests/fixtures/echo-mcp-server.mjs 是一个无依赖、手写的 stdio MCP 服务器,用于端到端验证(添加 / 编辑 / 切换 / 删除 / 浏览器表单 / 重启恢复均已针对专用测试配置进行验证)。组合行运行时编辑路径——覆盖在切换/恢复之间的延续以及存储往返——由单元测试覆盖(tests/store.spec.ts,14 个测试)。
许可证
MIT