Skip to main content
Glama
Zhanyl-tech

slurm-mcp

by Zhanyl-tech

slurm-mcp

Slurmスケジューラの状態をエージェントに公開する読み取り専用のMCPサーバー。 ホワイトリストはコードで強制され、プロンプトで要求されるものではない。また、ツールサーフェスは段階的開示(progressive disclosure)を採用しているため、Slurmに関する質問があっても、Slurm関連の情報でコンテキストウィンドウを丸ごと消費することはありません。

v0.1.0. ガード、トピックサーフェス、stdioサーバーは構築・テスト済みです。実クラスターに対して実行することもできますし、Slurmがインストールされていない環境でも記録済みのフィクスチャー(fixtures)に対して実行できます。


ガードがコードにある理由

「読み取り専用のコマンドだけを使え」というシステムプロンプトは、要求であって制御ではありません。フェイルオープン、つまり失敗時には開かれたままになります。ジェイルブレイクや、混乱したツール呼び出し、あるいは普通のハルシネーションだけで、本番コントローラで scontrol update に到達できてしまいます。

ノードをドレインできる操作は、単に非推奨とするのではなく、表現そのものを不可能にしなければなりません。そこで許可リストはguard.pyに置かれ、すべての呼び出しのたびに実行されます:

  • 実行できるのは8つの読み取り専用バイナリだけです。

  • scontrol は show だけ許可され、update、reconfigure、shutdown、reboot、requeue、hold、power を含む他の15以上の操作は拒否されます。

  • 引数にシェルのメタ文字が含まれている場合は拒否され、さらにコマンドは shell=False で実行されます — これは多重防御であって、唯一の防壁ではありません。

脅威モデルは悪意のあるユーザーではありません。 午前3時に紛らわしいログ行を読み、今まさに思い切ったことをしようとしているエージェントです。

テストはプロンプトの文言に対してではなく、51件の実際の変更・インジェクション試行によってこの設計を検証しています。プロンプトレベルの約束はテストできないからです:

make test

Related MCP server: mcp-slurm

段階的開示(progressive disclosure)

単純な設計はバイナリごとに1ツールを公開するというものでした — sinfo, squeue, sacct, sdiag, sprio, sshare, scontrol, sacctmgr — それぞれがフラグのスキーマを持ちます。Slurmのフラグ面は膨大で、その大半はどんな質問にも関係ありませんが、そのすべてが毎ターンコンテキストに載ります。

このサーバーが公開するのは3つのツールです:

tool

用途

slurm_overview

ほとんどのセッションが最初に開くスナップショット — ノード、キュー、診断を1回の呼び出しで取得

slurm_query

1つのトピックと任意のフィルター。対象はクローズドな語彙であり、コマンドラインではありません

slurm_describe

1つのトピックの列の意味とフィルターを、必要なときにだけ取得

計測済みで、make footprint で再現できます:

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

これはコンテキストコストの計測であり、品質の主張ではありません。詳細は要求されるまで常駐しないということであり、診断性能が向上するということではありません。ここに書かれた内容は slurm-rca-bench でスコアリングされていません。

トピック: queue, nodes, accounting, priority, fairshare、diagnostics, config.

クイックスタート

クラスターは不要です。

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

実クラスターに対して実行する場合は --fixtures を外します:

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

MCPサーバーとして

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

そのコマンドを任意のMCPクライアントに指定してください。すべてのレスポンスには [live] または [fixture] というラベルが付くので、記録されたデータがクラスターの実ヘルスとして誤認されることはありません。

制限事項

  • 読み取り専用が強制されるのは、このサーバー自身のサーフェスに対してだけです。 ホストをサンドボックス化するものではなく、エージェントが他のどのツールを与えられているかもそれについては語りません。

  • フィクスチャは例示であり、ベンチマークではありません。 サーフェスを実行可能にするためのもっともらしいクラスター形状を提供しているだけで、それらから結果を引用してはいけません。

  • スコアリングなし。 ここでの主張はツールサーフェスについてであり、診断の正確性についてではありません。段階的開示がエージェントの診断を変えるかどうかを評価するのは cluster-sre-agent の仕事であり、まだ実行されていません。

  • 単一のSlurm方言のみ。 出力形式はSlurm 25.xy列レイアウトに対してテストされています。古いバージョンでは異なる場合があります。

  • sacct がブロックします。 劣化したaccounting pathはエラーにとは限らず、ハングします。20秒のタイムアウトで呼び出しが切られ、その旨が報告されます。なぜなら、永遠に待つエージェントよりも、読み取り失敗を伝えられたエージェントの方がまだマシだからです。

関連

  • cluster-sre-agent — このようなサーフェスを利用するエージェント。このデザインは、その内部の読み取り専用ツールレイヤーに由来します。このリポジトリはそのスタンドアロンのサーバーです。

  • cluster-ops-skills — クラスターを読めるようになったエージェントが従うランブックです。

  • slurm-rca-bench — 診断品質についての主張は、ここで証明されなければなりません。

ライセンス

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