Skip to content

Plugin Manifest

The plugin.json file lives in the .claude-plugin/ directory and declares the plugin's components.

Fields

FieldTypeRequiredDescription
namestringyesPlugin name
versionstringnoSemantic version
descriptionstringnoPlugin description
authorobjectnoAuthor info (must be an object, not a string)
homepagestringnoHomepage URL
repositorystringnoRepository URL
licensestringnoLicense identifier
keywordsstring[]noSearch keywords
commandsstring | string[]noPath(s) to command directories
agentsstring | string[]noPath(s) to agent directories
skillsstring | string[]noPath(s) to skill directories
hooksstring | string[] | objectnoAdditional hooks config paths or inline config (see Auto-discovery)
mcpServersstring | string[] | objectnoAdditional MCP config paths or inline config (see Auto-discovery)
outputStylesstring | string[]noPath(s) to output style files
lspServersstring | string[] | objectnoAdditional LSP config paths or inline config (see Auto-discovery)

Author

The author field must be an object (string format is not supported):

FieldTypeRequiredDescription
namestringyesAuthor name
emailstringnoContact email
urlstringnoAuthor URL

Auto-discovery

Claude Code automatically loads components from default locations in the plugin root. The hooks, mcpServers, and lspServers fields in plugin.json are for additional files beyond these defaults:

  • Hookshooks/hooks.json (loaded automatically)
  • MCP.mcp.json (loaded automatically)
  • LSP.lsp.json (loaded automatically)

Specifying the default location in plugin.json (e.g., "hooks": "./hooks/hooks.json") causes a duplicate error. Only use these fields to reference files at non-default paths.

Example

json
{
  "name": "my-plugin",
  "version": "1.0.0",
  "description": "A Claude Code plugin for automated testing",
  "author": {
    "name": "Dev Team",
    "email": "dev@example.com"
  },
  "skills": "./skills/",
  "hooks": "./config/extra-hooks.json",
  "mcpServers": "./config/extra-mcp.json"
}