mcp-elk
Servidor MCP de leitura para o ELK (Elasticsearch + Kibana): busca, contagem com agrupamento, consultas prontas do Kibana e exportação CSV. É agnóstico: índice, campos (ex.: sistema, categoria) e consultas do projeto chegam como parâmetro.
Credenciais e servidores
| SO | Arquivo |
|---|---|
| Linux/Mac | ~/.config/mcp-elk/elk.properties |
| Windows | %APPDATA%\mcp-elk\elk.properties |
Para usar outro caminho, defina a variável de ambiente MCP_ELK_CONFIG.
[DEFAULT]
user = SEU_USUARIO
password = SUA_SENHA
prod = https://logs.SEU-SERVIDOR
homol = https://hlogs.SEU-SERVIDOR
dev = https://dlogs.SEU-SERVIDOR
prod, homol e dev são as URLs do Kibana; só prod é obrigatória. Opcionalmente, es_prod, es_homol e
es_dev são as URLs do Elasticsearch direto: quando presentes, o MCP usa as APIs REST oficiais (_search,
_field_caps, PIT). Sem elas, a busca passa pelo Kibana em POST /internal/search/es, uma API interna do Kibana e
o primeiro ponto a revalidar num upgrade.
Certificados: o MCP confia nas CAs instaladas na máquina (no Windows, as do repositório do Windows) e, se existir,
em elk-bundle.pem, na mesma pasta do elk.properties: a cadeia PEM do Kibana, quando a CA
não estiver instalada. REQUESTS_CA_BUNDLE também funciona. Se o certificado não for aceito, a tool devolve uma mensagem
dizendo onde gravar a cadeia. A sessão aceita as cifras padrão do OpenSSL, porque alguns Kibana só oferecem
AES256-SHA256, que a lista do Python exclui.
Instalação
Publicado no PyPI; requer o uv (uvx no PATH).
No cliente MCP (mcp.json):
{
"mcpServers": {
"elk": {
"type": "stdio",
"command": "uvx",
"args": ["mcp-elk@latest"],
"env": { "UV_SYSTEM_CERTS": "true" }
}
}
}
UV_SYSTEM_CERTS faz o uvx usar as CAs da máquina para baixar o pacote (proxy corporativo).
Desenvolvimento:
uv sync
uv run pytest
uv run mcp dev mcp_elk/server.py # MCP Inspector
Tools (só leitura)
Parâmetros comuns:
ambiente: prod/produção (padrão), homol/homologação/hml ou dev/desenvolvimento;inicio/fim:now-15mou ISO 8601.inicioé obrigatório;campo_tempo: padrão@timestamp.
| Tool | Para quê |
|---|---|
elk_buscar_logs(indice, inicio, consulta?, campos?, filtros?, limite≤100, retornar?) |
Investigar: itens achatados ({"a.b": v}), textos cortados em 2000 caracteres |
elk_contar(..., agrupar_por?, top=10) |
Dimensionar; os valores mais frequentes de um campo |
elk_exportar_csv(..., arquivo, retornar?, max_linhas=100000) |
Volume grande: pagina e grava o CSV em disco, sem passar documentos pela conversa |
elk_listar_consultas(busca?, espaco?, limite=50) |
Buscas salvas do Discover e saved queries do Kibana (todos os spaces, ou só espaco), com consulta, filtros (DSL) e indice prontos para reuso |
elk_listar_indices(busca?, espaco?) |
Data views (padrão de índice e campo de tempo) |
elk_listar_campos(indice, busca?) |
Campos, tipo e se são agregáveis |
consultaé Lucene (query_string):campo:valor AND msg:*timeout*. O KQL do Kibana é convertido no navegador e o ES 8.15 não o entende. Por isso o MCP passaand/or/notpara maiúsculas fora de aspas: sem isso,a: x and b: yvirava OR e trazia centenas de vezes mais documentos.campo:{...}aninhado continua sem suporte.campos= filtros exatos{campo: valor}(term);filtros= Query DSL crua.- Exportação: com ES direto, usa PIT +
search_after(consistente). Só com o Kibana, usasearch_afterporcampo_tempoe descarta os_idrepetidos na virada da página. Com documentos demais no mesmo timestamp, dá erro e pedees_<ambiente>. A página cresce para acomodar os documentos repetidos, e o erro só aparece quando passa de 10.000 documentos no mesmo timestamp.
Metadata
Release files for mcp-elk 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mcp_elk-1.0.0.tar.gz | 14.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcp_elk-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.9 kB
Release files / mcp_elk-1.0.0.tar.gz
| Download URL | mcp_elk-1.0.0.tar.gz |
|---|---|
| Size | 14.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bba6913d3be44b20c4d89fb101322ff60777c1c53e9130e4684483acc6fa037b
|
|
BLAKE2b-256 checksum How to use checksums |
96db15f5717561f412bc2fbfb957631254d12ae414b7735620154b79439394ee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / mcp_elk-1.0.0-py3-none-any.whl
| Download URL | mcp_elk-1.0.0-py3-none-any.whl |
|---|---|
| Size | 12.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f5929984a7dccc7d537f48893ba7bac81db97affca4fbdb65759c26603a7fc70
|
|
BLAKE2b-256 checksum How to use checksums |
4834b0622a81c1fe6716d743daad13ac51bc4747d8a110fd3d2d7612289afa79
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|