Purdue RCAC MCP Server: Enables agentic development with HPC clusters and storage services.
For MCP-enabled desktop applications like Claude Desktop, Cursor, or Warp, add this server to your MCP configuration with an SSH host pointing at your cluster:
{
"mcpServers": {
"rcac": {
"command": "uvx",
"args": ["git+https://github.com/purduercac/rcac-mcp", "--ssh-host", "cluster.rcac.purdue.edu"]
}
}
}This runs the server locally in stdio mode, executing commands on the cluster over SSH
using your existing ~/.ssh/config and keys.
Alternatively, set RCAC_SSH_HOST in your environment and omit --ssh-host from the args.
The server supports three execution modes:
ssh(default for stdio) — Execute commands on a remote HPC cluster via SSH.local— Execute commands locally via$SHELL. For development/testing only.delegate— Multi-user mode; run as a privileged process and delegate commands to authenticated users viasudo. Requires JWT or OIDC authentication.
See SECURITY.md for detailed architecture and configuration.
For a shared hosted instance with authentication:
rcac-mcp -t http --ssh-host cluster.rcac.purdue.eduexport JWT_SECRET="your-secret-key-at-least-32-characters"
rcac-mcp -t http -a jwt -e delegate
# Generate a token for clients
rcac-mcp --generate-token --lifetime 86400For production-like deployments with HTTPS:
# Install mkcert if needed
brew install mkcert
mkcert -install
# Generate certificates
mkdir -p certs
mkcert -cert-file certs/cert.pem -key-file certs/key.pem mcp.rcac.dev localhost 127.0.0.1
# Add to /etc/hosts
echo "127.0.0.1 mcp.rcac.dev" | sudo tee -a /etc/hosts
# Run
docker compose upThe server will be available at https://mcp.rcac.dev:8443.
The server includes an FTS5-powered search index over RCAC documentation (user guides,
software catalog, datasets, blog posts, workshops). Agents use doc_search and doc_load
to consult authoritative docs before advising users.
Build the index from a local clone of the RCAC-Docs repo:
rcac-mcp --index-docs --docs-path /path/to/RCAC-DocsThe database is stored at ~/.config/rcac-mcp/docs.db by default (override with
--docs-output or the RCAC_DOCS_DB environment variable). Re-running the command
performs an incremental update — only changed files are reprocessed.
run_command(command, cwd, timeout)— Execute a shell command on the remote systemlist_directory(path, show_hidden)— List contents of a directoryread_file(path, encoding, max_size)— Read contents of a filewrite_file(path, content, append, create_dirs)— Write content to a fileupload_file(local_path, remote_path)— Upload a file to the remote systemdownload_file(remote_path, local_path)— Download a file from the remote system
myquota()— Show storage usage and quota limitsstorage_paths()— Get resolved paths for home, scratch, and depotjobinfo(job_id)— Detailed job informationjobcmd(job_id)— Command submitted for a jobjobenv(job_id)— Environment variables for a jobjobscript(job_id)— Full submission script for a jobshowpartitions()— Available partitions and their statusaverage_wait(partition, account)— Queue wait time statistics
sbatch(...)— Submit a batch job (from script path or inline content)squeue(...)— View the job queuescancel(...)— Cancel jobssacct(...)— Query job accounting historysinfo(...)— Cluster and partition statusscontrol_show_job(job_id)— Detailed Slurm job infoscontrol_show_node(node)— Detailed node infoslist()— Slurm accounts and usage (RCAC-specific)sfeatures()— Node hardware features and constraints (RCAC-specific)
doc_search(query, category)— Full-text search over RCAC documentationdoc_load(path)— Load the full content of a documentation page
uv sync
rcac-mcp -e localRun the test suite:
pytestMIT