Skip to content

ci(cli): publish with no stored secret, and to the MCP Registry - #288

Merged
nucliweb merged 1 commit into
mainfrom
feat/mcp-registry
Oct 21, 2026
Merged

nucliweb merged 1 commit into
mainfrom
feat/mcp-registry

Conversation

@nucliweb

Copy link
Copy Markdown
Owner

Summary

Chapter 7b of the MCP server, and phase 2a of the plan: the CLI publishes to npm with no token, and its MCP server goes to the MCP Registry as io.github.nucliweb/webperf-snippets.

  • cli/server.json describes the server for the registry: npm package webperf-snippets, stdio, argument mcp, and CRUX_API_KEY as an optional secret. cli/package.json carries the same name in mcpName, which the registry checks on npm.
  • publish-cli.yml: id-token: write, Node 24 and npm 11.5.1 or later, and no NODE_AUTH_TOKEN; npm publishes through trusted publishing and adds the provenance. Then mcp-publisher 1.8.1 logs in with github-oidc and publishes cli/server.json, retrying for three minutes while npm lists the version.
  • check-tag-version.js checks that cli/server.json, its npm package and its name match cli/package.json.
  • docs/RELEASING.md describes the publication and what to do if npm publishes and the registry step fails.

Before the next cli-v* tag, the trusted publisher on npmjs.com has to name this repository, publish-cli.yml and the npm-publish environment. After the first publication with it, the NPM_TOKEN secret can go.

Test plan

  • mcp-publisher validate cli/server.json (1.8.1) against the registry: valid, locally
  • check-tag-version.test.js: the version of server.json, of its package and the name; failed before the change, locally
  • npm run test:ci 22/22 and lint, locally
  • The workflow runs only with a tag: its first run is the release of 1.1.0
  • CI

… the MCP Registry

The MCP Registry does not host servers, it describes them: cli/server.json tells a client which npm package to install, over which transport, with which argument (mcp) and which variables (CRUX_API_KEY, optional and secret), so the client builds the command without a hand-written configuration. Ownership is proven twice: only a login as nucliweb on GitHub publishes io.github.nucliweb/* names, and the npm package carries that name in mcpName, which the registry reads from npm.

publish-cli.yml publishes to npm through trusted publishing: npm takes the OIDC token of the run instead of NPM_TOKEN, and adds the provenance of the package. The same token logs mcp-publisher in to the registry, after npm, and the step retries while npm lists the new version. check-tag-version.js also checks that the version of cli/server.json, the version of its npm package and its name match cli/package.json.
@vercel

vercel Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
webperf-snippets Ready Ready Preview Oct 21, 2026 12:47pm UTC

@nucliweb
nucliweb merged commit 220cfc3 into main Oct 21, 2026
3 checks passed
@nucliweb
nucliweb deleted the feat/mcp-registry branch October 21, 2026 12:51
@nucliweb nucliweb mentioned this pull request Oct 21, 2026
4 of 5 tasks

This branch was successfully deployed

1 active deployment
Preview — 9aa6293e Deployed Oct 21, 2026 by vercel[bot]
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