[BUG] Directory (app-layer) MCP connectors are invisible to programmatically-spawned context windows

Resolved 💬 2 comments Opened Jun 17, 2026 by ciptim Closed Jun 20, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

<p style="box-sizing: border-box; border: 0px solid color(srgb 0.0431373 0.0431373 0.0431373 / 0.1); margin: 0px; padding: 0px; outline-color: rgb(37, 107, 193); scrollbar-width: thin; scrollbar-color: rgba(31, 31, 30, 0.35) rgba(0, 0, 0, 0); color: rgb(10, 10, 10); font-family: &quot;Anthropic Sans&quot;, system-ui, &quot;Segoe UI&quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(253, 253, 252); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">An MCP connector added through the<span> </span><strong style="box-sizing: border-box; border: 0px solid color(srgb 0.0431373 0.0431373 0.0431373 / 0.1); margin: 0px; padding: 0px; outline-color: rgb(37, 107, 193); scrollbar-width: thin; scrollbar-color: rgba(31, 31, 30, 0.35) rgba(0, 0, 0, 0); font-weight: 500;">desktop app's "Directory" connectors UI</strong><span> </span>(OAuth / GUI-authenticated — in our case Linear,<span> </span><code node="[object Object]" data-epitaxy-inline-code="" style="box-sizing: border-box; border: 0px solid color(srgb 0.0431373 0.0431373 0.0431373 / 0.1); margin: 0px; padding: 0px; outline-color: rgb(37, 107, 193); scrollbar-width: thin; scrollbar-color: rgba(31, 31, 30, 0.35) rgba(0, 0, 0, 0); font-family: &quot;Anthropic Mono&quot;, ui-monospace, monospace; font-feature-settings: &quot;calt&quot; 0, &quot;liga&quot; 0; font-variation-settings: normal; font-size: 13px; font-variant-ligatures: none; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(10, 10, 10, 0.04); color: rgb(10, 10, 10); border-radius: 4px; padding-block: 1px; padding-inline: 2px; line-height: 1.4;">https://mcp.linear.app/mcp</code>) is available to interactive windows the user opens<span> </span><strong style="box-sizing: border-box; border: 0px solid color(srgb 0.0431373 0.0431373 0.0431373 / 0.1); margin: 0px; padding: 0px; outline-color: rgb(37, 107, 193); scrollbar-width: thin; scrollbar-color: rgba(31, 31, 30, 0.35) rgba(0, 0, 0, 0); font-weight: 500;">and</strong><span> </span>to background sub-agents those windows spawn — but is<span> </span><strong style="box-sizing: border-box; border: 0px solid color(srgb 0.0431373 0.0431373 0.0431373 / 0.1); margin: 0px; padding: 0px; outline-color: rgb(37, 107, 193); scrollbar-width: thin; scrollbar-color: rgba(31, 31, 30, 0.35) rgba(0, 0, 0, 0); font-weight: 500;">NOT</strong><span> </span>available to a<span> </span><strong style="box-sizing: border-box; border: 0px solid color(srgb 0.0431373 0.0431373 0.0431373 / 0.1); margin: 0px; padding: 0px; outline-color: rgb(37, 107, 193); scrollbar-width: thin; scrollbar-color: rgba(31, 31, 30, 0.35) rgba(0, 0, 0, 0); font-weight: 500;">freshly-spawned, separate context window</strong><span> </span>(e.g. one launched programmatically or via an "open in new window" task chip). The new window boots with the connector entirely absent.</p><p style="box-sizing: border-box; border: 0px solid color(srgb 0.0431373 0.0431373 0.0431373 / 0.1); margin: 0px; padding: 0px; outline-color: rgb(37, 107, 193); scrollbar-width: thin; scrollbar-color: rgba(31, 31, 30, 0.35) rgba(0, 0, 0, 0); color: rgb(10, 10, 10); font-family: &quot;Anthropic Sans&quot;, system-ui, &quot;Segoe UI&quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(253, 253, 252); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">The surprising core is an<span> </span><strong style="box-sizing: border-box; border: 0px solid color(srgb 0.0431373 0.0431373 0.0431373 / 0.1); margin: 0px; padding: 0px; outline-color: rgb(37, 107, 193); scrollbar-width: thin; scrollbar-color: rgba(31, 31, 30, 0.35) rgba(0, 0, 0, 0); font-weight: 500;">asymmetry between two kinds of spawned work</strong><span> </span>— same user, same machine, same connector:</p><div class="overflow-x-auto" style="box-sizing: border-box; border: 0px solid color(srgb 0.0431373 0.0431373 0.0431373 / 0.1); margin: 0px; padding: 0px; outline-color: rgb(37, 107, 193); scrollbar-width: thin; scrollbar-color: rgba(31, 31, 30, 0.35) rgba(0, 0, 0, 0); overflow-x: auto; color: rgb(10, 10, 10); font-family: &quot;Anthropic Sans&quot;, system-ui, &quot;Segoe UI&quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(253, 253, 252); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">
How the window/agent was created | Directory (app-layer) connector available?
-- | --

