Honeycomb MCP
Un serveur Model Context Protocol pour interagir avec les données d'observabilité de Honeycomb. Ce serveur permet aux LLM comme Claude d'analyser et d'interroger directement vos ensembles de données Honeycomb dans des environnements multiples.
Exigences
- Node.js 18+
- Clé API Honeycomb avec toutes les permissions
- Accès aux requêtes pour l'analyse
- Accès en lecture pour les SLO et les déclencheurs
- Accès au niveau de l'environnement pour les opérations sur les ensembles de données
Honeycomb MCP est en fait une interface alternative complète à Honeycomb, et vous avez donc besoin d'autorisations étendues pour l'API.
Honeycomb Enterprise uniquement
Actuellement, cette option n'est disponible que pour les clients de Honeycomb Enterprise.
Fonctionnement
Aujourd'hui, il s'agit d'un processus serveur unique que vous devez exécuter sur votre propre ordinateur. Il n'est pas authentifié. Toutes les informations utilisent STDIO entre votre client et le serveur.
Installation
pnpm install pnpm run build
L'artefact de construction est placé dans le dossier /build
.
Configuration du serveur
Pour utiliser ce serveur MCP, vous devez fournir les clés de l'API Honeycomb via des variables d'environnement dans votre configuration MCP.
{ "mcpServers" : { "honeycomb" : { "command" : "node", "args" : ["/fully/qualified/path/to/honeycomb-mcp/build/index.mjs" ], "env" : { "HONEYCOMB_API_KEY" : "your_api_key" } } } }
Pour plusieurs environnements :
{ "mcpServers" : { "honeycomb" : { "command" : "node", "args" : [ "/fully/qualified/path/to/honeycomb-mcp/build/index.mjs" ], "env" : {"HONEYCOMB_ENV_PROD_API_KEY" : "your_prod_api_key", "HONEYCOMB_ENV_STAGING_API_KEY" : "your_staging_api_key" } } } }
Important : Ces variables d'environnement doivent être définies dans le bloc env
de votre configuration MCP.
Configuration pour l'UE
Les clients de l'UE doivent également définir une configuration HONEYCOMB_API_ENDPOINT
, car le MCP utilise par défaut l'instance non européenne.
# Point de terminaison API personnalisé facultatif (https://api.honeycomb.io par défaut) HONEYCOMB_API_ENDPOINT=https://api.eu1.honeycomb.io/
Configuration de la mise en cache
Le serveur MCP met en cache tous les appels à l'API Honeycomb qui ne sont pas des requêtes, afin d'améliorer les performances et de réduire l'utilisation de l'API. La mise en cache peut être configurée à l'aide de ces variables d'environnement :
# Activer/désactiver la mise en cache (par défaut : true) HONEYCOMB_CACHE_ENABLED=true # TTL par défaut en secondes (par défaut : 300) HONEYCOMB_CACHE_DEFAULT_TTL=300 # Valeurs TTL spécifiques aux ressources en secondes (par défaut)ressources en secondes (valeurs par défaut indiquées) HONEYCOMB_CACHE_DATASET_TTL=900 # 15 minutes HONEYCOMB_CACHE_COLUMN_TTL=900 # 15 minutes HONEYCOMB_CACHE_BOARD_TTL=900 # 15 minutes HONEYCOMB_CACHE_SLO_TTL=900 # 15 minutes HONEYCOMB_CACHE_TRIGGER_TTL=900 # 15 minutes HONEYCOMB_CACHE_MARKER_TTL=900 # 15 minutes HONEYCOMB_CACHE_RECIPIENT_TTL=900 # 15 minutes HONEYCOMB_CACHE_AUTH_TTL=3600 # 1 heure # Taille maximale du cache (éléments par type de ressource) HONEYCOMB_CACHE_MAX_SIZE=1000
Compatibilité client
Honeycomb MCP a été testé avec les clients suivants :
Il fonctionnera probablement avec d'autres clients.
Fonctionnalités
- Interrogation des ensembles de données Honeycomb dans plusieurs environnements
- Exécution de requêtes analytiques avec prise en charge de
- Plusieurs types de calculs (COUNT, AVG, P95, etc.)
- Ventilations et filtres
- Analyse temporelle
- Suivi des SLO et de leur statut (Enterprise uniquement)
- Analyse des colonnes et des modèles de données
- Visualiser et analyser les déclencheurs
- Accéder aux métadonnées des ensembles de données et aux informations de schéma
- Performances optimisées grâce à la mise en cache basée sur le TTL pour tous les appels d'API autres que les requêtes
Ressources
Accédez aux ensembles de données Honeycomb en utilisant des URI au format :honeycomb://{environnement}/{ensemble de données}
Par exemple :
honeycomb://production/api-requests
honeycomb://staging/backend-services
La réponse de la ressource comprend
- Le nom de l'ensemble de données
- Informations sur les colonnes (nom, type, description)
- Détails du schéma
Outils
list_datasets
: Liste tous les jeux de données d'un environnement{ "environment" : "production" }
get_columns
: Obtenir des informations sur les colonnes d'un jeu de données{ "environment" : "production", "dataset" : "api-requests" }
run_query
: Exécuter des requêtes analytiques avec de nombreuses options{ "environment" : "production", "dataset" : "api-requests", "calculations" : [ { "op" : "COUNT" }, { "op" : "P95", "column" : "duration_ms" } ], "breakdowns" : ["service.name"], "time_range" : 3600 }
analyze_columns
: Analyse des colonnes spécifiques d'un ensemble de données en exécutant des requêtes statistiques et en renvoyant les mesures calculées.list_slos
: Liste tous les SLO d'un ensemble de données{"environment" : "production", "dataset" : "api-requests" }
get_slo
: Obtenir des informations détaillées sur les SLO{ "environment" : "production", "dataset" : "api-requests", "sloId" : "abc123" }
list_triggers
: Liste de tous les déclencheurs pour un jeu de données{ "environment" : "production", "dataset" : "api-requests" }
get_trigger
: Obtenir des informations détaillées sur les déclencheurs{ "environment" : "production", "dataset" : "api-requests", "triggerId" : "xyz789" }
get_trace_link
: Génère un lien profond vers une trace spécifique dans l'interface utilisateur Honeycombget_instrumentation_help
: Fournit des conseils sur l'instrumentation OpenTelemetry{"language" : "python", "filepath" : "app/services/payment_processor.py" }
Exemples de requêtes avec Claude
Demandez à Claude des choses comme :
- "Quels sont les jeux de données disponibles dans l'environnement de production ?"
- "Montrez-moi la latence P95 pour le service API au cours de la dernière heure"
- "Quel est le taux d'erreur ventilé par nom de service ?
- "Y a-t-il des SLO qui sont sur le point de dépasser leur budget ?
- "Montrez-moi tous les déclencheurs actifs dans l'environnement de préparation
- "Quelles sont les colonnes disponibles dans l'ensemble de données de l'API de production ?
Réponses optimisées des outils
Toutes les réponses aux outils sont optimisées pour réduire l'utilisation de la fenêtre contextuelle tout en conservant les informations essentielles :
- Lister les ensembles de données: Ne renvoie que le nom, l'étiquette et la description
- Obtenir des colonnes: Renvoie des informations simplifiées sur les colonnes en se concentrant sur le nom, le type et la description
- Exécuter une requête
- Inclut les résultats réels et les métadonnées nécessaires
- Ajoute des statistiques sommaires calculées automatiquement
- Inclut uniquement les données des séries pour les requêtes de cartes thermiques
- Omet les métadonnées, les liens et les détails d'exécution
- Colonne d'analyse
- Renvoie les valeurs les plus élevées, les nombres et les statistiques clés
- Calcule automatiquement les mesures numériques, le cas échéant
- Informations sur les SLO: Rationalisation vers les indicateurs clés de statut et les mesures de performance
- Informations sur les déclencheurs: Concentrées sur l'état des déclencheurs, les conditions et les cibles de notification
Cette optimisation garantit que les réponses sont concises mais complètes, ce qui permet aux LLM de traiter davantage de données dans les limites du contexte.
Spécification de requête pour run_query
L'outil run_query
prend en charge une spécification de requête complète :
calculs: Tableau des opérations à effectuer
- Opérations prises en charge : COUNT, CONCURRENCY, COUNT_DISTINCT, HEATMAP, SUM, AVG, MAX, MIN, P001, P01, P05, P10, P25, P50, P75, P90, P95, P99, P999, RATE_AVG, RATE_SUM, RATE_MAX
- Certaines opérations comme COUNT et CONCURRENCY ne nécessitent pas de colonne
- Exemple :
{"op" : "HEATMAP", "column" : "duration_ms"}
filtres: Tableau de conditions de filtrage
- Opérateurs pris en charge : =, !=, >, >=, <, <=, commence par, ne commence pas par, existe, n'existe pas, contient, ne contient pas, dans, pas dans
- Exemple :
{"column" : "error", "op" : "=", "value" : true}
filter_combination: "AND" ou "OR" (la valeur par défaut est "AND")
breakdowns: Tableau de colonnes pour regrouper les résultats
- Exemple :
["service.name", "http.status_code"]
- Exemple :
orders: Tableau indiquant comment trier les résultats
- Doit faire référence à des colonnes provenant de ventilations ou de calculs
- L'opération HEATMAP ne peut pas être utilisée dans les commandes
- Exemple :
{"op" : "COUNT", "order" : "descendant"}
time_range: Plage de temps relative en secondes (par exemple, 3600 pour la dernière heure)
- Peut être combiné avec start_time ou end_time, mais pas avec les deux
start_time et end_time: Horodatage UNIX pour les plages de temps absolues
avoir: Filtrer les résultats en fonction des valeurs de calcul
- Exemple :
{"calculate_op" : "COUNT", "op" : ">", "value" : 100}
- Exemple :
Exemples de requêtes
Voici quelques exemples de requêtes réelles :
Trouver des appels d'API lents
{"environment" : "production", "dataset" : "api-requests", "calculations" : [ {"column" : "duration_ms", "op" : "HEATMAP"}, {"column" : "duration_ms", "op" : "MAX"} ], "filters" : [ {"column" : "trace.parent_id", "op" : "does-not-exist"} ], "breakdowns" : ["http.target", "name"], "orders" : [ {"column" : "duration_ms", "op" : "MAX", "order" : "descending"} ] } }
Distribution des appels DB (dernière semaine)
{"environment" : "production", "dataset" : "api-requests", "calculations" : [ {"column" : "duration_ms", "op" : "HEATMAP"} ], "filters" : [ {"column" : "db.statement", "op" : "exists"} ], "breakdowns" : ["db.statement"], "time_range" : 604800 }
Nombre d'exceptions par exception et par appelant
{ "environment" : "production", "dataset" : "api-requests", "calculations" : [ {"op" : "COUNT"} ], "filters" : [ {"column" : "exception.message", "op" : "exists"}, {"column" : "parent_name", "op" : "exists"} ], "breakdowns" : ["exception.message", "parent_name"], "commandes" : [ {"op" : "COUNT", "order" : "descending"} ] } }
Développement
pnpm install pnpm run build
Licence
MIT