Nemeton MCP
Use Nemeton MCP to control and inspect native macOS-hosted VMs through MCP clients.
Manage VM lifecycle: list/get/create/update/clone/reorder/delete/start/stop/force-stop/pause/resume/suspend VMs and stop all.
Work with APFS copy-on-write snapshots: list/create/restore/delete snapshots and check suspend status.
Interact with VM consoles: send/read serial console, execute console commands, and take screenshots.
Access VM networking/files: get VM IP, run SSH commands, and upload/download/list files.
Control GUI and clipboard: launch GUI apps, list windows, run VS Code commands, select VM, and read/write shared clipboard.
Manage display: enter/exit/toggle fullscreen.
Inspect host/runtime: host info, metrics, VM runtime, VM errors, downloads, available distros, resize disk, and export/import VMs.
Manage webhooks: list/register/delete webhooks for VM lifecycle events.
Enables creation and management of Debian virtual machines with automatic ISO download.
Enables creation and management of Fedora virtual machines with automatic ISO download.
Allows creation and management of macOS virtual machines using Apple's Virtualization.framework.
Enables creation and management of Ubuntu virtual machines with automatic ISO download.
Nemeton MCP Server
Control native macOS virtual machines from Claude Desktop, Claude Code, Cursor, or any MCP client.
This is the official Model Context Protocol bridge for Nemeton — a native macOS app that creates and manages Linux and macOS VMs using Apple's Virtualization.framework (no Parallels, no VMware, no subscriptions).
You need the Nemeton app installed and running. This MCP server is a thin stdio→HTTP bridge — the actual VM logic lives in the app. Get Nemeton at store.juergenkoller.software/apps/nemeton.
What you can do
"Claude, spin up an Ubuntu 24.04 VM with 4 CPUs and 8 GB RAM, install Docker, and tell me when it's ready."
The MCP server exposes 50+ tools across these categories:
Category | Tools |
VM Lifecycle |
|
VM Control |
|
Snapshots (CoW on APFS) |
|
Console |
|
Networking & Files |
|
GUI Control |
|
Clipboard Bridge |
|
Host Info |
|
Storage |
|
Distros |
|
Display |
|
Webhooks |
|
Runtime |
|
Each tool returns structured JSON with VM state, snapshot metadata, console output, or operation result.
Related MCP server: FreezeText MCP
Installation
Prerequisites
macOS 14 (Sonoma) or later — required for
Virtualization.frameworkfeatures.Nemeton app installed and running — get it here.
Swift 5.9+ (Xcode 15+) if you want to build from source. Pre-built binaries are also available.
Build from source
git clone https://github.com/juergenkoller-software/nemeton-mcp.git
cd nemeton-mcp
swift build -c release
# Binary: .build/release/NemetonMCPPre-built binary
Download the latest NemetonMCP binary from the Releases page.
Configuration
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"nemeton": {
"command": "/path/to/NemetonMCP",
"env": {
"NEMETON_PORT": "22100",
"NEMETON_TOKEN": "your-token-here"
}
}
}
}Get NEMETON_TOKEN from Nemeton → Settings → API & Integrations.
Claude Code
Add to ~/.claude/mcp.json (or via claude mcp add):
claude mcp add nemeton /path/to/NemetonMCP \
--env NEMETON_PORT=22100 \
--env NEMETON_TOKEN=your-token-hereCursor / other MCP clients
Same pattern: configure NemetonMCP as a stdio MCP server with the two environment variables above.
How it works
┌────────────────┐ JSON-RPC stdio ┌────────────────┐ HTTP+Bearer ┌────────────────┐
│ Claude/Cursor │ ───────────────► │ NemetonMCP │ ─────────────► │ Nemeton.app │
│ (MCP client) │ ◄─────────────── │ (this repo) │ ◄───────────── │ (port 22100) │
└────────────────┘ └────────────────┘ └────────────────┘The bridge reads JSON-RPC 2.0 requests from stdin, forwards them to Nemeton's local HTTP server at 127.0.0.1:22100/mcp, and writes responses back to stdout. All authentication, VM logic, and tool dispatch happens inside the Nemeton app.
This split lets us keep the MCP wire format open-source (so you can audit it, fork it, or run it through any sandboxing layer you prefer) while the VM internals stay in the app.
Environment variables
Variable | Default | Description |
|
| Port of Nemeton's local HTTP server |
| (none) | Bearer token from Nemeton Settings (required for write operations) |
Errors and trace logs are written to stderr so they don't pollute the JSON-RPC stdout channel.
About Nemeton
Nemeton is a native macOS app for creating and managing virtual machines using Apple's Virtualization.framework. Highlights:
No subscription — one-time purchase, €389
Linux & macOS VMs with automatic ISO/IPSW download
CoW snapshots on APFS — save VM states without wasting disk
REST API + WebSocket events (42 endpoints) for automation
MCP server (this repo) for Claude/AI agents
Native performance — uses Apple's framework directly, no QEMU overhead
100% local — no cloud, no telemetry
→ Get Nemeton at store.juergenkoller.software
License
MIT — see LICENSE. The bridge is open source; the Nemeton app itself is commercial.
Issues & support
Bridge bugs: open an issue
App support: support@juergenkoller.software
Built by Juergen Koller Software GmbH.
Available Tools
49 toolsclipboard_readB
Read the shared clipboard from a VM.
Inputs: vm (required).
clipboard_writeC
Write text to a VM's shared clipboard.
Inputs: vm (required), text (required).
clone_vmA
Clone an existing VM, optionally under a new name.
Inputs: vm (required), name.
console_executeC
Run a command via the VM console and return its output.
Inputs: vm (required), command (required).
create_snapshotB
Create a copy-on-write snapshot of a VM.
Inputs: vm (required), name.
create_vmB
Create a new VM from a Linux distribution image.
Inputs: name (required), distro (required), cpu, diskGB, +1 more.
delete_snapshotC
Delete a VM snapshot.
Inputs: vm (required), snapshot (required).
delete_vmB
Delete a VM and its disk image.
Inputs: vm (required).
delete_webhookC
Delete a registered webhook.
Inputs: id (required).
export_vmB
Export a VM to a portable bundle.
Inputs: vm (required), path.
file_downloadC
Download a file from a VM to the host.
Inputs: vm (required), localPath (required), remotePath (required).
file_listC
List files in a directory inside a VM.
Inputs: vm (required), path (required).
file_uploadC
Upload a file from the host into a VM.
Inputs: vm (required), localPath (required), remotePath (required).
force_stop_vmB
Immediately power off a VM.
Inputs: vm (required).
fullscreen_enterB
Enter fullscreen for a VM display.
Inputs: vm (required).
fullscreen_exitA
Exit fullscreen display mode.
Inputs: no named parameters.
fullscreen_toggleB
Toggle fullscreen for a VM display.
Inputs: vm (required).
get_host_infoA
Get host machine info (CPU, memory, macOS version).
Inputs: no named parameters.
get_metricsB
Get host resource-usage metrics.
Inputs: no named parameters.
get_suspend_statusB
Get the suspend/resume status of a VM.
Inputs: vm (required).
get_vmB
Get configuration and current state of a single VM.
Inputs: vm (required).
gui_launchB
Launch a GUI application inside a VM.
Inputs: vm (required), app (required).
gui_windowsB
List open GUI windows in a VM.
Inputs: vm (required).
import_vmC
Import a VM from a bundle.
Inputs: path (required).
list_distrosB
List available Linux distributions (ISOs auto-downloaded on demand).
Inputs: no named parameters.
list_downloadsA
List downloaded distro ISOs and their status.
Inputs: no named parameters.
list_snapshotsB
List APFS copy-on-write snapshots of a VM.
Inputs: vm (required).
list_vmsA
List all configured virtual machines with their current state.
Inputs: no named parameters.
list_webhooksA
List registered webhooks.
Inputs: no named parameters.
pause_vmC
Pause a running VM.
Inputs: vm (required).
read_consoleC
Read recent output from a VM's serial console.
Inputs: vm (required).
register_webhookC
Register a webhook for VM lifecycle events.
Inputs: url (required), events.
reorder_vmsC
Reorder the VM list.
Inputs: order (required).
resize_diskC
Resize a VM's virtual disk.
Inputs: vm (required), sizeGB (required).
restore_snapshotB
Restore a VM to a previous snapshot.
Inputs: vm (required), snapshot (required).
resume_vmB
Resume a paused VM.
Inputs: vm (required).
select_vmA
Select/focus a VM in the Nemeton UI.
Inputs: vm (required).
send_consoleB
Send text or keystrokes to a VM's serial console.
Inputs: vm (required), text (required).
ssh_executeC
Run a command inside a VM over SSH.
Inputs: vm (required), command (required).
start_vmC
Start a VM.
Inputs: vm (required).
stop_allB
Stop all running VMs.
Inputs: no named parameters.
stop_vmB
Gracefully shut down a running VM.
Inputs: vm (required).
suspend_vmC
Suspend a VM to disk.
Inputs: vm (required).
take_screenshotB
Capture a screenshot of a VM's display.
Inputs: vm (required).
update_vmC
Update a VM's configuration (CPU, memory, etc.).
Inputs: vm (required), cpu, memoryMB.
vm_errorsC
Get recent errors reported for a VM.
Inputs: vm (required).
vm_ipB
Get the IP address of a running VM.
Inputs: vm (required).
vm_runtimeB
Get runtime info for a VM (uptime, resource usage).
Inputs: vm (required).
vscode_commandC
Run a VS Code command inside a VM.
Inputs: vm (required), command (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 49 tools
Most tools map cleanly to distinct VM operations, but several overlapping mechanisms create ambiguity: console_execute vs ssh_execute vs send_console all involve running or sending commands into a VM, and fullscreen_enter/fullscreen_exit/fullscreen_toggle are largely redundant. An agent must read descriptions carefully to avoid picking the wrong execution path.
The dominant pattern is verb_noun in snake_case (list_vms, create_snapshot, register_webhook), but there are inconsistent exceptions: vm_ip, vm_runtime, and vm_errors lack verbs, fullscreen_enter/fullscreen_exit/fullscreen_toggle invert the verb/noun order, and console_execute reverses the typical verb-first style. The names are readable but not fully predictable.
49 tools is well beyond the 25-tool threshold and includes many micro-actions such as fullscreen_enter/fullscreen_exit/fullscreen_toggle, select_vm, and clipboard_read/write that could be combined or left to client-side wrappers. The broad VM-management scope justifies a large API, but as an MCP surface it is heavy and harder for agents to navigate.
The tool set covers the full VM lifecycle: create/get/update/clone/delete, power and suspend states, snapshots, console/SSH access, file transfer, GUI interaction, host metrics, disk resize, export/import, distros, and webhooks. There are no obvious dead ends or missing core operations for managing VMs on macOS. It is arguably more complete than needed, but not incomplete.
Maintenance
Related MCP Connectors
Connect ChatGPT and Claude to your Mac, Windows or Linux with secure MCP remote access.
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
MCP connector for iMessage & Contacts via a local Mac agent + Vercel relay
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server and CLI for iOS development — build, test, automate, and diagnose from any AI agent or terminal.2MIT
- AlicenseAqualityCmaintenanceMCP server for FreezeText — OCR anything on your Mac screen from Claude, Cursor, or any MCP client. Freeze the screen and extract text via Apple Vision (videos, popups, protected PDFs), OCR a region or a base64 image, and manage a searchable capture history. 12 tools. Bridge open-source (MIT), FreezeText app is free.121MIT

ToolPiperofficial
AlicenseNot gradedqualityBmaintenance426+ MCP tools for macOS, all on-device — local AI inference (llama.cpp on Metal), voice, vision OCR, local RAG, browser automation, and ~140 system actions across 26 macOS domains. Nothing leaves your Mac.3MIT- AlicenseNot gradedqualityCmaintenanceMCP server that gives Claude and local LLMs access to Apple's on-device frameworks — Vision OCR, NSDataDetector, and Apple Intelligence FoundationModels. Everything runs on your Mac with zero data leaving.1MIT