Last9 MCP Server
officielIntégrez de manière transparente le contexte de production en temps réel—logs, métriques et traces—dans votre environnement local pour corriger le code plus rapidement.
Documentation
Serveur MCP Last9

Votre agent IA ne sait pas ce qui est défaillant en production. Ceci résout ce problème.
Le serveur MCP Last9 connecte Claude, Cursor, Windsurf et tout autre assistant IA compatible MCP directement à vos données d'observabilité de production — logs, métriques, traces, exceptions, requêtes de base de données, alertes et déploiements. L'agent arrête de deviner et commence à lire le signal réel.
Démarrez en 30 secondes (Hébergé)
Aucun binaire à installer. Aucun jeton à gérer. Une URL, OAuth dans votre navigateur, c'est fait.
Trouvez le slug de votre organisation dans votre URL Last9 : app.last9.io/<org_slug>/...
Claude Code
claude mcp add --transport http last9 https://app.last9.io/api/v4/organizations/<org_slug>/mcp
Tapez /mcp, sélectionnez last9, authentifiez-vous. C'est tout.
Cursor
Paramètres > MCP > Ajouter un nouveau serveur MCP :
{
"mcpServers": {
"last9": {
"type": "http",
"url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
Cliquez sur Connecter, terminez OAuth.
VS Code
Nécessite la version 1.99+. Ouvrez la palette de commandes → MCP : Ajouter un serveur, collez l'URL, authentifiez-vous.
Ou directement dans settings.json :
{
"mcp": {
"servers": {
"last9": {
"type": "http",
"url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
}
Windsurf
Paramètres > Cascade > Ouvrir le marketplace MCP > icône d'engrenage (mcp_config.json) :
{
"mcpServers": {
"last9": {
"serverUrl": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
Claude Web/Bureau
Paramètres > Connecteurs > Ajouter un connecteur personnalisé. Nommez-le last9, collez l'URL, authentifiez-vous.
Nécessite un accès administrateur à votre organisation Claude.
Auto-hébergé (STDIO)
Utilisez ceci lorsque votre client MCP ne prend pas en charge le transport HTTP, ou lorsque vous avez besoin que le serveur s'exécute localement.
Installation
Homebrew :
brew install last9/tap/last9-mcp
NPM :
npm install -g @last9/mcp-server@latest
# or directly:
npx -y @last9/mcp-server@latest
Versions binaires (Windows / manuel) :
Téléchargez depuis GitHub Releases :
| Plateforme | Archive |
|---|---|
| Windows (x64) | last9-mcp-server_Windows_x86_64.zip |
| Windows (ARM64) | last9-mcp-server_Windows_arm64.zip |
| Linux (x64) | last9-mcp-server_Linux_x86_64.tar.gz |
| Linux (ARM64) | last9-mcp-server_Linux_arm64.tar.gz |
| macOS (x64) | last9-mcp-server_Darwin_x86_64.tar.gz |
| macOS (ARM64) | last9-mcp-server_Darwin_arm64.tar.gz |
Obtenir un jeton d'actualisation
Seuls les administrateurs peuvent créer des jetons.
- Allez dans Accès API
- Cliquez sur Générer un jeton avec les autorisations d'écriture
- Copiez-le
Configuration du client
Homebrew :
{
"mcpServers": {
"last9": {
"command": "/opt/homebrew/bin/last9-mcp",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
NPM :
{
"mcpServers": {
"last9": {
"command": "npx",
"args": ["-y", "@last9/mcp-server@latest"],
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
Où coller ceci :
| Client | Emplacement |
|---|---|
| Claude Web/Bureau | Paramètres > Développeur > Modifier la configuration (claude_desktop_config.json) |
| Cursor | Paramètres > Paramètres Cursor > MCP > Ajouter un nouveau serveur MCP global |
| Windsurf | Paramètres > Cascade > Marketplace MCP > icône d'engrenage (mcp_config.json) |
| VS Code | Enveloppez dans { "mcp": { "servers": { ... } } } dans settings.json — détails |
Configuration STDIO VS Code
{
"mcp": {
"servers": {
"last9": {
"type": "stdio",
"command": "/opt/homebrew/bin/last9-mcp",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
}
Pour NPM : utilisez "command": "npx" et ajoutez "args": ["-y", "@last9/mcp-server@latest"].
Windows
Après avoir téléchargé depuis GitHub Releases, extrayez et pointez vers le chemin complet :
{
"mcpServers": {
"last9": {
"command": "C:\\Users\\<user>\\AppData\\Local\\Programs\\last9-mcp-server.exe",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
La méthode NPM est plus simple sous Windows — pas de gestion de chemin.
Variables d'environnement
| Variable | Défaut | Description |
|---|---|---|
LAST9_REFRESH_TOKEN | (requis) | Jeton d'actualisation depuis Accès API |
LAST9_DATASOURCE | défaut de l'org | Nom de la source de données/cluster — utile lorsque vous avez plusieurs clusters Levitate |
LAST9_API_HOST | app.last9.io | Remplacer l'hôte de l'API |
LAST9_MAX_GET_LOGS_ENTRIES | 5000 | Entrées max pour les requêtes fragmentées get_logs |
LAST9_DEBUG_CHUNKING | false | Définir true pour journaliser les détails de planification des fragments pour get_logs, get_service_logs, get_traces |
LAST9_DISABLE_TELEMETRY | true | Définir false pour activer le traçage OTel interne |
OTEL_SDK_DISABLED | — | Variable d'env OTel standard. Remplace LAST9_DISABLE_TELEMETRY |
OTEL_EXPORTER_OTLP_ENDPOINT | — | Point de terminaison du collecteur OTLP (uniquement lorsque la télémétrie est activée) |
OTEL_EXPORTER_OTLP_HEADERS | — | En-têtes d'authentification OTLP (uniquement lorsque la télémétrie est activée) |
Ce qu'il peut faire
Santé des services
get_service_summary— Débit, taux d'erreur, temps de réponse p95 pour tous les servicesget_service_environments— Environnements disponibles pour vos services. Exécutez ceci en premier — les autres outils APM ont besoin deenvd'iciget_service_performance_details— Détail complet : débit, taux d'erreur, p50/p90/p95/moy/max, apdex, disponibilitéget_service_operations_summary— Opérations regroupées par points de terminaison HTTP, appels DB, messagerie, clients HTTPget_service_dependency_graph— Carte des dépendances avec débit, latence et taux d'erreur pour l'amont/l'aval/l'infraget_exceptions— Exceptions côté serveur avec filtres de service et de span
Observabilité de la base de données
Quatre outils qui ciblent directement les performances de votre base de données, dérivés des spans de trace OpenTelemetry. Aucune instrumentation supplémentaire nécessaire si vous utilisez déjà OTel.
get_databases— Découvrez toutes les bases de données de votre infrastructure : type de DB, hôte, débit (requêtes/min), latence p95, taux d'erreur, nombre de services dépendantsget_database_slow_queries— Les exécutions de requêtes les plus lentes réelles, ordonnées par durée, avec des ID de trace pour explorer les traces complètesget_database_queries— Modèles de requêtes et agrégats : fréquence d'exécution d'une requête, durée moyenne/p95, taux d'erreurget_database_server_metrics— Métriques côté serveur de l'hôte DB lui-même (CPU, connexions, taux de succès du buffer — dépend de votre système DB)
Prend en charge PostgreSQL, MySQL, MongoDB, Redis, Aerospike et tout autre système avec des traces OTel ayant un attribut db_system.
Prometheus / PromQL
prometheus_range_query— Requêtes de plage PromQL sur n'importe quelle métriqueprometheus_instant_query— Requêtes instantanées ; utilisez des fonctions de cumul commeavg_over_time,sum_over_timeprometheus_label_values— Valeurs d'étiquette pour une série donnéeprometheus_labels— Toutes les étiquettes disponibles pour une série
Pointez-les vers une source de données/cluster différente du défaut en définissant LAST9_DATASOURCE.
Logs
get_logs— Requêtes de pipeline de log JSON complètes (agrégations, filtres, extraction de champs)get_service_logs— Lignes de log brutes pour un service, filtrables par sévérité et contenu du corpsget_log_attributes— Catalogue global des attributs dans le schéma de log pour une fenêtre temporelleget_log_attributes_for_pipeline— Champs de log réellement présents pour un pipeline en cours (découverte limitée), chacun avec sonfilter_fieldexactget_drop_rules— Règles de suppression de log depuis Last9 Control Planeadd_drop_rule— Créer une nouvelle règle de suppression pour réduire le volume de logs à la source
Traces
get_traces— Requêtes de pipeline de trace JSON pour des recherches larges et des agrégationsget_service_traces— Traces par ID de trace exact ou nom de service. Utilisez ceci lorsque vous avez un ID de trace — c'est plus rapideget_trace_attributes— Catalogue global des attributs dans le schéma de traceget_trace_attributes_for_pipeline— Attributs réellement présents pour un pipeline en cours (découverte limitée), chacun avec sonfilter_fieldexactget_trace_attribute_values— Valeurs distinctes pour un attribut de trace, éventuellement limitées à un pipeline
Événements de changement et alertes
get_change_events— Déploiements, changements de configuration, retours en arrière. Corrélez les incidents avec ce qui a changéget_alert_config— Configurations des règles d'alerte — consultables par nom, sévérité, type, étiquettesget_alerts— Alertes actuellement déclenchées dans une fenêtre temporelleget_alert_rule_state— État de déclenchement historique (1/0) par règle d'alerte sur une plage temporelle, regroupé parrule_id. Filtrable par groupe d'alerte, nom de règle, filtres d'étiquette et état.get_notification_channels— Canaux de notification configurés (Slack, PagerDuty, email, etc.)
Tableaux de bord personnalisés
list_dashboards— Tous les tableaux de bord personnalisés de votre organisation : IDs, noms et métadonnéesget_dashboard— Définition complète du tableau de bord par ID, y compris les panneaux et les requêtescreate_dashboard— Créer un nouveau tableau de bord personnalisé avec des panneaux, des requêtes et des métadonnéesupdate_dashboard— Mettre à jour un tableau de bord existant par ID (les tableaux de bord système en lecture seule renvoient une erreur)delete_dashboard— Supprimer un tableau de bord personnalisé par ID
Résolution de nom floue
did_you_mean— Lorsque l'agent n'est pas sûr d'un nom d'entité, ceci renvoie les correspondances les plus proches de votre catalogue (services, environnements, hôtes, bases de données, déploiements/espaces de noms K8s, jobs). Jusqu'à 3 suggestions avec des scores de similarité. Le serveur appelle ceci automatiquement avant la plupart des outils lorsqu'une recherche de nom ne renvoie rien.
Comment ça fonctionne
Liens profonds sur chaque réponse. Chaque outil renvoie un champ deep_link — une URL directe vers le tableau de bord Last9 pour cette requête et cette plage temporelle exactes. L'agent peut vous donner le lien ; vous cliquez ; vous y êtes.
Mise en cache des attributs en direct. Au démarrage, le serveur récupère les noms réels des attributs de log et de trace de vos données et les intègre dans les descriptions des outils. Cela signifie que l'assistant IA sait quels champs existent dans votre schéma, pas seulement une liste générique. Le cache se rafraîchit toutes les 2 heures.
Résultats volumineux fragmentés. get_logs et get_traces gèrent les grands ensembles de résultats par fragmentation plutôt que par troncature. La limite par défaut est de 5000 entrées pour les logs ; configurable via LAST9_MAX_GET_LOGS_ENTRIES.
Développement
Mode HTTP, test curl, construction depuis la source
Exécuter en mode HTTP
export LAST9_REFRESH_TOKEN="your_refresh_token"
export LAST9_HTTP=true
export LAST9_PORT=8080
./last9-mcp-server
Le serveur démarre sur http://localhost:8080/mcp.
Tester avec curl
Le HTTP diffusé MCP nécessite d'abord une poignée de main d'initialisation. Ne définissez pas Mcp-Session-Id lors de la première requête.
# Step 1: Initialize
SESSION_ID=$(curl -si -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {"name": "curl-test", "version": "1.0"}
}
}' | grep -i "^Mcp-Session-Id:" | awk '{print $2}' | tr -d '\r')
echo "Session: $SESSION_ID"
# Step 2: Send initialized notification
curl -s -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Mcp-Session-Id: $SESSION_ID" \
-d '{"jsonrpc": "2.0", "method": "notifications/initialized", "params": {}}'
# Step 3: List tools
curl -s -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Mcp-Session-Id: $SESSION_ID" \
-d '{"jsonrpc": "2.0", "id": 2, "method": "tools/list", "params": {}}'
# Step 4: Call a tool
curl -s -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Mcp-Session-Id: $SESSION_ID" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "get_service_logs",
"arguments": {
"service": "your-service-name",
"lookback_minutes": 30,
"limit": 10
}
}
}'
Construire depuis la source
git clone https://github.com/last9/last9-mcp-server.git
cd last9-mcp-server
go build -o last9-mcp-server
LAST9_HTTP=true ./last9-mcp-server
LAST9_HTTP=true est pour le développement local. Pour une utilisation réelle, le point de terminaison HTTP hébergé est plus simple.
Référence des outils
Tous les paramètres, normes de saisie de temps et détails
Saisie de temps
- Les heures absolues (
start_time_iso/end_time_iso, outime_iso) ont priorité surlookback_minutes. - Pour les fenêtres relatives : utilisez
lookback_minutes. - Pour les fenêtres absolues : utilisez RFC3339/ISO8601 —
2026-02-09T15:04:05Z. - L'héritage
YYYY-MM-DD HH:MM:SSest accepté uniquement pour compatibilité.
get_exceptions
limit(entier, optionnel) : Exceptions max. Défaut : 20.lookback_minutes(entier, optionnel) : Défaut : 60.start_time_iso/end_time_iso(chaîne, optionnel) : Plage temporelle absolue.service_name(chaîne, optionnel) : Filtrer par service.span_name(chaîne, optionnel) : Filtrer par nom de span.deployment_environment(chaîne, optionnel) : Filtrer par environnement.
get_service_summary
start_time_iso/end_time_iso(chaîne, optionnel)env(chaîne, optionnel) : Défaut àprod.
get_service_environments
start_time_iso/end_time_iso(chaîne, optionnel)
Tous les autres outils APM nécessitent une valeur
env. Utilisez""si ceci ne renvoie rien.
get_service_performance_details
service_name(chaîne, requis)lookback_minutes(entier, optionnel) : Défaut : 60.start_time_iso/end_time_iso(chaîne, optionnel)env(chaîne, optionnel) : Défaut àprod.
get_service_operations_summary
service_name(chaîne, obligatoire)lookback_minutes(entier, facultatif) : Par défaut : 60.start_time_iso/end_time_iso(chaîne, facultatif)env(chaîne, facultatif) : Par défaut :prod.
get_service_dependency_graph
service_name(chaîne, facultatif)lookback_minutes(entier, facultatif) : Par défaut : 60.start_time_iso/end_time_iso(chaîne, facultatif)env(chaîne, facultatif) : Par défaut :prod.
get_databases
env(chaîne, facultatif) : Filtrer par environnement. Par défaut : tous.lookback_minutes(entier, facultatif) : Par défaut : 60.start_time_iso/end_time_iso(chaîne, facultatif)
get_database_slow_queries
db_system(chaîne, facultatif) : par ex.postgresql,mysql,mongodb,redis.host(chaîne, facultatif) : Hôte de la base de données (net_peer_name).service_name(chaîne, facultatif) : Nom du service appelant.env(chaîne, facultatif)min_duration_ms(flottant, facultatif) : Durée minimale de la requête en ms.lookback_minutes(entier, facultatif) : Par défaut : 60.start_time_iso/end_time_iso(chaîne, facultatif)limit(entier, facultatif) : Par défaut : 20.
get_database_queries
db_system(chaîne, facultatif)host(chaîne, facultatif)service_name(chaîne, facultatif)env(chaîne, facultatif)lookback_minutes(entier, facultatif) : Par défaut : 60.start_time_iso/end_time_iso(chaîne, facultatif)limit(entier, facultatif) : Par défaut : 20.
get_database_server_metrics
db_system(chaîne, obligatoire) : par ex.postgresql,mysql,mongodb,redis,aerospike.host(chaîne, facultatif)lookback_minutes(entier, facultatif) : Par défaut : 60.start_time_iso/end_time_iso(chaîne, facultatif)
prometheus_range_query
query(chaîne, obligatoire) : La requête PromQL.start_time_iso/end_time_iso(chaîne, facultatif) : Par défaut, les 60 dernières minutes.lookback_minutes(flottant, facultatif) : Par défaut : 60.
prometheus_instant_query
query(chaîne, obligatoire)time_iso(chaîne, facultatif) : Par défaut, maintenant.lookback_minutes(flottant, facultatif)
prometheus_label_values
match_query(chaîne, facultatif) : Filtre PromQL.label(chaîne, obligatoire) : Nom de l'étiquette.start_time_iso/end_time_iso(chaîne, facultatif)
prometheus_labels
match_query(chaîne, facultatif) : Filtre PromQL.start_time_iso/end_time_iso(chaîne, facultatif)
get_logs
logjson_query(tableau, obligatoire) : Requête de pipeline JSON.lookback_minutes(entier, facultatif) : Par défaut : 5.start_time_iso/end_time_iso(chaîne, facultatif)limit(entier, facultatif) : Valeur par défaut du serveur : 5000.index(chaîne, facultatif) :physical_index:<name>ourehydration_index:<block_name>.
Pour l'inventaire des services basé sur les logs, interrogez d'abord physical_index_service_count :
sum by (name, service_name, env) (physical_index_service_count{destination="logs"})
Utilisez service_name comme ServiceName, env comme environnement lorsqu'il est présent, et name comme nom d'index physique. Si name="default", omettez index ; pour un index physique non par défaut sélectionné par l'utilisateur, passez index: "physical_index:<name>". Si le backend rejette le filtrage explicite par index physique, réessayez sans index et signalez que le filtrage explicite par index physique n'est pas disponible pour ce backend.
get_service_logs
service(chaîne, obligatoire)lookback_minutes(entier, facultatif) : Par défaut : 60.limit(entier, facultatif) : Par défaut : 20.env(chaîne, facultatif)severity_filters(tableau, facultatif) : par ex.["error", "warn"]. Logique OU.body_filters(tableau, facultatif) : par ex.["timeout", "failed"]. Logique OU.start_time_iso/end_time_iso(chaîne, facultatif)index(chaîne, facultatif)
Plusieurs types de filtres se combinent avec ET. Chaque tableau utilise OU en interne.
Utilisez d'abord get_logs pour des comptages agrégés larges ; utilisez get_service_logs seulement après avoir restreint à un service/environnement/index et à un petit échantillon.
get_log_attributes
lookback_minutes(entier, facultatif) : Par défaut : 15.start_time_iso/end_time_iso(chaîne, facultatif)region(chaîne, facultatif)index(chaîne, facultatif)
get_log_attributes_for_pipeline
pipeline(tableau, obligatoire) : Étapes de filtre préalables pour délimiter la découverte, par ex.[{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].lookback_minutes(entier, facultatif) : Par défaut : 15.start_time_iso/end_time_iso(chaîne, facultatif)region(chaîne, facultatif)index(chaîne, facultatif)
get_drop_rules
Aucun paramètre.
add_drop_rule
name(chaîne, obligatoire)filters(tableau, obligatoire) : Chaque filtre :key,value,operator(equals/not_equals),conjunction(and).
get_traces
À utiliser pour les recherches larges et les agrégations. Pour une recherche par ID de trace exact, utilisez get_service_traces.
tracejson_query(tableau, obligatoire)start_time_iso/end_time_iso(chaîne, facultatif)lookback_minutes(entier, facultatif) : Par défaut : 60.limit(entier, facultatif) : Par défaut : 5000.
get_service_traces
Exactement l'un de trace_id ou service_name est obligatoire.
trace_id(chaîne, facultatif) : Période de recherche par défaut : 72 heures.service_name(chaîne, facultatif) : Période de recherche par défaut : 60 min.lookback_minutes(entier, facultatif)start_time_iso/end_time_iso(chaîne, facultatif)limit(entier, facultatif) : Par défaut : 10.env(chaîne, facultatif)
get_trace_attributes
lookback_minutes(entier, facultatif) : Par défaut : 15.start_time_iso/end_time_iso(chaîne, facultatif)region(chaîne, facultatif)
get_trace_attributes_for_pipeline
pipeline(tableau, obligatoire) : Étapes de filtre préalables pour délimiter la découverte, par ex.[{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].lookback_minutes(entier, facultatif) : Par défaut : 15.start_time_iso/end_time_iso(chaîne, facultatif)region(chaîne, facultatif)
get_trace_attribute_values
tag_name(chaîne, obligatoire) : Nom de l'attribut provenant deget_trace_attributes(par ex.resource_departmentouattributes['http.method']).pipeline(tableau, facultatif) : Étapes de filtre préalables pour délimiter les valeurs ; omettez pour les valeurs globales.region(chaîne, facultatif)
get_change_events
start_time_iso/end_time_iso(chaîne, facultatif)lookback_minutes(entier, facultatif) : Par défaut : 60.service(chaîne, facultatif)environment(chaîne, facultatif)event_name(chaîne, facultatif) : Appelez d'abord sans ceci pour obteniravailable_event_names.
get_alert_config
search_term(chaîne, facultatif) : Recherche en texte libre parmi le nom, le groupe, la source de données, les étiquettes.rule_name(chaîne, facultatif)severity(chaîne, facultatif)rule_type(chaîne, facultatif) :staticouanomaly.alert_group_name/alert_group_type/data_source_name(chaîne, facultatif)tags(tableau, facultatif) : Tous doivent correspondre (logique ET).
get_alerts
time_iso(chaîne, facultatif) : Heure d'évaluation au format RFC3339.window(entier, facultatif) : Période de recherche en secondes. Par défaut : 900. Plage : 60–86400.lookback_minutes(entier, facultatif) : Plage : 1–1440.
get_alert_rule_state
start_time(entier, obligatoire) : Début de la plage en époque Unix (inclusif).end_time(entier, obligatoire) : Fin de la plage en époque Unix (inclusif).step(entier, obligatoire) : Résolution en secondes entre les échantillons. Le nombre d'échantillons((end_time - start_time) / step + 1)est plafonné à 100.alert_group_id(chaîne, facultatif) : Filtrer par ID de groupe d'alertes.rule_name(chaîne, facultatif) : Filtre par expression régulière sur le nom de la règle.alert_group_name(chaîne, facultatif) : Filtre par expression régulière sur le nom du groupe d'alertes.label_filters(chaîne, facultatif) : Filtres d'étiquetteskey=valueséparés par des virgules.state(chaîne, facultatif) : Filtrer par état (par ex.firing).
Renvoie une carte JSON de rule_id -> [{timestamp, is_firing}]. Un horodatage auquel une règle est absente de la réponse amont est signalé comme is_firing=0 — cela signifie « non observé comme étant en alerte », et non un état normal confirmé.
get_notification_channels
Aucun paramètre. Renvoie tous les canaux de notification configurés (Slack, PagerDuty, email, webhooks, etc.).
did_you_mean
query(chaîne, obligatoire) : Le nom à rechercher — partiel, mal orthographié ou abrégé.type(chaîne, facultatif) : Restreindre au type d'entité :service,environment,host,database,k8s_deployment,k8s_namespace,job.
Renvoie jusqu'à 3 correspondances les plus proches avec des scores de similarité. Utilisez ceci avant tout appel d'outil où le nom de l'entité est incertain. Si un appel précédent a renvoyé des résultats vides, essayez ceci avant de réessayer.
list_dashboards
Aucun paramètre. Renvoie tous les tableaux de bord personnalisés de l'organisation sous forme de tableau JSON avec id, name et les métadonnées.
get_dashboard
id(chaîne, obligatoire) : UUID du tableau de bord.region(chaîne, facultatif) : Région pour le peuplement des requêtes des panneaux. Par défaut, la région de la source de données configurée.
create_dashboard
dashboard(objet, obligatoire) : Définition du tableau de bord avecnameetpanels[]. Chaque panneau nécessitename,version,layout(x,y,w,h),visualization.typeetqueries[].metadata(objet, facultatif) : Métadonnées du tableau de bord — champs_categoryet_type(par ex.{"_category":"custom","_type":"metrics"}).
update_dashboard
id(chaîne, obligatoire) : UUID du tableau de bord à mettre à jour.dashboard(objet, obligatoire) : Corps complet du tableau de bord de remplacement (même forme que pour la création).metadata(objet, facultatif) : Métadonnées de remplacement. Les tableaux de bord système en lecture seule renvoient une erreur 403.
delete_dashboard
id(chaîne, obligatoire) : UUID du tableau de bord à supprimer. Les tableaux de bord système en lecture seule ne peuvent pas être supprimés.
Tests
Voir TESTING.md pour la configuration et les instructions des tests d'intégration.
