diff --git a/.github/workflows/publish-mcp-registry.yml b/.github/workflows/publish-mcp-registry.yml new file mode 100644 index 0000000..1898980 --- /dev/null +++ b/.github/workflows/publish-mcp-registry.yml @@ -0,0 +1,79 @@ +name: Publish to MCP Registry + +on: + workflow_dispatch: + inputs: + version: + description: "Version to publish, matching pyproject.toml and server.json" + required: true + push: + tags: + - "v*.*.*" + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: false + +jobs: + publish: + runs-on: ubuntu-24.04 + permissions: + contents: read + id-token: write + steps: + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 + with: + persist-credentials: false + + - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 + with: + python-version: "3.11" + + - name: Verify registry metadata version + env: + REQUESTED_VERSION: ${{ github.event.inputs.version || '' }} + run: | + set -euo pipefail + python - <<'PY' + import json + import os + import tomllib + + with open("pyproject.toml", "rb") as handle: + project_version = tomllib.load(handle)["project"]["version"] + + with open("server.json", "r", encoding="utf-8") as handle: + server = json.load(handle) + + server_version = server["version"] + package_version = server["packages"][0]["version"] + requested_version = os.environ.get("REQUESTED_VERSION") or os.environ["GITHUB_REF_NAME"].removeprefix("v") + + versions = { + "requested": requested_version, + "pyproject.toml": project_version, + "server.json": server_version, + "server.json package": package_version, + } + print(versions) + if len(set(versions.values())) != 1: + raise SystemExit(f"Version mismatch: {versions}") + PY + + - name: Install mcp-publisher + run: | + set -euo pipefail + 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 + + - name: Validate server metadata + run: ./mcp-publisher validate server.json + + - name: Authenticate to MCP Registry + run: ./mcp-publisher login github-oidc + + - name: Publish server metadata + run: ./mcp-publisher publish server.json