Repository navigation
[Discovery] Sync agent integration versions + add MCP Registry server.json - #1109
Merged
Merged
Conversation
sync-agent-versions.ts rewrites every @pascal-app/cli@<version> quote and the server.json version from the package versions; skills:validate fails on drift. The pin moves from 1.0.0 to the published 1.0.4.
Lists @pascal-app/mcp (stdio via npx) next to the hosted Streamable HTTP endpoint, drops the required API-key header since the endpoint advertises OAuth through its 401 challenge, and adds mcpName for npm ownership.
…blish The release bump runs sync-agent-versions.ts and mcp-publisher validate. The registry workflow checks server.json against packages/mcp/package.json on PRs and moves the live API catalog and server card checks to a manual pre-publish job.
…ion-versions-780a
A beta release commits to main, so syncing would pin Cursor marketplace installs and server.json to a prerelease. stablePackageVersion skips the sync for prerelease trees; the Cursor policy and the registry workflow accept the last stable pin while the packages are on a beta.
Aymericr
marked this pull request as ready for review
October 20, 2026 04:19
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.
What does this PR do?
Agent integrations now take their versions from the package versions instead of hardcoding them, and
server.jsonis ready for the official MCP Registry under a reverse-DNS name. Nothing publishes automatically.scripts/sync-agent-versions.tsrewrites every@pascal-app/cli@<version>quote (both Cursormcp.jsonconfigs and the three setup docs) frompackages/cli/package.json, and theserver.jsonversion frompackages/mcp/package.json.--checkruns inbun run skills:validate, so CI fails on drift.scripts/cursor-plugin-policy.tsreads the expected pin from the CLI package instead of hardcoding1.0.0. The pin moves from1.0.0to the published1.0.4.betarelease commits tomain, so a naive sync would pin Cursor marketplace installs andserver.jsonto a prerelease. While the packages are on a prerelease, the sync leaves integrations alone, and the Cursor policy and the registry workflow accept the last stable pin, which must still be an exact stable version.server.json(schema2025-12-11, the current one) is renamed fromio.github.pascalorg/editortoapp.pascal/editor. It lists the npm package@pascal-app/mcp(stdio,npx) next to the remotehttps://editor.pascal.app/api/mcp(streamable-http), and its version is the package version,1.0.4. I removed the remote's requiredAuthorization: Bearer sk_live_…header: the endpoint advertises OAuth through its 401WWW-Authenticate: … resource_metadata=…challenge, and the Cursor plugin already uses OAuth only. API keys still work as a bearer token.packages/mcp/package.jsongains"mcpName": "app.pascal/editor", which the registry needs to verify npm ownership.release.ymlruns the sync afterbun install(before any publish), so the release commit'sgit add -Acarries the new pin and manifest. It then runsmcp-publisher validate. There is no registry publish step. On PRs,mcp-registry.ymlalso checksserver.jsonagainstpackages/mcp/package.json(version,mcpName, package entry) and checks that the endpoint returns the OAuth challenge. The live API-catalog and server-card checks are in a separatehosted-matches-manifestjob gated onif: github.event_name == 'workflow_dispatch', so it is skipped on PRs and pushes and cannot block PR CI. It is the gate to run by hand before publishing.wiki/npm-release.mdhas a new MCP Registry section with the manual publish steps (DNS or HTTP auth forpascal.app,mcp-publisher publish).README.mdandskills/README.mdare updated to match.Publishing audit
Only
release.ymlpublishes (npm, GitHub release asset, GHCR image), and it isworkflow_dispatch-only, as before.ci.yml,mcp-ci.yml,docker.yml(builds without pushing) andmcp-registry.ymlpublish nothing. Nothing in this repo runsmcp-publisher publish.Outside this repo
pascalorg/private-editor). Done in private-editor [Deps] mcp: MCP SDK 2.3.1 and @hono/node-server 1.19.17 (security) #1119 and deployed./.well-known/mcp/server-card.jsonreportsserverInfo.version: "1.0.4", and/.well-known/api-catalogreportsapp.pascal/editor1.0.4. I ran thehosted-matches-manifeststeps against production withbash -e, and both pass.app.pascal/*. This needs apascal.appDNS TXT record (v=MCPv1; k=ed25519; p=…) orhttps://pascal.app/.well-known/mcp-registry-authformcp-publisher login dns|http.mcpName. The published@pascal-app/mcp@1.0.4has nomcpName, so the registry will reject a publish until the next stable release, which carries it.io.github.pascalorg/editor0.6.1 stays in the registry. Afterapp.pascal/editoris published, an owner can mark the old entry deprecated withmcp-publisher status.plugin.jsonstays at0.1.10. If the marketplace refresh needs a new bundle version, bump the plugin version separately.CI note
The first
qualityrun on this branch failed inpackages/mcp/src/tools/author-scene.test.ts, with an unhandled error fromthree-bvh-csgrequire()-ing ESMthree. That failure came frommain(#1107), not this branch, andmainhas since fixed it ("Use the ESM CSG entry point in server-side geometry compilation"). This branch now includes that fix through a merge ofmain.How to test
bun scripts/sync-agent-versions.ts --check. It exits 0.packages/cli/package.jsonandpackages/mcp/package.jsonto1.0.5, then runbun scripts/sync-agent-versions.ts. Both Cursor configs, the three docs andserver.jsonnow say1.0.5, andbun run skills:validatepasses. Set them to1.0.5-beta.1instead: nothing changes and validation still passes. Revert.mcp-publisher validate(v1.8.1) from the repo root. It prints✅ server.json is valid.gh workflow run mcp-registry.yml).hosted-matches-manifestpasses against production.Checks I ran locally on the final head:
bun run check,bun run skills:validate(75 pass),bun run check-types(13/13),mcp-publisher validate, the simulated stable release above, and thevalidateandhosted-matches-manifestjob steps against production underbash -e(all pass, including the beta and drift cases for the manifest check).Screenshots / screen recording
N/A — non-visual change
Checklist
bun devbun checkto verify)mainbranchNote
Low Risk
Mostly tooling, manifests, and CI; hosted auth is documented as OAuth discovery rather than manifest headers, with no automatic registry publish.
Reviewed by Cursor Bugbot for commit a6ab970. Bugbot is set up for automated code reviews on this repo. Configure here.