What is a Claude Code plugin marketplace?
To create a Claude Code plugin marketplace, you make a directory with a .claude-plugin/marketplace.json file that lists your plugins, test it locally, then push it to a git host so others can add it with one command. Anthropic's marketplace docs define it as "a directory or repository with a .claude-plugin/marketplace.json file that lists your plugins and where to fetch each one."
It is a catalog, not a store. You control who can reach it, it can be private, and it can list as many plugins as you want. If you are new to plugins themselves, start with the Claude Code plugins guide.
A marketplace is worth it when a group, such as your team or company, should install your plugins and keep getting updates. For other cases the docs suggest something simpler:
- One plugin for a few people: send the plugin directory or a
.zip. - A plugin for everyone: submit it to Anthropic's directory.
- Just for you: load it with
--plugin-dirwhile you develop.
How do you create a marketplace step by step?
You need at least one working plugin. The example below uses a plugin called my-first-plugin with one skill.
1. Set up the folder
mkdir -p my-marketplace/.claude-plugin my-marketplace/plugins
cp -r my-first-plugin my-marketplace/plugins/
claude plugin validate ./my-marketplace/plugins/my-first-plugin
Validating the plugin first means any later error is about the marketplace, not the plugin.
2. Write marketplace.json
Save this at my-marketplace/.claude-plugin/marketplace.json:
{
"name": "my-marketplace",
"description": "Plugins for my team",
"owner": {
"name": "Your Name"
},
"plugins": [
{
"name": "my-first-plugin",
"source": "./plugins/my-first-plugin",
"description": "A greeting plugin to learn the basics"
}
]
}
name, owner and plugins are required. Each plugin entry needs a name and a source.
3. Validate, add and install
claude plugin validate ./my-marketplace
claude plugin marketplace add ./my-marketplace
claude plugin install my-first-plugin@my-marketplace
claude plugin list
The install ID is always the entry name, an @, then the marketplace name. Start a session and run /my-first-plugin:hello to confirm the skill works. Plugin skills are always prefixed with the plugin's name.
While you iterate on a local marketplace, Claude Code reads plugin files directly, so edits show up at the next session start or after /reload-plugins. To start over, claude plugin marketplace remove my-marketplace removes it and uninstalls its plugins.
What goes in marketplace.json?
The marketplace reference lists every field. The ones most marketplaces use:
| Field | Required | What it does |
|---|---|---|
name |
Yes | Marketplace identifier users type after @ |
owner |
Yes | Maintainer info; name is required, email and url optional |
plugins |
Yes | One entry per plugin |
description |
No | Shown to users; validate warns when it's missing |
renames |
No | Maps old plugin names to new ones, or to null for removed plugins |
forceRemoveDeletedPlugins |
No | Uninstalls plugins you delete from the list |
Plugin entries take name, source, description, version, category, tags and most plugin.json fields. Names use letters, digits, dots, underscores and hyphens, starting with a letter or digit.
Two rules prevent most failed installs:
- Write relative paths from the marketplace root, the folder that contains
.claude-plugin/, so"./plugins/my-first-plugin". Don't use... - Keep the entry name and the plugin's own
plugin.jsonname the same. If they differ and someone installs by the manifest name, Claude Code reports that the plugin was not found.
Where can a plugin's files live?
Each entry's source says where Claude Code fetches that plugin:
| Source | Use it when | Example |
|---|---|---|
| Relative path | The plugin is inside the marketplace folder | "./plugins/my-first-plugin" |
github |
The plugin is its own GitHub repo | { "source": "github", "repo": "your-org/my-first-plugin" } |
git-subdir |
The plugin is a folder in another repo, such as a monorepo | { "source": "git-subdir", "url": "your-org/monorepo", "path": "tools/my-first-plugin" } |
There are also url (any git host), archive (a zip over HTTPS), npm and command sources. Git-based sources can be pinned to a ref or sha.
How do you host a plugin marketplace?
Once installing works on your machine, push the folder somewhere your users can reach. The hosting docs list four options, each with the command users run in a session:
| Host | Users run |
|---|---|
| GitHub | /plugin marketplace add your-org/your-marketplace |
| GitLab, Bitbucket, GitHub Enterprise Server or another git host | /plugin marketplace add https://gitlab.example.com/team/plugins.git |
A hosted marketplace.json URL |
/plugin marketplace add https://plugins.example.com/marketplace.json |
| A shared filesystem | /plugin marketplace add /Volumes/shared/claude-plugins |
Send the full URL for non-GitHub hosts, because owner/repo shorthand always means github.com. Users can append #<ref> to pin a branch or tag, such as your-org/your-marketplace#stable.
A few hosting details matter:
- URL-hosted catalogs download only the JSON file, so relative-path entries fail there. Use
githuborarchivesources, or host in a git repo. - Keep plugin files out of Git LFS. Clones never fetch LFS content.
- Share with one repo's contributors by running
claude plugin marketplace add your-org/your-marketplace --scope projectonce and committing the.claude/settings.jsonit writes.
Private repositories
Claude Code has no git token of its own. It runs git on each user's machine with prompts turned off, so users need credentials already in place: an SSH key loaded in ssh-agent, or an HTTPS credential their helper has stored. On GitHub, gh auth login followed by gh auth setup-git stores one. Users without a GitHub SSH key can set CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1.
How do you ship updates without breaking installs?
Users only get a new copy when a plugin's version changes. You have two choices:
- Bump
versionon every release. If you push new commits without changing it, users don't receive them. - Leave
versionout of bothplugin.jsonand the marketplace entry, so users track your commits.
Don't set version in both places; plugin.json wins and validate reports the mismatch.
Auto-update is off for third-party marketplaces by default. Users turn it on under Marketplaces in /plugin, or an admin sets "autoUpdate": true in managed settings. Otherwise users update with /plugin marketplace update <name>.
Never rename a plugin casually. Its name is stored in users' settings, so changing it breaks installs. To change the label people see, set displayName instead. If you must rename, add a renames map such as "formatter": "code-formatter" and keep old entries forever. For stable and beta tracks, host two marketplaces with different names whose entries point at different refs.
Finally, check the name. Anthropic reserves its official marketplace names, such as claude-plugins-official, names that imitate them, and names starting with claudeai-, among others.
How do you roll a marketplace out to a company?
An admin who controls managed settings can register your marketplace and enable its plugins for everyone with extraKnownMarketplaces and enabledPlugins. Team and Enterprise organizations can also sync a private marketplace repo through Organization settings > Plugins & skills on claude.ai, which uses the organization's GitHub or GitLab connection instead of each user's credentials. The Claude Code enterprise guide covers managed settings.
Keep the skills portable
Most plugins are mostly skills, and a skill is useful outside Claude Code too. Kipt keeps your Agent Skills as SKILL.md folders in a private GitHub repo you own, and you can import skills from a GitHub link, a folder or a .zip. Copy the ones you want into a plugin's skills/ folder, or install the whole library with npx skills add https://github.com/<you>/<repo>.git --all -g. To turn a single prompt into a skill, try the free SKILL.md generator. For how skills work on their own, see the Claude Code skills guide.