`claude plugin uninstall` refuses with "enabled at project scope" when plugin is absent from every enabledPlugins map (contradicts `disable` which reports already-disabled)

Resolved 💬 1 comment Opened May 28, 2026 by andrewstyer Closed Jun 28, 2026

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:

  • uninstall succeeds (since no enabledPlugins map at any scope contains the entry, matching what disable already 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

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