Skip to main content
Glama

clu

简体中文 | English

SSH 会话保持/管理 + Slurm 集群与普通服务器的 AI agent 能力层。 面向高校师生的单用户工具:任意 MCP 客户端(Claude Code、Codex 等)与 clu CLI 共享同一 daemon。

更快、更省:结构化 MCP 工具让 agent 一步拿到答案,而不是多轮手拼 ssh/sbatch 命令。 实测 4 个集群任务(Claude Code CLI + deepseek-v4-flash):token 仅 39%、耗时 44%、轮次 43% (对比裸 ssh 基线,见实测对比)。


1. 它解决什么问题

  • AI 直连集群:在 Claude Code 里说"看看队列""抢张 A100""传数据集上去", clu 经你自己的 SSH 通道完成,无需把密钥交给任何云服务

  • 会话不丢:交互式资源(salloc)跑在远端 tmux 里,断网/合盖不丢 allocation

  • 连接复用:本地 daemon 持有长连池,命令秒回、断线自动重连

  • 留痕:每次执行写 SQLite,跨会话可查"上次那个作业怎么样了"

Related MCP server: SSH MCP Server

实测对比:更快、更省(2026-10-23)

真实会话实测:Claude Code CLI 2.1.309 + 模型 deepseek-v4-flash。

4 个测试任务(每任务一次 claude -p 单轮会话,--max-turns 12):

  1. 查看 cluster 的 gpu-a100 分区空闲 GPU 卡数,以及哪些节点有空闲

  2. 列出我当前的全部作业和状态

  3. 在 xxx 分区提交一个测试作业(1 核 CPU、5 分钟、sleep 240),返回 job id

  4. 查看该作业的状态与输出日志,然后取消它

成本按 token 计(输入 + 输出 + 缓存读,与中转计费口径一致)。

总 token 消耗

墙钟时间

对话轮次

指标

clu

baseline

比例

总 token

279,816

722,679

39%

总墙钟

81s

185s

44%

总轮次

18

42

43%

正确性:两组 4/4 全部正确;提交的作业均真实存在(job id 经 squeue 与 clu 台账双向核对), 取消操作均生效。

为什么更快更省:resources、jobs、submit 等工具把"取原始数据 → 解析 → 拼命令" 收进一次调用——agent 不再需要 sinfo/scontrol/squeue 多轮试探。轮次从 42 降到 18, token 从 72.3 万降到 28.0 万;MCP 工具 schema 本身只占约 3.9k tokens,远低于多轮命令的成本。

说明:单轮小样本,绝对数字会受模型与中转波动影响;相对差距(2–3 倍)在多次运行中稳定。


2. 安装

方式一:单文件二进制(推荐,无需 Python)

# macOS / Linux:下载对应平台二进制到 ~/.local/bin
curl -fsSL https://raw.githubusercontent.com/QiandingHuang666/clu-ssh/main/packaging/install.sh | sh

# 指定版本或目录:
# CLU_VERSION=v0.1.6 CLU_PREFIX=/usr/local/bin sh packaging/install.sh
# Windows(PowerShell)
irm https://raw.githubusercontent.com/QiandingHuang666/clu-ssh/main/packaging/install.ps1 | iex

Releases 页提供各平台产物:clu-<版本>-<系统>-<架构>.tar.gz(Windows 为 .zip) 与同名 .sha256 校验文件。clu-mcp 与 clu 是同一个二进制(按 argv[0] 分派)。

方式二:uv / pipx(需要 Python ≥ 3.11)

uv tool install clu-ssh
# 或 pipx install clu-ssh

方式三:源码开发

git clone https://github.com/QiandingHuang666/clu-ssh
cd clu-ssh && uv sync
alias clu='uv run --project /path/to/clu-ssh clu'

要求:SSH 公钥认证(不支持密码登录的连接)。Windows 上 clu attach 需要系统 OpenSSH 客户端。

接入 MCP 客户端

clu-mcp 是标准 stdio MCP server(服务器名 clu),启动时自动拉起本地 daemon, 无需任何环境变量。

Claude Code

