−25%

sur Windows en paiement annuel, jusqu'au 31/10. Voir les offres

EQVPS
Commencer

Garde-fous MCP : des permissions sûres pour les agents IA

Avant de confier à un agent IA un jeton pour vos serveurs, sachez exactement ce qu'il peut toucher. Les 45 outils MCP d'EQVPS par niveau de risque, les limites appliquées par le serveur et la configuration que nous choisirions nous-mêmes.

Dernière vérification: 2026-10-04 · Serveur MCP 1.6.0 · 45 outils (jeton client)

Un jeton MCP, c'est le mot de passe de votre compte avec une API branchée dessus. Confiez-le à un agent et vous obtenez un utilisateur qui ne se fatigue jamais, lit toutes les pages qu'on lui indique et fait exactement ce que dit la dernière consigne de son contexte. La plupart du temps, c'est ce que vous voulez. Cette page parle du reste du temps.

Tout ce qui suit a été vérifié sur le serveur en production à la date indiquée en haut : la liste des outils vient de tools/list sur https://mcp.eqvps.com/mcp, les limites de l'API elle-même. Si vous découvrez le serveur, commencez par connecter un client MCP et les jetons API, puis revenez ici.

Modèle de menace : ce qui tourne mal en pratique

Trois choses, dans l'ordre où nous les voyons :

  1. L'agent comprend de travers. « Nettoie la machine de test » devient la réinstallation du mauvais serveur. Aucune malveillance, juste un modèle qui comble un trou dans la consigne.
  2. L'injection de prompt. L'agent lit un texte que vous n'avez pas écrit (un README, une réponse du support, une page récupérée sur le web) et ce texte lui dit de faire quelque chose. Si l'agent détient un jeton avec tous les droits, la consigne injectée les a aussi.
  3. Le jeton fuite. Il atterrit dans un historique shell, un dépôt public, une config MCP partagée ou une ligne de log.

Le serveur MCP vérifie que le jeton est valide et que le serveur appartient à ce compte (ou lui est délégué). Il ne sait pas ce que vous vouliez dire. Chaque garde-fou ci-dessous répond à une seule question : quels dégâts sont possibles quand la consigne est fausse ?

Tous les outils MCP, par niveau de risque

Un jeton client voit 45 outils (serveur MCP 1.6.0). Un jeton revendeur (rk_…) voit un ensemble distinct de 30 outils revendeur et aucun de ceux-ci, l'endpoint en compte donc 75 au total. Votre client ne reçoit que son propre ensemble via tools/list.

Cette page classe les outils par niveau de risque. Les paramètres et exemples d'appels de chaque outil sont dans la référence des paramètres ; tous les outils en une ligne, y compris les 30 outils revendeur, sont dans la liste complète.

Nous ne publions pas encore d'annotations d'outils MCP (readOnlyHint, destructiveHint), votre client ne peut donc pas les trier seul. Réglez les validations à la main d'après les niveaux ci-dessous.

Niveau 0 — public, sans jeton (5)

OutilCe qu'il fait
get_startedTout le parcours en une réponse : quels outils appeler, dans quel ordre
list_plansOffres, prix, images d'OS
sandbox_pricingTarifs des sandboxes
register_accountCrée un nouveau compte et renvoie son jeton
loginE-mail + mot de passe → jeton

Niveau 1 — lecture du compte, sans effet de bord (15)

OutilCe qu'il faitAttention
whoamiIdentifiant, nom, e-mail du compte
get_balanceSolde prépayé
list_vpsServeurs actifs, en création et suspendus
get_vps_statusÉtat, caractéristiques, informations d'accèsAvec reveal: true, renvoie le mot de passe root
get_vps_metricsCPU, mémoire, réseau, disque dans le temps
get_upgrade_optionsOffres vers lesquelles le serveur peut passer sans réinstallation
list_delegationsÀ qui vous avez donné accès
list_delegated_to_meServeurs que d'autres vous ont délégués
list_ticketsVos tickets de support
get_ticketUn ticket et son filLe texte du ticket est une entrée non fiable pour l'agent
list_sandboxesVos sandboxes
get_sandboxUne sandbox et sa consommation
get_taskSortie d'une tâche en arrière-plan
download_fileLit un petit fichier dans une sandbox
get_download_urlLien temporaire vers un fichier de sandboxQuiconque a le lien peut télécharger jusqu'à son expiration

