Plugin-declared HTTP MCP server never loads into sessions, though `claude mcp list`/`get` show it connected
Title: Plugin-declared HTTP MCP server never loads into sessions, though claude mcp list/get show it connected
Description
An http-type MCP server declared in an installed plugin's plugin.json (mcpServers block) never becomes available as a tool source in any Claude Code session, even though standalone CLI diagnostics report it as connected and authenticated. The plugin's own component inventory reports zero MCP servers, contradicting its manifest.
Environment
- Claude Code version: 2.1.247 (native install, Windows) — also reproduced on 2.1.229
- Install method: native
- Affected plugin:
sigrid@sigrid-ai-toolkit(marketplace:Software-Improvement-Group/sigrid-ai-toolkiton GitHub), cached version0e4b62d22970, user scope, enabled
Plugin manifest (relevant excerpt)
"mcpServers": {
"sigrid": {
"type": "http",
"url": "https://sigrid-says.com/mcp",
"headers": { "Authorization": "Bearer ${user_config.sigrid_token}" }
}
}
The plugin's userConfig.sigrid_token is marked required: true and is confirmed present in the local credential store (pluginSecrets["sigrid@sigrid-ai-toolkit"].sigrid_token in .credentials.json).
Steps to reproduce
- Install a plugin whose manifest declares an
http-type MCP server requiring auserConfigtoken, and supply that token. - Enable the plugin (
claude plugin enable <plugin>@<marketplace>). - Start a session and look for the plugin's MCP tools (directly or via the deferred-tool index).
- Separately, run
claude mcp listandclaude plugin details <plugin>@<marketplace>.
Expected behavior
The plugin's MCP server tools should be available in the session (directly or deferred), and claude plugin details should report the server in its "MCP servers" count.
Actual behavior
- No tools from the plugin's MCP server appear in any session — not resident, not in the deferred-tool index.
- The client's MCP resource listing never shows a server for the plugin.
claude plugin details <plugin>@<marketplace>reports "MCP servers (0)" despite the manifest declaring one.claude mcp listreports the same server as ✔ Connected, scope "Dynamic config (from command line)", with the Authorization header correctly resolved fromuser_config.claude mcp get <plugin>:<plugin>agrees: ✔ Connected.
This is a self-contradictory state: the CLI's own diagnostic subcommands (mcp list, mcp get) can reach and authenticate to the server, but the mechanism that's supposed to load plugin-declared MCP servers into a session (and that plugin details reports on) never registers it.
Already tried (no effect)
- Restarting the session multiple times
claude plugin disable <plugin>→claude plugin enable <plugin>claude plugin update <plugin>@<marketplace>(reports already at latest cached version)- Full Claude Code upgrade (2.1.229 → 2.1.247) plus restart — identical symptom on both versions
Additional notes
~/.claude.jsontop-levelmcpServerscontains no entry for this plugin's server at all — the "Dynamic config (from command line)" scope reported byclaude mcp getis not backed by anything persisted, suggestingmcp list/mcp getresolve plugin-declared servers independently (and successfully) from whatever code path is supposed to load them into a live session.- No managed policy settings and no
disabledMcpjsonServers/disabledMcpServersentries are present that would explain a deliberate disable.