Elasticsearch Security Solution

Un servidor de Elasticsearch enfocado en seguridad y análisis de amenazas. Requiere una licencia válida de Elasticsearch (de prueba, platino o empresarial) para la conexión.

Documentación

Servidor MCP de Elasticsearch

npm version Downloads Ask DeepWiki

Solución Mejorada del Servidor MCP de Elasticsearch - Enfoque en Seguridad y Análisis de Amenazas

Esta es una solución profesional enfocada en seguridad, mantenida por TocharianOU. Permite una interacción integral con todas las APIs de Elasticsearch, optimizada específicamente para análisis de seguridad, detección de amenazas e investigación de incidentes. Las características incluyen monitoreo avanzado de seguridad, detección de anomalías, caza de amenazas, análisis de causa raíz y capacidades integrales de auditoría.

Características Clave de Seguridad:

  • Detección de amenazas en tiempo real y monitoreo de seguridad
  • Aprendizaje automático avanzado para detección de anomalías
  • Análisis de causa raíz y seguimiento de cadenas de ataque
  • Investigación de incidentes de seguridad y análisis forense
  • Monitoreo de cumplimiento e informes de auditoría

Nota: Esta solución está diseñada para profesionales de seguridad, equipos SOC y analistas de amenazas.

Conéctese a sus datos de Elasticsearch directamente desde cualquier Cliente MCP (como Claude Desktop) utilizando el Protocolo de Contexto de Modelo (MCP). Interactúe con sus datos de seguridad de Elasticsearch mediante consultas en lenguaje natural para análisis avanzado de amenazas y respuesta a incidentes.

Requisitos Previos

  • Una instancia de Elasticsearch
  • Credenciales de autenticación de Elasticsearch (clave API o nombre de usuario/contraseña)
  • Cliente MCP (por ejemplo, Claude Desktop) o cliente HTTP para acceso remoto

Soporte Multi-Versión de Elasticsearch

Soporta automáticamente Elasticsearch 5.x - 9.x con detección inteligente de versión:

VersiónEstadoClienteNotas
ES 5.x✅5.6.22EOL - Solo herramientas básicas
ES 6.x✅6.8.8EOL - ILM disponible (6.6+)
ES 7.x✅7.17.14LTS - Funciones completas
ES 8.x✅8.19.1Recomendado - Últimas funciones, ES|QL (8.11+)
ES 9.x+✅Retroceso automáticoPreparado para el futuro

Características Clave:

  • Detección automática de versión - No se necesita configuración manual
  • Selección inteligente de cliente - Carga el cliente correcto para su versión de ES
  • Funciones adaptativas - Desactiva herramientas no compatibles (por ejemplo, Data Streams en ES < 7.9, ES|QL en ES < 8.11)
  • Optimizaciones específicas de versión - Maneja las diferencias de API de manera transparente

Qué sucede:

Connect → Detect ES version → Load matching client → Register compatible tools

El Marco de Consultas (v0.9.0)

Desde la v0.9.0, el servidor incluye un marco de consultas: una capa determinista entre el modelo de IA y su clúster. La filosofía de diseño es simple:

El modelo dirige; el marco conoce. La intención ("encontrar inicios de sesión fallidos por usuario") pertenece al modelo. La corrección (nombres de campos reales, capacidad de agregación, peculiaridades de versión) pertenece al marco.

