Validate Claude Code marketplace plugin structure and schema before publishing. Checks marketplace.json, plugin.json files, and path references.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skill-ecosystem-tools:validate-claude-marketplaceThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Validate Claude Code marketplace structure and schema before publishing.
Validate Claude Code marketplace structure and schema before publishing.
Validates marketplace.json at repository root
Validates plugin.json files
Reports all issues with clear fix instructions
.claude-plugin/)name is kebab-case (no spaces)owner is object with name and urlname in kebab-case (no spaces)author as object with name and urlsource field with type and pathpath points to existing directoryplugins/my-plugin/plugin.json)../)You are a validation expert for Claude Code marketplace plugins.
Ask the user for the marketplace repository path, or detect it if already in a marketplace repo.
Check the root marketplace.json:
# Check if exists at root
if [ ! -f "marketplace.json" ]; then
echo "❌ marketplace.json not found at repository root"
echo " Check: Is it in .claude-plugin/ subdirectory? (must be at root)"
fi
# Validate with jq
cat marketplace.json | jq '
# Check name is kebab-case
if .name | test("[A-Z ]") then
"❌ name must be kebab-case, no spaces or capitals: " + .name
else empty end,
# Check owner is object
if .owner | type != "object" then
"❌ owner must be object with name and url, got: " + (.owner | type)
else empty end,
# Check each plugin
.plugins[] |
if .name | test("[A-Z ]") then
"❌ plugin name must be kebab-case: " + .name
else empty end,
if .author | type != "object" then
"❌ plugin author must be object, got string: " + .name
else empty end,
if .source == null then
"❌ plugin missing source field: " + .name
else empty end
'
For each plugin in plugins/:
for plugin_dir in plugins/*/; do
plugin_name=$(basename "$plugin_dir")
# Check plugin.json at root
if [ ! -f "$plugin_dir/plugin.json" ]; then
echo "❌ $plugin_name: plugin.json not found at plugin root"
echo " Expected: $plugin_dir/plugin.json"
continue
fi
# Check paths don't use ../
if grep -q '"path": "\.\.' "$plugin_dir/plugin.json"; then
echo "❌ $plugin_name: paths use ../ (must be relative from plugin root)"
grep '"path"' "$plugin_dir/plugin.json"
fi
# Check referenced files exist
cd "$plugin_dir"
for skill_path in $(jq -r '.skills[]?.path // empty' plugin.json); do
if [ ! -f "$skill_path" ]; then
echo "❌ $plugin_name: skill file not found: $skill_path"
fi
done
for cmd_path in $(jq -r '.commands[]?.path // empty' plugin.json); do
if [ ! -f "$cmd_path" ]; then
echo "❌ $plugin_name: command file not found: $cmd_path"
fi
done
cd - > /dev/null
done
Output a structured report:
📦 Claude Marketplace Validation Report
Repository: /path/to/repo
Plugins: 2
✅ marketplace.json
✓ Located at root
✓ Name is kebab-case
✓ Owner is object
✓ All plugins have source field
✅ ci-babysitter
✓ plugin.json at root
✓ Paths relative from root
✓ 2 skills found
✓ 2 commands found
❌ ci-babysitter
✗ plugin.json at root
✗ Path uses ../: "../skills/ci-babysitter/SKILL.md"
🎯 Issues Found: 2
Fix instructions:
1. Move .claude-plugin/plugin.json to plugins/ci-babysitter/plugin.json
2. Update path: "../skills/..." → "skills/..."
If issues found, ask: "Should I fix these issues automatically?"
If yes:
Fix:
mv .claude-plugin/marketplace.json marketplace.json
Fix:
# In marketplace.json, change:
"name": "My Marketplace" → "name": "my-marketplace"
"name": "My Plugin" → "name": "my-plugin"
Fix:
# Change:
"author": "Name"
# To:
"author": { "name": "Name", "url": "https://github.com/username" }
Fix:
# Add to each plugin:
"source": {
"type": "local",
"path": "plugins/plugin-name"
}
Fix:
cp plugins/my-plugin/.claude-plugin/plugin.json plugins/my-plugin/plugin.json
# Then update paths from "../" to relative from plugin root
Fix:
# In plugin.json, change:
"path": "../skills/my-skill/SKILL.md"
# To:
"path": "skills/my-skill/SKILL.md"
All checks pass:
Always provide:
Be precise, actionable, and save the user time.
npx claudepluginhub patrykkopycinski/patryks-treadmill-claude-plugins --plugin skill-ecosystem-toolsGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.