From c04f40df28517b79e420735d3cb66a564d2d1421 Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Wed, 24 Sep 2025 15:44:03 +0100 Subject: [PATCH 01/30] Add publish script and formed server file --- .gitignore | 6 ++- script/publish-mcp-server | 84 +++++++++++++++++++++++++++++++++++++++ server.json | 72 +++++++++++++++++++++++++++++++++ 3 files changed, 161 insertions(+), 1 deletion(-) create mode 100644 script/publish-mcp-server create mode 100644 server.json diff --git a/.gitignore b/.gitignore index 9cf7e3821..2c302ce27 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,8 @@ bin/ .DS_Store # binary -github-mcp-server \ No newline at end of file +github-mcp-server + +# Registry credentials - Created on publish +.mcpregistry_github_token +.mcpregistry_registry_token \ No newline at end of file diff --git a/script/publish-mcp-server b/script/publish-mcp-server new file mode 100644 index 000000000..8936e0fa1 --- /dev/null +++ b/script/publish-mcp-server @@ -0,0 +1,84 @@ +#!/bin/bash + +# Publish MCP Server to Registry +# Usage: ./script/publish-mcp-server [--init] [--validate] [--dry-run] + +set -e + +# Options +INIT=false +## Always validate server.json and version +DRY_RUN=false + +for arg in "$@"; do + case $arg in + --init) + INIT=true + ;; + # --validate flag removed; validation always runs + --dry-run) + DRY_RUN=true + ;; + esac +done + +# Step 1: Ensure mcp-publisher is installed +if ! command -v mcp-publisher &> /dev/null; then + echo "mcp-publisher not found. Installing with Homebrew..." + if command -v brew &> /dev/null; then + brew install mcp-publisher + else + echo "Homebrew not found. Please install mcp-publisher manually:" + echo "curl -L \"https://github.com/modelcontextprotocol/registry/releases/download/v1.0.0/mcp-publisher_1.0.0_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz\" | tar xz mcp-publisher && sudo mv mcp-publisher /usr/local/bin/" + exit 1 + fi +fi + +# Step 2: Initialize server.json if requested +if [ "$INIT" = true ]; then + echo "Initializing server.json..." + mcp-publisher init +fi + +# Step 3: Authenticate (GitHub for io.github.*) +if ! mcp-publisher whoami &> /dev/null; then + echo "Authenticating with MCP registry (GitHub)..." + mcp-publisher login github +fi + +# Step 4: Validate server.json schema +echo "Validating server.json version against latest release tag..." +# Get latest release tag +LATEST_TAG=$(git tag --sort=-version:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+(-.*)?$' | head -n 1) +if [ -z "$LATEST_TAG" ]; then + echo "โŒ No release tag found. Cannot set version." + exit 1 +fi +TAG_VERSION=$(echo "$LATEST_TAG" | sed 's/^v//') +# Set server.json version and all package versions to latest tag +jq ".version = \"$TAG_VERSION\" | .packages[].version = \"$TAG_VERSION\"" server.json > server.json.tmp && mv server.json.tmp server.json +echo "Set server.json version and all package versions to $TAG_VERSION (from latest release tag $LATEST_TAG)." +# Show user and confirm +echo "Please confirm this is the correct version to publish: $TAG_VERSION (latest tag: $LATEST_TAG)" +read -p "Proceed with this version? (y/n) " -n 1 -r +echo +if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo "Publish cancelled by user." + exit 1 +fi +echo "โœ… Confirmed. Proceeding with publish." + +# Step 5: Publish +if [ "$DRY_RUN" = true ]; then + echo "DRY RUN: Skipping actual publish." +else + echo "Publishing MCP server..." + mcp-publisher publish +fi + +# Step 6: Verify publication +SERVER_NAME=$(jq -r .name server.json) +echo "Verifying server in registry..." +curl -s "https://registry.modelcontextprotocol.io/v0/servers?search=$SERVER_NAME" | jq + +echo "Done." diff --git a/server.json b/server.json new file mode 100644 index 000000000..8e2dcf4e2 --- /dev/null +++ b/server.json @@ -0,0 +1,72 @@ +{ + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", + "name": "io.github.github/github-mcp-server", + "description": "The GitHub MCP Server lets AI tools manage code, issues, PRs, and workflows via natural language.", + "status": "active", + "repository": { + "url": "ssh://git@github.com/github/github-mcp-server", + "source": "github" + }, + "version": "0.15.0", + "packages": [ + { + "registryType": "oci", + "registryBaseUrl": "https://docker.io", + "identifier": "ghcr.io/github/github-mcp-server", + "version": "0.15.0", + "runtimeHint": "docker", + "transport": { + "type": "stdio" + }, + "runtimeArguments": [ + { + "type": "positional", + "value": "run", + "description": "The runtime command to execute" + }, + { + "type": "named", + "name": "-i", + "description": "Run container in interactive mode" + }, + { + "type": "named", + "name": "--rm", + "description": "Automatically remove the container when it exits" + }, + { + "type": "named", + "name": "-e", + "description": "Set an environment variable in the runtime" + }, + { + "type": "positional", + "valueHint": "env_var_name", + "value": "GITHUB_PERSONAL_ACCESS_TOKEN", + "description": "Environment variable name" + }, + { + "type": "positional", + "valueHint": "image_name", + "value": "ghcr.io/github/github-mcp-server", + "description": "The container image to run" + } + ], + "environmentVariables": [ + { + "description": "Your GitHub personal access token with appropriate scopes.", + "isRequired": true, + "format": "string", + "isSecret": true, + "name": "GITHUB_PERSONAL_ACCESS_TOKEN" + } + ] + } + ], + "remotes": [ + { + "type": "streamable-http", + "url": "https://api.githubcopilot.com/mcp/" + } + ] +} From b632d564ae014d31d2d2716ac711a61b3c61550d Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Wed, 24 Sep 2025 17:02:11 +0100 Subject: [PATCH 02/30] Fix url and fix script --- script/publish-mcp-server | 70 ++++++++++++++++++++++----------------- server.json | 6 ++-- 2 files changed, 42 insertions(+), 34 deletions(-) diff --git a/script/publish-mcp-server b/script/publish-mcp-server index 8936e0fa1..12cd44cf8 100644 --- a/script/publish-mcp-server +++ b/script/publish-mcp-server @@ -1,13 +1,12 @@ #!/bin/bash # Publish MCP Server to Registry -# Usage: ./script/publish-mcp-server [--init] [--validate] [--dry-run] +# Usage: ./script/publish-mcp-server [--init] [--dry-run] set -e -# Options +# Parse command line options INIT=false -## Always validate server.json and version DRY_RUN=false for arg in "$@"; do @@ -15,70 +14,79 @@ for arg in "$@"; do --init) INIT=true ;; - # --validate flag removed; validation always runs --dry-run) DRY_RUN=true ;; esac done -# Step 1: Ensure mcp-publisher is installed +echo "๐Ÿš€ Publishing GitHub MCP Server to Registry" +echo "============================================" + +# Step 1: Ensure mcp-publisher CLI is installed +echo "๐Ÿ“ฆ Checking mcp-publisher installation..." if ! command -v mcp-publisher &> /dev/null; then - echo "mcp-publisher not found. Installing with Homebrew..." + echo "Installing mcp-publisher with Homebrew..." if command -v brew &> /dev/null; then brew install mcp-publisher else - echo "Homebrew not found. Please install mcp-publisher manually:" + echo "โŒ Homebrew not found. Please install mcp-publisher manually:" echo "curl -L \"https://github.com/modelcontextprotocol/registry/releases/download/v1.0.0/mcp-publisher_1.0.0_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz\" | tar xz mcp-publisher && sudo mv mcp-publisher /usr/local/bin/" exit 1 fi fi +echo "โœ… mcp-publisher is available" -# Step 2: Initialize server.json if requested -if [ "$INIT" = true ]; then - echo "Initializing server.json..." - mcp-publisher init -fi - -# Step 3: Authenticate (GitHub for io.github.*) +# Step 2: Authenticate with GitHub +echo "" +echo "๐Ÿ” Authenticating with MCP registry..." if ! mcp-publisher whoami &> /dev/null; then - echo "Authenticating with MCP registry (GitHub)..." mcp-publisher login github fi +echo "โœ… Authentication successful" -# Step 4: Validate server.json schema -echo "Validating server.json version against latest release tag..." -# Get latest release tag +# Step 3: Update version from latest git tag +echo "" +echo "๐Ÿท๏ธ Updating server.json version..." LATEST_TAG=$(git tag --sort=-version:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+(-.*)?$' | head -n 1) if [ -z "$LATEST_TAG" ]; then - echo "โŒ No release tag found. Cannot set version." + echo "โŒ No release tag found. Cannot determine version." exit 1 fi + TAG_VERSION=$(echo "$LATEST_TAG" | sed 's/^v//') -# Set server.json version and all package versions to latest tag jq ".version = \"$TAG_VERSION\" | .packages[].version = \"$TAG_VERSION\"" server.json > server.json.tmp && mv server.json.tmp server.json -echo "Set server.json version and all package versions to $TAG_VERSION (from latest release tag $LATEST_TAG)." -# Show user and confirm -echo "Please confirm this is the correct version to publish: $TAG_VERSION (latest tag: $LATEST_TAG)" -read -p "Proceed with this version? (y/n) " -n 1 -r + +echo "โœ… Updated server.json version to $TAG_VERSION (from git tag $LATEST_TAG)" + +# Step 4: User confirmation +echo "" +echo "๐Ÿ“‹ Version Summary:" +echo " Latest git tag: $LATEST_TAG" +echo " Server version: $TAG_VERSION" +echo "" +read -p "Proceed with publishing this version? (y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then - echo "Publish cancelled by user." + echo "โŒ Publish cancelled by user." exit 1 fi -echo "โœ… Confirmed. Proceeding with publish." -# Step 5: Publish +# Step 5: Publish to registry +echo "" if [ "$DRY_RUN" = true ]; then - echo "DRY RUN: Skipping actual publish." + echo "๐Ÿงช DRY RUN: Skipping actual publish step" else - echo "Publishing MCP server..." + echo "๐Ÿ“ค Publishing to MCP registry..." mcp-publisher publish + echo "โœ… Successfully published!" fi # Step 6: Verify publication +echo "" +echo "๐Ÿ” Verifying server in registry..." SERVER_NAME=$(jq -r .name server.json) -echo "Verifying server in registry..." curl -s "https://registry.modelcontextprotocol.io/v0/servers?search=$SERVER_NAME" | jq -echo "Done." +echo "" +echo "๐ŸŽ‰ Done!" diff --git a/server.json b/server.json index 8e2dcf4e2..fa2ecfa88 100644 --- a/server.json +++ b/server.json @@ -1,10 +1,10 @@ { "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", "name": "io.github.github/github-mcp-server", - "description": "The GitHub MCP Server lets AI tools manage code, issues, PRs, and workflows via natural language.", + "description": "Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.", "status": "active", "repository": { - "url": "ssh://git@github.com/github/github-mcp-server", + "url": "https://github.com/github/github-mcp-server", "source": "github" }, "version": "0.15.0", @@ -69,4 +69,4 @@ "url": "https://api.githubcopilot.com/mcp/" } ] -} +} \ No newline at end of file From 5802130fdac3052df63fab059affe20752851709 Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Wed, 24 Sep 2025 17:18:06 +0100 Subject: [PATCH 03/30] Set version to 0.0.0 initially --- server.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server.json b/server.json index fa2ecfa88..a5e6553ea 100644 --- a/server.json +++ b/server.json @@ -7,13 +7,13 @@ "url": "https://github.com/github/github-mcp-server", "source": "github" }, - "version": "0.15.0", + "version": "0.0.0", "packages": [ { "registryType": "oci", "registryBaseUrl": "https://docker.io", "identifier": "ghcr.io/github/github-mcp-server", - "version": "0.15.0", + "version": "0.0.0", "runtimeHint": "docker", "transport": { "type": "stdio" From dccbde3c6828c149acb2c8099badce712e973c6e Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Wed, 24 Sep 2025 17:20:22 +0100 Subject: [PATCH 04/30] remove uncessary script --- script/publish-mcp-server | 92 --------------------------------------- 1 file changed, 92 deletions(-) delete mode 100644 script/publish-mcp-server diff --git a/script/publish-mcp-server b/script/publish-mcp-server deleted file mode 100644 index 12cd44cf8..000000000 --- a/script/publish-mcp-server +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/bash - -# Publish MCP Server to Registry -# Usage: ./script/publish-mcp-server [--init] [--dry-run] - -set -e - -# Parse command line options -INIT=false -DRY_RUN=false - -for arg in "$@"; do - case $arg in - --init) - INIT=true - ;; - --dry-run) - DRY_RUN=true - ;; - esac -done - -echo "๐Ÿš€ Publishing GitHub MCP Server to Registry" -echo "============================================" - -# Step 1: Ensure mcp-publisher CLI is installed -echo "๐Ÿ“ฆ Checking mcp-publisher installation..." -if ! command -v mcp-publisher &> /dev/null; then - echo "Installing mcp-publisher with Homebrew..." - if command -v brew &> /dev/null; then - brew install mcp-publisher - else - echo "โŒ Homebrew not found. Please install mcp-publisher manually:" - echo "curl -L \"https://github.com/modelcontextprotocol/registry/releases/download/v1.0.0/mcp-publisher_1.0.0_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz\" | tar xz mcp-publisher && sudo mv mcp-publisher /usr/local/bin/" - exit 1 - fi -fi -echo "โœ… mcp-publisher is available" - -# Step 2: Authenticate with GitHub -echo "" -echo "๐Ÿ” Authenticating with MCP registry..." -if ! mcp-publisher whoami &> /dev/null; then - mcp-publisher login github -fi -echo "โœ… Authentication successful" - -# Step 3: Update version from latest git tag -echo "" -echo "๐Ÿท๏ธ Updating server.json version..." -LATEST_TAG=$(git tag --sort=-version:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+(-.*)?$' | head -n 1) -if [ -z "$LATEST_TAG" ]; then - echo "โŒ No release tag found. Cannot determine version." - exit 1 -fi - -TAG_VERSION=$(echo "$LATEST_TAG" | sed 's/^v//') -jq ".version = \"$TAG_VERSION\" | .packages[].version = \"$TAG_VERSION\"" server.json > server.json.tmp && mv server.json.tmp server.json - -echo "โœ… Updated server.json version to $TAG_VERSION (from git tag $LATEST_TAG)" - -# Step 4: User confirmation -echo "" -echo "๐Ÿ“‹ Version Summary:" -echo " Latest git tag: $LATEST_TAG" -echo " Server version: $TAG_VERSION" -echo "" -read -p "Proceed with publishing this version? (y/n) " -n 1 -r -echo -if [[ ! $REPLY =~ ^[Yy]$ ]]; then - echo "โŒ Publish cancelled by user." - exit 1 -fi - -# Step 5: Publish to registry -echo "" -if [ "$DRY_RUN" = true ]; then - echo "๐Ÿงช DRY RUN: Skipping actual publish step" -else - echo "๐Ÿ“ค Publishing to MCP registry..." - mcp-publisher publish - echo "โœ… Successfully published!" -fi - -# Step 6: Verify publication -echo "" -echo "๐Ÿ” Verifying server in registry..." -SERVER_NAME=$(jq -r .name server.json) -curl -s "https://registry.modelcontextprotocol.io/v0/servers?search=$SERVER_NAME" | jq - -echo "" -echo "๐ŸŽ‰ Done!" From c3c10cd719cd5b89129911c46772ee0dda6b0db9 Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Wed, 24 Sep 2025 17:21:56 +0100 Subject: [PATCH 05/30] remove unnecessary ignore --- .gitignore | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.gitignore b/.gitignore index 2c302ce27..37d70c48f 100644 --- a/.gitignore +++ b/.gitignore @@ -18,7 +18,3 @@ bin/ # binary github-mcp-server - -# Registry credentials - Created on publish -.mcpregistry_github_token -.mcpregistry_registry_token \ No newline at end of file From e6bc1d70280c23e34c2bca5c8071e4a4f389621f Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Wed, 24 Sep 2025 17:23:55 +0100 Subject: [PATCH 06/30] Remove whitespace --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 37d70c48f..9cf7e3821 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,4 @@ bin/ .DS_Store # binary -github-mcp-server +github-mcp-server \ No newline at end of file From 22740ce369b36eae9001ad7c859ea23e392e943e Mon Sep 17 00:00:00 2001 From: Babbage <42345137+MattBabbage@users.noreply.github.com> Date: Wed, 24 Sep 2025 17:24:30 +0100 Subject: [PATCH 07/30] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- server.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.json b/server.json index a5e6553ea..927650596 100644 --- a/server.json +++ b/server.json @@ -11,7 +11,7 @@ "packages": [ { "registryType": "oci", - "registryBaseUrl": "https://docker.io", + "registryBaseUrl": "https://ghcr.io", "identifier": "ghcr.io/github/github-mcp-server", "version": "0.0.0", "runtimeHint": "docker", From 94a4937b8c69b37c8b362049ab0f5a32bdb884f4 Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Wed, 24 Sep 2025 18:01:43 +0100 Subject: [PATCH 08/30] Add registry publisher workflow --- .github/workflows/registry-releaser.yml | 49 +++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 .github/workflows/registry-releaser.yml diff --git a/.github/workflows/registry-releaser.yml b/.github/workflows/registry-releaser.yml new file mode 100644 index 000000000..0c02f151d --- /dev/null +++ b/.github/workflows/registry-releaser.yml @@ -0,0 +1,49 @@ +name: Publish to MCP Registry + +on: + push: + tags: ["v*"] # Triggers on version tags like v1.0.0 + workflow_dispatch: # Allow manual triggering + +jobs: + publish: + runs-on: ubuntu-latest + permissions: + id-token: write # Required for OIDC authentication + contents: read + + steps: + - name: Checkout code + uses: actions/checkout@v5 + + - name: Install jq + run: sudo apt-get update && sudo apt-get install -y jq + + - name: Install MCP Publisher + run: | + curl -L "https://github.com/modelcontextprotocol/registry/releases/download/v1.0.0/mcp-publisher_1.0.0_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher + + - name: Update server.json version + run: | + if [[ "${{ github.ref_type }}" == "tag" ]]; then + # Use the tag that triggered the workflow + TAG_VERSION=$(echo "${{ github.ref_name }}" | sed 's/^v//') + echo "Using triggered tag: ${{ github.ref_name }}" + else + # Fallback to latest tag (for manual triggers) + LATEST_TAG=$(git tag --sort=-version:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+(-.*)?$' | head -n 1) + if [ -z "$LATEST_TAG" ]; then + echo "โŒ No release tag found. Cannot determine version." + exit 1 + fi + TAG_VERSION=$(echo "$LATEST_TAG" | sed 's/^v//') + echo "Using latest tag: $LATEST_TAG" + fi + jq ".version = \"$TAG_VERSION\" | .packages[].version = \"$TAG_VERSION\"" server.json > server.json.tmp && mv server.json.tmp server.json + echo "Updated server.json version to $TAG_VERSION" + + - name: Login to MCP Registry + run: ./mcp-publisher login github-oidc + + - name: Publish to MCP Registry + run: ./mcp-publisher publish \ No newline at end of file From 1ce328113121638f37bb118680c48c5b23c2c67d Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Thu, 25 Sep 2025 09:09:00 +0100 Subject: [PATCH 09/30] Fetch tags in registry release workflow --- .github/workflows/registry-releaser.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/registry-releaser.yml b/.github/workflows/registry-releaser.yml index 0c02f151d..47c435cea 100644 --- a/.github/workflows/registry-releaser.yml +++ b/.github/workflows/registry-releaser.yml @@ -16,6 +16,9 @@ jobs: - name: Checkout code uses: actions/checkout@v5 + - name: Fetch tags + run: git fetch --tags + - name: Install jq run: sudo apt-get update && sudo apt-get install -y jq From 842fc6fb73a33ed25b648f465d80c9c6a467221f Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Thu, 25 Sep 2025 09:17:26 +0100 Subject: [PATCH 10/30] Update registry workflow and server.json with VERSION placeholder --- .github/workflows/registry-releaser.yml | 5 +---- server.json | 4 ++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/registry-releaser.yml b/.github/workflows/registry-releaser.yml index 47c435cea..e41d96bea 100644 --- a/.github/workflows/registry-releaser.yml +++ b/.github/workflows/registry-releaser.yml @@ -19,9 +19,6 @@ jobs: - name: Fetch tags run: git fetch --tags - - name: Install jq - run: sudo apt-get update && sudo apt-get install -y jq - - name: Install MCP Publisher run: | curl -L "https://github.com/modelcontextprotocol/registry/releases/download/v1.0.0/mcp-publisher_1.0.0_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher @@ -42,7 +39,7 @@ jobs: TAG_VERSION=$(echo "$LATEST_TAG" | sed 's/^v//') echo "Using latest tag: $LATEST_TAG" fi - jq ".version = \"$TAG_VERSION\" | .packages[].version = \"$TAG_VERSION\"" server.json > server.json.tmp && mv server.json.tmp server.json + sed -i "s/\${VERSION}/$TAG_VERSION/g" server.json echo "Updated server.json version to $TAG_VERSION" - name: Login to MCP Registry diff --git a/server.json b/server.json index 927650596..2ba4d3a81 100644 --- a/server.json +++ b/server.json @@ -7,13 +7,13 @@ "url": "https://github.com/github/github-mcp-server", "source": "github" }, - "version": "0.0.0", + "version": "${VERSION}", "packages": [ { "registryType": "oci", "registryBaseUrl": "https://ghcr.io", "identifier": "ghcr.io/github/github-mcp-server", - "version": "0.0.0", + "version": "${VERSION}", "runtimeHint": "docker", "transport": { "type": "stdio" From 0f6993ca9221a7456600685b55dd8830bbb729d1 Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Thu, 25 Sep 2025 10:06:03 +0100 Subject: [PATCH 11/30] Add print for final version of server --- .github/workflows/registry-releaser.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/registry-releaser.yml b/.github/workflows/registry-releaser.yml index e41d96bea..79b64eef2 100644 --- a/.github/workflows/registry-releaser.yml +++ b/.github/workflows/registry-releaser.yml @@ -42,6 +42,11 @@ jobs: sed -i "s/\${VERSION}/$TAG_VERSION/g" server.json echo "Updated server.json version to $TAG_VERSION" + - name: Display updated server.json + run: | + echo "Final server.json contents:" + cat server.json + - name: Login to MCP Registry run: ./mcp-publisher login github-oidc From 759c59e041e9ee68e0a2f0b7b4546c7eea8959ab Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Thu, 25 Sep 2025 14:19:18 +0100 Subject: [PATCH 12/30] Adding debugging --- .github/workflows/registry-releaser.yml | 12 ++++++++++-- server.json | 1 - 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/registry-releaser.yml b/.github/workflows/registry-releaser.yml index 79b64eef2..c256a91d1 100644 --- a/.github/workflows/registry-releaser.yml +++ b/.github/workflows/registry-releaser.yml @@ -46,9 +46,17 @@ jobs: run: | echo "Final server.json contents:" cat server.json + echo "" + echo "JSON validation check:" + python3 -m json.tool server.json > /dev/null && echo "โœ… Valid JSON" || echo "โŒ Invalid JSON" - name: Login to MCP Registry run: ./mcp-publisher login github-oidc - - name: Publish to MCP Registry - run: ./mcp-publisher publish \ No newline at end of file + - name: Publish to MCP Registry (with verbose output) + run: | + echo "Publishing with verbose output..." + ./mcp-publisher publish --verbose || true + echo "" + echo "Checking if mcp-publisher has other flags..." + ./mcp-publisher publish --help || true \ No newline at end of file diff --git a/server.json b/server.json index 2ba4d3a81..92a2a53c8 100644 --- a/server.json +++ b/server.json @@ -14,7 +14,6 @@ "registryBaseUrl": "https://ghcr.io", "identifier": "ghcr.io/github/github-mcp-server", "version": "${VERSION}", - "runtimeHint": "docker", "transport": { "type": "stdio" }, From 833ed2b91256cd973c5c08be59076b2b6460af9e Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Thu, 25 Sep 2025 14:24:03 +0100 Subject: [PATCH 13/30] Move to snake_case to test bug --- server.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/server.json b/server.json index 92a2a53c8..f86c7b6fe 100644 --- a/server.json +++ b/server.json @@ -10,14 +10,14 @@ "version": "${VERSION}", "packages": [ { - "registryType": "oci", - "registryBaseUrl": "https://ghcr.io", + "registry_type": "oci", + "registry_base_url": "https://ghcr.io", "identifier": "ghcr.io/github/github-mcp-server", "version": "${VERSION}", "transport": { "type": "stdio" }, - "runtimeArguments": [ + "runtime_arguments": [ { "type": "positional", "value": "run", @@ -40,23 +40,23 @@ }, { "type": "positional", - "valueHint": "env_var_name", + "value_hint": "env_var_name", "value": "GITHUB_PERSONAL_ACCESS_TOKEN", "description": "Environment variable name" }, { "type": "positional", - "valueHint": "image_name", + "value_hint": "image_name", "value": "ghcr.io/github/github-mcp-server", "description": "The container image to run" } ], - "environmentVariables": [ + "environment_variables": [ { "description": "Your GitHub personal access token with appropriate scopes.", - "isRequired": true, + "is_required": true, "format": "string", - "isSecret": true, + "is_secret": true, "name": "GITHUB_PERSONAL_ACCESS_TOKEN" } ] From d75cb2c5beab5fea15c3a0948387c22f6efbd0d7 Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Thu, 25 Sep 2025 14:29:21 +0100 Subject: [PATCH 14/30] Adding Both Cases --- server.json | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/server.json b/server.json index f86c7b6fe..a2d7f355a 100644 --- a/server.json +++ b/server.json @@ -1,5 +1,5 @@ { - "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", + "$schema": "https://static.modelcontextprotocol.io/schemas/2024-11-05/server.schema.json", "name": "io.github.github/github-mcp-server", "description": "Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.", "status": "active", @@ -10,14 +10,15 @@ "version": "${VERSION}", "packages": [ { + "registryType": "oci", "registry_type": "oci", - "registry_base_url": "https://ghcr.io", + "registryBaseUrl": "https://ghcr.io", "identifier": "ghcr.io/github/github-mcp-server", "version": "${VERSION}", "transport": { "type": "stdio" }, - "runtime_arguments": [ + "runtimeArguments": [ { "type": "positional", "value": "run", @@ -40,23 +41,23 @@ }, { "type": "positional", - "value_hint": "env_var_name", + "valueHint": "env_var_name", "value": "GITHUB_PERSONAL_ACCESS_TOKEN", "description": "Environment variable name" }, { "type": "positional", - "value_hint": "image_name", + "valueHint": "image_name", "value": "ghcr.io/github/github-mcp-server", "description": "The container image to run" } ], - "environment_variables": [ + "environmentVariables": [ { "description": "Your GitHub personal access token with appropriate scopes.", - "is_required": true, + "isRequired": true, "format": "string", - "is_secret": true, + "isSecret": true, "name": "GITHUB_PERSONAL_ACCESS_TOKEN" } ] From 7d11436518e387dfa032f2680cdcabb3d5019b7b Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Thu, 25 Sep 2025 14:31:58 +0100 Subject: [PATCH 15/30] Remote only publishing --- server.json | 55 ----------------------------------------------------- 1 file changed, 55 deletions(-) diff --git a/server.json b/server.json index a2d7f355a..bc3ebc429 100644 --- a/server.json +++ b/server.json @@ -8,61 +8,6 @@ "source": "github" }, "version": "${VERSION}", - "packages": [ - { - "registryType": "oci", - "registry_type": "oci", - "registryBaseUrl": "https://ghcr.io", - "identifier": "ghcr.io/github/github-mcp-server", - "version": "${VERSION}", - "transport": { - "type": "stdio" - }, - "runtimeArguments": [ - { - "type": "positional", - "value": "run", - "description": "The runtime command to execute" - }, - { - "type": "named", - "name": "-i", - "description": "Run container in interactive mode" - }, - { - "type": "named", - "name": "--rm", - "description": "Automatically remove the container when it exits" - }, - { - "type": "named", - "name": "-e", - "description": "Set an environment variable in the runtime" - }, - { - "type": "positional", - "valueHint": "env_var_name", - "value": "GITHUB_PERSONAL_ACCESS_TOKEN", - "description": "Environment variable name" - }, - { - "type": "positional", - "valueHint": "image_name", - "value": "ghcr.io/github/github-mcp-server", - "description": "The container image to run" - } - ], - "environmentVariables": [ - { - "description": "Your GitHub personal access token with appropriate scopes.", - "isRequired": true, - "format": "string", - "isSecret": true, - "name": "GITHUB_PERSONAL_ACCESS_TOKEN" - } - ] - } - ], "remotes": [ { "type": "streamable-http", From 5010b7d0487a154ad97e1c15cab795f99e61507f Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Thu, 25 Sep 2025 14:40:06 +0100 Subject: [PATCH 16/30] Edit namespace --- server.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.json b/server.json index bc3ebc429..234a1a7b5 100644 --- a/server.json +++ b/server.json @@ -1,6 +1,6 @@ { "$schema": "https://static.modelcontextprotocol.io/schemas/2024-11-05/server.schema.json", - "name": "io.github.github/github-mcp-server", + "name": "com.github/github-mcp-server", "description": "Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.", "status": "active", "repository": { From 2574feaabca9a809f51d2f9ff2f782f021e86d73 Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Thu, 25 Sep 2025 14:49:33 +0100 Subject: [PATCH 17/30] Edit namespace --- server.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.json b/server.json index 234a1a7b5..e596bb509 100644 --- a/server.json +++ b/server.json @@ -1,6 +1,6 @@ { "$schema": "https://static.modelcontextprotocol.io/schemas/2024-11-05/server.schema.json", - "name": "com.github/github-mcp-server", + "name": "com.githubcopilot.api/github-mcp-server", "description": "Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.", "status": "active", "repository": { From b5df36d59bb60600d3d542de627d921829263cd8 Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Thu, 25 Sep 2025 15:06:59 +0100 Subject: [PATCH 18/30] Change name to github/github-mcp-server --- server.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.json b/server.json index e596bb509..3177ce4dc 100644 --- a/server.json +++ b/server.json @@ -1,6 +1,6 @@ { "$schema": "https://static.modelcontextprotocol.io/schemas/2024-11-05/server.schema.json", - "name": "com.githubcopilot.api/github-mcp-server", + "name": "github/github-mcp-server", "description": "Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.", "status": "active", "repository": { From c742cc46b9b38be0f37f3c7e748e0ffdcafc44c3 Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Thu, 25 Sep 2025 15:38:59 +0100 Subject: [PATCH 19/30] Remote remote server --- server.json | 56 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/server.json b/server.json index 3177ce4dc..dc14675e7 100644 --- a/server.json +++ b/server.json @@ -1,6 +1,6 @@ { "$schema": "https://static.modelcontextprotocol.io/schemas/2024-11-05/server.schema.json", - "name": "github/github-mcp-server", + "name": "io.github.github/github-mcp-server", "description": "Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.", "status": "active", "repository": { @@ -8,10 +8,58 @@ "source": "github" }, "version": "${VERSION}", - "remotes": [ + "packages": [ { - "type": "streamable-http", - "url": "https://api.githubcopilot.com/mcp/" + "registryType": "oci", + "registryBaseUrl": "https://ghcr.io", + "identifier": "ghcr.io/github/github-mcp-server", + "version": "${VERSION}", + "transport": { + "type": "stdio" + }, + "runtimeArguments": [ + { + "type": "positional", + "value": "run", + "description": "The runtime command to execute" + }, + { + "type": "named", + "name": "-i", + "description": "Run container in interactive mode" + }, + { + "type": "named", + "name": "--rm", + "description": "Automatically remove the container when it exits" + }, + { + "type": "named", + "name": "-e", + "description": "Set an environment variable in the runtime" + }, + { + "type": "positional", + "valueHint": "env_var_name", + "value": "GITHUB_PERSONAL_ACCESS_TOKEN", + "description": "Environment variable name" + }, + { + "type": "positional", + "valueHint": "image_name", + "value": "ghcr.io/github/github-mcp-server", + "description": "The container image to run" + } + ], + "environmentVariables": [ + { + "description": "Your GitHub personal access token with appropriate scopes.", + "isRequired": true, + "format": "string", + "isSecret": true, + "name": "GITHUB_PERSONAL_ACCESS_TOKEN" + } + ] } ] } \ No newline at end of file From 551a6bd55672c01e473d0132767100052998fa7e Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Thu, 25 Sep 2025 15:50:26 +0100 Subject: [PATCH 20/30] Update version and add specific file call --- .github/workflows/registry-releaser.yml | 2 +- server.json | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/registry-releaser.yml b/.github/workflows/registry-releaser.yml index c256a91d1..a208599d6 100644 --- a/.github/workflows/registry-releaser.yml +++ b/.github/workflows/registry-releaser.yml @@ -56,7 +56,7 @@ jobs: - name: Publish to MCP Registry (with verbose output) run: | echo "Publishing with verbose output..." - ./mcp-publisher publish --verbose || true + ./mcp-publisher publish --file server.json --verbose || true echo "" echo "Checking if mcp-publisher has other flags..." ./mcp-publisher publish --help || true \ No newline at end of file diff --git a/server.json b/server.json index dc14675e7..92a2a53c8 100644 --- a/server.json +++ b/server.json @@ -1,5 +1,5 @@ { - "$schema": "https://static.modelcontextprotocol.io/schemas/2024-11-05/server.schema.json", + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", "name": "io.github.github/github-mcp-server", "description": "Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.", "status": "active", @@ -61,5 +61,11 @@ } ] } + ], + "remotes": [ + { + "type": "streamable-http", + "url": "https://api.githubcopilot.com/mcp/" + } ] } \ No newline at end of file From a8c47b83a065bafed753e8e0aeb1e23ce61a6bea Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Thu, 25 Sep 2025 17:10:40 +0100 Subject: [PATCH 21/30] Include setup step --- .github/workflows/registry-releaser.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/registry-releaser.yml b/.github/workflows/registry-releaser.yml index a208599d6..95a32dd45 100644 --- a/.github/workflows/registry-releaser.yml +++ b/.github/workflows/registry-releaser.yml @@ -16,6 +16,11 @@ jobs: - name: Checkout code uses: actions/checkout@v5 + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: "stable" + - name: Fetch tags run: git fetch --tags From e3e46804f362653b6de0a4b28cc288dd59cdf0e1 Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Thu, 25 Sep 2025 17:20:12 +0100 Subject: [PATCH 22/30] Build publisher from source --- .github/workflows/registry-releaser.yml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/.github/workflows/registry-releaser.yml b/.github/workflows/registry-releaser.yml index 95a32dd45..911b2923c 100644 --- a/.github/workflows/registry-releaser.yml +++ b/.github/workflows/registry-releaser.yml @@ -26,7 +26,13 @@ jobs: - name: Install MCP Publisher run: | - curl -L "https://github.com/modelcontextprotocol/registry/releases/download/v1.0.0/mcp-publisher_1.0.0_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher + # Build publisher from source (requires Go) + git clone https://github.com/modelcontextprotocol/registry publisher-repo + cd publisher-repo + make publisher + cp bin/mcp-publisher ../mcp-publisher + cd .. + chmod +x mcp-publisher - name: Update server.json version run: | @@ -55,13 +61,8 @@ jobs: echo "JSON validation check:" python3 -m json.tool server.json > /dev/null && echo "โœ… Valid JSON" || echo "โŒ Invalid JSON" - - name: Login to MCP Registry + - name: Login to MCP Registry (OIDC) run: ./mcp-publisher login github-oidc - - name: Publish to MCP Registry (with verbose output) - run: | - echo "Publishing with verbose output..." - ./mcp-publisher publish --file server.json --verbose || true - echo "" - echo "Checking if mcp-publisher has other flags..." - ./mcp-publisher publish --help || true \ No newline at end of file + - name: Publish to MCP Registry + run: ./mcp-publisher publish \ No newline at end of file From 935ea0efc5ccbac729cf12972697b7c3b9939d8d Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Thu, 25 Sep 2025 17:21:31 +0100 Subject: [PATCH 23/30] Remove remote repo reference --- server.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/server.json b/server.json index 92a2a53c8..2a5bb5635 100644 --- a/server.json +++ b/server.json @@ -61,11 +61,5 @@ } ] } - ], - "remotes": [ - { - "type": "streamable-http", - "url": "https://api.githubcopilot.com/mcp/" - } ] } \ No newline at end of file From b38db66bac93fa303bc777eb55dd2386250c71e3 Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Thu, 25 Sep 2025 17:27:28 +0100 Subject: [PATCH 24/30] Edit identifier --- server.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.json b/server.json index 2a5bb5635..87ad34680 100644 --- a/server.json +++ b/server.json @@ -12,7 +12,7 @@ { "registryType": "oci", "registryBaseUrl": "https://ghcr.io", - "identifier": "ghcr.io/github/github-mcp-server", + "identifier": "github/github-mcp-server", "version": "${VERSION}", "transport": { "type": "stdio" From dac1a25424d5b91b2bbfc3f12a38ce8d503a483a Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Fri, 26 Sep 2025 10:19:05 +0100 Subject: [PATCH 25/30] Add dockerfile label and clean script --- .github/workflows/registry-releaser.yml | 29 ++++++------------------- Dockerfile | 4 ++++ 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/.github/workflows/registry-releaser.yml b/.github/workflows/registry-releaser.yml index 911b2923c..45c8d961c 100644 --- a/.github/workflows/registry-releaser.yml +++ b/.github/workflows/registry-releaser.yml @@ -26,40 +26,25 @@ jobs: - name: Install MCP Publisher run: | - # Build publisher from source (requires Go) - git clone https://github.com/modelcontextprotocol/registry publisher-repo - cd publisher-repo - make publisher - cp bin/mcp-publisher ../mcp-publisher - cd .. - chmod +x mcp-publisher + git clone --quiet https://github.com/modelcontextprotocol/registry publisher-repo + cd publisher-repo && make publisher > /dev/null && cd .. + cp publisher-repo/bin/mcp-publisher . && chmod +x mcp-publisher - name: Update server.json version run: | if [[ "${{ github.ref_type }}" == "tag" ]]; then - # Use the tag that triggered the workflow TAG_VERSION=$(echo "${{ github.ref_name }}" | sed 's/^v//') - echo "Using triggered tag: ${{ github.ref_name }}" else - # Fallback to latest tag (for manual triggers) LATEST_TAG=$(git tag --sort=-version:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+(-.*)?$' | head -n 1) - if [ -z "$LATEST_TAG" ]; then - echo "โŒ No release tag found. Cannot determine version." - exit 1 - fi + [ -z "$LATEST_TAG" ] && { echo "No release tag found"; exit 1; } TAG_VERSION=$(echo "$LATEST_TAG" | sed 's/^v//') - echo "Using latest tag: $LATEST_TAG" fi sed -i "s/\${VERSION}/$TAG_VERSION/g" server.json - echo "Updated server.json version to $TAG_VERSION" + echo "Version: $TAG_VERSION" - - name: Display updated server.json + - name: Validate configuration run: | - echo "Final server.json contents:" - cat server.json - echo "" - echo "JSON validation check:" - python3 -m json.tool server.json > /dev/null && echo "โœ… Valid JSON" || echo "โŒ Invalid JSON" + python3 -m json.tool server.json > /dev/null && echo "Configuration valid" || exit 1 - name: Login to MCP Registry (OIDC) run: ./mcp-publisher login github-oidc diff --git a/Dockerfile b/Dockerfile index b6b0b6ea1..9d865cb21 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,6 +18,10 @@ RUN --mount=type=cache,target=/go/pkg/mod \ # Make a stage to run the app FROM gcr.io/distroless/base-debian12 + +# Add required MCP server annotation +LABEL io.modelcontextprotocol.server.name="io.github.github/github-mcp-server" + # Set the working directory WORKDIR /server # Copy the binary from the build stage From ce66ae8029f8d0efcf69930a322f1b31024b52f3 Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Fri, 26 Sep 2025 11:06:04 +0100 Subject: [PATCH 26/30] Log latest tag if used --- .github/workflows/registry-releaser.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/registry-releaser.yml b/.github/workflows/registry-releaser.yml index 45c8d961c..fe4581b26 100644 --- a/.github/workflows/registry-releaser.yml +++ b/.github/workflows/registry-releaser.yml @@ -38,6 +38,7 @@ jobs: LATEST_TAG=$(git tag --sort=-version:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+(-.*)?$' | head -n 1) [ -z "$LATEST_TAG" ] && { echo "No release tag found"; exit 1; } TAG_VERSION=$(echo "$LATEST_TAG" | sed 's/^v//') + echo "Using latest tag: $LATEST_TAG" fi sed -i "s/\${VERSION}/$TAG_VERSION/g" server.json echo "Version: $TAG_VERSION" From 3346d97d6243557c24bcf97f883ca7df1118d758 Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Mon, 29 Sep 2025 10:13:43 +0100 Subject: [PATCH 27/30] declobbering tags --- .github/workflows/registry-releaser.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/registry-releaser.yml b/.github/workflows/registry-releaser.yml index fe4581b26..05e07e46f 100644 --- a/.github/workflows/registry-releaser.yml +++ b/.github/workflows/registry-releaser.yml @@ -22,7 +22,12 @@ jobs: go-version: "stable" - name: Fetch tags - run: git fetch --tags + run: | + if [[ "${{ github.ref_type }}" != "tag" ]]; then + git fetch --tags + else + echo "Skipping tag fetch - already on tag ${{ github.ref_name }}" + fi - name: Install MCP Publisher run: | @@ -47,6 +52,11 @@ jobs: run: | python3 -m json.tool server.json > /dev/null && echo "Configuration valid" || exit 1 + - name: Display final server.json + run: | + echo "Final server.json contents:" + cat server.json + - name: Login to MCP Registry (OIDC) run: ./mcp-publisher login github-oidc From f6ea14068a8f9eaa864dc7e5f55e995f9f516f8b Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Tue, 30 Sep 2025 15:41:25 +0100 Subject: [PATCH 28/30] Change server schema --- server.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.json b/server.json index 87ad34680..259ae4bb7 100644 --- a/server.json +++ b/server.json @@ -1,5 +1,5 @@ { - "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-16/server.schema.json", + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json", "name": "io.github.github/github-mcp-server", "description": "Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.", "status": "active", From 65564fba78d53969a0e5bff7a2634ff8faf98238 Mon Sep 17 00:00:00 2001 From: MattBabbbage Date: Fri, 3 Oct 2025 11:20:36 +0100 Subject: [PATCH 29/30] Add Docker image readiness check with timeout in workflow --- .github/workflows/registry-releaser.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/registry-releaser.yml b/.github/workflows/registry-releaser.yml index 05e07e46f..d23d4f04f 100644 --- a/.github/workflows/registry-releaser.yml +++ b/.github/workflows/registry-releaser.yml @@ -29,6 +29,25 @@ jobs: echo "Skipping tag fetch - already on tag ${{ github.ref_name }}" fi + - name: Wait for Docker image + run: | + if [[ "${{ github.ref_type }}" == "tag" ]]; then + TAG="${{ github.ref_name }}" + else + TAG=$(git tag --sort=-version:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+' | head -n1) + fi + IMAGE="ghcr.io/github/github-mcp-server:$TAG" + + for i in {1..6}; do + if docker manifest inspect "$IMAGE" &>/dev/null; then + echo "โœ… Docker image ready: $TAG" + break + fi + [ $i -eq 6 ] && { echo "โŒ Timeout waiting for $TAG after 3 minutes"; exit 1; } + echo "โณ Waiting for Docker image ($i/6)..." + sleep 30 + done + - name: Install MCP Publisher run: | git clone --quiet https://github.com/modelcontextprotocol/registry publisher-repo From fda4c7b3949f92a0a3efe42d9481ea4531421e04 Mon Sep 17 00:00:00 2001 From: Babbage <42345137+MattBabbage@users.noreply.github.com> Date: Fri, 3 Oct 2025 11:28:34 +0100 Subject: [PATCH 30/30] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/registry-releaser.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/registry-releaser.yml b/.github/workflows/registry-releaser.yml index 4f8e810bc..55d1eceb5 100644 --- a/.github/workflows/registry-releaser.yml +++ b/.github/workflows/registry-releaser.yml @@ -60,7 +60,7 @@ jobs: TAG_VERSION=$(echo "${{ github.ref_name }}" | sed 's/^v//') else LATEST_TAG=$(git tag --sort=-version:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+(-.*)?$' | head -n 1) - [ -z "$LATEST_TAG" ] && { echo "No release tag found"; exit 1; } + [ -z "$LATEST_TAG" ] && { echo "No release tag found. Cannot determine version."; exit 1; } TAG_VERSION=$(echo "$LATEST_TAG" | sed 's/^v//') echo "Using latest tag: $LATEST_TAG" fi