Plugin MCP servers ignore alwaysLoad annotation

Resolved 💬 3 comments Opened May 6, 2026 by seankerman Closed May 6, 2026

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

  1. Install a plugin that provides an MCP server (via marketplace/enabledPlugins)
  2. In the plugin's .mcp.json, set "alwaysLoad": true on the server entry:

``json
{
"mcpServers": {
"myserver": {
"command": "node",
"args": ["${CLAUDE_PLUGIN_ROOT}/bin/server.mjs"],
"alwaysLoad": true
}
}
}
``

  1. Additionally, have the server return _meta: {"anthropic/alwaysLoad": true} on each tool in its tools/list response
  2. 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 (enabledPlugins in settings.json)
  • macOS, zsh

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