"MCP eats your context" is stale — the new failure is invisible tools
Pruning MCP servers to save context is mostly obsolete advice now that tool search defers tool schemas; the live risk is the opposite — Claude writes a script for a job an installed MCP tool already does, because it never saw the tool.
The official documentation describes the mechanism this relies on. The technique itself is community practice.
What this costs you if it is wrong
Tool search is off in several real configurations - a non-first-party ANTHROPIC_BASE_URL, CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS, Microsoft Foundry on Azure, pre-4.5 models on Google Cloud's Agent Platform - and there the old bloat advice still fully applies, so check /context first. The discovery-failure half is a community observation, not documented behavior; and marking servers alwaysLoad gives back exactly the context deferral saved you, so do it for a handful of tools, not a fleet. A bare-name MCP deny rule also removes the tool from Claude's context entirely.
You are about to delete three servers from .mcp.json because a post told you MCP
tool schemas eat your context window. Before you do, run /context and look at the
MCP tools (deferred) row. On a default modern setup it is a few hundred tokens of
tool names, not the tens of thousands of JSON schema you were promised.
Tool search changed the arithmetic. Only tool names and server instructions load at session start; the full schemas stay deferred until Claude searches for a specific tool and pulls it in. Adding servers is close to free. The advice to prune for context reasons was written against the old behavior and mostly no longer applies.
What actually loads now
| Setting | What happens at session start |
|---|---|
ENABLE_TOOL_SEARCH unset (default) | All MCP tool definitions deferred; names only in context |
true | Always defer, and send the beta header through proxies — requests fail on proxies that do not support tool_reference |
auto | Load upfront while definitions fit in 10% of the context window; defer past that |
auto:N | Same, with your own percentage — auto:5 for 5% |
false | Everything upfront, the old behavior |
A server can opt out per-server with "alwaysLoad": true, and an MCP server author can
opt out per-tool with "anthropic/alwaysLoad": true in a tool's _meta. Those tools
load upfront regardless of ENABLE_TOOL_SEARCH.
The failure that replaced it
Here is the part the docs do not cover. Because tool descriptions are no longer sitting
in context, Claude sometimes does not know a capability exists. Practitioners report the
symptom as Claude writing a fresh Python script — or a curl, or a shell pipeline — to
do something one of your installed MCP servers already does precisely, because the
search step never happened. The old failure was loud and measurable: your context window
filled up. This one is silent. You get a working answer by the wrong route, and nothing
in the transcript flags it unless you were watching for a ToolSearch call that never
came.
The docs gesture at the mechanism without naming the failure: server instructions "help Claude understand when to search for your tools," which is only worth saying because the search can miss.
Habits that fit the new shape
- Name the server or tool when you know one exists. "Use the linear MCP server to file this" is not hand-holding any more; it is the discovery hint that replaced having the schema in front of the model.
- If you author a server, spend your effort on the instructions field, not on polishing tool descriptions. Instructions load at session start; descriptions do not. Both are truncated at 2KB, so front-load the important sentence.
- Reach for
alwaysLoadon the two or three tools you need on literally every turn, and nothing more. Each one costs context permanently and, on a server, makes startup wait for that server's tool list. - Scope permissions per tool instead of disabling whole servers. Allow rules take a
glob only after a literal
mcp__<server>__prefix, somcp__github__get_*works and a baremcp__*allow is skipped with a warning. In headless runs that is a better lever than removing the server. - Keep the CLI preference.
gh,aws,gcloudand friends still cost zero per-tool listing, which is the one context argument against MCP that deferral did not retire. The docs still say so.
What is unverified here
Two separate claims, with different standing:
The mechanism — deferral, the ENABLE_TOOL_SEARCH values, the exception list — is
documented plainly and you should treat it as fact.
The failure mode — that Claude reimplements a tool it did not discover — is a community observation from Hacker News follow-up threads to a widely-shared "MCP is broken" post whose author appended a retraction about context usage. Nobody has published a controlled reproduction. It is consistent with how deferral works, and it is exactly the regression you would predict, but "consistent and predictable" is not "measured." The prescriptions above are correspondingly cheap: naming a server in your prompt costs nothing if the concern is imaginary.
What would settle it: configure a server with a distinctively named tool, phrase a task
in generic language that never mentions the server, and check whether a ToolSearch
call appears before Claude starts writing code. Run it a dozen times, then run the same
prompts with ENABLE_TOOL_SEARCH=false and compare. If the deferred runs reach for
Bash or Write where the upfront runs reach for the MCP tool, the claim is real and
quantified.
Checkpoint
-
Without guessing, is tool search on in your current setup — and which command told you?
Show answerAnswer
/contextis the command, and nothing else reports it — read theMCP tools (deferred)row. A few hundred tokens of tool names means deferral is on and schemas stay out until Claude searches for one; tens of thousands of JSON schema means you are living in the world the old pruning advice described. The figure itself is yours to read off your own session.Deferral is off on a non-first-party
ANTHROPIC_BASE_URL, withCLAUDE_CODE_DISABLE_EXPERIMENTAL_BETASset (whichENABLE_TOOL_SEARCHcannot override), on Microsoft Foundry deployments hosted on Azure, and on pre-4.5-generation models on Google Cloud's Agent Platform. -
Your teammate says "drop the Sentry MCP server, it is eating our context." What do you check before agreeing, and what would make them right?
Show answerAnswer
Check the
MCP tools (deferred)row in/contextbefore anyone edits.mcp.json. On a default modern setup only tool names and server instructions load at session start, so an extra server is close to free and the arithmetic your teammate is quoting has changed.They are right if deferral is genuinely off for you:
ENABLE_TOOL_SEARCH=false, one of the exception cases above, or that server markedalwaysLoad. Otherwise deleting it buys back a slice of the few hundred tokens that whole row costs, and risks the newer failure — practitioners report Claude writing a fresh script for a job the removed tool did precisely. That half is a community observation with no published reproduction, so weigh it as a cheap precaution rather than a measured cost. -
You have one MCP tool Claude needs on every single turn. Which lever do you pull, and what does it cost you?
Show answerAnswer
alwaysLoad—"alwaysLoad": trueto opt a whole server out, or, if you author the server,"anthropic/alwaysLoad": truein that one tool's_metaso only it loads upfront regardless ofENABLE_TOOL_SEARCH.It costs you exactly what deferral was saving: that definition sits in context permanently, and at server level startup waits for that server's tool list. Spend it on the two or three tools you need on literally every turn, not on a fleet.