zfdx123/dsh-atelier--packages-dsh-mcp-manager ↗★ 0

@zfdx123/dsh-mcp-manager

MCP 服务器管理器:在 DSH 设置页配置 MCP 服务器,宿主侧按配置热挂载/卸载 mcp-client 实例(支持内网自签名证书) 适合需要动态管理、调试MCP客户端及处理自签名证书的用户。

Package
@zfdx123/dsh-mcp-manager
Compatibility
Unverified
Harness peer range
^0.1.6-alpha.1
Cordis peer range
^4.0.2
Version
1.0.1
License
NOASSERTION
Last updated
Sep 21, 2026

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:zfdx123/dsh-atelier#8a3566cc5762e3e6d26b23c75c6ee3c4a336304f&path:packages/dsh-mcp-manager

HTTP 接口(供设置页使用)

方法路径说明
GET/api/mcp/servers返回 { rev, servers, status };rev 是命名空间修订号(乐观锁),status 是 serverName -> { state: 'ok'|'error'|'disabled', message, detail, preflight?, failure? }。message 是主文案(前置检查的判定优先),failure 是并入的异步失败细节(仅错误态),preflight 是那条判定的原文(存在即表示主文案受它保护)
POST/api/mcp/servers请求体 { rev?, servers: [...] },整体替换并触发重挂载;rev 与当前修订不符返回 409 { code: 'conflict', rev };校验失败返回 400 { error }

接口的注册方式(DSH 0.1.5 起的兼容点):

  • 插件优先用 ctx.connection.fetch.register({ path: '/api/mcp/servers', methods: ['GET','HEAD','POST'], requestBody: 'buffered', fetch }) 注册到 /api 共享通道的精确 Fetch 路由上。物理载体会先做 Host/Origin 信任栅栏与浏览器鉴权(connection.requestRejection),未鉴权的请求在到达插件之前就被 401/403 挡下。
  • 只有在拿不到 connection 服务时(旧版 DSH 或非 Web 组装),才退回裸 webServer.register,并由插件自己调用 connection.requestRejection;连它也没有时只接受本机回环来源。
  • 这条约束很重要:该接口能写入任意 command,而宿主会立即执行它。裸注册 + 无鉴权 = 未授权的任意命令执行(dsh web --host 0.0.0.0 场景下尤其致命)。

配置

配置持久化在 settings.yaml 的 mcp 命名空间(mcp.servers,数组),设置页保存即写入,热生效。文件里的结构与各键默认值:

mcp:
  servers:
    - serverName: my-stdio-server
      enabled: true
      transport: stdio            # stdio | streamable-http
      command: npx
      args: ['-y', '@some/mcp-server']
      env:
        SOME_TOKEN: 'env:SOME_TOKEN'   # env:NAME / cred:NAME 引用,密钥不入盘
      cwd: ''
      url: ''
      headers: {}
      toolCallTimeoutMs: 60000
      failOnStartupError: false
      reconnectEnabled: true
      reconnectMaxAttempts: 10
      tlsInsecure: false          # 仅 streamable-http
      tlsCaFile: ''               # 仅 streamable-http,PEM 绝对路径(推荐)
键默认说明
serverName—(必填)唯一名,决定工具名前缀 mcp____…
enabledtrue关闭后实例停止、工具移除,但配置保留
transportstdiostdio / streamable-http
command / args / env / cwd'' / [] / {} / ''stdio 传输的连接参数
url / headers / tlsInsecure / tlsCaFile'' / {} / false / ''streamable-http 传输的连接参数
toolCallTimeoutMs60000工具调用超时
failOnStartupErrorfalse首次连接/工具同步失败是否直接报错(默认自动重连)
reconnectEnabled / reconnectMaxAttemptstrue / 10断线重连;只写改过的子键,其余交回 mcp-client 默认值

完整示例(含内网自签名 HTTPS 的两种解法)见 examples/mcp-servers.example.yaml。