Skip to content

feat: [SDK-5196] add a Cursor plugin manifest and install docs - #46

Draft
sherwinski wants to merge 2 commits into
mainfrom
sherwin/sdk-5196
Draft

sherwinski wants to merge 2 commits into
mainfrom
sherwin/sdk-5196

Conversation

@sherwinski

@sherwinski sherwinski commented Sep 11, 2026

Copy link
Copy Markdown
Collaborator

One Line Summary

Add a .cursor-plugin/plugin.json manifest and an "Install in Cursor" README section, so Cursor loads the plugin's skills and MCP server.

Linear: SDK-5196 (sub-issue of SDK-5110)

Motivation

The README said Cursor cannot load this plugin and told Cursor users to paste the skills into chat. That statement is out of date. Cursor now loads plugins from a .cursor-plugin/plugin.json manifest and discovers skills from skills/ (Plugins reference). The existing skill layout, frontmatter, and <plugin> path convention already fit Cursor's rules. One manifest closes most of the gap.

Scope

In this PR:

  • .cursor-plugin/plugin.json (new). mcpServers points at the existing .mcp.json, because Cursor looks for mcp.json by default. No duplicate MCP file.
  • README.md: "Using this with Cursor" becomes "Install in Cursor" with 3 paths (Marketplace marked pending, local plugin folder, team marketplace).
  • AGENT.md: layout table row, JSON check list, the Cursor local test step, and the version rule (4 places instead of 3).
  • references/safety-contract.md §14: adds Cursor: AskQuestion to the structured-question tool list.
  • skills/credentials/SKILL.md, skills/verify/SKILL.md: the MCP sign-in instructions name the Cursor path next to the Claude Code path.

Not in this PR:

Draft — open decisions

  1. Plugin name. The Cursor Marketplace already lists a plugin named onesignal from OneSignal/onesignal-cursor-plugin (MCP only, no SDK skills). Marketplace names must be unique. This PR proposes onesignal-sdk-onboarding. The team decides whether to keep 2 plugins, merge them, or retire the overlap.
  2. auth.CLIENT_ID. The other repo's mcp.json adds "auth": { "CLIENT_ID": "..." } to the same OAuth endpoint. Cursor's public docs do not describe this field. If Cursor's OAuth flow needs it, .mcp.json changes, and that also affects Claude Code and Codex.
  3. Skill names in Cursor. Cursor invokes plugin skills as /setup, /credentials, /verify with no plugin prefix in the docs. Those names are generic. A rename would break the Claude Code and Codex commands, so it is a separate decision.

Testing

Manual:

  • python3 -m json.tool on all 5 JSON files: pass.
  • Portability grep from AGENT.md (CLAUDE_PLUGIN_ROOT, PLUGIN_ROOT}, /Users/, /home/ in skills/ and references/): prints nothing.
  • Every relative link in the 2 changed SKILL.md files resolves to a file.
  • Local Cursor load (Cursor 3.19.19): a symlink in ~/.cursor/plugins/local/ is rejected with symlink target ... is outside /Users/.../.cursor/plugins/local. A copy of the checkout loads: the "Cursor Plugins" log shows loadUserLocalPlugin onesignal-sdk-onboarding loaded with failures=0, and no frontmatter warnings. The MCP server registers as plugin-onesignal-sdk-onboarding-onesignal from .mcp.json with status needsAuth (the expected first-run state). The docs now say to copy, not symlink. Still pending: the OAuth sign-in and a skill run against a fixture app.

No eval run. The skill edits change only the sign-in instructions for the MCP server; no step order or gate changed.

Affected code

  • Manifests (.cursor-plugin/plugin.json)
  • Skills (skills/credentials, skills/verify, prose only)
  • References (references/safety-contract.md, prose only)
  • Docs (README.md, AGENT.md)
  • Scripts
  • Templates
  • Version bump (deferred, see Scope)

Checklist

  • Commit subject uses a conventional prefix and the ticket ID
  • No secrets or internal ticket IDs in skills, scripts, or references
  • Relative links stay inside the plugin directory
  • README and AGENT.md updated for the change
  • Version bumped in all 4 places (deferred until chore: [SDK-5188] bump the plugin version to 1.0.0 #45 merges)

Cursor loads plugins from a `.cursor-plugin/plugin.json` manifest and
discovers skills from `skills/`. Add that manifest and point its
`mcpServers` field at the existing `.mcp.json`, so Cursor uses the same
skills and MCP server as Claude Code and Codex.

Name the skills' Cursor sign-in path for the MCP server, and list the
Cursor structured-question tool in the safety contract.

Replace the README section that said Cursor cannot load the plugin with
an "Install in Cursor" section. Add the manifest to the AGENT.md layout
table, the JSON check list, and the version bump rule.
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