dsh-mcp-session-catalog:DSH 会话级按需 MCP 管理

前言

在 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 说明。

  1. 按需冷启动:服务默认不启动;会话调用 mcp_load 时才拉起子进程。
  2. 连接池复用:同一 Host 内多个会话共享单个 MCP 进程,减轻重复开销。
  3. 会话作用域隔离:工具仅向调用方会话注册,未加载的会话看不到对应工具。
  4. DSH 原生发现:读取 Loader 配置树,自动识别已声明的 MCP 服务。
  5. 自动资源回收:按会话轮次计 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