klone-mcp
This MCP server provides a minimal interface to run commands and manage files on the UW Hyak (klone) supercomputing cluster via SSH.
Tools:
klone_run: Execute any shell command on klone (pipes, redirects,&&chains supported). Supports a configurable timeout (default 60s) and returns stdout/stderr (1 MB cap). Use for SLURM commands (sbatch,squeue,sacct,scancel,sinfo,scontrol), filesystem utilities (du,df), and cluster-specific tools (hyakalloc,hyakstorage,apptainer).klone_put_file: Create or overwrite a file on klone with exact content via SSH stdin — no shell metacharacter interpretation, no ARG_MAX limits. Ideal for writing SLURM job scripts, config files, or small data files.
Documentation resources:
klone://docs/commands: Curated list of klone-specific utilities.klone://docs/quickstart: Orientation on storage/quota layout, SSD-staging patterns, and indexes to help topics (SLURM, GPUs, containers, MATLAB, R, Jupyter, etc.).klone://help/jobsand other URIs for cluster usage guidance.
Other notes:
The server reuses a persistent SSH connection (configured via
KLONE_SSH_HOSTenv var or a defaultklonealias) to avoid repeated Duo/MFA prompts.A typical workflow: write a SLURM script with
klone_put_file, then submit and monitor it usingklone_runwithsbatch/squeue.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@klone-mcp run squeue to see my SLURM jobs"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
klone-mcp
A minimal MCP server for UW Hyak (klone). Exposes two tools —
klone_run (any shell command) and klone_compute (run commands on a
named, reusable compute allocation) — plus documentation resources
covering klone's filesystem layout, SLURM conventions, and curated shell
commands.
Agents already know how to use squeue, sacct, sbatch, du, etc.,
and they know bash (heredocs to write files, pipes, etc). This MCP
doesn't wrap any of it. It just gives the agent a convenient way to run
commands on klone and find out what klone-specific utilities exist.
The SSH host can be overridden via the KLONE_SSH_HOST env var
(default: klone). Useful for alternate aliases, a test cluster, or
parallel configs.
If you want pre-typed wrappers around SLURM (klone_squeue, klone_log,
klone_submit, …) checkout the structured-tools branch.
Prerequisites
Python 3.10+
A working SSH alias
kloneon your machine. Add this block to~/.ssh/configif you don't have it (replaceYOUR_UWNETID):Host klone HostName klone.hyak.uw.edu User YOUR_UWNETID ControlMaster auto ControlPath ~/.ssh/cm-%r@%h:%p ControlPersist 10h ServerAliveInterval 60Then run
ssh kloneonce, complete the Duo push, and leave the terminal open. The persistent connection meansssh klone <cmd>from any other terminal won't re-prompt for the next 10 hours. The MCP reuses this same connection.
Related MCP server: Developer Toolbox MCP
Install
cd ~/klone/klone-mcp
pip install -e .Or with uv:
cd ~/klone/klone-mcp
uv venv && source .venv/bin/activate && uv pip install -e .Verify it runs
ssh klone whoami # must return your NetID — seed the SSH session firstRegister with Claude Code
claude mcp add klone -- python -m klone_mcp.serverThe -- is required because claude mcp add would otherwise try to
parse -m as its own flag.
If you installed into a venv, point at that venv's Python:
claude mcp add klone -- /path/to/.venv/bin/python -m klone_mcp.serverOr edit ~/.claude/settings.json directly:
{
"mcpServers": {
"klone": {
"command": "python",
"args": ["-m", "klone_mcp.server"]
}
}
}Use it
claudeInside the session:
"Run
klone_runwithwhoami."
Should return your NetID. If Duo expired, you'll get a structured re-auth
prompt — open a terminal, do ssh klone, complete Duo, leave that
terminal open, and ask the agent to retry.
Tools
Tool | Purpose |
| Run any shell command on klone. Returns stdout + (on success) stderr, capped at 1 MB per stream. Pipe large content via |
| Run |
Things like df, du, sinfo, hyakalloc, scontrol, squeue, sacct, sbatch are not separate tools — invoke them via klone_run. See the klone://docs/commands resource for a curated list. To write a file, use a heredoc or stdin=: klone_run("cat > /tmp/x", stdin=body).
Available Tools
2 toolsklone_put_fileA
Create or overwrite a file on klone with the given content.
Content is piped via SSH stdin, so size is unlimited (no ARG_MAX
boundary) and shell metacharacters in content are not interpreted.
Use this for writing SLURM scripts, config files, small data files —
anything where you want exact bytes written verbatim. For very large
data files, use rsync or scp from the calling machine instead.
If you're writing a SLURM script, read klone://help/jobs first
for the partition catalog and klone://help/checkpoint if you're
planning to use ckpt-all (preemption handling is required).
Inputs: path (required), content (required). Returns: result
klone_runA
Run a shell command on klone and return its stdout.
cmd is run by the remote shell, so pipes, redirects, and && chains
work. For everything beyond simple commands — SLURM job submission,
job inspection, log tailing, disk queries, etc. — invoke the
appropriate shell tool here. See klone://docs/commands for a list
of klone-specific utilities (hyakalloc, hyakstorage, squeue, sacct,
sbatch, scontrol, scancel, sinfo, apptainer, ...).
For long-running work (compilation, training), submit a SLURM job
via sbatch rather than running it directly.
timeout (seconds) controls how long to wait for the remote command.
Default 60. Bump for expensive queries like du -sh /gscratch/....
First-time orientation: if you haven't already, read
klone://docs/quickstart — it covers the storage/quota layout, the
SSD-staging performance pattern, and indexes all other klone://help/*
topics (SLURM, GPUs, containers, MATLAB, R, Jupyter, etc). Reading it
once saves repeated trial-and-error.
Inputs: cmd (required), timeout. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 2 tools
The two tools serve completely distinct purposes: one writes files verbatim, the other executes shell commands. There is no ambiguity or overlap.
Both tools follow the same 'klone_verb_noun' pattern using snake_case, making the naming predictable and consistent.
With only two tools, the server is minimal but effective. The 'run' tool can execute arbitrary shell commands, covering a wide range of operations, so the count is well-scoped for the domain.
The tool surface covers the core needs for cluster interaction: file writing and command execution. Missing operations like file reading or deletion are easily accomplished via the run tool, making the set complete for the inferred domain.
Maintenance
Related MCP Connectors
Remote MCP server exposing your Node Command fleet (files, shell, processes, browser) to AI hosts.
A very simple remote MCP server that greets you, with a custom icon.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for Claude Code to execute commands on any remote server over SSH. Provides tools for remote execution, file operations, and connection info.1MIT
- FlicenseNot gradedqualityDmaintenanceA production-ready MCP server providing file, system, math, and text utilities through a simple CLI client.-
- AlicenseCqualityDmaintenanceAn educational MCP server exposing shell command execution (PowerShell and sh) and a benign tool for learning about MCP tools, resources, and security risks like tool poisoning.33MIT
- FlicenseAqualityDmaintenanceA minimal MCP server that lets AI hosts execute shell commands in a sandboxed workspace directory.1-