Skip to main content
Glama
masmedh

Parallels MCP Server

by masmedh

Parallels MCP Server

A Model Context Protocol (MCP) server for managing Parallels Desktop virtual machines.

Features

This MCP server provides tools to interact with Parallels Desktop VMs:

  • list_vms - List all virtual machines

  • get_vm_info - Get detailed information about a specific VM

  • get_vm_status - Get the current status of a VM

  • start_vm - Start a virtual machine

  • stop_vm - Stop a virtual machine (with optional force flag)

  • suspend_vm - Suspend a virtual machine

  • resume_vm - Resume a suspended virtual machine

  • reset_vm - Reset (restart) a virtual machine

  • exec_vm_command - Execute a command inside a running VM

Related MCP server: vmware-mcp

Prerequisites

  • macOS with Parallels Desktop installed

  • Node.js 16 or higher

  • prlctl command-line tool (comes with Parallels Desktop)

Installation

From npm

# Install globally
npm install -g parallels-mcp-server

# Or use with npx (no installation needed)
npx parallels-mcp-server

From source

# Clone the repository
git clone <repository-url>
cd parallels-mcp-server

# Install dependencies
npm install

# Build the project
npm run build

Usage

With Claude Desktop

After installation, add this to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json):

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

Or if you have it installed globally:

{
  "mcpServers": {
    "parallels": {
      "command": "parallels-mcp-server"
    }
  }
}

With VS Code

The server is already configured in .vscode/mcp.json and ready to use!

Development

# Run in development mode with tsx
npm run dev

Example Usage

Once connected to an MCP client, you can use the tools like this:

Available Tools

list_vms

Lists all Parallels Desktop virtual machines on your system.

Parameters: None

Example:

Use the list_vms tool

get_vm_info

Get detailed information about a specific virtual machine including configuration, hardware specs, and network settings.

Parameters:

  • vm (required): VM name or UUID

Example:

Use get_vm_info with vm="MyVM"

get_vm_status

Get the current operational status of a virtual machine (running, stopped, suspended, etc.).

Parameters:

  • vm (required): VM name or UUID

Example:

Use get_vm_status with vm="MyVM"

start_vm

Start a stopped or suspended virtual machine.

Parameters:

  • vm (required): VM name or UUID

Example:

Use start_vm with vm="MyVM"

stop_vm

Stop a running virtual machine gracefully or forcefully.

Parameters:

  • vm (required): VM name or UUID

  • force (optional): Boolean - if true, performs a hard shutdown (kill)

Examples:

# Graceful shutdown
Use stop_vm with vm="MyVM"

# Force shutdown
Use stop_vm with vm="MyVM" and force=true

suspend_vm

Suspend a running virtual machine, saving its current state to disk.

Parameters:

  • vm (required): VM name or UUID

Example:

Use suspend_vm with vm="MyVM"

resume_vm

Resume a suspended virtual machine from its saved state.

Parameters:

  • vm (required): VM name or UUID

Example:

Use resume_vm with vm="MyVM"

reset_vm

Restart a virtual machine (equivalent to pressing the reset button).

Parameters:

  • vm (required): VM name or UUID

Example:

Use reset_vm with vm="MyVM"

exec_vm_command

Execute a command inside a running virtual machine.

Parameters:

  • vm (required): VM name or UUID

  • command (required): Command to execute

Example:

Use exec_vm_command with vm="MyVM" and command="ls -la /home"

Note: The VM must be running and Parallels Tools must be installed for command execution to work.

Security Notes

  • This server has direct access to your Parallels VMs via prlctl

  • Be careful when executing commands inside VMs

  • The server requires Parallels Desktop to be installed and properly configured

  • Commands are executed with your current user permissions

Troubleshooting

Command not found: prlctl

Ensure Parallels Desktop is installed and the command-line tools are in your PATH. You can verify by running:

prlctl --version

VM not found

  • Check the VM name is correct (case-sensitive)

  • Use list_vms to see available VMs

  • You can use either the VM name or UUID

