Node Lodge für KI-Agenten (MCP)

Claude Code, Claude Desktop oder Ihr eigener Agent findet eine GPU, startet eine Sitzung mit festem Ausgabenlimit, verbindet sich per SSH und stoppt sie.

Mit dem MCP-Server von Node Lodge mietet ein KI-Agent GPU-Maschinen für Sie. Der Agent listet Angebote auf, prüft Ihr Guthaben, startet eine Sitzung mit Höchstkosten, liest die SSH-Zugangsdaten und stoppt die Sitzung, wenn die Arbeit erledigt ist. Jede Sitzung wird aus dem Guthaben Ihrer Organisation bezahlt, und der Agent kann nie mehr ausgeben, als die Limits seines API-Schlüssels erlauben.

Er funktioniert mit jedem Client, der das Model Context Protocol (MCP) spricht, darunter Claude Code und Claude Desktop.

Voraussetzungen

  • Node.js 22 oder neuer auf der Maschine, auf der der Agent läuft.
  • Guthaben in Ihrer Organisation. Siehe Abrechnung.
  • Ein SSH-Schlüsselpaar. Siehe SSH-Schlüssel.

1. Einen Schlüssel für den Agenten erstellen

  1. Öffnen Sie in der Konsole Keys und wählen Sie Create key.
  2. Benennen Sie ihn nach dem Agenten, zum Beispiel claude-code.
  3. Wählen Sie die Scopes workloads:read, workloads:write und billing:read.
  4. Legen Sie seine Spending limits fest:
    • Per session: der Höchstbetrag einer einzelnen Sitzung.
    • Total: der Höchstbetrag, den der Schlüssel insgesamt ausgeben kann.
    • Calendar month und Sessions at a time sind optional.
  5. Kopieren Sie den Schlüssel. Er wird nur einmal angezeigt.

Node Lodge setzt diese Limits auf seinen Servern durch, auf das Budget jeder Sitzung: Eine Sitzung, die eines davon überschreiten würde, wird abgelehnt, bevor etwas reserviert oder gestartet wird. Eine laufende Sitzung zählt mit ihrem ganzen Budget, eine beendete mit dem abgerechneten Betrag. Mit Edit limits können Sie die Limits später senken oder erhöhen, nach Eingabe eines neuen Zwei-Faktor-Codes. Ein niedrigeres Limit gilt ab der nächsten Sitzung.

2. Den Server herunterladen

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

Unter macOS verwenden Sie für die letzte Zeile shasum -a 256 -c nodelodge-mcp.mjs.sha256. Die Datei ist ein einzelnes Skript, das mit Node läuft. Zum Aktualisieren laden Sie sie erneut herunter.

3. Ihren Client verbinden

Claude Code

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

Prüfen Sie mit claude mcp list, ob nodelodge verbunden ist, oder geben Sie in einer Sitzung /mcp ein.

Claude Desktop

Öffnen Sie Settings, dann Developer, dann Edit Config, und fügen Sie den Server zu claude_desktop_config.json hinzu:

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

Verwenden Sie den vollständigen Pfad zur Datei, unter Windows zum Beispiel C:\\Users\\you\\.nodelodge\\nodelodge-mcp.mjs. Starten Sie Claude Desktop neu. Die Tools von Node Lodge erscheinen im Tool-Menü eines neuen Chats.

Über HTTP

Für Clients, die sich mit einer URL verbinden, starten Sie den Server im HTTP-Modus auf Ihrer eigenen Maschine:

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

Er lauscht auf http://127.0.0.1:3101/mcp und speichert keinen Schlüssel: Jede Anfrage sendet ihren eigenen Schlüssel als Bearer-Token. Mit Claude Code:

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

Setzen Sie NODELODGE_MCP_PORT, um einen anderen Port zu verwenden. Der Server beantwortet nur Anfragen, die an diese Maschine gerichtet sind.

Tools

