Node Lodge pour vos agents d'IA (MCP)

Laissez Claude Code, Claude Desktop ou votre agent trouver un GPU, lancer une session sous un plafond de dépenses strict, s'y connecter en SSH et l'arrêter.

Le serveur MCP de Node Lodge permet à un agent d’IA de louer des machines GPU pour vous. L’agent liste les offres, vérifie votre solde, lance une session avec un coût maximal, lit les informations SSH et arrête la session une fois le travail terminé. Chaque session est payée par le crédit de votre organisation, et l’agent ne peut jamais dépenser plus que les limites fixées sur sa clé d’API.

Il fonctionne avec tout client compatible avec le Model Context Protocol (MCP), dont Claude Code et Claude Desktop.

Avant de commencer

  • Node.js 22 ou plus récent sur la machine qui exécute l’agent.
  • Du crédit sur votre organisation. Voir Facturation.
  • Une paire de clés SSH. Voir Clés SSH.

1. Créer une clé pour l’agent

  1. Dans la console, ouvrez Keys et choisissez Create key.
  2. Donnez-lui le nom de l’agent, par exemple claude-code.
  3. Choisissez les portées workloads:read, workloads:write et billing:read.
  4. Définissez ses Spending limits :
    • Per session : le coût maximal d’une session.
    • Total : le maximum que la clé pourra dépenser au total.
    • Calendar month et Sessions at a time sont facultatifs.
  5. Copiez la clé. Elle n’est affichée qu’une fois.

Node Lodge applique ces limites sur ses serveurs, au budget de chaque session : une session qui en dépasserait une est refusée avant toute réserve ou tout démarrage. Une session en cours compte pour tout son budget, une session terminée pour ce qui lui a été facturé. Vous pouvez baisser ou relever les limites plus tard avec Edit limits, après un nouveau code de double authentification. Une limite abaissée s’applique à la session suivante.

2. Télécharger le serveur

mkdir -p ~/.nodelodge && cd ~/.nodelodge
curl -fsSLO https://nodelodge.com/downloads/nodelodge-mcp.mjs
curl -fsSLO https://nodelodge.com/downloads/nodelodge-mcp.mjs.sha256
sha256sum -c nodelodge-mcp.mjs.sha256

Sur macOS, utilisez shasum -a 256 -c nodelodge-mcp.mjs.sha256 pour la dernière ligne. Le fichier est un script unique, exécuté avec Node. Téléchargez-le de nouveau pour le mettre à jour.

3. Connecter votre client

Claude Code

claude mcp add nodelodge \
  --env NODELODGE_API_KEY=nl_live_... \
  -- node ~/.nodelodge/nodelodge-mcp.mjs

Lancez claude mcp list pour vérifier que nodelodge est connecté, ou tapez /mcp dans une session.

Claude Desktop

Ouvrez Settings, puis Developer, puis Edit Config, et ajoutez le serveur à claude_desktop_config.json :

{
  "mcpServers": {
    "nodelodge": {
      "command": "node",
      "args": ["/Users/you/.nodelodge/nodelodge-mcp.mjs"],
      "env": { "NODELODGE_API_KEY": "nl_live_..." }
    }
  }
}

Indiquez le chemin complet du fichier : sous Windows, par exemple C:\\Users\\you\\.nodelodge\\nodelodge-mcp.mjs. Redémarrez Claude Desktop. Les outils Node Lodge apparaissent dans le menu des outils d’une nouvelle conversation.

Par HTTP

Pour les clients qui se connectent à une URL, démarrez le serveur en mode HTTP sur votre propre machine :

node ~/.nodelodge/nodelodge-mcp.mjs --http

Il écoute sur http://127.0.0.1:3101/mcp et ne conserve aucune clé : chaque requête envoie sa propre clé comme jeton Bearer. Avec Claude Code :

claude mcp add --transport http nodelodge http://127.0.0.1:3101/mcp \
  --header "Authorization: Bearer nl_live_..."

Définissez NODELODGE_MCP_PORT pour utiliser un autre port. Le serveur ne répond qu’aux requêtes adressées à cette machine.

Outils

Outil Rôle
list_offers Liste les machines Node Lodge Secure avec GPU, VRAM, CPU, RAM, disque, prix horaire en USD, pays et ville. Filtre par modèle de GPU, nombre de GPU, VRAM et prix.
get_balance Affiche le crédit disponible pour une nouvelle session, le montant retenu et le montant dû.
list_environments Liste les environnements que launch_session accepte sur les machines Node Lodge Secure.
launch_session Démarre une machine avec un budget. max_cost_usd est obligatoire : il est réservé sur votre crédit et la session ne coûte jamais plus.
get_session Affiche l’état, le coût à ce stade, l’étape du lancement en cours pendant le démarrage (launch_step) et, une fois la machine en marche, la commande ssh et la façon d’ouvrir JupyterLab.
stop_session Arrête une session : la facturation s’arrête, la machine et son disque sont supprimés.
raise_session_budget Relève le budget d’une session en cours à un nouveau max_cost_usd, dans les limites de la clé.
list_sessions Liste les sessions actives ou terminées.

Fonctionnement de max_cost_usd

launch_session reçoit max_cost_usd, le coût maximal de la session. Ce montant est réservé sur votre crédit au lancement, comme budget de la session. La facturation suit le temps réel d’exécution de la machine, dès qu’elle est prête, et Budget Guard arrête la session avant que le budget soit dépensé : vous n’êtes jamais facturé au-delà. Avec duration_hours, la session s’arrête aussi après ce nombre d’heures.

