AI & Agents

Claude Code Plugins: How to Build, Discover, and Install Plugins

Anthropic's official Claude Code marketplace hit 101 plugins by early 2026, with community registries indexing over 14,000 more. This guide walks through the plugin system from first principles: what plugins actually contain, how to build one from scratch, how to discover and install existing plugins, and how to distribute your own through marketplaces.

Fast.io Editorial Team 11 min read
Claude Code plugins extend the coding agent with custom skills, hooks, and MCP servers.

What Claude Code Plugins Actually Are

Anthropic's official Claude Code marketplace shipped with 101 plugins by early 2026, split between 33 first-party and 68 partner integrations, according to a Build to Launch review that tested 11 of them in depth. Community registries have since indexed over 14,000 additional plugins. The gap between "available" and "useful" is real, but the ecosystem is growing fast enough that understanding the plugin system is worth the investment.

A Claude Code plugin is a self-contained directory that extends Claude Code with custom functionality. According to the official plugins reference, plugins can include skills, agents, hooks, MCP servers, LSP servers, background monitors, themes, and default settings. The key difference between a plugin and standalone configuration in your .claude/ directory is distribution: plugins are namespaced, versioned, and shareable through marketplaces.

Here is the taxonomy that most existing coverage gets wrong:

Standalone skills live in your .claude/ directory. You invoke them with short names like /deploy or /review. They work for personal workflows and project-specific customizations.

Plugin skills are packaged inside a plugin directory with a manifest file. They get namespaced names like /my-plugin:deploy to prevent conflicts when multiple plugins define skills with the same name. They are designed for sharing with teammates and distributing to the community.

IDE extensions (VS Code, JetBrains) are a separate system entirely. They modify the editor UI and integrate Claude into the IDE workflow, but they do not use the plugin manifest format or marketplace system described here.

A plugin can bundle any combination of these components:

  • Skills in skills/ directories, each containing a SKILL.md file with YAML frontmatter and instructions
  • Agents in agents/ as markdown files that define specialized subagents with their own system prompts, model preferences, and tool restrictions
  • Hooks in hooks/hooks.json that respond to lifecycle events like PostToolUse, SessionStart, or PreToolUse
  • MCP servers in .mcp.json that connect Claude to external tools and services
  • LSP servers in .lsp.json for real-time code intelligence (diagnostics, go-to-definition, find-references)
  • Background monitors in monitors/monitors.json that watch logs or external status and notify Claude as events arrive
  • Themes in themes/ for custom color schemes
  • Default settings in settings.json for activating a custom agent as the main thread

How to Build Your First Plugin from Scratch

Every plugin starts with a directory and an optional manifest file. The manifest lives at .claude-plugin/plugin.json inside the plugin folder. If you skip the manifest, Claude Code auto-discovers components in their default locations and derives the plugin name from the directory name.

Start by creating the directory structure:

mkdir -p my-plugin/.claude-plugin
mkdir -p my-plugin/skills/code-review

Create the manifest at my-plugin/.claude-plugin/plugin.json:

{
  "name": "my-plugin",
  "description": "Code review and formatting tools",
  "version": "1.0.0",
  "author": {
    "name": "Your Name"
  }
}

The name field does double duty: it serves as the unique identifier and becomes the namespace prefix for all skills. Setting version explicitly means users only receive updates when you bump it. If you leave version out and distribute via git, every commit counts as a new version.

Now create a skill. Each skill is a folder inside skills/ containing a SKILL.md file:

---
description: Reviews code for best practices and common issues
---

When reviewing code, check for:
1. Code organization and structure
2. Error handling patterns
3. Security concerns (injection, XSS, auth)
4. Test coverage gaps
5. Performance bottlenecks

Provide specific line references and suggest fixes.

Test it locally using the --plugin-dir flag:

claude --plugin-dir ./my-plugin

Once Claude Code starts, invoke your skill with /my-plugin:code-review. Run /help to confirm it appears in the skill list. As you iterate, use /reload-plugins to pick up changes without restarting the session.

