loulangogogo/dsh-plugins-loulan--packages-mcp ↗★ 1

dsh-loulan-mcp

自动读取 .mcp.json(.dsh 根 + 工作区)并挂载其中的 MCP server 适合需要根据项目工作区或全局配置自动加载和运行MCP服务器的用户。

Package
dsh-loulan-mcp
Compatibility
Unverified
Harness peer range
^0.1.5-rc.2
Cordis peer range
^4.0.2
Version
0.4.0
Last updated
Sep 18, 2026

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:loulangogogo/dsh-plugins-loulan#c6abbd5cce7efcdf7c8434be5cc52e6f4e88945e&path:packages/mcp

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 条目如何映射

条目内容结果
含字符串 commandstdio:本进程拉起子进程;args / env / cwd 可选
含字符串 urlstreamable-http:连接远程服务;headers 可选
两者都有按 command 处理(stdio 优先)
两者皆无跳过该条目并打印告警
type 字段当前不参与判断(写了不影响结果)
非字符串的 args / env / headers 值被静默丢弃
serverName 不匹配 [A-Za-z0-9_-]{1,32}跳过该条目并打印告警

stdio 的默认工作目录:全局/工作区条目取 .mcp.json 所在目录;手动添加的条目取 会话工作区目录。

4.3 挂载时机

来源时机作用域卸载
~/.dsh/.mcp.jsonDSH 启动时全局,所有 agent 共享文件消失后刷新即卸载
工作区 .mcp.json(session.header.cwd)agent 创建/恢复时仅该会话agent 销毁自动卸载;会话内可临时停用
标签页「添加」上传的文件手动触发仅该会话可卸载(连上传内容一起丢弃);进程重启即消失

工作区 .mcp.json 与全局根命中同一个文件时跳过工作区挂载,清单只出现在「全局共享」组(避免重复挂载)。

4.4 「MCP」标签页

「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