Volver al inicio

Servidor MCP PingZen: 126 herramientas de monitoreo

PingZen convertido en servidor MCP con 126 herramientas para agentes de IA. Soporte para STDIO y HTTP, OAuth 2.0, llamadas síncronas. Ejemplos de código y detalles técnicos para integración en el flujo de trabajo de los desarrolladores.

PingZen como servidor MCP: monitoreo en agentes de IA
Advertisement 728x90

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:

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="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:

Google AdInline article slot
{
  "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

Advertisement 728x90

Leer después