Plugin-declared HTTP MCP server never loads into sessions, though `claude mcp list`/`get` show it connected

Status Open
Reported on v2.1.247
Maintainer reply None cached
Activity 0 comments · opened Aug 27, 2026

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-toolkit on GitHub), cached version 0e4b62d22970, 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

  1. Install a plugin whose manifest declares an http-type MCP server requiring a userConfig token, and supply that token.
  2. Enable the plugin (claude plugin enable <plugin>@<marketplace>).
  3. Start a session and look for the plugin's MCP tools (directly or via the deferred-tool index).
  4. Separately, run claude mcp list and claude 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 list reports the same server as ✔ Connected, scope "Dynamic config (from command line)", with the Authorization header correctly resolved from user_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.json top-level mcpServers contains no entry for this plugin's server at all — the "Dynamic config (from command line)" scope reported by claude mcp get is not backed by anything persisted, suggesting mcp list/mcp get resolve 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/disabledMcpServers entries are present that would explain a deliberate disable.

View original on GitHub ↗