Grafana
Accede y gestiona recursos de Grafana, incluidos paneles, fuentes de datos, Prometheus, Loki y alertas.
Documentación
Bifurcado de Servidor MCP de Grafana
Este repositorio es una bifurcación del servidor MCP original de Grafana.
Incluye las modificaciones personalizadas que se enumeran a continuación.
Cambios respecto al upstream
- Se añadió soporte para una nueva herramienta: QuestDB
- Se introdujo la bandera
questdbpara habilitar/deshabilitar - Se añadió
tools/questdb.goque implementa la lógica de consulta de QuestDB
- Se introdujo la bandera
- Se añadió soporte para una nueva herramienta: Athena
- Se introdujo la bandera
athenapara habilitar/deshabilitar - Se añadió
tools/athena.goque implementa la lógica de consulta de Athena
- Se introdujo la bandera
- Se ampliaron las opciones de transporte para admitir
streamable-http - Se añadió la dependencia:
github.com/DataDog/zstd
Servidor MCP de Grafana
Un servidor de Model Context Protocol (MCP) para Grafana.
Esto proporciona acceso a tu instancia de Grafana y al ecosistema circundante.
Características
Las siguientes características están actualmente disponibles en el servidor MCP. Esta lista es solo informativa y no representa una hoja de ruta ni un compromiso con futuras funciones.
Paneles de control
- Buscar paneles de control: Encuentra paneles de control por título u otros metadatos
- Obtener panel de control por UID: Recupera los detalles completos del panel de control usando su identificador único
- Actualizar o crear un panel de control: Modifica paneles de control existentes o crea nuevos. Nota: Usar con precaución debido a las limitaciones de la ventana de contexto; ver issue #101
- Obtener consultas de paneles e información de fuentes de datos: Obtén el título, la cadena de consulta y la información de la fuente de datos (incluyendo UID y tipo, si está disponible) de cada panel en un panel de control
Fuentes de datos
- Listar y obtener información de fuentes de datos: Ver todas las fuentes de datos configuradas y recuperar información detallada sobre cada una.
- Tipos de fuentes de datos admitidos: Prometheus, Loki, QuestDB, Athena.
Consultas a Prometheus
- Consultar Prometheus: Ejecuta consultas PromQL (admite consultas de métricas instantáneas y de rango) contra fuentes de datos de Prometheus.
- Consultar metadatos de Prometheus: Recupera metadatos de métricas, nombres de métricas, nombres de etiquetas y valores de etiquetas de fuentes de datos de Prometheus.
Consultas a Loki
- Consultar registros y métricas de Loki: Ejecuta consultas de registros y consultas de métricas usando LogQL contra fuentes de datos de Loki.
- Consultar metadatos de Loki: Recupera nombres de etiquetas, valores de etiquetas y estadísticas de flujos de fuentes de datos de Loki.
Incidentes
- Buscar, crear, actualizar y cerrar incidentes: Gestiona incidentes en Grafana Incident, incluyendo búsqueda, creación, actualización y resolución de incidentes.
Investigaciones de Sift
- Crear investigaciones de Sift: Inicia una nueva investigación de Sift para analizar registros o trazas.
- Listar investigaciones de Sift: Recupera una lista de investigaciones de Sift, con soporte para un parámetro de límite.
- Obtener investigación de Sift: Recupera los detalles de una investigación de Sift específica por su UUID.
- Obtener análisis de Sift: Recupera un análisis específico de una investigación de Sift.
- Encontrar patrones de error en registros: Detecta patrones de error elevados en registros de Loki usando Sift.
- Encontrar solicitudes lentas: Detecta solicitudes lentas usando Sift (Tempo).
Alertas
- Listar y obtener información de reglas de alerta: Ver reglas de alerta y sus estados (disparada/normal/error/etc.) en Grafana.
- Listar puntos de contacto: Ver los puntos de contacto de notificación configurados en Grafana.
Grafana OnCall
- Listar y gestionar horarios: Ver y gestionar horarios de guardia en Grafana OnCall.
- Obtener detalles de turnos: Recupera información detallada sobre turnos de guardia específicos.
- Obtener usuarios de guardia actuales: Ver qué usuarios están actualmente de guardia para un horario.
- Listar equipos y usuarios: Ver todos los equipos y usuarios de OnCall.
Administración
- Listar equipos: Ver todos los equipos configurados en Grafana.
La lista de herramientas es configurable, por lo que puedes elegir qué herramientas deseas poner a disposición del cliente MCP.
Esto es útil si no usas cierta funcionalidad o si no quieres ocupar demasiado espacio en la ventana de contexto.
Para deshabilitar una categoría de herramientas, usa la bandera --disable-<category> al iniciar el servidor. Por ejemplo, para deshabilitar
las herramientas de OnCall, usa --disable-oncall.
Herramientas
| Herramienta | Categoría | Descripción |
|---|---|---|
list_teams | Administración | Listar todos los equipos |
search_dashboards | Búsqueda | Buscar paneles de control |
get_dashboard_by_uid | Panel de control | Obtener un panel de control por UID |
update_dashboard | Panel de control | Actualizar o crear un nuevo panel de control |
get_dashboard_panel_queries | Panel de control | Obtener título del panel, consultas, UID de fuente de datos y tipo de un panel de control |
list_datasources | Fuentes de datos | Listar fuentes de datos |
get_datasource_by_uid | Fuentes de datos | Obtener una fuente de datos por UID |
get_datasource_by_name | Fuentes de datos | Obtener una fuente de datos por nombre |
query_prometheus | Prometheus | Ejecutar una consulta contra una fuente de datos de Prometheus |
list_prometheus_metric_metadata | Prometheus | Listar metadatos de métricas |
list_prometheus_metric_names | Prometheus | Listar nombres de métricas disponibles |
list_prometheus_label_names | Prometheus | Listar nombres de etiquetas que coinciden con un selector |
list_prometheus_label_values | Prometheus | Listar valores para una etiqueta específica |
list_incidents | Incidente | Listar incidentes en Grafana Incident |
create_incident | Incidente | Crear un incidente en Grafana Incident |
add_activity_to_incident | Incidente | Añadir un elemento de actividad a un incidente en Grafana Incident |
resolve_incident | Incidente | Resolver un incidente en Grafana Incident |
query_loki_logs | Loki | Consultar y recuperar registros usando LogQL (consultas de registros o métricas) |
list_loki_label_names | Loki | Listar todos los nombres de etiquetas disponibles en los registros |
list_loki_label_values | Loki | Listar valores para una etiqueta de registro específica |
query_loki_stats | Loki | Obtener estadísticas sobre flujos de registros |
list_alert_rules | Alertas | Listar reglas de alerta |
get_alert_rule_by_uid | Alertas | Obtener regla de alerta por UID |
list_oncall_schedules | OnCall | Listar horarios de Grafana OnCall |
get_oncall_shift | OnCall | Obtener detalles de un turno de OnCall específico |
get_current_oncall_users | OnCall | Obtener usuarios actualmente de guardia para un horario específico |
list_oncall_teams | OnCall | Listar equipos de Grafana OnCall |
list_oncall_users | OnCall | Listar usuarios de Grafana OnCall |
get_investigation | Sift | Recuperar una investigación de Sift existente por su UUID |
get_analysis | Sift | Recuperar un análisis específico de una investigación de Sift |
list_investigations | Sift | Recuperar una lista de investigaciones de Sift con un límite opcional |
find_error_pattern_logs | Sift | Encuentra patrones de error elevados en registros de Loki. |
find_slow_requests | Sift | Encuentra solicitudes lentas de las fuentes de datos de tempo relevantes. |
list_pyroscope_label_names | Pyroscope | Listar nombres de etiquetas que coinciden con un selector |
list_pyroscope_label_values | Pyroscope | Listar valores de etiquetas que coinciden con un selector para un nombre de etiqueta |
list_pyroscope_profile_types | Pyroscope | Listar tipos de perfil disponibles |
fetch_pyroscope_profile | Pyroscope | Obtiene un perfil en formato DOT para análisis |
query_questdb_sql | QuestDB | Fuente de datos QuestDB: Ejecuta SQL arbitrario y devuelve los resultados como un array de objetos JSON, uno por fila. |
query_athena_sql | Athena | Fuente de datos Athena: Ejecuta SQL arbitrario y devuelve los resultados como un array de objetos JSON, uno por fila. |
Uso
-
Crea una cuenta de servicio en Grafana con permisos suficientes para usar las herramientas que deseas usar, genera un token de cuenta de servicio y cópialo al portapapeles para usarlo en el archivo de configuración. Sigue la documentación de Grafana para más detalles.
-
Tienes varias opciones para instalar
mcp-grafana:-
Imagen de Docker: Usa la imagen de Docker preconstruida desde Docker Hub.
Importante: El punto de entrada de la imagen de Docker está configurado para ejecutar el servidor MCP en modo SSE por defecto, pero la mayoría de los usuarios querrán usar el modo STDIO para integración directa con asistentes de IA como Claude Desktop:
- Modo STDIO: Para el modo stdio debes sobrescribir explícitamente el valor por defecto con
-t stdioe incluir la bandera-ipara mantener stdin abierto:
docker pull mcp/grafana docker run --rm -i -e GRAFANA_URL=http://localhost:3000 -e GRAFANA_API_KEY=<your service account token> mcp/grafana -t stdio- Modo SSE: En este modo, el servidor se ejecuta como un servidor HTTP al que los clientes se conectan. Debes exponer el puerto 8000 usando la bandera
-p:
docker pull mcp/grafana docker run --rm -p 8000:8000 -e GRAFANA_URL=http://localhost:3000 -e GRAFANA_API_KEY=<your service account token> mcp/grafana- Modo HTTP Streamable: En este modo, el servidor opera como un proceso independiente que puede manejar múltiples conexiones de clientes. Debes exponer el puerto 8000 usando la bandera
-p: Para este modo debes sobrescribir explícitamente el valor por defecto con-t streamable-http
docker pull mcp/grafana docker run --rm -p 8000:8000 -e GRAFANA_URL=http://localhost:3000 -e GRAFANA_API_KEY=<your service account token> mcp/grafana -t streamable-http - Modo STDIO: Para el modo stdio debes sobrescribir explícitamente el valor por defecto con
-
Descargar binario: Descarga la última versión de
mcp-grafanadesde la página de versiones y colócala en tu$PATH. -
Compilar desde el código fuente: Si tienes un kit de herramientas de Go instalado, también puedes compilarlo e instalarlo desde el código fuente, usando la variable de entorno
GOBINpara especificar el directorio donde se debe instalar el binario. Esto también debería estar en tuPATH.GOBIN="$HOME/go/bin" go install github.com/grafana/mcp-grafana/cmd/mcp-grafana@latest
-
-
Añade la configuración del servidor a tu archivo de configuración del cliente. Por ejemplo, para Claude Desktop:
Si usas el binario:
{ "mcpServers": { "grafana": { "command": "mcp-grafana", "args": [], "env": { "GRAFANA_URL": "http://localhost:3000", "GRAFANA_API_KEY": "<your service account token>" } } } }
Nota: si ves
Error: spawn mcp-grafana ENOENTen Claude Desktop, necesitas especificar la ruta completa amcp-grafana.
Si usas Docker:
{
"mcpServers": {
"grafana": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"GRAFANA_URL",
"-e",
"GRAFANA_API_KEY",
"mcp/grafana",
"-t",
"stdio"
],
"env": {
"GRAFANA_URL": "http://localhost:3000",
"GRAFANA_API_KEY": "<your service account token>"
}
}
}
}
Nota: El argumento
-t stdioes esencial aquí porque sobrescribe el modo SSE por defecto en la imagen de Docker.
Usando VSCode con servidor MCP remoto
Si estás usando VSCode y ejecutando el servidor MCP en modo SSE (que es el valor por defecto al usar la imagen de Docker sin sobrescribir el transporte), asegúrate de que tu .vscode/settings.json incluya lo siguiente:
"mcp": {
"servers": {
"grafana": {
"type": "sse",
"url": "http://localhost:8000/sse"
}
}
}
Modo de depuración
Puedes habilitar el modo de depuración para el transporte de Grafana añadiendo la bandera -debug al comando. Esto proporcionará un registro detallado de las solicitudes y respuestas HTTP entre el servidor MCP y la API de Grafana, lo que puede ser útil para solucionar problemas.
Para usar el modo de depuración con la configuración de Claude Desktop, actualiza tu configuración de la siguiente manera:
Si usas el binario:
{
"mcpServers": {
"grafana": {
"command": "mcp-grafana",
"args": ["-debug"],
"env": {
"GRAFANA_URL": "http://localhost:3000",
"GRAFANA_API_KEY": "<your service account token>"
}
}
}
}
Si usas Docker:
{
"mcpServers": {
"grafana": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"GRAFANA_URL",
"-e",
"GRAFANA_API_KEY",
"mcp/grafana",
"-t",
"stdio",
"-debug"
],
"env": {
"GRAFANA_URL": "http://localhost:3000",
"GRAFANA_API_KEY": "<your service account token>"
}
}
}
}
Nota: Al igual que con la configuración estándar, el argumento
-t stdioes necesario para sobrescribir el modo SSE por defecto en la imagen de Docker.
Desarrollo
¡Las contribuciones son bienvenidas! Por favor, abre un issue o envía un pull request si tienes sugerencias o mejoras.
Este proyecto está escrito en Go. Instala Go siguiendo las instrucciones para tu plataforma. Para ejecutar el servidor localmente en modo STDIO (que es el predeterminado para el desarrollo local), use:
make run
Para ejecutar el servidor localmente en modo SSE, use:
go run ./cmd/mcp-grafana --transport sse
También puede ejecutar el servidor usando el transporte SSE dentro de una imagen Docker personalizada. Al igual que la imagen Docker publicada, el punto de entrada de esta imagen personalizada usa el modo SSE por defecto. Para construir la imagen, use:
make build-image
Y para ejecutar la imagen en modo SSE (el predeterminado), use:
docker run -it --rm -p 8000:8000 mcp-grafana:latest
Si necesita ejecutarla en modo STDIO en su lugar, anule la configuración del transporte:
docker run -it --rm mcp-grafana:latest -t stdio
Pruebas
Hay tres tipos de pruebas disponibles:
- Pruebas unitarias (no requieren dependencias externas):
make test-unit
También puede ejecutar pruebas unitarias con:
make test
- Pruebas de integración (requieren que los contenedores Docker estén en funcionamiento):
make test-integration
- Pruebas en la nube (requieren una instancia de Grafana en la nube y credenciales):
make test-cloud
Nota: Las pruebas en la nube se configuran automáticamente en CI. Para el desarrollo local, necesitará configurar su propia instancia de Grafana Cloud y sus credenciales.
Las pruebas de integración más completas requerirán una instancia de Grafana ejecutándose localmente en el puerto 3000; puede iniciar una con Docker Compose:
docker-compose up -d
Las pruebas de integración se pueden ejecutar con:
make test-all
Si está agregando más herramientas, agregue pruebas de integración para ellas. Las pruebas existentes deberían ser un buen punto de partida.
Linting
Para hacer lint del código, ejecute:
make lint
Esto incluye un linter personalizado que verifica las comas sin escapar en las etiquetas de estructura jsonschema. Las comas en los campos description deben escaparse con \\, para evitar la truncación silenciosa. Puede ejecutar solo este linter con:
make lint-jsonschema
Consulte la documentación del linter JSONSchema para obtener más detalles.
Licencia
Este proyecto está licenciado bajo la Licencia Apache, Versión 2.0.