Elasticsearch Security Solution
Um servidor Elasticsearch focado em segurança e análise de ameaças. Requer uma licença válida do Elasticsearch (trial, platinum ou enterprise) para conexão.
Documentação
Servidor MCP Elasticsearch
Solução Aprimorada do Servidor MCP Elasticsearch - Foco em Segurança e Análise de Ameaças
Esta é uma solução profissional focada em segurança, mantida por TocharianOU. Ela permite interação abrangente com todas as APIs do Elasticsearch, especificamente otimizada para análise de segurança, detecção de ameaças e investigação de incidentes. Os recursos incluem monitoramento de segurança avançado, detecção de anomalias, caça a ameaças, análise de causa raiz e capacidades abrangentes de auditoria.
Principais Recursos de Segurança:
- Detecção de ameaças em tempo real e monitoramento de segurança
- Aprendizado de máquina avançado para detecção de anomalias
- Análise de causa raiz e rastreamento de cadeia de ataques
- Investigação de incidentes de segurança e perícia digital
- Monitoramento de conformidade e relatórios de auditoria
Nota: Esta solução requer uma licença válida do Elasticsearch (trial, platinum ou enterprise) e é projetada para profissionais de segurança, equipes SOC e analistas de ameaças.
Conecte-se diretamente aos seus dados do Elasticsearch a partir de qualquer Cliente MCP (como Claude Desktop) usando o Model Context Protocol (MCP). Interaja com seus dados de segurança do Elasticsearch por meio de consultas em linguagem natural para análise avançada de ameaças e resposta a incidentes.
Pré-requisitos
- Uma instância do Elasticsearch
- Uma licença válida do Elasticsearch (trial, platinum ou enterprise) é obrigatória.
- Credenciais de autenticação do Elasticsearch (chave de API ou nome de usuário/senha)
- Cliente MCP (ex.: Claude Desktop) ou cliente HTTP para acesso remoto
⚠️ Este projeto requer que seu cluster Elasticsearch tenha uma licença válida. Se você não tiver uma licença, pode ativar uma licença trial conforme mostrado abaixo.
Suporte Multi-versão do Elasticsearch
Suporta automaticamente Elasticsearch 5.x - 9.x com detecção inteligente de versão:
| Versão | Status | Cliente | Observações |
|---|---|---|---|
| ES 5.x | ✅ | 5.6.22 | EOL - Apenas ferramentas básicas |
| ES 6.x | ✅ | 6.8.8 | EOL - ILM disponível (6.6+) |
| ES 7.x | ✅ | 7.17.14 | LTS - Recursos completos |
| ES 8.x | ✅ | 8.19.1 | Recomendado - Recursos mais recentes, ES|QL (8.11+) |
| ES 9.x+ | ✅ | Fallback automático | Pronto para o futuro |
Principais Recursos:
- Detecção automática de versão - Nenhuma configuração manual necessária
- Seleção inteligente de cliente - Carrega o cliente certo para a sua versão do ES
- Recursos adaptativos - Desativa ferramentas não suportadas (ex.: Data Streams em ES < 7.9, ES|QL em ES < 8.11)
- Otimizações específicas de versão - Lida com diferenças de API de forma transparente
O que acontece:
Connect → Detect ES version → Load matching client → Register compatible tools
Conexão SSL/TLS
Para conectar ao Elasticsearch com um certificado autoassinado ou em ambiente de teste, você pode definir a seguinte variável de ambiente:
NODE_TLS_REJECT_UNAUTHORIZED=0
⚠️ Isso desativa a validação de certificado SSL do Node.js. Use apenas em ambientes de desenvolvimento ou teste. Para produção, sempre use um certificado CA confiável.
Instalação e Configuração
- Inicie uma Conversa
- Abra uma nova conversa no seu Cliente MCP
- O servidor MCP deve conectar automaticamente
- Agora você pode fazer perguntas sobre seus dados do Elasticsearch
Opções de Configuração
O Servidor MCP Elasticsearch suporta as seguintes opções de configuração:
Configuração do Elasticsearch
| Variável de Ambiente | Descrição | Obrigatório |
|---|---|---|
ES_URL | URL da sua instância do Elasticsearch | Sim |
ES_API_KEY | Chave de API do Elasticsearch para autenticação | Não |
ES_USERNAME | Nome de usuário do Elasticsearch para autenticação básica | Não |
ES_PASSWORD | Senha do Elasticsearch para autenticação básica | Não |
ES_CA_CERT | Caminho para certificado CA personalizado para SSL/TLS | Não |
NODE_TLS_REJECT_UNAUTHORIZED | Defina como 0 para desativar a validação de certificado SSL | Não |
Configuração do Modo de Transporte (NOVO na v0.3.0)
| Variável de Ambiente | Descrição | Padrão | Valores |
|---|---|---|---|
MCP_TRANSPORT | Seleção do modo de transporte | stdio | stdio, http |
MCP_HTTP_PORT | Porta do servidor HTTP (ao usar transporte HTTP) | 3000 | 1-65535 |
MCP_HTTP_HOST | Host do servidor HTTP (ao usar transporte HTTP) | localhost | Qualquer host válido |
Detalhes dos Modos de Transporte:
- Modo Stdio (padrão): Para Claude Desktop e clientes MCP locais
- Modo HTTP Streamable: Roda como um servidor HTTP autônomo para acesso remoto, integração de API e aplicações web
Início Rápido
Opção 1: Instalação via NPM (Recomendado)
-
Instale globalmente via NPM
npm install -g @tocharianou/elasticsearch-mcp -
Execute diretamente
npx @tocharianou/elasticsearch-mcp
Opção 2: Release no GitHub (Pacote Autônomo)
-
Baixe o pacote de release
- Vá para GitHub Releases
- Baixe o arquivo mais recente
.tar.gze seus arquivos de checksum (.sha256e.sha512)
-
Verifique a integridade do pacote
shasum -a 256 -c elasticsearch-mcp-v*.tar.gz.sha256 # Should output: elasticsearch-mcp-v*.tar.gz: OK -
Extraia e use
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
Opção 3: Instalação a partir do Código-fonte
-
Clone o repositório
git clone https://github.com/TocharianOU/elasticsearch-mcp.git cd elasticsearch-mcp -
Instale as Dependências
npm install -
Compile o Projeto
npm run build -
Configure o App do Claude Desktop
- Abra o Claude Desktop App
- Vá para Configurações > Desenvolvedor > Servidores MCP
- Clique em
Edit Confige adicione um novo Servidor MCP com a seguinte configuração:
Para Instalação via 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 Instalação a partir do Código-fonte:
{ "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" } } } } -
Depuração com MCP Inspector
ES_URL=your-elasticsearch-url ES_USERNAME=elastic ES_PASSWORD=your_pass npm run inspectorIsso iniciará o MCP Inspector, permitindo depurar e analisar solicitações. Você deve ver:
Starting MCP inspector... Proxy server listening on port 3000 MCP Inspector is up and running at http://localhost:5173
Método 3: Modo HTTP Streamable (NOVO na v0.3.0)
Execute o servidor como um serviço HTTP autônomo para acesso remoto e integração 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
Recursos do Modo HTTP Streamable:
- Expõe o servidor MCP no endpoint
http://host:port/mcp - Verificação de saúde disponível em
http://host:port/health - Gerenciamento de conexão baseado em sessão
- Suporta tanto POST (solicitações JSON-RPC) quanto GET (streams SSE)
- Compatível com qualquer cliente HTTP ou SDK MCP
Exemplo de uso com cliente HTTP:
// Initialize connection
const response = await fetch('http://localhost:3000/mcp', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
method: 'initialize',
params: {
protocolVersion: '2024-11-05',
capabilities: {},
clientInfo: { name: 'my-client', version: '1.0.0' }
},
id: 1
})
});
const sessionId = response.headers.get('mcp-session-id');
// Subsequent requests include session ID
const toolsResponse = await fetch('http://localhost:3000/mcp', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'mcp-session-id': sessionId
},
body: JSON.stringify({
jsonrpc: '2.0',
method: 'tools/list',
params: {},
id: 2
})
});
// Call a tool (e.g., list_indices)
const indicesResponse = await fetch('http://localhost:3000/mcp', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'mcp-session-id': sessionId
},
body: JSON.stringify({
jsonrpc: '2.0',
method: 'tools/call',
params: {
name: 'list_indices',
arguments: {}
},
id: 3
})
});
Ferramentas Disponíveis
| Ferramenta | Descrição | Versão Mínima |
|---|---|---|
list_indices | Lista índices com filtro de padrão, filtro de saúde, ordenação e resumo ciente de tokens | ES 5.x+ |
get_mappings | Obtém mapeamentos de campos com modos plano/árvore/bruto, filtragem de campos e comparação multi-índice | ES 5.x+ |
es_search | Pesquisa completa com Query DSL e realce automático em campos de texto/vetor | ES 5.x+ |
execute_es_api | Executa qualquer endpoint REST do ES diretamente (GET/POST/PUT/DELETE/HEAD) | ES 5.x+ |
get_shards | Informações de shards com análise de saúde, detecção de problemas e recomendações | ES 5.x+ |
list_data_streams | Lista e analisa Data Streams com informações ILM e detalhes dos índices de apoio | ES 7.9+ |
esql_query | Executa consultas ES|QL baseadas em pipes com saída tabular e suporte a parâmetros | ES 8.11+ |
Ferramentas não suportadas pela versão do seu cluster são automaticamente ignoradas na inicialização.
Ferramenta de Consulta ES|QL (esql_query)
ES|QL é a linguagem de consulta moderna baseada em pipes do Elasticsearch, ideal para análises e exploração de dados sem complexo JSON DSL.
Exemplos de consultas:
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— a string ES|QL (obrigatório)params— parâmetros posicionais que substituem marcadores?(opcional)include_types— incluir informações de tipo de coluna na saída (opcional, padrãofalse)break_token_rule— ignorar limite de tokens para resultados grandes (opcional, padrãofalse)
Registrado automaticamente apenas em clusters ES 8.11+.
Contribuindo
Aceitamos contribuições da comunidade! Para detalhes sobre como contribuir, consulte as Diretrizes de Contribuição.
Como Funciona
- O Cliente MCP analisa sua solicitação e determina quais operações do Elasticsearch são necessárias.
- O servidor MCP se comunica com o ES.
- O Cliente MCP processa os resultados e os apresenta em um formato amigável, incluindo realces, resumos de agregações e insights de anomalias.
Exemplos de Análise de Segurança
[!TIP] Aqui estão consultas focadas em segurança que você pode experimentar com seu Cliente MCP.
Detecção de Ameaças:
- "Analisar tentativas de ataque de força bruta nas últimas 24 horas"
- "Detectar comportamento anormal de login e endereços IP suspeitos no sistema"
- "Identificar padrões de ataque de injeção SQL e solicitações maliciosas"
- "Descobrir assinaturas de ataques DDoS e anomalias de tráfego em fluxos de rede"
Análise de Causa Raiz:
- "Rastrear a cadeia completa de ataque e o escopo do impacto para incidentes de segurança específicos"
- "Analisar causas raiz e caminhos de propagação de falhas do sistema"
- "Identificar fontes de violação de dados e informações sensíveis envolvidas"
- "Investigar incidentes de abuso de privilégios de usuário com linha do tempo e registros de operações"
Inteligência de Ameaças:
- "Criar modelos de aprendizado de máquina para detectar ataques de dia zero e ameaças desconhecidas"
- "Estabelecer linhas de base comportamentais e identificar atividades que se desviam dos padrões normais"
- "Analisar níveis de ameaça e histórico de ataques de domínios e endereços IP maliciosos"
- "Detectar características comportamentais e padrões de ataque de Ameaças Persistentes Avançadas (APT)"
Monitoramento em Tempo Real:
- "Monitorar ameaças ativas e ataques em andamento no sistema atual"
- "Detectar padrões anormais de acesso a dados e comportamentos de escalonamento de privilégios"
- "Descobrir comunicações de rede suspeitas e atividades de exfiltração de dados"
- "Identificar causas de segurança de consumo anormal de recursos do sistema e degradação de desempenho"
Melhores Práticas de Segurança
[!WARNING] Evite usar privilégios de administrador de cluster. Crie chaves de API dedicadas com escopo limitado e aplique controle de acesso fino no nível de índice para impedir acesso não autorizado a dados.
Verificação de Integridade do Pacote
Ao baixar pacotes de release, sempre verifique os checksums para garantir a integridade:
# 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
Isso protege contra:
- Downloads corrompidos
- Pacotes adulterados
- Ataques man-in-the-middle
Controle de Acesso ao Elasticsearch
Você pode criar uma chave de API dedicada do Elasticsearch com permissões mínimas para controlar o acesso aos seus dados:
{
"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"
]
}
]
}
}
}
Licença
Este projeto está licenciado sob a Licença Apache 2.0.
Solução de Problemas
- Certifique-se de que sua configuração MCP está correta.
- Verifique se a URL do seu Elasticsearch está acessível a partir da sua máquina.
- Verifique se suas credenciais de autenticação (chave de API ou nome de usuário/senha) têm as permissões necessárias.
- Se estiver usando SSL/TLS com um CA personalizado, verifique se o caminho do certificado está correto e se o arquivo é legível.
- Observe a saída do terminal para ver mensagens de erro.
Se encontrar problemas, sinta-se à vontade para abrir uma issue no repositório do GitHub.
Executando com uma Licença Trial
Se o seu cluster Elasticsearch não tiver uma licença válida, você pode ativar uma licença trial de 30 dias com o seguinte comando:
curl -X POST -u elastic:your_password \
-k "https://your-es-host:9200/_license/start_trial?acknowledge=true"
- Substitua
your_passwordeyour-es-hostpelas suas credenciais e host reais. - Isso habilitará todos os recursos por 30 dias.
Nota: Este projeto não iniciará se o seu cluster não tiver uma licença válida (trial, platinum, enterprise etc.).