Skip to content

MCP Server Bridge API

The MCP (Model Context Protocol) Server Bridge provides AI assistants with standardized access to NetAlertX functionality through tools and server-sent events. This enables AI systems to interact with your network monitoring data in real-time.


Overview

The MCP Server Bridge exposes NetAlertX functionality as MCP Tools that AI assistants can call to:

  • Search and retrieve device information
  • Trigger network scans
  • Get network topology and events
  • Wake devices via Wake-on-LAN
  • Access open port information
  • Set device aliases

All MCP endpoints mirror the functionality of standard REST endpoints but are optimized for AI assistant integration.


Architecture Overview

MCP Connection Flow

graph TB
    A[AI Assistant<br/>Claude Desktop] -->|SSE Connection| B[NetAlertX MCP Server<br/>:20212/mcp/sse]
    B -->|JSON-RPC Messages| C[MCP Bridge<br/>api_server_start.py]
    C -->|Tool Calls| D[NetAlertX Tools<br/>Device/Network APIs]
    D -->|Response Data| C
    C -->|JSON Response| B
    B -->|Stream Events| A

    style A fill:#e1f5fe
    style B fill:#f3e5f5
    style C fill:#fff3e0
    style D fill:#e8f5e8

MCP Tool Integration

sequenceDiagram
    participant AI as AI Assistant
    participant MCP as MCP Server (:20212)
    participant API as NetAlertX API (:20211)
    participant DB as SQLite Database

    AI->>MCP: 1. Connect via SSE
    MCP-->>AI: 2. Session established
    AI->>MCP: 3. tools/list request
    MCP->>API: 4. GET /mcp/sse/openapi.json
    API-->>MCP: 5. Available tools spec
    MCP-->>AI: 6. Tool definitions
    AI->>MCP: 7. tools/call: search_devices
    MCP->>API: 8. POST /mcp/sse/devices/search
    API->>DB: 9. Query devices
    DB-->>API: 10. Device data
    API-->>MCP: 11. JSON response
    MCP-->>AI: 12. Tool result

Component Architecture