claude mcp add --scope user clu -- clu-mcp        # 用户级
claude mcp add clu -- clu-mcp                     # 项目级
# 源码安装时用绝对路径:/path/to/clu-ssh/.venv/bin/clu-mcp

Codex CLI —— 编辑 ~/.codex/config.toml:

[mcp_servers.clu]
command = "clu-mcp"
args = []

其他 MCP 客户端(Claude Desktop / Cursor / Cline / Windsurf 等)—— 在 MCP 配置中加入:

{
  "mcpServers": {
    "clu": { "command": "clu-mcp", "args": [] }
  }
}

常见位置:Claude Desktop(macOS ~/Library/Application Support/Claude/claude_desktop_config.json, Windows %APPDATA%\Claude\claude_desktop_config.json)、Cursor(~/.cursor/mcp.json 或项目 .cursor/mcp.json); Cline / Windsurf 在各自 MCP 设置界面添加同一条目。

接入后先执行 clu connection import 配置连接,可用工具见 §6 MCP 工具手册。

3. 五分钟上手

3.1 前置:配置 SSH 公钥登录(首次使用)

clu 只支持公钥认证,不保存任何密码。如果这台机器还没配过公钥登录,先做这一步:

# ① 看有没有现成密钥(有 .pub 就跳过生成)
ls ~/.ssh/id_ed25519.pub 2>/dev/null

# ② 没有就生成一对(一路回车即可;建议设置口令,交给 ssh-agent 记住)
ssh-keygen -t ed25519 -C "you@example.com"

# ③ 把公钥装到服务器(会提示输入一次服务器密码)
ssh-copy-id -p 22 you@hpc.example.edu.cn

# ④ 验证:这次应该不再询问密码
ssh -p 22 you@hpc.example.edu.cn hostname

Windows 没有 ssh-copy-id 时,在 PowerShell 里等价操作:

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh -p 22 you@hpc.example.edu.cn "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

可选但推荐:把主机写进 ~/.ssh/config,以后 ssh gzu 就能连:

Host gzu
  HostName hpc.example.edu.cn
  Port 22
  User you
  IdentityFile ~/.ssh/id_ed25519

3.2 让 clu 认识你的机器

# 有 ~/.ssh/config:一次性导入(副本,只导公钥可达条目,自动解析 ProxyJump)
clu connection import

# 没有 ssh config:直接添加
clu connection add gzu --host hpc.example.edu.cn --user you --port 22

# Slurm 集群要标成 cluster(import 默认按 IP 启发式标 instance/local)
clu connection add gzu --host hpc.example.edu.cn --user you --port 22 --kind cluster
#    也可以编辑 ~/.config/clu/connections.toml 修改已有条目的 kind

3.3 试一下

# 拉起 daemon(此后任何命令都会自动 ensure,通常不用手动)
clu server ensure

# 经连接池真连一次
clu connection check gzu

# 跑一条远程命令
clu exec gzu "squeue -u $USER | head"

4. 核心概念

概念

说明

daemon

本机常驻进程,持有 SSH 连接池、tmux 会话、转发与留痕。缺席时任意命令自动拉起(clu server ensure 模式),clu server stop 停止

连接

~/.config/clu/connections.toml 中的一条远程主机,带 kind:cluster(Slurm,启用作业工具)/ instance(租用机)/ local(局域网)

跳板

连接可设 proxy 指向另一连接(单级 ProxyJump),认证与隧道复用连接池

profile

学校/集群定制(公共资源目录、重操作名单、抢占分区),挂在连接上,代码零硬编码

留痕

每次执行写 ~/.local/share/clu/ledger.sqlite3,ledger_query 按连接/关键词/作业号检索

known_hosts

首次连接记录主机密钥,之后严格校验,变更即拒绝(防中间人)

5. CLI 参考

5.1 速查

clu server   ensure | status | stop
clu connection  import | add | remove | list | check
clu exec     LABEL COMMAND...
clu resources LABEL [过滤]
clu alloc    LABEL [资源]
clu attach   LABEL PURPOSE
clu jobs     LABEL [--states RUNNING,PENDING]   实时队列(squeue 实时查询)
clu submit   LABEL [-f 脚本 | --script 内容 | stdin]
clu job      list | log
clu session  list | release
clu forward  add | list | remove

