[BUG] Claude Code CLI can only connect to one MCP server at a time - multiple stdio servers fail
Bug Description
Claude Code CLI v2.1.20 can only successfully connect to one MCP server when multiple stdio-based servers are configured. All other servers fail to connect, even though they work perfectly when tested individually or when used with Claude Desktop.
Environment
- Claude Code version: 2.1.20
- OS: macOS Darwin 25.0.0
- Platform: darwin (Apple Silicon)
Steps to Reproduce
- Configure multiple MCP servers in
~/.claude.json:
{
"mcpServers": {
"server_1": {
"command": "/path/to/python",
"args": ["server1.py"],
"cwd": "/path/to/server1"
},
"server_2": {
"command": "/path/to/python",
"args": ["server2.py"],
"cwd": "/path/to/server2"
}
}
}
- Run
claude mcp list
- Observe that only 1 server connects, others show "Failed to connect"
Expected Behavior
All configured MCP servers should connect successfully, as they do in Claude Desktop.
Actual Behavior
Only 1 server connects. The specific server that connects can vary, but it's always only 1 out of N configured servers.
Diagnostic Evidence
Test 1: All servers work individually
When each server is configured alone, it connects 100% of the time:
$ claude mcp list
flight_server: ✓ Connected
$ claude mcp list
hotel_server: ✓ Connected
Test 2: Multiple servers - only 1 connects
With 6 servers configured:
$ claude mcp list
flight_server: ✗ Failed to connect
hotel_server: ✓ Connected
event_server: ✗ Failed to connect
geocoder_server: ✗ Failed to connect
weather_server: ✗ Failed to connect
finance_server: ✗ Failed to connect
Running multiple times shows consistent 1/6 success rate (sometimes different server wins).
Test 3: All servers work in parallel outside Claude Code
Testing the same 6 servers with a Python script that spawns them in parallel and sends MCP initialize requests:
✓ flight_server: Connected (server: flight-assistant)
✓ hotel_server: Connected (server: hotel-assistant)
✓ event_server: Connected (server: event-assistant)
✓ geocoder_server: Connected (server: geocoder)
✓ weather_server: Connected (server: weather-search)
✓ finance_server: Connected (server: finance-assistant)
Result: 6/6 connected, 0/6 failed
Test 4: All servers work in Claude Desktop
The exact same servers configured in Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json) connect successfully - 6/6.
What This Rules Out
- ❌ Server code issues (all servers respond correctly to MCP protocol)
- ❌ Configuration format issues (same config works in Claude Desktop)
- ❌ Dependency issues (
uv synccompleted for all) - ❌ PATH issues (tested with absolute paths)
- ❌ Timeout issues (tested with
MCP_TIMEOUT=60000) - ❌ UV conflicts (tested with direct Python invocation instead of
uv run)
Likely Root Cause
The bug appears to be in Claude Code CLI's subprocess/connection management when handling multiple stdio MCP servers simultaneously. Possible causes:
- Race condition when spawning multiple subprocesses
- Only processing the first server's initialization response
- File descriptor/pipe multiplexing issues
Related Issues
- #1611 - MCP servers fail to connect despite correct configuration
- #3279 - MCP server loses connection
- #5037 - MCP servers in .mcp.json not loading properly
Workaround
Use Claude Desktop instead of Claude Code CLI for multiple MCP servers.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