Skip to main content

Parallels Pro MCP Server

CI License: MIT Python >=3.10

A Model Context Protocol (MCP) server for Parallels Desktop on macOS. It enables LLM agents—such as Claude Desktop, ChatGPT Codex, Cursor, and Antigravity—to discover, control, automate, and inspect Parallels virtual machines over standard MCP stdio.

Highlights

  • Full Lifecycle Management: Start, gracefully stop (ACPI), and suspend virtual machines.
  • Cross-Platform Guest Execution: Execute commands inside Windows, Linux, or macOS guests with explicit argument vectors (argv), avoiding host shell injection risks.
  • Readiness Probing: Automatically detects guest OS and polls until Parallels Tools and the guest execution layer respond.
  • Bi-Directional File Transfer: Stream files and directories directly between host and guest over stdin/stdout tar archives without requiring network mounts or SMB credentials (vm_copy_to_guest, vm_copy_from_guest).
  • Dynamic Host Folder Sharing: Mount and unmount host directories into guest VMs at runtime with read-only or read-write permissions (vm_share_folder, vm_unshare_folder).
  • Instant Sandboxing & Ephemeral Clones: Spin up fast linked clones in seconds for disposable agent test environments, and permanently delete sandboxes with confirmation (vm_clone, vm_delete).
  • Headless Execution & Network Simulation: Run VMs headlessly in the background, or simulate network degradation (edge, 3g, wifi, 100% packet loss, offline) for resilience testing (vm_set_headless, vm_set_network_condition).
  • Visual VM Inspection: Capture real-time screenshots of the VM display buffer for multimodal AI analysis (vm_screenshot).
  • Synthetic Input & Hotkeys: Send keyboard events and hotkey combinations (Ctrl+Alt+Del, Win+R, Enter, Esc) to interact with GUI dialogs and prompts (vm_send_keys).
  • Snapshot Lifecycle: List, create, safely revert, and delete snapshots with mandatory confirmation flags (confirm: true).
  • Pre-flight Diagnostic Doctor: Built-in environment and license validator (parallels-pro-mcp doctor and scripts/doctor.sh).

Tool Reference

Tool Purpose Confirmation Required Annotations
vm_list Discover registered VMs and power states No Read-Only
vm_status Inspect detailed VM status, OS, tools version, and uptime No Read-Only
vm_start Start a VM by name or UUID No Power Change
vm_stop Request graceful ACPI shutdown (never force-kills) No Destructive
vm_suspend Suspend VM and preserve guest memory No Destructive
vm_wait_ready Poll until the guest OS answers execution probes No Readiness
vm_exec Run an argv vector in the guest (supports custom user) No (Privileged) Guest Command
vm_copy_to_guest Stream files or directories from host into guest filesystem No File Transfer
vm_copy_from_guest Stream files or directories from guest onto host filesystem No File Transfer
vm_share_folder Mount a host directory into the guest (rw or ro) No State Mutating
vm_unshare_folder Remove a previously shared host directory No State Mutating
vm_clone Clone a VM (fast linked clone or deep copy) No State Mutating
vm_delete Permanently delete a VM and its disks confirm: true Destructive
vm_set_headless Configure headless vs GUI window startup mode No State Mutating
vm_set_network_condition Simulate degraded network profiles (3g, wifi, loss, off) No State Mutating
vm_screenshot Capture current VM screen to host PNG No Read-Only
vm_send_keys Send synthetic keystrokes or chords (e.g. ctrl+alt+del, win+r) No Guest Command
snapshot_list List all snapshots for a VM No Read-Only
snapshot_create Create a snapshot with name and optional description confirm: true State Mutating
snapshot_revert Revert VM state to a specified snapshot confirm: true State Mutating
snapshot_delete Permanently delete a snapshot to reclaim host disk space confirm: true State Mutating

Tool Usage & Cookbook

1. Instant Ephemeral Sandboxing

Create an isolated linked clone in seconds, run tests headlessly, and destroy it when finished:

# Spin up an instant linked clone sharing the base disk
vm_clone(vm="Windows 11", name="Win11-Worker-1", linked=True)

# Run headlessly without displaying a GUI window on the desktop
vm_set_headless(vm="Win11-Worker-1", enabled=True)

