MCP servers silently dropped when startup batches can't complete before prompt processing

Resolved 💬 3 comments Opened Mar 18, 2026 by sawuapara Closed Mar 22, 2026

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-analyzer was the first key in mcpServers in settings.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

  1. All configured MCP servers should eventually start, even if batched
  2. If a server can't start before prompt processing, it should start in the background (lazy/deferred connection)
  3. At minimum, a warning should be logged for servers that were configured but never spawned
  4. JSON key order should be respected, or a priority field 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

  1. Configure 12+ MCP servers in ~/.claude/settings.json
  2. Start a new Claude Code session
  3. grep "Starting connection" ~/.claude/debug/latest — count will be less than the number of configured servers
  4. Servers missing from the log were silently dropped

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