Plugins are an official feature of Claude Code that let you bundle skills, hooks, MCP servers, agents, and LSP servers into shareable packages. Think of them as "extension packs" that give Claude Code new capabilities you can share across projects and teams.
compare_arrowsPlugins vs Standalone Configuration
| Approach | Skill Names | Best For |
|---|---|---|
Standalone .claude/ | /hello | Personal workflows, project-specific, quick experiments |
Plugin .claude-plugin/ | /plugin-name:hello | Team sharing, community distribution, versioned releases |
inventory_2What a Plugin Can Contain
- check_circleSkills — SKILL.md files with specialized instructions and workflows
- check_circleCommands — Slash commands as markdown files, namespaced by plugin
- check_circleHooks — Event handlers that run on Claude Code lifecycle events
- check_circleMCP Servers — Model Context Protocol servers for external tool integrations
- check_circleLSP Servers — Language Server Protocol servers for real-time code intelligence
- check_circleAgents — Custom agent definitions for specialized workflows
- check_circleSettings — Default configuration applied when the plugin is enabled
folder_openPlugin Structure
my-plugin/
.claude-plugin/
plugin.json # Manifest (name, description, version, author)
commands/ # Slash commands as Markdown files
skills/ # Agent Skills with SKILL.md files
agents/ # Custom agent definitions
hooks/ # Event handlers (hooks.json)
.mcp.json # MCP server configurations
.lsp.json # LSP server configurations
settings.json # Default settings applied when enableddescriptionExample plugin.json Manifest
{
"name": "my-first-plugin",
"description": "A greeting plugin to learn the basics",
"version": "1.0.0",
"author": {
"name": "Your Name"
}
}The manifest identifies your plugin and is required. The name field becomes the namespace prefix for all slash commands and skills within the plugin.
codeExample SKILL.md Inside a Plugin
---
description: Greet the user with a friendly message
disable-model-invocation: true
---
Greet the user warmly and ask how you can help them today.Skills inside a plugin are namespaced. If this lives in a plugin named my-first-plugin, the skill is invoked as /my-first-plugin:hello. The $ARGUMENTS placeholder can capture user input after the command name for dynamic behavior.
build_circleHow to Create a Plugin
Create the plugin manifest
Create a directory with a .claude-plugin/plugin.json file containing your plugin's name, description, version, and author information.
Add skills, hooks, or servers
Populate the plugin with the components you need: add SKILL.md files in skills/, event handlers in hooks/, MCP servers in .mcp.json, or custom agents in agents/.
Test locally
Use the --plugin-dir ./my-plugin flag when launching Claude Code to load your plugin for testing. You can load multiple plugins with repeated --plugin-dir flags.
Share on Mirdan.ai
Once your plugin is working well, share it with the community! Others can install it with /plugin install or through the Mirdan CLI.
swap_horizMigrating from Standalone to Plugin
Already have skills and hooks in your .claude/ directory? You can convert them into a plugin:
- Create a new directory with a
.claude-plugin/plugin.jsonmanifest - Move your skill files into the plugin's
skills/directory - Move hooks and MCP configs into their respective locations
- Test with
--plugin-dirto verify everything works
Note: Skill names will be namespaced with your plugin name after migration (e.g., /tdd becomes /my-plugin:tdd).
menu_bookOfficial Anthropic Documentation
Plugins are an official feature of Claude Code by Anthropic (requires v1.0.33 or later). For the most up-to-date information on plugin structure, capabilities, and best practices, refer to the official documentation:
Ready to explore Plugins?
Browse our curated collection of community and official plugins for Claude Code.
exploreBrowse Plugins