5.2 逐条说明

连接

clu connection import [--config ~/.ssh/config] [--overwrite]   # 一次性导入公钥条目
clu connection add gzu --host hpc.example.edu.cn --user you --kind cluster \
                     [--port 22] [--identity ~/.ssh/id_ed25519] [--proxy 跳板label] [--profile 名]
clu connection remove gzu
clu connection list                # 直读配置文件 + daemon 在线时附池状态
clu connection check gzu           # 经连接池真连一次并执行 true

远程执行

clu exec gzu "squeue -u $USER"       # 受安全门约束(危险命令/登录节点重操作会拒绝)
clu exec gzu "df -h" --timeout 30

资源查询

clu resources gzu                                  # 分区聚合(紧凑视图)
clu resources gzu --partition gpu-a100             # 指定分区
clu resources gzu --cpu-free                       # 只看有空闲 CPU 的节点
clu resources gzu --cpu-gpu-free --gpu-only        # CPU+GPU 都空闲,且只看 GPU 节点
clu resources gzu --fully-idle                     # CPU 与 GPU 全空闲
clu resources gzu --nodes                          # 附节点明细表

抢占 / 交互式资源

clu alloc gzu                                 # 默认 GPU 优先,无 GPU 空闲回退 CPU
clu alloc gzu --gpu --gpus 2 --cpus 16        # 指定卡数与核数
clu alloc gzu --cpu --cpus 8                  # 只抢 CPU
clu alloc gzu -p gpu-a100-8card --purpose train --wait 60
# 输出 granted 后:
clu attach gzu train        # 进入计算节点 shell(exit 即释放)
clu session list gzu        # 查看托管会话(--deep 全量扫描所有连接)
clu session release gzu train       # 释放单个
clu session release gzu --all       # 释放该连接全部

抢占选择逻辑:分区按单节点可满足度排名(GPU 数/CPU 核数都够才算), 提交被弹回时自动轮换候选分区;默认核数 = min(节点总核÷节点总卡, 节点空闲核)。

批处理作业

# 从文件提交(推荐)
clu submit gzu -f train.slurm --name train -p gpu-a100 --gpus 1 -c 16 -t 4:00:00

# 从标准输入提交
echo -e '#!/bin/bash\necho hi' | clu submit gzu --name echo-test -p cpu56c256g -c 1 -t 0:05:00

# 从字面量提交
clu submit gzu --script "#!/bin/bash
hostname
" --name probe

clu jobs gzu                  # 实时队列(当前用户全部作业)
clu jobs gzu --states RUNNING # 只看运行中
clu job list gzu              # 台账(脚本路径/资源/节点/状态/提交时间)
clu job list gzu --active     # 只看非终态
clu job log gzu 12345         # 读台账作业的 stdout/stderr(--tail N)

提交行为:

  • 脚本与日志落在远端 <家目录>/.clu/jobs/<连接>/<名称>-<时间戳>-<随机>.sh|-%j.out|-%j.err

  • 资源参数以 #SBATCH 指令插在 shebang 之后;脚本中已声明的同类指令不被覆盖

  • 脚本内容、路径、资源、状态写入本地 jobs 台账;daemon 每 60s 核对状态 (squeue 实时,已结束的用 sacct 补终态),job list 看到的就是最近核对结果

  • 安全门同样作用于脚本内容(危险命令拒绝)

端口转发

clu forward add gzu 10.0.0.5 8888 --local-port 18888
clu forward list
clu forward remove fwd-1

6. MCP 工具手册

clu-mcp 提供 16 个工具;○ 为只读工具(可在客户端权限设置中配置免确认)。 所有写操作在 daemon 端经过安全门(见 §8)。

工具

说明

关键参数

○ connection_list

连接与连接池健康状态

—

exec

远程执行单条命令(安全门在 server 端强制生效)

connection, command, timeout?

○ jobs

当前用户的作业列表(实时 squeue)

connection, states?

○ status

分区与队列概览

connection

○ resources

