Desktop: MCP tool calls dispatched ~3-6 s apart while the server answers in 50 ms (CLI sessions unaffected)
Summary
In Claude Code Desktop sessions, MCP tool calls to a local server are dispatched roughly 3–6 seconds apart, while the same server answers direct requests in ~50 ms (p50). The overhead is specific to the desktop app's MCP dispatch layer — terminal (CLI) sessions using the same server do not show it.
Environment
- Claude Code Desktop, macOS (arm64), observed 2026-07-11 and 2026-07-12 (CLI versions 2.1.150 → 2.1.207 over the period)
- MCP server: McNeel Rhino-MCP-Platform 0.1.5 — a stdio router in front of a localhost HTTP JSON-RPC server running inside Rhino 8
- Tools auto-allowed (no permission prompt involved in the measurements)
Measurements
All timestamps are captured inside the tool server, so model/latency between turns is excluded. "Two calls in one batch" means two tool_use blocks in a single assistant turn — no thinking in between.
| Path | Result |
|---|---|
| Desktop session, 2 calls in one batch (2026-07-11) | executed 3.07 s apart |
| Desktop session, same test (2026-07-12, after app updates) | executed 6.09 s apart |
| Same server, direct HTTP POST (30 no-op tool calls) | min 35 ms, p50 50 ms, p95 69 ms |
| Vendor stdio router driven directly over stdio (as the desktop drives it) | initialize 133 ms; tools/call 54–78 ms |
| Same server registered as a user-scope stdio MCP server, used from a terminal claude session, 3 parallel calls | landed 58–155 ms apart |
So every layer below the desktop app (router, HTTP hop, server, Rhino's UI-thread dispatch) accounts for ~50–80 ms per call; the remaining ~3–6 s per call is added by the desktop app's MCP dispatch path. The CLI harness adds only tens of milliseconds.
Reproduction sketch
- Register any localhost MCP server whose tool can echo a server-side timestamp (e.g. a
run_pythonthat printstime.time()). - In a desktop session, issue two such tool calls in one assistant turn; diff the echoed timestamps (~seconds apart).
- Repeat from a terminal
claudesession with the same server registered viaclaude mcp add(~tens of ms apart).
Impact
Interactive CAD automation (Rhino via MCP) pays seconds × N for call sequences that the server executes in milliseconds — 60–120× the server's real latency. Current workarounds: batching many operations into one tool call, and preferring terminal sessions over desktop for tool-heavy work.
Question
What does the desktop MCP dispatch path do per call (polling interval? per-call IPC/sandbox hop? sequential per-call session setup?) — and can it be brought closer to the CLI's dispatch cost?
---
🤖 Measurements and report prepared with Claude Code