RISBridge MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ris_auth_statusB | Snapshot of local SSH-auth state (key, managed config, mux master) and whether the agent can run RIS commands hands-free. deep=true also runs the decisive key-only login test. |
| ris_setup_ssh_keyA | Create the dedicated ed25519 key (chmod 600) if absent and show the public key + install command. The private key is never returned. Pass overwrite=true to replace an existing key. |
| ris_show_public_keyB | Print the dedicated public key and its fingerprint. The private key is never read. |
| ris_generate_ssh_configA | Render the managed ~/.ssh/config block (with multiplexing) and a diff. Does NOT write anything. |
| ris_write_ssh_configA | Write the managed config block to ~/.ssh/config (atomic, backed up). Requires confirm=true. |
| ris_test_key_only_authB | Run the decisive key-only SSH test (BatchMode, no password/keyboard-interactive). Classifies whether the agent can automate without you, or whether Duo/MFA requires the multiplexing fallback. |
| ris_open_ssh_masterB | Best-effort open of the ControlMaster session; on a Duo host it returns the exact interactive command to run in a real terminal (approve Duo once, then the agent reuses the socket). |
| ris_check_ssh_masterA | Check the ControlMaster via |
| ris_repair_stale_socketA | Remove ONLY the exact, verified stale ControlPath socket (five safety guards). Use when the master is gone but a dead socket blocks reconnection. |
| ris_setup_wizardB | Personalized, plain-English setup checklist. It inspects your current state (WashU username, SSH key, SSH config, Duo/hands-free auth, account & workspace) and tells you the single next step. Read-only — it never changes anything; it points you at the exact tool or command to run next. |
| ris_discover_profileA | Read-only probe of your RIS identity: username, Slurm accounts/QOS, and WRITABLE storage workspaces (derived from your groups and live-tested). Presents candidates and asks you to confirm — it never picks for you. |
| ris_set_profileA | Save your confirmed username + Slurm account + storage workspace to ~/.risbridge-mcp/config.json. Validates the account is yours and the workspace is writable (unless force). Requires confirm=true. |
| ris_show_configB | Show the active resolved profile (username, account, workspace, partitions) and the profiles saved in config.json. |
| ris_validate_configA | Check the current profile against RIS facts: username set, account/workspace configured, partitions valid. |
| ris_list_partitionsB | Show RIS Compute2 partitions with availability and plain-English notes (MIG vs full H100, preempt, no plain general). |
| ris_gpu_statusB | Per-node H100 free/used on the GPU partition (full H100s only; MIG slices excluded). |
| ris_create_projectB | Create the standard project directory tree (src/ data/{raw,interim,processed}/ models/ outputs/ logs/ sbatch/ envs/ configs/ checkpoints/ manifests/ tmp/) under your /storage workspace. |
| ris_upload_fileA | Write a text file into a safe project subdirectory (src/ data/ configs/ sbatch/ envs/ manifests/). Refuses overwrite unless overwrite=true. Binary content is not supported. |
| ris_list_project_filesB | List files in a project (or a subdir) with depth and entry caps. |
| ris_get_result_manifestC | Read a run's manifest JSON from project/manifests, or list available manifests. Cross-references local run history. |
| ris_plan_runB | Turn an intent into a safe, validated resource plan (CPU vs GPU, partition, cpus/mem/gpus/walltime, smoke-test recommendation) in plain English. Does NOT submit. |
| ris_researcher_wizardA | For non-HPC users: from a plain-English goal and a few optional hints, infer a safe plan and the exact next ris_submit_* call. Does NOT submit. |
| ris_runA | One call: ensures your project + environment exist (auto-builds a PyTorch/TF env if missing) and submits your script — GPU or CPU. No manual conda steps. dryRun preview by default; re-call with dryRun=false, confirm=true to run. |
| ris_submit_python_jobC | Run a project .py file as a batch job (CPU, or GPU if gpuCount>0). dryRun preview by default. |
| ris_submit_r_jobC | Run a project .R file via Rscript as a CPU batch job. |
| ris_submit_notebook_jobC | Execute a project .ipynb headlessly (nbconvert) as a batch job. |
| ris_submit_gpu_smoke_testA | Submit a tiny GPU validation job (nvidia-smi + torch CUDA check). Uses a MIG slice on general-short by default, or a full H100 on general-gpu if fullH100=true. |
| ris_submit_array_jobC | Run a project script across a bounded Slurm array (the script reads $SLURM_ARRAY_TASK_ID). Total tasks capped at 10000. |
| ris_submit_multigpu_torch_jobC | Single-node multi-GPU PyTorch training via torchrun (typed H100 by default). |
| ris_submit_jupyter_jobB | Launch JupyterLab on a compute node and return the SSH tunnel instructions. Never opens a tunnel itself. |
| ris_submit_vllm_jobB | Serve a model with vLLM (OpenAI-compatible API) on a full-H100 node and return tunnel instructions. |
| ris_submit_conda_env_jobC | Build/update a conda environment under the project's envs/ as a CPU job (never uses /home or a GPU). |
| ris_cancel_jobA | Cancel one of YOUR jobs (ownership verified first). Requires confirm=true. jobId optional only when a project scope is given (cancels the latest in that project). |
| ris_hold_jobA | Hold one of YOUR pending jobs (ownership verified). Requires confirm=true. jobId optional only with a project scope. |
| ris_release_jobA | Release one of YOUR held jobs (ownership verified). Requires confirm=true. jobId optional only with a project scope. |
| ris_list_my_jobsA | Show your current Slurm queue (running/pending), optionally filtered by state or project. |
| ris_job_historyA | Recent finished jobs via sacct, merged with local run history. |
| ris_explain_jobA | Plain-English why-pending / why-failed for a job: state + reason + efficiency (seff) + a log tail, with a practical fix. jobId optional — defaults to your most recent job (or the latest in a given project). |
| ris_get_job_logsB | Fetch a job's stdout/stderr (byte-capped, restricted to its log files). jobId optional — defaults to your most recent job. |
| ris_tail_job_logsB | Last N lines of a job's logs plus its current state. jobId optional — defaults to your most recent job. |
| ris_ensure_envA | Make sure a conda environment exists for a project, building it automatically (PyTorch on the CUDA-12.4 wheels by default) if missing — zero manual steps. dryRun preview by default; confirm to build. |
| ris_list_modulesC | List available Lmod modules on RIS (optionally filtered). |
| ris_list_conda_envsA | List conda environments visible on RIS (base + project-local). |
| ris_inspect_conda_envB | List packages in a named or path-based conda env. |
| ris_generate_sbatch_templateA | Render a ready-to-edit sbatch script for any job type. Generate only — never submits. |
| ris_estimate_resourcesC | Suggest cpus/mem/gpus/walltime/partition from a description (heuristic, offline). |
| ris_analyze_efficiencyA | Use seff/sacct to recommend right-sizing for a job or your recent runs. |
| ris_compare_runsB | Side-by-side comparison of 2+ jobs (resources, exit state, elapsed, efficiency). |
| ris_create_pipelineA | Submit a chain of Python jobs with --dependency=afterok between stages. dryRun preview by default; confirm to submit the chain. |
| ris_bootstrap_workerB | Set up the per-user worker: create the control-plane dirs under /.risbridge and submit a low-resource general-cpu daemon that submits/polls jobs for you (minimizes repeat Duo logins). dryRun preview by default. |
| ris_worker_enqueueB | Queue a Python job for the per-user worker to submit (so the agent need not stay connected). Builds and validates the sbatch script, then appends a request to the worker queue. |
| ris_worker_statusC | Read the status of a worker-queued run by its id. |
| ris_worker_cancelB | Ask the worker to cancel a queued/submitted run (appends a cancel request). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 53 tools
The set has many well-described but overlapping tool clusters: ris_run wraps ris_submit_python_job; planning is split across ris_plan_run, ris_researcher_wizard, ris_estimate_resources, and ris_generate_sbatch_template; environment building appears in both ris_ensure_env and ris_submit_conda_env_job; job diagnostics overlap among ris_explain_job, ris_analyze_efficiency, and ris_compare_runs. Detailed descriptions help, but an agent must still disambiguate among similar submission, planning, and worker tools.
All tools use a consistent ris_ prefix and lower_snake_case, with a strong verb_noun pattern for most names such as ris_submit_python_job, ris_cancel_job, and ris_list_my_jobs. A few deviate into noun phrases or bare verbs (ris_run, ris_job_history, ris_gpu_status), but the overall convention is predictable.
53 tools is an extreme mismatch for a single MCP server, exceeding the 50+ anchor and the 25+ 'too many' threshold. Even for a broad HPC workflow, the surface is bloated with wrapper, variant, setup, and worker-specific tools that could be consolidated.
The server covers a remarkably complete HPC lifecycle: SSH/auth setup, profile discovery, partition/GPU inspection, project and file management, job planning, many job submission types, job control, logs, environment management, efficiency analysis, pipelines, and worker-based execution. No obvious core operation is missing for the stated RIS/Slurm domain.