前言¶
在 DSH 里用 MCP 扩展智能体能力时,常见做法是在 Profile 里写死一批服务器。多仓库、多项目并行时,Profile 里的全局配置容易和当前工作目录对不上:要么工具过多、要么缺项目专用的 MCP。维护者 micln 的 dsh-mcp-autoload 把 MCP 声明收进项目根目录下的清单文件,每个 Agent 会话按当前项目自动挂载,会话结束即断开,其它项目的声明不会泄漏进当前会话。
这是什么¶
dsh-mcp-autoload 是 DeepSeek Harness(DSH)的 Web 侧插件(npm 包名 dsh-mcp-autoload,当前资料版本 0.4.0,MIT 许可证)。它会在项目根(向上查找最近带有 .git 标记的祖先目录)读取 .agents/mcp.json,在创建 Agent 时并行挂载其中启用的 MCP 服务器,并在 Web UI 中展示本会话可用的 MCP 清单;Profile 里已配置的用户级 MCP 仅展示,不能通过本插件的弹层改写。
核心功能¶
- 项目级发现:默认配置文件路径为
.agents/mcp.json,可通过插件 patch 中的configPath、projectRootMarkers调整(默认根标记为.git)。 - 会话级作用域:服务器挂在 Agent 的 Cordis 作用域内,工具名形如
mcp__<serverName>__<rawToolName>;连接在 Agent 销毁时关闭。不同项目、不同会话可独立使用同名 server。 - 启动时挂载:在 Agent 创建阶段等待首次连接,首回合即可用工具;多服务器并行连接,单个失败只记日志并跳过,不阻塞其余(
failOnStartupError为 false)。 - 传输方式:有
url时用 Streamable HTTP;否则用command启动 stdio 子进程,工作目录为会话 cwd。支持type: stdio | http;sse会被拒绝并打日志。disabled: true或enabled: false的条目静默跳过。 - 会话内开关:Web 弹层可在浏览器确认后启用/禁用项目清单中的条目;清单会加锁、备份(保留最新五份)并原子替换;禁用后立即卸载工具;重新启用若挂载失败会回滚清单。清单每个会话开始时读一次(含 resume),手动改文件需新开会话才生效。
- 安全提示:清单中的
command会在会话启动时执行,与信任 npm postinstall 同级;只应在可信项目中添加并审查该文件。
安装与启用¶
环境要求:DSH >=0.2.1-0 <0.3.0,Node.js ^22.19.0 || >=24.0.0。dsh plugin 会把参数转发到 profile 目录内的 pnpm。
安装到 web profile:
dsh plugin --profile web add dsh-mcp-autoload
包声明了 dsh.bundle.patch,CLI 会把 bundle 注册进 profile 的 dsh.profile.bundles。安装后需重启 dsh web(宿主端在启动时加载),再在浏览器中硬刷新(Cmd/Ctrl+Shift+R)。
本地开发时用绝对路径以 link: 形式添加:
dsh plugin --profile web add /absolute/path/to/dsh-mcp-autoload
更新与卸载:
dsh plugin --profile web add dsh-mcp-autoload@latest
dsh plugin --profile web remove dsh-mcp-autoload
典型用法¶
在项目根(含 .git 的目录)创建 .agents/mcp.json。最小示例:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}
stdio 与 HTTP、环境变量、开关字段的完整示例(资料原文):
{
"mcpServers": {
"playwright": {
"type": "stdio",
"command": "npx",
"args": ["@playwright/mcp@latest"],
"env": { "PLAYWRIGHT_BROWSERS_PATH": "~/.cache/ms-playwright" }
},
"postgres_local": {
"type": "http",
"url": "http://localhost:3000/mcp",
"headers": { "Authorization": "Bearer local-dev-token" }
},
"experimental_server": {
"enabled": false,
"command": "uvx",
"args": ["some-experimental-mcp@latest"]
},
"legacy_server": {
"disabled": true,
"url": "http://old-mcp.internal/mcp"
}
}
}
字段要点:command/args/env 用于 stdio;url/headers 用于 HTTP;args 不经 shell 展开。server 名称需匹配 [A-Za-z0-9_-]{1,32},否则会被规范化为确定性 slug(与 DSH ACP bridge 相同算法)。
插件默认配置(写在 patch 中,一般无需改):
- id: mcp-autoload
name: dsh-mcp-autoload
config:
configPath: .agents/mcp.json
projectRootMarkers: ['.git']
适用场景与注意¶
适合需要在仓库内版本化管理 MCP、且希望 DSH Web 会话随 cwd 自动带上对应工具的团队或个人。不适合把不可信第三方仓库里的 .agents/mcp.json 直接交给 DSH 执行——安装插件前请阅读 GitHub 仓库 源码与 MIT 许可证;插件与所启动的 MCP 子进程以当前 DSH 进程权限运行。
Peer 包(@deepseek-ai/cordis、@deepseek-ai/schemastery、@deepseek-ai/dsh-mcp-client 等)由 DSH 安装提供,bundle 仅作版本校验。
结尾¶
dsh-mcp-autoload 把 MCP 从「全局 Profile 配置」拉回「项目清单 + 会话挂载」,减少跨项目工具泄漏,并在 UI 里做有限的启停管理。目录页:micln/dsh-mcp-autoload;源码与 README:github.com/micln/dsh-mcp-autoload。