Tool Funktion
list_offers Listet Secure-Maschinen von Node Lodge mit GPU, VRAM, CPU, RAM, Festplatte, Stundenpreis in USD, Land und Stadt. Filtert nach GPU-Modell, GPU-Anzahl, VRAM und Preis.
get_balance Zeigt das für eine neue Sitzung verfügbare Guthaben, den blockierten und den geschuldeten Betrag.
list_environments Listet die Umgebungen, die launch_session auf Node Lodge Secure-Maschinen annimmt.
launch_session Startet eine Maschine mit einem Budget. max_cost_usd ist erforderlich: Der Betrag wird auf Ihrem Guthaben reserviert, und die Sitzung kostet nie mehr.
get_session Zeigt Status, bisherige Kosten, während des Starts den laufenden Startschritt (launch_step) und, sobald die Maschine läuft, den ssh-Befehl und wie Sie JupyterLab öffnen.
stop_session Stoppt eine Sitzung: Die Abrechnung endet, Maschine und Festplatte werden gelöscht.
raise_session_budget Erhöht das Budget einer laufenden Sitzung auf ein neues max_cost_usd, innerhalb der Limits des Schlüssels.
list_sessions Listet laufende oder beendete Sitzungen.

So funktioniert max_cost_usd

launch_session erwartet max_cost_usd, den Höchstbetrag der Sitzung. Er wird beim Start als Budget der Sitzung auf Ihrem Guthaben reserviert. Abgerechnet wird die tatsächliche Laufzeit der Maschine ab dem Moment, in dem sie bereit ist, und Budget Guard stoppt die Sitzung, bevor das Budget aufgebraucht ist: Darüber hinaus wird Ihnen nie etwas berechnet. Mit duration_hours stoppt die Sitzung außerdem nach dieser Anzahl Stunden.

Der Start wird abgelehnt, bevor etwas reserviert oder gestartet wird, wenn max_cost_usd Ihr verfügbares Guthaben oder ein Limit des Schlüssels übersteigt. Eine vorzeitig gestoppte Sitzung wird nach ihrer Laufzeit abgerechnet, der Rest des Budgets wird freigegeben. Damit eine Sitzung länger läuft, reserviert raise_session_budget mehr, mit denselben Prüfungen.

launch_session benötigt außerdem den öffentlichen SSH-Schlüssel, der auf der Maschine installiert wird, und die öffentliche IPv4-Adresse, von der aus Sie sich verbinden (oder einen Bereich bis /24). Nur diese Adresse erreicht die Maschine per SSH. Der öffentliche Schlüssel öffnet nur diese Sitzung und wird nicht in Ihrem Konto gespeichert. environment_id ist optional, standardmäßig jupyterlab, die Umgebung der Rechenzentrumsmaschinen.

JupyterLab

JupyterLab läuft auf der Maschine und lauscht nur dort. Sobald die Sitzung läuft, liefert get_session das Feld connect.jupyter: einen ssh_command, der dieselbe Shell öffnet und JupyterLab auf Port 8888 Ihres Computers weiterleitet, die url, die Sie öffnen, solange diese Verbindung besteht, und den token für die Anmeldeseite. Der Token ist geheim: Halten Sie ihn aus Adressen und Logs heraus. connect.jupyter erhält der Schlüssel, der die Sitzung gestartet hat, mit workloads:write.

Ressourcen und Prompts

Neben seinen Tools bietet der Server schreibgeschützte Ressourcen, die ein Client an eine Unterhaltung anhängen kann:

Ressource Inhalt
nodelodge://offers Die jetzt buchbaren Maschinen, günstigste zuerst
nodelodge://sessions Ihre laufenden Sitzungen
nodelodge://sessions/{session_id} Eine Sitzung, mit bisherigen Kosten und SSH-Zugangsdaten

