Skip to content

fix(ci): the registry needs DNS auth, not OIDC - #6

Merged
jeremiahsay merged 1 commit into
mainfrom
fix/registry-dns-auth
Sep 10, 2026
Merged

jeremiahsay merged 1 commit into
mainfrom
fix/registry-dns-auth

Conversation

@jeremiahsay

Copy link
Copy Markdown
Collaborator

The second run got further — manifest valid, OIDC login succeeded — then the publish was rejected:

403 Forbidden
You have permission to publish: io.github.greencalculus/*
Attempting to publish:          com.greencalculus/api

GitHub OIDC only ever grants the io.github.<org> namespace. We publish under com.greencalculus/api, a DNS namespace, which is proved by signing with the key behind the v=MCPv1 TXT record on greencalculus.com. That record is live — but the private half was never persisted by whoever first published, so it has to be regenerated.

Renaming the server to io.github.greencalculus/api would make OIDC work and is the wrong trade: it abandons the published identity that existing clients and directory listings already reference.

Changes

  • The registry step signs with MCP_PRIVATE_KEY via mcp-publisher login dns.
  • It skips, with an explanation on the job summary, when that secret is absent. npm publishes either way, so a missing key costs the registry entry rather than turning the whole release red. That's what unbreaks main today.
  • scripts/rotate-registry-key.sh generates a fresh pair, pipes the private half straight into the repo secret without printing it, and prints the TXT record to publish. Both halves are length-checked (64 hex / 44 base64) before anything is set.

Verified

  • The keypair derivation was run on a throwaway key: 64-char hex private, 44-char base64 public — matching the shape of the record currently on the domain.
  • bash -n on the script; workflow YAML parses.

After merge

Two steps, in this order, and then the registry catches up on its own:

  1. ./scripts/rotate-registry-key.sh
  2. Replace the v=MCPv1 TXT record on greencalculus.com with the line it prints.

The weekly run picks it up with no further pushes.

🤖 Generated with Claude Code

https://claude.ai/code/session_01V5hFP2B2vU4dUMYgM1NEVs

The publish was rejected 403:

  You have permission to publish: io.github.greencalculus/*
  Attempting to publish: com.greencalculus/api

GitHub OIDC only ever grants the io.github.<org> namespace. We publish
under a DNS namespace, which is proved by signing with the key behind the
v=MCPv1 TXT record on greencalculus.com. That record is already live; the
private half was not persisted by whoever first published, so it needs
regenerating.

The registry step now signs with MCP_PRIVATE_KEY, and skips with an
explanation on the job summary when that secret is absent — npm still
publishes either way, so a missing key costs the registry entry rather
than the whole release.

scripts/rotate-registry-key.sh generates a pair, pipes the private half
straight into the repo secret without printing it, and prints the TXT
record to publish. Both halves are length-checked before anything is set.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V5hFP2B2vU4dUMYgM1NEVs
@jeremiahsay
jeremiahsay merged commit e0d054d into main Sep 10, 2026
4 checks passed
@jeremiahsay
jeremiahsay deleted the fix/registry-dns-auth branch September 10, 2026 11:09
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