dsh-project-mcp-bridge:按项目加载 MCP servers 的 DSH 插件

前言

在 DSH 中,MCP servers 通常可以配置在 host 或 preset 层,适合通用能力。但如果你只想让某个项目的会话看到该项目的 MCP tools,比如项目专属的 GitHub server 或本地 API,而又不影响其他项目,可以把配置下放到项目根目录。

下面介绍 dsh-project-mcp-bridge。它在项目根目录发现 .dsh/mcp.json 后,会为该项目的会话注册其中声明的 MCP servers 的 tools。

这是什么

dsh-project-mcp-bridgeKYinCode 维护,是一个 DeepSeek Harness 客户端桥接插件。

它的主要作用是消费 MCP servers:读取 .dsh/mcp.json 中声明的 server,并在 DSH 会话中注册这些 server 提供的 tools。它不是 MCP server,也不是 official DeepSeek package。

项目根目录没有 .dsh/mcp.json 时,该项目的会话不受影响;文件存在后,对应项目会话自动获得其中声明的 MCP tools。

许可证为 MIT

核心功能

dsh-project-mcp-bridge 的核心能力如下:

  • .dsh/mcp.json 是否存在作为 opt-in 开关。
  • 工具命名格式为 mcp__<serverName>__<toolName>
  • 支持 stdio transport,可使用 commandargsenvcwd
  • 支持 streamable-http transport,可使用 urlheaders
  • 使用 mcpServers JSON shape,与 Claude Code、Cursor 和 VS Code 的该配置形状一致。
  • 保存 .dsh/mcp.json 后,运行中的项目会话会 re-resolve 配置并 fully rebuild 项目 MCP surface。
  • 连接按 agent/会话隔离,不池化;首次调用工具时 lazy connect。
  • 支持 per-call timeout 和 idle timeout,默认 toolCallTimeoutMs60000idleTimeoutMs300000idleTimeoutMs 设为 0 表示永不 disconnect。
  • serverName 与上层 preset/host 连接冲突时,默认跳过上层;配置 override: true 可强制使用项目连接,上层连接仍保持。

安装与启用

正常安装

正常使用时,用 DSH CLI 安装到 web profile:

dsh plugin --profile web add dsh-project-mcp-bridge

安装后重启一次 dsh web

dsh web

这一步是为了让 bundle layers 在启动时完成组合。之后修改 .dsh/mcp.json 可以热重载,不需要为每次配置变更重启 dsh web

热安装 dev path

如果你要本地迭代这个插件本身,并希望改动不经过 restart 生效,可以按 user patch row 方式安装。该路径不要使用 dsh plugin add,否则会在 bundle 注册之外再重复一行。

先切到 profile 目录:

cd ~/.dsh/profiles/web

安装包到 profile 的 node_modules

pnpm add dsh-project-mcp-bridge

再向 ~/.dsh/profiles/web/cordis.patch.yml 追加:

- insert:
    - id: dsh-project-mcp-bridge
      name: 'dsh-project-mcp-bridge'

这里的 name 是包名,不是 file:// 路径。该路径适合本地开发迭代;日常使用优先用上面的 bundle 安装方式。

典型用法

声明一个 stdio MCP server

MyProject/.dsh/mcp.json 中声明 GitHub server:

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "${GITHUB_TOKEN}"
      }
    }
  }
}

保存后,MyProject 下的会话就可以调用:

mcp__github__create_issue

envheaders 中的 ${NAME} 占位符会从 host process environment 展开。

声明一个 streamable-http MCP server

如果 MCP server 暴露为 HTTP endpoint,可以配置 urlheaders

{
  "mcpServers": {
    "local-api": {
      "url": "http://localhost:3000/mcp",
      "headers": {
        "Authorization": "Bearer ${MCP_TOKEN}"
      },
      "override": true
    }
  }
}

这个示例中,override 设为 true。如果上层 preset/host 已经提供同名的 local-api,插件会强制使用项目里的这条连接;上层连接仍保持,项目 tools 在同名工具可见性上胜出。

常用配置字段

配置字段名与 dsh-mcp-client 保持一致:

  • serverName:必填,即 mcpServers 的 JSON key,作为工具命名空间;必须匹配 [A-Za-z0-9_-]{1,32}
  • commandstdio transport 的启动命令。
  • argsstdio transport 的参数。
  • envstdio transport 的额外环境变量。
  • cwdstdio transport 的子进程工作目录;相对路径相对项目根目录解析。
  • urlstreamable-http transport 的 MCP server URL。
  • headersstreamable-http transport 的额外 headers。
  • toolCallTimeoutMs:单次调用超时,默认 60000
  • idleTimeoutMs:空闲断开时间,默认 300000;设为 0 表示永不断开。
  • override:当上层已提供同 serverName 时,是否强制使用项目连接,默认 false
  • transport:通常不需要手写;有 command 时推断为 stdio,有 url 时推断为 streamable-http。二者必须恰有一个。

冲突与热重载

与上层 MCP 的冲突

工具注册到 agent scope layer,可见性优先级是:

project > preset > host

当 preset/host 层已经提供同 serverName 的 MCP row 时,默认行为是跳过项目配置中的这个 server,保证项目会话仍能启动。

如果你确实希望项目连接覆盖上层同名 server,可以设置:

"override": true

注意,override 不会关闭上层连接。项目连接会加在上层之上,上层连接仍然保持;同名工具由 agent layer 的项目注册项遮蔽,模型实际调用项目连接。工具名本身不携带来源标记。

不同 serverName 或不同 tool name 可以共存。

官方 dsh-mcp-client 的 host row 与 preset row 之间如果出现重复 serverName,会 fail mount,要求选择唯一 serverNamedsh-project-mcp-bridge 在项目层与上层冲突时默认 skip,而不是让整个 mount 失败。

热重载

保存 .dsh/mcp.json 后,该项目的运行中会话会重新解析配置,并 fully rebuild 项目 MCP surface:

  • 新增 server:执行 schema sync,注册新 tools。
  • 删除 server:注销 tools,并关闭对应连接。
  • 修改 server:全量 rebuild,注销旧 tools、关闭连接、重新读取、重新注册。
  • 删除配置文件:卸载该项目的所有 MCP tools。

配置文件轮询约 500ms,debounce 300ms。保存后不需要新开 session。

适用场景与注意

适合以下情况:

  • 希望按项目声明 MCP servers,而不是全部放在 host 或 preset 层。
  • 希望复用 Claude Code、Cursor、VS Code 中已有的 mcpServers 配置形状。
  • 需要 stdiostreamable-http 两类 MCP server。
  • 在 DSH web profile 中按项目隔离 MCP tools。
  • 本地迭代插件,希望走 user patch row 热安装路径。

使用前建议注意:

  • 它不是 official DeepSeek package,安装前应检查源码、依赖与 MIT 许可证。
  • 插件会读取项目配置,并可能启动 command 或连接 url;它会运行在当前 dsh 进程权限下。
  • envheaders 中的 ${NAME} 会从 host process environment 展开,不要把敏感信息写到你不能控制暴露范围的位置。
  • commandurl 必须恰有一个,否则会无法推断 transport。
  • serverName 必须满足 [A-Za-z0-9_-]{1,32}

资源

  • GitHub:https://github.com/KYinCode/dsh-project-mcp-bridge
  • 目录页:https://www.skillhub.cn/plugins/KYinCode/dsh-project-mcp-bridge
羽毛球分组比赛记分
小程序二维码

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

小夜