Control Parallels Desktop VMs from MCP: power, screenshot, exec, keyboard, sequences. macOS only.
io.github.Parallels/pdfm-mcp Model Context Protocol (MCP) Server
The io.github.Parallels/pdfm-mcp server is an MCP server that enables control of Parallels Desktop virtual machines from MCP. It supports VM operations including power, screenshot capture, command execution, keyboard input, and keyboard sequences. This server is macOS only.
🛠️ Key Features
Control Parallels Desktop VMs via MCP
Power management
Screenshot capture
Exec (command execution)
Keyboard input
Keyboard sequences
macOS only
🚀 Use Cases
Automate Parallels Desktop VM workflows through MCP
Capture VM screenshots during remote operations
Send keyboard input and sequences to VMs
Execute commands inside the VM environment
⚡ Developer Benefits
Integrates Parallels Desktop VM control into MCP-based tooling
Provides discrete capabilities for power, exec, screenshots, and keyboard interactions
Connect your AI assistant to Parallels Desktop. pdfm-mcp lets Claude, Codex, and other MCP clients find and manage your virtual machines, run guest commands, read the screen, and automate keyboard input.
Runs locally on macOS, with a universal binary for Apple Silicon and Intel. No Go or Node installation is needed to use the released binary.
What you can do
Find a VM, check its status, and start or stop it.
Run commands inside Windows or Linux guests and collect their output.
Take screenshots, read screen text, and type into the guest.
Create snapshots, clone VMs, and automate multi-step workflows.
Once connected, try asking your assistant: “Find my Ubuntu VM and show its status” or “Take a screenshot of my running Windows VM.”
Install
You need macOS, Parallels Desktop, and an MCP client. Guest command execution also requires Parallels Tools in the guest. Screen capture and keyboard tools need a running VM.
Homebrew and the default installer use stable releases. Until the first stable release and cask are published, use the script's prerelease option below. Check the Releases page for available builds.
Homebrew
sh
brew tap Parallels/tap
brew install --cask Parallels/tap/pdfm-mcp
pdfm-mcp --version
For a particular version or a different directory, add --version <version> or --path <directory> after bash -s --.
Claude Desktop bundle
If the release includes pdfm-mcp-<version>.mcpb, download it and its matching .sha256 file from Releases. Verify it with shasum -a 256 -c pdfm-mcp-<version>.mcpb.sha256, then double-click the bundle to install. This is an alternative to configuring the binary manually below.
Connect your assistant
Your client starts the server for you. Use the binary's absolute path, since desktop apps may not inherit your terminal's PATH.
Installation
Binary path
Homebrew, Apple Silicon
/opt/homebrew/bin/pdfm-mcp
Homebrew, Intel
/usr/local/bin/pdfm-mcp
Install script, default directory
/usr/local/bin/pdfm-mcp
Install script, custom directory
<directory>/pdfm-mcp
For Homebrew, "$(brew --prefix)/bin/pdfm-mcp" resolves the right path in terminal commands. In JSON or TOML configuration, use the actual path from the table; $(brew --prefix) is not expanded there.
Claude Code
Choose the command matching your installation:
sh
# Homebrew (Apple Silicon or Intel)
claude mcp add --transport stdio --scope user pdfm-mcp -- "$(brew --prefix)/bin/pdfm-mcp"# Install script
claude mcp add --transport stdio --scope user pdfm-mcp -- /usr/local/bin/pdfm-mcp
Run claude mcp list to check the connection. These commands make the server available across your projects. See Claude Code's MCP setup for more options.
Run codex mcp list to confirm registration, then use /mcp in the CLI to check active servers. The CLI and IDE extension share the same MCP configuration.
This example uses Homebrew on Apple Silicon. For the script installation or Intel Homebrew, change command to /usr/local/bin/pdfm-mcp. Restart Claude Desktop after saving.
VS Code / GitHub Copilot
Add the server to .vscode/mcp.json in your project, preserving any existing servers:
For the script installation or Intel Homebrew, change command to /usr/local/bin/pdfm-mcp. Run MCP: List Servers from the Command Palette to start the server and check its status. See VS Code's MCP setup.
Available tools
By default, your assistant can work with all local VMs. Tools that target a VM accept its UUID or exact name. To restrict the server to one VM, add --vm-id "My VM" to its launch arguments.
Tool
What it does
parallels_list_vms
List your VMs and their details.
parallels_search_vms
Find VMs by part of their name or UUID, optionally filtering by state.
parallels_vm_info
Get detailed information about one VM.
parallels_vm_start, parallels_vm_resume
Start or resume a VM.
parallels_vm_pause, parallels_vm_suspend
Pause execution or save the VM's running state.
parallels_vm_stop, parallels_vm_restart
Stop or gracefully restart a VM.
parallels_vm_reset, parallels_vm_reset_uptime
Hard-reset a VM or reset its uptime counter.
parallels_vm_capture
Take a screenshot of the VM.
parallels_vm_observe
Read screen text, find text, or report changes using local OCR.
parallels_vm_exec
Run a guest command and return its exit code and output.
See the tool reference for arguments, limits, and automation examples.
Choose what your assistant can access
Add launch arguments to limit access:
--read-only: expose observation tools for inspecting VMs and their screens.
--vm-id "My VM": target one VM.
--allow-vms "My VM,Another VM": restrict access to selected VMs.
--allow-tools / --deny-tools: expose or hide specific tools.
For example, add "args": ["--read-only", "--vm-id", "My VM"] beside command in a JSON client configuration. In Codex TOML, use args = ["--read-only", "--vm-id", "My VM"].
Screenshots, recognized text, command output, and tool arguments reach your MCP client and its model provider. VM deletion, snapshot rollback, guest commands, and encryption can change or destroy data; review those actions before approving them.
Release builds can collect anonymised tool usage telemetry. To opt out, set PDFM_MCP_TELEMETRY_DISABLED=true in your server's environment. See configuration and privacy for all settings.
Add --pre-release when updating a canary or beta installation, or --path <directory> if you installed to a custom directory. Remove the server from your client's MCP settings after uninstalling.