资源余量:每分区 CPU/GPU 总量/已占/空闲与节点数(单次往返,AllocTRES 权威值);filter=cpu_free / cpu_gpu_free / fully_idle 从第一步限定范围,gpu_only 可叠加;带过滤自动附节点明细

connection, partition?, filter?, gpu_only?, include_nodes?

submit

提交作业:脚本与 stdout/stderr 统一落远端 ~/.clu/jobs/<连接>/,脚本内容与路径记入本地台账

connection, script, name?, partition?, nodes?, cpus?, gpus?, time_limit?

cancel

取消单个作业

connection, job_id

○ job_list

作业台账:脚本路径与内容、申请资源、节点、日志路径、最近核对状态

connection?, active_only?

○ log

作业 stdout(自动定位路径并 tail)

connection, job_id, tail?

alloc

抢占接口(自动选择,无需先查询):缺省 GPU 优先、无空闲 GPU 回退 CPU;resource=gpu/cpu 只抢该类;分区按单节点余量排名、提交被弹回自动轮换;granted 后 clu attach 入计算节点 shell。默认核数 = min(节点总核÷总卡, 空闲核)(profile 可覆盖)

connection, purpose?, resource?, gpus?, cpus?, partition?, wait?

○ session_list

托管会话列表(tmux / pty-daemon / setsid)

connection?

○ session_info

会话详情:状态、job/节点、日志尾部

connection, purpose

session_release

释放会话(资源归还)

connection, purpose

upload / download

SFTP 传输,双侧父目录自动创建

connection, local_path, remote_path

○ ledger_query

检索历史执行(跨会话记忆)

connection?, kind?, keyword?, job_id?, since?, limit?

7. 典型场景

查队列 / 提交 / 看日志(对 Claude Code 说,或自己跑):

"用 clu 看看 gzu 的队列和 GPU 空闲情况" "把这个训练脚本提交到 gzu 的 gpu 分区,2 张卡" "job 12345 的日志尾部 100 行"

抢卡 / 抢资源(一个接口,自动选择):

"用 clu 抢一张卡" → alloc()(默认 GPU 优先,无空闲 GPU 自动回退 CPU) "抢 2 张 A100" → alloc(gpus=2);"抢 8 核 CPU" → alloc(resource="cpu", cpus=8) 分区自动选(单节点余量排名);显式 partition= 则直用。 granted 后 clu attach cluster-r <purpose> 直接落计算节点 shell,exit 即释放; 用完 "释放 xxx 会话"(session_release)。忙分区提交被弹回时自动轮换候选分区重试。

断线续传场景:alloc 会话在远端 tmux 里,笔记本断网、换地方、 重启 Claude Code 都不影响;clu session list 随时可查。

提交批处理作业:

"用 clu 把这个脚本提交到 gpu 分区,2 张卡" submit(connection="cluster-r", script=..., name="train", partition="gpu-a100", gpus=1, cpus=16) 或命令行:clu submit cluster-r -f train.slurm -p gpu-a100 --gpus 1 -c 16

脚本与日志落在远端 ~/.clu/jobs/<连接>/;clu job list 看状态(daemon 每 60s 自动核对), clu job log cluster-r <job_id> 读 stdout/stderr。

传文件:

"把 ./data.csv 上传到 gzu 的 /data/ 下" / "把 gzu:/result.tar 下载到 ./out/"

端口转发(访问集群内 Web 服务):

clu forward add gzu 10.0.0.5 8888 --local-port 18888   # 打开 http://127.0.0.1:18888
clu forward list && clu forward remove fwd-1

8. 安全模型

