[BUG] Windows: one broken MCP server entry in claude_desktop_config.json silently kills every cold session start (no turn, worker exits) — should degrade gracefully

Status Open
Maintainer reply None cached
Activity 1 comment · opened Aug 14, 2026

Environment

  • Claude Desktop 1.30096.1.0, Windows 11 Pro 26200, MSIX install
  • Local CCD sessions (Claude Code Desktop), several MCP servers configured in claude_desktop_config.json

Symptom

If claude_desktop_config.json contains one broken MCP server entry (in our case an ollama server whose command path the new ESM loader rejects), every cold session start dies silently:

22:12:37 [info] Resuming session local_f8064b7b-… in C:\<workspace>\<project>
22:12:37 [info] Starting local session local_f8064b7b-…
22:12:38 [error] [LocalMcpServerManager] Failed to connect to ollama: Only URLs with a scheme in: file, data, and node are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:' { code: -32603, … ProtocolError … }
22:12:38 [info] Loaded 15523 transcript messages for session …
(no turn is ever scheduled; the claude.exe worker is gone ~2 minutes later)

The user-visible effect: any programmatic delivery to an idle session (cross-session send_message, scheduled prompts, ScheduleWakeup) never produces a turn. Typing into an already-open session still works, which makes this very hard to attribute — everything looks healthy interactively while all automation is dead.

Expected

  • One failing MCP server should not abort the session's turn scheduling: start the session with that server skipped and surface the connect error to the user (banner/toast), instead of dying silently after Loaded … transcript messages.

Additional trap

  • The app reads claude_desktop_config.json only at app startup. Fixing the config on disk does nothing until the app is restarted, so a user who removes the broken entry keeps hitting the failure and reasonably concludes the entry was not the cause. A config re-read (or at least a log line "config changed on disk, restart to apply") would prevent this.

Repro

  1. Add an MCP server entry with an absolute Windows path that is not a valid file:// URL for the ESM loader.
  2. Restart the app, let a session go idle, send it a cross-session message.
  3. Observe Starting local sessionProtocolError → no turn, worker exits.
  4. Remove the entry from the config without restarting: behavior unchanged.
  5. Restart the app: cold start proceeds cleanly past MCP connect (the separate auto-submit issue #86069 remains).

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