AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
MCP verified MIT Self-run

Wazuh Mcp Server

mcp-luislopezsanchez-wazuh-mcp-server · by luislopezsanchez

Servidor MCP para Wazuh SIEM: 17 herramientas via HTTP (n8n) y stdio (Claude Desktop). Despliegue Docker.

— No reviews yet
0 installs
19 views
0.0% view→install

Install

$ agentstack add mcp-luislopezsanchez-wazuh-mcp-server

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • ✓ Prompt-injection patterns
  • ✓ Secret / credential exfiltration
  • ✓ Dangerous shell & filesystem operations
  • ✓ Untrusted network calls
  • ✓ Known-malicious package signatures

What it can access

  • ● Network access Used
  • ✓ Filesystem access No
  • ✓ Shell / process execution No
  • ● Environment & secrets Used
  • ✓ Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/mcp-luislopezsanchez-wazuh-mcp-server)

Reliability & compatibility

✓ Security review passed
0 installs to date
— no reviews yet
● 2mo ago

Declared compatibility

Claude CodeClaude DesktopCursorWindsurf

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Wazuh Mcp Server? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

🛡️ Wazuh MCP Server

Servidor MCP (Model Context Protocol) para Wazuh SIEM/XDR — integración directa con Hermes Agent.

Servidor MCP de alto rendimiento que expone 101 herramientas y 11 prompts guiados para interactuar con la API del Wazuh Manager y el Indexer de OpenSearch. Diseñado para despliegue en producción sobre un VPS Contabo, permitiendo que Hermes Agent (o Claude Desktop y cualquier cliente MCP) consulte agentes, vulnerabilidades, alertas, reglas, SCA, hardware y salud del cluster, y además realice threat hunting, análisis de incidentes, informes de compliance, enriquecimiento con threat intelligence e integraciones con Jira/TheHive/Slack, directamente desde Wazuh.

  • 17 tools núcleo (server.py) — probadas en producción, cliente thread-safe con pool de conexiones, JWT auto-refresh y autenticación por certificados.
  • 84 tools extendidas + 11 prompts (wazuh_tools/) — portadas de adi5353/wazuh-mcp (Apache-2.0) y adaptadas a la infraestructura de este proyecto. Carga tolerante a fallos: si un módulo extendido fallara, las 17 tools núcleo siguen operativas.

🏗️ Arquitectura

┌─────────────────┐     MCP (Streamable HTTP)     ┌──────────────────┐
│  Hermes Agent   │ ◄──────────────────────────► │  Wazuh MCP Server │
│  (Cliente MCP)  │        Puerto 8090            │  (FastMCP)        │
└─────────────────┘                               └────────┬─────────┘
                                                            │
                                          ┌─────────────────┼─────────────────┐
                                          │                 │                  │
                                    ┌─────▼─────┐   ┌──────▼──────┐   ┌──────▼──────┐
                                    │  Wazuh    │   │  OpenSearch │   │  Syscollector│
                                    │  Manager  │   │  Indexer    │   │  (agentes)  │
                                    │  API      │   │  (alertas,  │   │             │
                                    │  :55000   │   │   vulns)    │   │             │
                                    └───────────┘   │  :9200      │   └─────────────┘
                                                    └─────────────┘

Componentes principales

| Archivo | Descripción | |---------|-------------| | server.py | Servidor MCP principal (v2.0). Usa FastMCP + httpx con pool de conexiones, timeouts diferenciados, token JWT con refresh automático y cliente thread-safe. | | mcp_wazuh.py | Implementación legacy/alternativa del cliente Wazuh MCP (compatible con mcporter). | | direct_api.py | API HTTP directa sin dependencia MCP — endpoints REST simples para integración con n8n. | | http_wrapper.py | Wrapper HTTP que expone herramientas MCP como endpoints REST (usa mcporter internamente). | | Dockerfile | Imagen Python 3.12-slim con dependencias versionadas (fastmcp, httpx, uvicorn). | | docker-compose.yml | Despliegue production-ready con límites de memoria, healthcheck, montaje de certificados y reinicio automático. |

Stack tecnológico

  • Python 3.12 + FastMCP 2.7.0 — servidor MCP con transporte HTTP
  • httpx 0.28.1 — cliente HTTP asíncrono con pool de conexiones
  • uvicorn — servidor ASGI para el transporte HTTP
  • Docker — contenedorizado para despliegue consistente

🔧 Herramientas MCP disponibles

Agentes

