Nichts0v0/dsh-mcp-manager ↗★ 3
dsh-mcp-manager
MCP server manager for DeepSeek Harness: manage MCP servers from the Web settings page, stored globally in $DSH_HOME/mcp-servers.json, connected/disconnected at runtime. 适合需要动态启停、编辑和管理多个MCP服务器的开发者。
같은 패키지 이름의 다른 저장소
설치
검증된 bundle이 없거나 호환성 검사에 실패했습니다. 먼저 저장소 설명을 읽어 주세요. 전체 README 읽기 ↗
Usage
Open Settings → MCP Server Manager:
- Server cards show the name, transport, status badge, endpoint and
OAuthtags; disabled cards are dimmed. - Enable/disable switch — disabling disconnects immediately and unloads the server's tools.
- Reconnect — waits for the connection result and refreshes automatically (configurable wait, default 15 s).
- Edit — change transport / URL / command / headers / OAuth settings (
serverNameis immutable); saving hot-reconfigures the live connection. - OAuth authorization — for
streamable-httpservers requiring authentication, chooseOAuth 2.0, click Authorize (OAuth) to log in via browser popup, and manage token revocation. - Delete — lives at the top of the edit page, behind a two-step confirm (3 s window).
- Add —
streamable-http(URL + optional headers or OAuth 2.0) orstdio(command + args), with a configurable connection-wait timeout.
Statuses
| Status | Meaning |
|---|---|
| Connected (n tools) | tools are registered |
| Connecting | handshake / reconnecting in progress |
| Offline | was connected, but the server process is unreachable (probed) |
| Error | initial connect failed (reason shown) or 30 s connect timeout |
| Disabled | switched off — not connected, no tools |
Configuration file
$DSH_HOME/mcp-servers.json — shared by every profile and session:
{
"version": 1,
"servers": [
{
"serverName": "my-http-server",
"transport": "streamable-http",
"url": "http://127.0.0.1:8080/mcp",
"enabled": true
},
{
"serverName": "my-oauth-server",
"transport": "streamable-http",
"url": "https://api.example.com/mcp",
"authType": "oauth",
"enabled": true,
"oauth": {
"clientId": "client-id-123",
"scopes": ["read", "write"],
"tokens": {
"accessToken": "secret_access_token",
"refreshToken": "secret_refresh_token",
"expiresAt": 1787304425000
}
}
}
]
}
The file is watched live: manual edits (add / remove / change / enable) take effect within ~1 s; POST /mcp-manager/api/reload triggers it on demand.
HTTP API
| Method | Path | Purpose |
|---|---|---|
| GET | /mcp-manager/api/health | liveness + version + store path |
| GET | /mcp-manager/api/servers | list with live (probed) status |
| GET | /mcp-manager/api/servers/ | single server |
| POST | /mcp-manager/api/servers | add & connect |
| POST | /mcp-manager/api/servers//update | update config & hot-reconnect (serverName immutable) |
| POST | /mcp-manager/api/servers//toggle | enable / disable (`{"enabled": true |
| POST | /mcp-manager/api/servers//reconnect | disconnect & reconnect |
| DELETE | /mcp-manager/api/servers/ | disconnect & delete |
| POST | /mcp-manager/api/reload | re-read the config file from disk |
| POST | /mcp-manager/api/oauth/discover | probe RFC 9728 OAuth metadata for an MCP URL |
| POST | /mcp-manager/api/oauth/start | generate PKCE authorization URL for browser login |
| GET | /mcp-manager/api/oauth/callback | OAuth redirect callback & token exchange |
| POST | /mcp-manager/api/oauth/revoke | clear saved OAuth credentials and disconnect |
Configuration file
$DSH_HOME/mcp-servers.json — shared by every profile and session:
{
"version": 1,
"servers": [
{
"serverName": "my-http-server",
"transport": "streamable-http",
"url": "http://127.0.0.1:8080/mcp",
"enabled": true
},
{
"serverName": "my-oauth-server",
"transport": "streamable-http",
"url": "https://api.example.com/mcp",
"authType": "oauth",
"enabled": true,
"oauth": {
"clientId": "client-id-123",
"scopes": ["read", "write"],
"tokens": {
"accessToken": "secret_access_token",
"refreshToken": "secret_refresh_token",
"expiresAt": 1787304425000
}
}
}
]
}
The file is watched live: manual edits (add / remove / change / enable) take effect within ~1 s; POST /mcp-manager/api/reload triggers it on demand.