zfdx123/dsh-atelier--packages-dsh-mcp-manager ↗★ 0
@zfdx123/dsh-mcp-manager
MCP 服务器管理器:在 DSH 设置页配置 MCP 服务器,宿主侧按配置热挂载/卸载 mcp-client 实例(支持内网自签名证书) 适合需要动态管理、调试MCP客户端及处理自签名证书的用户。
설치
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:zfdx123/dsh-atelier#8a3566cc5762e3e6d26b23c75c6ee3c4a336304f&path:packages/dsh-mcp-managerHTTP 接口(供设置页使用)
| 方法 | 路径 | 说明 |
|---|---|---|
| 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____… |
enabled | true | 关闭后实例停止、工具移除,但配置保留 |
transport | stdio | stdio / streamable-http |
command / args / env / cwd | '' / [] / {} / '' | stdio 传输的连接参数 |
url / headers / tlsInsecure / tlsCaFile | '' / {} / false / '' | streamable-http 传输的连接参数 |
toolCallTimeoutMs | 60000 | 工具调用超时 |
failOnStartupError | false | 首次连接/工具同步失败是否直接报错(默认自动重连) |
reconnectEnabled / reconnectMaxAttempts | true / 10 | 断线重连;只写改过的子键,其余交回 mcp-client 默认值 |
完整示例(含内网自签名 HTTPS 的两种解法)见 examples/mcp-servers.example.yaml。