Skip to main content

MCP server for anyvm — run, manage, and debug BSD/Illumos VMs with natural language

Project description

anyvm-mcp

MCP server for anyvm — run, manage, and debug BSD/Illumos VMs with natural language.
Works with Claude Code, GitHub Copilot, and any other MCP-compatible AI assistant.


Overview

anyvm-mcp is a Model Context Protocol (MCP) server that bridges AI coding assistants with the anyvm VM manager.
Once installed, your AI assistant can:

  • 🖥️ Create FreeBSD, OpenBSD, NetBSD, OmniOS, and other BSD/Illumos VMs in seconds
  • 🚀 Start / Stop / Destroy VMs on demand
  • 🔍 Inspect VM state, IPs, CPU, memory, and network configuration
  • 💻 Execute commands inside running VMs for instant diagnostics
  • 📜 Read console output to debug boot failures or system errors
  • 📸 Snapshot and restore VMs to safe checkpoints

Requirements

Requirement Notes
Python ≥ 3.10
An MCP-compatible AI assistant Claude Code, GitHub Copilot in VS Code, or any other MCP client

Note: The anyvm CLI is bundled automatically — no separate installation needed.


Installation

pipx install anyvm-mcp

Or with pip:

pip install anyvm-mcp

Or install from source:

git clone https://github.com/anyvm-org/mcp
cd mcp
pip install -e .

Quickstart

Claude Code

Add the server to ~/.claude/mcp.json (or the project-level .claude/mcp.json):

{
  "mcpServers": {
    "anyvm": {
      "command": "anyvm-mcp"
    }
  }
}

Restart Claude Code. You can now say things like:

"Create a FreeBSD 14 VM called 'dev' with 2 CPUs and 2 GB RAM, then show me its IP."

"My OpenBSD VM won't boot. Show me the console output and suggest a fix."

GitHub Copilot (VS Code)

Add the server to .vscode/mcp.json in your workspace (or the user-level settings):

{
  "servers": {
    "anyvm": {
      "type": "stdio",
      "command": "anyvm-mcp"
    }
  }
}

Generic MCP client (HTTP/SSE)

Run anyvm-mcp as an HTTP server:

anyvm-mcp --transport sse --host 127.0.0.1 --port 8000

Then point your MCP client at http://127.0.0.1:8000/sse.


CLI reference

usage: anyvm-mcp [-h] [--anyvm PATH] [--transport {stdio,sse,streamable-http}]
                   [--host HOST] [--port PORT]

options:
  --anyvm PATH          Path to the anyvm binary (default: bundled version)
  --transport           MCP transport: stdio (default), sse, or streamable-http
  --host HOST           Bind host for HTTP transports (default: 127.0.0.1)
  --port PORT           Bind port for HTTP transports (default: 8000)

Available tools

Tool Description
list_vms List all VMs with state, OS, CPU, RAM, and IP
vm_info Detailed info about a single VM
create_vm Create a new BSD/Illumos VM
start_vm Start a stopped VM
stop_vm Gracefully (or forcefully) stop a running VM
destroy_vm Permanently delete a VM and free its resources
exec_in_vm Run a shell command inside a VM
console_output Fetch the latest VM serial/console log
list_snapshots List snapshots for a VM
create_snapshot Snapshot a VM at its current state
restore_snapshot Roll a VM back to a snapshot
delete_snapshot Delete a snapshot
network_info IPs, MACs, and virtual NIC configuration

Example conversations

Creating and inspecting a VM

You:      Create an OmniOS VM called "omnios-test" with 4 CPUs, 4 GB RAM, and 40 GB disk.
Copilot:  ✅ VM "omnios-test" created. State: stopped.
          Run `start_vm` to boot it.

You:      Start it and tell me its IP address.
Copilot:  ✅ VM started. IP: 192.168.100.42

Debugging a boot failure

You:      My FreeBSD VM "bsd-web" won't respond to SSH. What's wrong?
Copilot:  [calls console_output("bsd-web", lines=200)]
          The console log shows a panic in vtnet0 — likely a driver issue.
          Try: exec_in_vm("bsd-web", "sysctl hw.vtnet.0.csum_disable=1")

Snapshot workflow

You:      Snapshot "bsd-web" before I upgrade it.
Copilot:  [calls create_snapshot("bsd-web", "pre-upgrade", description="before pkg upgrade")]
          ✅ Snapshot "pre-upgrade" created.

You:      The upgrade broke something. Roll back.
Copilot:  [calls restore_snapshot("bsd-web", "pre-upgrade")]
          ✅ Restored to snapshot "pre-upgrade".

Development

# Install with dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Run a single test file
pytest tests/test_vm_manager.py -v

License

MIT — see LICENSE.

Project details


Download files

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

Source Distribution

anyvm_mcp-0.0.2.tar.gz (66.5 kB view details)

Uploaded Source

Built Distribution

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

anyvm_mcp-0.0.2-py3-none-any.whl (64.4 kB view details)

Uploaded Python 3

File details

Details for the file anyvm_mcp-0.0.2.tar.gz.

File metadata

  • Download URL: anyvm_mcp-0.0.2.tar.gz
  • Upload date:
  • Size: 66.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for anyvm_mcp-0.0.2.tar.gz
Algorithm Hash digest
SHA256 803743cae584a0317ab3dec31e9ed7c84817aa0b51b1e284e79b01d6e9017684
MD5 f033e16e635491501a1a0465ba06b47d
BLAKE2b-256 5413babf62dd4b7d49a2b8adc16206384f15636d2a9242a63469ebe13024ac28

See more details on using hashes here.

Provenance

The following attestation bundles were made for anyvm_mcp-0.0.2.tar.gz:

Publisher: publish.yml on anyvm-org/mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file anyvm_mcp-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: anyvm_mcp-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 64.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for anyvm_mcp-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2861dddc7d8ee6d62f3c5428eb8728d4f0655d8d8640afa8ed822496254ff85c
MD5 3c87110ff8566cb8a200047e2a4a4f4d
BLAKE2b-256 310e08137327c8de60949bd0e88453739e4bace0a01e758a952e29518fc18536

See more details on using hashes here.

Provenance

The following attestation bundles were made for anyvm_mcp-0.0.2-py3-none-any.whl:

Publisher: publish.yml on anyvm-org/mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page