Command execution fails

  • Ensure the VM is running

  • Verify Parallels Tools are installed in the guest OS

  • Check that the command syntax is correct for the guest OS

Permission denied

The server runs with your user permissions. Ensure you have access to Parallels Desktop and the VMs.

FAQ

Q: Does this work on Windows or Linux?
A: No, this server is macOS-only as it requires Parallels Desktop, which is a macOS application.

Q: Can I use this with other MCP clients besides Claude Desktop?
A: Yes! Any MCP-compatible client can use this server.

Q: Is it safe to publish this to npm?
A: Yes, but make sure to update the author information and repository URL in package.json before publishing.

Q: How do I find my VM's UUID?
A: Use the list_vms tool or run prlctl list -a in the terminal.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT License - see LICENSE file for details

Support

For issues and feature requests, please use the GitHub issue tracker.

  • The server runs with the same permissions as the user running it

Troubleshooting

If you encounter issues:

  1. Verify Parallels Desktop is installed: which prlctl

  2. Test that you can run prlctl commands manually: prlctl list -a

  3. Check the server logs (errors are logged to stderr)

  4. Make sure the build directory exists and contains index.js

License

MIT

Available Tools

9 tools
exec_vm_commandC

Execute a command inside a running virtual machine

ParametersJSON Schema
NameRequiredDescriptionDefault
vmYesVM name or UUID
commandYesCommand to execute

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It states the execution environment is a running VM but omits critical traits such as required permissions, output capture, timeouts, side effects, or whether the command runs as root.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. It is appropriately sized for a simple two-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description is too thin for a command-execution tool. An agent cannot learn what the tool returns, whether output is captured, or what constraints apply when commanding a running guest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both parameters, so the schema already explains 'vm' and 'command'. The description adds no formatting, naming, or execution-context details beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (Execute) and resource (command inside a running VM). It clearly separates itself from the lifecycle siblings like start_vm and stop_vm, though it does not explicitly contrast with any alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance, and no alternatives are named. The phrase 'inside a running virtual machine' implies the VM must already be running, but prerequisites like guest tools or permissions are unstated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_vm_infoC

Get detailed information about a specific virtual machine

ParametersJSON Schema
NameRequiredDescriptionDefault
vmYesVM name or UUID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies a read ('Get') but does not state permissions, whether the call is side-effect free, or what scope of detail ('detailed') is actually returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with no wasted words, front-loading the verb and resource. Appropriately sized for a one-parameter read tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-param read tool with no output schema, the description is minimally adequate but adds nothing beyond the schema. It does not clarify the relationship to the several sibling VM-inspection tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'vm' parameter is documented as 'VM name or UUID', so the schema does the heavy lifting. The description adds nothing about accepted identifier formats beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear specific verb+resource: 'Get detailed information about a specific virtual machine'. However, it does not differentiate itself from the sibling get_vm_status, which an agent could easily confuse with a request for detailed VM info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus get_vm_status or list_vms, and no prerequisites or context is offered. The agent must infer the distinction from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_vm_statusC

Get the current status of a virtual machine

ParametersJSON Schema
NameRequiredDescriptionDefault
vmYesVM name or UUID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It says nothing about whether this is a safe read (implied but unstated), what 'status' values exist, whether the VM must be powered on, latency, or error behavior for unknown VMs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the resource and scope front-loaded and no filler. It is terse to the point of being under-specified, but not verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter read with no annotations and no output schema, the description is minimally adequate. It never conveys what the returned status looks like (running/stopped/suspended), which is the tool's whole purpose and is not covered by any structured field.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and there is a single parameter ('vm') documented as 'VM name or UUID'. The description adds no meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('current status of a virtual machine'), so the agent knows exactly what it retrieves. However, it does not differentiate itself from the close sibling get_vm_info, which an agent could easily confuse with a status query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance and no alternatives named, despite eight siblings including get_vm_info, list_vms, and the start/stop/suspend lifecycle tools. The agent must infer from the name alone that this is the status-only read.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_vmsB

