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-bridge 由 KYinCode 維護,是一個 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,可使用 command、args、env、cwd。
  • 支持 streamable-http transport,可使用 url、headers。
  • 使用 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,默認 toolCallTimeoutMs 爲 60000,idleTimeoutMs 爲 300000;idleTimeoutMs 設爲 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

env 和 headers 中的 ${NAME} 佔位符會從 host process environment 展開。

聲明一個 streamable-http MCP server

如果 MCP server 暴露爲 HTTP endpoint,可以配置 url 和 headers:

{
  "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}。
  • command:stdio transport 的啓動命令。
  • args:stdio transport 的參數。
  • env:stdio transport 的額外環境變量。
  • cwd:stdio transport 的子進程工作目錄;相對路徑相對項目根目錄解析。
  • url:streamable-http transport 的 MCP server URL。
  • headers:streamable-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,要求選擇唯一 serverName。dsh-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 配置形狀。
  • 需要 stdio 或 streamable-http 兩類 MCP server。
  • 在 DSH web profile 中按項目隔離 MCP tools。
  • 本地迭代插件,希望走 user patch row 熱安裝路徑。

使用前建議注意:

  • 它不是 official DeepSeek package,安裝前應檢查源碼、依賴與 MIT 許可證。
  • 插件會讀取項目配置,並可能啓動 command 或連接 url;它會運行在當前 dsh 進程權限下。
  • env 和 headers 中的 ${NAME} 會從 host process environment 展開,不要把敏感信息寫到你不能控制暴露範圍的位置。
  • command 和 url 必須恰有一個,否則會無法推斷 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
羽毛球分组比赛记分
小程序二维码

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

小夜