[BUG] Plugin-bundled MCP servers (.mcp.json) never appear in claude mcp list, regardless of install scope
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
A plugin that bundles an MCP server via a .mcp.json file at its own root (not via an interactive /plugin install prompt - the file ships as part of the plugin package itself) never gets its MCP server registered by the runtime, regardless of install scope (user or project).
claude plugin listcorrectly shows the plugin as installed and enabled.claude mcp listnever lists the plugin's bundled server - only servers from the top-level~/.claude.jsonor a project's own.mcp.jsonshow up.- No error, warning, or log line indicates the plugin's MCP server was found, attempted, skipped, or blocked.
- This reproduces with
enableAllProjectMcpServers: trueand the server's name already present in the project'senabledMcpjsonServersallowlist - i.e. it's pre-approved and still never loads. - Unlike #75344, no
managed-settings.jsonwithallowedMcpServersis present on the machine (ruling out that specific trigger), and no~/.claude/.mcp.jsonfile is created either - so this may be a distinct code path from both #75344 and #32882.
What Should Happen?
A plugin's bundled .mcp.json mcpServers entries should be loaded into the active MCP server list at startup (or on /reload-plugins), the same way project-level .mcp.json and user-level ~/.claude.json entries are, and should appear in claude mcp list.
Error Messages/Logs
Steps to Reproduce
- Create (or install) a plugin with a
.mcp.jsonat its root, e.g.:
``json``
{
"mcpServers": {
"example-server": {
"command": "npx",
"args": ["-y", "some-mcp-package@latest"],
"env": { "SOME_API_KEY": "${SOME_API_KEY}" }
}
}
}
- Enable the plugin at user scope (
enabledPluginsin~/.claude/settings.json). - Confirm the underlying command runs fine standalone (
npx -y some-mcp-package@lateststarts without error). - Start a new Claude Code session (or restart an existing one).
- Run
claude plugin list- plugin shows enabled. - Run
claude mcp list- the plugin's server is absent; only.mcp.json/~/.claude.json-sourced servers appear.
Verified: manually adding the identical server via claude mcp add --scope user example-server -e SOME_API_KEY=... -- npx -y some-mcp-package@latest immediately makes it appear in claude mcp list and connect successfully - confirming the server definition itself is valid; only the plugin-sourced loading path is broken.
Claude Model
Sonnet (default)
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.212 (latest at time of report)
Platform
Other
Operating System
macOS
Terminal/Shell
iTerm2
Additional Information
Likely related to #75344 ("Plugin-provided MCP servers never registered - written to wrong config file") and #32882 ("Plugin-bundled MCP servers silently ignored when allowedMcpServers is configured", closed as not-planned). This report differs from both: no managed-settings.json/allowedMcpServers involved (rules out #32882's trigger), and no ~/.claude/.mcp.json file is ever created on this machine (rules out #75344's exact described file-path bug) - yet the end symptom (plugin MCP servers invisible to claude mcp list, any scope) is identical. This suggests either a third distinct cause, or that #75344's "wrong file" theory doesn't cover all cases of this same user-visible bug.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