[BUG] Desktop (Code tab): desktop extensions missing from sessions started cold in a new worktree

Status Open
Reported on v2.1.286
Maintainer reply None cached
Activity 0 comments · opened Oct 5, 2026

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

  1. Install any stdio desktop extension and confirm it's connected (Settings → Extensions).
  2. In the Code tab, start a new local session on a git repo with worktrees enabled.
  3. In that session, ask Claude to list its MCP tools, or check the session's MCP servers. The extension isn't there.
  4. Check ~/Library/Logs/Claude/main.log. The session's Reconciling to N total servers list 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) shows Server started and connected successfully and a successful tools/list from 07:29 UTC, before and after the failing 09:52 session.
  • Not a reconnect or auth problem. In the failing session, session_connectors_status doesn't list the server at all, rather than showing it as failed or needs_auth.
  • ccd_host and ccd_settings are 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, no claude mcp entry). He starts cold worktree sessions too (Starting local session … /.claude/worktrees/…) and gets the extension in them. His main.log has no reconcileRemoteMcpServers lines. Neither did my own Mac log while I was on 2.9939.2/2.9939.4: those lines first appear after I updated to 2.19675.0. So the server-handout path that drops the extension seems to have shipped between 2.9939.4 and 2.19675.0, rather than being macOS-specific. Caveat: I installed the extension on 2026-09-30, already on 2.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>

View original on GitHub ↗