Update MCP Registry publishing workflow and migrate server.json to latest schema (#21230)
Ilya Mashchenko committed
Oct 28, 2025 at 20:56 UTC
b56742ba8618154cc68a53a0e745539322d8169d
2 files changed
+84
-35
.github/workflows/update-mcp-registry.yml
+34
-28
@@ -1,11 +1,16 @@
1
----
1
name: Update MCP Registry
2
on:
3
release:
4
types: [released]
5
+
6
concurrency:
7
group: update-mcp-registry-${{ github.ref }}-${{ github.event_name }}
8
cancel-in-progress: true
9
+
10
+permissions:
11
+ id-token: write
12
+ contents: read
13
+
14
jobs:
15
publish-mcp-registry:
16
name: Publish to MCP Registry
@@ -14,39 +19,41 @@ jobs:
19
- name: Checkout
20
id: checkout
21
uses: actions/checkout@v5
22
+
23
- name: Update server.json version
18
- id: update-version
24
+ id: update_version
25
run: |
26
VERSION="$(cat packaging/version)"
21
- # Remove 'v' prefix if present
27
VERSION="${VERSION#v}"
23
- # Update version in server.json
24
- sed -i "s/\"version\": \".*\"/\"version\": \"$VERSION\"/" server.json
28
+ sed -i 's/"version": ".*"/"version": "'"$VERSION"'"/' server.json
29
echo "Updated server.json to version: $VERSION"
26
- - name: Install mcp-publisher
27
- id: install
30
+
31
+ - name: Install mcp-publisher (latest release)
32
+ id: install_publisher
33
run: |
29
- # Clone and build mcp-publisher
30
- git clone https://github.com/modelcontextprotocol/registry.git /tmp/registry
31
- cd /tmp/registry
32
- make publisher
33
- sudo cp bin/mcp-publisher /usr/local/bin/
34
+ set -euo pipefail
35
+ OS="$(uname -s | tr '[:upper:]' '[:lower:]')"
36
+ ARCH="$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')"
37
+ URL="https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_${OS}_${ARCH}.tar.gz"
38
+ curl -fsSL "$URL" | tar xz
39
+ sudo mv mcp-publisher /usr/local/bin/
40
mcp-publisher --version
35
- - name: Authenticate with GitHub
36
- id: auth
37
- run: |
38
- # GitHub Actions automatically provides GITHUB_TOKEN with OIDC
39
- # mcp-publisher will use this for authentication
40
- echo "Using GitHub OIDC authentication"
41
+
42
+ - name: Validate server.json (dry run)
43
+ id: validate
44
+ env:
45
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
46
+ run: mcp-publisher publish server.json --dry-run
47
+
48
- name: Publish to registry
49
id: publish
50
env:
51
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
45
- run: |
46
- cd ${{ github.workspace }}
47
- mcp-publisher publish server.json
52
+ run: mcp-publisher publish server.json
53
+
54
- name: Failure Notification
55
uses: rtCamp/action-slack-notify@v2
56
+ if: failure()
57
env:
58
SLACK_COLOR: 'danger'
59
SLACK_FOOTER: ''
@@ -54,11 +61,10 @@ jobs:
61
SLACK_TITLE: 'Failed to publish to MCP Registry:'
62
SLACK_USERNAME: 'GitHub Actions'
63
SLACK_MESSAGE: |-
57
- ${{ github.repository }}: Failed to publish new agent version to MCP Registry.
58
- Checkout: ${{ steps.checkout.outcome }}
59
- Update version: ${{ steps.update-version.outcome }}
60
- Install mcp-publisher: ${{ steps.install.outcome }}
61
- Authenticate: ${{ steps.auth.outcome }}
62
- Publish: ${{ steps.publish.outcome }}
64
+ ${{ github.repository }}: Failed to publish new agent version to MCP Registry.
65
+ Checkout: ${{ steps.checkout.outcome }}
66
+ Update version: ${{ steps.update_version.outcome }}
67
+ Install mcp-publisher: ${{ steps.install_publisher.outcome }}
68
+ Validate: ${{ steps.validate.outcome }}
69
+ Publish: ${{ steps.publish.outcome }}
70
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
64
- if: failure()
server.json
+50
-7
@@ -1,16 +1,53 @@
1
{
2
- "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
3
"name": "io.github.netdata/mcp-server",
4
- "description": "AI-powered infrastructure monitoring with real-time metrics, logs, alerts, and ML anomaly detection.",
4
+ "title": "Netdata MCP Server",
5
+ "description": "Real-time infrastructure monitoring with metrics, logs, alerts, and ML-based anomaly detection.",
6
"version": "2.7.1-1",
6
- "homepage": "https://www.netdata.cloud",
7
- "documentation": "https://learn.netdata.cloud/docs/netdata-ai/mcp",
8
- "license": "GPL-3.0",
7
+ "websiteUrl": "https://www.netdata.cloud",
8
"repository": {
9
"url": "https://github.com/netdata/netdata",
10
"source": "github",
11
"subfolder": "docs/netdata-ai/mcp"
12
},
13
+ "remotes": [
14
+ {
15
+ "type": "streamable-http",
16
+ "url": "http://localhost:19999/mcp",
17
+ "headers": [
18
+ {
19
+ "type": "named",
20
+ "name": "Authorization",
21
+ "value": "Bearer {NETDATA_MCP_API_KEY}",
22
+ "isSecret": true,
23
+ "variables": {
24
+ "NETDATA_MCP_API_KEY": {
25
+ "description": "Netdata MCP API key",
26
+ "isSecret": true
27
+ }
28
+ }
29
+ }
30
+ ]
31
+ },
32
+ {
33
+ "type": "sse",
34
+ "url": "http://localhost:19999/mcp?transport=sse",
35
+ "headers": [
36
+ {
37
+ "type": "named",
38
+ "name": "Authorization",
39
+ "value": "Bearer {NETDATA_MCP_API_KEY}",
40
+ "isSecret": true,
41
+ "variables": {
42
+ "NETDATA_MCP_API_KEY": {
43
+ "description": "Netdata MCP API key",
44
+ "isSecret": true
45
+ }
46
+ }
47
+ }
48
+ ]
49
+ }
50
+ ],
51
"capabilities": {
52
"features": [
53
"Real-time infrastructure observability",
@@ -194,12 +231,18 @@
231
},
232
"version_compatibility": {
233
"v2.6.0-v2.7.1": {
197
- "transports": ["WebSocket"],
234
+ "transports": [
235
+ "WebSocket"
236
+ ],
237
"required_bridge": "nd-mcp",
238
"direct_connection": false
239
},
240
"v2.7.2+": {
202
- "transports": ["WebSocket", "HTTP Streamable", "SSE"],
241
+ "transports": [
242
+ "WebSocket",
243
+ "HTTP Streamable",
244
+ "SSE"
245
+ ],
246
"required_bridge": "nd-mcp or mcp-remote (optional for stdio clients)",
247
"direct_connection": true,
248
"notes": "Currently available in nightly builds"