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
  • 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
  • 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

OutilCatégorieDescription de l'outil
list_teamsAdministrerListe de toutes les équipes
search_dashboardsRechercheRecherche de tableaux de bord
get_dashboard_by_uidTableau de bordObtenir un tableau de bord par identifiant
update_dashboardTableau de bordMettre à jour ou créer un nouveau tableau de bord
get_dashboard_panel_queriesTableau de bordObtenir le titre d'un tableau de bord, les requêtes, l'identifiant et le type de la source de données
list_datasourcesSources de donnéesListe des sources de données
get_datasource_by_uidSources de donnéesObtenir une source de données par uid
get_datasource_by_nameDonnées de baseObtenir une source de données par nom
query_prometheusPrometheusExécuter une requête sur une source de données Prometheus
list_prometheus_metric_metadataPrometheusListe les métadonnées des métriques
list_prometheus_metric_namesPrometheusListe des noms de métriques disponibles
list_prometheus_label_namesPrometheusListe des noms d'étiquettes correspondant à un sélecteur
list_prometheus_label_valuesPrometheusListe des valeurs pour un label spécifique
list_incidentsIncidentListe des incidents dans Grafana Incident
create_incidentIncidentCréer un incident dans Grafana Incident
add_activity_to_incidentIncidentAjouter un élément d'activité à un incident dans Grafana Incident
resolve_incidentIncidentRésoudre un incident dans Grafana Incident
query_loki_logsLokiInterroger et récupérer des logs en utilisant LogQL (soit des logs, soit des requêtes métriques)
list_loki_label_namesLokiListe tous les noms d'étiquettes disponibles dans les journaux
list_loki_label_valuesLokiListe les valeurs d'un label spécifique dans les journaux
query_loki_statsLokiObtenir des statistiques sur les flux de journaux
list_alert_rulesAlerteListe des règles d'alerte
get_alert_rule_by_uidAlerteObtenir une règle d'alerte par UID
list_oncall_schedulesOnCallListe des horaires de Grafana OnCall
get_oncall_shiftSur appelObtenir les détails d'une équipe OnCall spécifique
get_current_oncall_usersD'astreinteObtenir les utilisateurs actuellement d'astreinte pour un horaire spécifique
list_oncall_teamsSur appelListe les équipes de Grafana OnCall
list_oncall_usersSur appelListe des utilisateurs de Grafana OnCall
get_investigationSiftRécupère une enquête Sift existante par son UUID
get_analysisSiftRécupérer une analyse spécifique d'une enquête Sift
list_investigationsSiftRécupère une liste d'enquêtes Sift avec une limite optionnelle
find_error_pattern_logsSiftRecherche les motifs d'erreur élevés dans les journaux de Loki.
find_slow_requestsSiftRecherche les requêtes lentes dans les sources de données tempo pertinentes.
list_pyroscope_label_namesPyroscopeListe les noms d'étiquettes correspondant à un sélecteur
list_pyroscope_label_valuesPyroscopeListe des valeurs d'étiquettes correspondant à un sélecteur pour un nom d'étiquette
list_pyroscope_profile_typesPyroscopeListe des types de profils disponibles
fetch_pyroscope_profilePyroscopeRécupère un profil au format DOT pour analyse
query_questdb_sqlQuestDBSource 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_sqlAthenaSource 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

  1. 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.

  2. 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 :

      1. 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
      1. 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
      1. 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
    • 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 votre PATH.

      GOBIN="$HOME/go/bin" go install github.com/grafana/mcp-grafana/cmd/mcp-grafana@latest
  3. 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 de mcp-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 :

  1. Tests unitaires (aucune dépendance externe n'est requise) :
make test-unit

Vous pouvez également exécuter des tests unitaires avec :

make test
  1. Tests d'intégration (nécessite que les conteneurs Docker soient opérationnels) :
make test-integration
  1. 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.

Liés dans Service en nuage - MCP Servers sécurisés

ServeurRésuméActions
Serveur MCP ArgoCDUn serveur MCP (Model Context Protocol) qui s'intègre à l'API ArgoCD, permettant aux assistants IA e...Voir
CLI AWS🌟 amazon-q-cli est génial, et il est génial parce qu'il a l'outil use_aws MCP pour interagir avec l...Voir
Alpha Ticker MCPAucune documentation n'est disponible.Voir
Serveur Huawei MCPVoir
MCP en nid d'abeilleUn serveur Model Context Protocol pour interagir avec les données d'observabilité Honeycomb. Ce serv...Voir
Flocon de neige Cortex AICe serveur Snowflake MCP fournit des outils pour les fonctionnalités de Snowflake Cortex AI, apporta...Voir