Skills accept dynamic input through the $ARGUMENTS placeholder. If your SKILL.md contains Review the file at "$ARGUMENTS", then running /my-plugin:code-review src/auth.ts passes the file path into the prompt.

Adding Hooks for Automated Workflows

Hooks let your plugin respond to Claude Code lifecycle events automatically. Create hooks/hooks.json at the plugin root (not inside .claude-plugin/):

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "\"${CLAUDE_PLUGIN_ROOT}\"/scripts/lint.sh"
          }
        ]
      }
    ]
  }
}

This runs your lint script every time Claude writes or edits a file. The ${CLAUDE_PLUGIN_ROOT} variable resolves to your plugin's installation directory, so bundled scripts work regardless of where the plugin is installed.

Hook types include command (shell scripts), http (POST to a URL), mcp_tool (call a configured MCP server tool), prompt (evaluate with an LLM), and agent (run an agentic verifier). The event system covers 25+ lifecycle points, from SessionStart to PreToolUse to FileChanged.

Bundling MCP Servers

Plugins can bundle MCP server configurations so users get external tool access without manual setup. Create .mcp.json at the plugin root:

{
  "mcpServers": {
    "project-api": {
      "command": "npx",
      "args": ["@company/mcp-server", "--plugin-mode"],
      "cwd": "${CLAUDE_PLUGIN_ROOT}"
    }
  }
}

Plugin MCP servers start automatically when the plugin is enabled and appear as standard tools in Claude's toolkit. This is how integration plugins like GitHub, Linear, Sentry, and Slack work in the official marketplace: each one bundles a pre-configured MCP server.

For teams that use Fast.io as their workspace layer, an MCP plugin could configure the Fast.io endpoint at /mcp (Streamable HTTP) or /sse (legacy SSE), giving Claude direct access to workspace operations, file management, and Intelligence Mode queries without requiring each developer to set up the connection manually.

How to Discover and Install Existing Plugins

Claude Code ships with the official Anthropic marketplace pre-registered. Run /plugin to open the plugin manager, then navigate to the Discover tab to browse what is available. You can also install directly from the command line:

/plugin install github@claude-plugins-official

The official marketplace includes several categories worth knowing about:

Code intelligence plugins configure LSP connections for languages like TypeScript, Python, Rust, Go, Swift, and C++. Once installed, Claude gets instant diagnostics after every edit and can jump to definitions, find references, and see type information. These require the language server binary to be installed on your system.

Integration plugins bundle pre-configured MCP servers for external services. The current lineup includes GitHub, GitLab, Atlassian (Jira/Confluence), Asana, Linear, Notion, Figma, Vercel, Firebase, Supabase, Slack, and Sentry.

The security-guidance plugin reviews each change Claude makes for common vulnerabilities and instructs Claude to fix issues in the same session.

Workflow plugins add skills for common development tasks: commit-commands for git workflows, pr-review-toolkit for pull request review, and plugin-dev for building your own plugins.

Beyond the official marketplace, add the community marketplace for third-party plugins:

/plugin marketplace add anthropics/claude-plugins-community

Install from it using the claude-community name:

/plugin install some-plugin@claude-community

Marketplaces also support private git repositories, GitLab, Bitbucket, local directories, and remote URLs. A team lead can host an internal marketplace in a private GitHub repo and share it with the team through the project's .claude/settings.json:

{
  "extraKnownMarketplaces": {
    "team-tools": {
      "source": {
        "source": "github",
        "repo": "your-org/claude-plugins"
      }
    }
  }
}

When team members trust the repository folder, Claude Code prompts them to install these marketplaces and plugins automatically.

Plugin marketplace discovery interface showing available extensions
Fastio features

Give your Claude Code plugins persistent file storage

Fast.io provides shared storage with MCP access at /mcp, auto-indexed files for semantic search, and ownership transfer from agent to human. Starts with a 14-day free trial.

Plugin Architecture Deep Dive

Understanding the full manifest schema helps when building plugins that go beyond simple skills. The .claude-plugin/plugin.json file supports these fields:

