MCP servers silently dropped when startup batches can't complete before prompt processing
Summary
Claude Code starts MCP servers in batches of 3 with a concurrency limit. Once prompt processing begins (~12 seconds after startup), any remaining unstarted servers are silently abandoned — no error, no warning, no log entry. With 13 configured servers, only 7 consistently start.
Observed Behavior
Debug log (~/.claude/debug/latest) shows a clear batching pattern:
20:13:59.249 — Batch 1: gmail, playwright, quickbooks (3 servers started)
20:14:05.612 — Batch 2: harvest, bitbucket, atlassian (3 more, triggered after slowest in batch 1 finished)
20:14:08.049 — Batch 3: slack (1 more)
20:14:11.644 — Prompt processing begins (6 servers NEVER spawned)
The 6 servers that were never spawned have zero trace in the debug log — no "Starting connection", no error, no timeout, nothing. They simply don't exist as far as the log is concerned.
Key Details
- Concurrency limit: Appears to be 3 servers per batch
- Batch trigger: Next batch starts only after the slowest server in the current batch connects
- Cutoff: Once the user prompt is ready to process, remaining servers are abandoned
- JSON key order not respected:
video-analyzerwas the first key inmcpServersinsettings.json, but it was not in batch 1 (gmail, playwright, quickbooks were). Some internal sorting or shuffling occurs before spawning. - No user feedback: The user has no way to know servers were dropped. No warning in the UI, no log entry.
- Consistent across sessions: This pattern reproduced across multiple sessions with the same config.
Expected Behavior
- All configured MCP servers should eventually start, even if batched
- If a server can't start before prompt processing, it should start in the background (lazy/deferred connection)
- At minimum, a warning should be logged for servers that were configured but never spawned
- JSON key order should be respected, or a
priorityfield should be available so users can control which servers start first
Environment
- macOS (Darwin 24.6.0)
- Claude Code v2.1.63
- 13 MCP servers configured (mix of local scripts, npx, and remote)
Workaround
Reduce the number of configured servers to ~9 or fewer so they all fit within the startup window. Removed rarely-used servers (chrome-devtools, salesforce-dx, salesforce-hosted, email-monitor) to get below the threshold.
Reproduction
- Configure 12+ MCP servers in
~/.claude/settings.json - Start a new Claude Code session
grep "Starting connection" ~/.claude/debug/latest— count will be less than the number of configured servers- Servers missing from the log were silently dropped
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