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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2e25b3e774af03d368bf17e5a0db3c90d67421b5f93d14a4f8f8efc012ccddb
|
|
| MD5 |
0d6967b6a8b325b63d1135a624546c8b
|
|
| BLAKE2b-256 |
63ff1b210a32d3f919885de81d17e4c84e8544d2f116a6d6264e4cf52dd26dd8
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5468f1a6a742d028f1b821392fa934b4069fffe64c549ddacfd49ea3fa1d44a1
|
|
| MD5 |
a85a967b5d5801936b04d9b09fb27840
|
|
| BLAKE2b-256 |
178e9ea95021c60b07c89fa6681cda32a50581c4b5e156ab2661d21fbe69a09f
|