
Dormant-by-default MCP for DeepSeek Harness. The official bridge registers every tool of every configured MCP server at startup, so all their JSON schemas enter every model request forever. This plugin keeps servers dormant and model-activatable through exactly one tool — mcp_summon — and what a summon delivers is the server’s real native tools for the rest of the session: real schemas, native UI rendering, per-tool approval gates, image results intact.
The numbers (measured, JSON bytes ÷ 4)
| Server | Tools | ≈ tokens / turn |
|---|---|---|
| xerj | 22 | 13,325 |
| chrome-devtools-mcp | 29 | 5,313 |
| test fixture | 5 | 226 |
mcp_summon itself (2 servers) |
1 | 398 |
Idle servers cost 0 — no process, no schema, no spawn at load.
How it works
- At load the plugin registers
mcp_summononly. Its description carries a byte-stable card per server: name, capability summary, tool count, and an honest “activating adds ~N tokens/turn” line from a disk-cached measurement — a server is never spawned just to card it. summon(server)spawns the stdio child, fetchestools/list, and registers each tool viactx.tools.registerundermcp__<server>__<tool>, keeping every disposer. The harness re-assembles the tool set per turn, so from the next turn the model calls them directly.release(server)runs the disposers and kills the child. Crash or session end falls back to dormant — the safe direction.
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).
Install
dsh plugin --profile <your-profile> add dsh-mcp-summon
List servers in the profile’s cordis.patch.yml (same row shape as @deepseek-ai/dsh-mcp-client, stdio-only in v1). Restart. Nothing spawns until summoned.
vs dsh-mcp-lazy
dsh-mcp-lazy is a permanent gateway: one proxy tool, schemas on demand, ~92.8% savings — strictly cheaper for many rarely-used servers. Summon wins when one server is used hard all session: after activation you get first-class native tools, not calls routed through a proxy.
Known limitations (v1)
stdio only · tools only (no resources/prompts/sampling) · no OAuth · no idle reclamation (release is explicit) · no reconnect with backoff · cards freeze within a session · secrets in args land in argv.