vmm-mcp-server
The vmm-mcp-server provides an MCP interface to the VMM API, enabling management of network topologies, VMs, configurations, YAML/JSON conversion, and leases.
Current state: Only vmm_list_topologies is exposed in the active server schema. The project defines many additional tools (per README):
Topology Management: List, launch, validate, bind/start/stop/unbind VMs, export/import/clone topologies.
Configuration Management: Upload configs, show active config, and manage a library of saved configs (list, get, save, remove).
YAML/JSON Conversion: Parse lab YAML to quickstart spec JSON, render JSON to YAML, and convert existing VMM configs to lab YAML.
Lease Management: Check lease status, schedule earlier unbind, and extend leases.
All operations leverage the vmm-api CLI.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vmm-mcp-serverList all network topologies."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
vmm-mcp-server
An MCP server for VMM, a tool for creating and
managing network topologies. It wraps the vmm-api CLI and exposes its subcommands as
MCP tools so any MCP-compatible client (Claude Code, Claude Desktop, etc.) can drive VMM.
Tools
Tool | VMM CLI command | Description |
|
| List all network topologies known to VMM. |
|
| Configure, bind, and start a topology in one step. |
|
| Upload a topology config without binding/starting it. |
|
| Display the currently active topology config. |
|
| Dry-run capacity check for a config, no deployment. |
|
| Launch VMs' QEMU processes, paused. |
|
| Start paused VMs (binds first if needed). |
|
| Pause QEMU emulation without deleting the process. |
|
| Release VMs (hard teardown, no guest shutdown). |
|
| Print a topology's userdb as JSON. |
|
| Recreate a topology from exported JSON. |
|
| Copy a topology's config into a new topo_id. |
|
| Lab YAML -> normalized quickstart spec JSON. |
|
| Quickstart spec JSON -> clean lab YAML. |
|
| Existing VMM config -> lab YAML. |
|
| List your saved-config library. |
|
| Print one saved config. |
|
| Store a config file into the saved-config library. |
|
| Delete a saved config. |
|
| Show lease expiry and extensions used/remaining. |
|
| Move auto-unbind earlier than the lease expiry. |
|
| Extend a topology's lease by 30 days. |
More tools (e.g. auth) can be added as needed — see Adding a new tool.
Related MCP server: vsphere-mcp
Requirements
Node.js >= 18
The
vmm-apiCLI installed and available onPATH(or pointVMM_API_BINat it)
Install & build
npm install
npm run buildConfiguration
The server reads two optional environment variables:
Variable | Default | Purpose |
|
| Path to the VMM CLI executable. |
|
| Timeout for each |
Running
npm startThe server speaks MCP over stdio, so it's meant to be launched by an MCP client rather
than run standalone. For example, in Claude Code's mcp config:
{
"mcpServers": {
"vmm": {
"command": "node",
"args": ["/absolute/path/to/vmm-mcp-server/dist/index.js"],
"env": {
"VMM_API_BIN": "/usr/local/bin/vmm-api"
}
}
}
}During development you can run it directly from TypeScript without building first:
npm run devAdding a new tool
Each tool is a small, self-contained module:
Create
src/tools/<name>.tsexporting aVmmTool(seesrc/tools/types.ts) that callsrunVmmApi([...])fromsrc/lib/vmmApi.tswith the rightvmm-apiargs.Register it by adding it to the array in
src/tools/index.ts.
No changes to src/index.ts are needed — it registers whatever tools are listed there.
Project layout
src/
index.ts MCP server entry point (stdio transport, tool registration)
lib/
vmmApi.ts Wrapper around spawning the vmm-api CLI
args.ts Helpers for building argv from flags (-x, --require, repeated -r, ...)
tools/
types.ts Shared VmmTool interface + runAsToolResult() helper
schemas.ts Shared zod field definitions (groupId, requires, topoId, vmNames)
listTopologies.ts vmm_list_topologies -> vmm-api ls
launchTopology.ts vmm_launch_topology -> vmm-api launch
uploadConfig.ts vmm_upload_config -> vmm-api config
configPrint.ts vmm_show_active_config -> vmm-api config-print
validateTopology.ts vmm_validate_topology -> vmm-api validate
vmLifecycle.ts vmm_bind_vms/start_vms/stop_vms/unbind_vms -> bind/start/stop/unbind
exportTopology.ts vmm_export_topology -> vmm-api export
importTopology.ts vmm_import_topology -> vmm-api import
cloneTopology.ts vmm_clone_topology -> vmm-api clone
yaml.ts vmm_yaml_parse/render/convert -> vmm-api yaml ...
savedConfigs.ts vmm_*_saved_config(s) -> vmm-api configs ...
lease.ts vmm_lease_status/schedule_unbind/extend_lease -> lease/extend
index.ts Registry of all toolsAvailable Tools
1 toolvmm_list_topologiesList VMM topologiesA
List all network topologies known to VMM by running "vmm-api ls". Use this to discover existing topology names/IDs before creating, inspecting, or modifying one.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool runs 'vmm-api ls' and lists all topologies, which implies a non-destructive read-only operation. However, it does not explicitly state that no side effects occur or describe the output format, so it falls short of a perfect score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action ('List all network topologies') and then provides the implementation method and usage context. Both sentences are concise and necessary, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity—no parameters, no output schema, no sibling tools—the description fully covers what the tool does, how it does it, and when to use it. It provides all necessary context for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is empty and there is no need for parameter explanations. Based on the guideline '0 params = baseline 4', this score is appropriate. The description adds value by indicating that the output provides names/IDs, but that is output semantics, not parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all network topologies known to VMM, using the specific verb 'List' and resource 'network topologies known to VMM'. It also mentions the underlying command 'vmm-api ls', which adds precise context and leaves no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs using this tool to discover existing topology names/IDs before creating, inspecting, or modifying one. This is clear when-to-use guidance that helps the agent decide when to call this tool, even though there are no sibling tools to differentiate from.
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 tool update
v0.1.0- First observed
vmm_list_topologies
TDQS
Scored across 1 tool
Only one tool exists, so there is no possibility of confusing it with another. The purpose of vmm_list_topologies is clearly described and unambiguous.
The single tool follows a clear verb_noun pattern with a consistent namespace prefix (vmm_list_topologies), establishing a clear convention that is internally consistent.
A single tool for a VMM server is an extreme mismatch. The description implies create, inspect, and modify operations that are entirely absent, making the tool surface far too thin for its apparent scope.
The server exposes only a list operation. There are no create, get, update, delete, or other management capabilities, leaving massive gaps that would prevent any meaningful workflow beyond discovery.
Maintenance
Related MCP Connectors
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
MCP server for searching Airweave collections with natural language queries.
MCP server for Superserve sandboxes: create, exec, and manage Firecracker microVMs
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server for managing Proxmox VE clusters — provision VMs and containers, manage snapshots and backups, execute commands, browse storage, and monitor resources through natural language34107 PyPI16MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for VMware vSphere/vCenter operations, enabling natural language control of VMs, hosts, and infrastructure.Apache 2.0
- FlicenseNot gradedqualityDmaintenanceMCP server for interacting with NetBox API, enabling users to query and manage NetBox resources such as devices through natural language.-
- FlicenseNot gradedqualityCmaintenanceMCP server for the Runn API, enabling resource management and reporting through natural language.-