Skip to content

ci: publish to the MCP Registry from CI, check version bumps - #2

Merged
siarheidudko merged 1 commit into
mainfrom
claude/registry-ci-versions
Oct 25, 2026
Merged

siarheidudko merged 1 commit into
mainfrom
claude/registry-ci-versions

Conversation

@siarheidudko

Copy link
Copy Markdown
Member

Publishes server.json to the MCP Registry from CI and catches forgotten version bumps before they reach main.

Publish (publish-mcp.yml) — on a push to main that changes server.json, by hand (Run workflow), or on a v<version> tag that must equal server.json. The version in server.json is what gets published:

  • same version, same content as the registry → no-op, green (a manual run is a safe health check: it still logs in)
  • same version, different content → red, "bump version"
  • new version → published

Auth: DNS for the domain derived from the namespace (dev.dudko → dudko.dev). Org secret MCP_PRIVATE_KEY is accepted as the PEM file or the hex seed; the job derives the public key and checks it against the apex TXT record before mcp-publisher login, so a wrong or missing key fails with a plain message.

Validate (validate-server-json.yml) — every PR: schema; comparison with what the registry serves; new version must be above the latest published; for npm-backed servers the release must exist with mcpName; a plugin change needs a new plugin.json version (installed plugins are pinned to it). Weekly run on top.

.claude/CLAUDE.md — the bump rules and how publishing/the key work, so Claude bumps versions in the same change. It sits under .claude/ because a CLAUDE.md at the plugin root (this repo is the plugin, source: ./) draws a claude plugin validate warning and isn't loaded from the plugin anyway.

Merging this publishes nothing: server.json is unchanged and the registry already serves it as is.


Generated by Claude Code

- publish-mcp.yml: on a push to main that changes server.json, by hand, or on a
  v<version> tag that must equal server.json. server.json's version is the one
  published. Already published with the same content -> no-op; same version with
  different content -> fails with "bump version". DNS auth for the domain derived
  from the namespace; MCP_PRIVATE_KEY (org secret) accepted as PEM or hex seed and
  checked against the apex TXT record before login.
- validate-server-json.yml: every PR - schema, comparison with the registry, npm
  release + mcpName for npm-backed servers, and a plugin.json version bump when
  the plugin changed. Weekly run fails while npm is ahead of server.json.
- .github/scripts/: the checks, identical across all MCP setup repos.
- .claude/CLAUDE.md: when and how to bump each version, how publishing and the
  registry key work. Under .claude/ because a CLAUDE.md at the plugin root draws
  a `claude plugin validate` warning and is never loaded from the plugin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014kBzcE2sPohiNhWGtyAJ1w
@siarheidudko
siarheidudko merged commit bc98fac into main Oct 25, 2026
1 check passed
@siarheidudko
siarheidudko deleted the claude/registry-ci-versions branch October 25, 2026 13:40
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