List all Parallels Desktop virtual machines

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It implies a read-only enumeration but never states that it is non-destructive, whether it returns all VMs or only running ones, or how results are ordered. Minimal disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single focused sentence with no waste, though it is arguably too terse to carry any useful context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-param enumeration tool with no output schema, the description is only minimally adequate. It should at least state what is returned (all VMs vs. running ones) and that it is safe/read-only.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters and 100% coverage, so the baseline of 4 applies. There is nothing for the description to clarify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (Parallels Desktop virtual machines). It is reasonably distinguishable from siblings like get_vm_info (single VM detail) and the lifecycle tools, though it does not explicitly contrast itself with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance or mention of alternatives. The agent must infer that this is the discovery step before calling get_vm_info or lifecycle tools, but nothing in the description says so.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reset_vmC

Reset (restart) a virtual machine

ParametersJSON Schema
NameRequiredDescriptionDefault
vmYesVM name or UUID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears the full behavioral burden, yet it only states that reset equals restart. For a VM reset it says nothing about whether this is a hard power-cycle, whether running workloads/in-flight state are lost, whether it is graceful or forced, or which permissions are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single four-word sentence with the verb front-loaded and zero filler. Nothing could be trimmed without losing the clarifying 'restart' synonym.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a disruptive restart operation with no annotations and no output schema, the description leaves out the operational essentials: data-loss risk, force vs graceful behavior, and any required state or permissions. The schema covers the parameter, but the description does not cover the tool's behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single 'vm' parameter (name or UUID) is already fully documented in the schema. The description adds no format or identification detail beyond what the schema supplies, which is the expected baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (reset) with a clarifying synonym (restart) and the target resource (virtual machine), which is enough to distinguish it from siblings like start_vm or stop_vm at a glance. It stops short of explicitly contrasting reset with the stop/start pair or suspend/resume, so the boundary with those siblings is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as stop_vm followed by start_vm. The agent must infer the selection criteria entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resume_vmC

Resume a suspended virtual machine

ParametersJSON Schema
NameRequiredDescriptionDefault
vmYesVM name or UUID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries the full burden. It doesn't disclose that this is a state-changing (non-read-only, potentially destructive to current state) operation, nor any auth requirements, nor what happens if the VM isn't suspended.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single front-loaded sentence with zero filler. Appropriately sized, though so terse it omits useful context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, no annotations, no behavioral detail, and no differentiation from the nearly-identical start_vm sibling. For a state-mutating VM control tool this is under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with a self-documenting 'vm' parameter. The description adds no meaning beyond the schema, which is acceptable given full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear specific verb+resource: 'Resume' + 'virtual machine'. However, it does not differentiate from sibling start_vm, which for a power-state operation is a critical ambiguity an agent needs resolved.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance. The description implies it applies to suspended VMs but doesn't state the precondition (VM must be suspended) or distinguish from start_vm, which is the obvious sibling confusion for this operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_vmC

Start a virtual machine

ParametersJSON Schema
NameRequiredDescriptionDefault
vmYesVM name or UUID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does not disclose whether the call is idempotent, what happens if the VM is already running, whether it blocks until boot completes, or what permissions are required for a state-changing operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, front-loaded sentence with zero filler. It is efficient, though its brevity is part of the under-specification problem rather than a strength in itself.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a state-mutating VM lifecycle tool with no annotations and no output schema, the description omits critical context: current-state prerequisites, the start-vs-resume distinction, and any indication of the result. An agent could invoke it against the wrong state and get an error.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the single required parameter is documented as "VM name or UUID". The description adds nothing beyond that schema text, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("Start a virtual machine"), so the action is unambiguous. However, it offers no differentiation from siblings that are semantically close, notably resume_vm and reset_vm, leaving the agent to guess which lifecycle operation applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use start_vm versus resume_vm (starting a stopped VM vs. resuming a suspended/paused one), which is the key ambiguity among the siblings. No preconditions, state requirements, or exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stop_vmC

