Install, create, and distribute plugin packages with skills, hooks, and MCP servers
Plugins are packaged extensions that bundle multiple capabilities into a single installable unit. A plugin can contain any combination of skills, agents, hooks, MCP servers, and LSP servers.
Think of plugins as "apps" for Claude Code — install once, get a bundle of related features.
my-plugin/
├── .claude-plugin/
│ └── plugin.json # Manifest (required)
├── commands/
│ ├── review.md # Slash command: /review
│ └── deploy.md # Slash command: /deploy
├── agents/
│ └── security-reviewer.md # Custom subagent
├── hooks/
│ └── format-on-save.sh # Hook scripts
├── servers/
│ └── my-mcp-server # MCP server binary
└── README.md
Full access
Unlock all 14 lessons, templates, and resources for Claude Code Mastery. Free.
{
"name": "my-dev-tools",
"version": "1.0.0",
"description": "Development workflow automation tools",
"author": {
"name": "Your Name",
"email": "you@example.com"
},
"homepage": "https://github.com/you/my-plugin",
"license": "MIT"
}
Q: What's the minimum required file to create a plugin?
A .claude-plugin/plugin.json manifest file. That's the only required file — everything else (commands, agents, hooks, servers) is optional. You add only what your plugin needs.
/plugin install plugin-name@claude-plugins-official
Or browse interactively:
/plugin
# → Discover tab → browse and install
/plugin marketplace add owner/repo
/plugin install my-tool@owner-repo
| Scope | Who Gets It | Config File |
|---|---|---|
| User (default) | Just you, all projects | ~/.claude/settings.json |
| Project | All collaborators | .claude/settings.json |
| Local | Just you, this project | .claude/settings.local.json |
| Managed | All org users (admin-deployed) | Managed settings file |
These plugins enable Claude's built-in LSP tool for precise code navigation:
| Language | Plugin |
|---|---|
| TypeScript | typescript-lsp |
| Python | pyright-lsp |
| Rust | rust-analyzer-lsp |
| Go | gopls-lsp |
| Swift | swift-lsp |
| Java | jdtls-lsp |
| C/C++ | clangd-lsp |
What you gain:
| Plugin | Service |
|---|---|
github | GitHub (PRs, issues, repos) |
gitlab | GitLab (merge requests, CI) |
atlassian | Jira + Confluence |
linear | Linear project management |
notion | Notion pages/databases |
sentry | Sentry error tracking |
vercel | Vercel deployments |
slack | Slack messaging |
Q: What's the advantage of using an LSP plugin over Claude's built-in file reading?
LSP plugins give Claude precise code intelligence — jump to definition, find references, and automatic type error diagnostics. Without LSP, Claude uses text-based search (grep + reading multiple files) which is slower and less accurate. One "go to definition" LSP call replaces what might take several grep + read operations, saving both time and tokens.
mkdir -p my-plugin/.claude-plugin
mkdir -p my-plugin/commands
mkdir -p my-plugin/agents
{
"name": "my-plugin",
"version": "1.0.0",
"description": "My custom development tools"
}
<!-- my-plugin/commands/review.md -->
---
description: Review code changes
invocation: slash
command: /review
---
# Code Review
Review the current staged changes for quality, security, and style...
{
"hooks": {
"PostToolUse": [{
"matcher": "Edit|Write",
"hooks": [{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/format.sh"
}]
}]
}
}
Important: Use
${CLAUDE_PLUGIN_ROOT}to reference files within the plugin — plugins are copied to a cache on install.
claude --plugin-dir ./my-plugin
Fill in the blanks:
.claude-plugin/___${CLAUDE_PLUGIN____}claude --___-dir ./my-plugin.claude-plugin/plugin.json${CLAUDE_PLUGIN_ROOT}claude --plugin-dir ./my-plugin{
"name": "my-team-tools",
"owner": {
"name": "My Team",
"email": "team@example.com"
},
"plugins": [
{
"name": "code-formatter",
"source": "./plugins/formatter",
"description": "Auto-format code on save",
"version": "2.1.0"
},
{
"name": "deploy-tools",
"source": {
"source": "github",
"repo": "company/deploy-plugin"
},
"description": "Deployment automation"
}
]
}
Push to GitHub and share:
/plugin marketplace add your-org/your-marketplace
/plugin # Interactive plugin manager
/plugin disable name # Disable a plugin
/plugin enable name # Re-enable
/plugin uninstall name # Remove
Official marketplaces auto-update by default.
Q: What's the difference between installing a plugin at "user" scope vs "project" scope?
User scope installs the plugin for you personally across all projects (stored in ~/.claude/settings.json). Project scope installs it for all collaborators on that specific project (stored in .claude/settings.json, committed to git). Use project scope when the whole team should have the plugin; use user scope for personal tools.
Fill in the blanks:
/___/plugin marketplace ___ owner/repostrictKnown___/plugin/plugin marketplace add owner/repostrictKnownMarketplaces/plugin to see the interactive plugin managertypescript-lsp)Bonus: Create a minimal plugin:
mkdir -p my-first-plugin/.claude-plugin
echo '{"name":"hello","version":"1.0.0","description":"My first plugin"}' > my-first-plugin/.claude-plugin/plugin.json
mkdir my-first-plugin/commands
# Add a command file and test with: claude --plugin-dir ./my-first-plugin
Reflection: How much faster is Claude with LSP diagnostics compared to manual file searching?
Scenario: Your company has 5 internal tools that every developer uses with Claude Code: a code review skill, a deploy workflow, a database query agent, a Slack notification hook, and a custom MCP server for your internal API. How would you distribute all of these?
Create a single company plugin that bundles everything:
company-tools/
├── .claude-plugin/
│ └── plugin.json
├── commands/
│ ├── review.md # Code review skill
│ └── deploy.md # Deploy workflow
├── agents/
│ └── db-query.md # Database query subagent
├── hooks/
│ └── slack-notify.sh # Slack notification hook
└── servers/
└── internal-api/ # Custom MCP server
Create a private marketplace on your GitHub org:
{
"name": "company-tools",
"plugins": [{"name": "company-tools", "source": "./"}]
}
Developers install with one command:
/plugin marketplace add company/claude-plugins
/plugin install company-tools@company-claude-plugins
Use managed settings to restrict to approved marketplaces only:
{ "strictKnownMarketplaces": ["claude-plugins-official", "company/claude-plugins"] }
| Concept | One-Liner |
|---|---|
| What plugins are | Bundled packages of skills, hooks, MCP, agents, LSP |
| Manifest | .claude-plugin/plugin.json (only required file) |
| Install | /plugin install name@marketplace |
| Scopes | user (personal), project (team), local, managed |
| LSP plugins | Code intelligence — diagnostics + navigation |
| Portable paths | ${CLAUDE_PLUGIN_ROOT} for plugin-internal files |
| Test locally | claude --plugin-dir ./my-plugin |
| Marketplace | GitHub repo with marketplace.json |
Next up: Agent Teams — Multi-Session Orchestration → — Coordinate multiple Claude instances working together.