前言¶
在 DeepSeek Harness(DSH)裏接 MCP,常見做法是使用官方橋接 @deepseek-ai/dsh-mcp-client:啓動時連接所有已配置的服務端,並把每個工具都註冊成原生工具。結果是每一輪對話的請求裏都會帶上全部工具的 JSON Schema,即使用戶或模型從未調用過其中任何一個。README 中給出的實測示例裏,僅 xerj 一個服務端(22 個工具)就約 13,325 tokens/turn 的 schema 開銷。工具一多、描述一長,上下文會被長期佔滿。
下面介紹社區插件 dsh-mcp-summon(維護者 adithyanraj03,分類:工作流)。它在加載時只註冊一個 mcp_summon 工具,各 MCP 服務端默認休眠、零進程;模型在會話中途按需「召喚」,被激活的服務端會以與官方橋接相同的適配層註冊爲 真實原生工具(真實 schema、原生 UI、逐工具審批、圖片結果可進持久化存儲),用完後可 release 收回。
這是什麼¶
dsh-mcp-summon 是面向 DSH 的「默認休眠 MCP」插件:平時只佔一個召喚入口,需要哪臺 MCP 再拉起哪臺,並把該臺的工具掛進當前會話的工具集;會話結束或崩潰回退時,會回到休眠態(安全方向)。
- 倉庫:adithyanraj03/dsh-mcp-summon
- 目錄頁:skillhub.cn 插件頁
- 許可證:MIT(README badge)
- 運行要求:Node ≥ 22,DSH ≥ 0.2.x(package.json
engines)
與官方橋接的差異可以概括爲:啓動時不連 MCP、不展開全量 schema;激活後行爲與官方橋接一致,而不是長期用一個代理工具去「假裝」原生工具。
核心功能¶
加載時:一個工具 + 服務端卡片¶
插件在 apply 階段只註冊 mcp_summon。其描述裏會爲 cordis.patch.yml 裏配置的每個服務端生成一張「卡片」:能力摘要(可配 summary)、工具數量、以及按與 README 相同方法估算的每輪 schema 成本({name, description, parameters} 的 JSON 字節 ÷ 4)。卡片按 serverName 排序,會話內固定;測量緩存位於 $DSH_HOME/storages/dsh-mcp-summon/cache.json,不會僅爲做卡片而啓動服務端。
會話中:summon / status / release¶
模型通過 mcp_summon 自行激活或釋放服務端,例如:
mcp_summon({ action: "summon", server: "xerj" })
→ summoned xerj: 22 tools registered as mcp__xerj__* (~13,325 tokens/turn
for the rest of this session, visible from your next turn).
mcp_summon({ action: "status" })
→ Server states:
- xerj: summoned (22 tools, 53297 schema bytes ≈ 13325 tokens/turn, pid 41312)
- summon-fixture: dormant
mcp_summon({ action: "release", server: "xerj" })
→ released xerj: its tools unregister from your next turn and its process
stopped (a daemon it started keeps running — it is shared infrastructure).
要點:
- 召喚後工具名形如
mcp__<serverName>__*,Harness 每輪重新組裝工具集,從下一輪起可見。 release會註銷工具並關閉 transport(結束子進程);若配置了daemon,守護進程不會被殺掉,供其他會話或工具共用。- 激活一次會改變工具塊,該輪 prompt-cache 前綴會失效一次——README 寫明這是激活的 documented 代價,與官方橋接在啓動時全量註冊同理,只是推遲到真正需要時。
配置形態¶
與 @deepseek-ai/dsh-mcp-client 單行服務端配置同形,v1 僅 stdio。在 profile 的 cordis.patch.yml 中通過 config.servers: [...] 列出服務端。主要字段:
| 字段 | 必填 | 說明 |
|---|---|---|
serverName |
是 | [A-Za-z0-9_-]{1,32},對應 mcp__<server>__* 命名空間 |
transport |
是 | v1 爲 stdio |
command / args |
command 必填 | 啓動程序;密鑰勿放 args(argv 對 ps 可見) |
env |
否 | 放密鑰;spawn 前會對父環境做 credential scrub |
summary |
否 | 卡片上的能力段落 |
disableTools |
否 | 不暴露的工具名列表 |
toolCallTimeoutMs |
否 | 默認 60000 |
daemon |
否 | 代理型 stdio 服務端可先探活再 detached 啓動本地服務 |
daemon 典型場景:stdio 進程只是把調用轉發到本機長期服務(如 xerj 指向 http://localhost:9200)。召喚前探測 healthUrl;若無響應則 detached 啓動 daemon,輪詢健康後再連代理;release 只停代理,不停 daemon。
與 dsh-mcp-lazy 的取捨(README 摘要)¶
同生態裏還有 dsh-mcp-lazy:永久保留一個 gateway 代理工具,按需 search/describe/tool,schema 懶加載。README 對比段在截斷處未完整給出;已明確的是:summon 激活後是原生工具面,適合希望調用體驗與官方橋接一致、又只想爲「會用到的服務端」付 schema 成本的場景。
安裝與啓用¶
1、將插件加入指定 profile(命令來自 README):
dsh plugin --profile <your-profile> add dsh-mcp-summon
2、在該 profile 的 cordis.patch.yml 中配置 config.servers(插件包內附帶註釋示例)。
3、重啓 profile。加載時 不會 spawn MCP 進程,服務端保持 dormant,直到模型調用 mcp_summon。
可選:在插件倉庫根目錄用腳本估算你配置下的 token 代理值:
node scripts/measure-tokens.mjs --config ~/.dsh/profiles/web/cordis.patch.yml
典型用法小結¶
- 在
cordis.patch.yml寫好多個 MCP,但日常對話只保留mcp_summon的固定開銷(README 測得:頭部加兩張卡片約 398 tokens/turn,隨配置的服務端個數增長,不隨未召喚服務端的工具體積增長)。 - 任務需要某能力時,模型執行
summon,隨後直接使用mcp__<server>__*原生工具。 - 任務段落結束或要省上下文時,
release對應服務端;需要時用status查看 summoned / dormant 及 schema 字節與 pid。
README 還提到:對 xerj 用 disableTools 只保留 11 個搜索/hub 工具時,激活成本可從約 13,325 降到約 8,087 tokens/turn(相對全量約 39%),需在真實服務端上測量驗證。
適用場景與注意¶
適合:已在 DSH 裏配置多臺 MCP,但多數會話只會用到其中一部分;希望 schema 成本按「本次會話真正召喚的服務端」計費,且召喚後要與官方橋接一樣的原生工具與審批/UI 行爲。
注意:
- 插件以當前 DSH 進程的權限運行;
command、env、daemon會啓動或連接本機程序。安裝前請閱讀源碼與 MIT 許可證,確認服務端來源可信。 - 密鑰只應放在
env,不要寫進args。 - 社區目錄 skillhub.cn 獨立於 DeepSeek / 幻方,並非官方應用商店;DSH 生態理念是「一切皆插件」,選型以倉庫文檔爲準。
結尾¶
dsh-mcp-summon 把 MCP 從「啓動即全量註冊」改成「默認休眠、一鍵召喚、用完 release」,在保持官方橋接級原生工具語義的前提下,把 schema 開銷推遲到真正需要的服務端。若你在 Harness 裏堆了多臺 MCP,值得在 profile 裏試裝並配合 measure-tokens.mjs 看清各臺的卡片成本。
- 目錄頁:https://www.skillhub.cn/plugins/adithyanraj03/dsh-mcp-summon
- GitHub:https://github.com/adithyanraj03/dsh-mcp-summon