Integrar PingZen como servidor MCP: 126 herramientas para agentes de IA
El servidor MCP funciona junto con la aplicación principal en un solo proceso, pero con puntos finales aislados. STDIO es ideal para agentes de escritorio que ejecutan scripts de Python a través de stdin/stdout. El transporte HTTP está integrado en FastAPI para servicios basados en la nube.
El registro de las 126 herramientas se gestiona mediante decoradores del SDK. Las herramientas se agrupan así:
- Monitores:
create_monitor,update_monitor,delete_monitor,get_monitor_status,list_monitors,pause_monitor,resume_monitor. - Alertas:
create_alert,update_alert,test_alert,list_alerts. - Incidentes:
list_incidents,get_incident_details,resolve_incident,add_incident_update. - Latidos:
create_heartbeat,send_heartbeat_ping,get_heartbeat_status. - Páginas de estado:
create_status_page,add_monitor_to_status_page,update_status_page. - Webhooks:
create_webhook,list_webhooks. - Informes:
create_scheduled_report,get_report_history. - Claves API:
create_api_key,revoke_api_key.
Ejemplo de registro:
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="Crear un nuevo 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()))]
Los argumentos se pasan según un esquema JSON, simplificando la definición de protocolos complejos como Transacción usando Playwright.
Autenticación OAuth 2.0
OAuth 2.0 se implementa según el RFC 9728 con cero configuración. Los agentes abren un navegador para autenticarse mediante Telegram, Google o Yandex. Tras dar consentimiento, se emite un token. Para pipelines de CI/CD, las claves API están disponibles mediante variables de entorno. Basta con establecer la URL https://pingzen.dev/mcp en la configuración del agente.
Uso práctico de herramientas
Crear un monitor HTTP:
{
"name": "create_monitor",
"arguments": {
"name": "Habr",
"type": "http",
"target": "https://habr.com",
"interval": 60,
"alert_channels": ["telegram"]
}
}
Resultado: ID del monitor y confirmación. Lo mismo aplica para list_monitors, resolve_incident o latido con intervalo de 24 horas y periodo de gracia de 1 hora.
Matrices de implementación
- Validación: El esquema JSON impone tipado estricto. Se aplica conversión explícita de tipos en los manejadores (por ejemplo, intervalo como entero), incluso cuando la IA devuelve cadenas.
- Sincronización: Todas las herramientas son síncronas con tiempo de espera. No hay tareas en segundo plano por simplicidad.
- Errores: Mensajes de error centralizados definidos en
errors.py:
_ERROR_MESSAGES = {
"INVALID_PROTOCOL": "Tipo de monitor no válido '{type}'. Disponibles: http, tcp, udp, icmp, dns, smtp, transaction, ...",
"TIMEOUT": "La solicitud expiró después de {timeout} segundos",
}
- Registro: La salida se envía a stderr para STDIO, incluyendo los argumentos de llamada.
Conclusiones clave
- Las 126 herramientas cubren todo el ciclo de vida: desde la creación de monitores hasta la gestión de incidentes y generación de informes.
- Opciones de transporte dual garantizan flexibilidad para agentes locales y en la nube.
- OAuth sin configuración reduce la fricción inicial; las claves API permiten automatización.
- Diseño síncrono con tiempos de espera y validación estricta asegura un comportamiento predecible.
- Integración fluida con CI/CD y editores de código sin necesidad de cambiar de contexto.
— Editorial Team
Aún no hay comentarios.