VPS KVM canadien à Montréal dès 8,50 CAD/mois

Un agent IA loue son propre VPS : démo MCP

Une exécution réelle, appel par appel : l'agent estime le prix, commande une Nano, la reçoit en 42 secondes, y travaille en SSH et la détruit. Les garde-fous qui ont tenu, et la facture : 0,018 CAD.

Une conversation d'agent IA reliée par une prise MCP à une machine qui démarre, puis rendue

Certaines tâches méritent une machine propre : une suite de tests qui veut root et Docker, une compilation qui immobilise le portable une heure, du code qu'on préfère ne pas lancer chez soi. Un agent IA peut s'en charger seul, à condition de pouvoir louer la machine, s'en servir et la rendre. C'est le rôle du serveur MCP de FFxF.

Cette démo est une exécution réelle, faite le 28 septembre 2026 avec Claude Code : l'agent a commandé une Nano, l'a reçue en 42 secondes, y a travaillé en SSH, l'a détruite en 10 secondes, et le tout a coûté 0,018 CAD. Ci-dessous, chacun de ses appels, avec ce que le serveur a répondu.

1. Connecter l'agent

Le serveur est à l'adresse https://ffxf.net/mcp. Il relaie chaque appel à l'API FFxF avec votre clé API et ne stocke rien. Créez une clé dans la console, Compte → Clés d'API, avec seulement les périmètres dont l'agent a besoin : pour cette démo vms.read, vms.create, vms.action, vms.destroy, sshkeys.write et billing.read. Placez-la ensuite dans l'environnement plutôt que dans la conversation.

bash
export FFXF_API_KEY="ffxf_live_…"
claude mcp add --scope user --transport http ffxf https://ffxf.net/mcp \
  --header "Authorization: Bearer $FFXF_API_KEY"
claude mcp list
# ffxf: https://ffxf.net/mcp (HTTP) - ✔ Connected

Codex, Cursor et les autres clients ont leur propre commande, et il existe un chemin plus court : donnez à l'agent la phrase ci-dessous, il suit les consignes écrites pour lui dans agents.md.

prompt
Installe le serveur MCP de FFxF en suivant https://ffxf.net/agents.md. Ma clé API est dans la variable d'environnement FFXF_API_KEY.

2. La demande

L'agent reçoit une demande simple : lancer les tests du projet sur une machine neuve, puis la détruire. Le serveur lui rappelle lui-même les règles à chaque connexion : estimer avant de commander, montrer le prix, suivre l'action, demander avant d'effacer un disque.

3. Ce que fait l'agent, appel par appel

D'abord get_account, pour savoir ce qu'il peut dépenser. La réponse donne le solde, la consommation horaire des machines déjà en marche et le budget mensuel.

json
{ "credit": { "balance": "94.46" },
  "hourly": { "burn_rate": "0.134", "active_machines": 2 },
  "quota":  { "limit": 5, "used": 3, "remaining": 2 } }

Puis add_ssh_key avec la clé publique locale, pour se connecter sans mot de passe, et estimate_vm. L'estimation fait toutes les vérifications d'une vraie commande (quota, stock, crédit, budget) et la chiffre, sans rien créer.

json
estimate_vm { "plan": "nano", "region": "montreal", "image": "coding-agent",
              "hostname": "mcp-e2e-01", "billing": "hourly", "ssh_keys": ["9"] }

{ "would_succeed": true, "hourly_rate": "0.018", "currency": "CAD",
  "required_credit": "0.44",
  "checks": [
    { "name": "quota",  "status": "pass" },
    { "name": "stock",  "status": "pass" },
    { "name": "credit", "status": "pass" },
    { "name": "budget", "status": "pass" } ] }

L'image est coding-agent : une Ubuntu avec Docker, git et GitHub CLI, Node.js, Python et uv, Claude Code et Codex CLI. Les 0,44 CAD ne sont pas dépensés : une commande à l'heure n'est acceptée que si le solde couvre les 24 premières heures. Après avoir montré le prix, l'agent commande.

json
create_vm { …même commande…, "password_delivery": "none" }

{ "vm": { "id": 105, "hostname": "mcp-e2e-01", "status": "provisioning" },
  "action": { "id": 16, "type": "create", "status": "queued" } }

La création tourne en arrière-plan. L'agent interroge get_action jusqu'à ce que l'action quitte running, puis lit la machine avec get_vm.