{
  "name": "deployment-tools",
  "displayName": "Deployment Tools",
  "version": "2.1.0",
  "description": "CI/CD automation for production deploys",
  "author": {"name": "Dev Team"},
  "homepage": "https://docs.example.com",
  "repository": "https://github.com/team/plugin",
  "license": "MIT",
  "keywords": ["deployment", "ci-cd"],
  "dependencies": [
    "helper-lib",
    {"name": "secrets-vault", "version": "~2.1.0"}
  ],
  "userConfig": {
    "api_token": {
      "type": "string",
      "title": "API Token",
      "description": "Your deployment service API token",
      "sensitive": true
    }
  }
}

The dependencies array declares other plugins that yours requires. When a user installs your plugin, dependencies are auto-installed alongside it. Version constraints follow semver syntax.

The userConfig field defines values that Claude Code prompts for when the plugin is enabled. Sensitive values (API tokens, secrets) are stored in the system keychain rather than settings.json. Non-sensitive values are available for substitution as ${user_config.KEY} in MCP configs, hook commands, and monitor commands.

Three environment variables are available across all plugin components:

  • ${CLAUDE_PLUGIN_ROOT} points to the plugin's installation directory. Use it to reference bundled scripts and configs.
  • ${CLAUDE_PLUGIN_DATA} is a persistent directory that survives plugin updates. Store installed dependencies (node_modules, virtual environments) and caches here.
  • ${CLAUDE_PROJECT_DIR} points to the project root where Claude Code was launched.

Installation Scopes

Plugins install into one of four scopes:

  • User scope (default): stored in ~/.claude/settings.json, available across all projects
  • Project scope: stored in .claude/settings.json, shared via version control with all collaborators
  • Local scope: stored in .claude/settings.local.json, project-specific but gitignored
  • Managed scope: set by administrators via managed settings, read-only for users

For team-wide plugins, project scope is the right choice. It means anyone who clones the repo and trusts the workspace gets the plugins automatically. For personal productivity plugins, user scope keeps them available everywhere without cluttering project configs.

Skills-Directory Plugins

Instead of installing from a marketplace, you can scaffold a plugin directly in your skills directory:

claude plugin init my-tool

This creates ~/.claude/skills/my-tool/ with a .claude-plugin/plugin.json manifest and a starter SKILL.md. On the next session it loads as my-tool@skills-dir with no marketplace or install step required.

Project-scope skills-directory plugins live in <project>/.claude/skills/ and load after the workspace trust dialog. They are checked into the repository and reach every collaborator who clones it. MCP servers declared by project-scope plugins still go through per-server approval, and background monitors do not load for security reasons.

Distributing Plugins Through Marketplaces

A marketplace is a git repository (or a hosted JSON file) containing a .claude-plugin/marketplace.json catalog. Each entry in the catalog points to a plugin source, either a subdirectory in the same repository or an external git URL.

To submit a plugin to the official community marketplace, use one of Anthropic's submission forms:

  • claude.ai: Navigate to Admin Settings, then Directory, then Submissions, then Plugins
  • Console: Go to platform.claude.com/plugins/submit

Run claude plugin validate locally before submitting. The review pipeline runs the same validation along with automated safety screening. Approved plugins are pinned to a specific commit SHA in the community catalog, and CI bumps the pin automatically as you push new commits.

For private distribution, create your own marketplace repository:

  1. Create a git repository with a .claude-plugin/marketplace.json file
  2. Add entries pointing to your plugin directories or external repos
  3. Share the marketplace with your team using extraKnownMarketplaces in the project's .claude/settings.json

Users add your marketplace and install plugins from it:

/plugin marketplace add your-org/your-marketplace
/plugin install your-plugin@your-marketplace

Marketplace auto-updates are configurable per marketplace. Official marketplaces have auto-updates enabled by default. When an update is available, Claude Code refreshes the marketplace data at startup and prompts users to run /reload-plugins.

Connecting Plugins to External Workspaces

