PingZen als MCP-Server integrieren: 126 Tools für KI-Agenten
Der MCP-Server läuft neben der Hauptanwendung in einem einzigen Prozess, aber mit isolierten Endpunkten. STDIO ist ideal für Desktop-Agenten, die Python-Skripte über stdin/stdout starten. Der HTTP-Transport ist in FastAPI bereits eingebaut und eignet sich perfekt für Cloud-basierte Dienste.
Die Registrierung der 126 Tools erfolgt über SDK-Decorator. Die Tools sind wie folgt gruppiert:
- Monitore:
create_monitor,update_monitor,delete_monitor,get_monitor_status,list_monitors,pause_monitor,resume_monitor. - Benachrichtigungen:
create_alert,update_alert,test_alert,list_alerts. - Vorfälle:
list_incidents,get_incident_details,resolve_incident,add_incident_update. - Heartbeats:
create_heartbeat,send_heartbeat_ping,get_heartbeat_status. - Statusseiten:
create_status_page,add_monitor_to_status_page,update_status_page. - Webhooks:
create_webhook,list_webhooks. - Berichte:
create_scheduled_report,get_report_history. - API-Schlüssel:
create_api_key,revoke_api_key.
Beispielregistrierung:
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="Neuen Monitor erstellen",
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()))]
Die Argumente werden als JSON-Schema übergeben, was die Definition komplexer Protokolle wie Transaction mit Playwright vereinfacht.
OAuth 2.0-Authentifizierung
OAuth 2.0 wird gemäß RFC 9728 ohne Konfiguration implementiert. Agenten öffnen einen Browser, um sich über Telegram, Google oder Yandex zu authentifizieren. Nach Zustimmung wird ein Token ausgestellt. Für CI/CD-Pipelines stehen API-Schlüssel über Umgebungsvariablen zur Verfügung. Setzen Sie einfach die URL https://pingzen.dev/mcp in den Agenteneinstellungen.
Praktische Tool-Nutzung
Erstellen eines HTTP-Monitors:
{
"name": "create_monitor",
"arguments": {
"name": "Habr",
"type": "http",
"target": "https://habr.com",
"interval": 60,
"alert_channels": ["telegram"]
}
}
Ergebnis: Monitor-ID und Bestätigung. Gleiches Verhalten gilt für list_monitors, resolve_incident oder Heartbeat mit einer 24-Stunden-Intervall und 1-Stunde-Grace-Periode.
Implementierungsdetails
- Validierung: JSON Schema sorgt für strikte Typisierung. In den Handler werden explizite Typumwandlungen angewendet (z. B. Interval als Integer), auch wenn die KI Zeichenketten zurückgibt.
- Synchronisation: Alle Tools sind synchron mit Timeout. Keine Hintergrundaufgaben – für Einfachheit.
- Fehler: Zentralisierte Fehlermeldungen sind in
errors.pydefiniert:
_ERROR_MESSAGES = {
"INVALID_PROTOCOL": "Ungültiger Monitor-Typ '{type}'. Verfügbar: http, tcp, udp, icmp, dns, smtp, transaction, ...",
"TIMEOUT": "Anfrage abgelaufen nach {timeout} Sekunden",
}
- Protokollierung: Ausgabe erfolgt über stderr bei STDIO, inklusive Aufrufargumente.
Wichtige Erkenntnisse
- Die 126 Tools decken den gesamten Lebenszyklus ab – von Monitor-Erstellung bis zur Vorfalldokumentation und Berichterstattung.
- Zwei Transportoptionen gewährleisten Flexibilität sowohl für lokale als auch für Cloud-Agenten.
- Zero-Config-OAuth reduziert den Einrichtungsaufwand; API-Schlüssel ermöglichen Automatisierung.
- Synchrones Design mit Timeouts und strikter Validierung sorgt für vorhersehbares Verhalten.
- Nahtlose Integration in CI/CD und IDEs ohne Kontextwechsel.
— Editorial Team
Noch keine Kommentare.