Skip to content

feat(plugins): CoreSpeed as a Cursor plugin, for the Cursor Marketplace and Grok Bot - #4

Merged
BestOwl merged 8 commits into
mainfrom
feat/cursor-plugin
Oct 26, 2026
Merged

BestOwl merged 8 commits into
mainfrom
feat/cursor-plugin

Conversation

@corespeed-agent-ensemble

@corespeed-agent-ensemble corespeed-agent-ensemble Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

What

CoreSpeed becomes a Cursor plugin. This is the step that gets us into Grok Bot.

Grok Bot (xAI) loads plugins only from the Cursor Marketplace. Its bot templates carry first-party plugins but drop custom MCP servers. So CoreSpeed needs a Cursor Marketplace listing before a CoreSpeed bot template can install cleanly.

Changes

  • plugins/corespeed/.cursor-plugin/plugin.json: the existing corespeed plugin, now for Cursor too. It points at the root .mcp.json — the plugin surface https://api.corespeed.io/mcp/plugin/chatgpt, as for Codex (feat(plugins): Codex gets the plugin surface /mcp/plugin/chatgpt; Claude Code keeps the full /mcp #3) — and skills/. Every server entry is URL only, OAuth sign-in, no API key; Claude Code's full /mcp lives in .mcp.claude.json.
  • .cursor-plugin/marketplace.json: Cursor needs it at the repo root for a multi-plugin repo. It lists only corespeed. corespeed-cli is a Codex-only workaround, so it is left out.
  • plugins/corespeed/assets/app-icon.svg: the square icon from corespeed.io (dark tile, light mark). The existing logo.svg and icon.svg use currentColor, so they turn black on a dark marketplace page.
  • CI: validate the new JSON, keep all three corespeed versions equal, pin the Cursor manifest to the root .mcp.json, and block a second mcp.json that would shadow it in Cursor.
  • README: a "Cursor and Grok Bot" section. Cursor drops out of "Other clients".

Verification

  • Cursor's own scripts/validate-template.mjs (from cursor/plugin-template) passes. It warns "no mcp.json". The manifest's mcpServers: "./.mcp.json" replaces that default lookup, the same way Cursor's official third_party/fireflies plugin does it.
  • The type: "http" + url entry matches the remote MCP plugins in cursor/plugins (fireflies, hunter, github).
  • The CI manifest steps pass locally.
  • Not tested inside a real Cursor install. This sandbox has no Cursor. In Cursor, as in Codex, a connected app's tools and the Drive need the cs CLI: a separate npm install -g @corespeed/cs and a browser cs login, which the bundled cs-cli skill walks the agent through.

