loulangogogo/dsh-plugins-loulan--packages-mcp ↗★ 1
dsh-loulan-mcp
自动读取 .mcp.json(.dsh 根 + 工作区)并挂载其中的 MCP server 适合需要根据项目工作区或全局配置自动加载和运行MCP服务器的用户。
インストール
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:loulangogogo/dsh-plugins-loulan#c6abbd5cce7efcdf7c8434be5cc52e6f4e88945e&path:packages/mcpドキュメント
README 全文を読む ↗4. 使用
4.1 写 .mcp.json
放在工作区根目录(或 ~/.dsh/ 下作为全局共享):
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
},
"postgres": {
"command": "uvx",
"args": ["--with", "mcp" }
}
}
}
查找规则:只在起始目录本身查找 .mcp.json(~/.dsh 或会话工作区),不向上递归父目录。
4.2 条目如何映射
| 条目内容 | 结果 |
|---|---|
含字符串 command | stdio:本进程拉起子进程;args / env / cwd 可选 |
含字符串 url | streamable-http:连接远程服务;headers 可选 |
| 两者都有 | 按 command 处理(stdio 优先) |
| 两者皆无 | 跳过该条目并打印告警 |
type 字段 | 当前不参与判断(写了不影响结果) |
非字符串的 args / env / headers 值 | 被静默丢弃 |
serverName 不匹配 [A-Za-z0-9_-]{1,32} | 跳过该条目并打印告警 |
stdio 的默认工作目录:全局/工作区条目取 .mcp.json 所在目录;手动添加的条目取 会话工作区目录。
4.3 挂载时机
| 来源 | 时机 | 作用域 | 卸载 |
|---|---|---|---|
~/.dsh/.mcp.json | DSH 启动时 | 全局,所有 agent 共享 | 文件消失后刷新即卸载 |
工作区 .mcp.json(session.header.cwd) | agent 创建/恢复时 | 仅该会话 | agent 销毁自动卸载;会话内可临时停用 |
| 标签页「添加」上传的文件 | 手动触发 | 仅该会话 | 可卸载(连上传内容一起丢弃);进程重启即消失 |
工作区
.mcp.json与全局根命中同一个文件时跳过工作区挂载,清单只出现在「全局共享」组(避免重复挂载)。
4.4 「MCP」标签页

- 三组固定顺序:本工作区 → 手动添加 → 全局共享;空组不显示。
⟳刷新:先按磁盘现状同步全局配置,再重挂本会话;未变更的服务不动。有会话正在运行时返回409(界面显示原因)。+添加:选择一个.mcp.json上传并挂到当前会话。🗑卸载:仅前两组有入口,语义不同(见下表),带二次确认弹窗。- 工具名:默认折到 2 行,真实溢出时给「展开/收起」;服务未就绪或未暴露工具时显示「工具列表暂不可用」。
| 卸载目标 | 语义 |
|---|---|
| 本工作区 | 临时停用:释放挂载但保留来源,刷新会重新读取 .mcp.json 并挂回 |
| 手动添加 | 彻底清除:连保留的上传内容一起丢弃,刷新不会带回 |
| 全局共享 | 不提供入口,服务端亦返回 400;只能改文件 + 刷新(或重启)来改变 |
4.5 刷新到底做了什么
刷新(以及每次打开标签页拉取清单)都会先让全局配置与磁盘对齐:
全局 .mcp.json 的现状 | 行为 |
|---|---|
| 内容有变 | 增量重挂:新增的挂载、变更的先卸载再挂载、已删除的卸载 |
| 内容未变 | 只比对指纹,不卸载、不重挂(子进程不重启) |
| 文件不存在 | 卸载全部全局服务,「全局共享」组随之消失 |
| 存在但解析失败 | 保留现有挂载并告警(避免编辑中的半截文件把服务清空) |
本会话的工作区与手动添加同时会重挂(重新读取文件 / 重挂保留的上传内容)。
5. 配置
| 字段 | 说明 | 默认 |
|---|---|---|
cwd | .dsh 根目录(启动时读取全局 .mcp.json 的起点) | $DSH_HOME 或 ~/.dsh |
工作区部分无需任何配置:随 agent 的 session.header.cwd 自动发现并挂载,也没有开关。
如需覆盖默认值,在 profile 的 cordis.patch.yml 中配置:
- id: dsh-loulan-mcp
name: dsh-loulan-mcp
config:
cwd: /path/to/.dsh