Files
qiming/qimingclaw/crates/agent-electron-client/docs/MCP-SERVER-STARTUP-PERF-REPORT.md

13 KiB
Raw Blame History

MCP 服务器启动性能分析报告

报告日期: 2026-03-20
分析范围: 5 次新会话启动日志
日志来源: C:\Users\soddygo\.qimingclaw\logs\
代码版本: crates/agent-electron-client/src/main/services/packages/mcp.ts


执行摘要

本报告分析了 QimingClaw 应用中 7 个 MCP 服务器的启动性能,基于 5 次真实会话的日志数据。主要发现:

  • uvx 工具缓存优化效果显著: Fetch 启动时间从 11s 降至 1.8s(优化 84%
  • npx 工具表现稳定: whois 和 mcp-server-chart 稳定在 2.9-3.0s
  • SSE 服务端性能差异大: 需求分析 143ms vs image-understanding 4.8s
  • 引擎复用可节省 5.8s: 冷启动 6.4s vs 复用 0.6s

代码实现要点

根据 mcp.ts 的实现:

// uvx 命令被重写为 uv tool runuv >= 0.10 后 uvx multicall 已废弃)
export function resolveUvCommand(command: string, args: string[]): {
  if (base === "uvx") {
    return { command: uvPath, args: ["tool", "run", ...args] };
  }
}

这意味着 uvx mcp-server-fetch 实际执行的是 uv tool run mcp-server-fetch


测试会话概览

# 会话 ID 时间 项目 ID 总耗时 引擎状态
1 fac459ca-425d-4a9a-a0ec-29c162979f59 10:15:16.649 1541412 7,492ms 冷启动
2 2d25ece6-e670-49de-a228-ba6a5e194936 11:09:48.171 1541421 7,822ms 复用
3 00c9428d-fd5d-4870-837d-3e238458dc40 12:19:52.110 1541421 7,800ms 复用
4 91d5c45d-8c8a-4136-ae08-e051a55e5db9 12:24:12.221 1541421 8,005ms 复用
5 0bd55f76-c229-411e-9519-0abca58db801 12:25:32.656 1541421 7,908ms 复用

MCP 服务器启动耗时详细数据

1. whois (npx -y @bharathvaj/whois-mcp@latest)

会话 启动时间 完成时间 耗时 进程启动 工具加载
#1 10:15:41.261 10:15:44.992 3,731ms 42ms 3,689ms
#2 11:09:58.013 11:10:00.967 2,952ms 37ms 2,915ms
#3 12:19:57.688 12:20:00.747 3,059ms 41ms 3,018ms
#4 12:24:38.915 12:24:41.634 2,717ms 37ms 2,680ms
#5 12:25:39.463 12:25:42.348 2,883ms 38ms 2,845ms

分析: npx 工具启动时间稳定在 2.7-3.1s,主要耗时在 npm 包下载/验证。进程启动很快37-42ms

相关代码 (mcp.ts):

// npx 命令直接透传,不做特殊处理
// 启动时通过 spawn 执行: npx -y @bharathvaj/whois-mcp@latest

2. mcp-server-chart (npx -y @antv/mcp-server-chart)

会话 启动时间 完成时间 耗时 进程启动 工具加载
#1 10:15:47.273 10:15:50.428 3,155ms 32ms 3,123ms
#2 11:10:01.184 11:10:04.044 2,860ms 31ms 2,829ms
#3 12:20:00.951 12:20:03.843 2,892ms 34ms 2,858ms
#4 12:24:46.735 12:24:49.639 2,903ms 30ms 2,873ms
#5 12:25:43.956 12:25:46.976 3,019ms 36ms 2,983ms

分析: 与 whois 类似npx 启动稳定在 2.9-3.0s,包已缓存后性能稳定。


3. time (uvx mcp-server-time)

会话 启动时间 完成时间 耗时 进程启动 工具加载
#1 10:15:41.305 10:15:47.067 5,762ms 55ms 5,707ms
#2 11:09:58.051 11:10:00.328 2,277ms 50ms 2,227ms
#3 12:19:57.728 12:19:59.625 1,897ms 53ms 1,844ms
#4 12:24:38.965 12:24:40.456 1,490ms 52ms 1,438ms
#5 12:25:39.513 12:25:41.113 1,598ms 54ms 1,544ms

趋势: 持续优化,从 5.8s 降至 1.5s,累计优化 74%

分析: uv 工具缓存逐渐预热,后续启动更快。

相关代码 (mcp.ts):

export function resolveUvCommand(command: string, args: string[]): {
  if (base === "uvx") {
    // Always use `uv tool run` — the uvx multicall binary is broken in uv >= 0.10
    const uvName = isWindows() ? "uv.exe" : "uv";
    const uvPath = path.join(dir, uvName);
    if (fs.existsSync(uvPath)) {
      return { command: uvPath, args: ["tool", "run", ...args] };
    }
  }
}

实际执行的命令:uv tool run mcp-server-time --local-timezone=America/New_York


4. Fetch 网页内容抓取 (uvx mcp-server-fetch)

会话 启动时间 完成时间 耗时 进程启动 工具加载
#1 10:15:25.645 10:15:36.640 10,995ms 219ms 10,776ms
#2 11:09:50.347 11:09:53.940 3,593ms 189ms 3,404ms
#3 12:19:53.708 12:19:57.434 3,725ms 193ms 3,532ms
#4 12:24:13.703 12:24:15.836 2,133ms 78ms 2,055ms
#5 12:25:34.204 12:25:35.980 1,775ms 74ms 1,701ms

趋势: 大幅优化,从 11.0s 降至 1.8s,累计优化 84%

分析: uv 缓存效果最显著的 MCP第五次启动仅需 1.8s。


5. image-understanding-and-generation (SSE)

会话 启动时间 完成时间 耗时 协议检测 连接建立
#1 10:15:25.626 10:15:41.036 15,410ms 5,007ms 10,403ms
#2 11:09:50.321 11:09:55.089 4,768ms 4,768ms -
#3 12:19:53.708 12:19:58.476 4,768ms 4,768ms -
#4 12:24:13.703 12:24:18.471 4,768ms 4,768ms -
#5 12:25:34.204 12:25:38.972 4,768ms 4,768ms -

趋势: 服务端优化后稳定在 4.8s,比第一次快 69%

分析: SSE 连接耗时主要取决于服务端响应速度。

相关代码 (acpEngine.ts):

// MCP servers injection for qimingcode
if (config.mcpServers && Object.keys(config.mcpServers).length > 0) {
  const mcpConfig: Record<string, unknown> = {};
  for (const [name, srv] of Object.entries(config.mcpServers)) {
    if ("url" in srv && srv.url) {
      // URL 类型(来自 PersistentMcpBridge
      const urlSrv = srv as { url: string; type?: string };
      mcpConfig[name] = {
        type: urlSrv.type === "sse" ? "sse" : "streamable-http",
        url: urlSrv.url,
        enabled: true,
      };
    }
  }
}

6. 需求分析 (SSE)

会话 启动时间 完成时间 耗时 协议检测 连接建立
#1 10:15:41.288 10:15:41.755 187ms 141ms 46ms
#2 11:09:50.320 11:09:50.463 143ms 143ms -
#3 12:19:53.708 12:19:53.851 143ms 143ms -
#4 12:24:13.703 12:24:13.846 143ms 143ms -
#5 12:25:34.204 12:25:34.347 143ms 143ms -

分析: 服务端响应极快,稳定在 143ms是所有 MCP 中最快的。


7. chrome-devtools (HTTP Stream)

会话 启动时间 完成时间 耗时
#1 10:15:24.067 ~10:15:24.267 ~200ms
#2 11:09:50.318 11:09:50.506 188ms
#3 12:19:53.708 ~12:19:53.896 ~188ms
#4 12:24:13.703 ~12:24:13.891 ~188ms
#5 12:25:34.204 ~12:25:34.392 ~188ms

分析: 本地 HTTP 服务,启动极快且稳定,约 188ms。


性能对比汇总

按启动方式分组

启动方式 MCP 服务器 平均耗时 特点 代码实现
HTTP Stream chrome-devtools 188ms 本地服务,最快 persistentMcpBridge.ts
SSE (URL) 需求分析 143ms 服务端响应快 acpEngine.ts
SSE (URL) image-understanding 4,768ms 服务端响应慢 acpEngine.ts
npx -y whois, mcp-server-chart 2,900ms 需下载包,中等 mcp.ts
uvx time, Fetch 2,200ms 缓存后优化显著 mcp.ts

启动耗时排名第5次会话

排名 MCP 服务器 耗时 启动方式 状态
1 需求分析 143ms SSE 🚀 极快
2 chrome-devtools 188ms HTTP Stream 🚀 极快
3 Fetch 1,775ms uvx
4 time 1,598ms uvx
5 whois 2,883ms npx -y ➡️ 中等
6 mcp-server-chart 3,019ms npx -y ➡️ 中等
7 image-understanding 4,768ms SSE 🐢

关键发现

1. uv 工具缓存优化效果显著

工具 #1 → #5 优化 优化率
Fetch 11.0s → 1.8s 84%
time 5.8s → 1.6s 72%

uv 工具在多次使用后缓存逐渐预热,启动时间持续下降。

代码实现细节:

// uv 工具缓存位置: ~/.qimingclaw/uv/cache
// 工具安装位置: ~/.qimingclaw/uv/tools
// 首次运行下载,后续从缓存加载

2. npx 工具保持稳定

工具 #1 → #5 变化 特点
whois 3.7s → 2.9s 稳定,波动小
mcp-server-chart 3.2s → 3.0s 稳定,波动小

npm 包在首次下载后,后续启动时间稳定。

3. SSE 服务端性能差异大

工具 耗时 差异
需求分析 143ms 服务端响应快
image-understanding 4,768ms 服务端响应慢33倍

4. 引擎复用节省大量时间

启动方式 ACP Initialize 节省
冷启动 6,414ms -
复用 ~600ms ~5.8s

优化建议

立即执行(高收益)

将 npx 和 uvx 工具改为本地安装:

# npx 工具本地安装 (预计节省 2-3s)
npm install -g @bharathvaj/whois-mcp @antv/mcp-server-chart

# uvx 工具本地安装 (预计节省 1-2s)
uv tool install mcp-server-fetch mcp-server-time

代码修改建议 (mcp.ts):

// 添加本地 MCP 服务器检测逻辑
export function resolveMcpCommand(
  command: string,
  args: string[]
): { command: string; args: string[] } {
  // 检查本地安装
  const localPath = findLocalMcp(command);
  if (localPath) {
    return { command: localPath, args };
  }
  
  // 回退到 npx/uvx
  if (command === "npx") {
    return { command: "npx", args: ["-y", ...args] };
  }
  
  if (command === "uvx") {
    return resolveUvCommand(command, args);
  }
  
  return { command, args };
}

预期效果

指标 当前 优化后 提升
MCP 最长耗时 4.8s <500ms 90%
总会话时间 7.9s ~4s 50%
用户等待时间 7.9s ~2s 75%

服务端优化

  • image-understanding SSE 服务端响应需优化(目标 <500ms
  • 参考 需求分析 服务端实现143ms

附录:原始日志时间戳

会话 #1 (10:15)

  • whois: 10:15:41.261 → 10:15:44.992 (3,731ms)
  • mcp-server-chart: 10:15:47.273 → 10:15:50.428 (3,155ms)
  • time: 10:15:41.305 → 10:15:47.067 (5,762ms)
  • Fetch: 10:15:25.645 → 10:15:36.640 (10,995ms)
  • image-understanding: 10:15:25.626 → 10:15:41.036 (15,410ms)

会话 #2 (11:09)

  • whois: 11:09:58.013 → 11:10:00.967 (2,952ms)
  • mcp-server-chart: 11:10:01.184 → 11:10:04.044 (2,860ms)
  • time: 11:09:58.051 → 11:10:00.328 (2,277ms)
  • Fetch: 11:09:50.347 → 11:09:53.940 (3,593ms)
  • image-understanding: 11:09:50.321 → 11:09:55.089 (4,768ms)

会话 #3 (12:19)

  • whois: 12:19:57.688 → 12:20:00.747 (3,059ms)
  • mcp-server-chart: 12:20:00.951 → 12:20:03.843 (2,892ms)
  • time: 12:19:57.728 → 12:19:59.625 (1,897ms)
  • Fetch: 12:19:53.708 → 12:19:57.434 (3,725ms)
  • image-understanding: 12:19:53.708 → 12:19:58.476 (4,768ms)

会话 #4 (12:24)

  • whois: 12:24:38.915 → 12:24:41.634 (2,717ms)
  • mcp-server-chart: 12:24:46.735 → 12:24:49.639 (2,903ms)
  • time: 12:24:38.965 → 12:24:40.456 (1,490ms)
  • Fetch: 12:24:13.703 → 12:24:15.836 (2,133ms)
  • image-understanding: 12:24:13.703 → 12:24:18.471 (4,768ms)

会话 #5 (12:25)

  • whois: 12:25:39.463 → 12:25:42.348 (2,883ms)
  • mcp-server-chart: 12:25:43.956 → 12:25:46.976 (3,019ms)
  • time: 12:25:39.513 → 12:25:41.113 (1,598ms)
  • Fetch: 12:25:34.204 → 12:25:35.980 (1,775ms)
  • image-understanding: 12:25:34.204 → 12:25:38.972 (4,768ms)

相关代码文件

文件 描述
mcp.ts MCP 代理管理uvx/npx 命令解析
acpEngine.ts ACP 引擎MCP 配置注入
computerServer.ts HTTP 服务器,性能计时
mcpHelpers.ts MCP 辅助函数
persistentMcpBridge.ts 持久化 MCP 桥接

报告生成时间: 2026-03-20
分析工具: Claude Code
*日志来源: C:\Users\soddygo.qimingclaw\logs*