Les outils

Le serveur MCP de Supervise expose treize outils. Claude les choisit et les enchaîne lui-même ; cette page décrit ce que chacun fait, pour les équipes techniques et les curieux.

Vue d'ensemble

OutilRôleNature
list_deploymentsLister les déploiements et ceux en préparationlecture
list_locationsLister les emplacements possibles d'un nouveau déploiementlecture
prepare_uploadCréer ou reprendre un déploiement et obtenir l'adresse d'envoi du codeécriture
prepare_checkObtenir l'adresse d'envoi du code pour une vérification seule, sans déploiementécriture
check_codeVérifier le code envoyé après prepare_checkécriture
deployFaire avancer le déploiement jusqu'au testécriture
go_liveMettre en ligne une version testéeconfirmation
get_logsÉtat et derniers journaux d'un déploiement en préparationlecture
get_scheduleProgrammations d'un job en lignelecture
schedule_jobAjouter ou modifier une programmationécriture
remove_scheduleRetirer une programmationconfirmation
set_pausedMettre en pause ou reprendre un job ou un serviceconfirmation
set_gainsEnregistrer les gains d'un job en ligneécriture

« Confirmation » : l'outil est déclaré destructif (destructiveHint), et Claude demande l'accord de la personne avant de l'appeler.

Parcours type d'un déploiement

# 1. créer le déploiement et obtenir l'adresse d'envoi
prepare_upload(name="relances-clients")        → needs_upload  (draft_id, upload.command)
# 2. Claude exécute upload.command : zip du dossier, puis envoi
# 3. faire avancer, en rappelant tant que la préparation ou le test tourne
deploy(draft_id, command="python main.py")     → building
deploy(draft_id)                                → testing
deploy(draft_id)                                → ready_to_go_live
# 4. après confirmation de la personne
go_live(draft_id)                               → live

Parcours d'une vérification seule

# 1. obtenir l'adresse d'envoi (aucun déploiement créé)
prepare_check()                                 → needs_upload  (upload.command)
# 2. Claude exécute upload.command : zip du dossier, puis envoi
# 3. le verdict, sans rien conserver
check_code()                                    → conform | blocked_security | failed

Toutes les réponses suivent la même forme, décrite dans Statuts et réponses : un status, un message à reformuler pour la personne et un next_action qui dit à Claude quoi faire ensuite.


list_deployments lecture

Lister les déploiements

Les déploiements de la personne dans l'organisation de l'adresse, et ceux en cours de préparation (hors brouillons déjà mis en ligne).

Paramètres : aucun.

{
  "deployments": [{ "id", "name", "mode", "status", "version", "can_manage" }],
  "drafts":      [{ "draft_id", "name", "step", "status" }]
}

list_locations lecture

Lister les emplacements

Où la personne peut ranger un nouveau déploiement : l'organisation, les équipes dont elle est membre, les dossiers où elle a été ajoutée, avec leur chemin (« Équipe / Parent / Dossier »). Seuls ces emplacements sont acceptés par prepare_upload.

Paramètres : aucun.

{ "locations": [{ "type": "organization" | "team" | "folder", "id", "name", "path" (dossiers) }] }

prepare_upload

Préparer l'envoi du code

Crée un déploiement (name), reprend un déploiement en préparation (draft_id) ou prépare une nouvelle version d'un déploiement en ligne (deployment_id). Renvoie l'adresse où envoyer le ZIP du projet et la commande prête à exécuter. Réservé aux environnements qui ont accès aux fichiers de la personne (Claude Code).

Comportement

{
  "status": "needs_upload",
  "draft_id": "…",
  "zip_excludes": [".git/*", "node_modules/*", ".venv/*", ".env", …],
  "upload": {
    "method": "PUT",
    "url": "…",            // adresse signée, un seul fichier, durée limitée
    "headers": { "Content-Type": "application/zip", "x-upsert": "true" },
    "command": "zip -qr … && curl -sS -X PUT … --data-binary @… \"…\""
  }
}

prepare_check

Préparer une vérification Cybervise