Niveau 2 — modifie l'état, ne dépense rien (17)

OutilCe qu'il faitAttention
power_vpsstart / stop / rebootUn stop est un stop : les services tombent
set_hostnameRenomme le serveurModifie la valeur que confirm vérifie
undo_cancelRetire une résiliation programmée en fin de période
refresh_tokenNouveau jeton, l'ancien est révoqué aussitôtMettez à jour toute config statique ensuite
set_passwordDéfinit le mot de passe du compte s'il n'en a pasLe détenteur du jeton peut le définir avant vous
topup_balanceFacture de recharge + lien de paiement cryptoLe régler exige un portefeuille
pay_invoiceLien de paiement pour une facture impayéeIdem
accept_delegationAccepte une invitation
revoke_delegationMet fin à une délégation
create_ticket / reply_ticket / close_ticketTickets de supportL'agent écrit au support en votre nom
run_code / exec_commandExécute du code dans une sandboxDans la sandbox uniquement, pas sur votre VPS
kill_taskArrête une tâche de fond de la sandbox
upload_file / get_upload_urlDépose un fichier dans une sandbox

Niveau 3 — dépense, détruit des données ou accorde un accès (8)

OutilCe qu'il faitContrôle côté serveur
order_vpsCommande un serveur, payé sur le soldeSolde insuffisant → facture impayée, rien n'est débité
change_planChangement d'offre sans réinstallation, différence débitée du soldeconfirm: true ; solde insuffisant → 402
create_sandboxLance une sandbox facturéeSolde vide → 402
reinstall_vpsEfface le disque et installe un nouvel OSconfirm = nom d'hôte exact ou DELETE ; 4 appels/min
reset_passwordNouveau mot de passe root, l'ancien cesse de fonctionnerconfirm = nom d'hôte ou DELETE ; 6 appels/min
cancel_serviceend_of_period (par défaut, annulable) ou immediate (détruit le serveur tout de suite)immediate exige confirm = nom d'hôte
kill_sandboxSupprime une sandbox et ses fichiersaucun
delegate_serviceDonne à une autre personne un accès opérateur à un serveurPropriétaire uniquement ; la personne doit accepter

Journal des changements de l'ensemble d'outils

DateVersion du serveurChangementEffet sur le risque
2026-10-031.6.0Ajout de refresh_token ; les jetons durent 1 an par défautNiveau 2
2026-10-031.5.0undo_cancel, get_upgrade_options, change_planchange_plan dépense le solde → niveau 3
2026-10-031.1.013 outils de sandboxcreate_sandbox dépense, kill_sandbox détruit → niveau 3

La version en service est publique : curl -s https://mcp.eqvps.com/healthz. Quand elle change, ce tableau change avec elle.

Le solde est le plafond de dépenses

EQVPS fonctionne en prépayé. Pas de carte enregistrée, pas de ligne de crédit, pas de découvert : le maximum qu'un agent puisse dépenser, c'est ce qui se trouve sur le solde. Trois outils dépensent : order_vps, change_plan et create_sandbox. Les renouvellements de vos serveurs existants sortent du même solde.

L'agent peut créer des demandes de paiement, pas les régler. topup_balance et pay_invoice renvoient un lien de paiement crypto, et un lien ne fait rien sans portefeuille derrière. Il n'existe pas non plus d'endpoint de retrait : l'argent du solde peut acheter des services dans votre compte, pas en sortir. Les remboursements d'une résiliation immédiate reviennent eux aussi sur le solde.