Dazu zwei Prompts, vorgefertigte Anfragen, die Schritte und Regeln festlegen:

  • launch_cheapest_gpu (model, max_cost_usd, optional min_vram_gb): schätzt den VRAM-Bedarf des Modells und kennzeichnet ihn als Schätzung, findet die günstigste Maschine mit genug VRAM, prüft Ihr Guthaben, bittet um Ihre Bestätigung und startet dann mit Ihrem Höchstbetrag, ohne ihn je zu erhöhen.
  • stop_all_sessions: listet Ihre laufenden Sitzungen, warnt, dass das Stoppen jede Maschine samt Festplatte löscht, bittet um Ihre Bestätigung, stoppt sie und prüft, dass keine übrig bleibt.

In Claude Desktop und Claude Code erscheinen Ressourcen im Anhangsmenü (@ in Claude Code) und Prompts als Slash-Befehle, in Claude Code zum Beispiel /mcp__nodelodge__stop_all_sessions.

Beispiel Schritt für Schritt

Sie bitten Claude Code:

Finde die günstigste GPU mit mindestens 48 GB VRAM, führe darauf mein Fine-Tuning-Skript innerhalb des Budgets aus, das ich dir gebe, und stoppe die Maschine, wenn es fertig ist. Mein öffentlicher Schlüssel liegt in ~/.ssh/id_ed25519.pub.

Der Agent:

  1. Ruft list_offers mit min_vram_gb: 48 auf und wählt das günstigste buchbare Angebot, zum Beispiel eine 1× RTX A6000 in Montreal.

  2. Ruft get_balance auf und prüft, ob Ihr verfügbares Guthaben das Budget deckt.

  3. Bittet Sie um Bestätigung und ruft dann launch_session auf:

    {
      "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"
    }
    

    Das Budget max_cost_usd wird auf Ihrem Guthaben reserviert, und die Bereitstellung der Maschine beginnt.

  4. Ruft get_session auf, bis connect gesetzt ist, führt dann ssh ubuntu@198.51.100.4 aus, kopiert das Skript, startet es und kopiert die Ergebnisse zurück.

  5. Ruft stop_session auf. Die Sitzung wird nach ihrer Laufzeit abgerechnet, der Rest des Budgets wird freigegeben.

Hätte der Agent max_cost_usd über das Limit pro Sitzung seines Schlüssels gesetzt, hätte Node Lodge den Start mit API_KEY_LIMIT abgelehnt, und nichts wäre reserviert oder gestartet worden.

Fehler, die der Agent sehen kann

Code Bedeutung
CREDIT_INSUFFICIENT max_cost_usd übersteigt Ihr verfügbares Guthaben. Laden Sie unter Billing Guthaben auf oder senken Sie den Höchstbetrag.
API_KEY_LIMIT Das Budget würde ein Limit des Schlüssels überschreiten. Senken Sie max_cost_usd, erhöhen Sie das Limit unter Keys oder warten Sie, bis eine Sitzung endet.
MAX_COST_EXCEEDED Die angefragten Stunden kosten mehr als max_cost_usd. Verkürzen Sie duration_hours oder erhöhen Sie den Höchstbetrag.
API_KEY_NOT_ALLOWED Dem Schlüssel fehlt ein Scope, den das Tool benötigt. Erstellen Sie einen Schlüssel mit den drei oben genannten Scopes.
OFFER_UNAVAILABLE Die Maschine wurde inzwischen vergeben. Rufen Sie list_offers erneut auf.

Empfehlungen

  • Geben Sie jedem Agenten einen eigenen Schlüssel mit engen Limits, damit Sie einen davon widerrufen können, ohne die anderen anzutasten.
  • Halten Sie den Schlüssel aus geteilten Dateien und Repositories heraus. Claude Code speichert ihn in Ihrer lokalen Konfiguration.
  • Lassen Sie den Agenten nachfragen, bevor er eine Sitzung startet oder max_cost_usd erhöht.
  • Jeder Start, jede Budgeterhöhung und jeder Stopp mit dem Schlüssel erscheint unter Activity, mit dem Schlüssel, der sie ausgelöst hat.

Zuletzt aktualisiert

Ergebnisse erscheinen beim Tippen. Mit den Pfeiltasten wechseln Sie zwischen ihnen.