Skip to main content

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-15m ou 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 passa and/or/not para maiúsculas fora de aspas: sem isso, a: x and b: y virava 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, usa search_after por campo_tempo e descarta os _id repetidos na virada da página. Com documentos demais no mesmo timestamp, dá erro e pede es_<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)

Source distribution for mcp-elk 1.0.0
File Size Uploaded
mcp_elk-1.0.0.tar.gz 14.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mcp-elk 1.0.0
File Interpreter ABI Platform
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}

Release history Release notifications | RSS feed

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page