Claude/Code/Plugin/Marketplace
Properties
Claude Code Plugin Marketplaces
- Official docs: Plugin marketplaces - Claude Code Docs
My Notes
- Claude Code Plugin Marketplaces are defined by Claude/Code/.claude-plugin/marketplace.json docs here.
- A Claude Code Marketplace can define many Claude Code Plugins.
- Each Claude Code Plugin can have many
- Claude/Code/Commands: Create markdown files in
commands/directory - Claude/Code/Subagents: Create agent definitions in
agents/directory - Claude Code Skills: Create
SKILL.mdfiles inskills/directory - Claude/Code/Hooks: Create
hooks/hooks.jsonfor event handling - Claude/Code/MCP/Servers: Create
.mcp.jsonfor external tool integration
- Claude/Code/Commands: Create markdown files in
- For example, Person/Daniel Avila/GitHub/claude-code-templates defines within its marketplace.json a supabase-toolkit plugin for Supabase (among dozens of other plugins)
{ "name": "supabase-toolkit", "source": "./", "description": "Complete Supabase workflow with specialized commands, data engineering agents, and MCP integrations", "version": "1.0.0", "author": {"name": "Daniel Avila"}, "license": "MIT", "keywords": ["supabase", "database", "postgresql", "data"], "strict": false, "commands": [ "./cli-tool/components/commands/database/supabase-backup-manager.md", "./cli-tool/components/commands/database/supabase-data-explorer.md", "./cli-tool/components/commands/database/supabase-migration-assistant.md", "./cli-tool/components/commands/database/supabase-performance-optimizer.md", "./cli-tool/components/commands/database/supabase-schema-sync.md" ], "agents": [ "./cli-tool/components/agents/data-ai/data-engineer.md", "./cli-tool/components/agents/data-ai/data-scientist.md" ], "mcpServers": [ "./cli-tool/components/mcps/database/postgresql-integration.json", "./cli-tool/components/mcps/database/mysql-integration.json", "./cli-tool/components/mcps/database/supabase.json" ] }
- Claude Code Plugin Marketplaces are defined by Claude/Code/.claude-plugin/marketplace.json docs here.
Creating a Claude Code Plugin Marketplace
- Four steps: build one or more Claude Code Plugins, define
.claude-plugin/marketplace.jsonat the marketplace repo root, host that repo on a git provider, then share it — users add it with/plugin marketplace addand install individual plugins with/plugin install. Marketplace file required fields
name— kebab-case identifier; public-facing (/plugin install my-tool@your-marketplace). Each user can register only one marketplace per name — adding a second with the same name replaces the first.owner— object withname(required) andemail(optional).plugins— array of plugin entries.- Reserved names blocked for third-party marketplaces (official Anthropic use only):
claude-code-marketplace,claude-code-plugins,claude-plugins-official,claude-plugins-community,claude-community,anthropic-marketplace,anthropic-plugins,agent-skills,anthropic-agent-skills,knowledge-work-plugins,life-sciences,claude-for-legal,claude-for-financial-services,financial-services-plugins,first-party-plugins,healthcare— plus names that impersonate an official one.
Marketplace file optional fields
description,version— also accepted nested undermetadatafor backward compatibility.$schema— JSON Schema URL for editor autocomplete; ignored by Claude Code at load time.metadata.pluginRoot— base directory prepended to relative plugin source paths.allowCrossMarketplaceDependenciesOn— other marketplaces this marketplace's plugins may depend on; unlisted dependencies are blocked at install.renames— map from a former pluginnameto its current name, or tonullif removed (Claude Code v2.1.193+).
Plugin entries
- Required:
name(kebab-case, public-facing) andsource(where to fetch the plugin — see below). - Can include any plugin-manifest field (
description,version,author,commands,hooks, …) plus marketplace-only fields:category,tags,strict,relevance,defaultEnabled,displayName. strict(defaulttrue):truemeansplugin.jsonis authoritative and the marketplace entry only supplements it;falsemeans the marketplace entry is the entire definition, and a component-declaringplugin.jsonon top of that is a load-time conflict.- Component paths (
skills,commands,agents,hooks,mcpServers,lspServers) can point at custom subpaths, so several entries can share one plugin repo's directory tree without loading each other's components.
- Required:
Plugin sources
Source Fields Notes relative path none must start with ./, resolves against the marketplace rootgithubrepo, ref?, sha? GitHub owner/repourlurl, ref?, sha? any git host git-subdirurl, path, ref?, sha? sparse clone of one subdir, good for monorepos npmpackage, version?, registry? installed via npm installgithub,url, andgit-subdirall acceptref(branch/tag) andsha(exact commit); when both are set,shawins.- Relative-path plugins only resolve when the marketplace itself was added from git or a local directory. A marketplace added by direct URL to
marketplace.jsondownloads just that file, so relative-path entries fail — usegithub,npm, or a git URL source instead.
Hosting and distribution
- GitHub is the recommended host:
/plugin marketplace add owner/repo. Any git host (GitLab, Bitbucket, self-hosted) works via its full URL. - To auto-prompt a team to install a marketplace on trusting the project folder, add it under
extraKnownMarketplacesin.claude/settings.json; pair withenabledPluginsto set defaults. strictKnownMarketplaces(managed settings) restricts which marketplaces users may add at all — an empty array locks it down completely, or an allowlist matches by exact source,hostPattern, orpathPattern.- Private repos: manual install/update reuses normal git credential helpers (HTTPS or SSH). Background auto-update disables credential helpers for its
git pull— SSH keys loaded inssh-agentstill work — and falls back to a full re-clone on failure; setCLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1to keep the stale clone instead of re-cloning.
- GitHub is the recommended host:
Version resolution
- Resolved in order:
plugin.jsonversion→ marketplace-entryversion→ git commit SHA. - Setting
versionpins the plugin to that string — bump it on every release, or omit it on a git-based source so every new commit counts as a new version. - Release channels: point two marketplaces at different refs/SHAs of the same plugin repo, then assign each to a user group through managed settings.
- Resolved in order:
Renaming or removing a plugin
nameis the stable identifier referenced inenabledPluginsandpluginConfigs; setdisplayNameto change the UI label without breaking existing installs.- To actually rename or remove an entry, add a top-level
renamesmap (former name → new name, ornullif removed) so existing users migrate automatically instead of hittingplugin-not-found. Treat it as append-only history — never edit or delete a prior mapping.
CLI management
claude plugin marketplace add <source> [--scope user|project|local] [--sparse <paths...>]claude plugin marketplace list [--json]claude plugin marketplace remove <name> [--scope ...]claude plugin marketplace update [name]- Validate before sharing:
claude plugin validate .against a marketplace directory, or against an individual plugin directory to check itsplugin.jsonand skill/agent/command frontmatter.
See also
- Four steps: build one or more Claude Code Plugins, define