diff --git a/.github/workflows/publish-mcp.yml b/.github/workflows/publish-mcp.yml new file mode 100644 index 0000000..d524de6 --- /dev/null +++ b/.github/workflows/publish-mcp.yml @@ -0,0 +1,81 @@ +name: Publish MCP registry metadata + +on: + push: + tags: ["v*"] + workflow_dispatch: + inputs: + version: + description: Version to publish (without a leading v) + required: true + type: string + +permissions: + contents: read + id-token: write + +jobs: + publish: + name: Publish to MCP Registry + runs-on: ubuntu-latest + environment: release + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + + - name: Verify release metadata + env: + INPUT_VERSION: ${{ github.event.inputs.version }} + run: | + set -euo pipefail + if [ -n "$INPUT_VERSION" ]; then + version="$INPUT_VERSION" + else + version="${GITHUB_REF_NAME#v}" + fi + server_version="$(node -p "require('./server.json').version")" + package_version="$(node -p "require('./server.json').packages[0].version")" + package_identifier="$(node -p "require('./server.json').packages[0].identifier")" + npm_name="$(node -p "require('./npm/droidsight/package.json').name")" + npm_version="$(node -p "require('./npm/droidsight/package.json').version")" + server_name="$(node -p "require('./server.json').name")" + package_mcp_name="$(node -p "require('./npm/droidsight/package.json').mcpName")" + for pair in \ + "server.json:$server_version" \ + "server.json packages[0]:$package_version" \ + "npm/droidsight/package.json:$npm_version"; do + name="${pair%%:*}" + actual="${pair#*:}" + if [ "$actual" != "$version" ]; then + echo "::error::$name is $actual, expected $version" >&2 + exit 1 + fi + done + if [ "$package_identifier" != "$npm_name" ]; then + echo "::error::server.json package is $package_identifier, expected $npm_name" >&2 + exit 1 + fi + if [ "$package_mcp_name" != "$server_name" ]; then + echo "::error::npm mcpName is $package_mcp_name, expected $server_name" >&2 + exit 1 + fi + + - name: Install mcp-publisher 1.8.1 + shell: bash + env: + PUBLISHER_SHA256: 399ad0d6e00a50812b563a71d8bfbff5160c085e6b13aac6ec083d98d5ff7c45 + run: | + set -euo pipefail + archive="$RUNNER_TEMP/mcp-publisher.tar.gz" + curl --fail --location --retry 3 \ + --output "$archive" \ + "https://github.com/modelcontextprotocol/registry/releases/download/v1.8.1/mcp-publisher_linux_amd64.tar.gz" + printf '%s %s\n' "$PUBLISHER_SHA256" "$archive" | sha256sum --check - + tar -xzf "$archive" -C "$RUNNER_TEMP" mcp-publisher + chmod 755 "$RUNNER_TEMP/mcp-publisher" + "$RUNNER_TEMP/mcp-publisher" --version + + - name: Authenticate to MCP Registry + run: "$RUNNER_TEMP/mcp-publisher login github-oidc" + + - name: Publish server metadata + run: "$RUNNER_TEMP/mcp-publisher publish server.json"