[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.jsononly 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
- Add an MCP server entry with an absolute Windows path that is not a valid
file://URL for the ESM loader. - Restart the app, let a session go idle, send it a cross-session message.
- Observe
Starting local session→ProtocolError→ no turn, worker exits. - Remove the entry from the config without restarting: behavior unchanged.
- Restart the app: cold start proceeds cleanly past MCP connect (the separate auto-submit issue #86069 remains).
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