Stop a virtual machine

ParametersJSON Schema
NameRequiredDescriptionDefault
vmYesVM name or UUID
forceNoForce shutdown (kill)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It states the action but does not disclose what stopping entails: whether it is graceful, whether data is lost, what happens to the VM state, or how the 'force' parameter changes behavior. This is a significant gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with zero wasted words. It is optimally concise for stating the core action, though brevity here comes at the cost of other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this is a mutation tool with no annotations and no output schema, the description is far too sparse. It omits any mention of side effects, the difference between a graceful stop and a forced kill, or how the 'force' parameter affects behavior. An agent lacks critical context to invoke it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters ('vm' and 'force') clearly. The description adds no additional meaning beyond the schema, which is the baseline expectation when the schema is thorough.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Stop') and resource ('virtual machine'), making the core action unambiguous. It distinguishes itself from siblings like start_vm and suspend_vm by verb alone, but does not explicitly differentiate when to choose stop over suspend or reset, which would warrant a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as suspend_vm or reset_vm, nor any prerequisites or context. The description simply states the action with no usage conditions or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suspend_vmC

Suspend a virtual machine

ParametersJSON Schema
NameRequiredDescriptionDefault
vmYesVM name or UUID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It confirms a mutation operation ('Suspend'), but says nothing about VM state persistence, handling of running processes, permission requirements, or reversibility via resume_vm; for a power-state mutation this leaves important behavioral traits undocumented.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single four-word sentence with no filler, and the core action is front-loaded. For a simple one-parameter tool, this is appropriately sized and immediately readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and several closely related sibling tools, the description is too sparse to fully guide selection or invocation. At minimum it should distinguish suspend from stop_vm and resume_vm and indicate what suspend does to the VM's state, which it does not do.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the single 'vm' parameter fully documented as 'VM name or UUID.' The description adds no extra syntax, format, or constraint information beyond the schema, so the baseline score of 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Suspend a virtual machine.' It is clearly distinct from read-only siblings like list_vms and get_vm_info, but it does not differentiate itself from closely related power-state siblings such as stop_vm and resume_vm.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance is provided: there is no statement of when to use this tool versus stop_vm, resume_vm, or reset_vm, nor any prerequisites or exclusions. The verb itself implies a power-state action, but the agent receives no explicit routing help among the many VM control siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv1.0.0
    • First observedexec_vm_command
    • First observedget_vm_info
    • First observedget_vm_status
    • First observedlist_vms
    • First observedreset_vm
    • First observedresume_vm
    • First observedstart_vm
    • First observedstop_vm
    • First observedsuspend_vm

TDQS

B3.4/5.0

Scored across 9 tools

Disambiguation4/5

Most tools have clearly distinct purposes: list, info, status, lifecycle controls, and command execution. The only mild overlap is between get_vm_info and get_vm_status, but the descriptions clarify detailed information versus current status.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern, such as list_vms, get_vm_info, start_vm, and exec_vm_command. The convention is predictable throughout.

Tool Count5/5

Nine tools are well-scoped for a VM management server, covering discovery, inspection, lifecycle control, and command execution without excessive overlap or missing core actions.

Completeness4/5

The set covers listing, status, start, stop, suspend, resume, reset, and command execution for existing VMs. However, creation, deletion, cloning, and snapshot operations are absent, leaving minor gaps for full VM lifecycle management.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    MCP server for controlling VMware Fusion/Workstation virtual machines via vmrun CLI, providing 32 tools for VM lifecycle, guest execution, and file operations without requiring a REST API daemon.
    32
    10 npm
    3
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    An MCP server that exposes Proxmox VE node/cluster as tools for MCP clients, enabling management of VMs and containers including power control, resource reconfiguration, snapshots, and backups.
    20
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server for managing Parallels Desktop VMs, including lifecycle operations and snapshots.
    -