Desktop-hosted sessions: subagents receive none of the tools of a user MCP server named `memory` (misclassified as account memory server, since 2.1.284)
Summary
In Claude Code sessions hosted by Claude Desktop (Code tab), subagents receive none of the tools of a user-configured MCP server named memory (e.g. @modelcontextprotocol/server-memory). The main agent can list and call them. Regression since 2.1.284; worked through 2.1.281.
Environment
- Claude Code 2.1.284 and 2.1.286, hosted by Claude Desktop (macOS), Code tab
- User stdio MCP server named
memory(@modelcontextprotocol/server-memory), configured both inclaude_desktop_config.jsonand in the Claude Code user config
Behavior
- Main agent:
ToolSearch select:mcp__memory__search_nodes→ found, calls succeed. - Subagent (general-purpose, or custom agents that list the tools explicitly in
tools:, with matchingpermissions.allow):ToolSearch select:mcp__memory__search_nodes→ "No matching deferred tools found". All other user MCP servers are passed through normally. - Same machine, same config, terminal CLI session (not Desktop-hosted): subagent sees and calls the tools fine.
Likely cause (from reading the bundled code)
Desktop passes its locally configured servers into the session as SDK servers. A server with name === "memory", dynamic scope and SDK type is then classified as the account memory server, and the subagent tool filter only keeps memory_read, memory_list and memory_search. A third-party server that happens to be named memory therefore silently loses all its tools in subagents. No warning is shown.
Repro
- Configure a stdio MCP server named
memory(e.g.npx @modelcontextprotocol/server-memory) in Claude Desktop and in Claude Code. - Open a Claude Code session in the Claude Desktop Code tab.
- Spawn a general-purpose subagent and have it run
ToolSearch select:mcp__memory__search_nodes→ not found. - Do the same in a terminal
claudesession → found.
Workaround: rename the server in claude_desktop_config.json (e.g. knowledge-graph).
Expected
Identify the account memory server by identity (server info / URL / CLI-owned), not by the bare name memory — or at least log a visible warning when tools are withheld from subagents.
Possibly related
#25081, #30280, #79728 (not verified whether any is the same root cause)
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