ListPlugins returns empty for an enabled user-scope plugin whose skills are loaded
Summary
The ListPlugins tool returns {"results":[]} for a plugin that is installed, enabled in settings.json, and whose skills and agents are demonstrably loaded into the session. Asking Claude "what plugins am I running?" therefore gets an answer of "none" unless it falls back to reading the plugin manifests off disk.
Environment
- Claude desktop app (Code tab), version 1.52386.0
- macOS (Darwin 25.6.0), zsh
- Plugin:
fm-rcc@rcc-fmv0.7.0, user scope, installed from a third-party git marketplace (https://github.com/FMTrainingTV-AI/rcc-fm.git)
Steps to reproduce
- Install a plugin at user scope from a git marketplace (
/plugin marketplace add <git-url>, then install). - Confirm it is enabled in
~/.claude/settings.jsonunderenabledPlugins. - Start a session and ask Claude what plugins are running, so it calls
ListPlugins.
Expected
ListPlugins lists fm-rcc@rcc-fm.
Actual
ListPlugins() -> {"results":[]}
ListPlugins(keywords: ["filemaker", "fm-rcc"]) -> {"results":[]}
Both the no-argument and keyword-filtered forms return empty, so this is not a query-handling quirk in the filter path.
Evidence the plugin really is loaded
~/.claude/settings.jsoncontains"enabledPlugins": { "fm-rcc@rcc-fm": true }~/.claude/plugins/installed_plugins.jsonrecords the plugin at user scope with a validinstallPath, version0.7.0, and a git commit SHA- The install path exists and contains a well-formed
.claude-plugin/plugin.json(name,version,description,authorall present) plusskills/,agents/, andcommands/directories - The marketplace checkout at
~/.claude/plugins/marketplaces/rcc-fmis intact, and its.claude-plugin/marketplace.jsonlists the plugin correctly - An in-use marker
<installPath>/.in_use/<pid>was stamped for the current session's process, i.e. the harness itself checked the plugin out for this session - All 18 of the plugin's skills and both of its agents are present in the session's skill/agent listings, namespaced
fm-rcc:*
So the harness clearly knows about the plugin; only ListPlugins fails to report it.
Guesses at the cause
Not verifiable from outside the tool, but two candidates:
ListPluginsreads a session/host-level plugin registry rather thaninstalled_plugins.json, and that registry is not populated for plugins installed outside theSuggestPluginInstallflow. The tool's own description frames it partly as "confirm what was installed after a SuggestPluginInstall card", which hints the data source is tied to that path.- It filters by scope and skips user-scope plugins (or skips third-party marketplaces).
Impact
Low severity, but actively misleading: the tool is the designated way to answer "what plugins do I have", and it silently disagrees with both enabledPlugins and the skills actually loaded. Anyone debugging a plugin that genuinely is not loading will get a false confirmation that it is not installed, and Claude will confidently report "no plugins" unless it independently reads the manifests.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