Skip to main content

MCP server for UTM virtual machine management via AppleScript

Project description

mcp-utm

MCP server for managing UTM virtual machines on macOS via AppleScript.

Provides 22 tools for cloning, configuring, and controlling UTM VMs — including proper MAC address randomization for Apple Virtualization Framework clones, which enables concurrent VMs with unique network identities.

Install

# PyPI
uvx mcp-utm

# Or install globally
uv tool install mcp-utm
pip install mcp-utm

Claude Code config

{
  "mcpServers": {
    "utm": {
      "command": "uvx",
      "args": ["mcp-utm"]
    }
  }
}

Requirements

  • macOS (uses AppleScript / osascript)
  • UTM 4.6+ (download or brew install --cask utm)
  • Python 3.11+

Tools

Lifecycle

Tool Description
list_vms List all registered VMs with status
get_vm Get status and configuration of a VM
clone_vm Clone a template with unique random MAC
start_vm Start a stopped or suspended VM
stop_vm Stop a running VM (graceful or force)
delete_vm Delete a VM permanently

State

Tool Description
suspend_vm Suspend a running VM to memory
wait_for_vm Poll until VM reaches a target status

Networking

Tool Description
get_vm_ip Discover VM IP via ARP table
set_vm_network Update MAC address or network mode

Configuration

Tool Description
set_vm_resources Update memory and CPU cores
rename_vm Rename a VM
set_vm_display Toggle dynamic resolution

Directory Shares (VirtioFS)

Tool Description
list_vm_shares List shared directories
add_vm_share Add a host directory share
remove_vm_share Remove a directory share
set_vm_shares Replace all shares

Drives

Tool Description
list_vm_drives List attached drives
attach_drive Attach an ISO or disk image

Portability

Tool Description
export_vm Export VM to a .utm file
import_vm Import VM from a .utm file

Console

Tool Description
get_serial_port Get serial port address for console access

How MAC randomization works

Apple's Virtualization Framework ignores MacAddress changes written directly to config.plist — UTM caches the config in memory. This server uses AppleScript's update configuration command which properly updates UTM's internal state, giving each clone a unique MAC and therefore a unique IP on the 192.168.64.0/24 subnet.

License

MIT

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

mcp_utm-0.1.2.tar.gz (55.0 kB view details)

Uploaded Source

Built Distribution

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

mcp_utm-0.1.2-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

File details

Details for the file mcp_utm-0.1.2.tar.gz.

File metadata

  • Download URL: mcp_utm-0.1.2.tar.gz
  • Upload date:
  • Size: 55.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mcp_utm-0.1.2.tar.gz
Algorithm Hash digest
SHA256 f2e25b3e774af03d368bf17e5a0db3c90d67421b5f93d14a4f8f8efc012ccddb
MD5 0d6967b6a8b325b63d1135a624546c8b
BLAKE2b-256 63ff1b210a32d3f919885de81d17e4c84e8544d2f116a6d6264e4cf52dd26dd8

See more details on using hashes here.

File details

Details for the file mcp_utm-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: mcp_utm-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 10.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mcp_utm-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5468f1a6a742d028f1b821392fa934b4069fffe64c549ddacfd49ea3fa1d44a1
MD5 a85a967b5d5801936b04d9b09fb27840
BLAKE2b-256 178e9ea95021c60b07c89fa6681cda32a50581c4b5e156ab2661d21fbe69a09f

See more details on using hashes here.

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