| Herramienta | Descripción | |-------------|-------------| | list_agents | Lista todos los agentes con estado, versión, SO, IP y grupos | | get_agent_info | Información detallada de un agente específico | | get_agents_summary | Resumen con estadísticas de todos los agentes (activos, desconectados, por SO) | | get_agent_groups | Grupos a los que pertenece un agente | | restart_agent | Reinicia un agente específico |

Vulnerabilidades (Indexer)

| Herramienta | Descripción | |-------------|-------------| | get_agent_vulnerabilities | Vulnerabilidades de un agente con filtro por severidad | | get_vulnerability_summary | Resumen de CVEs únicos con desglose por severidad (usa collapse + aggregations) |

Reglas

| Herramienta | Descripción | |-------------|-------------| | list_rules | Lista reglas con filtro por estado y grupo | | get_rules_groups | Lista todos los grupos de reglas disponibles |

Alertas (Indexer)

| Herramienta | Descripción | |-------------|-------------| | search_alerts | Búsqueda de alertas con query string, filtro por agente |

Syscollector / SCA

| Herramienta | Descripción | |-------------|-------------| | get_agent_sca | Resultados del Security Configuration Assessment (SCA) | | get_agent_netaddr | Interfaces de red del agente | | get_agent_hardware | Información de hardware (CPU, RAM, placa base) | | get_agent_ports | Puertos en escucha del agente (desde el Indexer) |

Infraestructura

| Herramienta | Descripción | |-------------|-------------| | get_manager_stats | Estadísticas del Wazuh Manager | | get_cluster_nodes | Nodos del cluster Wazuh | | get_indexer_health | Salud del cluster OpenSearch (status, nodos, shards) |


🚀 Herramientas extendidas (84 tools en 21 dominios)

Portadas de adi5353/wazuh-mcp y adaptadas al cliente de este proyecto (ver [wazuh_tools/NOTICE.md](wazuhtools/NOTICE.md)):

| Dominio | Tools destacadas | |---------|------------------| | Alertas avanzadas | alert_summary, alert_timeline, search_by_mitre, search_by_source_ip, search_authentication_failures, get_alert_by_id | | Threat Hunting | hunt_lateral_movement, hunt_persistence_mechanisms, hunt_data_exfiltration | | Incidentes | incident_timeline, blast_radius_analysis, create_incident_report, tag_alert, bulk_suppress_rule | | Vulnerabilidades | vulnerability_summary (flota), search_cve, prioritize_patches, get_agent_vulnerabilities_detailed | | FIM | get_recent_fim_changes, search_fim_alerts, fim_summary, critical_file_changes | | Compliance | compliance_summary y generate_compliance_report (PCI-DSS, HIPAA, GDPR, NIST 800-53, TSC) | | SCA | get_sca_failed_checks, sca_alerts_summary, fleet_sca_weakest_agents | | Inventario de flota | fleet_find_package, fleet_find_process, fleet_find_listening_port, get_agent_login_history, get_agent_packages, get_agent_processes | | Reglas y decoders | search_rules, get_rule_details, test_log_against_rules, test_rule_coverage, list_decoders, get_custom_rules | | CDB Lists | list_cdb_lists, add_to_cdb_list, remove_from_cdb_list, preview_cdb_list_impact | | Active Response | get_active_responses, run_active_response, correlate_alert_with_response, active_response_effectiveness | | MITRE ATT&CK | mitre_coverage_analysis, get_mitre_gaps | | Threat Intel | enrich_ip (VirusTotal + AbuseIPDB), enrich_file_hash, enrich_ip_geo (GeoIP gratuito) | | Supresión de ruido | list_suppressed_rules, noise_score_rule, expire_suppression | | Reporting | generate_weekly_summary, generate_shift_handover, compare_alert_volume, detect_rule_anomalies | | Integraciones | create_jira_ticket, create_thehive_case, update_ticket_status | | Notificaciones | send_alert_to_slack, send_critical_alert_notify, email_compliance_report | | Onboarding | generate_enrollment_command, list_never_connected_agents, agent_onboarding_checklist | | Archive | search_archive_logs, search_archive_logs_by_agent (forense) | | Cluster | get_cluster_health, check_event_queue_health | | Agentes/Grupos | run_active_response, list_groups, get_group_agents, add_agent_to_group |

Las integraciones externas (Jira, TheHive, Slack, SMTP, VirusTotal, AbuseIPDB) degradan con elegancia: si no configuras sus credenciales, las demás tools funcionan con normalidad.

🔐 Operaciones de escritura deshabilitadas por defecto

