MisRightW/dsh-mcp-servers--packages-mcp-mcp-servers ↗★ 1

@deepseek-ai/dsh-mcp-servers

运行时 MCP 连接注册表与 Remote 网关,可从 Web UI 列出、连接和断开服务器。 适合需在 Web UI 动态管理 MCP 连接的用户,配合管理页面使用。

套件
@deepseek-ai/dsh-mcp-servers
相容性
待驗證
Harness 依賴範圍
^0.1.0-rc.8
Cordis 依賴範圍
^4.0.1
版本
0.1.0-rc.5
授權
MIT
最近更新
2026年8月20日

安裝

此插件尚未提供可驗證的 bundle,或相容性檢查未通過。請先閱讀倉庫說明。 閱讀完整 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-client instance through ctx.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.mcp exposes list() (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), and disconnect(serverName) (dispose a dynamic connection, persist the removal).
  • Persistence — dynamic connections are stored under the mcp user-settings namespace and replayed on boot. Each replay starts a supervised connection with the same reconnect policy as a configured server.

Dynamic connection semantics

  • connect normalizes the wire request through the same Config schema the dsh-mcp-client plugin uses; defaults are filled and invalid requests fail with invalid-config.
  • failOnStartupError from the wire is always normalized to false: dynamic connections contain startup failures and let the supervisor reconnect per policy, mirroring the plugin's failOnStartupError: false behavior.
  • A serverName already in use — by another dynamic connection or a registered static instance — fails with duplicate-server-name.
  • connect returns as soon as the supervisor is started and registered; the connection's live phase (connecting / connected / reconnecting / disabled) and tool count are read on every list.
  • disconnect refuses static connections (static-connection) and unknown names (not-found).

Config

No configuration. The service injects tools and settings.

Services provided

ServiceUsage
ctx.mcpConnection registry + Remote gateway (list / connect / disconnect)

Services consumed

ServiceUsage
ctx.toolsPassed to the mcp-client supervisor for tool registration
ctx.settingsPersist 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.yml is the management path.
  • Registry join is apply-time best-effort — a static mcp-client instance 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 mcp settings namespace are not redacted beyond the settings service's own secret handling.