Desktop: MCP tool calls dispatched ~3-6 s apart while the server answers in 50 ms (CLI sessions unaffected)

Open 💬 0 comments Opened Jul 12, 2026 by taylor252627-glitch

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

  1. Register any localhost MCP server whose tool can echo a server-side timestamp (e.g. a run_python that prints time.time()).
  2. In a desktop session, issue two such tool calls in one assistant turn; diff the echoed timestamps (~seconds apart).
  3. Repeat from a terminal claude session with the same server registered via claude 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

View original on GitHub ↗