Lo que esto significa en la práctica — a nivel de principios, no de detalles internos:

  • La verdad en vivo supera al conocimiento empaquetado, que supera a la memoria del modelo. Cada consulta se verifica contra las capacidades reales de campos del clúster antes de ejecutarse. Un vocabulario ECS (Esquema Común de Elasticsearch) empaquetado proporciona significado; el clúster en vivo proporciona existencia. La memoria del propio modelo nunca se considera confiable.
  • Los errores inequívocos se corrigen silenciosamente; los ambiguos se convierten en orientación. El ejemplo clásico: un sufijo .keyword espurio en mapeos ECS modernos se corrige automáticamente (y se informa la corrección); un campo desconocido bloquea la consulta condenada y devuelve los campos reales más cercanos en lugar de un error del proveedor.
  • El conocimiento de campos permanece fuera de la ventana de contexto. El diccionario ECS completo (miles de campos) reside en la memoria del proceso. El modelo recupera solo el puñado que necesita, bajo demanda, mediante lookup_fields.
  • Cada fallo debe ser accionable. Los errores crudos de Elasticsearch se reescriben con sugerencias en vivo y consejos sobre nomenclatura de índices (data stream vs. nomenclatura heredada de Beats, índices internos que deben accederse mediante APIs de Kibana, etc.).
  • El modelo necesita cero conocimiento de versión. Las eras de nomenclatura, las diferencias de API y las diferencias de estilo de mapeo (subcampo heredado text + .keyword vs. keyword simple moderno) son absorbidas completamente por el marco. El mismo modelo se comporta de manera idéntica contra ES 5.6 y ES 9.x — verificado por una matriz de pruebas de versión que cubre nueve versiones de transición (5.6 → 9.0).
  • Siempre existe una vía de escape. La validación se puede omitir por llamada (skip_lint) cuando el modelo sabe más — por ejemplo, campos de tiempo de ejecución definidos fuera de la consulta. El marco asiste; nunca aprisiona.

Conexión SSL/TLS

Para conectarse a Elasticsearch con un certificado autofirmado o en un entorno de prueba, puede establecer la siguiente variable de entorno:

NODE_TLS_REJECT_UNAUTHORIZED=0

⚠️ Esto desactiva la validación de certificados SSL de Node.js. Úselo solo en entornos de desarrollo o pruebas. Para producción, use siempre un certificado CA de confianza.

Instalación y Configuración

Instale (o ejecute) el servidor, apúntelo a su clúster mediante variables de entorno, regístrelo en su cliente MCP y luego simplemente inicie una conversación — el servidor se conecta y registra las herramientas que su versión de ES soporta.

Opciones de Configuración

El Servidor MCP de Elasticsearch admite las siguientes opciones de configuración:

Configuración de Elasticsearch

Variable de EntornoDescripciónRequerido
ES_URLURL de su instancia de ElasticsearchSí
ES_API_KEYClave API de Elasticsearch para autenticaciónNo
ES_USERNAMENombre de usuario de Elasticsearch para autenticación básicaNo
ES_PASSWORDContraseña de Elasticsearch para autenticación básicaNo
ES_CA_CERTRuta al certificado CA personalizado para SSL/TLS de ElasticsearchNo
NODE_TLS_REJECT_UNAUTHORIZEDEstablecer a 0 para desactivar la validación de certificados SSLNo

Configuración del Modo de Transporte (NUEVO en v0.3.0)

Variable de EntornoDescripciónPredeterminadoValores
MCP_TRANSPORTSelección del modo de transportestdiostdio, http
MCP_HTTP_PORTPuerto del servidor HTTP (cuando se usa transporte HTTP)30001-65535
MCP_HTTP_HOSTHost del servidor HTTP (cuando se usa transporte HTTP)localhostCualquier host válido

Detalles del Modo de Transporte:

  • Modo Stdio (predeterminado): Para Claude Desktop y clientes MCP locales
  • Modo HTTP Streamable: Se ejecuta como un servidor HTTP independiente para acceso remoto, integración de API y aplicaciones web

Inicio Rápido

Opción 1: Instalación mediante NPM (Recomendada)

  1. Instalar globalmente mediante NPM

    npm install -g @tocharianou/elasticsearch-mcp
    
  2. Ejecutar directamente

    npx @tocharianou/elasticsearch-mcp
    

Opción 2: Lanzamiento de GitHub (Paquete Independiente)

  1. Descargar el paquete de lanzamiento

    • Vaya a Lanzamientos de GitHub
    • Descargue el archivo .tar.gz más reciente y sus archivos de suma de verificación (.sha256 y .sha512)
  2. Verificar la integridad del paquete

    shasum -a 256 -c elasticsearch-mcp-v*.tar.gz.sha256
    # Should output: elasticsearch-mcp-v*.tar.gz: OK
    
  3. Extraer y usar

    mkdir elasticsearch-mcp && cd elasticsearch-mcp
    tar -xzf ../elasticsearch-mcp-v*.tar.gz
    
    # Run with your Elasticsearch credentials
    ES_URL=https://localhost:9200 ES_API_KEY=your-key node dist/index.js
    

