Skip to main content
Glama
ckuzmick

cluster-tools MCP Server

by ckuzmick

clt — COMSOL-Jobs mit einem Befehl auf dem Harvard FASRC-Cluster

Führen Sie einen COMSOL-Batch-Job auf dem Cluster direkt von Ihrem Mac aus mit einer Zeile aus:

cluster file3.mph

was (Touch-ID-Abfrage →) file3.mph von der Windows-Maschine holt, sich bei FASRC mit Ihrem Passwort + automatisch generiertem 2FA-Code anmeldet, die Datei hochlädt, einen asynchronen Slurm-Job einreicht und Ihnen eine Job-ID zurückgibt. Später:

cluster status          # queue overview
cluster logs            # tail the COMSOL batch log of the latest job
cluster fetch           # download out.mph + batch.log when it's done
cluster shell           # drop into an interactive shell (no re-login)
cluster code            # print the current 2FA code, e.g. for a manual login

Alles ist ein einziges abhängigkeitsfreies Node-Skript (cluster.js) plus macOS-Bordmittel: ssh, scp, expect, security (Schlüsselbund). Keine npm-Pakete.

Wie es funktioniert

Mac (cluster.js)
 ├─ Touch ID gate            (optional tiny Swift helper, compiled once)
 ├─ Keychain                 → FASRC password + TOTP seed
 ├─ TOTP in Node crypto      → the same 6-digit codes as the OpenAuth Java app
 ├─ ssh ControlMaster        → authenticate ONCE, reuse the session ~8h,
 │                             so scp/ssh/sbatch below run with zero prompts
 ├─ scp  winbox → Mac        (over an AnyDesk TCP tunnel or LAN, key auth)
 ├─ scp  Mac → cluster       (over the shared session)
 └─ ssh  sbatch              → COMSOL batch job runs asynchronously on Slurm

Der entscheidende Punkt ist, dass die FASRC-„Java-2FA-App“ (OpenAuth/JAuth) einfaches TOTP ist — derselbe Algorithmus wie Google Authenticator. Sobald Sie den Base32-Seed haben, generieren ~15 Zeilen Node crypto gültige Codes, und expect gibt das Passwort und den Code bei der ersten Anmeldung des Tages in die ssh-Eingabeaufforderungen ein. ControlMaster hält diese Sitzung am Leben, sodass nichts anderes jemals nachfragt.

Einmalige Einrichtung

0. Voraussetzungen

  • macOS mit Node ≥ 18 (brew install node oder nodejs.org)

  • Ein FASRC-Konto mit OpenAuth-2FA

  • Optionales Touch-ID-Gate: Xcode-Befehlszeilentools (xcode-select --install)

1. Befehl installieren

cd clt
npm link          # or: alias cluster="node /path/to/clt/cluster.js" in ~/.zshrc

Optionales Touch-ID-Gate (überspringen Sie es, und das Skript fragt einfach nicht):

swiftc -O touchid.swift -o touchid

2. ssh-Konfiguration (erforderlich)

Fügen Sie zu ~/.ssh/config hinzu (erstellen Sie es bei Bedarf) und führen Sie mkdir -p ~/.ssh/sockets aus:

Host fasrc
  HostName login.rc.fas.harvard.edu
  User YOUR_FASRC_USERNAME
  ControlMaster auto
  ControlPath ~/.ssh/sockets/%r@%h-%p
  ControlPersist 8h
  ServerAliveInterval 60

Host winbox
  HostName 127.0.0.1        # via the AnyDesk TCP tunnel; or the LAN IP of the PC
  Port 2222                 # the tunnel's local port (drop this line if using LAN IP)
  User YOUR_WINDOWS_USERNAME

Der ControlMaster-Block macht alles schnell — ohne ihn würde jedes scp/ssh ein neues Passwort + OTP verlangen, und das Tool weigert sich zu laufen.

3. Holen Sie sich Ihren OpenAuth-TOTP-Seed

Die OpenAuth-Java-App wird mit einem Base32-Geheimnis gesät. Zwei Möglichkeiten, es zu erhalten:

  • Melden Sie sich auf der FASRC-OpenAuth-Self-Service-Seite an und stellen Sie Ihren Token (erneut) bereit. Neben dem Java-App-Download wird ein QR-Code/Geheimnis zur Verwendung mit Telefon-Authentifikator-Apps angeboten — kopieren Sie diesen Base32-String.

  • Oder schauen Sie in das bereits heruntergeladene OpenAuth-Bundle: Der Seed wird in der Konfigurationsdatei der App neben dem Jar gespeichert.

