6.9 KiB
需求:R-020 QMT Bridge MCP 能力内建(神之一手自注册 MCP,去三方插件依赖)
登记:2026-09-08 | 来源:老师指令(2026-09-08 新需求)| 需求状态:已完成 归档日期:2026-09-08 | 实现迭代:18-QMTBridgeMCP内建(验收通过 2026-09-08) 讨论记录索引:R-020.md 正文(Q1-Q6 逐项拍板 + 老师澄清:移除对象=三方 dsh-skill-mcp-panel、官方 dsh-mcp-client 可依赖);实现细节见 docs/04-迭代记录/18-QMTBridgeMCP内建/(含 迭代复盘.md) 归档路径:本文件已移入 05-需求池/已完成/
迭代状态标记:已定稿(2026-09-08)→ 已实现(迭代 18)→ 已归档(验收通过 2026-09-08)
需求描述(老师原始诉求)
老师原话(2026-09-08):当前我们给 DSH 配置了一个 MCP,用于连接 QMT bridge,这个配置是在另一个插件中配置的(三方插件 dsh-skill-mcp-panel 在 profile cordis.patch.yml 受管块里插入 QMT_Bridge_MCP 实例——管理 UI + 写宿主 patch;真正连接的是 DSH 官方 dsh-mcp-client)。我希望可以在神之一手插件的配置 tab 中,添加了 QMTBridge 的配置后,可以自动检查 MCP 连接信息,这样我们不需要依赖三方插件来加入 MCP 的能力。
2026-09-08 老师澄清(指令修正):不要的是第三方 dsh-skill-mcp-panel(设置菜单「技能 / MCP」+ 它写的宿主 patch 受管块);依赖 DSH 官方 @deepseek-ai/dsh-mcp-client 是允许的。实现 = 神之一手 apply 内动态挂载官方 dsh-mcp-client(参照 mcp_router 实证),移除三方 dsh-skill-mcp-panel 及其受管块。
定稿语义
- MCP 能力内建:神之一手在自己的 apply 内按 QMT 连接配置动态挂载 DSH 官方 @deepseek-ai/dsh-mcp-client(插件内管理:挂载/切换/卸载/状态都由神之一手控制),QMT Bridge 的 MCP 工具由神之一手自己接入;不再依赖三方 dsh-skill-mcp-panel 的面板与宿主 patch 受管块;
- REST 直连不变(技术约束-003):插件 UI/tab 数据仍走 REST,MCP 是插件自带的 Agent 侧能力;
- MCP url 自动派生:激活连接 baseUrl + /mcp,零新增配置字段。
讨论记录(2026-09-08,第一轮,Q1-Q6 老师逐项拍板 → 定稿)
| # | 问题 | 结论(老师拍板) |
|---|---|---|
| Q1 | MCP 客户端挂载粒度 | 只使用当前激活的那个连接:仅激活连接挂 1 个 dsh-mcp-client 实例(serverName 固定 QMT_Bridge_MCP,切换激活即热切换 MCP url,工具名 mcp__QMT_Bridge_MCP__* 保持稳定);不逐连接各挂实例 |
| Q2 | 现有三方条目处置 | 现在的移除(2026-09-08 老师澄清:移除对象 = 第三方 dsh-skill-mcp-panel):① 卸载/停用三方 dsh-skill-mcp-panel(其「技能 / MCP」设置菜单与宿主 patch 管理职责一并移除);② 删除 cordis.patch.yml 中其受管块(QMT_Bridge_MCP 不再由三方写入);QMT 的 MCP 连接通过神之一手插件自己管理——插件 apply 内动态挂载官方 @deepseek-ai/dsh-mcp-client(依赖官方库、管理在我们插件内),含连接 CRUD/激活切换的全生命周期联动 |
| Q3 | MCP url 与字段 | 自动来:默认派生 baseUrl + /mcp,不需要每连接 mcpUrl 覆盖字段 |
| Q4 | 「自动检查 MCP 连接信息」口径 | 两处状态出口:① 设置页「QMT 连接配置」连接卡片可检查(手动触发);② 对话窗口顶端状态指示灯区新增一个 MCP 状态(与现有持仓/盘口同步指示灯并列) |
| Q5 | 失败与重连语义 | 采纳建议:对齐 failOnStartupError:false + reconnect(初始连不上不拒绝插件激活;连接丢失自动指数退避重连;期间保留断开状态不崩插件) |
| Q6 | 范围确认 | 不做通用 MCP 管理,只做 QMT 的 MCP 内建;通用任意 MCP 服务器管理面板不做(该域属 mcp-router / dsh-skill-mcp-panel,另议) |
定稿边界
做:
- 神之一手 apply 内动态挂载/卸载 dsh-mcp-client(唯一实例,serverName=QMT_Bridge_MCP,url=激活连接 baseUrl+/mcp);
- 生命周期联动:启动(激活默认/上次连接)→ 挂载;添加/编辑/删除/激活连接 → MCP 挂/切/卸(对齐现有 qmt-connections API 热切换编排);激活连接被删自动切默认并重挂;
- MCP 状态出口 ×2:设置页连接卡片 MCP 检查/状态;对话窗口顶端状态指示灯区新增 MCP 状态(三态风格对齐产品约束-012 指示灯体系);
- 移除三方 dsh-skill-mcp-panel:卸载其插件 + 移除宿主 cordis.patch.yml 受管块(Q2;属宿主配置变更,按 editing-cordis-compositions 技能流程操作 + 老师确认);
- 失败/重连语义按 Q5(failOnStartupError:false + reconnect)。
不做(本期):通用 MCP 服务器管理面板(Q6,含自建「任意 MCP 管理 UI」——Q6 明确不做);插件 UI/tab 数据源改走 MCP(技术约束-003 REST 直连不变);多 serverName 并存;自研 MCP 协议客户端(老师定:依赖官方 dsh-mcp-client 即可,不重造轮子)。
计划阶段待办(定稿后第一件事:技术可行性调研)
- 依赖解析实证:one-divine-lot 运行时能否 import(@deepseek-ai/dsh-mcp-client)(宿主 CLI 依赖树 / profile node_modules 解析路径核实,对照 mcp_router 的 peerDependencies 声明与日志实证;确认后在 package.json 补 peer 依赖);
- 动态挂载生命周期设计:add/update/remove/activate 连接 → MCP 实例 挂/切/卸 编排(对齐 qmt-connections API 现有热切换逻辑,MCP url 随激活 baseUrl);
- MCP 状态查询与展示:服务端 MCP 状态端点(已连接/断开 + 工具数 + 错误/重连信息)+ 设置页卡片检查 + 会话头部指示灯新增 MCP 状态(对齐产品约束-012/UI约束的指示灯体系);
- 宿主受管块迁移:cordis.patch.yml 移除 QMT_Bridge_MCP 块的精确操作步骤(保留块外内容逐字节不动);
- 前端连接卡片表单是否需提示「MCP 将自动随激活连接启用」(Q4 落点 UI 文案)。
关联
- 终极目标:目标-001(DSH 插件形态·复用宿主 MCP 能力)、目标-008(真实交易系统接入)
- 既有需求:R-004(QMT 连接配置,本需求数据基础:settings.qmtConnections + 激活/默认语义 + 热切换编排);R-015(会话头部指示灯体系,MCP 状态灯并入同一区)
- 设计约束:技术约束-003(REST 直连不变)、技术约束-008(连接配置存储/热切换);定稿后需补新约束条目(技术约束:「插件内建 MCP 客户端注册规范」;产品约束:「MCP 状态出口(设置卡片 + 会话头部指示灯)」)
- 参考实现:mcp_router(ds-plugins/mcp_router)——动态 ctx.plugin(dsh-mcp-client) 实证
验收
(立项后写入迭代验收标准.md)