Le lancement est refusé, avant toute réserve ou tout démarrage, si max_cost_usd dépasse votre crédit disponible ou une limite de la clé. Une session arrêtée plus tôt est facturée pour sa durée réelle, et le reste du budget est libéré. Pour prolonger une session, raise_session_budget réserve davantage, avec les mêmes vérifications.

launch_session demande aussi la clé publique SSH à installer sur la machine et l’adresse IPv4 publique depuis laquelle vous vous connecterez (ou une plage jusqu’à /24). Seule cette adresse peut joindre la machine en SSH. La clé publique ouvre cette session seulement : elle n’est pas enregistrée sur votre compte. environment_id est facultatif, jupyterlab par défaut, l’environnement des machines en centre de données.

JupyterLab

JupyterLab tourne sur la machine et n’écoute que sur elle. Une fois la session en marche, get_session donne connect.jupyter : une ssh_command qui ouvre le même shell et amène JupyterLab sur le port 8888 de votre ordinateur, l’url à ouvrir tant que cette connexion reste ouverte, et le token à saisir sur la page de connexion. Le jeton est secret : gardez-le hors des adresses et des journaux. connect.jupyter est donné à la clé qui a lancé la session, avec workloads:write.

Ressources et prompts

En plus de ses outils, le serveur propose des ressources en lecture seule qu’un client peut joindre à une conversation :

Ressource Contenu
nodelodge://offers Les machines réservables maintenant, de la moins chère à la plus chère
nodelodge://sessions Vos sessions actives
nodelodge://sessions/{session_id} Une session, avec son coût à ce stade et ses informations SSH

Et deux prompts, des requêtes toutes prêtes qui fixent les étapes et les règles :

  • launch_cheapest_gpu (model, max_cost_usd, min_vram_gb facultatif) : estime la VRAM nécessaire au modèle en précisant qu’il s’agit d’une estimation, trouve la machine la moins chère qui en a assez, vérifie votre solde, vous demande confirmation, puis lance la session avec votre maximum sans jamais le relever.
  • stop_all_sessions : liste vos sessions actives, prévient que l’arrêt supprime chaque machine et son disque, vous demande confirmation, les arrête et vérifie qu’il n’en reste aucune.

Dans Claude Desktop et Claude Code, les ressources apparaissent dans le menu des pièces jointes (@ dans Claude Code) et les prompts comme commandes slash, par exemple /mcp__nodelodge__stop_all_sessions dans Claude Code.

Exemple complet

Vous demandez à Claude Code :

Trouvez le GPU le moins cher avec au moins 48 Go de VRAM, exécutez-y mon script de fine-tuning dans le budget que je vous donne, et arrêtez la machine une fois terminé. Ma clé publique est dans ~/.ssh/id_ed25519.pub.

L’agent, ensuite :

  1. Appelle list_offers avec min_vram_gb: 48 et choisit l’offre réservable la moins chère, par exemple 1× RTX A6000 à Montréal.

  2. Appelle get_balance et vérifie que votre crédit disponible couvre le budget.

  3. Vous demande confirmation, puis appelle launch_session :

    {
      "offer_id": "3f0c8f5e-8c3a-4f39-9a8e-2d9b4c1e7a10",
      "max_cost_usd": 20,
      "ssh_public_key": "ssh-ed25519 AAAAC3... you@laptop",
      "allowed_cidr": "203.0.113.7"
    }
    

    Le budget max_cost_usd est réservé sur votre crédit, et le provisionnement de la machine commence.

  4. Appelle get_session jusqu’à ce que connect soit renseigné, puis lance ssh ubuntu@198.51.100.4, copie le script, l’exécute et rapatrie les résultats.

  5. Appelle stop_session. La session est facturée pour sa durée réelle, et le reste du budget est libéré.

Si l’agent avait fixé max_cost_usd au-dessus de la limite par session de sa clé, Node Lodge aurait refusé le lancement avec API_KEY_LIMIT, sans rien réserver ni démarrer.

Erreurs possibles pour l’agent

Code Signification
CREDIT_INSUFFICIENT max_cost_usd dépasse votre crédit disponible. Ajoutez du crédit dans Billing, ou baissez le maximum.
API_KEY_LIMIT Le budget dépasserait une limite de la clé. Baissez max_cost_usd, relevez la limite dans Keys, ou attendez la fin d’une session.
MAX_COST_EXCEEDED Les heures demandées coûtent plus que max_cost_usd. Raccourcissez duration_hours ou relevez le maximum.
API_KEY_NOT_ALLOWED Il manque à la clé une portée nécessaire à l’outil. Créez une clé avec les trois portées ci-dessus.
OFFER_UNAVAILABLE La machine a été prise entre-temps. Appelez de nouveau list_offers.

Bonnes pratiques

  • Donnez à chaque agent sa propre clé, avec des limites serrées, pour pouvoir en révoquer une sans toucher aux autres.
  • Gardez la clé hors des fichiers partagés et des dépôts. Claude Code la stocke dans votre configuration locale.
  • Demandez à l’agent de confirmer avant de lancer une session ou de relever max_cost_usd.
  • Chaque lancement, hausse de budget et arrêt effectués avec la clé figurent dans Activity, avec la clé qui les a faits.

Dernière mise à jour

Les résultats apparaissent pendant la saisie. Les flèches permettent de les parcourir.