11name : Publish to MCP Registry
22
3- on :
4- workflow_dispatch : # Manually publishing, since we have to update hardcoded version in server.json (mcp registry)
3+ on : # Every new version release of `vet`
4+ push :
5+ tags :
6+ - ' v*'
57
68jobs :
79 publish :
@@ -11,11 +13,19 @@ jobs:
1113 contents : read
1214
1315 steps :
16+ - name : Ensure jq is installed
17+ run : sudo apt-get update && sudo apt-get install -y jq
18+
1419 - name : Checkout code
15- uses : actions/checkout@v5
20+ uses : actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6
21+
22+ - name : Get version from tag
23+ run : echo "VET_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
1624
17- # ## Publish MCP server:
25+ - name : fill version in server.json
26+ run : sed -i "s/VERSION_FROM_ENV/$VET_VERSION/g" server.json
1827
28+ # publish mcp server
1929 - name : Install mcp-publisher
2030 run : |
2131 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
2636 - name : Publish server to MCP Registry
2737 run : ./mcp-publisher publish
2838
39+ verify-publish :
40+ runs-on : ubuntu-latest
41+ needs : publish
42+
43+ steps :
44+ - name : Ensure jq is installed
45+ run : sudo apt-get update && sudo apt-get install -y jq
46+
47+ - name : Get version from tag
48+ run : echo "VET_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
49+
50+ - name : Query MCP Registry and verify server is published
51+ env :
52+ SERVER_NAME : " io.github.safedep/vet-mcp"
53+ EXPECTED_VERSION : $VET_VERSION
54+ REGISTRY_URL : " https://registry.modelcontextprotocol.io/v0.1/servers"
55+ run : |
56+ echo "Checking MCP Registry for $SERVER_NAME"
57+
58+ # Query registry
59+ url="${REGISTRY_URL}?search=${SERVER_NAME}"
60+ echo "Requesting: $url"
61+ http_status=$(curl -s -o response.json -w "%{http_code}" "$url")
62+ if [ "$http_status" -ne 200 ]; then
63+ echo "Registry query failed with HTTP status $http_status"
64+ cat response.json || true
65+ exit 1
66+ fi
67+
68+ # Pretty print the response for debugging
69+ echo "Registry response (truncated):"
70+ jq 'if .servers then {servers: (.servers | length)} else . end' response.json
71+
72+ # Verify server name exists in servers array
73+ if [ -z "$EXPECTED_VERSION" ]; then
74+ # Only check for presence by name
75+ jq -e --arg name "$SERVER_NAME" '.servers[]? | select(.name == $name)' response.json >/dev/null || {
76+ echo "ERROR: Server $SERVER_NAME not found in registry response"
77+ echo "Full response:"
78+ cat response.json
79+ exit 1
80+ }
81+ echo "Found server $SERVER_NAME"
82+ else
83+ # Check for both name and version match
84+ jq -e --arg name "$SERVER_NAME" --arg ver "$EXPECTED_VERSION" '.servers[]? | select(.name == $name and (.version == $ver or (.packages[]? | select(.version==$ver) // empty)))' response.json >/dev/null || {
85+ echo "ERROR: Server $SERVER_NAME with version $EXPECTED_VERSION not found"
86+ echo "Full response:"
87+ cat response.json
88+ exit 1
89+ }
90+ echo "Found server $SERVER_NAME with version $EXPECTED_VERSION"
91+ fi
0 commit comments