danhcng3822f/dsh-mcp-kimicodeandmgr--packages-dsh-mcp-mgr ↗★ 1
dsh-mcp-mgr
MCP engine and manager for DeepSeek Harness: three-layer mcp.json config, stdio/http/sse transports, OAuth, and tool registration
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:danhcng3822f/dsh-mcp-kimicodeandmgr#80382cfaa7af7b5efe169f0da579bfb98e22a00f&path:packages/dsh-mcp-mgr说明文档
阅读完整 README ↗Configuration
Layers, lowest precedence first. A later layer overrides an earlier entry of the same name.
| Layer | Shown in the UI as | Path | Writable from the UI |
|---|---|---|---|
| user | Global | ~/.dsh/mcp.json (or $DSH_HOME/mcp.json) | yes |
| project root | Project | /.mcp.json | no |
| project local | Local | /.dsh/mcp.json | no |
The project-root layer exists only when the workspace is inside a git repository; outside one it is skipped entirely. Both project layers load only after you trust the workspace in the Settings tab, because a project-level stdio entry runs a command supplied by the repository. Until then they are neither loaded nor watched. Trust decisions live in ~/.dsh/trusted-workspaces.json.
{
"mcpServers": {
"unity": { "url": "http://localhost:8090/mcp" },
"filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/data"] },
"legacy": { "transport": "sse", "url": "https://example.com/sse" },
"paid": { "url": "https://api.example.com/mcp", "auth": "oauth" },
"token": { "url": "https://api.example.com/mcp", "bearerTokenEnvVar": "MY_MCP_TOKEN" }
}
}
- A missing
transportis inferred:commandmeansstdio,urlmeanshttp. A legacy SSE endpoint therefore needs an explicit"transport": "sse"— see USAGE.md - Per-entry
enabled,startupTimeoutMs,toolTimeoutMs,enabledTools,disabledTools - Remote entries take
headers,bearerTokenEnvVar(the variable name, never the token), andauth: "oauth" - With no
cwdan stdio child runs in the workspace directory. A relativecwdin a project layer resolves against the file that declared it, so a repository can ship a working entry without knowing where it was cloned; in the user layer it is passed through as written and resolves against the workspace - Secrets never reach the browser: the Remote surface projects
envtoenvKeysandheaderstoheaderKeys - The parent environment is scrubbed before an stdio child starts (anything matching
KEY|PASSWORD|SECRET|TOKEN, plusDSH_*); an entry's ownenvis merged on top, so a deliberately configured credential survives