Renvoie l'adresse où envoyer le ZIP du projet pour vérifier qu'il est conforme (secrets en clair, dépendances piégées, variables réservées), sans rien déployer : aucun brouillon n'est créé. Un envoi précédent non vérifié par la même personne est simplement remplacé. Réservé aux environnements qui ont accès aux fichiers de la personne (Claude Code).

Paramètres : aucun.

{
  "status": "needs_upload",
  "zip_excludes": [".git/*", "node_modules/*", ".venv/*", ".env", …],
  "upload": {
    "method": "PUT",
    "url": "…",            // adresse signée, un seul fichier, durée limitée
    "headers": { "Content-Type": "application/zip", "x-upsert": "true" },
    "command": "zip -qr … && curl -sS -X PUT … --data-binary @… \"…\""
  }
}

Contrairement à prepare_upload, la réponse ne porte pas de draft_id : rien n'identifie un déploiement, puisqu'aucun n'est créé.

check_code

Vérifier le code avec Cybervise

Vérifie le code envoyé après prepare_check, avec la même fonction que l'étape de sécurité d'un déploiement : les deux ne peuvent jamais rendre un verdict différent sur le même code. Le code envoyé est effacé dès la vérification faite, quel qu'en soit le résultat. Rien n'est déployé, et rien n'est conservé : ni brouillon, ni archive, ni verdict, ni trace dans la chronologie d'un déploiement.

Paramètres : aucun.

Réponses possibles

StatutQuandChamps en plus
needs_uploadAucun code reçu, ou déjà effacé—
conformAucun problème trouvéchecks
blocked_securityCybervise a trouvé des problèmesfindings, more
failedLe projet ne peut pas être lu (format, code compilé…), ou la vérification n'a pas abouti—
{
  "status": "conform",
  "message": "Aucun problème trouvé.",
  "checks": [{ "label": "…", "state": "…" }]
}
{
  "status": "blocked_security",
  "findings": [{
    "rule": "…", "file": "config.py", "line": 12,
    "label": "…", "message": "…", "fix": "…"
  }],
  "more": 0
}

Une vérification conform n'est pas une permission : un déploiement ultérieur du même code repasse par sa propre étape de vérification de sécurité (deploy), qui peut en théorie être relancée sur un code modifié entre les deux appels.

deploy

Déployer

Fait avancer le déploiement d'autant d'étapes que possible : lecture du code, vérification de sécurité, revue des sites externes, réglages, préparation, test. Idempotent : rappelé avec le même draft_id, il reprend là où il s'était arrêté et ne refait rien sans raison. Claude le rappelle tant qu'il répond building ou testing.

Réponses possibles

StatutQuandChamps en plus
needs_uploadLe code n'a pas encore été reçudraft_id
needs_inputCommande introuvable, langage non pris en charge, variables ordinaires manquantes, choix d'accès d'un nouveau service non fait, choix des fichiers en entrée d'un nouveau job non fait, autre refusrunnable_files, missing ou choices
blocked_securityLa vérification de sécurité a bloqué le codefindings, more
needs_secretsIl manque des secretsmissing, secrets_page
buildingPréparation en cours—
needs_filesLe test d'un job à fichiers attend qu'au moins un fichier soit déposéfiles_page
testingTest en cours—
failedPréparation ou test en échec, ou vérification qui n'a pas aboutiuntrusted_output
ready_to_go_liveTest réussiurl, untrusted_output, network, pour un service access, pour un job gains (si renseignés) et outputs_page (si des fichiers ont été produits)
liveDéjà en lignedeployment_id
{
  "status": "blocked_security",
  "draft_id": "…",
  "findings": [{
    "rule": "…", "file": "config.py", "line": 12,
    "label": "…", "message": "…", "fix": "…"
  }],
  "more": 0            // au-delà de 50 problèmes, combien sont omis
}

La valeur trouvée par la vérification n'apparaît jamais dans findings.

{
  "status": "needs_input",
  "message": "Qui pourra ouvrir l'adresse de ce service ?",
  "draft_id": "…",
  "choices": { "public": "tout le monde, sans connexion", "members": "les membres de l'équipe Data" }
}

Pour un nouveau service, deploy s'arrête ici, avant toute fabrication, jusqu'à ce que Claude le rappelle avec public. Le choix est gardé pour chaque nouvelle version.

