Skip to content

Commit 1d4c041

Browse files
committed
feat: verify job for mcp server publish
1 parent a21e9ba commit 1d4c041

2 files changed

Lines changed: 70 additions & 7 deletions

File tree

.github/workflows/publish-mcp.yml

Lines changed: 67 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
name: 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

68
jobs:
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
@@ -26,3 +36,56 @@ jobs:
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

server.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"name": "io.github.safedep/vet-mcp",
44
"title": "SafeDep Vet MCP",
55
"description": "The Vet MCP server helps in vetting open source packages before they are used in a project through AI generated code. Vet MCP server can protect against Slopsquatting attacks, malicious packages, vulnerabilities and other security risks.",
6-
"version": "1.12.8",
6+
"version": "VERSION_FROM_ENV",
77
"websiteUrl": "https://safedep.io",
88
"icons": [
99
{
@@ -28,8 +28,8 @@
2828
"packages": [
2929
{
3030
"registryType": "oci",
31-
"identifier": "ghcr.io/safedep/vet:v1.12.8",
32-
"version": "v1.12.8",
31+
"identifier": "ghcr.io/safedep/vet:VERSION_FROM_ENV",
32+
"version": "VERSION_FROM_ENV",
3333
"runtimeHint": "docker",
3434
"runtimeArguments": [
3535
{

0 commit comments

Comments
 (0)