Creando un MCP para OpenObserve
Cómo conecté mi asistente de IA a mis logs de producción: Creando un MCP para OpenObserve.
Imagina esta escena: estás en medio de una sesión de depuración intensa con tu asistente de Inteligencia Artificial (ya sea Claude, Gemini o GPT). El código parece correcto, pero la aplicación sigue fallando en producción. Le explicas el error al modelo y este te dice: "¿Podrías mostrarme los últimos logs del servicio de pagos para entender qué está pasando?".
En ese instante, tu flujo de trabajo se rompe:
- Sales de tu IDE o terminal.
- Abres el navegador y entras en la consola web de OpenObserve.
- Escribes una query SQL o buscas filtros de tiempo y nivel de error.
- Copias una pared gigantesca de texto de logs.
- Regresas al chat de la IA y la pegas (rogando no haber copiado de paso una clave de API o un token de sesión sensible en texto plano).
Este proceso es lento, interrumpe tu concentración y abre posibles brechas de seguridad.
Para resolver este problema, decidí construir un servidor MCP (Model Context Protocol) de solo lectura que actúa como pasarela inteligente entre los asistentes de IA y nuestro Log Gateway API centralizado.
En este artículo te cuento cómo lo hice, los problemas que resuelve y por qué creo que los servidores MCP son la pieza que faltaba en la revolución del desarrollo asistido por IA.
🛠️ ¿Qué es MCP (Model Context Protocol) y por qué cambia el juego?
El Model Context Protocol (MCP) es un estándar abierto desarrollado para permitir que los modelos de lenguaje (LLMs) interactúen de forma segura y estructurada con herramientas y datos locales o remotos.
En lugar de construir integraciones ad-hoc para cada herramienta, MCP proporciona un protocolo común (basado en JSON-RPC 2.0 sobre stdio o HTTP) para que el asistente de IA pueda descubrir y ejecutar "herramientas" que tú le expongas desde tu sistema.
En mi caso, en lugar de darle a la IA acceso directo a toda nuestra infraestructura de OpenObserve (lo cual sería un riesgo enorme de seguridad), creé un servidor MCP en Node.js que sirve como un puente seguro y controlado de solo lectura.
💡 La Solución: MCP Log Gateway para OpenObserve
El proyecto consiste en un servidor MCP que consume el Log Gateway API corporativo. La IA no sabe qué es OpenObserve, ni tiene credenciales maestras. Solo conoce un conjunto de herramientas de consulta que el servidor MCP le expone.
Cuando la IA necesita datos, invoca una herramienta MCP; el servidor valida la petición con esquemas estrictos de Zod, realiza la consulta HTTP autenticada contra el gateway, y le devuelve a la IA los resultados limpios y formateados.
Asistente IA (Claude, Gemini, GPT...)
│ (Llamada a herramienta MCP)
▼
┌─────────────────────────────────┐
│ mcp-openobserve │ ← Mi servidor MCP (stdio)
│ • Valida entradas con Zod │
│ • Redacta datos sensibles │
│ • Gestiona la paginación │
└──────────────┬──────────────────┘
│ (Petición REST autenticada)
▼
┌─────────────────────────────────┐
│ Log Gateway API │ ← Pasarela centralizada
└──────────────┬──────────────────┘
│
▼
[ OpenObserve / Streams ]
🚀 Características clave y decisiones de diseño
Al diseñar este sistema para que fuera utilizado de forma autónoma por una IA, tuve que tomar decisiones de arquitectura muy específicas:
1. Seguridad por diseño (Solo lectura y Redacción de Secretos)
El servidor es estrictamente de solo lectura. No hay herramientas para escribir, modificar o borrar logs. Además, el sistema de logs internos y las respuestas que se devuelven al asistente pasan por un filtro de redacción automática. Si un mensaje de error o una cabecera contiene una clave de API, un password, una cookie o un Bearer token, el servidor lo detecta y lo reemplaza por [REDACTED] antes de que salga de la máquina.
2. Correlación de trazas con Fan-Out controlado
Uno de los mayores dolores de cabeza en arquitecturas de microservicios es seguir el rastro de una petición. Si el asistente de IA recibe un request_id o trace_id, puede llamar a la herramienta get_log_by_trace_or_request sin especificar un servicio. El servidor MCP consultará concurrentemente (con un pool acotado de 3 a 5 peticiones simultáneas para no saturar el gateway) todos los servicios autorizados, unificando los resultados en una única traza cronológica. ¡La IA puede ver el flujo completo de la petición a través de toda la infraestructura en segundos!
3. Resúmenes inteligentes y autopaginación
Si hay miles de logs de error, no queremos que la IA sature el contexto del chat leyendo uno a uno. La herramienta summarize_errors recoge los logs de la ventana temporal seleccionada, normaliza los mensajes (colapsando espacios y limpiando ruido) y los agrupa por frecuencia. La IA obtiene un reporte del estilo: "El error X ha ocurrido 150 veces, y el error Y ha ocurrido 12 veces", permitiéndote priorizar el análisis.
4. Ergonomía: "Logs locales primero"
Para optimizar el uso de recursos y costes, el asistente está entrenado para seguir una regla simple: si estás depurando un error de desarrollo local reciente, revisará primero los archivos de log locales (.logs/app.log). Solo escalará al MCP si se trata de un entorno remoto (producción/staging), una consulta histórica, o si se busca un identificador específico del gateway centralizado.
📦 El Stack Tecnológico
Para asegurar un arranque ultra-rápido (menos de 5 segundos) y un consumo mínimo de recursos, elegí tecnologías modernas y ligeras:
- Node.js (v24.4.1) y TypeScript (v6.0.3) con soporte nativo para ES Modules (ESM).
- Zod (v4.4.3) para la validación estricta de todos los parámetros de entrada de las herramientas antes de realizar llamadas de red.
- Pino (v10.3.1) para un logging estructurado súper veloz, redirigido a
stderrpara no contaminar el canal destdout(el cual está reservado para los mensajes JSON-RPC del protocolo MCP). - Vitest (v4.1.8) para las pruebas. Conseguimos una cobertura de código de más del 80% en líneas, funciones y ramas, incluyendo tests unitarios, de contrato (haciendo mocks del gateway) e integración.
💭 Reflexión personal
Crear este MCP no solo ha sido un reto técnico divertido para entender los nuevos estándares de desarrollo con IA, sino que ha transformado por completo mi flujo de trabajo.
La depuración ya no se siente como "ir a buscar datos para dárselos a la IA". Ahora se siente como una colaboración fluida: yo identifico el problema a alto nivel y mi asistente de IA se encarga de recopilar el contexto operativo, agrupar los errores, y sugerirme la línea exacta de código que está fallando.
Los protocolos como MCP demuestran que el futuro de la programación no es que la IA escriba todo el código por nosotros, sino que nosotros diseñemos las herramientas y límites seguros para que la IA actúe como un copiloto verdaderamente autónomo y eficiente.
