Nemeton MCP
# Nemeton MCP Server
[](https://swift.org)
[](https://apple.com/macos)
[](LICENSE)
[](https://modelcontextprotocol.io)
[](https://glama.ai/mcp/servers/juergenkoller-software/nemeton-mcp)
**Control native macOS virtual machines from Claude Desktop, Claude Code, Cursor, or any MCP client.**
This is the official [Model Context Protocol](https://modelcontextprotocol.io) bridge for [**Nemeton**](https://store.juergenkoller.software/en/apps/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](https://store.juergenkoller.software/en/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** | `list_vms`, `get_vm`, `create_vm`, `update_vm`, `clone_vm`, `delete_vm`, `reorder_vms`, `stop_all` |
| **VM Control** | `start_vm`, `stop_vm`, `force_stop_vm`, `pause_vm`, `resume_vm`, `suspend_vm`, `get_suspend_status` |
| **Snapshots** (CoW on APFS) | `list_snapshots`, `create_snapshot`, `restore_snapshot`, `delete_snapshot` |
| **Console** | `send_console`, `read_console`, `console_execute`, `take_screenshot` |
| **Networking & Files** | `vm_ip`, `ssh_execute`, `file_upload`, `file_download`, `file_list` |
| **GUI Control** | `gui_launch`, `gui_windows`, `vscode_command`, `select_vm` |
| **Clipboard Bridge** | `clipboard_read`, `clipboard_write` |
| **Host Info** | `get_host_info`, `get_metrics` |
| **Storage** | `resize_disk`, `export_vm`, `import_vm` |
| **Distros** | `list_distros` (Ubuntu, Debian, Fedora, Arch — auto-download ISOs) |
| **Display** | `fullscreen_enter`, `fullscreen_exit`, `fullscreen_toggle` |
| **Webhooks** | `list_webhooks`, `register_webhook`, `delete_webhook` |
| **Runtime** | `vm_runtime`, `vm_errors`, `list_downloads` |
Each tool returns structured JSON with VM state, snapshot metadata, console output, or operation result.
---
## Installation
### Prerequisites
1. **macOS 14 (Sonoma) or later** — required for `Virtualization.framework` features.
2. **Nemeton app installed and running** — [get it here](https://store.juergenkoller.software/en/apps/nemeton).
3. **Swift 5.9+** (Xcode 15+) if you want to build from source. Pre-built binaries are also available.
### Build from source
```bash
git clone https://github.com/juergenkoller-software/nemeton-mcp.git
cd nemeton-mcp
swift build -c release
# Binary: .build/release/NemetonMCP
```
### Pre-built binary
Download the latest `NemetonMCP` binary from the [Releases page](https://github.com/juergenkoller-software/nemeton-mcp/releases).
---
## Configuration
### Claude Desktop
Edit `~/Library/Application Support/Claude/claude_desktop_config.json`:
```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`):
```bash
claude mcp add nemeton /path/to/NemetonMCP \
--env NEMETON_PORT=22100 \
--env NEMETON_TOKEN=your-token-here
```
### Cursor / 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 |
|---|---|---|
| `NEMETON_PORT` | `22100` | Port of Nemeton's local HTTP server |
| `NEMETON_TOKEN` | _(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](https://store.juergenkoller.software/en/apps/nemeton)**
---
## License
MIT — see [LICENSE](LICENSE). The bridge is open source; the Nemeton app itself is commercial.
## Issues & support
- **Bridge bugs:** [open an issue](https://github.com/juergenkoller-software/nemeton-mcp/issues)
- **App support:** [support@juergenkoller.software](mailto:support@juergenkoller.software)
Built by [Juergen Koller Software GmbH](https://juergenkoller.software).
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.