Under the hood
Always-loaded claude.ai MCP tools are held out of the declared tool set and loaded lazily until the tool-use decision settles.
A new code path filters out MCP tools flagged isMcp === true, alwaysLoad === true, and mcpInfo.scope === 'claudeai' from the initially declared tool set until the model's tool-use decision settles, wrapping the remainder in a lazy collection. This only fires when the caller hasn't already decided declared tools and at least one matching tool is present.