Une réserve, et elle est réelle. Si vous gardez le solde très bas pour brider l'agent, vos propres renouvellements échouent et vos serveurs passent en période de grâce. Notre règle empirique : un cycle de renouvellement de ce que vous faites déjà tourner, plus le budget de la tâche en cours de l'agent. Le guide du budget d'agent détaille le calcul. Et si vous donnez à l'agent son propre portefeuille approvisionné, ce portefeuille devient un second plafond à surveiller.

Moindre privilège : pas (encore) de jeton en lecture seule

Réponse directe : chaque jeton client a les mêmes droits que le compte dans le tableau de bord. Le nom et la durée de vie d'un jeton se règlent, ses scopes non.

Ce qu'il y a de plus restreint aujourd'hui, c'est la délégation. Vous donnez à l'agent son propre compte, avec un solde à zéro, et vous lui déléguez un serveur :

delegate_service  { "service_id": "EQ-XXXX", "email": "agent@yourdomain.com", "expires_days": 30 }

La même chose en REST :

curl -s -X POST "https://api.eqvps.com/api/v1/eqvps/services/EQ-XXXX/delegations" \
  -H "Authorization: Bearer $EQVPS_TOKEN" -H "Content-Type: application/json" \
  -d '{"email":"agent@yourdomain.com","expires_days":30}'

L'invitation doit être acceptée en étant connecté avec cet e-mail (accept_delegation), et expires_days va de 1 à 365. Pas à pas avec captures d'écran : déléguer un accès et l'accès dans la documentation.

Un compte délégué peutUn compte délégué ne peut pas
Voir l'état, les métriques et l'historique de ce seul serveurVoir vos autres serveurs, votre solde ou vos factures
Démarrer, arrêter, redémarrerRésilier, renouveler ou changer d'offre
Définir le nom d'hôte et le DNS inverseAcheter des options ou des IP
Réinitialiser le mot de passe rootOuvrir la console web
Réinstaller l'OSDéléguer le serveur à quelqu'un d'autre

Regardez les deux dernières lignes de gauche. Un délégué ne peut pas dépenser votre argent, mais il peut effacer ce serveur. Activez les sauvegardes sur tout serveur qu'un agent peut réinstaller.

Hygiène des jetons

Un jeton par agent, avec un nom. Créez-le dans Tableau de bord → Paramètres → Jetons API pour agents, ou ainsi :

curl -s -X POST "https://api.eqvps.com/api/v1/eqvps/auth/tokens" \
  -H "Authorization: Bearer $EQVPS_TOKEN" -H "Content-Type: application/json" \
  -d '{"name":"backup-agent","expires_in_days":90}'

Le jeton n'est affiché qu'une fois. Durée de vie de 1 à 1825 jours, 365 si vous ne précisez rien. Pour un agent, nous choisirions 90.

Gardez-le dans un fichier que vous seul pouvez lire, pas dans le dépôt, pas dans le prompt, pas dans une variable shell que vous copiez partout :

mkdir -p ~/.config/eqvps && chmod 700 ~/.config/eqvps
( umask 077; read -rsp 'EQVPS token: ' T; echo; printf 'EQVPS_TOKEN=%s\n' "$T" > ~/.config/eqvps/agent.env )
ls -l ~/.config/eqvps/agent.env   # attendu : -rw-------

Chargez-le ensuite dans le service de l'agent avec EnvironmentFile= (systemd) ou set -a; . ~/.config/eqvps/agent.env; set +a.

Faites tourner le jeton avant expiration. L'outil refresh_token, ou POST /auth/tokens/{id}/refresh, émet un nouveau jeton du même nom et révoque l'ancien immédiatement. Si votre client MCP a le jeton en dur dans sa config, mettez-la à jour juste après, sinon la session suivante reçoit un 401.

Vérifiez qui utilise quoi : GET /auth/tokens liste chaque jeton avec son nom, son expiration et last_used_at. Un jeton que vous ne reconnaissez pas, ou utilisé après l'arrêt de l'agent, c'est votre signal.

Si un jeton fuite

