feat: [SDK-5196] add a Cursor plugin manifest and install docs - #46
Draft
sherwinski wants to merge 2 commits into
Draft
sherwinski wants to merge 2 commits into
sherwinski wants to merge 2 commits into
Conversation
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.
… Cursor rejects a symlink
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.
One Line Summary
Add a
.cursor-plugin/plugin.jsonmanifest 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.jsonmanifest and discovers skills fromskills/(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).mcpServerspoints at the existing.mcp.json, because Cursor looks formcp.jsonby 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: addsCursor: AskQuestionto 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:
/onesignal:setuptext in the skills is unchanged.Draft — open decisions
onesignalfrom OneSignal/onesignal-cursor-plugin (MCP only, no SDK skills). Marketplace names must be unique. This PR proposesonesignal-sdk-onboarding. The team decides whether to keep 2 plugins, merge them, or retire the overlap.auth.CLIENT_ID. The other repo'smcp.jsonadds"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.jsonchanges, and that also affects Claude Code and Codex./setup,/credentials,/verifywith 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.toolon all 5 JSON files: pass.CLAUDE_PLUGIN_ROOT,PLUGIN_ROOT},/Users/,/home/inskills/andreferences/): prints nothing.SKILL.mdfiles resolves to a file.~/.cursor/plugins/local/is rejected withsymlink target ... is outside /Users/.../.cursor/plugins/local. A copy of the checkout loads: the "Cursor Plugins" log showsloadUserLocalPlugin onesignal-sdk-onboarding loadedwithfailures=0, and no frontmatter warnings. The MCP server registers asplugin-onesignal-sdk-onboarding-onesignalfrom.mcp.jsonwith statusneedsAuth(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
.cursor-plugin/plugin.json)skills/credentials,skills/verify, prose only)references/safety-contract.md, prose only)README.md,AGENT.md)Checklist