MisRightW/dsh-mcp-servers--packages-mcp-mcp-servers ↗★ 1
@deepseek-ai/dsh-mcp-servers
运行时 MCP 连接注册表与 Remote 网关,可从 Web UI 列出、连接和断开服务器。 适合需在 Web UI 动态管理 MCP 连接的用户,配合管理页面使用。
安装
此插件尚未提供可验证的 bundle,或兼容性检查未通过。请先阅读仓库说明。 阅读完整 README ↗
说明文档
阅读完整 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.