Opción 3: Instalación desde el Código Fuente

  1. Clonar el repositorio

    git clone https://github.com/TocharianOU/elasticsearch-mcp.git
    cd elasticsearch-mcp
    
  2. Instalar dependencias

    npm install
    
  3. Compilar el proyecto

    npm run build
    
  4. Configurar la aplicación Claude Desktop

    • Abra Claude Desktop App
    • Vaya a Configuración > Desarrollador > Servidores MCP
    • Haga clic en Edit Config y agregue un nuevo Servidor MCP con la siguiente configuración:

    Para instalación mediante NPM:

    {
      "mcpServers": {
        "elasticsearch-mcp-server": {
          "command": "npx",
          "args": [
            "@tocharianou/elasticsearch-mcp"
          ],
          "env": {
            "ES_URL": "your-elasticsearch-url",
            "ES_USERNAME": "elastic",
            "ES_PASSWORD": "your_pass",
            "NODE_TLS_REJECT_UNAUTHORIZED": "0"
          }
        }
      }
    }
    

    Para instalación desde el código fuente:

    {
      "mcpServers": {
        "elasticsearch-mcp-server-local": {
          "command": "node",
          "args": [
            "/path/to/your/elasticsearch-mcp/dist/index.js"
          ],
          "env": {
            "ES_URL": "your-elasticsearch-url",
            "ES_USERNAME": "elastic",
            "ES_PASSWORD": "your_pass",
            "NODE_TLS_REJECT_UNAUTHORIZED": "0"
          }
        }
      }
    }
    
  5. Depuración con MCP Inspector (opcional)

    ES_URL=your-elasticsearch-url ES_USERNAME=elastic ES_PASSWORD=your_pass npm run inspector
    

Notas de Instalación e Integración

Si npm install -g se comporta mal:

  • Errores de permisos (EACCES) en la instalación global — no sudo. O bien omita la instalación global por completo y deje que su cliente MCP ejecute npx @tocharianou/elasticsearch-mcp (npx obtiene bajo demanda), o establezca un prefijo a nivel de usuario: npm config set prefix ~/.npm-global y agréguelo a su PATH.
  • Registro lento o bloqueado — use un espejo solo para la instalación: npm install -g @tocharianou/elasticsearch-mcp --registry=https://registry.npmmirror.com.
  • Versión de Node — requiere Node 18+ (node --version). Node más antiguo falla al inicio con errores de ESM/fetch, no en el momento de la instalación.
  • Inicio en frío de npx — la primera ejecución de npx descarga el paquete; si su cliente MCP agota el tiempo de espera en la primera conexión, ejecute npx @tocharianou/elasticsearch-mcp una vez en una terminal para calentar la caché y luego reconéctese.
  • Hosts completamente sin conexión — use el paquete comprimido de GitHub Release (Opción 2) y apunte su cliente a node /path/to/dist/index.js; no se obtiene nada en tiempo de ejecución.

Claude Desktop — Configuración → Desarrollador → Servidores MCP → Editar Configuración, luego agregue el bloque JSON mostrado arriba. Reinicie la aplicación después de editar; el servidor aparece en la lista de herramientas de una nueva conversación.

Claude Code (CLI) — registre el servidor por proyecto o globalmente:

claude mcp add elasticsearch \
  -e ES_URL=https://your-es:9200 -e ES_API_KEY=your-key \
  -- npx @tocharianou/elasticsearch-mcp

Cualquier otro cliente MCP / integración de plataforma — ejecute en modo HTTP (MCP_TRANSPORT=http, ver más abajo) y apunte el cliente a http://host:port/mcp; esta es la forma recomendada para plataformas contenedorizadas, una instancia de servidor por conexión de clúster.

Higiene de credenciales — las variables de entorno terminan en el archivo de configuración de su cliente en texto plano. Prefiera una clave API de solo lectura y con alcance limitado (ver Control de Acceso de Elasticsearch más abajo) en lugar de credenciales de superusuario.

