前言¶
在 DeepSeek Harness(DSH)里接 Model Context Protocol(MCP)服务器,常见做法是在 profile 里手写 mcp-* 配置行:改命令、改环境变量、临时关掉某个 server,往往要动文本配置并重启或重载理解成本不低。会话里若只想「这一轮不用某个 MCP 的工具」,也没有统一的 UI 开关。
dsh-mcp-manager 是维护者 097794 发布的 DSH 插件(分类:工作流),目标是在 Harness 的 Web UI 里完成 MCP 的列表、增删改、启用/禁用、连接测试,并在 Composer 里按会话单独开关各 server。每个经插件配置的服务器都会挂载为真实的 @deepseek-ai/dsh-mcp-client 实例,工具命名空间 mcp__<name>__<tool>、资源与 server 指令的行为与 profile 里手写 MCP 行一致。
这是什么¶
插件包名 dsh-mcp-manager,当前版本 0.1.0,MIT 许可证。一句话定位:在 DSH 内通过界面管理 MCP 服务器,并支持按会话启用或隐藏工具。
仓库与目录页:
- GitHub:https://github.com/097794/dsh-mcp-manager
- SkillHub 目录:https://www.skillhub.cn/plugins/097794/dsh-mcp-manager
核心功能¶
Settings 里的 MCP 服务器管理¶
路径:Settings → MCP servers。可列出、添加、编辑、删除 server,启用或禁用,并对单个 server 做 Test。
配置字段(保存前为草稿,点 Save 后宿主立即协调:删除或改过的 server 会断开,新建的会连接):
| 字段 | 说明 |
|---|---|
| Name | 成为工具命名空间 mcp__<name>__<tool>;字母、数字、_、-,最长 32 |
| Transport | stdio 本地进程,或 streamable-http 远程服务 |
| Command / arguments / working directory | 仅 stdio;参数一行一个 |
| Environment | 仅 stdio;KEY=VALUE 一行一个,值可用 ${ENV_VAR} |
| URL / headers | 仅 streamable-http;请求头 Name: Value 一行一个,可用 ${ENV_VAR} |
| Enabled | 关闭时不连接、不提供工具 |
Test 在隔离作用域挂载 server,报告工具数量与名称,不改动当前 live 工具列表。${ENV_VAR} 从 harness 进程环境展开;变量缺失时该 server 会失败并给出明确提示。
已在 profile 里以 MCP 行存在的 server(例如 mcp-anysearch)会在 From the profile 下只读列出;其工具仍参与会话级开关。
Composer 里按会话开关¶
打开 Composer 的 + 菜单(与 / 命令同一菜单),选择 MCP servers。原菜单区域会显示 server 列表、各 server 工具数量,以及逐项开关:
- 关:该 server 的工具对智能体隐藏(
tools.restrictdeny),本会话也不再注入对应mcp:<name>的 system prompt 段落; - 开:上述限制与段落恢复。
点击外部或按 Escape 关闭,行为与命令菜单一致。状态保存在 durable 的 per-session 插件记录 plugin:mcp-manager/toggles 中,刷新后仍有效,且不会泄漏到其他会话。子智能体启动时默认所有 server 均为启用。
实现要点(便于排查)¶
宿主侧用 volatile 的 servers 配置;apply 时为每个启用的 server 通过 ctx.plugin(...) 挂载子插件 @deepseek-ai/dsh-mcp-client。system-prompt/assemble 会去掉本会话已关 server 的 mcp:<name> 段;agent/created、agent/disposed 与 tools/change 同步 per-agent 工具限制。
浏览器侧通过同源 JSON API(/dsh-mcp-manager/api/...)读写状态、测试与会话开关,Settings 页注册为 settings.section,并提供 /mcp 命令在 conversation.input.overlay 打开面板。与 loopback Web 上其它路由一样未做鉴权,不要将 DSH 宿主暴露到 loopback 之外。
安装与启用¶
需要带插件系统的 DSH 构建,README 举例为 DSH 0.2.1-rc.2 desktop。package.json 中 engines.dsh 为 >=0.2.1-rc.1 <0.3.0-0,Node >=22.19.0。
官方 README 未提供 dsh plugin add github:... 一类命令,安装方式为本地目录 bundle:
- 将本插件目录 clone 或复制到稳定路径(本地目录安装是链接而非复制,需保留该文件夹)。
- 在 DSH 中:Plugins → Add plugin → local directory,或使用插件管理工具的
install_bundle,传入该文件夹的绝对路径。
典型用法¶
- 安装并启用插件后,打开 Settings → MCP servers,新增一条 stdio 或 streamable-http 配置,填好 Name、Transport 及对应字段,先 Test 确认工具列表,再 Save。
- 在 Composer + → MCP servers 中,对不需要本轮使用的 server 关掉开关,再开始对话;需要时在同一面板重新打开。
- 若 profile 里已有 MCP 行,在 Settings 页只读区可见;会话开关仍作用于其工具与 prompt 段。
开发侧可运行 README 中的单元测试(纯逻辑在 lib/model.js):
node --test test/model.test.mjs
适用场景与注意¶
适合:经常在 DSH 里增减或调试 MCP、希望在 UI 里测试连接、或按会话临时隐藏部分 MCP 工具的工作流场景。
务必了解 README Compatibility and risk 中的说明:
- 针对 DSH 0.2.1-rc.2 开发,依赖
ctx.plugin、tools.restrict、system-prompt/assemble、appendPluginRecord等面向插件的 API,不构成公开兼容承诺。 - stdio server 的命令在 harness 进程环境与权限下运行,只添加可信 server。
- 按会话隐藏工具不是安全边界,模型仍可能通过其它 provider 调用工具。
- 删除 server 不会删除其已写入的数据,仅断开连接。
安装前建议阅读仓库源码与 MIT 许可证;社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-mcp-manager 把 MCP 的配置、测试与会话级开关收进 DSH Web UI,并与手写 profile MCP 行共用同一套 @deepseek-ai/dsh-mcp-client 挂载语义。进一步细节见 GitHub 仓库 与 SkillHub 目录页。