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:
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:
{
"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
Brak komentarzy.