dsh-project-mcp:为项目级会话配置 MCP 服务器

DSH(DeepSeek Harness)的常规配置方式是在 cordis.patch.yml 中定义 MCP 服务器,这会导致同一个配置文件下的所有会话共享相同的 MCP 服务器。当需要在特定项目中使用特定的 MCP 服务(例如 Rider、Playwright 或 Tracker)时,这种全局配置方式会带来干扰。dsh-project-mcp 插件引入了项目级配置平面,允许项目在本地声明 MCP 服务器,这些服务器仅对在该项目下工作的会话生效。

该插件由用户 borgez 维护,采用 MIT 许可证。它通过读取项目根目录下的配置文件,将声明为 localFiles 的 MCP 服务器挂载到会话中,实现了配置的隔离与按需加载。

安装与启用

安装该插件需要先构建或打包,然后通过 dsh plugin 命令添加到 Web GUI 配置中。

pnpm pack
mv dsh-project-mcp-<version>.tgz ~/.dsh/packages/
dsh plugin --profile web add file:$HOME/.dsh/packages/dsh-project-mcp-<version>.tgz

安装完成后,必须重启 Web GUI 才能生效。

配置文件与优先级

插件默认读取项目根目录下的 .dsh/mcp.json 文件。通过配置 localFiles 和 globalFiles,可以控制读取文件的顺序和范围。

  • globalFiles:列出在项目文件之前读取的全局文档,默认为空列表 []。
  • localFiles:列出项目自身的文档,默认为 ['.dsh/mcp.json']。

读取顺序遵循全局优先于本地的原则。如果多个文档中存在同名服务器,后读取的文档会覆盖先前的配置。

// <project>/.dsh/mcp.json
{
  "mcpServers": {
    "rider": {
      "type": "http",
      "url": "http://127.0.0.1:64343/stream",
      "headers": { "IJ_MCP_SERVER_PROJECT_PATH": "/abs/path/to/project/src/App" }
    },
    "playwright": { "command": "npx", "args": ["-y", "@playwright/mcp@latest"] },
    "tracker": {
      "command": "uvx",
      "args": ["yandex-tracker-mcp@latest"],
      "env": { "TRACKER_TOKEN": "${YANDEX_TOKEN}" }
    }
  }
}

变量与环境变量

插件支持在配置中使用 ${VAR} 和 ${input:NAME} 语法进行变量替换。这些变量值的查找顺序如下:

  1. <project>/.dsh/.env(需启用 envFiles)
  2. <project>/.env(需启用 envFiles)
  3. process.env
  4. KEY 在凭证文件中(默认为 $DSH_HOME/.credentials.yaml)

变量支持在 command、args、env、cwd、url 和 headers 中使用。如果环境变量或 .env 文件中未定义,则该项配置会报错。插件不会将解析后的值写回编辑器。

会话行为

  • 懒加载:默认启用。只有当会话开始工作(第一次执行步骤)时,才会挂载该项目的 MCP 服务器。这避免了会话创建时的初始化开销。
  • 空闲释放:如果会话在指定时间内(默认 300000ms)没有活动,插件会释放该会话的 MCP 挂载。
  • 错误处理:配置文件中的某一行损坏不会阻止其他服务器的挂载,损坏的条目会以 error 状态显示。

注意事项

  1. 敏感文件:当 envFiles 为 true 时,插件会读取项目根目录下的 .env 和 .dsh/.env 文件。这些文件包含敏感信息,不应提交到版本控制系统。
  2. 服务器名称限制:MCP 服务器的名称必须匹配正则表达式 [A-Za-z0-9_-]{1,32},否则会被自动处理并发出警告。
  3. 配置格式:支持 { "mcpServers": { ... } }、{ "servers": { ... } } 或直接的对象映射。未知字段会被忽略。

总结

dsh-project-mcp 为 DSH 提供了项目级别的 MCP 服务器管理能力。通过本地配置文件、变量替换和懒加载机制,它解决了多项目开发中 MCP 服务共享与隔离的痛点。对于需要在单一 DSH 实例中管理多个项目、且每个项目依赖不同 MCP 工具的场景,该插件提供了直接的解决方案。

GitHub 仓库 | 插件目录

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

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

小夜