ci(mcp-registry): auto-publish to the official MCP Registry via GitHub OIDC#36
Conversation
…b OIDC Adds a workflow that publishes io.github.taskade/mcp-server to registry.modelcontextprotocol.io with no secrets (GitHub OIDC). - Fires on the `@taskade/mcp-server@*` release tag (pushed by changesets after npm publish), and on manual workflow_dispatch. - Auto-syncs packages/server/server.json version from package.json at publish time, so it can never drift from the published npm version again. "Set once, never touch again": after this + the 0.0.3 server.json bump (#35), the registry entry stays current automatically on every release.
|
There was a problem hiding this comment.
Pull request overview
Adds a dedicated GitHub Actions workflow to publish io.github.taskade/mcp-server to the official MCP Registry using GitHub OIDC (no stored secrets), intended to run automatically on release tags and manually via workflow dispatch.
Changes:
- Introduces
.github/workflows/publish-mcp-registry.ymlto publish to the MCP Registry on@taskade/mcp-server@*tags or manual runs. - Adds a step intended to keep
packages/server/server.jsonversion aligned at publish time. - Downloads and installs
mcp-publisher, authenticates via GitHub OIDC, then runsmcp-publisher publish.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| - name: Checkout | ||
| uses: actions/checkout@v4 | ||
|
|
||
| - name: Sync server.json version to the published npm version | ||
| run: | | ||
| node -e "const fs=require('fs');const p='packages/server/server.json';const s=JSON.parse(fs.readFileSync(p,'utf8'));const v=require('./packages/server/package.json').version;s.version=v;(s.packages||[]).forEach(k=>{k.version=v});fs.writeFileSync(p,JSON.stringify(s,null,2)+'\n');console.log('server.json synced to '+v)" | ||
|
|
| - name: Install mcp-publisher | ||
| run: | | ||
| curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher | ||
| sudo mv mcp-publisher /usr/local/bin/ |
|
cc @deanzaka @lxcid — context for review 👇 Adds a decoupled workflow ( How it behaves:
Review notes: |
Same hardening Copilot required on the release-step variant: pinned version (reproducible, reviewable bumps), curl -fsSL, tar -xz -f -, set -euo pipefail.
✅ Validated → hardened → merging (supersedes #39)This design is better than #39 (registry step inside
QA: YAML valid; sync one-liner tested locally ( Caveat (noted, not blocking): the tag trigger assumes the release pushes Plan: merge → merge release PR #49 (npm |
"Set once, never touch again" — registers
io.github.taskade/mcp-serverin the official MCP Registry automatically, with no secrets (GitHub OIDC).Why
The MCP Registry is the canonical index other directories sync from (PulseMCP flips its temporary mirror to the real entry; Glama / mcp.so refresh). Today Taskade isn't in it. This makes registration automatic and self-maintaining.
How it works
@taskade/mcp-server@*tag that changesets pushes right after a successful npm publish (so the npm version always exists before we register it), plusworkflow_dispatchfor manual runs.mcp-publisher login github-oidc— OIDC, so no PAT/secret is stored.io.github.taskade/*is authorized because the workflow runs in a repo under thetaskadeorg.packages/server/server.json→package.jsonversion at publish time, soserver.jsoncan never drift out of sync with npm again (the registry rejects a version that isn't published).Sequencing with the other PR
server.jsonto0.0.3(fixes the repo + enables a manual publish today).To go live now (after merging both)
Click Actions → Publish to MCP Registry → Run workflow once to register the current
0.0.3. Every release after that publishes itself.Verification
permissions: id-token: write(required for OIDC),contents: readrelease.ymlpipeline or its permissionsmcp-publisherinstall pinned to the officialmodelcontextprotocol/registryreleasesmcpName: io.github.taskade/mcp-serverRefs: official OIDC publishing guide — https://modelcontextprotocol.io/registry/quickstart