{
  "status": "needs_input",
  "message": "Ce programme a-t-il besoin de fichiers en entrée à chaque exécution ?",
  "draft_id": "…",
  "choices": {
    "true": "oui : des fichiers à déposer avant chaque exécution, pas de programmation à heure fixe",
    "false": "non : il se lance et se programme librement"
  }
}

Pour un nouveau job, deploy s'arrête ici, avant toute fabrication, jusqu'à ce que Claude le rappelle avec takes_files. Le choix est gardé pour chaque nouvelle version.

{
  "status": "needs_files",
  "message": "Le test attend les fichiers que ce programme lit à chaque exécution.",
  "draft_id": "…",
  "files_page": "https://votre-organisation.wesupervise.ai/deploiements/fichiers?draft=…"
}

Une fois la fabrication faite, le test d'un job qui attend des fichiers (takes_files true) s'arrête sur needs_files si aucun fichier n'est encore déposé. Il reprend quand Claude rappelle deploy, ou sans attendre avec test_without_files.

{
  "status": "ready_to_go_live",
  "draft_id": "…",
  "url": "…",
  "untrusted_output": "…",
  "network": { "restricted": true, "allowed": ["api.stripe.com"] },
  "gains": { "minutes_per_run": 20, "euros_per_run": 15 },
  "outputs_page": "https://votre-organisation.wesupervise.ai/deploiements/sorties?deployment=…&run=…"
}

network accompagne toujours la réponse d'un déploiement qui a atteint la revue des sites externes : restricted dit si l'accès est limité à la liste autorisée, allowed liste les adresses de cette liste. gains n'apparaît que si la personne les a renseignés (job seulement). outputs_page n'apparaît que si le test a produit des fichiers (job seulement) ; Claude n'ouvre jamais ce lien lui-même.

go_live confirmation

Mettre en ligne

Met en ligne un déploiement dont le test a réussi (ready_to_go_live). Pour une nouvelle version, remplace la version en ligne. Claude demande confirmation avant de l'appeler.

{ "status": "live", "draft_id", "deployment_id", "url", "dashboard" }

Si une étape manque, la réponse est needs_input et invite à rappeler deploy.

get_logs lecture

Journaux

L'état et les derniers journaux d'un déploiement en préparation : préparation et test.

{ "draft_id", "step", "build": "idle" | "running" | "done" | "failed" | null, "test": "idle" | "running" | "passed" | "failed" | null, "untrusted_output": "…" }

get_schedule lecture

Voir la programmation

Les programmations d'un job en ligne (exécutions uniques et rythme), avec leur prochaine exécution.

{
  "deployment_id", "name", "mode", "state", "can_manage",
  "schedules": [{
    "schedule_id", "kind": "once" | "recurring", "summary", "enabled",
    "next_run", "until", "timezone", "last_outcome"
  }]
}

schedule_job

Programmer un job

Ajoute une exécution unique ou un rythme à un job en ligne, ou modifie une programmation existante (schedule_id). Un job n'a qu'un rythme : en ajouter un second répond needs_input avec le rythme actuel (current), jusqu'à ce que Claude rappelle avec replace après accord de la personne.

Refusé pour un service, pour un job qui attend des fichiers, et pour une personne qui ne peut pas gérer le job. Réponse : status scheduled et l'état du job, comme get_schedule.

remove_schedule confirmation

Retirer une programmation

Réponse : status removed et l'état du job.

set_paused confirmation

Mettre en pause ou reprendre

En pause, un job ne se lance plus de lui-même (ses programmations sont suspendues) et un service s'arrête. Reprendre relance l'un ou l'autre.

Réponse : status paused ou resumed et l'état du job.

set_gains

Gains d'un job

Enregistre ce qu'une exécution d'un job en ligne fait gagner : des minutes et des euros. Facultatif. Pour un déploiement en préparation, ces mêmes valeurs se passent à deploy (minutes_per_run, euros_per_run). Réservé à qui peut gérer le job.

{
  "status": "saved",
  "message": "Les gains de « export-ventes » sont enregistrés.",
  "deployment_id": "…",
  "gains": { "minutes_per_run": 20, "euros_per_run": 15 }
}

Une valeur négative ou hors limite répond needs_input, sans rien enregistrer.