For the PM

  • Both Codex manifests' shortDescription now fit the Plugins Directory's 30-character final-submission limit (the package validator allows 240, the Directory 30; check.yml holds the stricter one), and the cs-api sample calls memory__search, the current name — the two notes feat(plugins): Codex gets the plugin surface /mcp/plugin/chatgpt; Claude Code keeps the full /mcp #3's review inherited.
  • All three corespeed manifests are 0.3.0 (the version feat(plugins): Codex gets the plugin surface /mcp/plugin/chatgpt; Claude Code keeps the full /mcp #3 sets); the Claude Code and Codex plugins change only by that version. The cs-cli and cs-api skills say Cursor gets the plugin surface, as Codex does.
  • After merge, someone signed in to Cursor must submit https://github.com/corespeed-io/cs at cursor.com/marketplace/publish. Cursor reviews every plugin by hand.
  • The README tells Cursor users to search the Marketplace. That works only after Cursor approves the listing. Until then, the local-install line is the fallback.
  • The Grok Bot Marketplace (x.ai/bot/marketplace) lists bot templates that xAI picks by hand. It is not an MCP directory. A CoreSpeed template needs a Grok Bot account and is a separate step.

🤖 Generated with Claude Code

Stacked on #3 on 2026-10-26 (new review cycle)

#3 merged to main (squashed) on 2026-10-26, so this PR targets main again; the branch merged main with every conflict resolving to this PR's later wording, and its diff from main is the Cursor plugin plus the two notes below. Before that it sat on feat/codex-plugin-surface (#3) in a registered stack, because #3 makes the root .mcp.json the fixed plugin surface https://api.corespeed.io/mcp/plugin/chatgpt, and Cursor reads that file through its manifest.

Decision for the PM — Cursor gets the plugin surface, as Codex does. Cursor loads every tool of a server up front (no deferred loading), so the fixed list of memory and connector discovery is what keeps the plugin installable for an organization with many connectors; connected apps and the Drive are reached through the bundled cs-cli skill. The Cursor manifest, the Cursor marketplace entry and the README's Cursor section say so. The alternative is a Cursor-only server file naming the full /mcp (as Claude Code has): Cursor's manifest mcpServers is a path, so it is likely accepted, but it is unverified in a real Cursor, and it would hand Cursor a list that can exceed what it loads. The original approval (86a374d) reviewed Cursor with the full /mcp, before #3 changed what .mcp.json is.

Other resolution: all three corespeed manifests at 0.3.0 (the version guard now covers Cursor); check.yml is the union of #3's server guards, main's prompt-count guard and this PR's Cursor guards; the README intro and table name Cursor. Still not tested inside a real Cursor install.

Agent and others added 3 commits October 14, 2026 01:33
…ude Code keeps the full /mcp

The Codex manifest's mcpServers now points at its own file,
.mcp.codex.json, whose one server is https://api.corespeed.io/mcp/plugin/chatgpt:
the fixed surface corespeed-haas#1003 serves — shared memory, the caller's
identity, connector discovery (connectors_search / connect / wait) and the
approval wait — a small list no organization's connector count can push
past Codex's 2,048-tool catalog limit, and the shape the OpenAI Plugins
Directory reviews. A connected app's tools are called through the bundled
cs-cli skill; the skill's intro (both copies) says so. Claude Code keeps the
full /mcp through .mcp.json, unchanged. Manifest texts describe the Codex
plugin as memory, connector discovery and the CLI; both manifests go to
0.3.0. CI gains a guard pinning the Codex server file and its URL; the
README says which client gets which server.

Verified in Codex 0.151.0 from this tree: codex plugin add corespeed@corespeed
installs 0.3.0 and codex mcp list shows corespeed at
https://api.corespeed.io/mcp/plugin/chatgpt.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… manifest names the full server

The OpenAI Plugins Directory accepts mcpServers only as ./.mcp.json at the
plugin root (plugin_mcp_path_unsupported otherwise), so the surface Codex
and the Directory need — https://api.corespeed.io/mcp/plugin/chatgpt —
moves into the root file, and .mcp.codex.json goes. Claude Code's manifest
declares "./.mcp.claude.json" with the full /mcp: Claude Code loads the
root .mcp.json first, then the declared file, and a server declared later
replaces an earlier one of the same name, so Claude Code keeps the full
server. CI guards pin all four facts. cs-api says both URLs take the same
credentials and that the Codex plugin's server is the surface.

Verified: `claude plugin validate` passes; from this tree as a local
marketplace, Codex 0.151.0 lists corespeed at /mcp/plugin/chatgpt and
Claude Code 2.1.251 lists plugin:corespeed:corespeed at /mcp.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ce and Grok Bot

Grok Bot loads plugins only from the Cursor Marketplace. A Cursor plugin is
the way CoreSpeed gets into Grok Bot and its bot templates.

- plugins/corespeed/.cursor-plugin/plugin.json: the same plugin. It reuses
  .mcp.json and skills/, so all three clients get one MCP entry.
- .cursor-plugin/marketplace.json at the repo root, as Cursor needs for a
  multi-plugin repo. It lists only corespeed. corespeed-cli is a Codex
  workaround.
- assets/app-icon.svg: the square icon from corespeed.io. The old logos use
  currentColor and vanish on a dark page.
- CI: validate the new JSON, keep the three versions equal, and block a
  second MCP file.
- README: a Cursor and Grok Bot section.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@corespeed-hopper corespeed-hopper Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved after review of merge base 3572d85 through head 86a374d. No introduced correctness or security findings.

Verified the marketplace source, manifest name, shared MCP file, both bundled skills, and self-contained SVG resolve inside the plugin. Targeted local path and SVG checks passed. git diff --check passed. Cursor's plugin reference supports explicit MCP paths and this multi-plugin layout. Its local testing instructions support the documented copy-and-reload flow.

CI passed on this exact head: manifests and scan. No CI-covered full suite was repeated locally.

Release limits remain visible in the PR description: Marketplace listing needs Cursor approval, and live Cursor/Grok Bot installation and OAuth were not tested here. The local import path also depends on the user's team policy. These are release verification notes, not technical blockers in this diff.

Cycle 1, round 1/5. Reviewer session: 9fd94292-21e1-46c8-996e-34632ab4e409.

Agent and others added 2 commits October 26, 2026 01:47
… client reaches it

main brought #5 (the cs-cli skill knows the Drive; manifests 0.2.2 and the
prompt-count guard). The Claude Code manifest keeps main's wording — its
server is the full /mcp, Drive tools included — and names .mcp.claude.json.
The Codex manifest keeps this branch's wording — its server is the fixed
plugin surface, which has no Drive tools — and says files move through
cs drive, as the connected apps' tools move through cs mcp call. Both go
to 0.3.0. The README carries both table rows and names cs drive in the
Codex paragraph; the skill copies merged identically.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…the plugin surface too

