io.github.xpluspro/awaitless is an MCP server that durable MCP Tasks on infrastructure you already own — local, SSH, and Slurm. Its tool list has not been published yet over stdio, sse and http, requires no API key, and scores 59/100 on MCPpedia's security, maintenance and efficiency rubric.
Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"awaitless": {
"args": [
"awaitless-runner"
],
"command": "uvx"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
Submit long-running work once. Awaitless handles queues, scarce resources, disconnects, and results across local, SSH, and Slurm. Your workload stays on infrastructure you already own.
Run this in your terminal to verify the server starts. Then let us know if it worked — your result helps other developers.
uvx 'awaitless-runner' 2>&1 | head -1 && echo "✓ Server started successfully"
After testing, let us know if it worked:
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
Checked awaitless-runner against OSV.dev.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in devops
MCP server for using the GitLab API
MCP server for Komodo - manage Docker containers, servers, stacks, and deployments via AI
💫 Tachyon MCP Runtime for Java and Kotlin - Model Context Protocol (MCP) server with Streamable HTTP, native Netty transports, tools, tasks, resources, prompts, completions, resumable sessions, and stateless deployment support.
Deploy and manage blockchain nodes across 70+ protocols, search docs, request testnet funds.
MCP Security Weekly
Get CVE alerts and security updates for io.github.xpluspro/awaitless and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
Adaptive durable execution for coding agents.
Run commands through one execution layer. Quick work returns inline; longer or queued work becomes durable across local, SSH, and Slurm. Your workload stays on infrastructure you already own.
Agents submit work. Awaitless owns execution.
Awaitless is the adaptive durable execution layer between coding agents and the compute they use. It gives agents one stable job contract while reusing your local machine, SSH hosts, and Slurm clusters underneath.
简体中文 · Documentation · Benchmarks · PyPI
Coding agent → submit work → Awaitless owns the job lifecycle → Local / SSH / Slurm
| Durable jobs | Named scarce-resource queues | Completion and recovery |
|---|---|---|
| Stable IDs, state, cancellation, bounded logs, and Artifacts survive client disconnects. | Durable FIFO admission prevents too many jobs from entering a named resource at once. | Exit codes and results remain available by Job ID or replayable completion cursor. |
Awaitless owns the job lifecycle, not the hardware. It does not discover
resources, understand GPU topology, allocate multiple resources, or replace a
cluster scheduler. Operators name queues and set fixed concurrency; Slurm
continues to handle requests such as --gpus 2 --mem 64G and all physical
cluster scheduling.

An agent can write its own run → sleep → check loop. The harder problem is
making job identity, disconnect recovery, queue admission, cancellation, and
result delivery reliable across long workloads and changing sessions. Without
that execution layer, the agent repeatedly pulls the same growing log back into
its context:
ssh gpu 'run_benchmark > job.log 2>&1 &'
ssh gpu 'tail -n 200 job.log' # again...
ssh gpu 'tail -n 200 job.log' # and again...
Awaitless turns that lifecycle into one adaptive execution call and one result boundary:
awaitless run --json --host gpu --artifact results.json -- ./run_benchmark
# quick: {"state":"succeeded","delivery":"inline","exit_code":0,...}
# longer: {"job_id":"job_019F...","state":"running","delivery":"detached",...}
awaitless wait job_019F... --json
# {"state":"succeeded","exit_code":0,"parsed_results":{...}}
Detached JSON also includes job_state, wait_state, delivery_state, and a
ready-to-copy next_command. A client-side wait timeout is not a workload
failure: use awaitless wait --last --json for the most recently detached Job,
or use the returned command with its stable Job ID. To inspect benchmark lines
without reading a large tail, use awaitless logs <job-id> --grep 'PASS|FAIL|median|CV'.
Every run is durable before launch. Finishing within the inline window looks
like an ordinary command result; crossing it only detaches the waiter. Interrupt
the waiter, close the MCP client, or start a fresh agent session: the Job keeps
running and its stable ID recovers the result.
Create a durable FIFO queue once, then submit every command immediately:
awaitless queue create gpu0 --concurrency 1
awaitless submit --queue gpu0 -- python train_a.py
awaitless submit --queue gpu0 -- python train_b.py
awaitless submit -
... [View full README on GitHub](https://github.com/xpluspro/awaitless#readme)