Plugin MCP servers ignore alwaysLoad annotation

Status Fixed / completed
Maintainer reply None cached
Activity 3 comments · opened May 6, 2026 · 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 ↗

3 Comments

github-actions[bot] · 5 months ago

Found 3 possible duplicate issues:

  1. https://github.com/anthropics/claude-code/issues/49019
  2. https://github.com/anthropics/claude-code/issues/42442
  3. https://github.com/anthropics/claude-code/issues/55853

This issue will be automatically closed as a duplicate in 3 days.

  • If your issue is a duplicate, please close it and 👍 the existing issue instead
  • To prevent auto-closure, add a comment or 👎 this comment

🤖 Generated with Claude Code

seankerman · 5 months ago

Resolved — the issue was that the plugin's .mcp.json didn't have alwaysLoad: true set yet. After merging https://github.com/fs-eng/cc-plugins-atb/pull/4 which adds alwaysLoad: true to the MCP server config, tools load eagerly as expected. Not a bug in Claude Code.

github-actions[bot] · 3 months ago

This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.