Type object
File match **/.claude-plugin/marketplace.json .claude-plugin/marketplace.json
Schema URL https://catalog.lintel.tools/schemas/claude-code/marketplace/latest.json

Validate with Lintel

npx @lintel/lintel check
Type: object

Schema for Claude Code marketplace catalog (.claude-plugin/marketplace.json). Marketplaces distribute plugins to teams and communities, providing centralized discovery, version tracking, and automatic updates. Each marketplace lists plugins with their sources (local paths, GitHub repos, git URLs, npm packages, or pip packages). Users add marketplaces via /plugin marketplace add and install individual plugins with /plugin install plugin-name@marketplace-name.

Properties

name string required

Marketplace identifier (kebab-case, no spaces). This is public-facing — users see it when installing plugins (e.g. /plugin install my-tool@your-marketplace). Reserved names (cannot be used): claude-code-marketplace, claude-code-plugins, claude-plugins-official, anthropic-marketplace, anthropic-plugins, agent-skills, life-sciences. Names that impersonate official marketplaces are also blocked.

Examples: "acme-tools", "company-tools", "my-plugins"
pattern=^[a-z0-9][a-z0-9-]*$
owner object required

Marketplace maintainer information.

2 nested properties
name string required

Name of the maintainer or team.

Examples: "DevTools Team", "Jane Doe"
email string

Contact email for the maintainer.

Examples: "[email protected]"
plugins PluginEntry[] required

List of available plugins in this marketplace. Each entry needs at minimum a name and source. Plugin entries can also include any field from the plugin manifest schema (description, version, author, commands, hooks, etc.).

metadata object

Optional marketplace-level metadata.

3 nested properties
description string

Brief marketplace description.

Examples: "Internal tools for the DevOps team"
version string

Marketplace catalog version.

Examples: "1.0.0"
pluginRoot string

Base directory prepended to relative plugin source paths. For example, setting this to ./plugins lets you write "source": "formatter" instead of "source": "./plugins/formatter".

Examples: "./plugins"

Definitions

Owner object

Marketplace maintainer information.

name string required

Name of the maintainer or team.

Examples: "DevTools Team", "Jane Doe"
email string

Contact email for the maintainer.

Examples: "[email protected]"
Metadata object

Optional marketplace-level metadata.

description string

Brief marketplace description.

Examples: "Internal tools for the DevOps team"
version string

Marketplace catalog version.

Examples: "1.0.0"
pluginRoot string

Base directory prepended to relative plugin source paths. For example, setting this to ./plugins lets you write "source": "formatter" instead of "source": "./plugins/formatter".

Examples: "./plugins"
PluginEntry object

A plugin listed in the marketplace. Includes marketplace-specific fields (source, category, tags, strict) plus any field from the plugin manifest schema (description, version, author, commands, hooks, etc.).

name string required

Plugin identifier (kebab-case, no spaces). This is public-facing — users see it when installing (e.g. /plugin install my-plugin@marketplace).

Examples: "code-formatter", "deployment-tools", "review-plugin"
pattern=^[a-z0-9][a-z0-9-]*$
source string | GitHubSource | UrlSource | NpmSource | PipSource required
description string

Brief plugin description shown when browsing the marketplace.

Examples: "Automatic code formatting on save"
version string

Plugin version. If the plugin also has a version in its plugin.json, the plugin.json version takes priority. For relative-path plugins, set the version here. For remote plugins, set it in plugin.json. See version resolution.

Examples: "1.0.0", "2.1.0"
author Author

Plugin author information.

homepage string

Plugin homepage or documentation URL.

Examples: "https://docs.example.com/plugins/my-tool"
repository string

Source code repository URL.

Examples: "https://github.com/company/my-plugin"
license string
Examples: "MIT", "Apache-2.0"
keywords string[]

Tags for plugin discovery and categorization.

Examples: ["enterprise","workflow","automation"]
category string

Plugin category for organization.

Examples: "productivity", "code-quality", "deployment"
tags string[]

Tags for searchability.

Examples: ["lint","format","style"]
strict boolean

Controls whether plugin.json is the authority for component definitions. When true (default), plugin.json is authoritative and the marketplace entry can supplement it with additional components (both are merged). When false, the marketplace entry is the entire definition — if the plugin also has a plugin.json that declares components, that's a conflict and the plugin fails to load. See strict mode.

Default: true
commands Path Or Paths

Custom paths to command files or directories, relative to the plugin root.

agents Path Or Paths

Custom paths to agent files, relative to the plugin root.

skills Path Or Paths

Custom paths to skill directories, relative to the plugin root.

hooks string | string[] | Hooks

Hook configuration — paths to JSON config files or inline definitions.

mcpServers string | string[] | object

MCP server configuration — paths to JSON config files or inline definitions.

outputStyles Path Or Paths

Custom paths to output style files or directories.

lspServers string | string[] | object

LSP server configuration — paths to JSON config files or inline definitions.

PluginSource string | GitHubSource | UrlSource | NpmSource | PipSource
GitHubSource object

Fetch the plugin from a GitHub repository. Supports pinning to a branch, tag, or exact commit SHA.

source const: "github" required
Constant: "github"
repo string required

GitHub repository in owner/repo format.

Examples: "owner/plugin-repo", "company/enterprise-plugin"
pattern=^[^/]+/[^/]+$
ref string

Git branch or tag. Defaults to the repository's default branch.

Examples: "main", "v2.0.0", "stable"
sha string

Full 40-character git commit SHA to pin to an exact version.

Examples: "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
pattern=^[0-9a-f]{40}$
UrlSource object

Fetch the plugin from a git URL (GitHub, GitLab, Bitbucket, self-hosted, etc.).

source const: "url" required
Constant: "url"
url string required

Full git repository URL (must end with .git).

Examples: "https://gitlab.com/team/plugin.git"
pattern=\.git$
ref string

Git branch or tag. Defaults to the repository's default branch.

Examples: "main", "v1.0.0"
sha string

Full 40-character git commit SHA to pin to an exact version.

pattern=^[0-9a-f]{40}$
NpmSource object

Install the plugin from an npm registry via npm install.

source const: "npm" required
Constant: "npm"
package string required

npm package name.

Examples: "@company/mcp-server", "my-claude-plugin"
version string

Version range or exact version.

Examples: "1.0.0", "^2.0.0"
registry string

Custom npm registry URL.

Examples: "https://npm.company.com"
PipSource object

Install the plugin via pip.

source const: "pip" required
Constant: "pip"
package string required

Python package name.

Examples: "my-claude-plugin"
version string

Version specifier.

Examples: "1.0.0", ">=2.0"
registry string

Custom PyPI registry URL.

Examples: "https://pypi.company.com/simple"