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 "Install 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-mcprun 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).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| content | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses stdin-based piping, no size limit, no shell interpretation. Missing details on error handling and permissions, but overall transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then technical detail, then usage guidance. Every sentence adds value, though slightly lengthy. Well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Two parameters, no annotations, output schema exists but description does not mention return format. Missing constraints like directory support or overwrite behavior. Adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage; description adds meaning: 'path' is a file path, 'content' is exact bytes. Explains that shell metacharacters are not interpreted, which goes beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Create or overwrite a file on klone with the given content', specifying verb and resource. It distinguishes itself from sibling 'klone_run' by detailing file-writing use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (SLURM scripts, configs, small data) and when not to (very large data: use rsync/scp). Also provides prerequisite guidance for SLURM scripts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cmd | Yes | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the command is run by the remote shell (so pipes and redirects work), that it returns stdout, and that timeout controls wait time. It does not mention stderr handling, exit codes, or potential security risks, but for a command execution tool, this is fairly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but well-structured: it starts with a clear purpose sentence, then provides operational details in a logical flow, and ends with an orientation note. It could be more concise, but the length is justified by the amount of useful information. Front-loading is good.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there are only 2 parameters, no annotations, but an output schema (not shown), the description covers purpose, usage guidelines, parameter details, and orientation. It does not explain the output schema, but that is handled by the schema itself. It is comprehensive for a shell command execution tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains `cmd` as being run by the remote shell with support for shell syntax, and `timeout` as controlling wait time in seconds with a default of 60 and a note to bump for expensive queries. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a clear verb+resource: 'Run a shell command on klone and return its stdout.' This distinguishes it from the sibling tool 'klone_put_file', which handles file transfer. It precisely states what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides extensive guidance: it explains that `cmd` supports pipes and redirects, lists typical use cases (SLURM, job inspection), warns against long-running work and suggests using `sbatch` instead, and explains the `timeout` parameter with a suggestion to bump for expensive queries. It also recommends reading a quickstart doc for orientation. This explicitly tells when and when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.0- First observed
klone_put_file - First observed
klone_run
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Run commands and read/write files on your servers over Termalin's keyless tunnels (hosted MCP).
A very simple remote MCP server that greets you, with a custom icon.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server for Claude Code to execute commands on any remote server over SSH. Provides tools for remote execution, file operations, and connection info.-
- FlicenseNot gradedqualityCmaintenanceA production-ready MCP server providing file, system, math, and text utilities through a simple CLI client.-
- AlicenseCqualityCmaintenanceAn 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
- FlicenseAqualityCmaintenanceA minimal MCP server that lets AI hosts execute shell commands in a sandboxed workspace directory.1-