The root .mcp.json is now the fixed plugin surface (#3), and Cursor reads
it through its manifest, so Cursor loads memory and connector discovery and
reaches connected apps and the Drive through the cs-cli skill — the same
footing as Codex, since Cursor loads every tool of a server up front. The
Cursor manifest and marketplace entry say so, and go to 0.3.0 with the
other two; check.yml is the union of the server guards, the prompt-count
guard and the Cursor guards.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Agent and others added 2 commits October 26, 2026 01:51
… surface too

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…it; cs-api calls memory__search

Final Directory submission refuses a shortDescription over 30 characters
(submission_subtitle_too_long); both Codex manifests are shortened and
check.yml holds the limit. The cs-api sample uses the current memory tool
name, as the cs-cli skill does.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

@corespeed-hopper corespeed-hopper Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved with no introduced correctness or security findings.

Reviewed merge base ba71a00 through head 285b971. This is cycle 2 after the prior approval at 86a374d. The final documentation and Directory length-guard deltas were reviewed incrementally. Targeted boundary checks confirmed that the guard accepts 1 and 30 characters, and rejects 0, 31, and 240.

The Cursor marketplace resolves the plugin, its declared MCP file, both skills, and the self-contained SVG. Targeted path and SVG checks passed. The configured surface returns an OAuth challenge whose canonical metadata returns 200. Its path-specific metadata alias agrees. git diff --check passed. Cursor's plugin reference supports the explicit MCP path and multi-plugin layout. No CI-covered full suite was repeated locally.

CI passed on this exact head: manifests and scan. These are both jobs configured in check.yml. The main ruleset requires ensemble-review, which is published separately after this approval.

The PR records the product choice: Cursor gets memory and connector discovery through the smaller surface. Connected apps and Drive require the CLI, its separate installation, and browser sign-in. Marketplace publication and live Cursor/Grok installation remain unverified. These release limits are visible for the human merger.

Cycle 2, round 1/5. Reviewer session: e57f220f-c883-4111-b172-7c890a9ed80a.

Base automatically changed from feat/codex-plugin-surface to main October 26, 2026 02:29
#3 landed on main as one squashed commit, so this branch's copy of its
content conflicted with the same content under other SHAs; every conflict
resolves to this branch's later wording (Cursor on the plugin surface, the
30-character subtitles, memory__search).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

@corespeed-hopper corespeed-hopper Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved with no findings. Cycle 3, round 1/5.

Reviewed merge base 946a1db through head 960774b. The new head has the identical Git tree as the approved 285b971: ed929eff4c65fc533e0a0029ff07d3ae556fce62. The squash-merged main base also has identical content to the prior base ba71a00. The merge preserved every reviewed change and resolved the base conflict.

The diff from main remains the reviewed Cursor packaging, client wording, Directory description limits, and sample tool-name correction. git diff --check passed. Prior targeted path, SVG, OAuth discovery, and length-boundary verification still applies to this identical tree; no full suite was repeated locally.

Fresh CI passed on this exact SHA: manifests and scan. The required ensemble-review check follows this review.

The PR retains the product choice and release limits: Cursor uses the smaller MCP surface, apps and Drive need separate CLI installation and browser sign-in, Marketplace publication is pending, and live Cursor/Grok installation remains untested.

Reviewer session: e57f220f-c883-4111-b172-7c890a9ed80a.

@BestOwl
BestOwl merged commit 645ea8f into main Oct 26, 2026
3 checks passed
@BestOwl
BestOwl deleted the feat/cursor-plugin branch October 26, 2026 02:32
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