dsh-mcp-management: Mount MCP tools per workspace

前言

在 DeepSeek Harness(DSH)里跑 Agent 时,MCP(Model Context Protocol)服务器往往是在应用层一次性配好的:数据库、GitHub、IDE 桥接等工具会在每一次对话里都出现在工具列表里。多项目并行时,你在文档仓库里不需要 JetBrains 工具,在 API 仓库里也不一定需要同一套 GitHub 配置,但全局配置很难按目录切分。

下面介绍社区插件 @inkyi/dsh-mcp-management(维护者 inkyi,分类:工作流)。它把 MCP 服务器的可见范围绑定到工作区(会话的工作目录):在 ~/work/api 里开的会话只看到为该目录配置的服务器,在 ~/work/docs 里则是另一套,或为空。

这是什么

一句话:dsh-mcp-management 是 DSH 的工作流类插件,为每个项目目录单独维护 MCP 服务器列表,并通过官方 @deepseek-ai/dsh-mcp-client 桥接,把工具挂载到当前 Agent 会话的作用域上。

插件在 dsh-plugin.org 有 listing(Verified,2026-10-29);源码与说明见 GitHub:inkyi/dsh-mcp-management。许可证 MIT,当前 package 版本 1.0.1。

核心功能

按工作区隔离服务器列表

每个工作区有自己的服务器定义;会话只收到「包含该会话工作目录」的那份工作区配置里的服务器。工具名形如 mcp__<serverName>__<tool>,仅在该会话内存在。

全局默认与合并优先级

可选的 defaultServers 会被所有工作区继承,适合「始终要用的工具」。最终列表按以下顺序合并,同名服务器后者覆盖前者:

defaultServers  <  workspaces[].servers(最长路径匹配,由外到内)  <  <workspace>/.dsh/mcp.json

仓库内 .dsh/mcp.json

项目可在 <workspace>/.dsh/mcp.json 里提交 MCP 配置,格式与常见的 { "mcpServers": { ... } } 一致。文件配置优先于 GUI 管理列表;url 表示 streamable-http,command 表示 stdio,也可显式写 transport。disabled: true 表示已配置但不连接。

设置页与 Agent 工具

Web 设置里提供 Settings → MCP Management,可编辑工作区与服务器(stdio 的 command/args/env/cwd,streamable-http 的 URL/headers,启用/禁用)。

Agent 侧提供 mcp_management 工具,动作为 status、list、setServer、removeServer、setEnabled、setWorkspace 等,便于模型在会话内查看或调整映射。

热更新与密钥引用

服务器挂在各 Agent 自己的注册作用域(agent.ctx)上,配置变更后当前会话的工具会随之增减,无需重启整个 Harness。配置中的 command、args、url、env、headers 支持 ${env:NAME},从 Host 环境展开,密钥不必写进配置文件。

工作原理(简要)

session 工作于 /repo/app
        │
        ▼
  解析服务器集合:defaultServers + workspaces[path=/repo/app] + /repo/app/.dsh/mcp.json
        │
        ▼
  在本 Agent 作用域挂载:agent.ctx.plugin('@deepseek-ai/dsh-mcp-client', …)
        │
        ▼
  工具仅对本会话可见

GUI 管理的值写入当前 profile 的用户 patch 层(~/.dsh/profiles/<profile>/cordis.patch.yml 中 mcp-management 行的 volatile 字段 defaultServers、workspaces);变更会对在线 Agent 重新绑定。普通字段如 fileConfigEnabled、fileConfigPath、matchSubdirectories 需插件重载后生效。

环境与依赖

  • 已安装 DeepSeek Harness(dsh 0.2.x),profile 组合需具备 tools、loader、agents、configEditor 与 Web 设置面(标准 dsh-base + dsh-web-app 即可)。
  • Node.js 22+(Harness 自带)。
  • 插件为纯 ESM,无构建步骤、无 npm 依赖(schema 依赖 vendored 在 vendor/)。

安装与启用

社区 hub 推荐命令(与 DSH Plugin Center 一致):

dsh plugin --profile web add @inkyi/dsh-mcp-management

在 npm 包未发布或需跟踪仓库时,可从 GitHub 安装:

dsh plugin --profile web add github:inkyi/dsh-mcp-management

命令会把包装入 profile、写入 dsh.profile.bundles 并应用 cordis.patch.yml 中的 bundle patch。若 dsh web 已在运行,需重启一次。桌面应用在侧栏 Plugins 中管理 reserved 的 desktop profile;会话内也可用 plugin_manager action=install_bundle target=... 达到同样效果。

安装后打开 Settings → MCP Management。若导航项未出现,刷新页面一次(客户端半部随页加载)。

卸载:

dsh plugin --profile web remove @inkyi/dsh-mcp-management

典型用法

在设置页添加工作区与服务器

  1. Add workspace:桌面端用原生目录选择器;纯浏览器 dsh web 页可在对话框粘贴绝对路径,或从侧栏已注册工作区选取。
  2. Add server,例如:
    - 名称 idea,传输 streamable-http,URL http://127.0.0.1:64343/stream,关闭 fail on startup error(IDE 未必常驻);
    - 名称 github,传输 stdio,command npx,args -y @modelcontextprotocol/server-github,env 设 GITHUB_TOKEN=${env:GITHUB_TOKEN}。
  3. 保存后,该工作区的在线会话立即生效;新会话在第一步之前即就绪。

用 .dsh/mcp.json 固化到仓库

在仓库根目录创建 .dsh/mcp.json(路径可通过 fileConfigPath 调整,默认 .dsh/mcp.json):

{
  "mcpServers": {
    "idea": {
      "url": "http://127.0.0.1:64343/stream",
      "failOnStartupError": false
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": { "GITHUB_TOKEN": "${env:GITHUB_TOKEN}" }
    },
    "disabled-example": {
      "command": "node",
      "args": ["server.mjs"],
      "disabled": true
    }
  }
}

无效条目会被跳过并记日志,不影响其他服务器。

通过 Agent 工具查询与管理

mcp_management { "action": "status" }
mcp_management { "action": "list" }
mcp_management { "action": "setServer", "server": { … } }
mcp_management { "action": "setEnabled", "serverName": "idea", "enabled": false }
mcp_management { "action": "setWorkspace", "workspacePath": "/path", "servers": [ … ] }

适用场景与注意

适合谁: 同时在多个代码库或文档目录上使用 DSH,且希望 MCP 工具集随目录变化——例如 API 项目配数据库 MCP,文档项目只配检索类工具;团队还可用 .dsh/mcp.json 把期望的服务器列表跟仓库一起走。

安全与权限: 插件与 MCP 子进程以当前 dsh 进程的用户权限运行;stdio 服务器会执行你配置的 command,${env:...} 读取的是 Host 环境变量。安装前建议阅读源码与 MIT 许可证,确认服务器命令与 URL 来源可信。

生态说明: DSH 采用「一切皆插件」的组合方式;dsh-plugin.org 与 skillhub.cn 等目录页 是社区索引,与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。

结尾

经过上面的步骤,你可以把 MCP 从「全局一锅炖」改成「按工作区一份清单」,并在设置页、仓库文件或 Agent 工具三条路径上维护配置。需要进一步了解参数与 YAML 字段时,以仓库 README 与 README.zh.md 为准。

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

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

Xiaoye