[BUG] Desktop (Code tab): desktop extensions missing from sessions started cold in a new worktree
Environment: Claude desktop 2.19675.0 (macOS 26.6.2, arm64) · Claude Code 2.1.286 (bundled) · Code tab, local sessions, worktree mode on
What breaks
I have a desktop extension installed, a stdio Node MCP server, and it is enabled and connected. When I start a new Code tab session, the app creates a worktree for it. That session never gets the extension's tools: it isn't in the session's MCP server list at all, not even as failed, so there's nothing to reconnect. Sessions the app had pre-warmed do get it. Restarting the app "fixes" it until the next cold start.
The app's server list for the session shows the extension being dropped. From ~/Library/Logs/Claude/main.log:
09:46:53 [CCD] Warming session local_d9e3…
09:46:53 [CCD] [reconcileRemoteMcpServers] Reconciling to 22 total servers ← includes the extension, ccd_host, ccd_settings
09:52:31 Starting local session local_c027… in <repo>/.claude/worktrees/troubleshoot-ci-failure-65e3da
09:52:32 [CCD] [reconcileRemoteMcpServers] Reconciling to 19 total servers ← extension, ccd_host, ccd_settings missing
Over 2026-10-01 to 2026-10-05: 4 of 4 warm spawns got 22 servers, and 10 of 10 cold worktree spawns got 19.
Reproduce
- Install any stdio desktop extension and confirm it's connected (Settings → Extensions).
- In the Code tab, start a new local session on a git repo with worktrees enabled.
- In that session, ask Claude to list its MCP tools, or check the session's MCP servers. The extension isn't there.
- Check
~/Library/Logs/Claude/main.log. The session'sReconciling to N total serverslist omits the extension.
Expected vs actual
- Expected: every local Code tab session gets the enabled desktop extensions, however it was spawned.
- Actual: only pre-warmed sessions do. A session started cold in a new worktree never does, and its MCP list can't be changed afterwards.
Ask
Make the cold-start (Starting local session + worktree) spawn path pass the same desktop-extension servers as the warm path.
<details>
<summary>Scope, and what was ruled out: not the extension, not the config, not the platform's install</summary>
- The extension server is healthy. Its log (
mcp-server-<name>.log) showsServer started and connected successfullyand a successfultools/listfrom 07:29 UTC, before and after the failing 09:52 session. - Not a reconnect or auth problem. In the failing session,
session_connectors_statusdoesn't list the server at all, rather than showing it asfailedorneeds_auth. ccd_hostandccd_settingsare dropped too, so the cold path seems to build a smaller server list overall, not just skip extensions.- Looks like a regression after
2.9939.4. A colleague on the Linux desktop beta,Claude 2.9939.4 (a166d8)built 2026-09-27, has the same extension installed (desktop extension only, noclaude mcpentry). He starts cold worktree sessions too (Starting local session … /.claude/worktrees/…) and gets the extension in them. Hismain.loghas noreconcileRemoteMcpServerslines. Neither did my own Mac log while I was on2.9939.2/2.9939.4: those lines first appear after I updated to2.19675.0. So the server-handout path that drops the extension seems to have shipped between2.9939.4and2.19675.0, rather than being macOS-specific. Caveat: I installed the extension on 2026-09-30, already on2.16120.0, so I have no Mac data point for it on the older build. - Workaround: register the same server as a user-scope Claude Code server (
claude mcp add --scope user <name> -- /abs/path/node <extension>/server/index.js). The CLI loads it on every spawn. Warm sessions then list it twice.
Possibly related, but none describes this spawn-path split: #28775 (extensions not available in the Code tab at all; closed), #32552 (no reconnect after an extension settings change; closed), #99315 (extension tools blocked by a stale per-tool setting).
</details>