Purgatory (p7y)

io.github.csakaszamokPublished by GitHub account csakaszamokv0.11.12Updated Oct 25, 2026

Self-hosted Docker sandboxes for agents: create one, deploy a compose stack, read its files and URLs

VerifiedStreamable HTTPWeb executableCloud & InfrastructureDeveloper Tools

Overview

AI-generated overview

MCP access to a self-hosted Purgatory (p7y) server, letting an assistant create Docker sandboxes, deploy compose stacks and read their files and URLs.

What you can do
  • Create and manage sandboxes, each with its own Docker daemon
  • Deploy a docker compose stack into a sandbox
  • Read a sandbox's files and the public URLs of its apps
  • Call the same operations by hand over JSON-RPC, as the API does
When to use it
For teams running their own Purgatory server who want an agent to spin up per-project sandboxes and deploy apps to a URL without touching a web UI. Suited to internal apps and agent deployments, not to production that must scale or to untrusted code from strangers.
Requirements
A reachable self-hosted Purgatory instance (remote streamable HTTP endpoint at the configured host) and a Purgatory access token sent as an Authorization bearer header. A token limited to one sandbox only exposes that sandbox's tools. The server itself needs Docker Engine, the compose plugin and sysbox on a Linux host.
Before you install
The bearer token is a credential: scope it to a single sandbox where possible. The server creates and deploys containers and can read sandbox files, so it changes state on your host. Sandboxes are not a microVM boundary; the README says untrusted code from strangers needs a different sandbox. The project is pre-1.0 with breaking changes between minor versions.

Installation

In SourceWeft

  1. Open Purgatory (p7y) in the dashboard and add it to a workspace.
  2. Connect Authorization token credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Other MCP clients

Follow the launch instructions in the repository.

README

[Image] Purgatorium (p9m)

[Docs] [CI] [License]

[!NOTE] Early, before 1.0. It works and is tested (CI on every change, releases with a changelog), but expect rough edges, and breaking changes between minor versions.

Self-hosted sandboxes for your team and their AI agents: everyone gets their own Docker, every app gets a URL, idle sandboxes sleep.

Think of it as a self-hosted Vercel for the apps your team and its agents spin up. Today you deploy with docker compose; git-based builds are on the roadmap.

About 10 seconds from New sandbox to your own Docker and a public URL for your app; a sleeping sandbox is back in under 10. (Measured with the images already pulled: the first sandbox on a new server also downloads them.)

[Creating a sandbox and opening its app, in real time: about 10 seconds]

  • Its own Docker daemon for every sandbox (with a Portainer UI if you want one)
  • A public URL for every app, and TLS addresses for Postgres, Redis and SSH
  • Sleeps when idle, wakes on the next request; a delete archives, nothing is lost
  • Made for agents: tokens limited to one sandbox, an agent guide, an MCP server and a Claude Code plugin (/plugin marketplace add p9m-team/p9m, then /p9m:init <address> gets each project a sandbox: users need no web UI, only the admin has one)

Hide the complexity. Keep it simple. Focus on what matters.

Purgatorium abstracts away infrastructure complexity and operational overhead, providing an intuitive user experience that lets users focus on their work and business goals rather than managing the underlying technology.

Why Purgatorium, and how it compares with a laptop, a cloud PaaS, a shared Docker host, Coolify and a VM for everyone · How it works: the components (Docker-in-Docker, frp, Traefik, Sablier), a sandbox's lifecycle and the path of a request

The same from a script or an agent

All real runs, in real time; press one to watch it.

With curl through the API, by an agent over the MCP server, and the MCP server by hand (JSON-RPC over HTTP, so even curl can call its tools).

Try it on your laptop

With Docker Desktop, or Docker Engine and the compose plugin on Linux, and ports 80 and 443 free (on Windows, in Git Bash or WSL):

bash
mkdir p9m && cd p9mcurl -fsSLO https://github.com/csakaszamok/p9m/releases/latest/download/docker-compose.ymlcurl -fsSL https://github.com/csakaszamok/p9m/releases/latest/download/setup.sh | bash   # prints the admin passworddocker compose up -d

Open http://p9m.lvh.me (lvh.me and all its subdomains point to 127.0.0.1, so no DNS to set up), sign in as administrator with the password setup.sh printed, and press New sandbox. The first one takes a minute or two while the images are pulled; after that about 10 seconds. Its app opens at its own http://<name>-….lvh.me address.

An app takes seconds to open the first time? In Chrome, Settings → Privacy and security → Security → Use secure DNS: with "your current service provider" each new *.lvh.me name can wait for a slow or filtering resolver. Turn it off, or pick a provider such as Cloudflare (1.1.1.1).

To remove it: delete the sandboxes in the UI first (each is a compose project of its own, so the next step would leave them running), then docker compose down -v in the p9m directory, and delete the directory.

Install

On a Linux host with Docker Engine, the compose plugin and sysbox, no clone needed. First check the host; it changes nothing:

bash
curl -fsSL https://github.com/csakaszamok/p9m/releases/latest/download/check-host.sh | bash -s -- dev.example.com

Then:

bash
mkdir p9m && cd p9mcurl -fsSLO https://github.com/csakaszamok/p9m/releases/latest/download/docker-compose.ymlcurl -fsSL https://github.com/csakaszamok/p9m/releases/latest/download/setup.sh | bash -s -- dev.example.com   # .env with your domain and random secretsdocker compose up -dcurl -fsSL https://github.com/csakaszamok/p9m/releases/latest/download/check-host.sh | bash   # again, in p9m: what is not secure yet

Then sign in at http://p9m.<HOST_DOMAIN> (by default http://p9m.lvh.me). Rather read the scripts before running them? Download them instead of piping them into bash: see Install.

When to use something else

Purgatorium is for a team's apps and agents' deployments that should be up at a URL, cheaply, on your own server. For other jobs other tools fit better:

  • Production that must scale and stay up → a cloud PaaS, or Coolify / Dokploy on your own servers
  • Untrusted code from strangers → a microVM sandbox such as E2B or Docker Sandboxes (until Purgatorium has a Kata runtime)
  • Writing code in a cloud IDE → Coder or GitHub Codespaces
  • An agent running short scripts from an SDK → E2B or Daytona

More in how it compares.

Documentation

csakaszamok.github.io/p9m: tutorials, install, configuration, let your agent deploy, MCP, API, and llms-full.txt for agents.

Security: sandboxes run under sysbox, without a privileged container; install it on the server. The privileged dind runtime is for development only (Docker Desktop, a laptop) and is not allowed unless ALLOWED_RUNTIMES says so. Web apps in a sandbox open only for its owner unless labelled otherwise (details).

Contributing · Security issues · AGPL-3.0

Free to use, also commercially, on your own servers or for your customers. Changed it and people use it over the network? Then they get your changed source too, under the same license (AGPL-3.0). Every product built on Purgatorium says so: Based on Purgatorium (p9m), in its About page and its docs, is marked as changed, and does not take the names "Purgatorium" or "p9m" (NOTICE). Versions up to 0.10.3 were released under Apache-2.0.

Source: README.md at commit 16ddae5

Tools

0
This server asks for a credential such as an API key, so SourceWeft could not read its tools without one and has not indexed them.

Version history

1
  1. v0.11.12LatestOct 25, 2026

Score

60% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declaredRequired10 pts
  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts