// This skill should be used when the user asks to "create a marketplace", "set up marketplace.json", "organize multiple plugins", "distribute plugins", "host plugins", "marketplace schema", "plugin marketplace structure", "multi-plugin organization", or needs guidance on plugin marketplace creation, marketplace manifest configuration, or plugin distribution strategies.
| name | marketplace-structure |
| description | This skill should be used when the user asks to "create a marketplace", "set up marketplace.json", "organize multiple plugins", "distribute plugins", "host plugins", "marketplace schema", "plugin marketplace structure", "multi-plugin organization", or needs guidance on plugin marketplace creation, marketplace manifest configuration, or plugin distribution strategies. |
A plugin marketplace is a catalog of available plugins that enables centralized discovery, version management, and distribution. This skill covers creating and maintaining marketplaces for team or community plugin distribution.
Marketplaces provide:
| Create a Plugin | Create a Marketplace |
|---|---|
| Single-purpose extension | Collection of related plugins |
| Used directly by end users | Distributes multiple plugins |
| One team or individual maintains it | Curates plugins from various sources |
Installed via /plugin install | Added via /plugin marketplace add |
Place marketplace.json in the .claude-plugin/ directory at the repository root:
marketplace-repo/
โโโ .claude-plugin/
โ โโโ marketplace.json # Required: Marketplace manifest
โโโ plugins/ # Optional: Local plugin directories
โ โโโ plugin-one/
โ โ โโโ .claude-plugin/
โ โ โโโ plugin.json
โ โโโ plugin-two/
โ โโโ .claude-plugin/
โ โโโ plugin.json
โโโ README.md # Recommended: Marketplace documentation
The marketplace.json manifest defines the marketplace and its available plugins.
| Field | Type | Description |
|---|---|---|
name | string | Marketplace identifier (kebab-case, no spaces) |
owner | object | Marketplace maintainer information |
plugins | array | List of available plugin entries |
{
"owner": {
"name": "Team Name",
"email": "team@example.com",
"url": "https://github.com/team"
}
}
{
"metadata": {
"description": "Brief marketplace description",
"version": "1.0.0",
"pluginRoot": "./plugins"
}
}
The pluginRoot field sets the base path for relative plugin sources.
Each plugin in the plugins array requires:
| Field | Type | Description |
|---|---|---|
name | string | Plugin identifier (kebab-case, unique within marketplace) |
source | string or object | Where to fetch the plugin |
Standard metadata fields:
description - Brief plugin descriptionversion - Plugin version (semver)author - Author information objecthomepage - Documentation URLrepository - Source code URLlicense - SPDX license identifierkeywords - Tags for discoverycategory - Plugin categorytags - Additional searchability tagsComponent configuration fields:
commands - Custom paths to command files or directoriesagents - Custom paths to agent fileshooks - Hooks configuration or path to hooks filemcpServers - MCP server configurationsFor complete field reference, see references/schema-reference.md.
For plugins within the same repository:
{
"name": "my-plugin",
"source": "./plugins/my-plugin"
}
{
"name": "github-plugin",
"source": {
"source": "github",
"repo": "owner/plugin-repo"
}
}
For GitLab, Bitbucket, or self-hosted git:
{
"name": "git-plugin",
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git"
}
}
The strict field controls whether plugins must have their own plugin.json:
| Mode | Behavior |
|---|---|
strict: true (default) | Plugin must include plugin.json; marketplace entry supplements it |
strict: false | plugin.json optional; marketplace entry serves as complete manifest |
Use strict: false when:
{
"name": "external-plugin",
"source": {
"source": "github",
"repo": "external/plugin"
},
"description": "Complete metadata here",
"version": "2.0.0",
"strict": false
}
version for every plugin entrydescription for discoverabilitymetadata.version/plugin marketplace add owner/repoextraKnownMarketplaces in .claude/settings.json/plugin marketplace add ./path during developmentFor detailed distribution patterns, see references/distribution-patterns.md.
Validate marketplace structure before publishing:
# Check JSON syntax
jq . .claude-plugin/marketplace.json
# Verify required fields
jq 'has("name") and has("owner") and has("plugins")' .claude-plugin/marketplace.json
Use the plugin-validator agent with marketplace support for comprehensive validation.
{
"name": "team-tools",
"owner": {
"name": "DevTools Team",
"email": "devtools@company.com",
"url": "https://github.com/company"
},
"metadata": {
"description": "Internal development tools for the engineering team",
"version": "1.0.0"
},
"plugins": [
{
"name": "code-formatter",
"source": "./plugins/formatter",
"description": "Automatic code formatting on save",
"version": "2.1.0"
},
{
"name": "security-scanner",
"source": {
"source": "github",
"repo": "company/security-plugin"
},
"description": "Security vulnerability detection",
"version": "1.5.0",
"category": "security"
}
]
}
references/schema-reference.md - Complete field reference for marketplace.jsonreferences/distribution-patterns.md - Hosting and team distribution strategiesexamples/minimal-marketplace.md - Single plugin marketplace templateexamples/team-marketplace.md - Internal company marketplace templateexamples/community-marketplace.md - Public multi-plugin marketplace templateplugin.json details/plugin-dev:create-marketplace - Guided marketplace creation workflowThis repository (plugin-dev) is itself a marketplace. Examine .claude-plugin/marketplace.json at the repository root for a real-world example of marketplace structure and plugin organization.