两层(DESIGN §8):

  1. Claude Code 工具权限(主):只读工具与写工具分开声明,按需配免确认白名单

  2. server 端硬规则(不可绕过,任何客户端生效):

    • 危险黑名单:递归删除根/系统目录/家目录、mkfs、dd of=/dev/*、 shutdown/reboot、scancel --all、fork 炸弹等 → 直接拒绝

    • 登录节点重操作拦截(profile 设 heavy_guard = false 可关闭):在 cluster 连接上跑训练/编译/装环境 (torchrun、make -j、pip install 等,profile 可增删)→ 拒绝并建议 submit/alloc

认证仅公钥,复用 ssh-agent 与 ~/.ssh;clu 不存储任何密钥。

9. 目录与配置

路径

内容

~/.config/clu/connections.toml

连接与 profile(可手改,保留注释)

~/.config/clu/known_hosts

主机密钥(accept-new)

~/.local/share/clu/ledger.sqlite3

SQLite:执行留痕 + 会话登记 + 作业台账

$XDG_RUNTIME_DIR/clu/(或 /tmp/clu-$UID/)

daemon socket 与日志 daemon.log(POSIX)

%APPDATA%\clu / %LOCALAPPDATA%\clu / %TEMP%\clu

Windows 的配置 / 数据 / 运行时目录

Windows 传输

daemon 监听 127.0.0.1 随机端口,daemon.port 存端口与一次性 token(首行握手)

环境变量 CLU_CONFIG_DIR / CLU_DATA_DIR / CLU_RUNTIME_DIR 可重定位(测试用)。

9.1 数据库表(ledger.sqlite3)

exec_records —— 执行流水(ledger_query 检索)

字段

说明

id / ts

自增主键 / UTC ISO8601 时间

connection

连接 label

kind

exec / submit / alloc / release / cancel / upload / download / forward

command

命令或脚本摘要

exit_code / duration_ms

退出码 / 耗时

job_id

关联的 slurm 作业(可空)

summary

一行摘要

sessions —— 托管会话登记 (label, purpose) 主键

字段

说明

label / purpose

连接 / 用途名(tmux 会话 clu/<label>/<purpose>)

job_id / node / partition

分配到的作业与节点、分区

gpus / cpus

申请资源

state

pending / granted(连接不可达时列表标注 stale)

updated_ts

最近一次核对时间

jobs —— 批处理作业台账 (connection, job_id) 主键

字段

说明

name

作业名

script_path / script

远端脚本绝对路径 / 完整脚本内容

partition / requested_nodes / cpus / gpus

申请资源

node_list

实际分配节点(squeue/sacct 核对)

stdout_path / stderr_path

日志绝对路径(%j 已解析为 job_id)

state

PENDING/RUNNING/COMPLETED/FAILED/CANCELLED/TIMEOUT/...

exit_code

sacct 退出码(如 0:0)

submitted_ts / updated_ts

提交 / 最近核对时间

远端目录:~/.clu/jobs/<连接>/(脚本与日志)、~/.clu/alloc/<连接>/<purpose>.log(salloc 日志)。

10. 故障排查

现象

处理

daemon 未运行

clu server ensure;看 daemon.log

连接处于退避期(retry_after)

刚失败过,等提示秒数;或 clu server stop && clu server ensure 重置连接池

Host key ... changed

主机密钥变了。确认是重装系统等正当原因后,删掉 ~/.config/clu/known_hosts 对应行

salloc 后 session 一直 pending

正常排队;clu session list 看会话,或让 Claude Code 调 session_info 查详情;超时会话保留

salloc 报 "--gres=gpu:N must be input"

集群提交插件强制经典语法——clu 已内置 --gres=gpu:N(贵大实测)

attach 后 hostname 是登录节点

已修复:clu 用 srun bash 落计算节点(无 SallocDefaultCommand 的集群 salloc 默认本地执行)

attach 后无提示符/配置未生效

已修复:srun --pty bash -l 持真终端并走登录 shell;日志改用 tmux pipe-pane(tee 管道会让 srun 拒绝 --pty)

转发不工作

转发绑定在连接上,连接断开后需重新 clu forward add(最小集限制)

clu session list 提示连接不可达

正常降级:该机器关机/网络不通,仅跳过其会话列举,其余照常(多连接并行探测,6s 上限)

squeue 输出解析异常

各校魔改 Slurm 差异大——把 clu exec gzu "squeue -u you" 原始输出发给作者

空闲 GPU 数量可疑

resources 的已占取节点 AllocTRES(scontrol show nodes -o 里 gres/gpu=N 为总量)。先用 clu exec gzu "scontrol show node <节点名> -o" 肉眼对账;老集群无 AllocTRES 时返回值会注明是作业估算

agent 循环重试同一命令

熔断保护:相同命令 120s 内执行满 5 次返回 loop_detected 并提示模型直接汇总已有结果;不同命令不受影响

远端没有 tmux

alloc 会明确报错并建议改用 exec/submit;普通服务器上的查询任务一律直接 exec,不需要 tmux

11. 已知边界(v1)

  • 文件传输为 SFTP 单文件;目录增量同步(rsync)在 v1.1

  • 跳板仅单级(ProxyJump 一跳);多级链在路线图

  • 转发仅本地 -L;SOCKS/远程 -R 在路线图

  • 平台 macOS + Linux + Windows(Windows 传输为 127.0.0.1 TCP + 一次性 token,见 §9 运行时目录的 daemon.port)

  • 密码认证的连接不支持(先 ssh-copy-id 配好公钥)

Available Tools

17 tools
allocA

抢占资源并直接执行(绝不只返回命令):tmux 内 salloc + srun bash, 分配后 attach 即入计算节点 shell,断线不丢资源。同名 purpose 已有活会话时返回 state="exists"(附 job 与接入/释放指引)——不会静默复用旧会话。

抢占选择自动完成(无需先查询):resource 缺省 = GPU 优先、无空闲 GPU 回退 CPU; resource=gpu / cpu 只抢该类(无则失败并附当前余量摘要); partition 显式指定则直接使用。返回 granted/pending/failed 与 job_id/node。

Args: connection: cluster 连接 label purpose: 会话用途名(如 train-a100),用于 tmux 命名与检索 resource: gpu | cpu;缺省为自动(GPU 优先回退 CPU) gpus: GPU 卡数(默认 1;resource 含 gpu 时生效) cpus: CPU 核数(cpu 资源必给则默认 4;也可与 GPU 同时指定) partition: 显式分区(跳过自动选择) wait: 等待授予秒数(超时会话保留,session_info 随时查)

Inputs: connection (required), cpus, gpus, wait, +3 more. Returns: object

cancelA

取消指定作业(scancel 单个作业)。scancel --all 被安全门禁止。

Inputs: job_id (required), connection (required). Returns: object

connection_listA
Read-onlyIdempotent

列出全部受管连接及连接池健康状态(label/kind/host/state)。

Inputs: no named parameters. Returns: object

downloadC

下载远端文件到本地(SFTP,本地父目录自动创建)。

Inputs: connection (required), local_path (required), remote_path (required). Returns: object

execA

在远程连接上执行单条 shell 命令。危险命令与集群登录节点重操作会被服务端拒绝。

Args: connection: 连接 label(见 connection_list) command: 要执行的 shell 命令 timeout: 超时秒数(默认 60)

Inputs: command (required), connection (required), timeout. Returns: object

job_listC
Read-onlyIdempotent

查询本地作业台账:脚本路径与内容、申请资源、节点、stdout/stderr 路径、 最近一次核对的状态(daemon 定期刷新)。

Inputs: connection, active_only. Returns: object

jobsB
Read-onlyIdempotent

列出 Slurm 集群上当前用户的作业(job_id/状态/分区/耗时/资源,结构化)。

Inputs: connection (required), states. Returns: object

ledger_queryB
Read-onlyIdempotent

检索执行留痕(跨会话记忆):按连接/类型/关键词/作业号过滤,时间倒序。

Inputs: kind, limit, since, job_id, +2 more. Returns: object

logB
Read-onlyIdempotent

读取作业 stdout(自动定位 StdOut 路径并 tail)。

Inputs: job_id (required), connection (required), tail. Returns: object

resourcesA
Read-onlyIdempotent

查询集群资源余量:每分区 CPU/GPU 的总量/已占/空闲与节点数。

一开始就限定查看范围(agent 与人类同款口径): flt=cpu_free(有空闲 CPU 的节点)、flt=cpu_gpu_free(CPU 和 GPU 都有空闲)、 flt=fully_idle(CPU 与 GPU 全空闲);gpu_only=true 只看有 GPU 的节点(可叠加)。 partition 限定分区。默认紧凑(分区聚合);带任一过滤或 include_nodes 才返回节点明细。不要自己拼 sinfo/scontrol。

Args: connection: cluster 连接 label partition: 只看该分区 flt: cpu_free | cpu_gpu_free | fully_idle gpu_only: 只看有 GPU 的节点(与其他条件叠加) include_nodes: 返回全部节点明细(大集群建议配合过滤)

Inputs: connection (required), flt, gpu_only, partition, +1 more. Returns: object

session_infoB
Read-onlyIdempotent

查看某个托管会话详情:分配状态、job_id、节点、日志尾部。

Inputs: purpose (required), connection (required). Returns: object

session_listA
Read-onlyIdempotent

列出 tmux 托管会话(仅 alloc 抢占产生的资源会话;普通查询任务请用 exec)。

要求远端装有 tmux;机器上没有 tmux 时列表为空或 alloc 会明确报错。

Inputs: connection. Returns: object

session_releaseB

释放托管会话:杀 tmux → salloc 退出 → 资源归还集群。

Inputs: purpose (required), connection (required). Returns: object

session_startA

在任意连接(集群/服务器)上开一个保活托管会话。

后端自动选择:远端有 tmux → 交互会话(attach 可回);无 tmux → 部署 pty-daemon 静态守护(可 attach,远端零依赖);部署不可行且给了 command → setsid 后台保活(不可 attach,仅日志)。普通查询任务不要用 本工具,直接用 exec。

Args: connection: 连接 label purpose: 会话用途名(唯一标识,重复会报 exists 或复用) backend: 显式指定 tmux | pty-daemon | setsid(缺省自动) command: setsid 后端必填的后台命令

Inputs: purpose (required), connection (required), backend, command. Returns: object

statusB
Read-onlyIdempotent

Slurm 集群概览:分区(节点/CPU/内存/GPU)与队列状态计数。

Inputs: connection (required). Returns: object

submitA

提交 Slurm 批处理作业:脚本写入 ~/.clu/jobs/<连接>/ 后 sbatch。

stdout/stderr 默认重定向到同目录 -<时间>-%j.out/.err(脚本自带 #SBATCH -o/-e 时尊重脚本);脚本内容、路径、资源与状态记入本地 jobs 台账。

Args: connection: cluster 连接 label script: sbatch 脚本内容(含 shebang) name: 作业名(默认 job) partition: 分区(脚本未声明时注入) nodes: 节点数(脚本未声明时注入) cpus: 每任务 CPU 核数 gpus: GPU 卡数(注入 --gres=gpu:N) time_limit: 时限(如 4:00:00)

Inputs: script (required), connection (required), cpus, gpus, +4 more. Returns: object

uploadB

上传本地文件到远端(SFTP,远端父目录自动创建)。

Inputs: connection (required), local_path (required), remote_path (required). Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.3/5.0

    Scored across 17 tools

    Disambiguation3/5

    Several query-oriented tools overlap conceptually: status/resources both describe cluster capacity, while jobs/job_list/ledger_query all surface job-related records at different layers. Descriptions clarify the distinctions, but names like status, jobs, and job_list are not self-evidently distinct without reading.

    Naming Consistency3/5

    The set mixes bare verbs (submit, alloc, exec, cancel, upload), noun-like tools (status, log, jobs, resources), and noun_verb compounds (job_list, session_start, ledger_query). The conventions are readable but not predictable as a single pattern.

    Tool Count4/5

    17 tools is slightly above the ideal compact range but still reasonable for a Slurm cluster/session/file-transfer management surface. The tools group into coherent areas: job lifecycle, resource inspection, sessions, files, and connections.

    Completeness4/5

    The surface covers core job submission, listing, logging, cancellation, resource inspection, session management, file transfer, and connection listing. Minor gaps include connection lifecycle management and richer Slurm accounting/history, but core workflows are well supported.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Enables AI agents to establish and manage persistent SSH connections to remote hosts for executing commands. Supports SSH config files, multi-host management, and automatic reconnection with thread-safe concurrent operations.
      15
      54 PyPI
      11
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to securely execute commands, transfer files, and manage port forwarding on remote servers via SSH.
      158 npm
      38
      Apache 2.0
    • 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.
      8 npm
      4
      -