# Boot and wait until guest tools are ready
vm_start(vm="Win11-Worker-1")
vm_wait_ready(vm="Win11-Worker-1", timeout_s=120)

# ... perform testing or build tasks ...

# Graceful stop and permanent teardown
vm_stop(vm="Win11-Worker-1")
vm_delete(vm="Win11-Worker-1", confirm=True)

2. Bi-Directional File Transfer

Stream files or entire directory trees between host and guest over stdin/stdout tar archives without needing network mounts or SMB credentials:

# Push local build artifact into the guest Windows Temp folder
vm_copy_to_guest(
    vm="Windows 11",
    host_path="./dist/myapp.exe",
    guest_path=r"C:\Temp\myapp.exe"
)

# Pull test logs or crash dumps back onto the host
vm_copy_from_guest(
    vm="Windows 11",
    guest_path=r"C:\Temp\test-results",
    host_path="./reports/test-results"
)

3. Dynamic Host Folder Sharing

Mount local host directories directly into the VM at runtime:

# Share a host repository with read-only protection
vm_share_folder(
    vm="Windows 11",
    name="source_code",
    host_path="~/projects/myapp",
    mode="ro"
)

# Unmount the share when done
vm_unshare_folder(vm="Windows 11", name="source_code")

4. GUI Interaction & Screen Analysis

Interact with native GUI dialogs, installers, or Windows UAC prompts:

# Capture what is currently on the VM screen
vm_screenshot(vm="Windows 11")

# Press Win+R to open the Run dialog
vm_send_keys(vm="Windows 11", combination="win+r")

# Type a command and press Enter
vm_send_keys(vm="Windows 11", text="notepad.exe", keys=["enter"])

# Dismiss a modal with Escape
vm_send_keys(vm="Windows 11", keys=["esc"])

5. Network Simulation & Resilience Testing

Simulate poor connections or complete offline states:

# Throttle bandwidth and latency to emulate a 3G mobile link
vm_set_network_condition(vm="Windows 11", profile="3g")

# Simulate a network blackout (100% packet loss)
vm_set_network_condition(vm="Windows 11", profile="100-percent-loss")

# Restore normal network conditions
vm_set_network_condition(vm="Windows 11", profile="off")

6. Snapshot Baselines

Create rollback points before mutating system state:

# List snapshots
snapshot_list(vm="Windows 11")

# Create a checkpoint
snapshot_create(
    vm="Windows 11",
    name="clean-state",
    description="Clean baseline before test execution",
    confirm=True
)

# Revert back to the checkpoint
snapshot_revert(vm="Windows 11", snapshot="clean-state", confirm=True)

# Delete snapshot to reclaim host disk space
snapshot_delete(vm="Windows 11", snapshot="clean-state", confirm=True)

Prerequisites

  1. macOS with Parallels Desktop Pro or Business Edition installed.
    • Note: Parallels Desktop Pro or Business is required for the prlctl command-line utility and prlctl exec guest execution.
  2. Parallels Tools installed inside each target guest VM.
  3. Python 3.10+ and uv (recommended).

Verify Your Environment

Before connecting an MCP client, run the pre-flight diagnostic:

# Using uv:
uv run parallels-pro-mcp doctor

# Or using the standalone script:
./scripts/doctor.sh

Client Configuration

Claude Desktop

Add the following to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "parallels-pro": {
      "command": "uvx",
      "args": ["parallels-pro-mcp-server"],
      "env": {
        "PARALLELS_DEFAULT_VM": "Windows 11",
        "PARALLELS_ARTIFACT_DIR": "~/.cache/parallels-mcp"
      }
    }
  }
}

Or when running from a local checkout:

{
  "mcpServers": {
    "parallels-pro": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/parallels-pro-mcp-server",
        "parallels-pro-mcp"
      ]
    }
  }
}

Codex / ChatGPT Desktop

In ~/.codex/config.toml:

[mcp_servers.parallels-pro]
command = "uv"
args = ["run", "--project", "/path/to/parallels-pro-mcp-server", "parallels-pro-mcp"]
startup_timeout_sec = 30
tool_timeout_sec = 600

[mcp_servers.parallels-pro.env]
PARALLELS_DEFAULT_VM = "Windows 11"
PARALLELS_ARTIFACT_DIR = "~/.cache/parallels-mcp"

