Forked fromGrafana MCP server
Ce dépôt est un fork du serveur Grafana MCP original.
Il inclut les modifications personnalisées listées ci-dessous.
Changements en amont
- Ajout du support d'un nouvel outil : QuestDB
- Introduction du drapeau
questdb
pour activer/désactiver - Ajout du
fichier tools/questdb.go
qui implémente la logique de requête de QuestDB
- Introduction du drapeau
- Ajout de la prise en charge d'un nouvel outil : Athena
- Introduction de l'indicateur
athena
pour activer/désactiver - Ajout de
tools/athena.go
implémentant la logique de requête d'Athena
- Introduction de l'indicateur
- Extension des options de transport pour supporter
streamable-http
- Ajout d'une dépendance :
github.com/DataDog/zstd
Serveur Grafana MCP
Un serveur MCP ( Model Context Protocol ) pour Grafana.
Il fournit un accès à votre instance Grafana et à l'écosystème environnant.
Fonctionnalités
Les fonctionnalités suivantes sont actuellement disponibles dans le serveur MCP. Cette liste est fournie à titre d'information uniquement et ne représente pas une feuille de route ou un engagement à l'égard des fonctionnalités futures.
Tableaux de bord
- Recherche de tableaux de bord : Recherche de tableaux de bord par titre ou par d'autres métadonnées
- Obtenir un tableau de bord par UID : récupérer tous les détails d'un tableau de bord à l'aide de son identifiant unique
- Mettre à jour ou créer un tableau de bord : Modifier des tableaux de bord existants ou en créer de nouveaux. Remarque : à utiliser avec précaution en raison des limitations de la fenêtre contextuelle ; voir le problème n° 101
- Obtenir les requêtes du tableau de bord et les informations sur la source de données : Obtenir le titre, la chaîne de requête et les informations sur la source de données (y compris l'UID et le type, le cas échéant) de chaque panneau d'un tableau de bord
Sources de données
- Liste et récupération des informations sur les sources de données : Affichez toutes les sources de données configurées et récupérez des informations détaillées sur chacune d'entre elles
- Types de sources de données pris en charge : Prometheus, Loki, QuestDB, Athena.
Interrogation de Prometheus
- Interroger Prometheus : Exécuter des requêtes PromQL (prend en charge les requêtes métriques instantanées et par plage) sur les sources de données Prometheus.
- Interroger les métadonnées Prometheus : Récupérer des métadonnées, des noms de métriques, des noms d'étiquettes et des valeurs d'étiquettes à partir de sources de données Prometheus.
Interrogation de Loki
- Interroger les journaux et les métriques de Loki : Exécuter des requêtes sur les journaux et les métriques en utilisant LogQL sur les sources de données Loki.
- Interroger les métadonnées de Loki : Récupérer les noms et les valeurs des étiquettes, ainsi que les statistiques de flux à partir des sources de données de Loki.
Incidents
- Recherchez, créez, mettez à jour et fermez les incidents : Gérez les incidents dans Grafana Incident, y compris la recherche, la création, la mise à jour et la résolution des incidents.
Enquêtes Sift
- Créez des enquêtes Sift : Démarrez une nouvelle enquête Sift pour analyser les journaux ou les traces.
- Lister les enquêtes Sift : Récupérer une liste d'enquêtes Sift, avec prise en charge d'un paramètre de limite.
- Obtenir une enquête Sift : Permet d'obtenir les détails d'une enquête Sift spécifique à l'aide de son UUID.
- Obtenir des analyses Sift : Récupérer une analyse spécifique d'une enquête Sift.
- Recherche de schémas d'erreur dans les journaux : Détecter des modèles d'erreurs élevés dans les journaux de Loki à l'aide de Sift.
- Trouver les requêtes lentes : Détecter les requêtes lentes en utilisant Sift (Tempo).
Alertes
- Lister et récupérer des informations sur les règles d'alerte : Visualiser les règles d'alerte et leurs statuts (firing/normal/error/etc.) dans Grafana.
- Liste des points de contact : Affichez les points de contact de notification configurés dans Grafana.
Grafana OnCall
- Liste et gestion des horaires : Affichez et gérez les horaires d'astreinte dans Grafana OnCall.
- Obtenir les détails de l'astreinte : Récupérer des informations détaillées sur des équipes de garde spécifiques.
- Obtenir les utilisateurs d'astreinte actuels : Voir quels utilisateurs sont actuellement d'astreinte pour un horaire.
- Lister les équipes et les utilisateurs : Afficher toutes les équipes et tous les utilisateurs de garde.
Administration
- Liste des équipes : Affichez toutes les équipes configurées dans Grafana.
La liste des outils est configurable, de sorte que vous pouvez choisir les outils que vous souhaitez mettre à la disposition du client MCP. Cela est utile si vous n'utilisez pas certaines fonctionnalités ou si vous ne souhaitez pas occuper une trop grande partie de la fenêtre contextuelle. Pour désactiver une catégorie d'outils, utilisez l'indicateur --disable-<category>
lors du démarrage du serveur. Par exemple, pour désactiver les outils OnCall, utilisez --disable-oncall
.
Outils
Outil | Catégorie | Description de l'outil |
---|---|---|
list_teams | Administrer | Liste de toutes les équipes |
search_dashboards | Recherche | Recherche de tableaux de bord |
get_dashboard_by_uid | Tableau de bord | Obtenir un tableau de bord par identifiant |
update_dashboard | Tableau de bord | Mettre à jour ou créer un nouveau tableau de bord |
get_dashboard_panel_queries | Tableau de bord | Obtenir le titre d'un tableau de bord, les requêtes, l'identifiant et le type de la source de données |
list_datasources | Sources de données | Liste des sources de données |
get_datasource_by_uid | Sources de données | Obtenir une source de données par uid |
get_datasource_by_name | Données de base | Obtenir une source de données par nom |
query_prometheus | Prometheus | Exécuter une requête sur une source de données Prometheus |
list_prometheus_metric_metadata | Prometheus | Liste les métadonnées des métriques |
list_prometheus_metric_names | Prometheus | Liste des noms de métriques disponibles |
list_prometheus_label_names | Prometheus | Liste des noms d'étiquettes correspondant à un sélecteur |
list_prometheus_label_values | Prometheus | Liste des valeurs pour un label spécifique |
list_incidents | Incident | Liste des incidents dans Grafana Incident |
create_incident | Incident | Créer un incident dans Grafana Incident |
add_activity_to_incident | Incident | Ajouter un élément d'activité à un incident dans Grafana Incident |
resolve_incident | Incident | Résoudre un incident dans Grafana Incident |
query_loki_logs | Loki | Interroger et récupérer des logs en utilisant LogQL (soit des logs, soit des requêtes métriques) |
list_loki_label_names | Loki | Liste tous les noms d'étiquettes disponibles dans les journaux |
list_loki_label_values | Loki | Liste les valeurs d'un label spécifique dans les journaux |
query_loki_stats | Loki | Obtenir des statistiques sur les flux de journaux |
list_alert_rules | Alerte | Liste des règles d'alerte |
get_alert_rule_by_uid | Alerte | Obtenir une règle d'alerte par UID |
list_oncall_schedules | OnCall | Liste des horaires de Grafana OnCall |
get_oncall_shift | Sur appel | Obtenir les détails d'une équipe OnCall spécifique |
get_current_oncall_users | D'astreinte | Obtenir les utilisateurs actuellement d'astreinte pour un horaire spécifique |
list_oncall_teams | Sur appel | Liste les équipes de Grafana OnCall |
list_oncall_users | Sur appel | Liste des utilisateurs de Grafana OnCall |
get_investigation | Sift | Récupère une enquête Sift existante par son UUID |
get_analysis | Sift | Récupérer une analyse spécifique d'une enquête Sift |
list_investigations | Sift | Récupère une liste d'enquêtes Sift avec une limite optionnelle |
find_error_pattern_logs | Sift | Recherche les motifs d'erreur élevés dans les journaux de Loki. |
find_slow_requests | Sift | Recherche les requêtes lentes dans les sources de données tempo pertinentes. |
list_pyroscope_label_names | Pyroscope | Liste les noms d'étiquettes correspondant à un sélecteur |
list_pyroscope_label_values | Pyroscope | Liste des valeurs d'étiquettes correspondant à un sélecteur pour un nom d'étiquette |
list_pyroscope_profile_types | Pyroscope | Liste des types de profils disponibles |
fetch_pyroscope_profile | Pyroscope | Récupère un profil au format DOT pour analyse |
query_questdb_sql | QuestDB | Source de données QuestDB : Exécute une requête SQL arbitraire et renvoie les résultats sous la forme d'un tableau d'objets JSON, un par ligne. |
query_athena_sql | Athena | Source de données Athena : Exécute une requête SQL arbitraire et renvoie les résultats sous la forme d'un tableau d'objets JSON, un par ligne. |
Utilisation
Créez un compte de service dans Grafana avec suffisamment de permissions pour utiliser les outils que vous voulez utiliser, générez un jeton de compte de service, et copiez-le dans le presse-papiers pour l'utiliser dans le fichier de configuration. Suivez la documentation de Grafana pour plus de détails.
Vous avez plusieurs options pour installer
mcp-grafana
:Image Docker: Utilisez l'image Docker préconstruite à partir de Docker Hub.
Important: Le point d'entrée de l'image Docker est configuré pour exécuter le serveur MCP en mode SSE par défaut, mais la plupart des utilisateurs voudront utiliser le mode STDIO pour une intégration directe avec les assistants IA comme Claude Desktop :
- Mode STDIO: Pour le mode stdio, vous devez explicitement remplacer le mode par défaut avec
-t stdio
et inclure le drapeau-i
pour garder stdin ouvert :
docker pull mcp/grafana docker run --rm -i -e GRAFANA_URL=http://localhost:3000 -e GRAFANA_API_KEY=<votre jeton de compte de service> mcp/grafana -t stdio
- Mode SSE: Dans ce mode, le serveur fonctionne comme un serveur HTTP auquel les clients se connectent. Vous devez exposer le port 8000 à l'aide du drapeau
-p :
docker pull mcp/grafana docker run --rm -p 8000:8000 -e GRAFANA_URL=http://localhost:3000 -e GRAFANA_API_KEY=<votre jeton de compte de service> mcp/grafana
- Mode HTTP à flux continu: Dans ce mode, le serveur fonctionne comme un processus indépendant qui peut gérer plusieurs connexions de clients. Vous devez exposer le port 8000 à l'aide de l'indicateur
-p :
Pour ce mode, vous devez explicitement remplacer la valeur par défaut avec-t streamable-http
docker pull mcp/grafana docker run --rm -p 8000:8000 -e GRAFANA_URL=http://localhost:3000 -e GRAFANA_API_KEY=<votre jeton de compte de service> mcp/grafana -t streamable-http
- Mode STDIO: Pour le mode stdio, vous devez explicitement remplacer le mode par défaut avec
Télécharger le binaire: Téléchargez la dernière version de
mcp-grafana
depuis la page des versions et placez-la dans votre$PATH
.Construire à partir des sources: Si vous avez installé une chaîne d'outils Go, vous pouvez également la construire et l'installer à partir des sources, en utilisant la variable d'environnement
GOBIN
pour spécifier le répertoire dans lequel le binaire doit être installé. Cette variable doit également figurer dans votrePATH
.GOBIN="$HOME/go/bin" go install github.com/grafana/mcp-grafana/cmd/mcp-grafana@latest
Ajoutez la configuration du serveur à votre fichier de configuration client. Par exemple, pour Claude Desktop :
Si vous utilisez le binaire :
{ "mcpServers" : { "grafana" : { "command" : "mcp-grafana", "args" : [], "env" : { "GRAFANA_URL" : "http://localhost:3000", "GRAFANA_API_KEY" : "<votre jeton de compte de service>" } } } }
Remarque : si vous voyez
Error : spawn mcp-grafana ENOENT
dans Claude Desktop, vous devez spécifier le chemin complet demcp-grafana
.
Si vous utilisez 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" : "<votre jeton de compte de service>" } } } }
Remarque : l'argument
-t stdio
est essentiel ici car il remplace le mode SSE par défaut dans l'image Docker.
Utilisation de VSCode avec un serveur MCP distant
Si vous utilisez VSCode et que vous exécutez le serveur MCP en mode SSE (qui est le mode par défaut lorsque vous utilisez l'image Docker sans surcharger le transport), assurez-vous que votre fichier .vscode/settings.json
inclut les éléments suivants :
"mcp" : { "servers" : { "grafana" : {"type" : "sse", "url" : "http://localhost:8000/sse" } }
Mode débogage
Vous pouvez activer le mode débogage pour le transport Grafana en ajoutant l'indicateur -debug
à la commande. Cela fournira une journalisation détaillée des requêtes HTTP et des réponses entre le serveur MCP et l'API Grafana, ce qui peut être utile pour le dépannage.
Pour utiliser le mode débogage avec la configuration Claude Desktop, mettez à jour votre configuration comme suit :
Si vous utilisez le binaire :
{ "mcpServers" : { "grafana" : { "command" : "mcp-grafana", "args" : ["-debug"], "env" : { "GRAFANA_URL" : "http://localhost:3000", "GRAFANA_API_KEY" : "<votre jeton de compte de service>" } } } }
Si vous utilisez 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" : "<votre jeton de compte de service>" } } } }
Remarque : comme pour la configuration standard, l'argument
-t stdio
est nécessaire pour remplacer le mode SSE par défaut dans l'image Docker.
Développement
Les contributions sont les bienvenues ! Veuillez ouvrir un problème ou soumettre une demande de téléchargement si vous avez des suggestions ou des améliorations à apporter.
Ce projet est écrit en Go. Installez Go en suivant les instructions pour votre plateforme.
Pour lancer le serveur localement en mode STDIO (qui est le mode par défaut pour le développement local), utilisez :
make run
Pour exécuter le serveur localement en mode SSE, utilisez :
go run ./cmd/mcp-grafana --transport sse
Vous pouvez également exécuter le serveur en utilisant le transport SSE à l'intérieur d'une image Docker personnalisée. Tout comme l'image Docker publiée, le point d'entrée de cette image personnalisée est par défaut en mode SSE. Pour construire l'image, utilisez :
make build-image
Et pour exécuter l'image en mode SSE (par défaut), utilisez :
docker run -it --rm -p 8000:8000 mcp-grafana:latest
Si vous avez besoin de l'exécuter en mode STDIO à la place, remplacez le paramètre de transport :
docker run -it --rm mcp-grafana:latest -t stdio
Tests
Il y a trois types de tests disponibles :
- Tests unitaires (aucune dépendance externe n'est requise) :
make test-unit
Vous pouvez également exécuter des tests unitaires avec :
make test
- Tests d'intégration (nécessite que les conteneurs Docker soient opérationnels) :
make test-integration
- Tests dans le nuage (nécessite une instance Grafana dans le nuage et des informations d'identification) :
make test-cloud
Note : Les tests Cloud sont automatiquement configurés dans CI. Pour le développement local, vous devrez configurer votre propre instance Grafana Cloud et vos identifiants.
Des tests d'intégration plus complets nécessiteront l'exécution locale d'une instance Grafana sur le port 3000 ; vous pouvez en démarrer une avec Docker Compose :
docker-compose up -d
Les tests d'intégration peuvent être exécutés avec :
make test-all
Si vous ajoutez d'autres outils, veuillez ajouter des tests d'intégration pour eux. Les tests existants devraient être un bon point de départ.
Linting
Pour lister le code, lancez :
make lint
Cela inclut un linter personnalisé qui vérifie les virgules non échappées dans les balises struct de jsonschema
. Les virgules dans les champs de description
doivent être échappées avec \\Npour éviter la troncature silencieuse .
Vous pouvez lancer uniquement ce linter avec :
make lint-jsonschema
Voir la documentation du Linter JSONSchema pour plus de détails.
Licence d'utilisation
Ce projet est soumis à la licence Apache, version 2.0.