Chronosphere

Busque logs, métricas, traces e eventos da plataforma de observabilidade Chronosphere.

Documentação

Servidor MCP Chronosphere

Servidor MCP para Chronosphere. Oferece ferramentas para buscar logs, métricas, traces, eventos, bem como selecionar entidades.

Este projeto usa semver para versões de lançamento. Ainda não chegamos à versão 1.0, portanto mudanças que quebram compatibilidade podem ocorrer em versões menores.

Configuração do MCP com hosts populares (claude desktop, cursor)

Servidor Remoto

A maneira mais fácil de usar o servidor MCP é usando nosso servidor hospedado remotamente:

Autenticação

Você pode usar um token de API do Chronosphere ou OAuth com o servidor MCP do Chronosphere. Para usar MCP com OAuth, o cliente MCP deve suportar OAuth.

O suporte a OAuth é novo e não foi testado com todos os clientes. Se não funcionar para você, por favor, relate o problema ao suporte do Chronosphere no slack com as seguintes informações:

  1. Cliente MCP que você está usando (ex.: VS code, codex, cursor, etc.)
  2. Quais passos você tomou para tentar a autenticação
  3. Qual erro você está vendo.

Configuração baseada em cabeçalho

Alguns hosts MCP permitem anexar cabeçalhos HTTP personalizados às solicitações enviadas ao servidor MCP. O servidor MCP do Chronosphere suporta os seguintes cabeçalhos voltados ao usuário.

Desabilitar ferramentas (X-Chrono-MCP-Disable-Tools)

Use este cabeçalho para ocultar ferramentas específicas da lista de ferramentas exposta ao seu cliente MCP.

  • Formato: lista separada por vírgulas de nomes de ferramentas MCP (a coluna Nome da Ferramenta na tabela Ferramentas Disponíveis)
  • Exemplo de valor: query_logs_range,render_prometheus_range_query
  • Notas: espaços em branco são ignorados; nomes de ferramentas desconhecidos são ignorados

Habilitar gravações (X-Chrono-MCP-Enable-Writes)

As ferramentas de gravação estão ocultas e não podem ser chamadas por padrão. O operador do servidor deve primeiro permitir gravações com server.tools.enableWrites: true. Clientes HTTP e SSE devem adicionalmente definir este cabeçalho como true; o cabeçalho não pode sobrescrever uma configuração de servidor desabilitada. Outros valores não habilitam gravações.

Stdio não tem cabeçalhos de solicitação, então a configuração do servidor sozinha habilita gravações para esse transporte. As credenciais do Chronosphere usadas pelo servidor ainda devem autorizar a operação subjacente da API.

Cursor/VSCode

{
    "mcpServers": {
        "chronosphere": {
            "url": "https://<org name>.chronosphere.io/api/mcp/mcp",
            "headers": {
                "Authorization": "Bearer <chronosphere api token>",
                "X-Chrono-MCP-Disable-Tools": "<optional list of tools to disable>"
            }
        }
    }
}

Esta configuração deve funcionar para Cursor e VSCode. Deixe de fora a seção headers para usar OAuth em vez de um token de API do Chronosphere. Remova X-Chrono-MCP-Disable-Tools para expor todas as ferramentas.

Mais detalhes para VSCode aqui e Cursor aqui

Claude code

Adicionando o servidor MCP do chronosphere ao claude code

claude mcp add -t http \
  -H "Authorization: Bearer ${CHRONOSPHERE_API_TOKEN}" \
  -H "X-Chrono-MCP-Disable-Tools: <list of tools to disable>" \
  chronosphere "https://${CHRONOSPHERE_ORG_NAME}.chronosphere.io/api/mcp/mcp"

Você pode deixar de fora o cabeçalho Authorization se estiver usando OAuth. Uma vez no claude, digite /mcp e selecione o servidor para fazer login e acionar o fluxo OAuth. Remova o cabeçalho X-Chrono-MCP-Disable-Tools para expor todas as ferramentas.

Mais detalhes aqui

Codex CLI

experimental_use_rmcp_client = true
[mcp_servers.chronosphere]
url = "https://<org_name>.chronosphere.io/api/mcp/mcp"
bearer_token = "<chronosphere api token>"

Para login OAuth, você deve habilitar experimental_use_rmcp_client = true e então executar codex mcp login chronosphere

Mais detalhes aqui

Gemini CLI

CHRONOSPHERE_ORG_NAME=<your org>
CHRONOSPHERE_API_TOKEN=<your api token>
gemini mcp add chronosphere "https://${CHRONOSPHERE_ORG_NAME}.chronosphere.io/api/mcp/mcp" \
  -H "Authorization: Bearer ${CHRONOSPHERE_API_TOKEN}" \
  -H "X-Chrono-MCP-Disable-Tools: <list of tools to disable>"

# Drop the -H authorization header option if you want to use OAuth.

Veja documentação do Gemini MCP para mais informações.

Compilando a partir do código-fonte

Primeiro compile o binário

make chronomcp
{
  "mcpServers": {
    "chronosphere-mcp": {
      "command": "<PATH/TO/REPO>/bin/chronomcp",
      "args": [
        "-c",
        "<PATH/TO/REPO>/config.yaml"
      ],
      "env": {
        "CHRONOSPHERE_ORG_NAME": "<your org here>",
        "CHRONOSPHERE_API_TOKEN": "<your api token here>"
      }
    }
  }
}

Desenvolvimento

Executando o servidor

Autenticação no Chronosphere

