Skip to main content
Glama
io.github.RohitYajee8076/backburner

io.github.RohitYajee8076/backburner

Put your AI agent's slow work on the back burner. Keep cooking.

Background tasks for AI agents that outlive the conversation β€” start a long job, close the client, and the result is still waiting when you come back.

Durable & Restart-Proof  β—¦  Zero Infrastructure  β—¦  MCP Tasks (2026-07-28)  β—¦  Windows & Unix

πŸ“¦ PyPI  β€’  πŸ—‚️ MCP Registry  β€’  πŸ› Issues  β€’  πŸ“„ MIT


πŸ“’ Updates

  • v1.0 β€” implements the official MCP Tasks extension (SEP-2663, io.modelcontextprotocol/tasks). A Tasks-capable client can turn a start_task call into a durable task and drive it with tasks/get, tasks/update, and tasks/cancel β€” the standard async-job protocol β€” while the five plain tools keep working for every other client. Built against the 2026-07-28 spec (mcp 2.0).

  • v0.2.1 β€” output with non-ASCII characters (βœ“, emoji, any non-English text) no longer crashes tasks on Windows.

  • v0.2.0 β€” exit_code is no longer reported for cancelled/timed-out tasks (it was an artifact of the kill, not a real result); new animated demo below.

  • v0.1.x β€” first release: 5 tools, task timeouts, command allow/deny policy. Listed on the official MCP Registry as io.github.RohitYajee8076/backburner.


backburner is an MCP server that gives any AI assistant β€” Claude, ChatGPT, Gemini, GitHub Copilot, Cursor, and any other MCP client β€” the ability to run long shell commands as background tasks β€” start a test suite, a build, a scrape, a batch job β€” then keep working and check back for the results, instead of sitting frozen until it finishes.

backburner demo

Related MCP server: Background Process MCP

πŸ”₯ Why not just use my client's built-in background mode?

Because that lives inside the conversation β€” it disappears the moment the session ends. Close the chat, restart the client, reboot the laptop, and any in-session background work (and its output) is gone.

backburner keeps every task and its full output on disk (SQLite + per-task log files under ~/.backburner/), so your work outlives the session that started it:

  • Start now, collect later β€” even in a different chat. A task you launch today is still listed, with its result, in a brand-new session tomorrow.

  • Restart-proof. State survives the server, the client, and the machine restarting. Finished tasks keep their output; a task cut off by a crash is honestly marked interrupted, never silently dropped.

  • No waiting, no blocking. A 10-minute tool call no longer freezes the conversation or times out and loses the work.

See it for yourself β€” a real two-process proof (no mock-ups):

python docs/demo_restart.py

It starts a job in one process, exits, then a separate process β€” which never saw the task id β€” finds the finished work waiting on disk.

Built on the MCP Tasks pattern, formalized in the 2026-07-28 spec release (SEP-2663): backburner speaks it natively (tasks/get / tasks/update / tasks/cancel) and exposes the same engine as plain tools, so it works with every client today.

🧰 Tools

Tool

What it does

start_task(command, cwd?, timeout_seconds?)

Run a shell command in the background, returns a task id immediately

task_status(task_id)

working / completed / failed / cancelled / timed_out / interrupted

task_result(task_id, tail_lines?)

Captured output β€” works mid-run too, so you can peek at progress

cancel_task(task_id)

Kill the task and its whole process tree

list_tasks(limit?)

Recent tasks, newest first

✨ Features

  • Survives restarts β€” tasks are tracked in SQLite under ~/.backburner/; output is captured to per-task log files. If the server dies mid-task, orphaned tasks are honestly marked interrupted, never silently lost.

  • Real cancellation β€” kills the full process tree (worker processes included), on Windows and Unix.

  • Peek at live progress β€” task_result on a running task returns the output so far.

  • Timeouts β€” pass timeout_seconds and a runaway task is killed and honestly marked timed_out instead of hanging forever.

  • Command policy β€” restrict what the AI may run with environment variables (regexes, comma-separated; deny always wins):

    BACKBURNER_ALLOW="^pytest,^npm (test|run build)"   # only these may run
    BACKBURNER_DENY="rm -rf,shutdown,format"           # these never run
  • Zero infrastructure β€” stdlib only (SQLite, subprocess, threads). No Redis, no Celery, no Docker.

  • Tested β€” a pytest suite covers the full job lifecycle: completion, failure, cancellation, timeouts, crash recovery, and the command policy.

