@stigmer/plugin-package 3.15.3-dev.20260916211208

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +66 -0
  3. package/detect.d.ts +50 -0
  4. package/detect.d.ts.map +1 -0
  5. package/detect.js +164 -0
  6. package/detect.js.map +1 -0
  7. package/dialects/claude.d.ts +30 -0
  8. package/dialects/claude.d.ts.map +1 -0
  9. package/dialects/claude.js +71 -0
  10. package/dialects/claude.js.map +1 -0
  11. package/dialects/codex.d.ts +18 -0
  12. package/dialects/codex.d.ts.map +1 -0
  13. package/dialects/codex.js +19 -0
  14. package/dialects/codex.js.map +1 -0
  15. package/dialects/cursor.d.ts +23 -0
  16. package/dialects/cursor.d.ts.map +1 -0
  17. package/dialects/cursor.js +63 -0
  18. package/dialects/cursor.js.map +1 -0
  19. package/dialects/manifest.d.ts +109 -0
  20. package/dialects/manifest.d.ts.map +1 -0
  21. package/dialects/manifest.js +194 -0
  22. package/dialects/manifest.js.map +1 -0
  23. package/dialects/open.d.ts +18 -0
  24. package/dialects/open.d.ts.map +1 -0
  25. package/dialects/open.js +47 -0
  26. package/dialects/open.js.map +1 -0
  27. package/documents.d.ts +43 -0
  28. package/documents.d.ts.map +1 -0
  29. package/documents.js +111 -0
  30. package/documents.js.map +1 -0
  31. package/files.d.ts +114 -0
  32. package/files.d.ts.map +1 -0
  33. package/files.js +187 -0
  34. package/files.js.map +1 -0
  35. package/frontmatter.d.ts +51 -0
  36. package/frontmatter.d.ts.map +1 -0
  37. package/frontmatter.js +61 -0
  38. package/frontmatter.js.map +1 -0
  39. package/index.d.ts +19 -0
  40. package/index.d.ts.map +1 -0
  41. package/index.js +17 -0
  42. package/index.js.map +1 -0
  43. package/messages.d.ts +39 -0
  44. package/messages.d.ts.map +1 -0
  45. package/messages.js +135 -0
  46. package/messages.js.map +1 -0
  47. package/normalise/ignored.d.ts +24 -0
  48. package/normalise/ignored.d.ts.map +1 -0
  49. package/normalise/ignored.js +68 -0
  50. package/normalise/ignored.js.map +1 -0
  51. package/normalise/mcp-servers.d.ts +47 -0
  52. package/normalise/mcp-servers.d.ts.map +1 -0
  53. package/normalise/mcp-servers.js +397 -0
  54. package/normalise/mcp-servers.js.map +1 -0
  55. package/normalise/overlay.d.ts +27 -0
  56. package/normalise/overlay.d.ts.map +1 -0
  57. package/normalise/overlay.js +67 -0
  58. package/normalise/overlay.js.map +1 -0
  59. package/normalise/skills.d.ts +31 -0
  60. package/normalise/skills.d.ts.map +1 -0
  61. package/normalise/skills.js +116 -0
  62. package/normalise/skills.js.map +1 -0
  63. package/normalise/sub-agents.d.ts +44 -0
  64. package/normalise/sub-agents.d.ts.map +1 -0
  65. package/normalise/sub-agents.js +168 -0
  66. package/normalise/sub-agents.js.map +1 -0
  67. package/normalise/variables.d.ts +27 -0
  68. package/normalise/variables.d.ts.map +1 -0
  69. package/normalise/variables.js +155 -0
  70. package/normalise/variables.js.map +1 -0
  71. package/outcome.d.ts +46 -0
  72. package/outcome.d.ts.map +1 -0
  73. package/outcome.js +21 -0
  74. package/outcome.js.map +1 -0
  75. package/package.json +40 -0
  76. package/placeholders.d.ts +41 -0
  77. package/placeholders.d.ts.map +1 -0
  78. package/placeholders.js +68 -0
  79. package/placeholders.js.map +1 -0
  80. package/read-plugin-package.d.ts +19 -0
  81. package/read-plugin-package.d.ts.map +1 -0
  82. package/read-plugin-package.js +67 -0
  83. package/read-plugin-package.js.map +1 -0
  84. package/src/__test-utils__/directory-files.ts +29 -0
  85. package/src/__test-utils__/read.ts +55 -0
  86. package/src/__tests__/adversarial.test.ts +434 -0
  87. package/src/__tests__/detect.test.ts +133 -0
  88. package/src/__tests__/files.test.ts +119 -0
  89. package/src/__tests__/fixtures/cursor-plugins/NOTICE +22 -0
  90. package/src/__tests__/fixtures/cursor-plugins/advisor/.cursor-plugin/plugin.json +33 -0
  91. package/src/__tests__/fixtures/cursor-plugins/advisor/CHANGELOG.md +8 -0
  92. package/src/__tests__/fixtures/cursor-plugins/advisor/LICENSE +21 -0
  93. package/src/__tests__/fixtures/cursor-plugins/advisor/README.md +87 -0
  94. package/src/__tests__/fixtures/cursor-plugins/advisor/agents/advisor-subagent.md +48 -0
  95. package/src/__tests__/fixtures/cursor-plugins/advisor/assets/avatar.png +0 -0
  96. package/src/__tests__/fixtures/cursor-plugins/advisor/hooks/capture-response.sh +20 -0
  97. package/src/__tests__/fixtures/cursor-plugins/advisor/hooks/hooks.json +27 -0
  98. package/src/__tests__/fixtures/cursor-plugins/advisor/hooks/lib.sh +61 -0
  99. package/src/__tests__/fixtures/cursor-plugins/advisor/hooks/mark-pending.sh +27 -0
  100. package/src/__tests__/fixtures/cursor-plugins/advisor/hooks/record-consult.sh +41 -0
  101. package/src/__tests__/fixtures/cursor-plugins/advisor/hooks/stop-hook.sh +48 -0
  102. package/src/__tests__/fixtures/cursor-plugins/advisor/skills/advisor/SKILL.md +123 -0
  103. package/src/__tests__/fixtures/cursor-plugins/advisor/skills/advisor/references/briefing-template.md +44 -0
  104. package/src/__tests__/fixtures/cursor-plugins/github/.cursor-plugin/plugin.json +45 -0
  105. package/src/__tests__/fixtures/cursor-plugins/github/CHANGELOG.md +9 -0
  106. package/src/__tests__/fixtures/cursor-plugins/github/LICENSE +21 -0
  107. package/src/__tests__/fixtures/cursor-plugins/github/README.md +64 -0
  108. package/src/__tests__/fixtures/cursor-plugins/github/assets/logo.svg +0 -0
  109. package/src/__tests__/fixtures/cursor-plugins/github/mcp.json +11 -0
  110. package/src/__tests__/fixtures/cursor-plugins/playwright/.cursor-plugin/plugin.json +35 -0
  111. package/src/__tests__/fixtures/cursor-plugins/playwright/CHANGELOG.md +8 -0
  112. package/src/__tests__/fixtures/cursor-plugins/playwright/LICENSE +21 -0
  113. package/src/__tests__/fixtures/cursor-plugins/playwright/README.md +46 -0
  114. package/src/__tests__/fixtures/cursor-plugins/playwright/assets/logo.svg +0 -0
  115. package/src/__tests__/fixtures/cursor-plugins/playwright/mcp.json +8 -0
  116. package/src/__tests__/fixtures/cursor-plugins/salesforce/.cursor-plugin/plugin.json +48 -0
  117. package/src/__tests__/fixtures/cursor-plugins/salesforce/CHANGELOG.md +10 -0
  118. package/src/__tests__/fixtures/cursor-plugins/salesforce/LICENSE +21 -0
  119. package/src/__tests__/fixtures/cursor-plugins/salesforce/README.md +95 -0
  120. package/src/__tests__/fixtures/cursor-plugins/salesforce/assets/logo.svg +0 -0
  121. package/src/__tests__/fixtures/cursor-plugins/salesforce/mcp.json +12 -0
  122. package/src/__tests__/fixtures/cursor-plugins/thermos/.cursor-plugin/plugin.json +32 -0
  123. package/src/__tests__/fixtures/cursor-plugins/thermos/CHANGELOG.md +8 -0
  124. package/src/__tests__/fixtures/cursor-plugins/thermos/LICENSE +21 -0
  125. package/src/__tests__/fixtures/cursor-plugins/thermos/README.md +70 -0
  126. package/src/__tests__/fixtures/cursor-plugins/thermos/agents/thermo-nuclear-code-quality-review-subagent.md +23 -0
  127. package/src/__tests__/fixtures/cursor-plugins/thermos/agents/thermo-nuclear-review-subagent.md +28 -0
  128. package/src/__tests__/fixtures/cursor-plugins/thermos/assets/logo.png +0 -0
  129. package/src/__tests__/fixtures/cursor-plugins/thermos/skills/thermo-nuclear-code-quality-review/SKILL.md +192 -0
  130. package/src/__tests__/fixtures/cursor-plugins/thermos/skills/thermo-nuclear-review/SKILL.md +51 -0
  131. package/src/__tests__/fixtures/cursor-plugins/thermos/skills/thermos/SKILL.md +21 -0
  132. package/src/__tests__/fixtures/cursor-plugins/xero/.cursor-plugin/plugin.json +53 -0
  133. package/src/__tests__/fixtures/cursor-plugins/xero/CHANGELOG.md +9 -0
  134. package/src/__tests__/fixtures/cursor-plugins/xero/LICENSE +21 -0
  135. package/src/__tests__/fixtures/cursor-plugins/xero/README.md +79 -0
  136. package/src/__tests__/fixtures/cursor-plugins/xero/assets/logo.png +0 -0
  137. package/src/__tests__/fixtures/cursor-plugins/xero/mcp.json +16 -0
  138. package/src/__tests__/fixtures.test.ts +198 -0
  139. package/src/__tests__/mcp-servers.test.ts +120 -0
  140. package/src/__tests__/overlay-and-ignored.test.ts +65 -0
  141. package/src/__tests__/skills.test.ts +89 -0
  142. package/src/__tests__/sub-agents.test.ts +111 -0
  143. package/src/__tests__/variables.test.ts +94 -0
  144. package/src/detect.ts +189 -0
  145. package/src/dialects/claude.ts +90 -0
  146. package/src/dialects/codex.ts +24 -0
  147. package/src/dialects/cursor.ts +73 -0
  148. package/src/dialects/manifest.ts +237 -0
  149. package/src/dialects/open.ts +48 -0
  150. package/src/documents.ts +145 -0
  151. package/src/files.ts +213 -0
  152. package/src/frontmatter.ts +70 -0
  153. package/src/index.ts +59 -0
  154. package/src/messages.ts +206 -0
  155. package/src/normalise/ignored.ts +70 -0
  156. package/src/normalise/mcp-servers.ts +427 -0
  157. package/src/normalise/overlay.ts +71 -0
  158. package/src/normalise/skills.ts +126 -0
  159. package/src/normalise/sub-agents.ts +184 -0
  160. package/src/normalise/variables.ts +161 -0
  161. package/src/outcome.ts +122 -0
  162. package/src/placeholders.ts +74 -0
  163. package/src/read-plugin-package.ts +74 -0
  164. package/src/testing.ts +258 -0
  165. package/src/types.ts +189 -0
  166. package/testing.d.ts +106 -0
  167. package/testing.d.ts.map +1 -0
  168. package/testing.js +182 -0
  169. package/testing.js.map +1 -0
  170. package/types.d.ts +152 -0
  171. package/types.d.ts.map +1 -0
  172. package/types.js +19 -0
  173. package/types.js.map +1 -0
