[FEATURE] Remote Control spawned sessions: claude-code-remote MCP is forced alwaysLoad, ~15.7k tokens per request
Summary
Sessions spawned by a Remote Control host load the claude-code-remote MCP server with alwaysLoad: true. Its 26 tools skip tool search and cost about 15.7k tokens on every request. Other MCP servers in the same session stay deferred.
Environment
- Claude Code 2.1.296, macOS
- Host:
claude remote-control --spawn=same-dir --permission-mode bypassPermissions - Children run as
claude --print --sdk-url https://api.anthropic.com/v1/code/sessions/cse_... --mcp-config=..., entrypointsdk-cli
What happens
The host writes ~/.claude/bridge-spawn/<cse>-<rand>/mcp.json for each child. That file holds only claude-code-remote, with alwaysLoad: true. The CLI sets the flag itself, so the per-server alwaysLoad setting from 2.1.287 (#97388) cannot change it. The host rewrites the file on every spawn.
/context in a spawned session lists claude-code-remote at 15.7k tokens under "MCP tools". Six Playwright servers, plus phone, Google Tasks and Monarch servers, appear under "MCP tools (deferred)" in the same session.
First-request usage from transcript records (input + cache write + cache read) on one repo:
- Interactive sessions with in-session
/remote-control, 2026-10-05 to 2026-10-11: 40.3k to 41.4k tokens - Host-spawned sessions on 2026-10-04 and 2026-10-12: 71.0k and 72.0k tokens
The MCP server accounts for about half of that 31k gap. Synced claude.ai skills, the Artifact tool and the appended system prompt make up the rest.
Workaround
Adding "mcp__claude-code-remote" to permissions.deny drops all 26 tools from context, effective immediately in a running session. It also removes create_session, send_message, send_later and the trigger tools, which some users rely on (#98059).
Request
Defer the bridge-injected claude-code-remote server behind tool search by default. Alternatively, expose a setting or environment variable on the host that controls its alwaysLoad value. A few tools could stay eager if the bridge's prompt text depends on them. For example, that prompt tells the model to call get_session when asked which model it is.