πŸš€ Install

backburner is a standard stdio MCP server β€” it works with any MCP-compatible client, including:

Claude Code Β· Claude Desktop Β· OpenAI (ChatGPT desktop / Agents SDK) Β· Google Gemini (Gemini CLI) Β· GitHub Copilot (VS Code) Β· Cursor Β· Windsurf Β· Cline Β· Zed β€” and any other client that speaks MCP.

First install the package:

pip install backburner-mcp

Claude Code

claude mcp add backburner -- python -m backburner.server

Everything else (Claude Desktop, Cursor, VS Code / Copilot, Windsurf, Gemini CLI, …)

Most clients use the same standard config block β€” add backburner to your client's MCP config (see your client's docs for where that file lives):

{
  "mcpServers": {
    "backburner": {
      "command": "python",
      "args": ["-m", "backburner.server"]
    }
  }
}

πŸ”’ Security note

backburner executes the shell commands the AI sends it, with your user's permissions. That is its job β€” but treat it like giving your agent a terminal. Run it only with clients whose tool-use you review/approve, prefer permission modes that require confirmation for start_task, and use BACKBURNER_ALLOW / BACKBURNER_DENY to scope what may run.

πŸ—ΊοΈ Roadmap

  • Task timeouts and max-runtime limits

  • Allowlist/denylist for commands

  • PyPI release β€” pip install backburner-mcp

  • Listed on the official MCP Registry

  • MCP Tasks extension (spec 2026-07-28, SEP-2663) β€” native tasks/get / tasks/update / tasks/cancel alongside the plain tools

  • Task push updates (notifications/tasks) β€” live status without polling

  • Local web dashboard β€” watch tasks live in the browser

  • Structured progress reporting (parse % / step markers from output)

πŸ“„ License

MIT

Available Tools

5 tools
cancel_taskA

Cancel a running task, killing its whole process tree.

Inputs: task_id (required).

list_tasksB

List recent tasks, newest first.

Inputs: limit. Returns: result

start_taskA

Start a shell command as a background task and return immediately.

Args: command: The shell command to run (e.g. "pytest -q" or "npm run build"). cwd: Working directory for the command. Defaults to the server's cwd. timeout_seconds: If set, the task is killed and marked 'timed_out' when it runs longer than this. Recommended for unattended jobs.

Returns the new task's id and initial status. The command keeps running after this call returns β€” use task_status / task_result to follow it.

Inputs: command (required), cwd, timeout_seconds.

task_resultA

Get a task's captured output (stdout+stderr merged).

Args: task_id: The task to inspect. Works for finished AND still-running tasks, so you can peek at live progress. tail_lines: How many trailing lines of output to return.

Inputs: task_id (required), tail_lines.

task_statusC

Check on a task: working, completed, failed, cancelled, timed_out, or interrupted.

Inputs: task_id (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 5 tools

    Disambiguation5/5

    Each tool targets a distinct lifecycle stage: start_task initiates, task_status reports state, task_result retrieves output, cancel_task terminates, and list_tasks enumerates. No two tools overlap in purpose.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern in snake_case: start_task, task_status, task_result, cancel_task, list_tasks. There are no deviations or mixed conventions.

    Tool Count5/5

    Five tools is a perfect scope for a background task manager: create, monitor, retrieve output, cancel, and list. Each tool has a clear role, and no redundant or missing entries.

    Completeness5/5

    The tool set covers the full lifecycle of a background task: start, poll status, fetch output, cancel, and list. The timeout behavior in start_task also handles timed-out tasks. No obvious gaps.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers