[BUG] Claude Code CLI can only connect to one MCP server at a time - multiple stdio servers fail

Resolved 💬 3 comments Opened Jan 27, 2026 by jagdeepgill Closed Jan 31, 2026

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

  1. 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"
    }
  }
}
  1. Run claude mcp list
  1. 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:

  1. Race condition when spawning multiple subprocesses
  2. Only processing the first server's initialization response
  3. 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.

View original on GitHub ↗

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