@cryptotaxi247 / netdata-1 / commits / b56742ba8

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"