Dans cet ordre :

  1. Révoquez-le. Tableau de bord → Paramètres → Jetons API pour agents → Révoquer, ou curl -s -X DELETE -H "Authorization: Bearer $EQVPS_TOKEN" https://api.eqvps.com/api/v1/eqvps/auth/tokens/<id>. Il cesse de fonctionner dès la requête suivante.
  2. Cherchez de nouveaux jetons que vous n'avez pas créés, et révoquez-les aussi.
  3. Mesurez la surface touchée : l'historique du service de chaque serveur, vos factures et votre solde, et list_delegations pour repérer un accès que vous n'avez pas accordé.
  4. Changez les mots de passe root de chaque serveur que ce jeton pouvait voir. get_vps_status avec reveal: true livre le mot de passe root : un jeton divulgué, c'est un mot de passe root divulgué. Vérifiez ~/.ssh/authorized_keys au passage.
  5. Fermez la porte du mot de passe. Si votre compte n'a jamais eu de mot de passe, le détenteur du jeton a pu en définir un avec set_password. Connectez-vous avec un code reçu par e-mail et changez-le.

La prévention pour l'étape 5 ne coûte rien : définissez vous-même un mot de passe de compte dès maintenant, et set_password renverra 409 à tous ceux qui viendront après.

La validation humaine

Ce que le serveur impose :

  • reinstall_vps, reset_password et cancel_service avec type: immediate exigent confirm égal au nom d'hôte exact (DELETE fonctionne aussi pour la réinstallation et la réinitialisation).
  • change_plan exige confirm: true.
  • La résiliation se fait par défaut en end_of_period : le serveur tourne jusqu'à la fin de la période payée, et undo_cancel revient en arrière.
  • Limites de débit par compte : réinstallation 4/min, réinitialisation du mot de passe 6/min, alimentation 20/min, commandes 20/min. De quoi empêcher une boucle de le faire cinquante fois, pas d'arrêter un seul mauvais appel.

Soyez lucide sur ce qu'est confirm. Il empêche un agent d'agir sur « fais le ménage ». Il n'arrête pas un attaquant, car le nom d'hôte est à un appel get_vps_status de distance. La vraie validation vit dans votre client MCP. La plupart des clients savent demander avant chaque appel d'outil : laissez passer les niveaux 0 et 1, faites toujours demander pour le niveau 3. Dans les clients qui gèrent des permissions par outil, comme le settings.json de Claude Code (serveur enregistré sous le nom eqvps) :

{
  "permissions": {
    "ask": ["mcp__eqvps__order_vps", "mcp__eqvps__change_plan", "mcp__eqvps__create_sandbox", "mcp__eqvps__reset_password", "mcp__eqvps__delegate_service"],
    "deny": ["mcp__eqvps__reinstall_vps", "mcp__eqvps__cancel_service", "mcp__eqvps__kill_sandbox"]
  }
}

Ajoutez aussi une ligne aux instructions de l'agent. Ce n'est pas un contrôle de sécurité en soi, mais cela réduit les malentendus (laissez-la en anglais, les modèles la comprennent aussi bien) :

Never call reinstall_vps, reset_password, cancel_service (type=immediate), change_plan,
order_vps, create_sandbox, kill_sandbox or delegate_service unless the human has typed
the target server's hostname in this conversation for that specific action.

Si l'agent se connecte par code e-mail au lieu de détenir un jeton longue durée, voyez la connexion d'un agent via MCP.

Audit : ce que vous voyez après coup

  • Liste des jetons (GET /auth/tokens, ou Paramètres → Jetons API pour agents) : nom, création, expiration, last_used_at. C'est pour ça qu'il faut nommer les jetons par agent.
  • Historique du service (tableau de bord, page du serveur) : actions d'alimentation, réinstallations, réinitialisations de mot de passe, changements d'offre, paiements, chacun avec une heure et un auteur : vous, le support ou automatique. Il ne dit pas quel jeton ou délégué a agi, seulement que l'action vient de votre côté.
  • Factures et solde : chaque débit et chaque remboursement.
  • list_delegations : qui a accès à quoi, et jusqu'à quand.

