Plugin MCP servers ignore alwaysLoad annotation
Summary
MCP servers installed via the plugin system (marketplace) have their tools deferred behind ToolSearch regardless of alwaysLoad configuration. Neither the .mcp.json config nor the _meta annotation in the server's tools/list response prevents deferral.
Steps to Reproduce
- Install a plugin that provides an MCP server (via marketplace/
enabledPlugins) - In the plugin's
.mcp.json, set"alwaysLoad": trueon the server entry:
``json``
{
"mcpServers": {
"myserver": {
"command": "node",
"args": ["${CLAUDE_PLUGIN_ROOT}/bin/server.mjs"],
"alwaysLoad": true
}
}
}
- Additionally, have the server return
_meta: {"anthropic/alwaysLoad": true}on each tool in itstools/listresponse - Start a new Claude Code session
Expected Behavior
Tools from the plugin MCP server should be loaded eagerly (available without ToolSearch).
Actual Behavior
Tools are deferred behind ToolSearch. The system prompt shows:
The following deferred tools are now available via ToolSearch. Their schemas are NOT loaded — calling them directly will fail with InputValidationError. Use ToolSearch with query "select:<name>[,<name>...]" to load tool schemas before calling them:
Workaround
Setting "env": {"ENABLE_TOOL_SEARCH": "auto"} in ~/.claude/settings.json causes Claude Code to evaluate per-tool whether to defer, and small tool sets (e.g., 5 tools) get loaded eagerly. But this is a global setting that affects all tools, not a per-plugin/per-server control.
Impact
This makes it impossible for plugin authors to guarantee their tools are available to the model without requiring each user to manually add an env var to their settings. For tools that should be called proactively (e.g., memory/context tools), deferral means they're effectively never used unless the model first decides to search for them — which it rarely does unprompted.
Environment
- Claude Code CLI (latest as of 2026-05-05)
- Plugin installed via marketplace (
enabledPluginsin settings.json) - macOS, zsh
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