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} 语法进行变量替换。这些变量值的查找顺序如下:
<project>/.dsh/.env(需启用envFiles)<project>/.env(需启用envFiles)process.envKEY在凭证文件中(默认为$DSH_HOME/.credentials.yaml)
变量支持在 command、args、env、cwd、url 和 headers 中使用。如果环境变量或 .env 文件中未定义,则该项配置会报错。插件不会将解析后的值写回编辑器。
会话行为¶
- 懒加载:默认启用。只有当会话开始工作(第一次执行步骤)时,才会挂载该项目的 MCP 服务器。这避免了会话创建时的初始化开销。
- 空闲释放:如果会话在指定时间内(默认 300000ms)没有活动,插件会释放该会话的 MCP 挂载。
- 错误处理:配置文件中的某一行损坏不会阻止其他服务器的挂载,损坏的条目会以
error状态显示。
注意事项¶
- 敏感文件:当
envFiles为true时,插件会读取项目根目录下的.env和.dsh/.env文件。这些文件包含敏感信息,不应提交到版本控制系统。 - 服务器名称限制:MCP 服务器的名称必须匹配正则表达式
[A-Za-z0-9_-]{1,32},否则会被自动处理并发出警告。 - 配置格式:支持
{ "mcpServers": { ... } }、{ "servers": { ... } }或直接的对象映射。未知字段会被忽略。
总结¶
dsh-project-mcp 为 DSH 提供了项目级别的 MCP 服务器管理能力。通过本地配置文件、变量替换和懒加载机制,它解决了多项目开发中 MCP 服务共享与隔离的痛点。对于需要在单一 DSH 实例中管理多个项目、且每个项目依赖不同 MCP 工具的场景,该插件提供了直接的解决方案。