Ce trou dans l'historique du service est la limite honnête de l'audit côté serveur aujourd'hui. Si vous devez savoir quel agent a fait quoi, journalisez chaque appel d'outil avec ses arguments (sans les secrets) côté agent.

La configuration que nous choisirions

Pour un agent qui gère un serveur de production :

  1. Un compte séparé pour l'agent, solde à zéro, le serveur délégué avec expires_days: 90.
  2. Votre jeton de propriétaire reste chez vous, dans aucune config d'agent.
  3. Des sauvegardes sur ce serveur, parce qu'un délégué peut réinstaller.
  4. Les outils de niveau 3 sur « ask » ou « deny » dans le client.
  5. Le jeton de l'agent dans un fichier 600, renouvelé avant expiration.

Pour un agent qui doit commander des serveurs ou lancer des sandboxes, la délégation ne suffit pas, puisqu'il lui faut un solde. Le solde devient alors votre plafond : approvisionnez-le par tâche, nommez le jeton et lisez last_used_at une fois par semaine. Si un jeton en lecture seule changeait la façon dont vous déployez vos agents, dites-le-nous au support : ce sont ces retours qui décident de ce que nous construisons ensuite.

Questions fréquentes

Puis-je donner à un agent IA un accès en lecture seule ?

Pas avec un jeton pour l'instant : chaque jeton client a les mêmes droits que votre compte dans le tableau de bord. L'option la plus proche est la délégation : donnez à l'agent son propre compte sans solde et déléguez-lui un serveur. Il peut voir et piloter ce serveur, mais pas dépenser, résilier, ouvrir la console ni déléguer plus loin. Il peut toujours redémarrer, réinitialiser le mot de passe root et réinstaller, donc activez les sauvegardes sur ce serveur.

Comment limiter ce qu'un agent peut dépenser ?

Par le solde prépayé. Seuls trois outils dépensent (order_vps, change_plan, create_sandbox) et ils puisent dans le solde ; s'il ne suffit pas, ils renvoient 402 ou une facture impayée. L'agent peut créer un lien de recharge ou de paiement, mais le régler exige un portefeuille crypto, c'est donc un humain qui le fait. Pas de carte enregistrée, pas de découvert.

Qu'est-ce qui empêche un agent de supprimer mon serveur ?

reinstall_vps, reset_password et un cancel_service immédiat exigent confirm égal au nom d'hôte exact (ou DELETE pour la réinstallation et la réinitialisation). La résiliation par défaut est end_of_period : le serveur continue de tourner et undo_cancel l'annule. Les comptes délégués ne peuvent pas résilier du tout. Le champ confirm arrête un agent qui agit sur une consigne vague, pas un attaquant muni de votre jeton : réglez donc aussi ces outils sur « toujours demander » dans votre client MCP.

Que faire si mon jeton Bearer a fuité ?

Révoquez-le tout de suite (Tableau de bord → Paramètres → Jetons API pour agents, ou DELETE /auth/tokens/{id}). Vérifiez ensuite la liste des jetons pour repérer ceux que vous ne connaissez pas, consultez l'historique du service de chaque serveur, vos factures et list_delegations, et changez les mots de passe root des serveurs que le jeton pouvait voir : get_vps_status avec reveal renvoie le mot de passe root.

Combien d'outils compte le serveur MCP d'EQVPS ?

45 pour un jeton client, version 1.6.0 du serveur MCP (vérifié le 2026-10-04) : 5 publics, 15 en lecture seule, 17 qui modifient l'état sans dépenser et 8 qui dépensent, détruisent des données ou accordent un accès. Les jetons revendeur voient à la place un ensemble distinct de 30 outils revendeur, soit 75 au total sur le même endpoint.

Commentaires

Pas encore de commentaires. Soyez le premier.

Laisser un commentaire

Les commentaires sont modérés avant leur publication.