MisRightW/dsh-mcp-servers--packages-mcp-mcp-servers ↗★ 1
@deepseek-ai/dsh-mcp-servers
Runtime MCP connection registry and Remote gateway: list, connect, and disconnect MCP servers from the Web UI 适合需在 Web UI 动态管理 MCP 连接的用户,配合管理页面使用。
Install
This plugin has no verified bundle, or compatibility checks failed. Read the repository notes first. Read the full README ↗
README
Read the full README ↗@deepseek-ai/dsh-mcp-servers
English | 中文
Runtime MCP connection manager: an app-scoped registry of live MCP connections behind ctx.mcp, a Remote gateway exposing list/connect/disconnect to clients, and user-settings persistence for dynamic connections. Mounted by the web-app bundle; @deepseek-ai/dsh-client-ui-mcp-servers renders the management page.
Roles
- Registry — every live connection has one entry: a dynamic connection owned by this service (created at runtime) or a static connection registered by an
@deepseek-ai/dsh-mcp-clientinstance throughctx.mcp.registerStatic(). Static instances join when the manager is active; a deployment without it is unchanged. Static connections are config-owned and never disposed from the registry. - Gateway —
ctx.remote.mcpexposeslist()(live status of every connection),tools(serverName)(one connection's registered tool names and descriptions, exactly as the model sees them),toolNames()(a flat projection of every connection's tool names, for the input-trigger candidate menu),connect(request)(validate against the mcp-client Config schema, start a supervised connection, persist), anddisconnect(serverName)(dispose a dynamic connection, persist the removal). - Persistence — dynamic connections are stored under the
mcpuser-settings namespace and replayed on boot. Each replay starts a supervised connection with the same reconnect policy as a configured server.
Dynamic connection semantics
connectnormalizes the wire request through the same Config schema thedsh-mcp-clientplugin uses; defaults are filled and invalid requests fail withinvalid-config.failOnStartupErrorfrom the wire is always normalized tofalse: dynamic connections contain startup failures and let the supervisor reconnect per policy, mirroring the plugin'sfailOnStartupError: falsebehavior.- A
serverNamealready in use — by another dynamic connection or a registered static instance — fails withduplicate-server-name. connectreturns as soon as the supervisor is started and registered; the connection's live phase (connecting / connected / reconnecting / disabled) and tool count are read on everylist.disconnectrefuses static connections (static-connection) and unknown names (not-found).
Config
No configuration. The service injects tools and settings.
Services provided
| Service | Usage |
|---|---|
ctx.mcp | Connection registry + Remote gateway (list / connect / disconnect) |
Services consumed
| Service | Usage |
|---|---|
ctx.tools | Passed to the mcp-client supervisor for tool registration |
ctx.settings | Persist dynamic connection configs under the mcp namespace |
Model Experience
Indirectly, through the supervised connections this service starts: the mcp-client bridge owns every tool schema, result, and rendered text the model sees from them.
KV Cache effect
A managed connection's tool set is stable between re-syncs, so the request prefix stays reusable while it is unchanged; the mcp-client bridge's discovery and re-sync semantics own any invalidation.
Known Limitations and Deferred Work
- Static connections cannot be disconnected from the UI — they are config-owned; editing
cordis.ymlis the management path. - Registry join is apply-time best-effort — a static
mcp-clientinstance registers only when the manager is already active; the shipped web-app composition mounts the manager before user patch rows, so this holds in practice. - No Resources or Prompts bridging — inherited from the mcp-client bridge.
- UI-added connections persist as full normalized configs — env vars and headers stored under the
mcpsettings namespace are not redacted beyond the settings service's own secret handling.