Creates and manages plugin marketplaces for Claude Code, enabling plugin discovery, distribution, and team sharing. Generates marketplace.json files with proper schema, configures plugin sources (GitHub, Git, local), and sets up team configurations for automatic marketplace installation. Use when publishing Claude Code plugins, creating internal plugin catalogs, setting up team plugin distribution, or managing plugin discovery for Claude Code projects.
This skill inherits all available tools. When active, it can use any tool Claude has access to.
EXAMPLES.mdREFERENCE.mdscripts/create-marketplace.shCreates and manages plugin marketplaces for Claude Code, making plugins discoverable and installable across teams and projects.
A marketplace is a catalog of Claude Code plugins defined in a .claude-plugin/marketplace.json file. It enables:
{
"name": "my-marketplace",
"owner": {
"name": "Team Name",
"email": "team@example.com"
},
"plugins": [
{
"name": "plugin-name",
"source": "./plugins/plugin-name",
"description": "Plugin description",
"version": "1.0.0"
}
]
}
Step 1: Create marketplace directory
mkdir -p .claude-plugin
Step 2: Create marketplace.json
cat > .claude-plugin/marketplace.json << 'EOF'
{
"name": "team-tools",
"owner": {
"name": "Development Team",
"email": "dev@company.com"
},
"plugins": []
}
EOF
Step 3: Add plugins
Add plugin entries to the plugins array (see Plugin Entry Schema below)
Step 4: Test locally
/plugin marketplace add .
/plugin
| Field | Type | Description |
|---|---|---|
name | string | Marketplace identifier (kebab-case) |
owner | object | Maintainer information |
owner.name | string | Maintainer name |
owner.email | string | Contact email |
plugins | array | List of available plugins |
| Field | Type | Description |
|---|---|---|
metadata.description | string | Brief marketplace description |
metadata.version | string | Marketplace version |
metadata.pluginRoot | string | Base path for relative sources |
{
"name": "company-tools",
"owner": {
"name": "Engineering Team",
"email": "eng@company.com"
},
"metadata": {
"description": "Internal development tools and workflows",
"version": "2.0.0",
"pluginRoot": "./plugins"
},
"plugins": [
{
"name": "code-formatter",
"source": "./code-formatter",
"description": "Automatic code formatting on save",
"version": "2.1.0",
"author": {
"name": "Tools Team"
},
"keywords": ["formatting", "code-quality"]
}
]
}
{
"name": "plugin-name",
"source": "./path/to/plugin"
}
{
"name": "enterprise-tools",
"source": {
"source": "github",
"repo": "company/enterprise-plugin"
},
"description": "Enterprise workflow automation tools",
"version": "2.1.0",
"author": {
"name": "Enterprise Team",
"email": "enterprise@company.com"
},
"homepage": "https://docs.company.com/plugins",
"repository": "https://github.com/company/enterprise-plugin",
"license": "MIT",
"keywords": ["enterprise", "workflow", "automation"],
"category": "productivity",
"strict": false
}
Required:
name: Plugin identifier (kebab-case)source: Where to fetch plugin fromOptional Standard Fields:
description: Brief plugin descriptionversion: Plugin versionauthor: Author informationhomepage: Documentation URLrepository: Source code URLlicense: SPDX identifier (e.g., MIT)keywords: Tags for discoverycategory: Plugin categorytags: Searchability tagsstrict: Require plugin.json (default: true)Optional Component Configuration:
commands: Custom paths to command filesagents: Custom paths to agent fileshooks: Custom hooks configurationmcpServers: MCP server configurationsFor plugins in the same repository:
{
"name": "my-plugin",
"source": "./plugins/my-plugin"
}
With pluginRoot:
{
"metadata": {
"pluginRoot": "./plugins"
},
"plugins": [
{
"name": "my-plugin",
"source": "./my-plugin"
}
]
}
For plugins in GitHub repos:
{
"name": "github-plugin",
"source": {
"source": "github",
"repo": "owner/plugin-repo"
}
}
With specific branch:
{
"source": {
"source": "github",
"repo": "owner/plugin-repo",
"ref": "develop"
}
}
For plugins in other Git hosting:
{
"name": "git-plugin",
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git"
}
}
With specific branch:
{
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git",
"ref": "main"
}
}
For internal team tools:
{
"name": "company-internal",
"owner": {
"name": "Engineering",
"email": "eng@company.com"
},
"metadata": {
"description": "Internal development tools"
},
"plugins": [
{
"name": "deploy-tools",
"source": "./plugins/deploy-tools",
"description": "Deployment automation"
},
{
"name": "compliance-check",
"source": "./plugins/compliance-check",
"description": "Security and compliance validation"
}
]
}
Hosting: Private GitHub repo or internal Git server
For project-specific plugins:
{
"name": "project-tools",
"owner": {
"name": "Project Team",
"email": "project@company.com"
},
"plugins": [
{
"name": "project-workflow",
"source": "./plugins/workflow",
"description": "Project-specific workflow automation"
}
]
}
Hosting: In project repository at .claude-plugin/marketplace.json
For public/open-source plugins:
{
"name": "awesome-claude-plugins",
"owner": {
"name": "Community",
"email": "community@example.com"
},
"metadata": {
"description": "Curated collection of Claude Code plugins",
"homepage": "https://github.com/awesome-claude-plugins"
},
"plugins": [
{
"name": "markdown-tools",
"source": {
"source": "github",
"repo": "user/markdown-tools"
},
"description": "Markdown editing and preview tools",
"license": "MIT"
}
]
}
Hosting: Public GitHub repository
Configure team marketplaces in .claude/settings.json:
{
"extraKnownMarketplaces": {
"team-tools": {
"source": {
"source": "github",
"repo": "company/claude-plugins"
}
},
"project-specific": {
"source": {
"source": "git",
"url": "https://git.company.com/project-plugins.git"
}
}
}
}
When team members trust the folder, Claude Code automatically installs these marketplaces.
Different marketplaces for different environments:
{
"extraKnownMarketplaces": {
"production-tools": {
"source": {
"source": "github",
"repo": "company/prod-plugins"
}
},
"development-tools": {
"source": {
"source": "github",
"repo": "company/dev-plugins"
}
}
}
}
# GitHub repository
/plugin marketplace add owner/repo
# Git repository
/plugin marketplace add https://gitlab.com/company/plugins.git
# Local directory
/plugin marketplace add ./path/to/marketplace
# Direct URL
/plugin marketplace add https://url.of/marketplace.json
/plugin marketplace list
/plugin marketplace update marketplace-name
/plugin marketplace remove marketplace-name
Note: Removing a marketplace also uninstalls all plugins from that marketplace.
Initialize structure
mkdir -p .claude-plugin
Create marketplace.json
Add plugins
Test locally
/plugin marketplace add .
/plugin
Commit to version control
git add .claude-plugin/marketplace.json
git commit -m "feat: add plugin marketplace"
Create plugin entry
{
"name": "new-plugin",
"source": "./plugins/new-plugin",
"description": "Plugin description",
"version": "1.0.0"
}
Add to plugins array Edit marketplace.json and add entry
Validate JSON
jq empty .claude-plugin/marketplace.json
Update marketplace
/plugin marketplace update marketplace-name
Install plugin
/plugin install new-plugin@marketplace-name
Advantages:
Setup:
.claude-plugin/marketplace.json/plugin marketplace add owner/repoWorks with any Git hosting:
/plugin marketplace add https://gitlab.com/company/plugins.git
Advantages:
For testing and development:
/plugin marketplace add ./my-local-marketplace
/plugin install test-plugin@my-local-marketplace
Advantages:
# Validate JSON syntax
jq empty .claude-plugin/marketplace.json
# Validate required fields
jq -e '.name, .owner, .plugins' .claude-plugin/marketplace.json
# Check plugin entries
jq -e '.plugins[] | .name, .source' .claude-plugin/marketplace.json
# Check relative paths exist
for plugin in $(jq -r '.plugins[] | select(.source | type == "string") | .source' .claude-plugin/marketplace.json); do
if [[ ! -d "$plugin" ]]; then
echo "Missing: $plugin"
fi
done
# Validate GitHub repos (requires gh CLI)
for repo in $(jq -r '.plugins[] | select(.source.source == "github") | .source.repo' .claude-plugin/marketplace.json); do
gh repo view "$repo" > /dev/null || echo "Invalid repo: $repo"
done
Marketplace not loading:
.claude-plugin/marketplace.json existsPlugin installation failures:
Team configuration not working:
.claude/settings.json syntaxscripts/ for marketplace validation and management