Google Antigravity (Gemini CLI)

Add the server to ~/.gemini/config/mcp_config.json:

{
  "mcpServers": {
    "parallels-pro": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/parallels-pro-mcp-server",
        "parallels-pro-mcp"
      ],
      "env": {
        "PARALLELS_DEFAULT_VM": "Windows 11",
        "PARALLELS_ARTIFACT_DIR": "~/.cache/parallels-mcp"
      }
    }
  }
}

Or using uvx:

{
  "mcpServers": {
    "parallels-pro": {
      "command": "uvx",
      "args": ["parallels-pro-mcp-server"]
    }
  }
}

Environment Variables

Variable Description Default
PARALLELS_DEFAULT_VM Fallback VM name or UUID used when a tool argument is omitted None
PARALLELS_ARTIFACT_DIR Host directory where captured screenshots and artifacts are stored ~/.cache/parallels-pro-mcp-server

Safe Operating Sequence for Agents

  1. Discover: Call vm_list to see available VMs and states.
  2. Inspect: Call vm_status(vm="...") to verify guest tools and power status.
  3. Optional Sandbox: For risky or destructive test sessions, call vm_clone(vm="...", name="agent-sandbox", linked=true) to create a fast, isolated linked clone.
  4. Power Up: If stopped, call vm_start followed by vm_wait_ready to ensure guest tools are responsive.
  5. Inspect Desktop: Call vm_screenshot to visually check if dialogs or login prompts are blocking the session.
  6. Snapshot Baseline: Call snapshot_create(vm="...", name="clean-baseline", confirm=true) before performing major tasks.
  7. Transfer & Execute: Use vm_copy_to_guest to stage scripts, vm_exec with explicit argv arrays to run commands, and vm_copy_from_guest to retrieve build artifacts.
  8. Teardown: Revert via snapshot_revert or destroy ephemeral sandboxes via vm_delete(vm="agent-sandbox", confirm=true).

Security Model

  • Automation Bridge: This server delegates guest execution directly to prlctl exec.
  • Privilege & Shared Folders: If your VM has Parallels Shared Folders enabled (e.g. \\Mac\Home on Windows or /media/psf/ on Linux), guest commands can read and write to your host filesystem. Always run only on trusted virtual machines.
  • Explicit Argv Only: vm_exec only accepts argument vectors (list[str]), preventing shell injection on the host.

Development & Testing

# Clone the repository
git clone https://github.com/PopBot/parallels-pro-mcp-server.git
cd parallels-pro-mcp-server

# Install dependencies and sync environment
uv sync

# Run diagnostic doctor
uv run parallels-pro-mcp doctor

# Run test suite with test coverage reporting
uv run coverage run --source=parallels_mcp -m unittest discover -s tests
uv run coverage report -m

For instructions on semantic versioning, GitHub Releases, and PyPI distribution, see the Releasing & Publishing Guide.


License

This project is licensed under the MIT License.

Release files for parallels-pro-mcp-server 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for parallels-pro-mcp-server 0.2.0
File Size Uploaded
parallels_pro_mcp_server-0.2.0.tar.gz 109.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for parallels-pro-mcp-server 0.2.0
File Interpreter ABI Platform
parallels_pro_mcp_server-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 137.8 kB

Release files / parallels_pro_mcp_server-0.2.0.tar.gz

Download URL parallels_pro_mcp_server-0.2.0.tar.gz
Size 109.2 kB
Tags Source
SHA-256 checksum
How to use checksums
9d5b17a812f8da897ec1292c07bc845a04f044ad8fe1799eeb4504fd72df02eb
BLAKE2b-256 checksum
How to use checksums
b7b2dcb175e92d3d5fb65caf3e34b30e0e90782a27f0b58ebcc9d881743a4d5e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / parallels_pro_mcp_server-0.2.0-py3-none-any.whl

Download URL parallels_pro_mcp_server-0.2.0-py3-none-any.whl
Size 28.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
91331d7346c17e3f7f6e4f2603a221e44fcae7cb041aec138c827f99e2137857
BLAKE2b-256 checksum
How to use checksums
b5f2d790cf75e1e98e8dd9e223ac1c90a70b2f263d0545724c27aea740701ccc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page