Skip to content

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

Description

@jagdeepgill

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

  2. 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

Workaround

Use Claude Desktop instead of Claude Code CLI for multiple MCP servers.

Metadata

Metadata

Assignees

No one assigned

    Labels

    duplicateThis issue or pull request already exists

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions