Skip to main content
Glama
ninanung
by ninanung

grafana-mcp

npm version license node

Expone una parte de la API de Grafana como un servidor MCP (Model Context Protocol), centrado en la consulta de registros en lenguaje natural. El objetivo principal: decir "muéstrame los registros de error del servicio api en los últimos 30 minutos" y obtener las líneas de registro reales, sin tener que gestionar LogQL, etiquetas o UID de fuentes de datos manualmente.

Las fuentes de datos de registro, las etiquetas de Loki y el mapeo de un nombre de servicio a su fuente de datos/etiqueta de alojamiento se almacenan en caché en el disco, por lo que las llamadas repetidas omiten escaneos de etiquetas redundantes.

한국어 문서 / Korean README

Instalación y configuración

npx (no requiere instalación)

Añade lo siguiente a ~/.mcp.json.

{
  "mcpServers": {
    "grafana": {
      "command": "npx",
      "args": ["@seungje.jun/grafana-mcp"],
      "env": {
        "GRAFANA_URL": "https://grafana.example.com",
        "GRAFANA_SERVICE_ACCOUNT_TOKEN": "glsa_xxx"
      }
    }
  }
}

Construir desde el código fuente

git clone https://github.com/ninanung/grafana-mcp.git
cd grafana-mcp
npm install
npm run build
{
  "mcpServers": {
    "grafana": {
      "command": "node",
      "args": ["/path/to/grafana-mcp/dist/cli.js"],
      "env": {
        "GRAFANA_URL": "https://grafana.example.com",
        "GRAFANA_SERVICE_ACCOUNT_TOKEN": "glsa_xxx"
      }
    }
  }
}

Reinicia Claude Code para activar las herramientas MCP.

Autenticación

Se requiere una de las siguientes opciones. Se verifican en el orden que aparece a continuación: la primera que esté presente es la que se utiliza.

Variable

Cuándo usar

GRAFANA_SERVICE_ACCOUNT_TOKEN

Grafana 9.1+ (recomendado)

GRAFANA_CLOUD_ACCESS_POLICY_TOKEN

Grafana Cloud

GRAFANA_API_KEY

Claves de API heredadas (obsoletas en 10.x)

GRAFANA_USERNAME + GRAFANA_PASSWORD

Respaldo de autenticación básica

Todos los tokens de tipo bearer se envían como Authorization: Bearer <token>. Al servidor no le importa qué tipo de token sea, solo elige el que esté configurado.

Variables de entorno

Variable

Descripción

GRAFANA_URL

URL del servidor Grafana (modo de instancia única, requerido cuando GRAFANA_INSTANCES no está configurado)

GRAFANA_INSTANCES

(opcional) Matriz JSON para el modo de instancias múltiples. Ejemplo: [{"name":"prod","url":"...","service_account_token":"..."},{"name":"dev","url":"...","api_key":"..."}]. Cuando se configura, pasa instance: "prod" en cualquier llamada de herramienta para elegir el objetivo. Si se omite, vuelve a la primera entrada.

GRAFANA_ORG_ID

(opcional) Se envía como encabezado X-Grafana-Org-Id. Para configuraciones multi-organización.

GRAFANA_TLS_SKIP_VERIFY

(opcional) true / 1 para omitir la verificación TLS (Grafana autofirmado).

GRAFANA_MCP_LOG

(opcional) Nivel de registro: debug, info (predeterminado), warn, error, silent. Los registros van a stderr para evitar corromper el canal stdio de MCP.

GRAFANA_MCP_AUDIT_LOG

(opcional) Ruta del archivo de registro de auditoría. El valor predeterminado es ~/.grafana-mcp/audit.log. Configúralo en off para deshabilitar. Cada línea es un registro JSON con el nombre de la herramienta, argumentos, duración y estado.

GRAFANA_MCP_CACHE

(opcional) Configúralo en off para deshabilitar la caché de registros en disco.

GRAFANA_MCP_CACHE_PATH

(opcional) Ruta del archivo de caché de registros. El valor predeterminado es ~/.grafana-mcp/log-cache.json.

GRAFANA_MCP_CACHE_TTL_DATASOURCES_MS

(opcional) TTL para la caché de la lista de fuentes de datos de registro. Predeterminado 86400000 (24h).

GRAFANA_MCP_CACHE_TTL_LABELS_MS

(opcional) TTL para la caché de claves de etiquetas de Loki. Predeterminado 86400000 (24h).

GRAFANA_MCP_CACHE_TTL_LABEL_VALUES_MS

(opcional) TTL para la caché de valores de etiquetas de Loki. Predeterminado 3600000 (1h).

GRAFANA_MCP_CACHE_TTL_SERVICE_MS

(opcional) TTL para la caché de resolución {service → (ds_uid, label)}. Predeterminado 3600000 (1h).

Related MCP server: Log Analyzer MCP Server

Herramientas

Herramienta

Descripción

self_test

Verificación de diagnóstico: conectividad, versión, autenticación y pruebas de capacidad (list_datasources, proxy_uid, ds_query) con orientación sobre qué argumentos son necesarios

list_datasources

Enumera todas las fuentes de datos configuradas

search_dashboards

Busca paneles por consulta/etiqueta/tipo

get_dashboard

Obtiene el JSON completo de un panel por uid

extract_dashboard_queries

Extrae consultas de panel (LogQL/PromQL) de un panel, con datasource_uid. Úsalo para descubrir argumentos para query_logs.raw_logql desde una URL de panel

list_log_datasources

Enumera solo fuentes de datos de tipo registro (Loki, Elasticsearch, CloudWatch, OpenSearch, Splunk). Almacenado en caché

list_services

Enumera los nombres de servicio detectables desde las etiquetas de Loki: útil antes de llamar a query_logs

query_logs

Consulta registros para un servicio/rango de tiempo/nivel. Detecta automáticamente la fuente de datos de registro y la etiqueta de servicio. Admite raw_logql para selectores avanzados/de etiquetas múltiples. Vuelve a /api/ds/query cuando el proxy de uid no está disponible (Grafana <9.0). Modo de salida: raw / summarize / json

get_log_cache

Inspecciona lo que está actualmente en caché (fuentes de datos de registro, etiquetas, servicios resueltos)

refresh_log_cache

Invalida la resolución de un servicio o borra todas las entradas para la instancia de Grafana

export_log_cache

Exporta la caché de registros a un archivo JSON

import_log_cache

Importa una caché de registros desde un archivo JSON (fusionar/reemplazar)

Ejemplo de uso

Un flujo típico de lenguaje natural, orquestado por el cliente MCP:

  1. Usuario: "Muéstrame los registros de error del servicio api en los últimos 30 minutos."

  2. query_logs con service: "api", level: "error", time_from: "now-30m" → el servidor detecta automáticamente qué fuente de datos de Loki posee la etiqueta service="api" y ejecuta LogQL.

  3. (Primera llamada) el mapeo de servicio → fuente de datos/etiqueta se guarda en la caché; las llamadas posteriores omiten el paso de detección.

  4. Usuario: "Resume esos errores por patrón." → la misma llamada con output: "summarize" devuelve recuentos agrupados por patrón.

  5. Usuario: "¿Qué otros servicios tenemos?" → list_services devuelve la lista completa de servicios.

Si el nombre del servicio tiene un error tipográfico, query_logs muestra coincidencias cercanas (p. ej., ¿Quisiste decir: checkout, checkout-api?).

Cómo funciona la detección automática

query_logs elige la fuente de datos y la etiqueta de destino por sí mismo:

  1. Filtra todas las fuentes de datos hasta los tipos de registro (Loki/ES/CloudWatch/OpenSearch/Splunk).

  2. Para cada fuente de datos de Loki, obtiene /loki/api/v1/labels y recorre los candidatos a etiquetas de servicio comunes (service, service_name, app, app_name, application, container, job) primero, luego cualquier etiqueta restante.

  3. Para cada etiqueta candidata, obtiene sus valores y verifica si el nombre del service solicitado está en esa lista.

  4. Si coincide exactamente un par (datasource, label), úsalo. Si coinciden varios, requiere datasource_uid para desambiguar. Si ninguno coincide, devuelve sugerencias de nombres cercanos.

  5. El (service → ds_uid, label) resuelto se almacena en caché; refresh: true o refresh_log_cache fuerza la redetección.

