前言¶
在 DeepSeek Harness(DSH)里接入 MCP 时,原生 MCP 客户端往往在进程启动时就把所有已配置的服务器拉起来,并把全部工具暴露给每一个会话。会话一多、服务一多,子进程和工具面都会跟着膨胀,而很多对话其实只会用到其中一两个 MCP。
下面介绍社区插件 dsh-mcp-session-catalog(维护者 dxc-dxc,分类:工作流)。它把 MCP 改成按需模式:服务平时休眠,只有当前会话显式加载时才冷启动;同一 Host 内可复用底层连接,工具只注册到调用方会话,并在空闲一段时间后自动回收。
这是什么¶
dsh-mcp-session-catalog 是面向 DSH 的会话隔离、按需 MCP 管理插件。README 将其概括为:连接复用、作用域隔离与空闲进程回收。它直接读取 DSH Loader 配置树,识别已声明的 MCP 服务,并为模型注册 mcp_catalog、mcp_load 等管理工具与系统提示。
社区目录页:https://www.skillhub.cn/plugins/dxc-dxc/dsh-mcp-session-catalog
源码与文档:https://github.com/dxc-dxc/dsh-mcp-session-catalog
许可证:MIT(见仓库 LICENSE)。
核心功能¶
以下能力均来自仓库 README 的 Features 与 Usage 说明。
- 按需冷启动:服务默认不启动;会话调用
mcp_load时才拉起子进程。 - 连接池复用:同一 Host 内多个会话共享单个 MCP 进程,减轻重复开销。
- 会话作用域隔离:工具仅向调用方会话注册,未加载的会话看不到对应工具。
- DSH 原生发现:读取 Loader 配置树,自动识别已声明的 MCP 服务。
- 自动资源回收:按会话轮次计 idle;默认连续 20 轮未调用则释放工具并退出无用进程(可通过
inactiveTurnsThreshold调整)。
安装与启用¶
官方 README 给出的安装命令如下(占位符 <username> 需按你实际使用的 GitHub 用户名或组织替换,勿自行拼接未在文档中出现的写法):
dsh plugin --profile desktop add github:<username>/dsh-mcp-session-catalog
本地调试时,可在插件源码目录挂载:
dsh plugin --profile desktop add "link:$(pwd)"
package.json 中声明的运行环境为 Node >=22,DSH >=0.2.1-rc.2 <0.2.2,且 os 字段为 ["darwin"]。在非 macOS 环境启用前,应自行核对当前 DSH 与插件版本是否匹配。
启用插件后,需要在 Loader 配置里同时声明「按需管理器」和「交由插件托管的 MCP 条目」。要点是:希望由本插件按需拉起的 MCP,应设 disabled: true,以关闭官方客户端的常开行为,但保留连接定义。
示例(片段):
- insert:
# 启用按需管理器
- id: mcp-session-catalog
name: '@dxc-dxc/dsh-mcp-session-catalog/v2_4'
config:
inactiveTurnsThreshold: 20 # 空闲回收轮数(默认 20)
# 声明 MCP 服务(disabled: true 交由本插件按需托管)
- id: mcp-filesystem
name: '@deepseek-ai/dsh-mcp-client'
disabled: true
config:
transport: stdio
serverName: filesystem
command: npx
args: ['-y', '@modelcontextprotocol/server-filesystem', '/path/to/dir']
若 MCP 连接较多,可用独立 JSON 维护,并在管理器上指定 serversFile:
- id: mcp-session-catalog
config:
serversFile: '~/.dsh/mcp-connections/servers.json'
典型用法¶
插件会向模型暴露管理类工具。下列 JSON 为 README 中的调用参数示例;实际工具名以你当前 DSH 会话中的注册名为准。
查询目录(不启动服务)¶
用 mcp_catalog 查看所有可用服务及当前会话的加载状态:
{}
按需加载¶
用 mcp_load 为当前会话挂载指定服务;工具在下一模型步骤生效:
{
"server": "filesystem"
}
挂载后,会话内可像原生 MCP 一样调用对应工具,例如 README 提到的 mcp__filesystem__read_file 等形式。
主动卸载¶
任务结束后可提前释放租约:
{
"server": "filesystem",
"action": "unload"
}
典型流程可以是:先用 mcp_catalog 确认有哪些服务、当前会话是否已加载 → 需要时再 mcp_load → 用 MCP 工具完成工作 → 可选 unload 或依赖默认空闲回收。
适用场景与注意¶
适合谁:在同一 DSH Host 上跑多会话、配置了多个 MCP,但希望「用哪个开哪个」、减少常开子进程和全局工具污染的智能体或工作流开发者。
使用前请自行核对:
- 插件与 MCP 子进程以当前 dsh 进程权限运行;
command、args及 filesystem 等服务的访问路径会直接影响本机安全,安装前应阅读源码与 MIT 许可证,并只加载你信任的服务定义。 - 配置里
disabled: true的语义是交给本插件托管,而不是「彻底禁用 MCP」;漏配管理器或serverName不一致会导致加载失败。 - 仓库
package.json标明平台为 darwin;若在 Linux 等环境使用,需以实际测试结果为准,不能假设与 README 示例完全一致。 - SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;星标与版本以你打开仓库时的页面为准(当前资料中 GitHub 星标为 0,插件版本
2.4.0来自package.json)。
结尾¶
dsh-mcp-session-catalog 把 DSH 里的 MCP 从「启动即全量、全会话可见」调整为「目录可查、按需加载、会话隔离、空闲回收」,适合作为多 MCP 工作流里的资源调度层。进一步细节以 README 与 docs/ 为准。
- 目录页:https://www.skillhub.cn/plugins/dxc-dxc/dsh-mcp-session-catalog
- GitHub:https://github.com/dxc-dxc/dsh-mcp-session-catalog