Description
When a plugin is installed with scope: "project" for one project, attempting to install it in a different project fails silently. The Discovery tab also incorrectly hides the plugin (showing it as already installed) even though it's not installed for the current project.
Steps to Reproduce
- Install a plugin with project scope in Project A
- Open Claude Code in Project B (where plugin is NOT installed)
- Run
/plugin → Discovery tab does NOT list the plugin
- Browse marketplace → plugin shows as "installed"
- Attempt to install the plugin → command completes without error
- Run
/plugin → plugin still not in Installed list
- Plugin commands/agents/MCP server not available
Expected Behavior
- Discovery tab should show plugin as available (not installed for this project)
- Install command should create all required configuration for the new project
- Plugin should become functional after install
Actual Behavior
- Discovery tab hides the plugin (checks global install status, not per-project)
- Install command is a no-op (doesn't add project to existing plugin entry)
- No local project configuration is created
Root Cause Analysis
The install command checks if the plugin ID exists in installed_plugins.json globally, but doesn't check if the current project path is in the installations array for project-scoped plugins.
Workaround
Manually create all required configuration:
1. Add entry to ~/.claude/plugins/installed_plugins.json:
{
"scope": "project",
"projectPath": "/path/to/new/project",
"installPath": "/home/user/.claude/plugins/cache/marketplace-name/plugin-name/version",
"version": "x.x.x",
"installedAt": "2025-12-16T00:00:00.000Z",
"lastUpdated": "2025-12-16T00:00:00.000Z",
"isLocal": true
}
2. Create .mcp.json at project root (if plugin has MCP server):
{
"mcpServers": {
"server-name": {
"command": "...",
"args": ["..."]
}
}
}
3. Update .claude/settings.local.json:
{
"enableAllProjectMcpServers": true,
"enabledMcpjsonServers": ["server-name"]
}
4. Create .claude/settings.json (THIS IS THE KEY MISSING PIECE):
{
"enabledPlugins": {
"plugin-name@marketplace-name": true
}
}
Note: Steps 1-3 alone only enable the MCP server. Step 4 is required for plugin commands/agents/hooks to load.
Environment
- Claude Code version: 2.0.70
- OS: Linux (WSL2)
Suggested Fix
- Discovery tab should check if current
projectPath exists in the plugin's installation array (for project-scoped plugins)
- Install command should append new project entry to existing plugin array
- Install command should create
.claude/settings.json with enabledPlugins
- Install command should create
.mcp.json if plugin defines MCP servers
- Install command should update
.claude/settings.local.json with MCP settings
Description
When a plugin is installed with
scope: "project"for one project, attempting to install it in a different project fails silently. The Discovery tab also incorrectly hides the plugin (showing it as already installed) even though it's not installed for the current project.Steps to Reproduce
/plugin→ Discovery tab does NOT list the plugin/plugin→ plugin still not in Installed listExpected Behavior
Actual Behavior
Root Cause Analysis
The install command checks if the plugin ID exists in
installed_plugins.jsonglobally, but doesn't check if the current project path is in the installations array for project-scoped plugins.Workaround
Manually create all required configuration:
1. Add entry to
~/.claude/plugins/installed_plugins.json:{ "scope": "project", "projectPath": "/path/to/new/project", "installPath": "/home/user/.claude/plugins/cache/marketplace-name/plugin-name/version", "version": "x.x.x", "installedAt": "2025-12-16T00:00:00.000Z", "lastUpdated": "2025-12-16T00:00:00.000Z", "isLocal": true }2. Create
.mcp.jsonat project root (if plugin has MCP server):{ "mcpServers": { "server-name": { "command": "...", "args": ["..."] } } }3. Update
.claude/settings.local.json:{ "enableAllProjectMcpServers": true, "enabledMcpjsonServers": ["server-name"] }4. Create
.claude/settings.json(THIS IS THE KEY MISSING PIECE):{ "enabledPlugins": { "plugin-name@marketplace-name": true } }Note: Steps 1-3 alone only enable the MCP server. Step 4 is required for plugin commands/agents/hooks to load.
Environment
Suggested Fix
projectPathexists in the plugin's installation array (for project-scoped plugins).claude/settings.jsonwithenabledPlugins.mcp.jsonif plugin defines MCP servers.claude/settings.local.jsonwith MCP settings