Skip to content

feat: add .claude-plugin/marketplace.json for plugin marketplace discovery#60

Merged
leggetter merged 1 commit into
mainfrom
chore/add-marketplace-manifest
May 11, 2026
Merged

feat: add .claude-plugin/marketplace.json for plugin marketplace discovery#60
leggetter merged 1 commit into
mainfrom
chore/add-marketplace-manifest

Conversation

@leggetter
Copy link
Copy Markdown
Collaborator

@leggetter leggetter commented May 11, 2026

Summary

Adds .claude-plugin/marketplace.json to 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-skills registers this repo as a marketplace.
  • /plugin install stripe-webhooks@hookdeck-webhook-skills (and 36 more) installs a single skill.
  • Third-party indexers that crawl .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:

  • (a) Granular — one plugin entry per skill folder. What this PR ships. 37 plugin entries, one per skills/<name>/.
  • (b) Bundled — one provider-webhooks plugin grouping the 33 provider skills, plus separate entries for webhook-handler-patterns, the two hookdeck-event-gateway* skills, and outpost. Rejected.

Why (a):

  • Matches existing install UX. The skills/CLI ecosystem already exposes per-skill installs (npx skills add hookdeck/webhook-skills --skill stripe-webhooks). The marketplace catalog should mirror that, not force users into a different mental model.
  • Avoids over-pull. A user who wants only stripe-webhooks shouldn't have to install 32 other unused provider skills to get it.
  • Better discoverability in indexers. A catalog crawler gets 37 entries with their own descriptions, keywords, and homepages — more searchable than one big bundle entry that buries 33 sub-skills under a single description.
  • The catalog-noise concern (37 vs 4 entries) is real but doesn't outweigh the install ergonomics, and the per-skill keywords make the catalog filterable.

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, contact phil@hookdeck.com.
  • metadata.description / metadata.version: catalog-level description and 0.1.0.
  • Each plugin entry uses source: "./" + strict: false + an explicit skills: ["./skills/<name>"], matching the pattern in anthropics/skills. The skill folders don't carry their own plugin.json today, so strict: false lets the marketplace entry be the complete plugin definition.
  • category: integration for provider and infrastructure plugins (33 + 3 = 36 entries); development for webhook-handler-patterns (it's framework-agnostic coding patterns, not provider integration).
  • license: MIT on every plugin, matching each SKILL.md frontmatter and repo LICENSE.
  • author: Hookdeck.
  • repository: this repo. homepage: the skill's GitHub directory URL on main.
  • keywords: per-plugin (webhooks + provider + category-specific terms) for indexer searchability.
  • No version on individual plugins: per the docs, omitting version makes 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

  • File generated by a small Python script (asserted every plugin's skills[0] path exists on disk before writing) so the 37 entries stay consistent. Script is not committed — the JSON output is the artifact.
  • Coverage check: ls skills/ returns 37 folders; this manifest has 37 plugin entries; each entry's skills path resolves to a real folder.

Test plan

  • cat .claude-plugin/marketplace.json | python3 -m json.tool > /dev/null — valid JSON
  • python3 -c "import json; d=json.load(open('.claude-plugin/marketplace.json')); print(len(d['plugins']))" — reports 37
  • Locally: /plugin marketplace add ./ from the repo root, then /plugin install stripe-webhooks@hookdeck-webhook-skills — verify the skill installs and /stripe-webhooks:* commands work.
  • After merge: /plugin marketplace add hookdeck/webhook-skills from 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

…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
@leggetter leggetter merged commit f178b4e into main May 11, 2026
5 checks passed
@leggetter leggetter deleted the chore/add-marketplace-manifest branch May 11, 2026 22:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants