AgentSkillsCN

plugin-marketplace-creator

在 GitHub 上搭建并配置 Claude Code 插件市场。当用户希望新建插件市场仓库、为现有市场添加插件,或配置团队分发设置、解决市场相关问题时,可使用此技能。触发条件包括:“创建插件市场”、“在 GitHub 上搭建市场”、“为我的市场添加插件”、“为我的团队配置市场”、“分发 Claude Code 插件”。

SKILL.md
--- frontmatter
name: plugin-marketplace-creator
description: Create and configure Claude Code plugin marketplaces hosted on GitHub. Use this skill when users want to set up a new plugin marketplace repository, add plugins to an existing marketplace, configure team distribution settings, or troubleshoot marketplace issues. Triggers include "create a plugin marketplace", "set up a marketplace on GitHub", "add plugins to my marketplace", "configure marketplace for my team", or "distribute Claude Code plugins".

Plugin Marketplace Creator

Create Claude Code plugin marketplaces—catalogs that distribute plugins to teams and communities via GitHub.

Quick Start

  1. Run scripts/init_marketplace.py <name> --path <output-dir> to scaffold
  2. Edit .claude-plugin/marketplace.json to add plugins
  3. Push to GitHub
  4. Users install via /plugin marketplace add owner/repo

Marketplace Structure

code
marketplace-repo/
├── .claude-plugin/
│   └── marketplace.json    # Required: marketplace definition
├── plugins/                 # Optional: local plugins
│   └── my-plugin/
│       └── .claude-plugin/
│           └── plugin.json
└── README.md

Plugin Structure with Skills

Plugins containing skills should have this structure:

code
plugins/my-plugin/
├── .claude-plugin/
│   └── plugin.json      # NO "skills" field - skills are auto-discovered
└── skills/
    └── my-skill/
        └── SKILL.md

Important: Do NOT add a skills field to plugin.json. Skills are automatically discovered from the skills/ directory.

Marketplace JSON Schema

Required Fields

json
{
  "name": "marketplace-name",
  "owner": {
    "name": "Team Name",
    "email": "team@example.com"
  },
  "plugins": []
}

Optional Metadata

json
{
  "metadata": {
    "description": "Brief description",
    "version": "1.0.0",
    "pluginRoot": "./plugins"
  }
}

Reserved Names (cannot use)

claude-code-marketplace, claude-code-plugins, claude-plugins-official, anthropic-marketplace, anthropic-plugins, agent-skills, life-sciences

Plugin Entry Schema

FieldTypeRequiredDescription
namestringYesKebab-case identifier
sourcestring|objectYesWhere to fetch plugin
descriptionstringNoBrief description
versionstringNoSemantic version
authorobjectNo{name, email}
categorystringNoFor organization
keywordsarrayNoSearch tags
strictbooleanNoRequire plugin.json (default: true)

Source Types

Local path:

json
{"source": "./plugins/my-plugin"}

GitHub:

json
{"source": {"source": "github", "repo": "owner/repo"}}

Git URL:

json
{"source": {"source": "url", "url": "https://gitlab.com/team/plugin.git"}}

Complete Example

json
{
  "name": "company-tools",
  "owner": {
    "name": "DevTools Team",
    "email": "devtools@company.com"
  },
  "metadata": {
    "description": "Internal development tools",
    "version": "1.0.0"
  },
  "plugins": [
    {
      "name": "code-formatter",
      "source": "./plugins/formatter",
      "description": "Auto-format code on save",
      "version": "1.0.0",
      "category": "development"
    },
    {
      "name": "deploy-tools",
      "source": {"source": "github", "repo": "company/deploy-plugin"},
      "description": "Deployment automation",
      "category": "devops"
    }
  ]
}

Team Configuration

Add to project's .claude/settings.json for automatic installation:

json
{
  "extraKnownMarketplaces": {
    "team-tools": {
      "source": {"source": "github", "repo": "org/claude-plugins"}
    }
  },
  "enabledPlugins": {
    "code-formatter@team-tools": true
  }
}

Scripts

  • init_marketplace.py - Create new marketplace with proper structure
  • validate_marketplace.py - Validate marketplace.json and plugin sources
  • add_plugin.py - Add plugin entries to existing marketplace

Workflow

Creating a New Marketplace

Pre-flight checks (REQUIRED before running init script):

  1. Check git config for user identity:

    bash
    git config --get user.name
    git config --get user.email
    
  2. If either is not set, ASK THE USER for their name and email before proceeding. Use these values with --owner-name and --owner-email flags.

  3. Check if target directory already has a git repo:

    bash
    ls -la <target-path>/.git 2>/dev/null
    

    If .git exists, do NOT run git init when setting up the repository.

bash
# 1. Initialize (script auto-detects git config for owner info)
python scripts/init_marketplace.py my-marketplace --path ./output

# Or with explicit owner info if git config is not set:
python scripts/init_marketplace.py my-marketplace --path ./output \
  --owner-name "Your Name" --owner-email "you@example.com"

# 2. Validate
python scripts/validate_marketplace.py ./output

# 3. Push to GitHub (skip git init if .git already exists)
cd output
# Only run 'git init' if there's no existing .git directory
git add -A && git commit -m "Initial"
# Create repo on GitHub and push

# 4. Test in Claude Code
# /plugin marketplace add owner/my-marketplace

Adding Plugins

bash
# Add local plugin
python scripts/add_plugin.py ./marketplace --name my-plugin --source ./plugins/my-plugin

# Add GitHub plugin  
python scripts/add_plugin.py ./marketplace --name external --source github:org/repo

Troubleshooting

Marketplace not loading: Verify .claude-plugin/marketplace.json exists at repo root.

Plugin install fails: Check source is accessible. For private repos, ensure authentication.

Team can't see marketplace: Verify extraKnownMarketplaces in .claude/settings.json.

References

  • references/plugin-schema.md - Complete plugin.json schema
  • references/examples.md - Additional marketplace examples