Este servidor MCP usa os mesmos métodos de autenticação do chronoctl. Por padrão, o Makefile espera que o token de API esteja armazenado em .chronosphere_api_token.

Execute o servidor mcp

make run-chronomcp CHRONOSPHERE_ORG_NAME=<your org here> CHRONOSPHERE_API_TOKEN=<your api token here>

Depurando Ferramentas MCP

O projeto MCP fornece um inspetor útil para chamar diretamente as APIs das ferramentas. Para usar:

  1. Inicie o servidor MCP com transporte http transmissível make run-chronomcp CONFIG_FILE=./config.http.yaml CHRONOSPHERE_ORG_NAME=<your org here>
  2. Execute npx @modelcontextprotocol/inspector node build/index.js.
  3. Abra http://localhost:6274/#resources, preencha http://0.0.0.0:8081/mcp na URL, com tipo de transporte Streamable HTTP.

Ferramentas Disponíveis

GrupoNome da FerramentaDescrição
configapiget_classic_dashboardObter recurso classic-dashboards
configapiget_dashboardObter recurso dashboards
configapiget_drop_ruleObter recurso drop-rules
configapiget_mapping_ruleObter recurso mapping-rules
configapiget_monitorObter recurso monitors
configapiget_notification_policyObter recurso notification-policies
configapiget_recording_ruleObter recurso recording-rules
configapiget_rollup_ruleObter recurso rollup-rules
configapiget_sloObter recurso slos
configapilist_classic_dashboardsListar recursos classic-dashboards
configapilist_dashboardsListar recursos dashboards
configapilist_drop_rulesListar recursos drop-rules
configapilist_mapping_rulesListar recursos mapping-rules
configapilist_monitorsListar recursos monitors
configapilist_notification_policiesListar recursos notification-policies
configapilist_recording_rulesListar recursos recording-rules
configapilist_rollup_rulesListar recursos rollup-rules
configapilist_slosListar recursos slos
configapiupdate_dashboardSubstituir um dashboard identificado por slug. Use dry_run para validar sem salvar.
eventsget_events_metadataListar propriedades que você pode consultar em eventos
eventslist_eventsListar eventos de uma determinada consulta
eventslist_events_label_valuesListar valores para um determinado nome de rótulo
logsget_logObter uma mensagem de log completa pelo seu ID. O ID é o identificador único do log.
logsget_log_histogramObter histograma de logs de uma determinada consulta
logslist_log_field_namesListar nomes de campos de logs
logslist_log_field_valuesListar valores de campos de logs
logsquery_logs_rangeExecutar uma consulta de intervalo para logs. Este endpoint retorna logs como timeSeries ou gridData. Pode retornar uma grande quantidade de dados, então tenha cuidado ao colocar o resultado desta direção no contexto. U...
metricslist_prometheus_label_namesRetorna a lista de nomes de rótulos (chaves) disponíveis em métricas que correspondem aos seletores fornecidos. Use esta ferramenta quando precisar descobrir quais rótulos estão disponíveis em métricas ou serviços específicos. Exemp...
metricslist_prometheus_label_valuesRetorna a lista de valores para um nome de rótulo específico, opcionalmente filtrado por seletores. Use esta ferramenta quando souber o nome do rótulo e quiser descobrir quais valores ele tem em suas métricas. Comu...
metricslist_prometheus_seriesRetorna a série temporal completa (conjuntos completos de rótulos com todos os pares chave-valor) que correspondem aos seletores fornecidos. Cada resultado mostra a combinação exata de rótulos para uma série temporal ativa. Use esta fer...
metricslist_prometheus_series_metadata
metricsquery_prometheus_instantAvalia uma consulta instantânea do Prometheus em um único ponto no tempo
metricsquery_prometheus_rangeExecuta uma consulta PromQL do Prometheus em um intervalo de tempo especificado e retorna pontos de dados de série temporal como JSON. Suporta sintaxe PromQL padrão além de funções personalizadas do Chronosphere: - cardinality_estimat...
metricsrender_prometheus_range_queryAvalia uma consulta de expressão do Prometheus em um intervalo de tempo e a renderiza como uma imagem PNG.
metric_usagelist_metric_usages_by_label_nameLista estatísticas de uso de métricas agrupadas por nome de rótulo. Use isto para encontrar rótulos não utilizados ou de alta cardinalidade que poderiam ser descartados.
metric_usagelist_metric_usages_by_metric_nameLista estatísticas de uso de métricas agrupadas por nome de métrica. Use isto para encontrar métricas não utilizadas ou subutilizadas que poderiam ser descartadas para reduzir custos.
metric_usagelist_rule_evaluationsLista problemas de avaliação de regras para monitores e regras de gravação. Use isto para identificar monitores ou regras de gravação que estão falhando ou tendo problemas.
monitorslist_monitor_statusesLista o status atual dos monitores no Chronosphere. Retorna status de monitores com estados de alerta e detalhes opcionais de sinal e série.
traceslist_tracesListar traces de uma determinada consulta

Nota: Para regenerar esta tabela após atualizações de ferramentas, execute: make tools-gen && go run scripts/generate-tools-table.go

Lançamentos

Usamos goreleaser para gerenciar lançamentos.

Você precisará de um token do github e colocá-lo em um arquivo .github_release_token. O token precisa de pelo menos as seguintes permissões

  • content: write
  • issues: write

Para criar um novo lançamento, primeiro crie uma tag:

git tag vX.Y.Z
git push origin vX.Y.Z

Em seguida, execute o seguinte comando para fazer uma execução de teste do lançamento:

```sh
make release-dry-run
# verify the release looks good, then run:
make release