Skip to content

chore: add a Cursor manifest to the plugin - #46

Merged
SergeevDmitry merged 1 commit into
masterfrom
chore/cursor-plugin
Nov 15, 2026
Merged

SergeevDmitry merged 1 commit into
masterfrom
chore/cursor-plugin

Conversation

@SergeevDmitry

Copy link
Copy Markdown
Member

What changed

  • plugins/agent-commerce-gateway/.cursor-plugin/plugin.json: a Cursor plugin manifest for the existing plugin folder. Same name, display name, description, version and license as the Claude Code manifest; skills points at the same skills/ folder, and logo reuses .claude-plugin/icon.png.
  • .cursor-plugin/marketplace.json: lists the plugin from ./plugins/agent-commerce-gateway, the same source as .claude-plugin/marketplace.json.
  • tests/unit/cli/skill.test.ts: checks that the Cursor manifest has the package version and license, matches the Claude Code manifest, is listed from the plugin folder, and uses relative paths to files that exist.
  • scripts/check-package-metadata.mjs: also checks repository and homepage in the Cursor manifest.
  • plugins/agent-commerce-gateway/README.md: "helps Claude" and "tells Claude" become "helps a coding agent" and "tells the agent".

The skill files are unchanged.

Why

Cursor reads a plugin from .cursor-plugin/plugin.json and finds it in a repository through .cursor-plugin/marketplace.json at the root (plugins reference). With both files in place, the repository can be submitted to the Cursor Marketplace (cursor.com/marketplace/publish) and to cursor.directory.

Cursor's manifest schema rejects unknown fields, so the Claude-only fields (documentationUrl, supportUrl, privacyPolicyUrl, termsOfServiceUrl) are not copied.

Release note

Each release now bumps version in both plugin manifests. The new test fails if .cursor-plugin/plugin.json is left behind.

How it was tested

On Node 22.23.2 after npm ci:

  • Both manifests validate against Cursor's published schemas (schemas/ in cursor/plugins @ bf0c7cd), with the same checks as their scripts/validate-plugins.mjs: names match, manifest versions match, paths are relative and exist. A copy with an unknown field, a different version and a .. logo path fails all three.
  • npx vitest run tests/unit/cli/skill.test.ts: 13 passed. With the Cursor version set to 2.7.1, the version test fails.
  • npm run check:contract, npm run lint, npm run typecheck, node scripts/check-package-metadata.mjs: OK.
  • claude plugin validate ./plugins/agent-commerce-gateway and claude plugin validate .: pass. The only warnings are the four listing fields in .claude-plugin/plugin.json (documentationUrl, supportUrl, privacyPolicyUrl, termsOfServiceUrl), which this PR does not change.
  • npm run test:coverage: 3880 passed, 5 failed, 6 skipped. Three failures were packaging.test.ts against a stale local dist; after npm run build that file passes (37). The other two are the macOS-only gateway-entrypoint failures (bash 3.2 has no mapfile), which fail the same way on master.

Not covered

  • Not loaded in Cursor itself yet. Cursor's submission checklist asks for a local test before submitting, so that comes before the marketplace submission.
  • Not run: npx skills add against this branch. The skill path is unchanged.

Cursor reads a plugin from .cursor-plugin/plugin.json and finds it in a
repository through .cursor-plugin/marketplace.json at the root. The new
manifest points at the same skill folder and reuses the listing icon of
the Claude Code plugin. Tests keep its version, name and description in
step with the package and the Claude Code manifest, and the metadata check
covers its links. The plugin README now says "a coding agent" where it
said "Claude".
@SergeevDmitry
SergeevDmitry merged commit 103f7ae into master Nov 15, 2026
7 checks passed
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.

1 participant