{
  "markdown": "<!-- mcp-name: io.github.RohitYajee8076/backburner -->\n\n<div align=\"center\">\n\n<img src=\"docs/banner.png\" alt=\"backburner — background tasks for AI agents\" />\n\n<br/>\n<br/>\n\n**Put your AI agent's slow work on the back burner. Keep cooking.**\n\nBackground tasks for AI agents that **outlive the conversation** — start a long\njob, close the client, and the result is still waiting when you come back.\n\n<b>Durable &amp; Restart-Proof&nbsp; ◦ &nbsp;Zero Infrastructure&nbsp; ◦ &nbsp;MCP Tasks (2026-07-28)&nbsp; ◦ &nbsp;Windows &amp; Unix</b>\n\n<br/>\n\n📦 [PyPI](https://pypi.org/project/backburner-mcp/)&nbsp; • &nbsp;🗂️ [MCP Registry](https://registry.modelcontextprotocol.io/v0/servers?search=backburner)&nbsp; • &nbsp;🐛 [Issues](https://github.com/RohitYajee8076/backburner/issues)&nbsp; • &nbsp;📄 [MIT](LICENSE)\n\n</div>\n\n---\n\n## 📢 Updates\n\n- **v1.0** — implements the official MCP **Tasks** extension\n  ([SEP-2663](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2663),\n  `io.modelcontextprotocol/tasks`). A Tasks-capable client can turn a\n  `start_task` call into a durable task and drive it with `tasks/get`,\n  `tasks/update`, and `tasks/cancel` — the standard async-job protocol — while\n  the five plain tools keep working for every other client. Built against the\n  **2026-07-28** spec (`mcp` 2.0).\n- **v0.2.1** — output with non-ASCII characters (✓, emoji, any non-English text) no\n  longer crashes tasks on Windows.\n- **v0.2.0** — `exit_code` is no longer reported for cancelled/timed-out tasks\n  (it was an artifact of the kill, not a real result); new animated demo below.\n- **v0.1.x** — first release: 5 tools, task timeouts, command allow/deny policy.\n  Listed on the official MCP Registry as `io.github.RohitYajee8076/backburner`.\n\n---\n\n`backburner` is an MCP server that gives any AI assistant — Claude, ChatGPT,\nGemini, GitHub Copilot, Cursor, and any other MCP client — the ability to run\nlong shell commands as **background tasks** — start a test suite, a build, a\nscrape, a batch job — then keep working and check back for the results, instead\nof sitting frozen until it finishes.\n\n![backburner demo](docs/demo.gif)\n\n## 🔥 Why not just use my client's built-in background mode?\n\nBecause that lives **inside the conversation** — it disappears the moment the\nsession ends. Close the chat, restart the client, reboot the laptop, and any\nin-session background work (and its output) is gone.\n\n`backburner` keeps every task and its full output **on disk** (SQLite +\nper-task log files under `~/.backburner/`), so your work outlives the session\nthat started it:\n\n- **Start now, collect later — even in a different chat.** A task you launch\n  today is still listed, with its result, in a brand-new session tomorrow.\n- **Restart-proof.** State survives the server, the client, and the machine\n  restarting. Finished tasks keep their output; a task cut off by a crash is\n  honestly marked `interrupted`, never silently dropped.\n- **No waiting, no blocking.** A 10-minute tool call no longer freezes the\n  conversation or times out and loses the work.\n\nSee it for yourself — a real two-process proof (no mock-ups):\n\n```bash\npython docs/demo_restart.py\n```\n\nIt starts a job in one process, exits, then a **separate** process — which\nnever saw the task id — finds the finished work waiting on disk.\n\nBuilt on the MCP **Tasks** pattern, formalized in the 2026-07-28 spec release\n([SEP-2663](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2663)):\n`backburner` speaks it natively (`tasks/get` / `tasks/update` / `tasks/cancel`)\n**and** exposes the same engine as plain tools, so it works with every client\ntoday.\n\n## 🧰 Tools\n\n| Tool | What it does |\n|------|--------------|\n| `start_task(command, cwd?, timeout_seconds?)` | Run a shell command in the background, returns a task id immediately |\n| `task_status(task_id)` | `working` / `completed` / `failed` / `cancelled` / `timed_out` / `interrupted` |\n| `task_result(task_id, tail_lines?)` | Captured output — works mid-run too, so you can peek at progress |\n| `cancel_task(task_id)` | Kill the task and its whole process tree |\n| `list_tasks(limit?)` | Recent tasks, newest first |\n\n## ✨ Features\n\n- **Survives restarts** — tasks are tracked in SQLite under `~/.backburner/`;\n  output is captured to per-task log files. If the server dies mid-task,\n  orphaned tasks are honestly marked `interrupted`, never silently lost.\n- **Real cancellation** — kills the full process tree (worker processes\n  included), on Windows and Unix.\n- **Peek at live progress** — `task_result` on a running task returns the\n  output so far.\n- **Timeouts** — pass `timeout_seconds` and a runaway task is killed and\n  honestly marked `timed_out` instead of hanging forever.\n- **Command policy** — restrict what the AI may run with environment\n  variables (regexes, comma-separated; deny always wins):\n\n  ```bash\n  BACKBURNER_ALLOW=\"^pytest,^npm (test|run build)\"   # only these may run\n  BACKBURNER_DENY=\"rm -rf,shutdown,format\"           # these never run\n  ```\n- **Zero infrastructure** — stdlib only (SQLite, subprocess, threads).\n  No Redis, no Celery, no Docker.\n- **Tested** — a pytest suite covers the full job lifecycle: completion,\n  failure, cancellation, timeouts, crash recovery, and the command policy.\n\n## 🚀 Install\n\n`backburner` is a standard stdio MCP server — it works with **any MCP-compatible\nclient**, including:\n\nClaude Code · Claude Desktop · OpenAI (ChatGPT desktop / Agents SDK) ·\nGoogle Gemini (Gemini CLI) · GitHub Copilot (VS Code) · Cursor · Windsurf ·\nCline · Zed — and any other client that speaks MCP.\n\nFirst install the package:\n\n```bash\npip install backburner-mcp\n```\n\n### Claude Code\n\n```bash\nclaude mcp add backburner -- python -m backburner.server\n```\n\n### Everything else (Claude Desktop, Cursor, VS Code / Copilot, Windsurf, Gemini CLI, …)\n\nMost clients use the same standard config block — add `backburner` to your\nclient's MCP config (see your client's docs for where that file lives):\n\n```json\n{\n  \"mcpServers\": {\n    \"backburner\": {\n      \"command\": \"python\",\n      \"args\": [\"-m\", \"backburner.server\"]\n    }\n  }\n}\n```\n\n## 🔒 Security note\n\n`backburner` executes the shell commands the AI sends it, with your user's\npermissions. That is its job — but treat it like giving your agent a\nterminal. Run it only with clients whose tool-use you review/approve,\nprefer permission modes that require confirmation for `start_task`, and\nuse `BACKBURNER_ALLOW` / `BACKBURNER_DENY` to scope what may run.\n\n## 🗺️ Roadmap\n\n- [x] Task timeouts and max-runtime limits\n- [x] Allowlist/denylist for commands\n- [x] PyPI release — `pip install backburner-mcp`\n- [x] Listed on the official MCP Registry\n- [x] MCP Tasks extension (spec 2026-07-28, SEP-2663) — native `tasks/get` /\n      `tasks/update` / `tasks/cancel` alongside the plain tools\n- [ ] Task push updates (`notifications/tasks`) — live status without polling\n- [ ] Local web dashboard — watch tasks live in the browser\n- [ ] Structured progress reporting (parse % / step markers from output)\n\n## 📄 License\n\nMIT\n",
  "bytes": 7063,
  "sha": "c2d7a6c0f9a543e0924a83ecbd2e08fe31c19e2c50b77b6162f780fd949de5c4",
  "repo_slug": "rohityajee8076/backburner",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_rohityajee8076_backburner_2d8aeecb/readme"
}