Journald MCP server
Análisis forense de incidentes mediante archivos de registro
Documentación
Servidor MCP de Journald
Un servidor MCP para acceder a los registros del diario de systemd.
Características
- Listar unidades de systemd desde los registros del diario
- Listar identificadores de syslog desde los registros del diario
- Obtener la fecha y hora de la primera entrada del diario
- Filtrar entradas del diario por rango de fechas (desde/hasta)
- Filtrar por unidad de systemd o identificador de syslog
- Filtrar por contenido del mensaje (coincidencia de subcadena sin distinción de mayúsculas)
- Análisis de fechas en lenguaje natural (p. ej., "hace 2 horas", "ayer a las 3pm")
- Listar unidades e identificadores dentro de rangos de tiempo específicos
Instalación
# Install dependencies
uv sync
Uso
Ejecutar como no root: Dale al usuario acceso al grupo systemd-journal usermod -aG systemd-journal $USER
Ejecuta el servidor con:
uv run server.py [OPTIONS]
Opciones de CLI
--transport: Protocolo de transporte a utilizar (stdio,sseostreamable-http). Predeterminado:stdio--port: Puerto para escuchar en el transporte HTTP (ignorado para el transportestdio). Predeterminado:3002--log-level: Nivel de registro (DEBUG,INFO,WARNING,ERROR,CRITICAL). Predeterminado:INFO
Ejemplos
-
Ejecutar con transporte stdio (predeterminado, para clientes MCP que se comunican mediante stdin/stdout):
python server.py -
Ejecutar con transporte HTTP en un puerto personalizado:
python server.py --transport streamable-http --port 8080 -
Ejecutar con transporte SSE:
python server.py --transport sse --port 3000 -
Ejecutar con registro de depuración:
python server.py --log-level DEBUG
Integración MCP
El servidor proporciona los siguientes recursos y herramientas MCP:
Recursos
journal://units: Listar unidades de systemd únicas desde los registros del diario (todo el tiempo accesible)journal://syslog-identifiers: Listar identificadores de syslog únicos desde los registros del diario (todo el tiempo accesible)journal://first-entry-datetime: Obtener la fecha y hora de la primera entrada del diariojournal://units/{since}/{until}: Listar unidades de systemd únicas dentro de un rango de tiempo especificadojournal://syslog-identifiers/{since}/{until}: Listar identificadores de syslog únicos dentro de un rango de tiempo especificado
Herramientas
-
get_journal_entries: Obtener entradas del diario con filtrado por fecha y hora- Parámetros:
since(opcional),until(opcional),unit(opcional),identifier(opcional),message_contains(opcional),limit(predeterminado: 100) - Devuelve: Lista de entradas con marca de tiempo, unidad, identificador y mensaje
- Ejemplo: Obtener registros de las últimas 2 horas que contengan "error":
since="2 hours ago", message_contains="error"
- Parámetros:
-
get_recent_logs: Obtener registros recientes del diario de los últimos N minutos- Parámetros:
minutes(predeterminado: 60),unit(opcional),limit(predeterminado: 50) - Devuelve: Cadena formateada de mensajes de registro recientes
- Parámetros:
Formato de entrada de fecha y hora
El servidor utiliza análisis de fechas en lenguaje natural mediante la biblioteca dateparser. Los formatos admitidos incluyen:
- Tiempos relativos: "hace 2 horas", "ayer a las 3pm", "la semana pasada", "ahora"
- Tiempos absolutos: "2024-01-15 14:30", "2024-01-15T14:30:00"
- Mixtos: "hoy a las 9am", "mañana a las 3pm"
Todas las horas se interpretan como UTC y se devuelven en formato legible: "YYYY-MM-DD HH:MM:SS UTC"
Desarrollo
Este proyecto utiliza:
- Python 3.12+
- MCP FastMCP
- systemd-python para acceso al diario
- Click para la interfaz de línea de comandos
- dateparser para análisis de fechas en lenguaje natural
Estructura del proyecto
journald-mcp-server/
├── journald_mcp_server/ # Main package
│ ├── __init__.py
│ ├── server.py # MCP server implementation
│ └── datetime_utils.py # Datetime parsing and formatting utilities
├── tests/ # Test suite
│ ├── __init__.py
│ └── test_server.py
├── server.py # Entry point wrapper
├── pyproject.toml
└── README.md
Ejecutar pruebas
python -m pytest tests/