Método 3: Modo HTTP Streamable (NUEVO en v0.3.0)

Ejecute el servidor como un servicio HTTP independiente para acceso remoto e integración de API:

# Start HTTP server (default port 3000)
MCP_TRANSPORT=http \
ES_URL=your-elasticsearch-url \
ES_USERNAME=elastic \
ES_PASSWORD=your_pass \
npx @tocharianou/elasticsearch-mcp

# Or with custom port and host
MCP_TRANSPORT=http \
MCP_HTTP_PORT=9000 \
MCP_HTTP_HOST=0.0.0.0 \
ES_URL=your-elasticsearch-url \
ES_USERNAME=elastic \
ES_PASSWORD=your_pass \
npx @tocharianou/elasticsearch-mcp

Características del Modo HTTP Streamable:

  • Expone el servidor MCP en el endpoint http://host:port/mcp
  • Verificación de salud disponible en http://host:port/health
  • Gestión de conexiones basada en sesiones
  • Admite tanto POST (solicitudes JSON-RPC) como GET (flujos SSE)
  • Compatible con cualquier cliente HTTP o SDK MCP

Cualquier cliente compatible con MCP (o JSON-RPC simple sobre HTTP) puede hablar con el endpoint /mcp: inicialice una vez, mantenga el encabezado mcp-session-id devuelto en solicitudes posteriores de tools/list / tools/call. Use /health para verificaciones de actividad.

Herramientas Disponibles

HerramientaDescripciónVersión Mínima
list_indicesListar índices con filtro de patrón, filtro de salud, ordenamiento y resumen consciente de tokensES 5.x+
get_mappingsObtener mapeos de campos con modos plano/árbol/crudo, filtrado de campos y comparación multi-índiceES 5.x+
es_searchBúsqueda completa de Query DSL con resaltado automático, más validación/corrección automática de campos del marcoES 5.x+
lookup_fieldsEncontrar los nombres de campo correctos: vocabulario ECS intersectado con los campos reales del índiceES 5.x+
execute_es_apiEjecutar cualquier endpoint REST de ES directamente (GET/POST/PUT/DELETE/HEAD)ES 5.x+
get_shardsInformación de shards con análisis de salud, detección de problemas y recomendacionesES 5.x+
list_data_streamsListar y analizar Data Streams con información de ILM y detalles de índices de respaldoES 7.9+
esql_queryEjecutar consultas basadas en tuberías de ES|QL con validación de campos del marco y salida tabularES 8.11+

Las herramientas no compatibles con la versión de su clúster se omiten automáticamente al inicio. es_search y esql_query aceptan skip_lint: true para omitir la validación del marco en casos extremos (por ejemplo, campos de tiempo de ejecución definidos fuera de la consulta).

Herramienta de Consulta ES|QL (esql_query)

ES|QL es el lenguaje de consulta moderno basado en tuberías de Elasticsearch, ideal para análisis y exploración de datos sin JSON DSL complejo.

Consultas de ejemplo:

FROM logs-* | WHERE level == "error" | STATS count = COUNT(*) BY service | SORT count DESC | LIMIT 20
FROM metrics-* | WHERE @timestamp > NOW() - 1 hour | STATS avg_cpu = AVG(cpu.usage) BY host.name
FROM auditbeat-* | WHERE event.action == "user_login" AND event.outcome == "failure" | LIMIT 50

Parámetros:

  • query — la cadena ES|QL (obligatorio)
  • params — parámetros posicionales que reemplazan los marcadores ? (opcional)
  • include_types — incluir información de tipo de columna en la salida (opcional, predeterminado false)
  • break_token_rule — omitir el límite de tokens para resultados grandes (opcional, predeterminado false)
  • skip_lint — omitir la validación de campos del harness (opcional, predeterminado false)

Registrado automáticamente solo en clústeres ES 8.11+.

Contribuciones

¡Agradecemos las contribuciones de la comunidad! Para obtener detalles sobre cómo contribuir, consulte Directrices de contribución.

