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 工具的場景,該插件提供了直接的解決方案。