Las tools extendidas destructivas (run_active_response, add_to_cdb_list, tag_alert, bulk_suppress_rule, add_agent_to_group, expire_suppression, remove_from_cdb_list) requieren WAZUH_ALLOW_WRITES=true. Además, varias soportan dry_run=True (por defecto) para previsualizar el impacto sin aplicar cambios. La tool núcleo restart_agent no se ve afectada por este flag (mantiene su comportamiento original).

💬 Prompts MCP (workflows guiados)

| Prompt | Uso | |--------|-----| | investigate_brute_force | Investigación completa de fuerza bruta en 6 pasos | | weekly_soc_briefing | Briefing ejecutivo semanal del SOC | | triage_alert | Triaje estructurado de una alerta (TP/FP + severidad) | | cve_emergency_response | Respuesta de emergencia a un CVE | | morning_briefing | Briefing de inicio de turno | | incident_triage_full | Triaje completo de incidente por agente o IP | | threat_hunt_session | Sesión de threat hunt (lateral + persistencia + exfiltración) | | end_of_shift_handover | Informe de relevo de turno | | daily_security_report | Reporte diario técnico — métricas de alertas, amenazas activas, salud de infraestructura, vulnerabilidades y acciones prioritarias (12 tools orquestadas) | | weekly_security_report | Reporte semanal táctico — tendencias, threat hunting, MITRE ATT&CK, gestión de vulnerabilidades, compliance y plan de acción (17 tools orquestadas) | | monthly_ciso_report | Reporte mensual ejecutivo CISO — scorecard de postura, paisaje de amenazas, riesgos, compliance multi-framework, KPIs y recomendaciones estratégicas (25 tools orquestadas) |


📋 Variables de entorno

Copia .env.example a .env y configura los valores:

| Variable | Requerida | Default | Descripción | |----------|-----------|---------|-------------| | WAZUH_URL | ✅ | https://localhost:55000 | URL base de la API del Wazuh Manager | | WAZUH_USER | ✅ | — | Usuario con acceso a la API de Wazuh | | WAZUH_PASS | ✅ | — | Contraseña del usuario de la API | | INDEXER_URL | ✅ | https://localhost:9200 | URL base del Indexer de OpenSearch | | INDEXER_USER | ⚠️ | — | Usuario del Indexer (si no usas certificados) | | INDEXER_PASS | ⚠️ | — | Contraseña del Indexer (si no usas certificados) | | INDEXER_CERT | ⚠️ | — | Ruta al certificado cliente (alternativa a user/pass) | | INDEXER_KEY | ⚠️ | — | Ruta a la clave privada del certificado | | INDEXER_CA | ❌ | — | Ruta al CA bundle (opcional) | | VERIFY_SSL | ❌ | false | Verificar certificados SSL (true/false) | | INDEXER_TIMEOUT | ❌ | 30.0 | Timeout para consultas al Indexer (segundos) | | WAZUH_API_TIMEOUT | ❌ | 15.0 | Timeout para consultas a la API de Wazuh | | MAX_CONNECTIONS | ❌ | 20 | Conexiones máximas en el pool HTTP | | MAX_KEEPALIVE | ❌ | 10 | Conexiones keep-alive máximas | | WAZUH_HTTP_PORT | ❌ | 8090 | Puerto HTTP del servidor MCP | | WAZUH_ALLOW_WRITES | ❌ | false | Habilita las tools extendidas de escritura (active response, CDB, tagging) | | WAZUH_MAX_RESULTS_GLOBAL | ❌ | 500 | Límite global de resultados en las tools extendidas | | WAZUH_TS_FIELD | ❌ | timestamp | Campo de tiempo de los documentos de alertas (timestamp o @timestamp) | | VIRUSTOTAL_API_KEY | ❌ | — | Enriquecimiento de IPs/hashes con VirusTotal | | ABUSEIPDB_API_KEY | ❌ | — | Scoring de IPs con AbuseIPDB | | JIRA_URL / JIRA_USER / JIRA_API_TOKEN / JIRA_PROJECT_KEY | ❌ | — | Creación de tickets en Jira | | THEHIVE_URL / THEHIVE_API_KEY | ❌ | — | Creación de casos en TheHive | | SLACK_WEBHOOK_URL o SLACK_BOT_TOKEN | ❌ | — | Notificaciones a Slack | | SMTP_HOST / SMTP_USER / SMTP_PASS / REPORT_EMAIL_TO | ❌ | — | Envío de informes por email |

