Disposable Firecracker microVM sandboxes for agents: run code, snapshot, fork. Needs Linux with KVM.
Runs on your machine from its package; the steps are below.

At most: moves money, runs code or commands, deletes data, or sends messages for you.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx fcvm-mcp
MCP client config
{
"mcpServers": {
"fcvm": {
"command": "uvx",
"args": [
"fcvm-mcp"
]
}
}
}fcvm runs workloads in Firecracker
microVMs, each with its own kernel, with the convenience of a container tool:
images, layers, volumes, published ports, exec, snapshots and fork. It is
self-hosted, starts VMs without root, and puts a real virtual-machine
boundary around code you don't trust. On top of that come optional jailing,
network isolation and egress allowlists. Drive it from the command line, a
browser console, an HTTP API, or your coding agent over MCP.
fcvm import python:3.13-slim
fcvm run python-3.13-slim --allow @pypi -- pip install requests # a throwaway VM that can reach only PyPI
Containers are convenient but share the host's kernel. Full VMs isolate properly but are slow to start and clumsy to manage. fcvm gives you both: Docker-style workflows, where every workload boots its own kernel in about half a second behind hardware virtualization.
It's built for:
What it isn't: a cluster orchestrator, a macOS or Windows tool (it needs Linux with KVM), or a way to run desktop GUIs.
Any image. Run OCI images from any registry, a local docker save,
or your own Dockerfile. Or use full-OS system images that boot systemd,
with Ubuntu 26.04 included.
Container ergonomics. run, exec, cp, logs, published ports,
named volumes, live host directories, commit to layered images, restart
policies, and templates: saved launch recipes such as "Python sandbox,
PyPI only, 2 GB".
Speed. A new VM takes 0.1 s to create and about 0.5 s to boot. A fork from a snapshot takes about 150 ms.
Isolation.
A web console. A cloud-console-like GUI for your host:
Anything you can do from the CLI, you can do from the browser.
Other ways in. The CLI, an HTTP API for scripts with Python and Node clients, an MCP server for agents, and a Prometheus endpoint.
Stays up. A boot-time service brings VMs back after crashes and reboots.
Small and auditable. Bash and standard-library Python, a small static init in C, and a guest kernel you build yourself from kernel.org sources.

/dev/kvm). It's developed on Ubuntu 26.04, and
host-setup uses apt, so Debian and Ubuntu hosts are the easy path.curl -fsSL https://raw.githubusercontent.com/carlosbravoa/fcvm/main/install.sh | sh
fcvm setup
The installer puts the latest release in ~/.local/lib/fcvm, and the
fcvm command in ~/.local/bin. It needs no root. Add --system (as
sh -s -- --system) to install for all users under /opt/fcvm.
~/.local/share/fcvm and
~/.config/fcvm, not in the install.fcvm upgrade moves to a newer release later.fcvm version shows what you run and where.fcvm setup is a guided, interactive setup that takes about four minutes
on a fresh machine:
It's safe to re-run, and -y accepts the defaults. Then:
fcvm run alpine-latest # a shell in a throwaway VM (setup imported alpine); `exit` deletes it
fcvm import python:3.13-slim # any OCI image; becomes the fcvm image "python-3.13-slim"
To run fcvm straight from a clone (for development), use ./fcvm, or link
it onto your PATH:
git clone https://github.com/carlosbravoa/fcvm ~/src/fcvm && cd ~/src/fcvm
ln -s "$PWD/fcvm" ~/.local/bin/fcvm && fcvm setup
The steps setup runs, by hand:
fcvm host-setup # packages and /dev/kvm access (sudo, once)
fcvm net-up # bridges, taps, NAT and isolation rules (sudo; `service install` makes it permanent)
fcvm firecracker # download Firecracker into bin/
fcvm kernel # build the guest kernel from kernel.org (a few minutes, once)
fcvm import alpine:latest # a first image
Then pick how you want to drive it:
| Browser console: instances, images, launch forms, live charts, terminals, files | fcvm serve, then open the printed URL |
| Your coding agent: sandboxes as MCP tools (Claude Code shown; any MCP client works) | claude mcp add fcvm -- "$(command -v fcvm)" mcp |
| Keep it running: network and console at boot; VMs with a restart policy come back | fcvm service install (offered by setup) |
| Stronger isolation: run VMs under the Firecracker jailer | fcvm jail-setup (offered by setup), then --jail |
A few everyday commands:
fcvm run nginx-latest -d -p 8080:80 # after `fcvm import nginx:latest`; curl localhost:8080
fcvm create box python-3.13-slim --idle # a VM that stays up for exec (add --jail after jail-setup)
fcvm start box && fcvm exec box python -V
fcvm cp ./project box:/work && fcvm shell box
fcvm snapshot box ready && fcvm fork ready -n 3 # three running copies of box, as it is now
fcvm status # health check: versions, updates, services, VMs
Start with Getting started and Use cases. Then go as deep as you need:
| Using fcvm | Images · Running VMs · Networking and egress · Templates · Project files · Snapshots and fork · The fcvm service · Web console · Agents (MCP) |
| Reference | Commands · Configuration · HTTP API · Changelog |
| In depth | How it works · Security and isolation · Roadmap |
The documentation index describes each page. CONTRIBUTING covers working on fcvm and running its tests.
Workloads
@sha256: pinningdocker save / podman save tarballs, OCI layouts and archivesfcvm export (an OCI archive for docker load or another host) and fcvm push to a registryDay-to-day
run (throwaway), create/start/stop, exec (TTY or pipes, timeouts, -u, -w, -e, -d for background jobs), shell, cpcommit to new layers, squashpublish/unpublish)snapshot export/import move them between hostsno, on-failure, unless-stopped, always), recovery after crashes and reboots--ttl 2h and --idle-stop 30m end forgotten sandboxes on their own--secret API_KEY): into a tmpfs and the environment at boot, never onto the VM's disk--forward ssh-agent,git): the VM uses your keys and logins through the host, without holding themfcvm balloon VM 512): take memory back from idle VMs without a restartfcvm ssh-config --install: ssh fcvm-dev, scp, rsync and VS Code Remote-SSH into system VMsfcvm.toml in a repository, fcvm up / fcvm down--json, inspect)--system), fcvm upgrade with rollback, versioned releasesfcvm setup) and a health check (fcvm status) that says what to update and howIsolation and control
@pypi, @npm, @github, ...), changeable live, every request logged--cache): the first sandbox downloads, the next ones get it from the hostInterfaces
Not (yet): multi-host orchestration, remote multi-user access, IPv6 guests, disk and network rate limits, aarch64. See the roadmap.
fcvm is licensed under the Apache License 2.0. It downloads Firecracker (Apache 2.0) and builds the Linux kernel (GPL-2.0) on your machine, but doesn't redistribute either. The vendored xterm.js is MIT licensed (NOTICE).