feat: add .claude-plugin/marketplace.json for plugin marketplace discovery#60
Merged
Merged
Conversation
…overy Makes this repo's 37 skills installable through Claude Code's plugin marketplace system (`/plugin marketplace add hookdeck/webhook-skills`) and indexable by third-party catalogs like claudemarketplaces.com. Metadata-only change — no skill content modified. **Granularity.** One plugin entry per skill folder (33 provider skills, 1 patterns skill, 3 infrastructure skills). Devs install only what they need (`/plugin install stripe-webhooks@hookdeck-webhook-skills`) rather than pulling all 37 to use one. Mirrors the existing `npx skills add hookdeck/webhook-skills --skill stripe-webhooks` UX and gives indexers 37 discoverable entries with their own descriptions and keywords instead of one monolithic catalog entry. Considered grouping by category (one `provider-webhooks` bundle + separate patterns/infra entries) but rejected — bundle-only install would force users to pull unused providers, and the catalog noise from 37 vs 4 entries is more than offset by the per-skill discoverability. **Schema choices.** - `name: "hookdeck-webhook-skills"` — not a reserved name; identifies the marketplace publicly when users install (`/plugin install <plugin>@hookdeck-webhook-skills`). - `owner` — Hookdeck, contact phil@hookdeck.com. - Each plugin entry uses `source: "./"` + `strict: false` + explicit `skills: ["./skills/<name>"]`, matching the pattern used by anthropics/skills' marketplace.json. The skill folders don't carry their own plugin.json today; `strict: false` lets the marketplace entry be the entire definition. - `category` is `integration` for provider and infrastructure plugins, `development` for webhook-handler-patterns (which is about coding patterns rather than wiring up an external service). - `license: "MIT"` on every plugin, matching each SKILL.md's frontmatter and the repo LICENSE. - `keywords` per plugin for searchability. - No top-level `version` on each plugin — the marketplace's manifest version (`0.1.0`) covers the catalog, and individual plugins fall back to git commit SHA for update detection. Bumping plugin versions individually can be added later if release cadence diverges. References used: the Anthropic plugin-marketplaces docs (https://code.claude.com/docs/en/plugin-marketplaces) and anthropics/skills' marketplace.json as the worked example. https://claude.ai/code/session_01NNTgQRJss1V7gyzzJ9rjnB
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds
.claude-plugin/marketplace.jsonto the repo root so this collection is discoverable by Claude Code's plugin marketplace system (/plugin marketplace add hookdeck/webhook-skills) and by third-party indexers like claudemarketplaces.com.Metadata-only change. No skill content modified.
What it enables
/plugin marketplace add hookdeck/webhook-skillsregisters this repo as a marketplace./plugin install stripe-webhooks@hookdeck-webhook-skills(and 36 more) installs a single skill..claude-plugin/marketplace.json(e.g. claudemarketplaces.com) get 37 individually-listed plugins with their own descriptions, categories, keywords, license, and source paths.Grouping decision: one plugin per skill (granular)
Considered two options:
skills/<name>/.provider-webhooksplugin grouping the 33 provider skills, plus separate entries forwebhook-handler-patterns, the twohookdeck-event-gateway*skills, andoutpost. Rejected.Why (a):
npx skills add hookdeck/webhook-skills --skill stripe-webhooks). The marketplace catalog should mirror that, not force users into a different mental model.stripe-webhooksshouldn't have to install 32 other unused provider skills to get it.anthropics/skills' marketplace uses three bundled entries (document-skills,example-skills,claude-api), but those bundles are tightly themed — webhook providers are independent and users typically only want one or two at a time, so the bundling pattern doesn't transfer.Schema choices
name:hookdeck-webhook-skills— not a reserved name; this is what users type after@when installing.owner: Hookdeck, contactphil@hookdeck.com.metadata.description/metadata.version: catalog-level description and0.1.0.source: "./"+strict: false+ an explicitskills: ["./skills/<name>"], matching the pattern inanthropics/skills. The skill folders don't carry their ownplugin.jsontoday, sostrict: falselets the marketplace entry be the complete plugin definition.category:integrationfor provider and infrastructure plugins (33 + 3 = 36 entries);developmentforwebhook-handler-patterns(it's framework-agnostic coding patterns, not provider integration).license:MITon every plugin, matching each SKILL.md frontmatter and repoLICENSE.author: Hookdeck.repository: this repo.homepage: the skill's GitHub directory URL onmain.keywords: per-plugin (webhooks + provider + category-specific terms) for indexer searchability.versionon individual plugins: per the docs, omittingversionmakes the git commit SHA the version-resolution unit, so users get updates automatically when the repo updates. Easy to add explicit versions later if release cadence diverges per-plugin.Mechanical details
skills[0]path exists on disk before writing) so the 37 entries stay consistent. Script is not committed — the JSON output is the artifact.ls skills/returns 37 folders; this manifest has 37 plugin entries; each entry'sskillspath resolves to a real folder.Test plan
cat .claude-plugin/marketplace.json | python3 -m json.tool > /dev/null— valid JSONpython3 -c "import json; d=json.load(open('.claude-plugin/marketplace.json')); print(len(d['plugins']))"— reports 37/plugin marketplace add ./from the repo root, then/plugin install stripe-webhooks@hookdeck-webhook-skills— verify the skill installs and/stripe-webhooks:*commands work./plugin marketplace add hookdeck/webhook-skillsfrom any fresh Claude Code session, install one provider skill, confirm the SKILL.md surfaces and references load.https://claude.ai/code/session_01NNTgQRJss1V7gyzzJ9rjnB
Generated by Claude Code