Type object
File match **/.claude-plugin/plugin.json
Schema URL https://catalog.lintel.tools/schemas/schemastore/claude-code-plugin-manifest/latest.json
Source https://www.schemastore.org/claude-code-plugin-manifest.json

Validate with Lintel

npx @lintel/lintel check
Type: object

Manifest (.claude-plugin/plugin.json) for a Claude Code plugin. Learn more: https://code.claude.com/docs/en/plugins-reference

Properties

name string required

Unique identifier for the plugin, used for namespacing (prefer kebab-case)

minLength=1
$schema string

JSON Schema reference for editor autocomplete/validation; ignored at load time

version string

Semantic version (e.g., 1.2.3) following semver.org specification

description string

Brief, user-facing explanation of what the plugin provides

author object

Information about the plugin creator or maintainer

3 nested properties
name string required

Display name of the plugin author or organization

minLength=1
email string

Contact email for support or feedback

url string

Website, GitHub profile, or organization URL

homepage string

Plugin homepage or documentation URL

format=uri
repository string

Source code repository URL

license string

SPDX license identifier (e.g., MIT, Apache-2.0)

keywords string[]

Tags for plugin discovery and categorization

dependencies string | object[]

Plugins that must be enabled for this plugin to function. Bare names (no "@marketplace") are resolved against the declaring plugin's own marketplace.

hooks string | object | string | object[]
commands string | string | string | string[] | object
agents string | string[]
skills string | string[]
outputStyles string | string[]
themes string | string[]
channels object[]

Channels this plugin provides. Each entry declares an MCP server as a message channel and optionally specifies user configuration to prompt for at enable time.

mcpServers string | string | string | object | string | string | string | object[]
lspServers string | object | string | object[]
monitors string | object[]

Background watch scripts the host arms as persistent Monitor tasks (unsandboxed, same trust tier as hooks) so plugins need not instruct the model to arm them. When omitted, monitors/monitors.json at the plugin root is loaded if present.

settings Record<string, any>

Settings to merge into the user settings while this plugin is enabled. Only the documented allowlisted keys are applied.

userConfig Record<string, object>

User-configurable values this plugin needs. Prompted at enable time. Non-sensitive values saved to settings.json; sensitive values to secure storage. Available as ${user_config.KEY} in MCP/LSP server config, hook commands, and (non-sensitive only) skill/agent content. Keep sensitive value counts small.