graph LR
    subgraph "AI Client"
        A[Claude Desktop]
        B[Custom MCP Client]
    end

    subgraph "NetAlertX MCP Server (:20212)"
        C[SSE Endpoint<br/>/mcp/sse]
        D[Message Handler<br/>/mcp/messages]
        E[OpenAPI Spec<br/>/mcp/sse/openapi.json]
    end

    subgraph "NetAlertX API Server (:20211)"
        F[Device APIs<br/>/mcp/sse/devices/*]
        G[Network Tools<br/>/mcp/sse/nettools/*]
        H[Events API<br/>/mcp/sse/events/*]
    end

    subgraph "Backend"
        I[SQLite Database]
        J[Network Scanners]
        K[Plugin System]
    end

    A -.->|Bearer Auth| C
    B -.->|Bearer Auth| C
    C --> D
    C --> E
    D --> F
    D --> G
    D --> H
    F --> I
    G --> J
    H --> I

    style A fill:#e1f5fe
    style B fill:#e1f5fe
    style C fill:#f3e5f5
    style D fill:#f3e5f5
    style E fill:#f3e5f5
    style F fill:#fff3e0
    style G fill:#fff3e0
    style H fill:#fff3e0

Authentication

MCP endpoints use the same Bearer token authentication as REST endpoints:

Authorization: Bearer <API_TOKEN>

Unauthorized requests return HTTP 403:

{
  "success": false,
  "message": "ERROR: Not authorized",
  "error": "Forbidden"
}

MCP Connection Endpoint

Server-Sent Events (SSE)

  • GET/POST /mcp/sse

Main MCP connection endpoint for AI clients. Establishes a persistent connection using Server-Sent Events for real-time communication between AI assistants and NetAlertX.

Connection Example:

const eventSource = new EventSource('/mcp/sse', {
  headers: {
    'Authorization': 'Bearer <API_TOKEN>'
  }
});

eventSource.onmessage = function(event) {
  const response = JSON.parse(event.data);
  console.log('MCP Response:', response);
};

OpenAPI Specification

Get MCP Tools Specification

  • GET /mcp/sse/openapi.json

Returns the OpenAPI specification for all available MCP tools, describing the parameters and schemas for each tool.

Response:

{
  "openapi": "3.0.0",
  "info": {
    "title": "NetAlertX Tools",
    "version": "1.1.0"
  },
  "servers": [{"url": "/"}],
  "paths": {
    "/devices/by-status": {
      "post": {"operationId": "list_devices"}
    },
    "/device/{mac}": {
      "post": {"operationId": "get_device_info"}
    },
    "/devices/search": {
      "post": {"operationId": "search_devices"}
    }
  }
}

Available MCP Tools

Device Management Tools

Tool Endpoint Description
list_devices /mcp/sse/devices/by-status List devices by online status
get_device_info /mcp/sse/device/<mac> Get detailed device information
search_devices /mcp/sse/devices/search Search devices by MAC, name, or IP
get_latest_device /mcp/sse/devices/latest Get most recently connected device
set_device_alias /mcp/sse/device/<mac>/set-alias Set device friendly name

Network Tools

Tool Endpoint Description
trigger_scan /mcp/sse/nettools/trigger-scan Trigger network discovery scan
get_open_ports /mcp/sse/device/open_ports Get stored NMAP open ports for device
wol_wake_device /mcp/sse/nettools/wakeonlan Wake device using Wake-on-LAN
get_network_topology /mcp/sse/devices/network/topology Get network topology map

Event & Monitoring Tools

Tool Endpoint Description
get_recent_alerts /mcp/sse/events/recent Get events from last 24 hours
get_last_events /mcp/sse/events/last Get 10 most recent events

Tool Usage Examples

Search Devices Tool

Tool Call:

{
  "jsonrpc": "2.0",
  "id": "1",
  "method": "tools/call",
  "params": {
    "name": "search_devices",
    "arguments": {
      "query": "192.168.1"
    }
  }
}

Response:

{
  "jsonrpc": "2.0",
  "id": "1",
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\n  \"success\": true,\n  \"devices\": [\n    {\n      \"devName\": \"Router\",\n      \"devMac\": \"AA:BB:CC:DD:EE:FF\",\n      \"devLastIP\": \"192.168.1.1\"\n    }\n  ]\n}"
      }
    ],
    "isError": false
  }
}

Trigger Network Scan Tool

Tool Call:

{
  "jsonrpc": "2.0",
  "id": "2",
  "method": "tools/call",
  "params": {
    "name": "trigger_scan",
    "arguments": {
      "type": "ARPSCAN"
    }
  }
}

Response:

{
  "jsonrpc": "2.0",
  "id": "2",
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\n  \"success\": true,\n  \"message\": \"Scan triggered for type: ARPSCAN\"\n}"
      }
    ],
    "isError": false
  }
}

Wake-on-LAN Tool

Tool Call:

{
  "jsonrpc": "2.0",
  "id": "3",
  "method": "tools/call",
  "params": {
    "name": "wol_wake_device",
    "arguments": {
      "devMac": "AA:BB:CC:DD:EE:FF"
    }
  }
}


Integration with AI Assistants

Claude Desktop Integration

Add to your Claude Desktop mcp.json configuration:

{
  "mcp": {
    "servers": {
      "netalertx": {
        "command": "node",
        "args": ["/path/to/mcp-client.js"],
        "env": {
          "NETALERTX_URL": "http://your-server:<GRAPHQL_PORT>",
          "NETALERTX_TOKEN": "your-api-token"
        }
      }
    }
  }
}

Generic MCP Client

import asyncio
import json
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

async def main():
    # Connect to NetAlertX MCP server
    server_params = StdioServerParameters(
        command="curl",
        args=[
            "-N", "-H", "Authorization: Bearer <API_TOKEN>",
            "http://your-server:<GRAPHQL_PORT>/mcp/sse"
        ]
    )

    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            # Initialize connection
            await session.initialize()

            # List available tools
            tools = await session.list_tools()
            print(f"Available tools: {[t.name for t in tools.tools]}")

            # Call a tool
            result = await session.call_tool("search_devices", {"query": "router"})
            print(f"Search result: {result}")

if __name__ == "__main__":
    asyncio.run(main())

Error Handling

MCP tool calls return structured error information:

Error Response:

{
  "jsonrpc": "2.0",
  "id": "1",
  "result": {
    "content": [
      {
        "type": "text",
        "text": "Error calling tool: Device not found"
      }
    ],
    "isError": true
  }
}

Common Error Types: - 401/403 - Authentication failure - 400 - Invalid parameters or missing required fields - 404 - Resource not found (device, scan results, etc.) - 500 - Internal server error


Notes

  • MCP endpoints require the same API token authentication as REST endpoints
  • All MCP tools return JSON responses wrapped in MCP protocol format
  • Server-Sent Events maintain persistent connections for real-time updates
  • Tool parameters match their REST endpoint equivalents
  • Error responses include both HTTP status codes and descriptive messages
  • MCP bridge automatically handles request/response serialization