Skip to main content
Glama
Zhanyl-tech

slurm-mcp

by Zhanyl-tech

slurm-mcp

Ein schreibgeschützter MCP-Server, der Agenten den Zustand des Slurm-Schedulers bereitstellt. Die Allowlist wird im Code erzwungen, nicht in einem Prompt erbeten, und die Tool-Oberfläche nutzt progressive Offenlegung, damit eine Slurm-förmige Frage kein Slurm-förmiges Kontextfenster kostet.

v0.1.0. Der Guard, die Themenoberfläche und der stdio-Server sind gebaut und getestet. Der Server läuft gegen einen echten Cluster oder gegen aufgezeichnete Fixtures, wenn kein Slurm installiert ist.


Warum der Guard im Code steht

Ein System-Prompt, der „nur schreibgeschützte Befehle verwenden" sagt, ist eine Bitte, keine Kontrolle. Er fällt im Fehlerfall offen aus. Ein Jailbreak, ein fehlgeleiteter Tool-Aufruf oder eine gewöhnliche Halluzination genügt, um auf einem Produktions-Controller scontrol update zu erreichen.

Alles, was einen Node drainen könnte, muss unmöglich ausdrückbar sein, nicht nur untersagt. Deshalb liegt die Allowlist in guard.py und wird bei jedem Aufruf ausgeführt:

  • nur acht Lese-Binaries dürfen überhaupt laufen;

  • scontrol ist für show erlaubt und wird für update, reconfigure, shutdown, reboot, requeue, hold, power sowie fünfzehn weitere verweigert;

  • Shell-Metazeichen in Argumenten werden abgelehnt, und Befehle werden ohnehin nur mit shell=False ausgeführt — Defence in Depth, nicht die einzige Barriere.

Das Bedrohungsmodell ist kein böswilliger Benutzer. Es ist ein Agent, der um drei Uhr nachts eine verwirrende Log-Zeile gelesen hat und im Begriff ist, etwas Entscheidendes zu tun.

Die Tests prüfen dies nicht mit Behauptungen über Prompt-Text, sondern mit 51 echten Mutations- und Injektionsversuchen, denn eine Zusage auf Prompt-Ebene kann nicht getestet werden.

make test

Related MCP server: mcp-slurm

Progressive Offenlegung

Das naheliegende Design stellt ein Tool pro Binary bereit — sinfo, squeue, sacct, sdiag, sprio, sshare, scontrol, sacctmgr — jedes mit einem Schema für seine Flags. Slurms Flag-Oberfläche gewaltig ist, und das meiste davon ist für eine konkrete Frage irrelevant, aber das gesamte Kontext in jeder Runde trägt.

Dieser Server stellt dagegen drei Tools bereit:

Tool

wann

slurm_overview

Der Snapshot, mit dem die meisten Sessions starten — Nodes, Warteschlange und Diagnostik in einem Aufruf

slurm_query

Ein Thema plus optionale Filter. Themen sind ein geschlossenes Vokabular, keine Kommandozeile

slurm_describe

Spaltenbedeutungen und Filter für ein Thema, das nur bei Bedarf abgerufen wird

Gemessen, reproduzierbar mit make footprint:

  resident, three tools            1088 chars
  detail, fetched on request       3029 chars
  flat one-tool-per-binary         4441 chars  (4.1x resident)

Das ist eine Messung der Kontextkosten, kein Qualitätsanspruch. Es besagt, dass die Details nicht im Kontext liegen, bis sie angefragt werden; es besagt nicht, dass ein Agent irgendetwas besser diagnostiziert. Nichts hier wurde auf slurm-rca-bench ausgewertet.

Themen: queue, nodes, accounting, priority, fairshare, diagnostics, config.

Quickstart

Kein Cluster erforderlich.

make install
make surface      # the read-only allowlist, and what is denied
make demo         # a full overview against recorded fixtures
make footprint    # reproduce the context measurement above
make check        # ruff, ruff format, mypy --strict, pytest

Bei einem echten Cluster lässt du --fixtures weg:

slurm-mcp overview
slurm-mcp query queue --filter user=alice
slurm-mcp describe accounting

Als MCP-Server

pip install -e ".[server]"
slurm-mcp serve              # stdio; add --fixtures to serve recorded data

Richte einen MCP-Client auf diesen Befehl aus. Jede Antwort ist mit [live] oder [fixture] gekennzeichnet, damit aufgezeichnete Daten niemals mit einem echten Cluster-Readsch verwechselt werden.

Einschränkungen

  • Schreibschutz gilt nur für die eigenen Oberfläche des Servers. Er sandboxiert den Host nicht und trifft keine Aussage über die anderen Tools, die einem Agenten zur Verfügung gestellt wurden.

  • Die Fixtures sind illustrativ, kein Benchmark. Sie bilden eine plausible Cluster-Form, damit die Oberfläche lauffähig ist; aus ihnen darf kein Ergebnis zitiert werden.

  • Kein Scoring. Der Anspruch hier betrifft die Tool-Oberfläche, nicht die diagnostische Genauigkeit. Die Messung, ob progressive Offenlegung die Diagnose eines Agenten verändert, ist Aufgabe von cluster-sre-agent und ist nicht dann.

  • Ein einziger Slurm-Dialekt. Die Ausgabeformat wurde gegen die Spaltenlayouts von Slurm 25.x getestet. Ältere Versionen können abweichen.

  • sacct kann blockieren. Ein degradierter Accounting-Pfad bringt ihn zum Hängen, statt dass er Fehler meldet; Aufrufe laufen nach 20 Sekunden in eine Timeout und melden dies auch ein — weil ein Agent, der ewig wartet, schlechter ist als ein Agent, dem gesagt wird, dass der Lesezugriff fehlgeschlagen ist.

Verwandtes

  • cluster-sre-agent — der Agent, der eine solche Oberfläche nutzt. Aus seiner internen schreibgeschützten Tool-Schicht stammt dieses Design; dies Repo ist der eigenständige Server.

  • cluster-ops-skills — die Runbooks, die ein Agent befolgt, sobald er den Cluster lesen kann.

  • slurm-rca-bench — wo ein Anspruch auf diagnostische Qualität zu beweisen wäre.

Lizenz

MIT.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables read-only interaction with Proxmox homelab VMs and containers, allowing LLM agents to list VMs, monitor status and performance metrics, view snapshots, and check cluster health through natural language queries.
    8
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage SLURM HPC clusters via SSH. Supports job submission, resource monitoring, queue management, and file operations.
    4 npm
    4
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides read-only access to OpenClaw and Codex operational data like status, tasks, sessions, logs, and Git changes. Ensures safety via redaction, allowlists, and bounded outputs.
    MIT