From 6f3b2cb4b5d9864a2bfed65dda1109d3d5e3ce1f Mon Sep 17 00:00:00 2001 From: ki7mt Date: Sat, 16 May 2026 22:05:49 +0000 Subject: [PATCH] =?UTF-8?q?Add=20MCP=20Registry=20sync=20pilot=20=E2=80=94?= =?UTF-8?q?=20workflow=20+=20drift-visible=20badges?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per Patton's 2026-05-16 review on the version-drift architecture: solar-mcp is the pilot repo for the registry-sync rollout. Once this ships and the next real solar-mcp release demonstrates the workflow end-to-end, the same pattern fans out to the other 12 MCP repos. Changes: - .github/workflows/publish.yml — appended 'registry-publish' job that runs after PyPI publish succeeds. Uses GitHub OIDC for auth (no PAT to manage). Bumps server.json in-memory to the tag version before invoking 'mcp-publisher publish'. - README.md — added PyPI + MCP Registry shields.io badges side-by-side for visible-drift transparency. Plus a one-liner explaining the forward-only sync model. - CHANGELOG.md — '[Unreleased]' section documenting the CI hygiene addition and the known drift on pre-0.2.1 versions. Forward-only sync (per Patton's Option C): existing Registry entries stay stale until each server's next real release naturally catches them up. No content-free version bumps for hygiene's sake — that would corrupt the version history permanently to fix a temporary problem. The badges make the staleness transparent rather than hidden. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/publish.yml | 39 +++++++++++++++++++++++++++++++++++ CHANGELOG.md | 25 ++++++++++++++++++++++ README.md | 5 +++++ 3 files changed, 69 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c147760..8011d7d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -68,3 +68,42 @@ jobs: - name: Publish to PyPI uses: pypa/gh-action-pypi-publish@release/v1 + + # --------------------------------------------------------------------------- + # Registry-publish — pushes server.json to the Official MCP Registry after + # PyPI publish succeeds, so discovery surfaces stay in sync with PyPI. + # Canonical template: https://github.com/qso-graph/.github/blob/main/TEMPLATES.md + # --------------------------------------------------------------------------- + registry-publish: + name: Publish to MCP Registry + needs: publish + runs-on: ubuntu-latest + permissions: + id-token: write # GitHub OIDC auth to the Registry + contents: read + steps: + - uses: actions/checkout@v5 + + - name: Install jq (server.json bump) + run: sudo apt-get update && sudo apt-get install -y jq + + - 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 + ./mcp-publisher --help > /dev/null + + - name: Bump server.json to tag version + run: | + TAG_VERSION="${GITHUB_REF_NAME#v}" + echo "Setting server.json to ${TAG_VERSION}" + jq --arg v "$TAG_VERSION" \ + '.version = $v | .packages[0].version = $v' \ + server.json > /tmp/server.json + mv /tmp/server.json server.json + cat server.json + + - name: Authenticate to MCP Registry (GitHub OIDC) + run: ./mcp-publisher login github-oidc + + - name: Publish to MCP Registry + run: ./mcp-publisher publish diff --git a/CHANGELOG.md b/CHANGELOG.md index b8feac8..5021e4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,31 @@ All notable changes to `solar-mcp` are documented here. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + +### Added (CI hygiene) + +- **MCP Registry sync** — `publish.yml` now publishes to the + [Official MCP Registry](https://registry.modelcontextprotocol.io) + after each PyPI publish, using GitHub OIDC for auth. Triggered on + `v*` tag push; no manual steps. Pattern documented in + [qso-graph/.github/TEMPLATES.md](https://github.com/qso-graph/.github/blob/main/TEMPLATES.md). +- **Registry version badge** in README — PyPI and Registry versions + visible side-by-side so any drift between publishing surfaces is + immediately apparent. + +### Known drift (will resolve on next tagged release) + +- Pre-`0.2.1` versions show as **stale** in the Official MCP Registry + (last sync was at v0.1.1). Forward-only sync model: the next real + release of solar-mcp catches the Registry up. We don't tag content- + free releases purely to sync. + +solar-mcp is the **pilot repo** for this rollout (per Patton's +2026-05-16 architecture review). Once the next solar-mcp release +demonstrates the workflow end-to-end, the same pattern fans out to +the other 12 qso-graph + IONIS-AI MCP repos. + ## [0.2.1] — 2026-05-15 ### Added diff --git a/README.md b/README.md index 06110c7..2874a32 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,15 @@ # solar-mcp +[![PyPI](https://img.shields.io/pypi/v/solar-mcp?label=PyPI&color=blue)](https://pypi.org/project/solar-mcp/) +[![MCP Registry](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fregistry.modelcontextprotocol.io%2Fv0%2Fservers%3Fsearch%3Dsolar-mcp&query=%24.servers%5B0%5D.server.version&label=MCP%20Registry&color=blue)](https://registry.modelcontextprotocol.io/v0/servers?search=solar-mcp) + MCP server for space weather and HF propagation conditions — live solar flux, Kp index, DSCOVR solar wind, X-ray flux, alerts, 27-day forecast, and band-by-band outlook through any MCP-compatible AI assistant. Part of the [qso-graph](https://qso-graph.io/) project. **No authentication required** — all data from [NOAA SWPC](https://www.swpc.noaa.gov/) public endpoints. +> **Version drift?** If the PyPI and MCP Registry badges show different versions, the Registry is catching up to the latest PyPI release on this server's next tag. Forward-only sync — we don't tag content-free releases just to sync. See [qso-graph/.github TEMPLATES.md](https://github.com/qso-graph/.github/blob/main/TEMPLATES.md) for the sync mechanism. + ## Install ```bash