Hinweis: Wenn Sie den Token erneut bereitstellen, funktionieren die Codes der alten Java-App nicht mehr — der neue Seed ist dann der einzig wahre Seed (verwenden Sie cluster code als Generator oder laden Sie ihn auch in eine Telefon-App).

4. Windows-Maschine: Integrierter OpenSSH-Server

AnyDesk selbst hat keine skriptbare Dateiübertragung, daher ziehen wir Dateien mit scp vom integrierten OpenSSH-Server von Windows (Windows 10/11 optionale Funktion — keine Drittanbieter-Software). Führen Sie in einer Administrator-PowerShell auf der Windows-Maschine aus:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic

Installieren Sie dann den öffentlichen Schlüssel Ihres Macs, damit scp kein Passwort benötigt (cat ~/.ssh/id_ed25519.pub auf dem Mac; ssh-keygen -t ed25519 zuerst, wenn Sie keinen haben). Achtung: Wenn Ihr Windows-Konto ein Administrator ist, werden Schlüssel in einer speziellen Datei abgelegt:

Add-Content -Path C:\ProgramData\ssh\administrators_authorized_keys -Value "ssh-ed25519 AAAA...your key..."
icacls C:\ProgramData\ssh\administrators_authorized_keys /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

(Für Nicht-Administrator-Konten ist es das übliche C:\Users\ihrname\.ssh\authorized_keys.)

5. Von Mac auf Windows zugreifen

Wählen Sie eine Option:

  • AnyDesk-TCP-Tunnel (entspricht Ihrem aktuellen Workflow): Öffnen Sie in AnyDesk auf dem Mac die Sitzungseinstellungen für den Windows-PC → TCP-Tunneling → lokaler Port 2222 → remote 127.0.0.1:22. Der Tunnel existiert nur, während die AnyDesk-Sitzung verbunden ist — in Ordnung, wenn Sie sowieso per AnyDesk verbunden sind. Überprüfen Sie, ob Ihre AnyDesk-Lizenz TCP-Tunneling beinhaltet.

  • Gleiches Netzwerk / VPN: Setzen Sie HostName auf die IP des PCs im winbox-Block und löschen Sie die Zeile Port 2222. Am einfachsten, wenn die Labormaschinen ein Netzwerk teilen.

  • Windows komplett überspringen: Legen Sie den COMSOL-Ordner in OneDrive ab (Harvard stellt es zur Verfügung) und lassen Sie es auf den Mac synchronisieren — dann verwendet cluster ~/OneDrive/.../file3.mph die lokale Kopie und berührt nie den PC.

Test: ssh winbox sollte Sie ohne Passwortabfrage auf dem PC anmelden.

6. Geheimnisse speichern und konfigurieren

cluster setup

Fragt nach Host-Aliasnamen, Slurm-Standardwerten, Ihrem FASRC-Passwort und dem TOTP-Seed. Geheimnisse werden im macOS-Schlüsselbund gespeichert (niemals auf der Festplatte, niemals in diesem Repository). Die Einrichtung endet mit der Ausgabe eines generierten 2FA-Codes — überprüfen Sie, ob er mit dem übereinstimmt, was die Java-App anzeigt, bevor Sie ihm vertrauen.

Bestätigen Sie dann auf dem Cluster (einmalig, über cluster shell):

  • module avail comsol — setzen Sie den genauen Modulnamen in ~/.config/clt/config.json

  • Ihre Gruppe hat COMSOL-Lizenzplätze, und wählen Sie die richtige Partition für Ihr Labor

Verwendung

cluster file3.mph                    # fetch from Windows, upload, submit
cluster ./local/file3.mph            # a file that exists locally skips the Windows fetch
cluster file3.mph -study std2        # extra args are passed to `comsol batch`
cluster status                       # your whole queue
cluster status 12345678              # one job, incl. finished (sacct)
cluster logs file3                   # tail batch.log
cluster fetch file3                  # → ./file3-out.mph + ./file3-batch.log

Job-Dateien landen auf dem Cluster in ~/comsol_jobs/<name>-<timestamp>/ (in.mph, out.mph, batch.log, slurm-<id>.log). Legen Sie eine E-Mail-Adresse in cluster setup fest, um eine Nachricht zu erhalten, wenn Jobs abgeschlossen sind. Die Buchhaltung für eingereichte Jobs befindet sich in ~/.config/clt/jobs.json.

MCP-Server (KI-gesteuertes COMSOL)

mcp/server.mjs stellt die gesamte Pipeline als MCP-Tools bereit, sodass Claude (oder jeder MCP-Client) COMSOL Ende-zu-Ende ausführen kann: run_code (generiertes Java = vollständige COMSOL-API), run_model, job_status, job_log, wait_for_job, fetch_artifacts, cancel_job, lab_fairshare. Projektweit über .mcp.json registriert — öffnen Sie eine Claude-Code-Sitzung in diesem Repository, und die Tools sind verfügbar.