> ⚠️ INDEXERUSER/INDEXERPASS o INDEXERCERT/INDEXERKEY — al menos un par es obligatorio para conectarse al Indexer. > > Ver .env.example para la lista completa comentada (patrones de índice, canales de Slack, password de enrolamiento, etc.).


🐳 Despliegue con Docker Compose

Requisitos previos

  1. Certificados del Wazuh Indexer en el host:
  • /etc/wazuh-indexer/certs/admin.pem — certificado de administrador
  • /etc/wazuh-indexer/certs/admin-key.pem — clave privada
  • /etc/wazuh-indexer/certs/root-ca.pem — CA raíz
  1. Archivo .env con las credenciales configuradas.

Despliegue

# 1. Clonar el repositorio
git clone  wazuh-mcp
cd wazuh-mcp

# 2. Crear .env desde el ejemplo
cp .env.example .env
# Editar .env con tus credenciales reales
nano .env

# 3. Construir y levantar
docker compose up -d --build

# 4. Verificar que está corriendo
docker compose ps
docker compose logs -f

Healthcheck

El contenedor incluye un healthcheck funcional que verifica que el endpoint MCP responde correctamente:

# Verificar estado del healthcheck
docker inspect wazuh-mcp --format='{{.State.Health.Status}}'

# Probar manualmente
curl -X POST http://localhost:8090/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

Configuración de certificados

Si tu Wazuh Indexer está en el mismo host que el contenedor, los certificados se montan como volúmenes de solo lectura:

volumes:
  - /etc/wazuh-indexer/certs/admin.pem:/certs/admin.pem:ro
  - /etc/wazuh-indexer/certs/admin-key.pem:/certs/admin-key.pem:ro
  - /etc/wazuh-indexer/certs/root-ca.pem:/certs/root-ca.pem:ro

Luego en tu .env:

INDEXER_CERT=/certs/admin.pem
INDEXER_KEY=/certs/admin-key.pem
INDEXER_CA=/certs/root-ca.pem
# INDEXER_USER=   ← dejar vacío si usas certificados
# INDEXER_PASS=   ← dejar vacío si usas certificados

Si el Indexer está en otro servidor, copia los certificados al host Docker y ajusta las rutas de los volúmenes.


🔌 Conexión con Hermes Agent Gateway

Configuración del perfil

En tu perfil de Hermes Agent, añade el servidor MCP al archivo de configuración:

{
  "mcpServers": {
    "wazuh-siem": {
      "type": "streamable-http",
      "url": "http://:8090/mcp"
    }
  }
}

Probar la conexión

Una vez configurado, Hermes Agent podrá invocar cualquiera de las herramientas MCP. Ejemplos de prompts:

  • "Muéstrame todos los agentes de Wazuh"
  • "¿Cuántas vulnerabilidades críticas tiene el agente 001?"
  • "Busca alertas de rootkit en las últimas 24 horas"
  • "¿Cuál es el estado de salud del cluster OpenSearch?"
  • "Dame el resumen de todos los agentes"

🛠️ Desarrollo local

# Instalar dependencias
pip install -r requirements.txt

# Ejecutar en modo HTTP (recomendado)
python server.py http 8090 127.0.0.1

# Ejecutar en modo stdio
python server.py stdio

📁 Estructura del proyecto

wazuh-mcp/
├── server.py              # Servidor MCP principal (17 tools núcleo + registro de extendidas)
├── wazuh_tools/           # 84 tools extendidas en 21 dominios + 11 prompts MCP
│   ├── __init__.py        #   Orquestador: register_all() con proxy de prefijos/colisiones
│   ├── compat.py          #   Clientes async con pool, JWT auto-refresh y certificados
│   ├── helpers.py         #   trim_alert, trim_vuln, time_window...
│   ├── prompts.py         #   11 prompts de workflows guiados
│   ├── alerts.py, fim.py, threat_hunting.py, incidents.py, ...  (21 módulos)
│   ├── LICENSE            #   Apache-2.0 del proyecto original
│   └── NOTICE.md          #   Atribución y lista de adaptaciones
├── mcp_wazuh.py           # Cliente MCP alternativo (compatible mcporter)
├── direct_api.py          # API HTTP directa para n8n
├── http_wrapper.py        # Wrapper HTTP para herramientas MCP
├── Dockerfile             # Imagen Docker
├── docker-compose.yml     # Despliegue con Docker Compose
├── requirem

…

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [luislopezsanchez](https://github.com/luislopezsanchez)
- **Source:** [luislopezsanchez/wazuh-mcp-server](https://github.com/luislopezsanchez/wazuh-mcp-server)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.