Skip to content

Plugin Manifest ​

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

Fields ​

FieldTypeRequiredDescription
$schemastringnoJSON Schema reference URL
namestringyesPlugin name
versionstringnoVersion string (semantic versioning is recommended)
descriptionstringnoPlugin description
authorobjectnoAuthor info (must be an object, not a string)
homepagestringnoHomepage URL
repositorystringnoRepository URL
licensestringnoLicense identifier
keywordsstring[]noSearch keywords
commandsstring | object | (string | object)[]noFlat command paths or a command map; each entry has exactly one of source or content
agentsstring | string[]noPath(s) to agent Markdown files
skillsstring | string[]noPath(s) to skill directories
hooksstring | object | (string | object)[]noAdditional hooks config paths or inline config (see Auto-discovery)
mcpServersstring | object | (string | object)[]noAdditional MCP config paths or inline config (see Auto-discovery)
outputStylesstring | string[]noPath(s) to output style files
lspServersstring | object | (string | object)[]noAdditional LSP config paths or inline config (see Auto-discovery)
themesstring | string[]noColor theme files/directories that appear in /theme alongside built-in presets
monitorsstring | object[]noBackground Monitor configurations that start automatically when the plugin is active
userConfigobjectnoUser-configurable values prompted at enable time, keyed by valid identifier names
channelsobject[]noChannel declarations that bind to MCP servers for message injection (Telegram, Slack, Discord style)
dependencies(string | object)[]noOther plugins this plugin requires, optionally with semver version constraints
displayNamestringnoHuman-readable display name
defaultEnabledbooleannoInitial enablement when the user has not chosen a state; default true
metadataobjectnoFree-form data for other tooling
workflowsstring | string[]noWorkflow script files or directories
experimentalobjectnoExperimental components: themes and evals paths, and a monitors file or inline array
iconstringnoPlugin directory listing image path
documentationUrlstringnoHTTPS documentation URL for the directory listing
supportUrlstringnoHTTPS support URL for the directory listing
privacyPolicyUrlstringnoHTTPS privacy policy URL for the directory listing
termsOfServiceUrlstringnoHTTPS terms URL for the directory listing
settingsobjectnoPlugin defaults for agent and command-based subagentStatusLine
typesstringnoPath to mod state and noun TypeScript declarations

userConfig options accept type, title, description, required, default, options, multiple, sensitive, min, and max. A fixed options list applies only to a non-sensitive, single string value; labels are 1–64 characters. Supply a listed default or make the selection required. Unknown option keys are rejected.

Command map entries accept source or content, plus description, argumentHint, model, and allowedTools. Inline monitor entries require name, command, and description; optional when is always or on-skill-invoke:<skill>.

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:

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

Paths are relative to the plugin root, outside .claude-plugin/. Use additional paths to avoid loading default resources twice. Inline hooks use an event map; hook files use a top-level hooks wrapper. MCP bundle HTTPS URLs and the skills path "." are supported.

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"
}