The MCP server bundling capability makes plugins the natural distribution mechanism for workspace integrations. Rather than asking every developer on a team to manually configure MCP connections, a plugin packages the server config once and distributes it through a marketplace.

For local file management, agents using Claude Code already have direct filesystem access. But when teams need persistent storage that survives across sessions, shared workspaces where agents and humans collaborate on the same files, or structured handoff from agent to human, a cloud workspace adds a layer that local storage cannot provide.

Options for persistent agent storage include S3 buckets (cheap, no collaboration features), Google Drive or Dropbox (familiar but limited API access for agents), and purpose-built agent workspaces like Fast.io that expose MCP endpoints for direct agent access.

Fast.io's MCP server provides Streamable HTTP at /mcp and legacy SSE at /sse, with 19 consolidated tools covering workspace operations, file management, AI queries, and workflow automation. A plugin could bundle this as a pre-configured MCP server, giving every team member's Claude Code instance workspace access on install. Every org starts with a 14-day free trial, with storage, monthly credits, and workspaces scaled to each plan, which removes the friction of getting a team started.

Intelligence Mode auto-indexes uploaded files for semantic search and citation-backed chat, so agents can query project documentation without setting up a separate vector database. Ownership transfer lets an agent build workspaces and shares, then hand them off to a human client while retaining admin access.

Frequently Asked Questions

How do I create a Claude Code plugin?

Create a directory with a `.claude-plugin/plugin.json` manifest file and a `skills/` directory containing your skill folders. Each skill folder needs a `SKILL.md` file with YAML frontmatter and instructions. Test locally with `claude --plugin-dir ./your-plugin`, then distribute through a marketplace when ready to share.

What is the difference between Claude Code plugins and skills?

Skills are standalone markdown files in your `.claude/` directory with short invocation names like `/deploy`. Plugins are self-contained directories that package skills alongside agents, hooks, MCP servers, and other components. Plugin skills get namespaced names like `/plugin-name:deploy` to prevent conflicts. The tradeoff is convenience versus shareability: skills are simpler for personal use, plugins are designed for distribution.

Where can I find Claude Code plugins?

The official Anthropic marketplace is pre-registered when you install Claude Code. Run `/plugin` and go to the Discover tab to browse. For community-contributed plugins, add the community marketplace with `/plugin marketplace add anthropics/claude-plugins-community`. You can also add private team marketplaces from GitHub, GitLab, or any git host.

Can I share Claude Code plugins with my team?

Yes. Install plugins at project scope (stored in `.claude/settings.json`) so they are shared via version control. For a private collection, create a marketplace repository and add it to your project's `extraKnownMarketplaces` setting. When team members trust the repository folder, Claude Code prompts them to install the marketplace and plugins automatically.

How do Claude Code plugins differ from VS Code extensions?

Claude Code plugins extend the Claude Code agent itself with skills, agents, hooks, and MCP servers. VS Code extensions modify the editor UI and integrate Claude into the IDE. They use completely separate manifest formats and distribution systems. A Claude Code plugin works the same whether you run Claude Code in the terminal, VS Code, JetBrains, or the web app.

Can plugins bundle MCP servers?

Yes. Add an `.mcp.json` file at the plugin root with your server configurations. Plugin MCP servers start automatically when the plugin is enabled and appear as standard tools in Claude's toolkit. This is how official integration plugins for GitHub, Slack, Sentry, and other services work.

How do I debug a plugin that is not working?

Check that your directories are at the plugin root, not inside `.claude-plugin/`. Only `plugin.json` goes inside `.claude-plugin/`. Test components individually by invoking skills, checking `/agents` for agents, and verifying hooks trigger on the expected events. Run `claude plugin validate ./your-plugin` to catch manifest issues, and check the Errors tab in the `/plugin` interface for load errors.

Related Resources

Fastio features

Give your Claude Code plugins persistent file storage

Fast.io provides shared storage with MCP access at /mcp, auto-indexed files for semantic search, and ownership transfer from agent to human. Starts with a 14-day free trial.