`claude plugin uninstall` refuses with "enabled at project scope" when plugin is absent from every enabledPlugins map (contradicts `disable` which reports already-disabled)
Summary
claude plugin uninstall <name>@<marketplace> rejects the operation with Plugin "<name>@<marketplace>" is enabled at project scope (.claude/settings.json, shared with your team) — even when the plugin name appears in no enabledPlugins map at any scope. In the same shell, claude plugin disable --scope project <name>@<marketplace> reports already disabled at project scope for the same plugin, contradicting the uninstall command.
Net effect: there is no working path to remove plugins whose marketplace endpoint has been decommissioned (in my case, deepsense.ai-hosted MCP servers — see https://github.com/anthropics/healthcare/issues/43). They stay listed in claude plugin list indefinitely.
Reproduction
Plugins involved: icd10-codes@healthcare and cms-coverage@healthcare (originally installed when the deepsense MCP host was live).
Starting state — no settings file references these plugins:
$ grep -l "icd10-codes\|cms-coverage" ~/.claude/settings*.json ./.claude/settings*.json 2>/dev/null
# (empty)
$ cat ./.claude/settings.json | jq .enabledPlugins
{
"frontend-design@claude-plugins-official": true,
"fhir-developer@healthcare": true
}
$ cat ./.claude/settings.local.json | jq .enabledPlugins
{}
$ cat ~/.claude/settings.json | jq .enabledPlugins
{ ... (no icd10/cms entries) ... }
Then:
$ claude plugin disable --scope project icd10-codes@healthcare
✘ Failed to disable plugin "icd10-codes@healthcare": Plugin "icd10-codes@healthcare" is already disabled at project scope
$ claude plugin disable --scope local icd10-codes@healthcare
✘ Failed to disable plugin "icd10-codes@healthcare": Plugin "icd10-codes@healthcare" is already disabled at local scope
$ claude plugin uninstall icd10-codes@healthcare
✘ Failed to uninstall plugin "icd10-codes@healthcare": Plugin "icd10-codes@healthcare" is enabled at project scope (.claude/settings.json, shared with your team). To disable just for you: claude plugin disable icd10-codes@healthcare --scope local
The same sequence reproduces with cms-coverage@healthcare.
claude plugin prune --scope project and --scope user both report "Nothing to prune (no auto-installed plugins at <scope> scope)."
Expected
Either:
uninstallsucceeds (since noenabledPluginsmap at any scope contains the entry, matching whatdisablealready reports), or- The two commands use the same scope check, so their messages don't directly contradict each other.
Actual
The two commands disagree about whether the plugin is enabled at project scope. disable is correct (the plugin is not in any settings file); uninstall is incorrect.
Workaround
None found. The plugins remain in claude plugin list as Scope: project / Status: ✘ disabled but cannot be removed via CLI. They are inert (no MCP server registration, no tools loaded), so this is cosmetic — but it does prevent cleanup of decommissioned plugins.
Environment
claude --version:2.1.152 (Claude Code)- macOS Darwin 25.2.0 (arm64)
- Shell: zsh
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