Powrót do strony głównej

Serwer MCP PingZen: 126 narzędzi do monitorowania

PingZen przekształcony w serwer MCP z 126 narzędziami dla agentów AI. Obsługa STDIO i HTTP, OAuth 2.0, synchroniczne wywołania. Przykłady kodu i szczegóły techniczne do integracji w proces pracy programistów.

PingZen jako serwer MCP: monitorowanie w agentach AI
Advertisement 728x90

Integracja PingZen jako serwera MCP: 126 narzędzi dla agentów AI

Serwer MCP działa w jednym procesie z główną aplikacją, ale z izolowanymi punktami końcowymi. STDIO idealnie nadaje się do agentów desktopowych uruchamianych przez skrypty Pythona przez stdin/stdout. Transport HTTP jest wbudowany w FastAPI dla usług chmurowych.

Rejestracja 126 narzędzi odbywa się za pomocą dekoratorów SDK. Narzędzia są podzielone na kategorie:

  • Monitory: create_monitor, update_monitor, delete_monitor, get_monitor_status, list_monitors, pause_monitor, resume_monitor.
  • Powiadomienia: create_alert, update_alert, test_alert, list_alerts.
  • Incidenty: list_incidents, get_incident_details, resolve_incident, add_incident_update.
  • Pulsy: create_heartbeat, send_heartbeat_ping, get_heartbeat_status.
  • Strony stanu: create_status_page, add_monitor_to_status_page, update_status_page.
  • Webhooki: create_webhook, list_webhooks.
  • Raporty: create_scheduled_report, get_report_history.
  • Klucze API: create_api_key, revoke_api_key.

Przykład rejestracji:

Google AdInline article slot
from mcp.server import Server
import mcp.types as types

server = Server("pingzen-mcp")

@server.list_tools()
async def handle_list_tools() -> list[types.Tool]:
    return [
        types.Tool(
            name="create_monitor",
            description="Utwórz nowy monitor",
            inputSchema={
                "type": "object",
                "properties": {
                    "name": {"type": "string"},
                    "type": {"type": "string", "enum": ["http", "tcp", "udp", "icmp", "dns", "smtp", "transaction", ...]},
                    "target": {"type": "string"},
                    "interval": {"type": "integer", "minimum": 60},
                },
                "required": ["name", "type", "target"]
            }
        ),
    ]

@server.call_tool()
async def handle_call_tool(name: str, arguments: dict) -> list[types.TextContent]:
    if name == "create_monitor":
        monitor = await monitor_service.create(arguments)
        return [types.TextContent(type="text", text=json.dumps(monitor.to_dict()))]

Argumenty przekazywane są jako schemat JSON, co ułatwia opisanie złożonych protokołów, takich jak Transaction z Playwrightem.

Autoryzacja przez OAuth 2.0

Zaimplementowano OAuth 2.0 zgodnie z RFC 9728 z zerową konfiguracją. Agent otwiera przeglądarkę do autoryzacji przez Telegram, Google lub Yandex. Po akceptacji wydawany jest token. Dla CI/CD dostępne są klucze API przez zmienne środowiskowe. Wystarczy podać URL https://pingzen.dev/mcp w ustawieniach agenta.

Praktyczne przykłady użycia narzędzi

Tworzenie monitora HTTP:

Google AdInline article slot
{
  "name": "create_monitor",
  "arguments": {
    "name": "Habr",
    "type": "http",
    "target": "https://habr.com",
    "interval": 60,
    "alert_channels": ["telegram"]
  }
}

Wynik: ID monitora i potwierdzenie. Podobnie działa list_monitors, resolve_incident lub puls z interwałem 24 godziny i okresem łaski 1 godzina.

Czynniki techniczne implementacji

  • Walidacja: Schemat JSON wymaga ścisłych typów. W handlerach dodano jawne rzutowanie (np. interval jako integer), mimo że AI może przesyłać dane jako ciągi znaków.
  • Synchronizacja: Wszystkie narzędzia są synchroniczne z timeoutami. Brak zadań tła dla prostoty.
  • Błędy: Centralne komunikaty w pliku errors.py:
_ERROR_MESSAGES = {
    "INVALID_PROTOCOL": "Nieprawidłowy typ monitora '{type}'. Dostępne: http, tcp, udp, icmp, dns, smtp, transaction, ...",
    "TIMEOUT": "Żądanie wygasło po {timeout} sekundach",
}
  • Logowanie: Przez stderr dla STDIO, z argumentami wywołań.

Co warto wiedzieć

  • 126 narzędzi obejmuje pełny cykl: od tworzenia monitorów po zarządzanie incydentami i raportami.
  • Dwa transporty zapewniają elastyczność dla lokalnych i chmurowych agentów.
  • OAuth zero-config minimalizuje konfigurację; klucze API służą automatyzacji.
  • Model synchroniczny z timeoutami i ścisłą walidacją gwarantuje przewidywalność.
  • Łatwa integracja z CI/CD i IDE bez przełączania kontekstu.

— Editorial Team

Advertisement 728x90

Czytaj dalej