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 sync completed 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
Workaround
Use Claude Desktop instead of Claude Code CLI for multiple MCP servers.
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
Steps to Reproduce
~/.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 listObserve 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:
Test 2: Multiple servers - only 1 connects
With 6 servers configured:
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:
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
uv synccompleted for all)MCP_TIMEOUT=60000)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:
Related Issues
Workaround
Use Claude Desktop instead of Claude Code CLI for multiple MCP servers.