boxes-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| boxes.listA | List all libvirt domains (VMs) managed by GNOME Boxes/libvirt |
| boxes.infoB | Get detailed domain info |
| boxes.startC | Start a domain (VM) |
| boxes.shutdownA | Shutdown/Power off a domain (graceful by default) |
| boxes.rebootB | Reboot a running domain |
| boxes.suspendC | Suspend a running domain |
| boxes.resumeC | Resume a suspended domain |
| boxes.undefineA | Undefine a domain (remove from libvirt). Storage is NOT deleted. |
| boxes.snapshots.listA | List snapshots for a domain |
| boxes.snapshots.createB | Create a snapshot for a domain |
| boxes.snapshots.revertB | Revert a domain to a snapshot |
| boxes.snapshots.deleteB | Delete a snapshot |
| boxes.displayA | Get SPICE/VNC display address for VM (useful to open viewer) |
| boxes.capabilitiesC | Report observed display and interaction capability state for a running VM |
| boxes.screenshotC | Capture a running VM display screenshot as MCP image content |
| boxes.keyboardA | Send a bounded allowlisted key sequence to a running VM |
| boxes.mouseC | Send a typed mouse action through SPICE or QMP |
| boxes.clipboardC | Read or write UTF-8 text through the SPICE guest agent clipboard |
| boxes.drag_dropC | Experimental SPICE file transfer and mouse drag-and-drop operation |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 19 tools
Most tools map cleanly to a distinct resource+action (e.g., snapshots.list, snapshots.revert). The only potential confusion is `boxes.capabilities`, which could overlap with `boxes.info` (state info) and `boxes.display` (screen state) for an agent. The input/interaction tools (keyboard, mouse, clipboard, screenshot) are clearly separated by modality.
Top-level lifecycle tools use consistent single verbs (start, shutdown, reboot, suspend, resume, undefine), but interaction tools shift to bare nouns (keyboard, mouse, clipboard, screenshot, capabilities). Snapshot nesting is consistent and clear. Mixing namespace prefixes (boxes.* and boxes.snapshots.*) with singular noun tools creates minor inconsistency in expected verb-phrase form.
19 tools is slightly above the typical sweet spot but justified given the breadth: 5 lifecycle, 4 snapshot, 2 info, and 8 interaction/display tools. The interaction sub-surface is granular (keyboard, mouse, clipboard, drag_drop, capabilities) and could be consolidated, but each maps to a real distinct operation. It never feels bloated enough to warrant a 3.
Lifecycle operations are well-covered for read/start/stop, snapshots have full CRUD with revert, and interaction features (screenshot, input, clipboard) are thorough. Missing pieces include VM creation/clone, device/storage management, and define/undefine pairing is lopsided (only undefine). Snapshot and interaction workflows feel complete for the stated GNOME Boxes/libvirt scope.