Skip to main content

mcqemu

An MCP server that lets LLM agents manage QEMU virtual machines: launch and stop VMs, inspect them over QMP, manage disk images with qemu-img, take live snapshots, and run commands inside guests through qemu-guest-agent.

Requirements

  • Linux with QEMU installed (qemu-system-* and qemu-img on PATH)
  • /dev/kvm access for hardware acceleration (optional — TCG emulation works without it, just slower)
  • Python 3.11+ managed with uv

Install

# From this checkout
uv sync

# Add to Claude Code
claude mcp add mcqemu -- uv run --directory /path/to/mcqemu mcqemu

What it can do

Group Tools
Lifecycle launch_vm, stop_vm, pause_vm, resume_vm, attach_vm, forget_vm
Sandboxes sandbox_vm (overlay + launch + wait-for-agent in one call), sandbox_destroy
Inspect list_vms, vm_info
Live snapshots vm_snapshot_create / restore / delete / list
See & drive vm_screenshot (PNG), vm_send_keys, vm_type_text, vm_click, vm_mouse_move (relative PS/2, for guests without tablet drivers), vm_serial_read
Disk images image_create, image_info, image_convert, image_resize, image_snapshot_*
Guest agent guest_ping, guest_info, guest_exec, guest_file_read, guest_file_write

VMs are daemonized QEMU processes with QMP control sockets, so they survive MCP server restarts. The registry lives in ~/.local/share/mcqemu/, sockets in $XDG_RUNTIME_DIR/mcqemu/.

Guest tools (guest_*) need qemu-guest-agent installed inside the guest OS; the host-side virtio-serial channel is wired on every launch, so installing the agent in the guest is the only step.

Port forwards accept "2222:22" (explicit, collision-checked up front), "auto:22", or just "22" — auto forms pick a free host port and the launch result reports what was chosen.

Quick start

Disposable sandbox from any base image with qemu-guest-agent inside:

sandbox_vm(base_image="~/vms/ubuntu-agent.qcow2")
# -> overlay created, VM booted, agent waited for, free port forwarded to 22
guest_exec(name="sandbox", command="uname", args=["-a"])
sandbox_destroy(name="sandbox")   # stops VM, deletes overlay; base untouched

Installing an OS from scratch:

image_create(path="~/vms/test.qcow2", size="10G")
launch_vm(name="test", disks=["~/vms/test.qcow2"], iso="~/isos/alpine.iso",
          port_forwards=["auto:22"])
# ... drive the installer with vm_screenshot / vm_type_text / vm_send_keys ...
stop_vm(name="test")
launch_vm(name="test", disks=["~/vms/test.qcow2"])
guest_exec(name="test", command="uname", args=["-a"])

Development

uv run pytest                  # unit tests (QMP and subprocess mocked)
uv run pytest -m integration   # acceptance: every tool group against real QEMU
uv run ruff check .

The acceptance suite boots real VMs. The guest-agent and snapshot journey needs a base image with qemu-guest-agent installed — it looks for ~/vms/ubuntu-agent.qcow2, overridable with MCQEMU_TEST_BASE_IMAGE, and skips cleanly when absent.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcqemu-2026.8.18.tar.gz (118.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcqemu-2026.8.18-py3-none-any.whl (46.7 kB view details)

Uploaded Python 3

File details

Details for the file mcqemu-2026.8.18.tar.gz.

File metadata

  • Download URL: mcqemu-2026.8.18.tar.gz
  • Upload date:
  • Size: 118.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"EndeavourOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for mcqemu-2026.8.18.tar.gz
Algorithm Hash digest
SHA256 e29cd4e39183d0227ea35db5e72505eb0b2bfb5cea6c1f35a26f794e17030682
MD5 4b48e4fc3babe1da893dd3caa8c77fa5
BLAKE2b-256 f5de34b235e5a77b582911f3539874fca34f88322ca91d1591aa71c169cb636d

See more details on using hashes here.

File details

Details for the file mcqemu-2026.8.18-py3-none-any.whl.

File metadata

  • Download URL: mcqemu-2026.8.18-py3-none-any.whl
  • Upload date:
  • Size: 46.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"EndeavourOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for mcqemu-2026.8.18-py3-none-any.whl
Algorithm Hash digest
SHA256 72fabe34675ac5a7a594ae8f102fc5449b4d561b91621690152ddce1323e393e
MD5 2ae44c6faf2cc442247e3adc72c86c29
BLAKE2b-256 d5bf9f2aee23dd4d1f45068dcd12c6970730fac9053712e650600ee8d5551f75

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

2026.8.18 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page