From e2c053b9eea0ca6d67eb934bbfb77f58f61af1e9 Mon Sep 17 00:00:00 2001 From: James Sesler Date: Sun, 2 Aug 2026 12:47:35 -0400 Subject: [PATCH] ci: publish to the MCP Registry on release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The registry listing is a live discovery surface for Claude Code and Cursor users, and it had drifted badly: the latest published entry is 0.12.3 while npm is on 0.12.11. The release workflow publishes to npm and cuts a GitHub Release but never touched the registry, so the listing only moved when someone ran mcp-publisher by hand — and that stopped after 0.12.3. Adds an idempotent publish step. The io.github.* namespace authenticates via GitHub OIDC, so this needs no stored secret; the job already grants `id-token: write`. The step skips cleanly when the version is already listed, matching the existing npm publish step's behavior. mcp-publisher is pinned to v1.8.0 rather than tracking latest, so a release can't start failing because of an upstream tool change. Also rewrites the registry description to match the positioning merged in #77. The schema caps description at 100 characters, so this is the long-form pitch compressed to 96 rather than the README paragraph. Note: the schema has no keywords field, so the "add keywords" part of the visibility roadmap is not applicable — discovery there is name, title, and description only. Co-Authored-By: Claude Opus 5 --- .github/workflows/release.yml | 20 ++++++++++++++++++++ server.json | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b0cdf79..6977a49 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -71,6 +71,26 @@ jobs: else npm publish --registry https://registry.npmjs.org/ --provenance --access public fi + # The MCP Registry listing is a live discovery surface for Claude Code and + # Cursor users. It was previously updated by hand and drifted to 0.12.3 + # while npm was on 0.12.11. Publishing here keeps the two in lockstep. + # The io.github.* namespace authenticates via GitHub OIDC, so this needs + # no stored secret — `id-token: write` above is sufficient. + - name: Publish to the MCP Registry (idempotent) + env: + MCP_PUBLISHER_VERSION: v1.8.0 + run: | + VERSION="${{ steps.meta.outputs.version }}" + PUBLISHED=$(curl -sS "https://registry.modelcontextprotocol.io/v0/servers?search=codecartographer" \ + | python3 -c "import json,sys; print(' '.join(s['server']['version'] for s in json.load(sys.stdin).get('servers', [])))" 2>/dev/null || echo "") + if printf '%s' "$PUBLISHED" | tr ' ' '\n' | grep -qx "$VERSION"; then + echo "codecartographer $VERSION is already in the MCP Registry; skipping publish" + exit 0 + fi + curl -sSL "https://github.com/modelcontextprotocol/registry/releases/download/${MCP_PUBLISHER_VERSION}/mcp-publisher_linux_amd64.tar.gz" \ + | tar xz mcp-publisher + ./mcp-publisher login github-oidc + ./mcp-publisher publish - name: Extract release notes from CHANGELOG id: notes run: | diff --git a/server.json b/server.json index 3a5fd56..5380823 100644 --- a/server.json +++ b/server.json @@ -2,7 +2,7 @@ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json", "name": "io.github.HuginnIndustries/codecartographer", "title": "CodeCartographer", - "description": "Evidence-backed reverse engineering and human-gated software planning for Pi and MCP coding agents.", + "description": "Turn an unfamiliar codebase into validated architecture, contracts, and a reimplementation spec.", "websiteUrl": "https://codecarto.dev/", "repository": { "url": "https://github.com/HuginnIndustries/CodeCartographer",