io.github.bryanjbelanger/desktop-hypervisor-mcp
VirtualBox and VMware Fusion/Workstation behind one provider-neutral MCP tool surface.
Open source Open in the app JSON README (API)
About
VirtualBox and VMware Fusion/Workstation behind one provider-neutral MCP tool surface.
Details
- Kind
- MCP servers
- Topic
- No topic detected
- Publisher
- bryanjbelanger
- Origin
- official
- Category
- ferramentas
- Transport
- local
- Version
- 2.1.2
- Last push
- 2026-08-16T17:27:46Z
- Repository state
- ativo
- Language
- Go
- License
- MIT
- Added
- 2026-08-29 03:02:32
- Updated
- 2026-08-29 03:02:32
- Origin id
io.github.bryanjbelanger/desktop-hypervisor-mcp
README
# Desktop Hypervisor MCP
One provider-neutral MCP server for the desktop hypervisors: **VirtualBox**,
**VMware Fusion**, and **VMware Workstation**. Nine tools, ~1,800 context
tokens, full coverage of what its two predecessor servers did in ~5,600.
It succeeds [virtualbox-mcp-server](../../tree/predecessor-virtualbox) (that
history is preserved on the `predecessor-virtualbox` branch) and the never-
released vmware-fusion-mcp-server, folding both into one capability-based
surface.
**Versioning note:** stable releases of this server start at **v2.0.0**. The
v1.x line (and its `v1.0.0` release, kept for anyone still pinning it) belongs
to the virtualbox-only predecessor; the 0.x tags were this server's pre-stable
iterations. v2.0.0 is identical in content to v0.4.3, re-versioned as the
stable line.
## Design
- **Capability-based, not lowest-common-denominator.** Providers advertise
what they can actually do (`provider action=list`): guest exec, OVA
import/export, linked clones, pre-boot guestinfo injection, DHCP-lease IP
discovery, ISO mastering… Unsupported operations fail by naming the missing
capability, not with a provider error.
- **Intent, not mechanism.** "Ensure the cluster nodes share a network the
host can reach" is expressible on both families; "create a host-only
interface" is not. The neutral tools express intent; provider-native
mechanism stays reachable, unabstracted, through `execute_command`.
- **Artifacts resolve per provider.** The same image name gives each
hypervisor the artifact it can actually import — Talos's `vmware-*.ova` vs
`virtualbox-*.ova`, Vagrant's `vmware_desktop` vs `virtualbox` boxes,
Microsoft's per-hypervisor dev VM — keyed on (image, provider family, host
arch).
## Tools
| Tool | Actions |
|------|---------|
| `provider` | list — installed hypervisors with status, capabilities, formats, and remediation when not ready |
| `artifact` | catalog, resolve, fetch (dry_run) — verified downloads of official OS images, per provider |
| `vm_lifecycle` | create, start, stop, suspend, reset, delete, clone, import, export |
| `vm_info` | list, running, show, ip (in-guest tools, else DHCP leases by MAC — works for agentless guests like Talos) |
| `vm_config` | resources, nested_virt, attach_iso, guestinfo (pre-boot key/value injection, VMware) |
| `snapshot` | take, restore, delete, list (tree) |
| `guest` | exec, script, copy_in, copy_out, screenshot |
| `network` | ensure_cluster_network, expose_guest_port, make_iso, repack_iso |
| `execute_command` | raw `VBoxManage` / `vmrun` argv on the selected provider |
With one hypervisor installed it is selected automatically; with several, the
ambiguity is surfaced, never guessed.
## Image catalog
`artifact action=catalog` lists maintained images: Talos (appliance and metal
ISO), Ubuntu (cloud image and Vagrant), Debian, Fedora, Rocky, Alma,
openSUSE, FreeBSD, Kali, TurnKey, the Windows dev VM, plus `vagrant:org/box`
passthrough to the whole registry. Downloads are sha256-verified wherever the
publisher provides a digest (GitHub release assets always do); unverified
sources say so loudly. Vagrant boxes are fetched for the *right* provider and
auto-extracted to their importable machine file. The cache lives in
`~/.hypervisor-images` (`HV_IMAGE_DIR` overrides).
## Prerequisites
- VirtualBox (`VBoxManage`) and/or VMware Fusion / Workstation (`vmrun`).
Detection is per-call, so a hypervisor installed mid-session is picked up.
- Nothing else: a single static Go binary, no Python, no Node.
Optional, detected at runtime: `ovftool` enables OVA import/export on VMware;
`xorriso` enables `repack_iso`.
## Installing
Published on the [official MCP Registry](https://registry.modelcontextprotocol.io)
as `io.github.bryanjbelanger/desktop-hypervisor-mcp` — that name is what
registry-aware clients install by. The registry has no per-server page yet, so
the listing itself is the API record:
[current entry](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.bryanjbelanger/desktop-hypervisor-mcp&version=latest).
For hosts that support MCP Bundles, download the `.mcpb` from the
[latest release](https://github.com/bryanjbelanger/desktop-hypervisor-mcp/releases/latest)
and open it — guest credentials and the image cache directory are prompted for
in the host's own UI. One bundle covers every platform; it carries a binary per
(os, arch) and picks one at startup, so it is ~16 MB.
Otherwise take the bare binary for your platform from the same release, or
build it:
```bash
go build -o desktop-hypervisor-mcp .
```
## Registration with Claude Code
```bash
claude mcp add --scope user hypervisor -- /path/to/desktop-hypervisor-mcp
```
Guest-operation credentials come from the server environment, never from
tool parameters:
```bash
claude mcp add --scope user hypervisor \
--env HV_GUEST_USER=vagrant --env HV_GUEST_PASSWORD=vagrant \
-- /path/to/desktop-hypervisor-mcp
```
(`VMRUN_GUEST_USER`/`VMRUN_GUEST_PASSWORD` are honored for compatibility.)
The server ships usage recipes in the MCP initialize handshake, generated
from what was actually detected on the host — a session on a
VirtualBox-only machine never pays context for VMware guidance.
## Permissions
Per-tool allowlisting in `.claude/settings.json` keeps prompts meaningful —
read-only tools are safe to always-allow:
```json
{
"permissions": {
"allow": [
"mcp__hypervisor__provider",
"mcp__hypervisor__vm_info",
"mcp__hypervisor__artifact",
"mcp__hypervisor__snapshot"
]
}
}
```
Keep mutating tools (`vm_lifecycle`, `execute_command`) behind prompts
unless you accept unattended VM mutation.
## Bundled skills
[`skills/`](skills/) contains workflow skills for Claude Code — procedures that
compose this server's tools across either hypervisor:
[hv-vm](skills/hv-vm/SKILL.md) (provisioning),
[hv-network](skills/hv-network/SKILL.md) (networks, guest reachability, seed ISOs),
[hv-snapshot](skills/hv-snapshot/SKILL.md) (safety workflows),
[hv-maintenance](skills/hv-maintenance/SKILL.md) (inventory & cleanup),
[hv-transfer](skills/hv-transfer/SKILL.md) (clone/export/move).
Install by copying (or symlinking) into `~/.claude/skills/`. They supersede the
predecessor's `vbox-*` skills.
## Related projects
- [talos-mcp-server](https://github.com/bryanjbelanger/talos-mcp-server) —
Talos/Kubernetes orchestration; consumes this server for node provisioning
and stays deliberately hypervisor-agnostic.