Skip to content

feat(mcp): list each release in the official MCP Registry - #59

Merged
yultyyev merged 4 commits into
feat/distributionfrom
feat/mcp-registry
Nov 7, 2026
Merged

yultyyev merged 4 commits into
feat/distributionfrom
feat/mcp-registry

Conversation

@yultyyev

@yultyyev yultyyev commented Nov 7, 2026

Copy link
Copy Markdown
Collaborator

Targets the integration branch feat/distribution. Nothing releases until that branch merges into main.

What

Each release is listed in the official MCP Registry as io.github.MakeMyClip/editor, with two packages: the npm package (npx @makemyclip/editor mcp) and the Claude Desktop extension from #58.

  • server.json: schema 2025-12-11. The description is 99 characters (the limit is 100). It has the repository with its GitHub id, the logo as the icon, and the npm package run with mcp, with the four env vars the server reads, each optional (format: filepath).
  • package.json mcpName: io.github.MakeMyClip/editor. The registry fetches that exact npm version and requires mcpName to equal the server name. Case matters: the registry grants the namespace from the GitHub login as written (MakeMyClip) and compares case-sensitively, so a lowercase name is rejected with 403 (GitHub namespace permissions are case-sensitive but GitHub usernames/orgs are case-insensitive modelcontextprotocol/registry#689).
  • scripts/mcp-registry.ts:
    • prepare [version] stamps the version, by default from package.json, which semantic-release has just written. It also adds the .mcpb as an mcpb package: releases/download/v<version>/makemyclip-editor.mcpb with its fileSha256.
    • publish runs mcp-publisher login github-oidc, then mcp-publisher publish. Publish is retried 6 × 20 s, because the registry reads the npm version, which can take a minute to appear.
    • Nothing is committed back; server.json changes only in the release checkout.
  • Release job:
    • It installs mcp-publisher v1.8.8 (the docs pin v1.8.1, and older binaries fail with "invalid audience") and checks it with cosign verify-blob against the registry's release workflow identity, as the official workflow does.
    • .releaserc.json: prepareCmd becomes pnpm build:mcpb && pnpm registry:prepare, and a new successCmd runs pnpm registry:publish. success runs after @semantic-release/github has uploaded the .mcpb, which the registry checks is reachable.
    • This lives in release.yml, not a tag-triggered workflow, because tags that semantic-release pushes with GITHUB_TOKEN don't trigger workflows.
  • Docs:
    • README: the MCP server section links the registry listing.
    • RELEASING.md: steps 4–6 now mention the .mcpb asset and the registry, with a section on the listing and a manual recovery path. That path uses a read:org personal access token, because the interactive login github can't publish to an organization namespace.

Why

Distribution slice 3 of 4. The finish line includes "find and install it from the official MCP Registry". MCP clients and aggregators that browse the registry pick it up from there. The first publish happens at the 0.4.1 release merge; the maintainer approved it on 2026-11-07.

How to test

pnpm build && pnpm build:mcpb
pnpm registry:prepare 0.4.1   # stamps server.json in place; revert it afterwards

Checks

  • tests/server-json.test.ts checks:
    • name equals package.json's mcpName, io.github.MakeMyClip/editor;
    • the description is at most 100 characters, and the repo URL matches;
    • the npm package is @makemyclip/editor with mcp;
    • its env vars match the ones the server reads.
  • The committed server.json and a registry:prepare-stamped one (with the mcpb entry) both validate against the registry's 2025-12-11 JSON schema with ajv. The stamped fileSha256 equals shasum -a 256 of the built bundle.
  • Both workflow files parse (js-yaml), and the step order is checked.
  • pnpm lint has 0 errors and pnpm type-check is clean.
  • Not checked until the release: the live OIDC login and publish. They need the release job's token.
  • Codex review (codex review --base feat/mcpb-bundle, gpt-6.1-sol), 2 passes:
    • Pass 1, P2: the manual recovery steps would stamp 0.0.0-development, because a tag checkout keeps that version. Fixed in b73956d: registry:prepare takes the version, and the steps download the released .mcpb.
    • Pass 2: no findings.

yultyyev and others added 4 commits November 7, 2026 13:25
server.json lists io.github.MakeMyClip/editor as the npm package run as
`npx @makemyclip/editor mcp`, with the env it reads; package.json gets
the matching mcpName, which the registry checks on npm. At release,
`pnpm registry:prepare` stamps the version and adds the Claude Desktop
extension as an mcpb package (release URL + SHA-256), and
`pnpm registry:publish` logs in with GitHub OIDC and publishes, retrying
while npm catches up.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The release job installs mcp-publisher v1.8.8, checked against its
sigstore signature, and semantic-release stamps server.json in prepare
and publishes it in success, after npm and the GitHub release (with the
.mcpb) are out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A checkout of a release tag still says 0.0.0-development, so the
recovery steps pass the version and download the released .mcpb.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@yultyyev
yultyyev merged commit 93ccb16 into feat/distribution Nov 7, 2026
1 check passed
@github-actions

github-actions Bot commented Nov 7, 2026

Copy link
Copy Markdown

🎉 This PR is included in version 0.4.1 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant