ci: auto-publish to MCP Registry on tag push - #18
Merged
Conversation
4 tasks
jjacks95
force-pushed
the
chore/mcp-registry-auto-publish
branch
from
May 20, 2026 22:31
9d4064d to
71c7219
Compare
Collaborator
Author
|
Rebased on top of
Ready for review when you have a moment — gentle bump on this one. Related: PR #19 (description keyword optimization) is a small companion that will benefit from this CI machinery once both merge. |
Adds four steps to the publish workflow that run after the existing
PyPI publish + GitHub Release upload:
1. Sync server.json version with the pushed tag (jq)
2. Install mcp-publisher from the official release tarball
3. Authenticate with GitHub OIDC (uses existing id-token: write
permission already granted for PyPI Trusted Publishing — no new
secrets required)
4. Publish server.json with a 5-attempt × 30s retry loop, since
mcp-publisher reads the README from PyPI to verify the
mcp-name claim and PyPI's CDN can lag 30-90s after publish
Gating mirrors the PyPI publish step: runs on tag push or
workflow_dispatch with target=pypi. testpypi runs are skipped.
After this lands, future v* tags will land in
registry.modelcontextprotocol.io automatically — no manual
mcp-publisher login + publish from a maintainer's machine.
jjacks95
force-pushed
the
chore/mcp-registry-auto-publish
branch
from
May 21, 2026 00:02
71c7219 to
6dd6455
Compare
This was referenced May 21, 2026
Merged
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.
Summary
Adds MCP Registry auto-publish to the existing tag-push workflow so future
v*releases land inregistry.modelcontextprotocol.iowithout anyone runningmcp-publisherfrom their laptop.Today the registry entry has to be refreshed manually each release — this PR closes that gap.
What changes
Four new steps appended to
.github/workflows/publish.yml, gated to run only on real PyPI publish (tag push orworkflow_dispatchwithtarget=pypi). TestPyPI dispatches are skipped:server.jsonversion with the pushed tag (jq) — prevents drift between the git tag,pyproject.toml, andserver.json. Maintainer only has to bumppyproject.tomlgoing forward.mcp-publisherfrom the officialmodelcontextprotocol/registryrelease tarball.id-token: writepermission already granted for PyPI Trusted Publishing. No new secrets.mcp-publisherreads the package README from PyPI to verify themcp-nameclaim and PyPI's CDN can lag 30–90s after a fresh upload.Why OIDC over PAT
GitHub OIDC (
mcp-publisher login github-oidc) is the recommended path per the official docs. It needs no stored secret because GitHub Actions exchanges an ephemeral OIDC token for a short-lived registry token. Same trust model as the PyPI Trusted Publishing step already in this workflow.What this does not change
Test plan
python3 -c "import yaml; yaml.safe_load(...)"— syntactically validif:clauses matching the existing PyPI stepv1.3.2(or whatever next bump is) to validate the full chain. If MCP publish fails for a fresh reason, the5 × 30sretry surfaces it in workflow logs without silent failure.Reference
io.github.lqwdtech/saturnzapv1.3.0 + v1.3.1 are both live, v1.3.1 markedisLatest: true