Plugin Development
Purpose
Package a coherent set of agent capabilities — skills, slash commands, hooks, and MCP servers — into something another person can install in one step and that works immediately.
When to Use
- Distributing skills or commands to a team or publicly.
- Bundling a set of related capabilities that belong together.
- Publishing to a plugin marketplace.
- Versioning and updating an existing plugin.
Capabilities
- Plugin structure and manifest.
- Bundling skills, commands, hooks, agents, and MCP servers.
- Versioning and compatibility.
- Testing a plugin before distribution.
- Marketplace publication.
Inputs
- The capabilities to bundle, and their coherence as a set.
- The audience and what they already have installed.
- Any external dependencies: MCP servers, API keys, binaries.
Outputs
- A plugin that installs cleanly and works without further configuration.
- A manifest with accurate metadata.
- Documentation of what it provides and what it requires.
Workflow
- Bundle around a coherent purpose — A plugin is a set of capabilities that a specific kind of user needs together. A grab-bag of unrelated skills is a worse experience than several focused plugins.
- Write the manifest accurately — Name, description, version, and what it provides. This is what users see when deciding whether to install.
- Declare the dependencies honestly — If a skill requires an MCP server, an API key, or a binary on the PATH, say so prominently. A plugin that silently fails on a missing dependency will be uninstalled.
- Test from a clean install — In an environment without your local configuration. Plugins that "work on my machine" are the standard failure.
- Version semantically — A breaking change to a skill's behavior is a major version. Users have workflows built on it.
- Document what it does, not what it is — Users care about what problems it solves.
Best Practices
- A plugin's skills should not overlap with each other. If two skills in one plugin trigger on the same request, they will both load and cost double.
- Declare external requirements at the top of the README. The most common plugin failure is an unstated dependency.
- Provide a working example in the README — a real request and what the plugin does with it. This is worth more than a feature list.
- Do not bundle a skill that duplicates something the agent does well already. It adds cost and no capability.
- Test the uninstall path. A plugin that leaves hooks behind after removal is a bug that is hard for a user to diagnose.
- Pin any MCP server version the plugin depends on. An upstream change to a tool's schema will break your skills silently.
Examples
Plugin structure:
my-plugin/
.claude-plugin/
plugin.json the manifest
skills/
review-pr/SKILL.md
triage-issue/SKILL.md
commands/
standup.md a slash command
hooks/
hooks.json format-on-write
.mcp.json the MCP servers this plugin needs
README.md
{
"name": "engineering-workflow",
"version": "1.2.0",
"description": "Pull-request review, issue triage, and standup summaries for teams working in GitHub and Linear.",
"author": { "name": "Nima Dorostkar" },
"homepage": "https://github.com/nimadorostkar/claude-skills",
"keywords": ["code-review", "triage", "github", "linear"]
}
A README that prevents the most common failure:
## Requirements
This plugin requires two MCP servers, which are configured automatically on
install but need authorization:
- **GitHub** — run `/mcp` and authorize. Without it, `review-pr` cannot read diffs.
- **Linear** — run `/mcp` and authorize. Without it, `triage-issue` will fail
with "no Linear workspace".
The plugin will install successfully without these, but the skills will not work.
## Example
> review the PR at github.com/acme/api/pull/412
The `review-pr` skill fetches the diff, reviews it for correctness, security,
and performance, and posts findings grouped by severity as review comments.
Notes
- The most common plugin defect is an undeclared dependency: the author has an MCP server configured globally, so the plugin works for them and fails for everyone else. Always test in a clean profile.
- Marketplace descriptions are the plugin's only chance to be found. Include the tools and the tasks, in the words a user would search for.
- Breaking a skill's behavior without a major version bump breaks workflows built on it. Skills are an interface.
1---2name: plugin-development3description: Use when packaging skills, commands, hooks, and MCP servers into a distributable plugin. Covers manifest structure, bundling, versioning, testing, and distribution through a marketplace.4---56# Plugin Development78## Purpose910Package a coherent set of agent capabilities — skills, slash commands, hooks, and MCP servers — into something another person can install in one step and that works immediately.1112## When to Use1314- Distributing skills or commands to a team or publicly.15- Bundling a set of related capabilities that belong together.16- Publishing to a plugin marketplace.17- Versioning and updating an existing plugin.1819## Capabilities2021- Plugin structure and manifest.22- Bundling skills, commands, hooks, agents, and MCP servers.23- Versioning and compatibility.24- Testing a plugin before distribution.25- Marketplace publication.2627## Inputs2829- The capabilities to bundle, and their coherence as a set.30- The audience and what they already have installed.31- Any external dependencies: MCP servers, API keys, binaries.3233## Outputs3435- A plugin that installs cleanly and works without further configuration.36- A manifest with accurate metadata.37- Documentation of what it provides and what it requires.3839## Workflow40411. **Bundle around a coherent purpose** — A plugin is a set of capabilities that a specific kind of user needs together. A grab-bag of unrelated skills is a worse experience than several focused plugins.422. **Write the manifest accurately** — Name, description, version, and what it provides. This is what users see when deciding whether to install.433. **Declare the dependencies honestly** — If a skill requires an MCP server, an API key, or a binary on the PATH, say so prominently. A plugin that silently fails on a missing dependency will be uninstalled.444. **Test from a clean install** — In an environment without your local configuration. Plugins that "work on my machine" are the standard failure.455. **Version semantically** — A breaking change to a skill's behavior is a major version. Users have workflows built on it.466. **Document what it does, not what it is** — Users care about what problems it solves.4748## Best Practices4950- A plugin's skills should not overlap with each other. If two skills in one plugin trigger on the same request, they will both load and cost double.51- Declare external requirements at the top of the README. The most common plugin failure is an unstated dependency.52- Provide a working example in the README — a real request and what the plugin does with it. This is worth more than a feature list.53- Do not bundle a skill that duplicates something the agent does well already. It adds cost and no capability.54- Test the uninstall path. A plugin that leaves hooks behind after removal is a bug that is hard for a user to diagnose.55- Pin any MCP server version the plugin depends on. An upstream change to a tool's schema will break your skills silently.5657## Examples5859**Plugin structure:**6061```text62my-plugin/63 .claude-plugin/64 plugin.json the manifest65 skills/66 review-pr/SKILL.md67 triage-issue/SKILL.md68 commands/69 standup.md a slash command70 hooks/71 hooks.json format-on-write72 .mcp.json the MCP servers this plugin needs73 README.md74```7576```json77{78 "name": "engineering-workflow",79 "version": "1.2.0",80 "description": "Pull-request review, issue triage, and standup summaries for teams working in GitHub and Linear.",81 "author": { "name": "Nima Dorostkar" },82 "homepage": "https://github.com/nimadorostkar/claude-skills",83 "keywords": ["code-review", "triage", "github", "linear"]84}85```8687**A README that prevents the most common failure:**8889```markdown90## Requirements9192This plugin requires two MCP servers, which are configured automatically on93install but need authorization:9495- **GitHub** — run `/mcp` and authorize. Without it, `review-pr` cannot read diffs.96- **Linear** — run `/mcp` and authorize. Without it, `triage-issue` will fail97 with "no Linear workspace".9899The plugin will install successfully without these, but the skills will not work.100101## Example102103 > review the PR at github.com/acme/api/pull/412104105The `review-pr` skill fetches the diff, reviews it for correctness, security,106and performance, and posts findings grouped by severity as review comments.107```108109## Notes110111- The most common plugin defect is an undeclared dependency: the author has an MCP server configured globally, so the plugin works for them and fails for everyone else. Always test in a clean profile.112- Marketplace descriptions are the plugin's only chance to be found. Include the tools and the tasks, in the words a user would search for.113- Breaking a skill's behavior without a major version bump breaks workflows built on it. Skills are an interface.