User opens a new interactive window | ✅ yes

A window spawns a background sub-agent | ✅ yes (inherits parent's loaded tools)

A window spawns a fresh, separate context window | ❌ no — connector absent at boot

</div><p style="box-sizing: border-box; border: 0px solid color(srgb 0.0431373 0.0431373 0.0431373 / 0.1); margin: 0px; padding: 0px; outline-color: rgb(37, 107, 193); scrollbar-width: thin; scrollbar-color: rgba(31, 31, 30, 0.35) rgba(0, 0, 0, 0); color: rgb(10, 10, 10); font-family: &quot;Anthropic Sans&quot;, system-ui, &quot;Segoe UI&quot;, Roboto, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(253, 253, 252); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">Both bottom rows are "spawned from a parent," yet behave oppositely. The failure is<span> </span><strong style="box-sizing: border-box; border: 0px solid color(srgb 0.0431373 0.0431373 0.0431373 / 0.1); margin: 0px; padding: 0px; outline-color: rgb(37, 107, 193); scrollbar-width: thin; scrollbar-color: rgba(31, 31, 30, 0.35) rgba(0, 0, 0, 0); font-weight: 500;">silent</strong>: nothing tells the user or the spawned window why the connector is missing or how to fix it, which makes it very hard to diagnose (we lost meaningful time across several sessions before finding the workaround).</p>

What Should Happen?

If a connector is configured and working for my Claude Code, a context window spawned from within Claude Code should either:

be able to use it too (consistent with how interactive windows and sub-agents already inherit it), or
at minimum, receive a clear signal explaining why it can't and what to do about it — instead of a silent empty connector list.

Error Messages/Logs

There is no explicit error — that's part of the problem. The observable symptoms in the freshly-spawned window are:

list_connectors returns empty (zero installed connectors).
The connector's tools never resolve / never appear in the deferred-tool list.
Deferred-tool keyword search fails to find it: the Directory connector's tools live under a UUID namespace (mcp__<uuid>__*) with no human-readable substring, so e.g. searching +linear returns nothing — leading the window to reasonably (but wrongly) conclude "this connector isn't available."

Steps to Reproduce

  1. On macOS, connect a connector via the desktop app's Directory → Connectors (OAuth-authenticated), e.g. Linear. Confirm it works in your current interactive window (tools present under a UUID namespace like mcp__<uuid>__*).
  2. From that window, spawn a background sub-agent and ask it to call a connector tool → works (inherits access).
  3. From that window, spawn a fresh separate context window (programmatic / task-chip "open in new window") and ask it to call the same connector tool.
  4. Observed: the fresh window cannot see the connector. list_connectors is empty; the tool never resolves; no guidance is surfaced.

Claude Model

Opus

Is this a regression?

No, this never worked

Last Working Version

_No response_

Claude Code Version

2.1.108

Platform

Other

Operating System

macOS

Terminal/Shell

Other

Additional Information

Environment: Claude Code 2.1.108 · macOS (Darwin 25.4.0), Apple Silicon

Root cause — observed (verified by command output):

Before the fix, claude mcp list showed only non-Directory servers at the config layer; the Directory connector was not registered there.
The Directory connector's tools appeared only in interactive/inherited sessions, under a per-connector UUID namespace.
After registering the same endpoint at the config layer and authenticating once, a freshly-spawned separate window read a live ticket successfully.
Root cause — inferred (could not see harness internals; hypothesis, not fact): Directory connectors appear to be a property of the interactive desktop-app session — provisioned to app-opened windows and to sub-agents that inherit a parent's loaded toolset, but not re-provisioned to a freshly-booted separate window, which initializes only from config-layer MCP definitions (~/.claude.json / .mcp.json). A freshly-spawned window behaves like a fresh claude process reading config files, not a continuation of the app session.

Workaround / solution (verified working): register the same endpoint at the config layer at user scope and authenticate once via CLI:

claude mcp add --scope user --transport http linear https://mcp.linear.app/mcp

then, in an interactive session:

claude # start Claude Code
/mcp # terminal MCP list → select 'linear' → Authenticate → browser login (one time)
After this, claude mcp list shows linear: ✓ Connected at user scope, and a freshly-spawned separate window can call the tools (now under the friendly namespace mcp__linear__*). Verified: a fresh chip-spawned window read a live Linear ticket with no app-layer connector present. (This leaves the connector registered twice — app-layer + config-layer — which is harmless but means interactive windows see two copies of the toolset.)

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