Project-scoped plugins: install command fails for new projects, Discovery tab incorrectly hides plugin
Open 💬 5 comments Opened Dec 16, 2025 by 9swampy
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
projectPathexists 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.jsonwithenabledPlugins - Install command should create
.mcp.jsonif plugin defines MCP servers - Install command should update
.claude/settings.local.jsonwith MCP settings
This issue has 5 comments on GitHub. Read the full discussion on GitHub ↗