Skip to content

使用官方 MCP SDK 重构客户端 - #1643

Merged
CodFrm merged 3 commits into
mainfrom
refactor/mcp-official-sdk
Aug 3, 2026
Merged

使用官方 MCP SDK 重构客户端#1643
CodFrm merged 3 commits into
mainfrom
refactor/mcp-official-sdk

Conversation

@CodFrm

@CodFrm CodFrm commented Aug 3, 2026

Copy link
Copy Markdown
Member

Checklist / 检查清单

  • Fixes mentioned issues / 修复已提及的问题
  • Code reviewed by human / 代码通过人工检查
  • Changes tested / 已完成测试

未关联自动关闭的 issue;人工审查尚未完成。

Description / 描述

背景

现有 MCP client 手写了 JSON-RPC over HTTP 的 POST-only 子集,固定按 JSON 解析响应,无法处理标准 Streamable HTTP 的 SSE 响应、协议 header、session 与 transport 生命周期。此改动响应 PR #1573 的讨论

本次改动

  • 使用 @modelcontextprotocol/sdkClientStreamableHTTPClientTransport 直接替换手写协议实现。
  • 保留 ScriptCat 的 server 配置、域类型映射、单文本结果归一化与 ToolRegistry 集成。
  • 正确等待 SDK client 关闭。
  • 将 client 测试改为协议边界 fake server,覆盖 JSON/SSE 工具响应、资源、提示词、认证 header、session 与关闭行为。
  • SDK 固定为 1.29.01.30.0 未满足仓库 minimumReleaseAge 约束,因此没有绕过供应链保护。

实现考虑

只导入 HTTP client 入口,没有引入 stdio transport。生产 service worker 产物扫描未发现 node:child_processnode:streamnode:processcross-spawnStdioClientTransport

已知限制

本次没有扩展 OAuth、sampling、elicitation 或 tasks 等产品能力;仍只迁移现有工具、资源和提示词能力。

Screenshots / 截图

N/A — 非视觉改动。

验证

  • pnpm exec vitest run --no-coverage --reporter=verbose src/app/service/agent/core/mcp_client.test.ts src/app/service/agent/service_worker/mcp.test.ts:17/17 通过。
  • pnpm run typecheck:通过。
  • pnpm run lint:ci:通过。
  • pnpm run build:通过;仅有既有 bundle size 与 Monaco dynamic require 警告。
  • Chromium MV3 scratch:真实加载 dist/ext,经 serviceWorker/agent/mcpApi 完成添加 server、testConnection、工具/资源/提示词发现及删除,1/1 通过。
  • service worker 产物 Node/stdio 依赖扫描:通过。
  • pnpm run test:ci:3490/3491 通过;唯一失败是未修改的 MigrationSection.test.tsx 在全套并发下超过 850ms(约 931ms)。原测试随后单独复跑 48ms 通过,未修改该测试或其实现。
  • git diff --check:通过。

参考

@CodFrm
CodFrm merged commit 13ddf85 into main Aug 3, 2026
9 of 10 checks passed
@CodFrm
CodFrm deleted the refactor/mcp-official-sdk branch August 3, 2026 03:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant