Skip to content

ci: publish to the official MCP Registry on release#39

Closed
johnxie wants to merge 3 commits into
mainfrom
feat/mcp-registry-publish
Closed

ci: publish to the official MCP Registry on release#39
johnxie wants to merge 3 commits into
mainfrom
feat/mcp-registry-publish

Conversation

@johnxie

@johnxie johnxie commented Jun 5, 2026

Copy link
Copy Markdown
Member

What & why

The Taskade server is not yet in the official MCP Registry (verified: registry.modelcontextprotocol.io/v0/servers?search=taskade → 0 results). The registry is the upstream source most aggregators (Glama, MCPfinder, …) ingest, so listing once propagates discovery ecosystem-wide.

This wires packages/server/server.json to publish automatically on release via the mcp-publisher CLI using GitHub Actions OIDC (no stored secrets). The assets are already in place — server.json (io.github.taskade/mcp-server) + package.json mcpName are the registry ownership handshake.

Changes

  • release.yml: add job permissions (id-token: write for OIDC) + a Publish to MCP Registry step gated on the same hasChangesets == 'false' condition as the npm publish.

Zero-regression

  • Purely additive CI step; the existing changesets + npm publish path is untouched.
  • Step only runs on release (never on PRs). Binary is downloaded at runtime, not added to deps.
  • mcp-publisher_linux_amd64.tar.gz asset + login github-oidc confirmed against registry release v1.7.9.

⚠️ One-time manual step (maintainer)

Before the first automated run, a maintainer with org access must seed the namespace once:

cd packages/server
mcp-publisher login github   # browser OAuth → grants io.github.taskade/* namespace
mcp-publisher publish

Depends on

Adds a github-oidc mcp-publisher step to release.yml that publishes
packages/server/server.json to registry.modelcontextprotocol.io whenever an
npm release happens (same gate as the existing npm publish). Uses GitHub
Actions OIDC — no stored secrets. server.json + package.json mcpName
(io.github.taskade/mcp-server) are already the ownership handshake.

Requires a one-time manual namespace seed by a maintainer before the first
automated run: mcp-publisher login github && mcp-publisher publish.
@johnxie johnxie requested a review from Copilot June 5, 2026 11:04
@changeset-bot

changeset-bot Bot commented Jun 5, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: b759288

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the release workflow to automatically publish the MCP server manifest (packages/server/server.json) to the official MCP Registry during the release pipeline, using GitHub Actions OIDC (no stored registry secrets).

Changes:

  • Adds explicit job-level permissions, including id-token: write, to enable GitHub OIDC login.
  • Adds a new “Publish to MCP Registry” step gated on the same hasChangesets == 'false' condition as the npm publish step.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/release.yml Outdated
Comment on lines +57 to +59
curl -sL "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_linux_amd64.tar.gz" | tar xz mcp-publisher
./mcp-publisher login github-oidc
./mcp-publisher publish No newline at end of file
Comment thread .github/workflows/release.yml Outdated
if: steps.changesets.outputs.hasChangesets == 'false'
working-directory: packages/server
run: |
curl -sL "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_linux_amd64.tar.gz" | tar xz mcp-publisher
Addresses Copilot review on the registry-publish step:
- Pin mcp-publisher to v1.7.9 (reproducible, reviewable releases) instead of
  'latest' (supply-chain hygiene).
- Use 'tar -xz -f -' to explicitly read the archive from stdin (portable on
  GNU tar / Ubuntu runners) and 'curl -fsSL' to fail on HTTP errors.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 3 comments.

Comment on lines +59 to +62
run: |
curl -fsSL "https://github.com/modelcontextprotocol/registry/releases/download/${MCP_PUBLISHER_VERSION}/mcp-publisher_linux_amd64.tar.gz" | tar -xz -f - mcp-publisher
./mcp-publisher login github-oidc
./mcp-publisher publish No newline at end of file
Comment on lines +60 to +62
curl -fsSL "https://github.com/modelcontextprotocol/registry/releases/download/${MCP_PUBLISHER_VERSION}/mcp-publisher_linux_amd64.tar.gz" | tar -xz -f - mcp-publisher
./mcp-publisher login github-oidc
./mcp-publisher publish No newline at end of file
Comment on lines +11 to +14
permissions:
contents: write
pull-requests: write
id-token: write # required for mcp-publisher GitHub OIDC login
Addresses Copilot review: without pipefail a transient curl failure could be
masked in the curl|tar pipeline. Fail fast on any error in the run block.

(Deferred as acceptable: pinned version already mitigates the supply-chain
risk; full sigstore verification and per-step OIDC scoping would require a
separate job and are noted for follow-up.)
@johnxie

johnxie commented Jun 5, 2026

Copy link
Copy Markdown
Member Author

✅ Validated → fixed → ⚠️ re-review requested (not auto-merging)

Copilot finding Verdict Action
tar xz without -f - may fail on GNU tar (Ubuntu) VALID tar -xz -f - + curl -fsSL.
releases/latest is non-reproducible / supply-chain risk VALID Pinned MCP_PUBLISHER_VERSION=v1.7.9 (URL verified resolves).
curl | tar can mask a failed download (no pipefail) VALID Added set -euo pipefail.
No checksum/signature verification of the downloaded binary valid, deferred Pinned version mitigates; full sigstore verify is heavier — follow-up.
id-token: write granted to the whole job valid, standard GH permissions are job/workflow-scoped, not per-step; isolating needs a separate job — follow-up.

QA: release.yml valid YAML; pinned asset URL resolves (HTTP 302 → asset).

Why not auto-merged: this step publishes to the official MCP Registry on the next release via mcp-publisher login github-oidc. That depends on registry-side GitHub-OIDC trust for the io.github.taskade namespace, which I can't verify from here. To avoid a red release pipeline, a maintainer should confirm/seed it (mcp-publisher login github && mcp-publisher publish) before merge. Confidence to auto-merge: low → re-review requested.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment on lines +60 to +62
set -euo pipefail
curl -fsSL "https://github.com/modelcontextprotocol/registry/releases/download/${MCP_PUBLISHER_VERSION}/mcp-publisher_linux_amd64.tar.gz" | tar -xz -f - mcp-publisher
./mcp-publisher login github-oidc
@johnxie

johnxie commented Jun 9, 2026

Copy link
Copy Markdown
Member Author

Superseded by #36 — closing

#36 landed the same capability with a strictly better architecture, addressing this PR's open Copilot concerns by construction:

  • separate workflowid-token: write no longer granted to the npm-release job (the exact OIDC-scoping concern raised here)
  • registry publish failure cannot red the release pipeline (my original reason for holding this PR)
  • workflow_dispatch gives the manual seed/test path without merging risk
  • server.json version auto-sync prevents the drift class permanently
  • same supply-chain hardening (pinned v1.7.9, pipefail, tar -f -) applied there

First publish will be verified via manual dispatch after release PR #49 lands.

@johnxie johnxie closed this Jun 9, 2026
@johnxie johnxie deleted the feat/mcp-registry-publish branch June 9, 2026 19:25
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.

2 participants