La detección automática actualmente solo admite Loki. Para fuentes de datos de Elasticsearch / CloudWatch / Splunk, pasa datasource_uid y service_label explícitamente (y espera que los filtros específicos de LogQL no se apliquen).

Modos de salida

query_logs acepta output:

  • raw (predeterminado): <ISO timestamp> <log line> — bueno para lectura directa en una terminal.

  • summarize: agrupa líneas por patrón normalizado (números → N, UUIDs → UUID) con recuentos y una muestra por patrón. Úsalo cuando las líneas sean ruidosas o demasiadas.

  • json: objetos estructurados { ts, line, labels } — para herramientas posteriores.

Caché

  • Caché de registros: persistida en ~/.grafana-mcp/log-cache.json. Clasificada por la URL base de Grafana para que las instancias múltiples no colisionen.

  • Cada categoría tiene su propio TTL (fuentes de datos / etiquetas / valores de etiqueta / resolución de servicio) — consulta la tabla de variables de entorno anterior.

  • Una resolución de servicio en caché que falla más tarde (p. ej., la etiqueta fue renombrada) se invalida automáticamente para que la siguiente llamada vuelva a detectar.

  • Usa get_log_cache para inspeccionar, refresh_log_cache para borrar, y export_log_cache / import_log_cache para compartir con compañeros de equipo.

Ubicación y restablecimiento de la caché

Caché

Ubicación

Restablecimiento

Caché de registros

~/.grafana-mcp/log-cache.json

llama a refresh_log_cache all=true, o elimina el archivo

El archivo de caché es un documento JSON simple: seguro para inspeccionar, editar o respaldar manualmente.

Seguridad y restricciones

  • Solo lectura: el servidor no expone ningún punto final que modifique el estado de Grafana. Sin CRUD de paneles/fuentes de datos, sin cambios de alertas.

  • Registros Stdio: todos los registros van a stderr, manteniendo limpio el canal stdio de MCP.

  • Omisión de TLS: GRAFANA_TLS_SKIP_VERIFY=true establece NODE_TLS_REJECT_UNAUTHORIZED=0 en todo el proceso. Úsalo solo para Grafana autofirmado en redes confiables.

  • Sin registro de secretos: los tokens de autenticación nunca se escriben en los registros de auditoría.

Licencia

MIT

Related MCP Connectors

  • An MCP server giving access to Grafana dashboards, data and more.

  • The Grafbase MCP server sits in front of a GraphQL API and exposes an MCP protocol-compliant interface that allows AI agents and LLMs to explore and query GraphQL APIs using natural language. It provides tools to search schemas, introspect types and fields, and execute GraphQL queries while minimizing context bloat by returning only relevant schema subsets, with built-in support for authentication, authorization, and configurable access control.

  • The Cortex MCP server provides read-only access to real-time engineering context from the Cortex developer portal, allowing AI coding assistants to answer natural language questions about your organization's catalog (microservices, libraries, domains, teams, infrastructure), scorecards (engineering standards and best practices), initiatives (goals and deadlines), and Engineering Intelligence metrics. It includes tools for querying documentation, tracking personal entities, and accessing AI-assisted insights across the entire Cortex ecosystem.

  • The BigQuery remote MCP server is a fully managed service that uses the Model Context Protocol to connect AI applications and LLMs to BigQuery data sources. It provides secure, standardized tools for AI agents to list datasets and tables, retrieve schemas, generate and execute SQL queries through natural language, and analyze data—enabling direct access to enterprise analytics data without requiring manual SQL coding.

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A server that enables AI assistants to access and query Grafana dashboards, metrics, logs, and configurations through an MCP protocol interface.
    10
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for intelligent log analysis providing semantic search, error pattern clustering, and smart error detection. It enables users to process, vectorize, and query local logs to efficiently identify issues and generate AI-powered summaries.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that enables querying logs and metrics from Graylog, Prometheus, and InfluxDB 2.x. It provides tools for executing Lucene log searches, PromQL queries, and Flux queries directly within MCP-compatible clients.
    MIT