Skip to main content
Glama
Zhanyl-tech

slurm-mcp

by Zhanyl-tech

slurm-mcp

MCP-сервер с доступом только на чтение, который отдаёт агентам состояние планировщика Slurm. Список разрешённых действий (allowlist) зашит в код, а не формулируется в промпте; инструментальная поверхность построена на принципе прогрессивного раскрытия, и поэтому вопрос про Slurm не требует контекстного окна на весь Slurm.

v0.1.0. Защитный слой, набор тем и stdio-сервер реализованы и покрыты тестами. Сервер работает с настоящим кластером или с записанными фикстурами — даже без установленного Slurm.


Почему защита в коде

Системный промпт, говорящий «используйте только read-only команды», — это просьба, а не механизм контроля. В сбое он остаётся открытым (fail-open). Джейлбрейка, перепутанного вызова инструмента или обычной галлюцинации достаточно, чтобы добраться до scontrol update на боевом контроллере.

Всё, что может перевести узел в режим drain, должно быть невозможно выразить, а не просто считаться нежелательным. Поэтому список разрешений живёт в guard.py и проверяется при каждом обращении:

  • выполняться могут только восемь read-бинарников;

  • scontrol разрешён для show и запрещён для update, reconfigure, shutdown, reboot, requeue, hold, power и ещё пятнадцати команд;

  • метасимволы шелла в аргументах отклоняются, а команды и так запускаются с shell=False — это защита в глубину, а не единственный рубеж.

Модель угрозы здесь — не злонамеренный пользователь. Это агент, который в три часа ночи прочитал сбивающую с толку строку лога и вот-вот сделает решительный шаг.

Тесты проверяют это на 51 реальной попытке изменения состояния и внедрения кода, а не на тексте промпта, потому что обещание на уровне промпта невозможно проверить:

make test

Related MCP server: mcp-slurm

Прогрессивное раскрытие

Очевидное решение — один инструмент на каждый бинарник: scontrol, sinfo, squeue, sacct, sdiag, sprio, sshare, sacctmgr, — каждый со своей схемой флагов. Поверхность флагов Slurm огромна, и почти всё в ней не относится к конкретному вопросу, но на каждом ходе диалога она целиком лежит в контексте.

Этот сервер предоставляет три инструмента:

инструмент

когда

slurm_overview

снимок, с которого начинается большинство сессий: узлы, queue, диагностика — одним вызовом

slurm_query

одна тема и нопциональные фильтры. Темы — замкнутый словарь, а не командная строка

slurm_describe

значения колонок и фильтры для одной темы, подтягиваются только при необходимости

Измерено и воспроизводится командой make footprint:

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

Это измерение стоимости контекста, а не утверждение о качестве. Оно говорит, что детали подгружаются только по запросу; оно не говорит, что агент станет диагностировать лучше. Ничего здесь nowadays not evaluated на 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.x; в старее версиях они могут отличаться.

  • sacct может блокироваться. Деградировавший учётный тракт заставляет его зависать, а не возвращать ошибку; вызовы заверяются через 20 секунд тайм-аутом с явным сообщением, потому что агент, ждущий бесконечно, хуже агента, которому сказано, что чтение не удалось.

Связанное

  • cluster-srustifyer — агент, которому потребляется инструментальная поверхность этого вида. Внутренний слой его инструментов только для чтения и есть источник этого подхода; этот репозиторий — самостоятельный сервер, вынесенный из него.

  • cluster-ops-skills — runbook-и, которым следует агент после того, как он смог прочитать с кластера.

  • slurm-rca-бench — место, где пришлось бы будущее доказывать любое утверждение о качестве диагностики.

Лицензия

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.
    7 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