dsh-mcp-proxy
Context-cheap MCP access for DeepSeek Harness: two proxy tools instead of every server's full schema set, with lazy connections, an on-disk tool catalog, and idle disconnect
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:ben7am1n/dsh-mcp-proxy说明文档
阅读完整 README ↗dsh-mcp-proxy
Context-cheap MCP access for DeepSeek Harness.
The shipped dsh-mcp-client registers every tool of every configured server on ctx.tools, so a handful of MCP servers puts hundreds of JSON schemas into the system prompt of every request — whether or not the model ever calls one.
This plugin registers exactly two tools regardless of how many servers you configure, and reaches those servers lazily. The standing prompt cost is constant in the number of MCP tools available.
Install
dsh plugin --profile web add dsh-mcp-proxy
Then declare your servers by overriding the row (the shipped row has none — see Trust).
What the model sees
| Tool | Purpose |
|---|---|
mcp_discover | Search the tool catalog by keyword; returns each hit's server, name, description, and argument names |
mcp_call | Invoke one tool by server and name, passing arguments through unchanged |
The catalog is cached on disk, so mcp_discover answers from a cold start without connecting to anything, and keeps answering when a server is temporarily down.
How it behaves
- Nothing connects at boot. A server is contacted on first discovery or first call.
- A warm connection is reused across calls and closed after
idleDisconnectMsof silence. Concurrent calls share one handshake. - One unreachable server degrades discovery instead of failing it: the model gets the servers that answered, plus a named reason for each that did not.
- A tool-reported failure is a successful result carrying
isError: true, so a Code Mode caller branches on the flag rather than parsing prose. Only transport and protocol failures are tool errors. - Catalog entries for servers you removed are pruned at load, so a renamed server stops advertising tools nothing can call.
- A corrupt cache file starts empty rather than stopping the harness from booting — it is a derived cache, not a source of truth.
- Disposal closes every connection and clears every timer.