Schutzmaßnahmen werden im Server durchgesetzt (max. 4 gleichzeitige Jobs, ≤16 CPUs, ≤64 GB, ≤48 h, zugelassene Partitionen), und lab_fairshare gibt ein healthy-Flag zurück, das die KI zu respektieren angewiesen ist. Überprüfen Sie alles mit node mcp/smoke.mjs — es führt ein Hallo-Welt-Modell durch die Tools aus und überprüft die Physik gegen die analytische Antwort. Modellbau-Idiome und bekannte COMSOL-API-Fallen befinden sich in references/.

Forking für Labormitglieder

Das Repository enthält keine persönlichen Daten: Die Konfiguration befindet sich in ~/.config/clt/, Geheimnisse im Schlüsselbund jeder Person. Ein Laborkollege klont einfach, führt npm link aus, fügt die beiden ssh-Konfigurationsblöcke hinzu und führt cluster setup mit seinen eigenen Anmeldeinformationen aus. Geben Sie niemals Ihren TOTP-Seed weiter oder committen Sie ihn irgendwo.

Schnellstart für einen frischen Klon:

git clone <this repo> && cd clt
npm install          # MCP server deps (the CLI itself needs none)
npm link             # provides the `cluster` command
swiftc -O touchid.swift -o touchid    # optional Touch ID gate
cluster setup        # host aliases, Slurm defaults, secrets -> Keychain
cluster login        # verify; then `cluster help`

Forschungsdaten aus dem Repository heraushalten

references/lab/ ist gitignoriert und ist der Ort, an den COMSOL-Modellexporte gehören. Exporte enthalten unveröffentlichte Geometrie und Physik sowie absolute Pfade mit echten Namen, daher dürfen sie nicht veröffentlicht werden. Die verfolgten Dateien in references/ sind generische, veröffentlichbare Beispiele (HelloBox, SweepBox, Inspect) plus CONVENTIONS.md, das angesammelte COMSOL-API-Wissen, das generierte Modelle zum Funktionieren bringt. Überprüfen Sie vor dem Pushen git status auf verirrte .mph-, .java-Exporte oder Ergebnis-CSVs.

Sicherheitshinweise, ehrlich

  • Das Speichern des TOTP-Seeds neben dem Passwort auf demselben Mac reduziert 2FA auf „Besitz Ihres entsperrten Macs“. Das schützt vor remoteem Diebstahl von Anmeldeinformationen, aber nicht vor jemandem an Ihrer Tastatur. Lassen Sie FileVault eingeschaltet.

  • Das Touch-ID-Gate ist ein praktisches Schloss für dieses Skript, keine Verschlüsselung — Geheimnisse werden vom Schlüsselbund geschützt. Um bei jedem Lesen eines Geheimnisses einen macOS-Bestätigungsdialog zu erzwingen, erstellen Sie die Elemente ohne vertraute App neu: security add-generic-password -U -T "" -a $USER -s clt-cluster-password -w

  • Überprüfen Sie, ob die Automatisierung Ihres eigenen OTP innerhalb der akzeptablen Nutzungsrichtlinie von FASRC liegt; dies ist eine persönliche Komfortautomatisierung, und der Seed muss persönlich bleiben.

Fehlerbehebung

  • login failed — führen Sie ssh fasrc manuell aus, um die tatsächlichen Eingabeaufforderungen zu sehen, und vergleichen Sie cluster code mit der Java-App. Wenn die Uhr Ihres Macs falsch geht, sind TOTP-Codes falsch (Systemeinstellungen → Allgemein → Datum & Uhrzeit → automatisch einstellen).

  • no ControlMaster socket — die ControlMaster-Zeilen fehlen im Host fasrc-Block, oder ~/.ssh/sockets existiert nicht.

  • Windows-Fetch schlägt fehl — Ist die AnyDesk-Sitzung (und der Tunnel) aktiv? Funktioniert ssh winbox? Leerzeichen in .mph-Dateinamen werden nicht unterstützt — umbenennen.

  • Job stirbt sofortcluster logs zeigt normalerweise einen Lizenz- oder Modulfehler; überprüfen Sie den Modulnamen und die COMSOL-Lizenz Ihrer Gruppe.

-
license - not tested
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • AI-callable calculators and engineering models with real formulas. No hallucinated math.

  • LLM chat, text summarization and AI image generation

  • Run, build, and validate firmware on virtual hardware from your AI agent. Hardware knowledge corpus.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ckuzmick/cluster-tools'

If you have feedback or need assistance with the MCP directory API, please join our Discord server