Cómo Funciona

  1. El cliente MCP (el modelo de IA) decide qué buscar y llama a una herramienta.
  2. El harness valida la solicitud contra el clúster en vivo — corrigiendo lo que no es ambiguo, bloqueando lo que fallaría y traduciendo errores en orientación.
  3. Los resultados regresan limitados por tokens y preprocesados (destacados, tablas, resúmenes de agregaciones), para que las investigaciones largas permanezcan dentro de los límites de contexto.

Ejemplos de Análisis de Seguridad

[!TIP] Aquí hay consultas centradas en seguridad que puede probar con su Cliente MCP.

Detección de Amenazas:

  • "Analizar intentos de ataques de fuerza bruta en las últimas 24 horas"
  • "Detectar comportamiento de inicio de sesión anormal y direcciones IP sospechosas en el sistema"
  • "Identificar patrones de ataques de inyección SQL y solicitudes maliciosas"
  • "Descubrir firmas de ataques DDoS y anomalías de tráfico en flujos de red"

Análisis de Causa Raíz:

  • "Rastrear la cadena de ataque completa y el alcance del impacto para incidentes de seguridad específicos"
  • "Analizar causas raíz y rutas de propagación de fallos del sistema"
  • "Identificar fuentes de violación de datos e información sensible involucrada"
  • "Investigar incidentes de abuso de privilegios de usuario con cronología y registros de operaciones"

Inteligencia de Amenazas:

  • "Crear modelos de aprendizaje automático para detectar ataques de día cero y amenazas desconocidas"
  • "Establecer líneas base de comportamiento e identificar actividades que se desvían de los patrones normales"
  • "Analizar niveles de amenaza e historial de ataques de dominios maliciosos y direcciones IP"
  • "Detectar características de comportamiento y patrones de ataque de Amenazas Persistentes Avanzadas (APT)"

Monitoreo en Tiempo Real:

  • "Monitorear amenazas activas y ataques en curso en el sistema actual"
  • "Detectar patrones anormales de acceso a datos y comportamientos de escalada de privilegios"
  • "Descubrir comunicaciones de red sospechosas y actividades de exfiltración de datos"
  • "Identificar causas de seguridad del consumo anormal de recursos del sistema y degradación del rendimiento"

Mejores Prácticas de Seguridad

[!WARNING] Evite usar privilegios de administrador del clúster. Cree claves API dedicadas con alcance limitado y aplique control de acceso de grano fino a nivel de índice para prevenir el acceso no autorizado a los datos.

Verificación de Integridad del Paquete

Al descargar paquetes de lanzamiento, verifique siempre las sumas de verificación para garantizar la integridad:

# Verify SHA256 checksum
shasum -a 256 -c elasticsearch-mcp-vX.Y.Z.tar.gz.sha256

# Verify SHA512 checksum
shasum -a 512 -c elasticsearch-mcp-vX.Y.Z.tar.gz.sha512

Esto protege contra:

  • Descargas corruptas
  • Paquetes manipulados
  • Ataques de intermediario (man-in-the-middle)

Control de Acceso a Elasticsearch

Puede crear una clave API de Elasticsearch dedicada con permisos mínimos para controlar el acceso a sus datos:

{
  "name": "es-mcp-server-access",
  "role_descriptors": {
    "mcp_server_role": {
      "cluster": [
        "monitor"
      ],
      "indices": [
        {
          "names": [
            "index-1",
            "index-2",
            "index-pattern-*"
          ],
          "privileges": [
            "read",
            "view_index_metadata"
          ]
        }
      ]
    }
  }
}

Licencia

Este proyecto está licenciado bajo la Licencia Apache 2.0.

Solución de Problemas

  • Asegúrese de que su configuración de MCP sea correcta.
  • Verifique que su URL de Elasticsearch sea accesible desde su máquina.
  • Compruebe que sus credenciales de autenticación (clave API o nombre de usuario/contraseña) tengan los permisos necesarios.
  • Si usa SSL/TLS con una CA personalizada, verifique que la ruta del certificado sea correcta y que el archivo sea legible.
  • Revise la salida del terminal para ver mensajes de error.

Si encuentra problemas, no dude en abrir un issue en el repositorio de GitHub.