Help us improve
Share bugs, ideas, or general feedback.
From all-skills
Guides creation, validation, and management of Claude Code plugin marketplaces and marketplace.json files.
npx claudepluginhub vinnie357/claude-skills --plugin qaHow this skill is triggered — by the user, by Claude, or both
Slash command
/all-skills:plugin-marketplaceThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Guide for creating, validating, and managing plugin marketplaces for Claude Code. Includes schema validation, best practices, and automated tools.
Guides creating, validating, and managing Claude Code plugin marketplaces including marketplace.json schema, plugin entries, and best practices for setup and distribution.
Guides creation of Claude Code plugin marketplaces with marketplace.json manifests, directory structures, schema, owner metadata, and distribution strategies for teams.
Create and configure Claude Code marketplaces and plugins. Use when the user wants to create a marketplace, publish plugins, set up team plugin distribution, or configure marketplace.json or plugin.json files. Triggers: create marketplace, publish plugin, plugin distribution, marketplace.json, plugin.json, team plugins, share plugins
Share bugs, ideas, or general feedback.
Guide for creating, validating, and managing plugin marketplaces for Claude Code. Includes schema validation, best practices, and automated tools.
Activate this skill when:
.claude-plugin/marketplace.json filesAll marketplaces must be located at .claude-plugin/marketplace.json in the repository root.
Required Fields:
name: Marketplace identifier (kebab-case, lowercase alphanumeric and hyphens only)owner: Object with maintainer details (name required, email optional)plugins: Array of plugin definitions (can be empty)Optional Metadata:
metadata.description: Summary of marketplace purposemetadata.version: Marketplace version tracking (semantic versioning recommended)metadata.pluginRoot: Base directory for relative plugin source pathsIMPORTANT: Schema Relationship
Plugin entries use the plugin manifest schema with all fields made optional, plus marketplace-specific fields (source, strict, category, tags). This means any field valid in a plugin.json file can also be used in a marketplace entry.
strict: false, the marketplace entry serves as the complete plugin manifest if no plugin.json existsstrict: true (default), marketplace fields supplement the plugin's own manifest fileEach plugin entry in the plugins array requires:
Mandatory:
name: Plugin identifier (kebab-case)source: Location specification (string path or object)Standard Metadata:
description: Brief explanation of plugin functionalityversion: Semantic version numberauthor: Creator information (object with name, optional email)homepage: Documentation or project URLrepository: Source control URLlicense: SPDX license identifier (e.g., MIT, Apache-2.0)keywords: Array of discovery and categorization tagscategory: Organizational groupingtags: Additional searchability termsComponent Configuration:
commands: Custom paths to command files or directoriesagents: Custom paths to agent fileshooks: Custom hooks configuration or path to hooks filemcpServers: MCP server configurations or path to MCP configskills: Array of skill directory pathsStrict Mode Control:
strict: Boolean (default: true)
true: Plugin must include plugin.json; marketplace fields supplement itfalse: Marketplace entry serves as complete manifest (no plugin.json needed)Dependencies:
dependencies: Array of plugin names this plugin depends on (format: "namespace:plugin-name")"source": "./plugins/my-plugin"
// In marketplace metadata
"metadata": {
"pluginRoot": "./plugins"
}
// In plugin entry
"source": "my-plugin" // Resolves to ./plugins/my-plugin
"source": {
"source": "github",
"repo": "owner/plugin-repo",
"path": "optional/subdirectory",
"branch": "main"
}
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git",
"branch": "main"
}
Use ${CLAUDE_PLUGIN_ROOT} in paths to reference the plugin's installation directory:
{
"skills": [
"${CLAUDE_PLUGIN_ROOT}/skills/my-skill"
],
"commands": [
"${CLAUDE_PLUGIN_ROOT}/commands"
]
}
This ensures paths work correctly regardless of installation location.
Use strict: false to define complete plugin manifests inline without requiring plugin.json:
{
"name": "my-plugin",
"source": "./plugins/my-plugin",
"strict": false,
"description": "Complete plugin definition inline",
"version": "1.0.0",
"author": {
"name": "Developer Name"
},
"skills": [
"${CLAUDE_PLUGIN_ROOT}/skills/skill-one",
"${CLAUDE_PLUGIN_ROOT}/skills/skill-two"
]
}
Customize component locations:
{
"name": "custom-paths",
"source": "./plugins/custom",
"strict": false,
"commands": ["${CLAUDE_PLUGIN_ROOT}/custom-commands"],
"agents": ["${CLAUDE_PLUGIN_ROOT}/custom-agents"],
"hooks": {
"onInstall": "${CLAUDE_PLUGIN_ROOT}/hooks/install.sh"
},
"mcpServers": "${CLAUDE_PLUGIN_ROOT}/mcp-config.json"
}
With strict: true, marketplace entries can add metadata not in plugin.json:
{
"name": "existing-plugin",
"source": "./plugins/existing",
"strict": true,
"category": "development",
"keywords": ["added", "from", "marketplace"],
"homepage": "https://docs.example.com"
}
Use the provided Nushell script to validate marketplace.json:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-marketplace.nu .claude-plugin/marketplace.json
This validates:
Validate individual plugin entries:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-plugin-entry.nu .claude-plugin/marketplace.json "plugin-name"
Checks:
Check for circular dependencies and missing dependencies:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-dependencies.nu .claude-plugin/marketplace.json
vinnie357)elixir-phoenix, rust-tools, core-skills)development, language, tools, frontend, backend, metadependencies for plugins that require other pluginsall-skills) that bundles related pluginsall-skills:core)Use strict: false when:
Use strict: true when:
{
"metadata": {
"pluginRoot": "./plugins"
},
"plugins": [
{
"name": "core",
"source": "core" // Resolves to ./plugins/core
},
{
"name": "external",
"source": {
"source": "github",
"repo": "org/repo"
}
}
]
}
// ❌ Invalid
"name": "myPlugin"
"name": "my_plugin"
"name": "My-Plugin"
// ✅ Valid
"name": "my-plugin"
"name": "core-skills"
// ❌ Invalid
{
"name": "marketplace"
}
// ✅ Valid
{
"name": "marketplace",
"owner": {
"name": "Developer Name"
}
}
// ❌ Invalid (path doesn't exist)
"source": "./plugins/nonexistent"
// ✅ Valid (path exists)
"source": "./plugins/core"
// ❌ Invalid
{
"plugins": [
{
"name": "plugin-a",
"dependencies": ["namespace:plugin-b"]
},
{
"name": "plugin-b",
"dependencies": ["namespace:plugin-a"]
}
]
}
mkdir -p .claude-plugin
Use the validation script to generate a template:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/init-marketplace.nu
This creates .claude-plugin/marketplace.json with required fields.
For each plugin, decide on strict mode and add entry:
{
"name": "marketplace-name",
"owner": {
"name": "Your Name",
"email": "you@example.com"
},
"metadata": {
"description": "Your marketplace description",
"version": "1.0.0",
"pluginRoot": "./plugins"
},
"plugins": [
{
"name": "plugin-name",
"source": "plugin-name",
"strict": false,
"description": "Plugin description",
"version": "1.0.0",
"author": {
"name": "Your Name"
},
"license": "MIT",
"category": "development",
"skills": [
"${CLAUDE_PLUGIN_ROOT}/skills/skill-one"
]
}
]
}
nu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-marketplace.nu .claude-plugin/marketplace.json
claude-code install ./
Use the provided script to analyze existing structure:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/analyze-plugins.nu .
This scans for plugin.json files and suggests marketplace.json structure.
source path is correctpluginRoot in metadata if using relative paths${CLAUDE_PLUGIN_ROOT} if neededRun validation script with verbose mode:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-marketplace.nu .claude-plugin/marketplace.json --verbose
For detailed schema specifications and examples, see:
references/schema-specification.md: Complete JSON schemareferences/examples.md: Real-world marketplace examplesreferences/migration-guide.md: Step-by-step migration instructionsAll validation and utility scripts are located in scripts/:
validate-marketplace.nu: Full marketplace validationvalidate-plugin-entry.nu: Individual plugin entry validationvalidate-dependencies.nu: Dependency graph validationinit-marketplace.nu: Generate marketplace templateanalyze-plugins.nu: Analyze existing plugin structureformat-marketplace.nu: Format and sort marketplace.jsonExecute scripts with:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/[script-name].nu [args]