journal
+1s   action 16 : running
+42s  action 16 : completed
get_vm 105 : running · 1 vCPU · 2048 Mo · 20 Go · IPv4 23.159.52.x · IPv6 2602:f3a4:0:100::1b

Le disque a été agrandi aux 20 Go de l'offre au passage. L'agent se connecte et fait le travail : cloner le dépôt dans ~/work, lancer les tests, pousser la branche ou rapatrier les résultats.

bash
ssh ubuntu@23.159.52.x
claude --version     # 2.1.283 (Claude Code)
docker run --rm hello-world | head -2
df -h /              # 19G, 3.5G utilisés
cd ~/work && git clone https://github.com/… && …

Une fois la tâche finie, destroy_vm, avec le nom d'hôte exact de la machine en confirmation, puis get_action une dernière fois.

journal
destroy_vm { "vm": 105, "confirm_hostname": "mcp-e2e-01" }
+0s   action 17 (delete) : running
+10s  action 17 (delete) : completed
get_vm 105 : deleted

4. Les limites qui ont tenu

Un agent peut se tromper de machine. Les règles vivent dans l'API, pas dans sa bonne conduite, et le serveur MCP ajoute sa propre vérification sur les deux appels qui effacent un disque. Quand on lui demande de réinstaller une autre machine avec le mauvais nom, il refuse avant même d'appeler l'API :

json
reinstall_vm { "vm": 102, "image": "debian-13", "confirm_hostname": "PAS-BENCH" }

{ "error": { "status": 400, "code": "confirmation_mismatch",
             "message": "confirm_hostname must be \"BENCH\"." } }
  • Périmètres : sans vms.destroy, la clé ne peut rien supprimer ; sans vms.create, elle ne peut rien commander.
  • Crédit prépayé : le solde ne passe jamais sous zéro, et les 24 premières heures doivent être couvertes.
  • Budget mensuel, réglé dans la console : les machines s'arrêtent au-delà de 120 %.
  • Relances : une commande répétée après une coupure retrouve la première réponse, pas une seconde machine.
  • Quota : cinq machines par compte par défaut.

5. Ce que ça a coûté

GET /v1/usage tient le relevé heure par heure. Pour cette exécution, une ligne : une heure entamée, au tarif de la Nano.

json
{ "hostname": "mcp-e2e-01", "hours": 1, "rate": "0.018", "amount": "0.018", "currency": "CAD" }

Toute heure entamée est due : une machine gardée deux minutes coûte autant qu'une machine gardée cinquante-neuf. Pour un agent qui rend sa machine dès la tâche finie, c'est toute la facture.

6. En faire une habitude

Pour que l'agent le fasse sans qu'on le lui redise, ajoutez quelques lignes au AGENTS.md ou au CLAUDE.md du projet : quand une tâche demande une vraie machine, en louer une, montrer le prix, rester sous un plafond, la détruire ensuite. Le bloc prêt à coller est dans Mode distant.

  • Clé limitée aux périmètres utiles, rangée dans FFXF_API_KEY.
  • Budget mensuel réglé dans la console.
  • estimate_vm avant chaque create_vm, prix affiché.
  • Image coding-agent, facturation à l'heure, clé SSH, sans mot de passe.
  • destroy_vm dès la tâche finie, puis get_account pour vérifier que rien ne tourne encore.

Les vingt outils et leurs périmètres sont listés dans Outils MCP, et l'installation client par client dans Connecter un agent IA.

Trois agents IA de formes différentes lancent chacun une tâche sur sa propre machine, qui aboutit à une pull request

Codex Cloud, avec n'importe quel agent IA

Une machine neuve par tâche, un environnement prêt, des secrets rangés, une PR à relire : les briques de Codex Cloud, assemblées avec l'agent et le modèle de votre choix, par MCP ou par un script de cinquante lignes.

Lire l'article 9 min de lecture

Agent OpenClaw sur un serveur relié aux messageries

Installer OpenClaw sur un VPS : agent IA 24/7

L'agent IA personnel open source qui répond sur WhatsApp ou Telegram mérite mieux qu'un portable allumé. Voici l'installation propre sur un VPS, du serveur vide au démon qui survit aux redémarrages.

Lire l'article 9 min de lecture

Support & discussions

Questions techniques, retours d'incidents ou discussions d'infrastructure, l'équipe est présente sur Discord, Telegram, X, Instagram, Reddit et IRC.