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
| Outil | Rôle | Nature |
|---|---|---|
list_deployments | Lister les déploiements et ceux en préparation | lecture |
list_locations | Lister les emplacements possibles d'un nouveau déploiement | lecture |
prepare_upload | Créer ou reprendre un déploiement et obtenir l'adresse d'envoi du code | écriture |
prepare_check | Obtenir l'adresse d'envoi du code pour une vérification seule, sans déploiement | écriture |
check_code | Vérifier le code envoyé après prepare_check | écriture |
deploy | Faire avancer le déploiement jusqu'au test | écriture |
go_live | Mettre en ligne une version testée | confirmation |
get_logs | État et derniers journaux d'un déploiement en préparation | lecture |
get_schedule | Programmations d'un job en ligne | lecture |
schedule_job | Ajouter ou modifier une programmation | écriture |
remove_schedule | Retirer une programmation | confirmation |
set_paused | Mettre en pause ou reprendre un job ou un service | confirmation |
set_gains | Enregistrer 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).
- namestring
Nom du nouveau déploiement, de 3 à 25 caractères.
- draft_idstring
Déploiement en préparation à reprendre, par exemple pour renvoyer un projet corrigé.
- deployment_idstring
Déploiement en ligne dont on prépare une nouvelle version. Elle reste au même emplacement.
- location_type"organization" | "team" | "folder"
Type de l'emplacement choisi, issu de
list_locations. - location_idstring
Identifiant de l'emplacement choisi.
Comportement
- Sans
name,draft_idnideployment_id:needs_input, un nom est demandé. - Sans emplacement et une seule possibilité : elle est utilisée. Plusieurs possibilités :
needs_inputavec la listelocations, rien n'est créé. - Un emplacement absent de la liste est refusé, rien n'est créé.
{
"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
| Statut | Quand | Champs en plus |
|---|---|---|
needs_upload | Aucun code reçu, ou déjà effacé | — |
conform | Aucun problème trouvé | checks |
blocked_security | Cybervise a trouvé des problèmes | findings, more |
failed | Le 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.
- draft_idstringobligatoire
Le déploiement en préparation, renvoyé par
prepare_upload. - commandstring
Commande de lancement, par exemple
python main.py. Sans elle, Supervise propose le fichier d'entrée détecté. - language"python" | "node"
Forcer le langage si la détection se trompe.
- mode"job" | "service"
job: lancé à la demande ou programmé.service: toujours en ligne. - portinteger1 à 65535
Port d'écoute d'un service.
- publicboolean
Service ouvert à tous sans connexion (
true) ou réservé aux membres de son emplacement, avec connexion (false). Pour un nouveau service, tant que ce choix n'a pas été fait,deploys'arrête avant la fabrication avecneeds_input(voir ci-dessous) : rien n'est fabriqué sur un choix qui n'a pas été fait. Une nouvelle version d'un service déjà en ligne garde le réglage précédent et n'est jamais redemandée. - envobject<string, string>
Variables ordinaires. Les clés trouvées par l'analyse sont remplies ; les autres sont ajoutées. Une clé invalide est ignorée et listée dans
ignored. - secretsobject<string, string>
Secrets, seulement si la personne a choisi de les donner à Claude. Seules les clés attendues par le déploiement sont gardées ; les autres sont listées dans
ignored. Jamais renvoyés ni journalisés. - domainsstring[]
Sites externes que le programme contacte (
api.stripe.com, une URL ou une adresse IP), en plus de ceux que l'organisation autorise déjà. Donnés dès le premier appel ; en ajouter après la préparation relance une version. - restrict_egressbooleandéfaut true
Sorties réseau limitées aux adresses autorisées (
true, par défaut) ou ouvertes à tout Internet (false, seulement si la personne le demande). Les adresses autorisées sont celles de l'organisation, plusdomains. Le changer après la préparation relance une version. - takes_filesboolean
Job seulement : il lit des fichiers déposés avant chaque exécution (
true) ou non (false). Pour un nouveau job, tant que ce choix n'a pas été fait,deploys'arrête avant la fabrication avecneeds_input(voir ci-dessous) : rien n'est fabriqué sur un choix qui n'a pas été fait. Une nouvelle version d'un job déjà en ligne garde le réglage précédent et n'est jamais redemandée. Un job àtruene se programme pas à heure fixe. - test_without_filesbooleandéfaut false
Lance le test d'un job à fichiers sans attendre qu'un fichier soit déposé, si la personne le demande.
- minutes_per_runinteger0 à 100 000
Job seulement : minutes gagnées par exécution. Ne touche pas à la fabrication ; refusé si négatif ou trop grand.
- euros_per_runnumber0 à 10 000 000
Job seulement : euros gagnés par exécution. Ne touche pas à la fabrication ; refusé si négatif ou trop grand.
Réponses possibles
| Statut | Quand | Champs en plus |
|---|---|---|
needs_upload | Le code n'a pas encore été reçu | draft_id |
needs_input | Commande 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 refus | runnable_files, missing ou choices |
blocked_security | La vérification de sécurité a bloqué le code | findings, more |
needs_secrets | Il manque des secrets | missing, secrets_page |
building | Préparation en cours | — |
needs_files | Le test d'un job à fichiers attend qu'au moins un fichier soit déposé | files_page |
testing | Test en cours | — |
failed | Préparation ou test en échec, ou vérification qui n'a pas abouti | untrusted_output |
ready_to_go_live | Test réussi | url, untrusted_output, network, pour un service access, pour un job gains (si renseignés) et outputs_page (si des fichiers ont été produits) |
live | Déjà en ligne | deployment_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.
- draft_idstringobligatoire
Le déploiement testé.
{ "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_idstringobligatoire
Le déploiement en préparation.
{ "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_idstringobligatoire
Le job en ligne.
{
"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.
- deployment_idstringobligatoire
Le job en ligne.
- kind"once" | "recurring"obligatoire
Exécution unique ou rythme.
- dateAAAA-MM-JJ
Jour de l'exécution unique.
- timeHH:MMdéfaut 06:00
Heure, lue dans
timezone. - frequency"hourly" | "daily" | "weekly" | "monthly" | "cron"défaut daily
Rythme d'une programmation
recurring. - weekdaysinteger[]
Jours pour
weekly: 0 = dimanche, 1 = lundi … 6 = samedi. - day_of_monthinteger1 à 31, défaut 1
Jour pour
monthly. - cronstring
Expression cron, seulement avec
frequencycron. - untilAAAA-MM-JJ
Dernier jour d'un rythme, facultatif.
- timezonestringdéfaut Europe/Paris
Fuseau IANA de la personne.
- schedule_idstring
La programmation à modifier.
- replacebooleandéfaut false
Remplacer le rythme existant, après confirmation 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
- deployment_idstringobligatoire
Le job.
- schedule_idstringobligatoire
La programmation à retirer, issue de
get_schedule.
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.
- deployment_idstringobligatoire
Le job ou le service.
- pausedbooleanobligatoire
true: pause.false: reprise.
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.
- deployment_idstringobligatoire
Le job en ligne.
- minutes_per_runinteger0 à 100 000
Minutes gagnées par exécution.
- euros_per_runnumber0 à 10 000 000
Euros gagnés par exécution.
{
"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.