@@ -0,0 +1,123 @@
1
+ ---
2
+ name: advisor
3
+ description: >-
4
+ Advisor mode. Consult a stronger (or different) model at key checkpoints:
5
+ before major decisions, when stuck on an error, and before declaring a task
6
+ done. Use when the user types /advisor, asks to turn the advisor on or off,
7
+ picks an advisor model, or explicitly asks for a second opinion from a
8
+ stronger or different model. Never enable it on your own.
9
+ icon: lightbulb
10
+ color: purple
11
+ ---
12
+
13
+ # Advisor
14
+
15
+ You are the main model. Advisor mode adds a second, stronger model that you consult at a few key points. The advisor gets your briefing (and the full transcript when available), thinks hard, and returns a verdict with guidance. It does not edit files. You still do the work and make the final call.
16
+
17
+ State lives in `.cursor/advisor/state.json` at the project root. When that file exists with `"enabled": true`, advisor mode is on for this project.
18
+
19
+ ## Commands
20
+
21
+ The text after `/advisor` selects the action.
22
+
23
+ | Input | Action |
24
+ | --- | --- |
25
+ | `/advisor` | Enable for this conversation with the default advisor: the latest Grok at its highest reasoning effort. If a state file already exists, from this or another conversation, re-bind it here, keeping its `model` and `nudge` settings. |
26
+ | `/advisor <model>` | Same, with the given model. Any model available to subagents works: `/advisor cursor-grok-4.6-xhigh-fast`, `/advisor composer-2.5`. |
27
+ | `/advisor off` | Disable: delete `.cursor/advisor/`. |
28
+ | `/advisor status` | Report model, consult count, and whether the end-of-turn nudge is on. Changes nothing. |
29
+ | `/advisor ask <question>` | Consult now about the current work, regardless of checkpoint. |
30
+ | `/advisor nudge on` / `off` | Toggle the end-of-turn reminder posted by the plugin's stop hook (default on). |
31
+
32
+ If the message also contains a task (`/advisor, then refactor the cache layer`), enable first, then do the task under advisor mode.
33
+
34
+ ### Choosing the model
35
+
36
+ The default is the latest Grok model at its highest reasoning effort, currently `cursor-grok-4.6-xhigh`. If a newer Grok or a higher effort tier appears in the subagent model list available to you, prefer it and say so.
37
+
38
+ For `/advisor <model>`, resolve the request against the subagent model slugs available to you:
39
+
40
+ - An exact slug: use it as is.
41
+ - A family or version name (`grok fast`, `composer`): that family's latest model at its highest reasoning tier.
42
+ - No match: say so, name two or three close options, and keep the current model.
43
+
44
+ If the Task tool rejects a slug, read the valid slugs from its error message, pick the closest one (same family, highest reasoning tier), save it to `state.json`, and tell the user in one line. Do not block the consult on the slug.
45
+
46
+ ## Enabling
47
+
48
+ 1. Resolve the model as described above.
49
+ 2. Write `.cursor/advisor/state.json` with the file-writing tool (not a shell redirect), creating the directory if needed. If a state file already exists, carry over its `model` (unless this command names one) and `nudge`, and reset every other field to the values below. You cannot see which conversation an existing file belongs to, so always rewrite it: that re-binds the mode to this conversation, the hooks re-fill `conversation_id` and `transcript_path`, and the next consult starts a fresh advisor instead of resuming another chat's. Also delete `.cursor/advisor/pending` and `.cursor/advisor/last-response.txt` if they exist, so a marker left by another conversation cannot trigger the end-of-turn nudge here. Keep `log.md`.
50
+
51
+ ```json
52
+ {
53
+ "enabled": true,
54
+ "model": "cursor-grok-4.6-xhigh",
55
+ "nudge": true,
56
+ "advisor_agent_id": null,
57
+ "conversation_id": null,
58
+ "transcript_path": null,
59
+ "consults": 0,
60
+ "last_consult_at": null,
61
+ "enabled_at": "<current UTC time, ISO 8601>"
62
+ }
63
+ ```
64
+
65
+ The plugin's hooks fill in `conversation_id`, `transcript_path`, `consults`, and `last_consult_at`. Leave them alone.
66
+ 3. Confirm in one line: `Advisor on: <slug>. I'll consult it before major decisions, when I'm stuck, and before I call the task done.` Then continue with any task in the same message.
67
+
68
+ Never stage or commit `.cursor/advisor/`.
69
+
70
+ ## Checkpoints
71
+
72
+ Consult at these points and nowhere else. Each consult is a strong-model call; the value comes from using it selectively.
73
+
74
+ 1. **Before a major decision.** Choosing between architectures or approaches; changes that are hard to reverse or have a wide blast radius (schema or data migrations, deleting or rewriting a module, public API or config format changes, dependency swaps, auth, payments, or other security-sensitive code); or a request that is ambiguous in a way that would change the work materially. Consult once you have a concrete plan and the options in hand, not before you understand the problem. One consult covers the plan; do not re-consult per file.
75
+ 2. **When stuck.** The same error or failing test after two genuine fix attempts; behavior you cannot explain from the code; or when you are about to reach for a workaround: a retry loop, a `sleep`, a broad `try/except`, skipping a test, or disabling a check to get past something.
76
+ 3. **Before declaring done.** Any task that changed logic or touched more than a couple of files: consult once before writing the final summary, and include what you verified and how. Skip for trivial edits (typos, comments, a one-line config change) and say so in one line.
77
+ 4. **On request.** `/advisor ask ...`, or the user asks what the advisor thinks.
78
+
79
+ Do not consult for routine steps, for things you can verify yourself (run the test, read the code), or more than once per checkpoint. If you would consult more than about four times in one task, the task should probably be split, or you should ask the user.
80
+
81
+ ## How to consult
82
+
83
+ 1. Read `.cursor/advisor/state.json` and decide which situation you are in:
84
+ - **Mode on here**: the file exists with `enabled: true` and you ran the Enabling steps in this conversation. Checkpoint consults and `/advisor ask` both follow the steps below in full, including `resume` and state writes.
85
+ - **Not on here**: the file is missing, `enabled` is false, or you did not write it. A file you did not write belongs to another chat; only `/advisor` re-binds it, so leave it alone and never `resume` an `advisor_agent_id` you did not save yourself. Do not consult at checkpoints. If the user explicitly asks for a consult in this message (`/advisor ask ...`, or a request for a second opinion), run it as a one-off: a fresh spawn on the file's `model` if there is one, otherwise the default; no `resume`, no state writes, and no `transcript_path` (another chat's transcript is not yours to share; write "not available"). Mention that `/advisor` turns the mode on for this conversation.
86
+ 2. Build the briefing from `references/briefing-template.md`. Give the advisor everything it needs to disagree with you:
87
+ - The user's request verbatim, plus constraints or corrections they added later.
88
+ - What has happened so far, in order: what you investigated, decided, changed, tried, and ruled out.
89
+ - Relevant tool results verbatim: error messages, stack traces, test output, diffs. Trim unrelated noise and mark trims with `[...]`, but never paraphrase evidence.
90
+ - Current state: `git status --short`, `git diff --stat`, files you touched, anything half-done.
91
+ - Your specific questions, the options you see, and your current leaning with reasons.
92
+ - The `transcript_path` from `state.json` when set and the mode is on in this conversation, so the advisor can read the full conversation itself.
93
+ - No secrets. Redact tokens, keys, and `.env` values.
94
+ 3. Spawn the advisor in the foreground and wait for it:
95
+ - `subagent_type: "advisor-subagent"`
96
+ - `model: <state.model>`
97
+ - `description: "Advisor: <checkpoint>"`, for example `Advisor: pre-completion review`
98
+ - `run_in_background: false`
99
+ - When `state.advisor_agent_id` is set, pass it as `resume` and omit `model`; the advisor keeps its model and the context of earlier consults, so the briefing can be a delta: what changed since last time plus the new questions. If the resume fails, spawn fresh.
100
+ - Save the returned agent id to `advisor_agent_id` in `state.json`. Clear it when the model changes.
101
+ 4. Act on the verdict:
102
+ - `proceed`: go.
103
+ - `proceed with changes`: make the recommended changes unless they conflict with the user's instructions or facts you have verified. Say which you skipped and why.
104
+ - `stop`: do not continue with the plan. Rethink, or bring the disagreement to the user if it is a product or scope question.
105
+ - If the advisor asks for something it needs, provide it via `resume`, once. Do not ping-pong.
106
+ - You are accountable for the result. The advisor is a strong second opinion, not an authority. If it is wrong about the codebase, show it the evidence once, or overrule it and tell the user why.
107
+ 5. Report each consult to the user in one or two lines: `Advisor (<model>): <verdict>. <One-line summary>. <What you did about it.>` Keep the advisor's full response out of the chat unless the user asks; the hooks also append it to `.cursor/advisor/log.md`.
108
+
109
+ ## End-of-turn nudge
110
+
111
+ When files changed since the last consult and a turn ends without one, the plugin's `stop` hook posts a follow-up that starts with `[Advisor]`. Treat it as the "before declaring done" checkpoint: run the pre-completion consult, or answer in one line that the change was trivial, or that you are waiting on the user, and stop. It fires at most once per batch of edits. `/advisor nudge off` disables it.
112
+
113
+ ## Disabling
114
+
115
+ `/advisor off`: delete `.cursor/advisor/` and confirm in one line. Do not consult again in this conversation unless the user re-enables the mode or explicitly asks for a one-off consult.
116
+
117
+ ## Guardrails
118
+
119
+ - Never enable advisor mode unasked. "Get a second opinion on this" is a one-off consult, not a mode change.
120
+ - The advisor is read-only. Never ask it to edit files or do the task.
121
+ - Never loop on the advisor: at most one follow-up per checkpoint.
122
+ - If the `advisor-subagent` subagent is unavailable (no Task tool, or a hook denies it), tell the user once and continue without it.
123
+ - To keep this skill in context for a whole session rather than one message, the user can invoke `/advisor` as a Custom Mode (Option+Enter / Alt+Enter). The state file works either way.
@@ -0,0 +1,44 @@
1
+ # Advisor briefing
2
+
3
+ Fill every section. Quote evidence verbatim; summarize only narrative. Redact secrets. When resuming an earlier advisor, keep the headings but write only what changed since the last consult, plus the new questions.
4
+
5
+ ```markdown
6
+ ## Checkpoint
7
+
8
+ <major decision | stuck | pre-completion | on request> — <one line on why now>
9
+
10
+ ## User's request
11
+
12
+ <the original request, verbatim>
13
+
14
+ <later constraints or corrections from the user, verbatim, in order>
15
+
16
+ ## What has happened so far
17
+
18
+ <chronological and compact: what you investigated, decided, changed, tried, and ruled out, with the reason for each>
19
+
20
+ ## Evidence
21
+
22
+ <verbatim tool output relevant to this checkpoint: errors, stack traces, test output, command output, the relevant diff hunks. Trim unrelated noise and mark trims with [...]>
23
+
24
+ ## Current state
25
+
26
+ <`git status --short` and `git diff --stat` output; files touched; anything half-done>
27
+
28
+ ## Questions for the advisor
29
+
30
+ 1. <specific question>
31
+ 2. ...
32
+
33
+ <For a decision: the options with the tradeoffs as you see them, and your current leaning with reasons.
34
+ For stuck: what you expected vs. what you observed, and the hypotheses you have ruled out.
35
+ For pre-completion: what you verified and how, and what you did not verify.>
36
+
37
+ ## What I need back
38
+
39
+ <for example: "a verdict and the single best next step", "confirm or refute hypothesis 2", "anything I missed before I call this done">
40
+
41
+ ## Full transcript
42
+
43
+ <`transcript_path` from `.cursor/advisor/state.json` when advisor mode is on in this conversation; otherwise "not available">
44
+ ```
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "github",
3
+ "displayName": "GitHub",
4
+ "version": "1.0.0",
5
+ "minClientVersions": {
6
+ "cursor": "3.13.0"
7
+ },
8
+ "description": "Manage repos, issues, pull requests, and Actions.",
9
+ "author": {
10
+ "name": "Cursor",
11
+ "email": "plugins@cursor.com"
12
+ },
13
+ "homepage": "https://docs.github.com/en/copilot/how-tos/context/use-mcp/use-the-github-mcp-server",
14
+ "repository": "https://github.com/cursor/plugins",
15
+ "license": "MIT",
16
+ "logo": "assets/logo.svg",
17
+ "keywords": [
18
+ "github",
19
+ "git",
20
+ "repositories",
21
+ "pull-requests",
22
+ "issues",
23
+ "actions",
24
+ "mcp"
25
+ ],
26
+ "category": "integrations",
27
+ "tags": [
28
+ "github",
29
+ "git",
30
+ "mcp",
31
+ "repositories"
32
+ ],
33
+ "variables": {
34
+ "type": "object",
35
+ "properties": {
36
+ "GITHUB_PERSONAL_ACCESS_TOKEN": {
37
+ "type": "string",
38
+ "title": "GitHub personal access token",
39
+ "description": "Fine-grained or classic PAT from https://github.com/settings/tokens with the repo scopes you want the agent to use."
40
+ }
41
+ },
42
+ "required": ["GITHUB_PERSONAL_ACCESS_TOKEN"]
43
+ },
44
+ "mcpServers": "./mcp.json"
45
+ }
@@ -0,0 +1,9 @@
1
+ # Changelog
2
+
3
+ All notable changes to this plugin will be documented here.
4
+
5
+ ## 1.0.0 — initial release
6
+
7
+ - Logo: GitHub's official Octocat mark, on a padded white tile.
8
+ - Added the `github` MCP server pointing at `https://api.githubcopilot.com/mcp/`.
9
+ - Declared `GITHUB_PERSONAL_ACCESS_TOKEN` plugin variable and forwarded it through the Authorization header.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Cursor
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,64 @@
1
+ # GitHub
2
+
3
+ Cursor plugin that connects agents to [GitHub](https://github.com) through GitHub's official remote [Model Context Protocol](https://modelcontextprotocol.io/) server.
4
+
5
+ Work with repositories, issues, pull requests, code search, and Actions under the permissions of a personal access token you provide.
6
+
7
+ ## Install
8
+
9
+ 1. Open **Cursor Settings → Plugins**.
10
+ 2. Search for **GitHub**.
11
+ 3. Click **Install**, then set your GitHub personal access token (below).
12
+
13
+ Or run `/add-plugin github` in chat.
14
+
15
+ ## MCP
16
+
17
+ ```json
18
+ {
19
+ "mcpServers": {
20
+ "github": {
21
+ "type": "http",
22
+ "url": "https://api.githubcopilot.com/mcp/",
23
+ "headers": {
24
+ "Authorization": "Bearer ${GITHUB_PERSONAL_ACCESS_TOKEN}"
25
+ }
26
+ }
27
+ }
28
+ }
29
+ ```
30
+
31
+ ## Setup
32
+
33
+ GitHub's remote MCP server authenticates with a **personal access token (PAT)**. Create one, then paste it into the plugin config.
34
+
35
+ ### 1. Create a personal access token
36
+
37
+ 1. Open https://github.com/settings/tokens.
38
+ 2. Create either a **fine-grained** token or a **classic** token.
39
+ 3. Grant only the scopes the agent needs. Typical choices:
40
+ - **Repositories / contents** — read or write code and files
41
+ - **Issues** — list, create, and update issues
42
+ - **Pull requests** — list, review, and manage PRs
43
+ - **Actions** — inspect workflow runs (if you want CI access)
44
+ - **Metadata** — always required on fine-grained tokens
45
+ 4. Set an expiration you are comfortable with, then generate and copy the token.
46
+
47
+ Prefer a fine-grained token scoped to specific repositories when that is enough. Classic tokens with `repo` are broader and should be treated carefully.
48
+
49
+ ### 2. Configure the plugin
50
+
51
+ In **Dashboard → Plugins → Configure**, set **GitHub personal access token** to the value you just created.
52
+
53
+ Tool calls run with that token's permissions. Rotate or revoke the token from GitHub Settings if it is ever exposed.
54
+
55
+ ## Docs
56
+
57
+ - Use the GitHub MCP server: https://docs.github.com/en/copilot/how-tos/context/use-mcp/use-the-github-mcp-server
58
+ - Managing personal access tokens: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens
59
+
60
+ Logo is GitHub's official Octocat mark, placed on a white tile with padding so it reads well in the Cursor UI.
61
+
62
+ ## License
63
+
64
+ MIT
@@ -0,0 +1,11 @@
1
+ {
2
+ "mcpServers": {
3
+ "github": {
4
+ "type": "http",
5
+ "url": "https://api.githubcopilot.com/mcp/",
6
+ "headers": {
7
+ "Authorization": "Bearer ${GITHUB_PERSONAL_ACCESS_TOKEN}"
8
+ }
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "playwright",
3
+ "displayName": "Playwright",
4
+ "version": "1.0.0",
5
+ "minClientVersions": {
6
+ "cursor": "3.13.0"
7
+ },
8
+ "description": "Navigate, click, screenshot, and test in a real browser.",
9
+ "author": {
10
+ "name": "Cursor",
11
+ "email": "plugins@cursor.com"
12
+ },
13
+ "homepage": "https://github.com/microsoft/playwright-mcp",
14
+ "repository": "https://github.com/cursor/plugins",
15
+ "license": "MIT",
16
+ "logo": "assets/logo.svg",
17
+ "keywords": [
18
+ "playwright",
19
+ "browser",
20
+ "automation",
21
+ "testing",
22
+ "e2e",
23
+ "mcp"
24
+ ],
25
+ "category": "integrations",
26
+ "tags": [
27
+ "playwright",
28
+ "browser",
29
+ "automation",
30
+ "testing",
31
+ "e2e",
32
+ "mcp"
33
+ ],
34
+ "mcpServers": "./mcp.json"
35
+ }
@@ -0,0 +1,8 @@
1
+ # Changelog
2
+
3
+ All notable changes to this plugin will be documented here.
4
+
5
+ ## 1.0.0 — initial release
6
+
7
+ - Logo: Microsoft's official Playwright mark from playwright.dev, on a padded white tile.
8
+ - Added the `playwright` MCP server launched via `npx -y @playwright/mcp@latest`.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Cursor
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,46 @@
1
+ # Playwright
2
+
3
+ Cursor plugin that connects agents to a real browser through Microsoft's [Playwright MCP](https://github.com/microsoft/playwright-mcp) server.
4
+
5
+ Navigate pages, click and fill elements, take accessibility snapshots and screenshots, and run end-to-end checks from chat.
6
+
7
+ ## Install
8
+
9
+ 1. Open **Cursor Settings → Plugins**.
10
+ 2. Search for **Playwright**.
11
+ 3. Click **Install**.
12
+
13
+ Or run `/add-plugin playwright` in chat.
14
+
15
+ ## Requirements
16
+
17
+ This is a **local stdio** MCP server. Cursor launches it with `npx -y @playwright/mcp@latest`, so the machine running Cursor needs **Node.js** installed and on `PATH`. The `-y` flag skips `npx`'s install confirmation so the first launch cannot hang waiting for interactive input over stdio.
18
+
19
+ The first run downloads Playwright's browser binaries. That can take a minute and needs network access; later runs reuse the cached browsers.
20
+
21
+ ## MCP
22
+
23
+ ```json
24
+ {
25
+ "mcpServers": {
26
+ "playwright": {
27
+ "command": "npx",
28
+ "args": ["-y", "@playwright/mcp@latest"]
29
+ }
30
+ }
31
+ }
32
+ ```
33
+
34
+ No credentials are required. The server runs locally and drives a browser on the same machine.
35
+
36
+ ## Docs
37
+
38
+ - Playwright MCP: https://github.com/microsoft/playwright-mcp
39
+ - Playwright: https://playwright.dev
40
+
41
+ Logo is Microsoft's official Playwright mark from the Playwright website, placed on a white tile with padding so it reads well in the Cursor UI:
42
+ https://github.com/microsoft/playwright.dev/blob/main/static/img/playwright-logo.svg
43
+
44
+ ## License
45
+
46
+ MIT
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "playwright": {
4
+ "command": "npx",
5
+ "args": ["-y", "@playwright/mcp@latest"]
6
+ }
7
+ }
8
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "salesforce",
3
+ "displayName": "Salesforce",
4
+ "version": "1.0.0",
5
+ "description": "Query, create, and update records in your org.",
6
+ "author": {
7
+ "name": "Cursor",
8
+ "email": "plugins@cursor.com"
9
+ },
10
+ "homepage": "https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/cursor.html",
11
+ "repository": "https://github.com/cursor/plugins",
12
+ "license": "MIT",
13
+ "logo": "assets/logo.svg",
14
+ "keywords": [
15
+ "salesforce",
16
+ "crm",
17
+ "mcp",
18
+ "sales",
19
+ "soql",
20
+ "sobject"
21
+ ],
22
+ "category": "integrations",
23
+ "tags": [
24
+ "mcp",
25
+ "crm",
26
+ "sales"
27
+ ],
28
+ "variables": {
29
+ "type": "object",
30
+ "properties": {
31
+ "SALESFORCE_MCP_URL": {
32
+ "type": "string",
33
+ "title": "Salesforce MCP server URL",
34
+ "description": "Server URL from Setup → MCP Servers. Production: https://api.salesforce.com/platform/mcp/v1/platform/sobject-all. Sandbox or scratch: https://api.salesforce.com/platform/mcp/v1/sandbox/platform/sobject-all. For custom servers, replace platform/ with custom/."
35
+ },
36
+ "CLIENT_ID": {
37
+ "type": "string",
38
+ "title": "Salesforce Consumer Key",
39
+ "description": "Consumer Key of the External Client App you created for this integration (Setup → External Client App Manager → your app → Settings → Consumer Key and Secret)."
40
+ }
41
+ },
42
+ "required": [
43
+ "SALESFORCE_MCP_URL",
44
+ "CLIENT_ID"
45
+ ]
46
+ },
47
+ "mcpServers": "./mcp.json"
48
+ }
@@ -0,0 +1,10 @@
1
+ # Changelog
2
+
3
+ All notable changes to this plugin will be documented here.
4
+
5
+ ## 1.0.0 — initial release
6
+
7
+ - Logo: Salesforce's official cloud mark, centered on a transparent 192×192 canvas with padding so it reads well on light and dark backgrounds.
8
+ - Added the `salesforce` MCP server backed by Salesforce Hosted MCP.
9
+ - Declared `SALESFORCE_MCP_URL` and `CLIENT_ID` plugin variables so each org can point at its own server and External Client App.
10
+ - Pinned OAuth scopes to `mcp_api` and `refresh_token`.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Cursor
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,95 @@
1
+ # Salesforce
2
+
3
+ Cursor plugin that connects agents to [Salesforce](https://www.salesforce.com) through [Salesforce Hosted MCP](https://developer.salesforce.com/docs/platform/hosted-mcp-servers/), Salesforce's first-party [Model Context Protocol](https://modelcontextprotocol.io/) service.
4
+
5
+ Run SOQL and SOSL, inspect object schemas, traverse relationships, and create, update, or delete records — all under the signed-in user's own permissions and field-level security.
6
+
7
+ ## Install
8
+
9
+ 1. Open **Cursor Settings → Plugins**.
10
+ 2. Search for **Salesforce**.
11
+ 3. Click **Install**, then set the server URL and consumer key (below) and complete the Salesforce sign-in prompt.
12
+
13
+ Or run `/add-plugin salesforce` in chat.
14
+
15
+ ## MCP
16
+
17
+ ```json
18
+ {
19
+ "mcpServers": {
20
+ "salesforce": {
21
+ "type": "http",
22
+ "url": "${SALESFORCE_MCP_URL}",
23
+ "auth": {
24
+ "CLIENT_ID": "${CLIENT_ID}",
25
+ "scopes": ["mcp_api", "refresh_token"]
26
+ }
27
+ }
28
+ }
29
+ }
30
+ ```
31
+
32
+ ## Setup
33
+
34
+ Salesforce Hosted MCP requires an **External Client App** in your org. Connected Apps are not supported.
35
+
36
+ ### 1. Create the External Client App
37
+
38
+ From Setup, go to **External Client App Manager → New External Client App**, fill in the basics, then expand **API (Enable OAuth Settings)** and check **Enable OAuth**.
39
+
40
+ Add every callback URL you need — Cursor uses different ones per surface:
41
+
42
+ | Surface | Callback URL |
43
+ |:--------|:-------------|
44
+ | Desktop | `http://localhost:8787/callback` |
45
+ | Web and Cloud Agents | `https://www.cursor.com/agents/mcp/oauth/callback` |
46
+ | Older desktop builds | `cursor://anysphere.cursor-mcp/oauth/callback` |
47
+
48
+ Under **OAuth Scopes**, select exactly these two and nothing broader:
49
+
50
+ - **Access Salesforce hosted MCP servers** (`mcp_api`)
51
+ - **Perform requests at any time** (`refresh_token`, `offline_access`)
52
+
53
+ The second one is easy to miss because the picker labels scopes by description rather than by value. Without it the plugin cannot refresh, and every user has to re-authenticate when their access token expires. Do not add **Full access** (`full`) — Hosted MCP does not need it.
54
+
55
+ Under **Security**, select **Issue JSON Web Token (JWT)-based access tokens for named users**. This is required: without it Salesforce issues opaque tokens and every tool call fails with `JWT Token is required`. Leave **Require Secret for Web Server Flow** off — Cursor authenticates as a public client using PKCE, so no client secret is involved. Do not enable the **JWT Bearer Flow**, which is a different feature and needs a certificate.
56
+
57
+ Finally, copy the **Consumer Key** from **Settings → Consumer Key and Secret**.
58
+
59
+ A new External Client App can take up to 30 minutes to propagate. Until it does, authentication fails with `invalid_client_id`; wait rather than recreating the app.
60
+
61
+ ### 2. Activate a server and copy its URL
62
+
63
+ In Setup, open **MCP Servers**, activate the server you want, and copy its **Server URL**. The URL encodes both the org type and the server:
64
+
65
+ | Org type | Standard server | Custom server |
66
+ |:---------|:----------------|:--------------|
67
+ | Production, Developer, Enterprise | `https://api.salesforce.com/platform/mcp/v1/platform/sobject-all` | `https://api.salesforce.com/platform/mcp/v1/custom/myserver` |
68
+ | Sandbox or scratch | `https://api.salesforce.com/platform/mcp/v1/sandbox/platform/sobject-all` | `https://api.salesforce.com/platform/mcp/v1/sandbox/custom/myserver` |
69
+
70
+ Salesforce ships several standard servers with different blast radii — `sobject-reads` for read-only access, `sobject-mutations` for reads plus create and update, `sobject-deletes`, and `sobject-all` for everything. Point the plugin at the narrowest one that does the job.
71
+
72
+ ### 3. Configure the plugin
73
+
74
+ In **Dashboard → Plugins → Configure**, set **Salesforce MCP server URL** and **Salesforce Consumer Key**, then complete the Salesforce login when Cursor prompts.
75
+
76
+ On a team marketplace an admin sets both values once. Each member still authenticates individually, so tools run with that member's own object and field permissions.
77
+
78
+ ## Troubleshooting
79
+
80
+ | Symptom | Cause |
81
+ |:--------|:------|
82
+ | `invalid_client_id` | The External Client App has not finished propagating. Wait up to 30 minutes. |
83
+ | `invalid_scope` | The app is missing **Access Salesforce hosted MCP servers** or **Perform requests at any time**. |
84
+ | `JWT Token is required` or `Invalid token` after a successful login | **Issue JSON Web Token (JWT)-based access tokens for named users** is not enabled. |
85
+ | Auth succeeds but the server 404s | The MCP server is not activated in Setup, or the URL's org type does not match the org you logged into. |
86
+
87
+ ## Docs
88
+
89
+ - Configure Cursor: https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/cursor.html
90
+ - Create an External Client App: https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/create-external-client-app.html
91
+ - Available servers: https://developer.salesforce.com/docs/platform/hosted-mcp-servers/references/reference/sobject-all.html
92
+
93
+ ## License
94
+
95
+ MIT
@@ -0,0 +1,12 @@
1
+ {
2
+ "mcpServers": {
3
+ "salesforce": {
4
+ "type": "http",
5
+ "url": "${SALESFORCE_MCP_URL}",
6
+ "auth": {
7
+ "CLIENT_ID": "${CLIENT_ID}",
8
+ "scopes": ["mcp_api", "refresh_token"]
9
+ }
10
+ }
11
+ }
12
+ }