Repository navigation
Make the MCP registry publish workflow runnable - #255
Open
robertjamesprior wants to merge 2 commits into
Open
robertjamesprior wants to merge 2 commits into
robertjamesprior wants to merge 2 commits into
Conversation
The workflow has never published. Every run on 2025-09-10 failed and the push trigger was commented out; the live entry was published out of band the day before, so each push-triggered run was also republishing version 1.0.0, which the registry rejects. - Skip when server.json's version is already live, so re-enabling the push trigger cannot fail a merge that did not touch the version. - Install the published mcp-publisher binary instead of cloning the registry and building it with Go. - Derive the Ed25519 seed from the DER tail rather than parsing `openssl -text` output, and check it against the key published in DNS before attempting login, so a key mismatch fails with a message instead of a 401. - Drop the unused Node setup and id-token permission. DNS auth signs in process; OIDC would only authenticate an io.github.* namespace. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
robertjamesprior
marked this pull request as ready for review
October 16, 2026 18:15
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 925df1c. Configure here.
| want="$(jq -r .version server.json)" | ||
| live="$(curl -fsS --get --data-urlencode "search=$name" "$REGISTRY_URL/v0/servers" \ | ||
| | jq -r --arg name "$name" '.servers[] | select(.server.name == $name) | .server.version')" | ||
| if [ "$live" = "$want" ]; then |
There was a problem hiding this comment.
Version skip check never matches
High Severity
The skip check treats every matching version from GET /v0/servers as one value. That endpoint returns all published versions unless version=latest is passed, so after 1.1.0 is live live no longer equals want and the job tries to publish again.
Reviewed by Cursor Bugbot for commit 925df1c. Configure here.
This branch was successfully deployed
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.


publish-mcp.ymlhas never successfully published. It ran ten times on 2025-09-10, failed every time, and its push trigger was commented out with the note "Paused before we have a remote mcp server and already published it". Both halves of that note are now false, and the live registry entry has been stale since 2025-09-09.Why every run failed
The live entry was published 2025-09-09 18:04, out of band. Every one of the ten runs the next day was triggered by a push to
mainwithserver.jsonstill at version 1.0.0, and the registry rejects that:So the publish step could not have succeeded regardless of what the login step did. Run logs are expired, so I cannot confirm whether login was also failing, which is why this change hardens both.
Changes
server.json. This is what makes re-enabling the push trigger safe: a merge that does not touchversionis a no-op rather than a red build. The trigger is also pathed toserver.json.v1.8.1) instead of cloning the registry and runningmake publisher. Removes the Go toolchain, a full clone, and an unpinned dependency on that repo'smain.openssl pkey -textoutput with awk. For Ed25519 the 48-byte PKCS#8 DER ends with the 32-byte seed, which is exactly the 64 hex characterslogin dnswants.v=MCPv1record at theonkernel.comapex. A mismatch now fails with a message naming both keys instead of an opaque 401.id-token: write. Neither is used. DNS auth signs in process, andgithub-oidcwould only authenticate anio.github.*namespace, notcom.onkernel/*.Testing
Requires
MCP_PRIVATE_KEY, so login and publish are unverified end to end. Everything either side of them is verified:openssl pkey -puboutbyte for byte.rmb4S9RJozgGFvf91MZakyUlRNTIKjzXB6c8tAOiI9M=.1.0.0 -> 1.1.0, so the next run will publish rather than skip.mcp-publisher_linux_amd64.tar.gzcontainsmcp-publisherat the archive root and--versionexits 0.whoever dispatches this first should confirm
MCP_PRIVATE_KEYstill holds the base64 body of the PKCS#8 key whose public half is in DNS. If it does, the DNS pre-check passes and publishing should work. If it does not, the pre-check will say so in one line.Note
Medium Risk
Changes CI that uses
MCP_PRIVATE_KEYand publishes to the public MCP registry; misconfiguration could block releases or expose signing material if masking fails.Overview
Re-enables automated MCP registry publishing on pushes to
mainthat changeserver.json, after the workflow had been paused.The workflow now no-ops when the registry already has the same version as
server.json, so routine merges do not fail on duplicate-version errors. It installs pinnedmcp-publisherv1.8.1 from releases instead of cloning and building the registry repo, and drops unused Node.js setup and OIDC (id-token) permissions.DNS login is hardened: the Ed25519 seed is derived from the PKCS#8 secret’s DER tail, the derived public key is checked against the apex
v=MCPv1TXT record beforelogin dns, and install/login/publish steps run only when a new version needs publishing.Reviewed by Cursor Bugbot for commit 925df1c. Bugbot is set up for automated code reviews on this repo. Configure here.