mcp-proxmox
You can manage, provision, monitor, back up, migrate, and troubleshoot Proxmox VE VMs/containers through an AI assistant.
Discover nodes, VMs, containers, guest status, storages, storage content, backups, snapshots, networks, tasks, templates, firewall rules, and metrics.
Control guest lifecycle: start, stop, shutdown, reboot, and delete VMs/containers.
Provision VMs and LXC containers, and clone existing guests or templates.
Create, roll back, and delete snapshots; create and restore backups.
Run commands inside QEMU VMs via the guest agent, and interact with VM consoles via screenshots, key presses, and text entry.
Resize CPU, memory, and disks; configure cloud-init; manage firewall rules.
Migrate guests between cluster nodes and convert stopped VMs into templates.
Destructive operations require explicit confirmation.
Enables comprehensive management of Proxmox VE clusters, including provisioning and lifecycle management of virtual machines and containers, snapshot and backup operations, and system monitoring.
Provides tools for managing and interacting with QEMU virtual machines, including status monitoring, configuration, and command execution via the QEMU guest agent.
mcp-proxmox
MCP server for managing Proxmox VE clusters through AI assistants like Claude, Cursor, and Cline.
Provision, manage, and monitor your entire Proxmox infrastructure through natural language. Create VMs and containers, manage snapshots, browse storage, and more.
Quick Start
# Run directly with uvx (no install needed)
uvx mcp-proxmox
# Or install with pip
pip install mcp-proxmoxRelated MCP server: pve-mcp
Configuration
Set these environment variables (or create a .env file):
PROXMOX_HOST=192.168.1.100 # Your Proxmox VE host
PROXMOX_TOKEN_ID=user@pam!mcp # API token ID
PROXMOX_TOKEN_SECRET=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx # API token secretOptional:
PROXMOX_PORT=8006 # Default: 8006
PROXMOX_VERIFY_SSL=false # Default: falseCreating a Proxmox API Token
Log into your Proxmox web UI
Go to Datacenter > Permissions > API Tokens
Click Add and create a token for your user
Uncheck "Privilege Separation" for full access, or assign specific permissions:
VM.Audit— read VM/CT status and configVM.PowerMgmt— start/stop/shutdown/rebootVM.Snapshot— create/rollback/delete snapshotsVM.Allocate— create/delete/clone VMs and containersVM.Clone— clone operationsDatastore.Audit— list storages and browse contentDatastore.AllocateSpace— allocate disk space for new VMs/CTsSys.Audit— read node status and tasksVM.Config.Disk— resize disksVM.Config.CPU— change CPU allocationVM.Config.Memory— change memory allocationVM.Monitor— access QEMU monitor (for metrics)VM.Console— console interaction tools (screenshots, keyboard input)VM.Migrate— migrate VMs/CTs between nodesSys.Modify— manage firewall rulesVM.Config.Cloudinit— configure cloud-init parameters
Integration
Claude Desktop
Add to ~/.claude/claude_desktop_config.json:
{
"mcpServers": {
"proxmox": {
"command": "uvx",
"args": ["mcp-proxmox"],
"env": {
"PROXMOX_HOST": "192.168.1.100",
"PROXMOX_TOKEN_ID": "user@pam!mcp",
"PROXMOX_TOKEN_SECRET": "your-token-secret"
}
}
}
}Claude Code
Add to .claude/settings.json or ~/.claude/settings.json:
{
"mcpServers": {
"proxmox": {
"command": "uvx",
"args": ["mcp-proxmox"],
"env": {
"PROXMOX_HOST": "192.168.1.100",
"PROXMOX_TOKEN_ID": "user@pam!mcp",
"PROXMOX_TOKEN_SECRET": "your-token-secret"
}
}
}
}Cursor
Add to Cursor Settings > MCP with the same configuration as above.
Available Tools
Discovery
Tool | Description |
| List all cluster nodes with CPU, memory, and uptime |
| Detailed node info: CPU model, memory, disk, versions |
| List QEMU VMs (filter by node or status) |
| List LXC containers (filter by node or status) |
| Detailed VM/CT status by VMID (auto-detects type and node) |
Lifecycle
Tool | Description |
| Start a stopped VM or container |
| Force-stop (requires confirmation) |
| Graceful ACPI/init shutdown |
| Reboot (requires confirmation) |
Storage
Tool | Description |
| List storage pools with capacity and usage (filter by node) |
| Browse ISOs, templates, backups, and disk images |
Provisioning
Tool | Description |
| Create a QEMU VM with configurable CPU, memory, disk, ISO, and network |
| Create an LXC container from a template |
| Clone a VM or CT (full or linked clone, cross-node support) |
| Permanently delete a stopped VM or CT (requires confirmation) |
Backup & Restore
Tool | Description |
| List backup files (filter by node, storage, or VMID) |
| Create a vzdump backup (snapshot/suspend/stop modes, zstd/lzo/gzip) |
| Restore a VM or CT from a backup file (requires confirmation) |
Command Execution
Tool | Description |
| Run a command inside a QEMU VM via guest agent |
Note:
exec_commandrequiresqemu-guest-agentinstalled and running inside the VM. Not supported for LXC containers (Proxmox API limitation).
Console Interaction
Tool | Description |
| Capture a PNG screenshot of a QEMU VM's display (login prompt, boot messages, installer, GUI) |
| Send a key or combination to a VM console (requires confirmation) |
| Type ASCII text into a VM console (US layout; requires confirmation) |
Note: Console tools do not require
qemu-guest-agentand need only theVM.Consoleprivilege.vm_screenshotopens the same VNC websocket tunnel the Proxmox web UI uses (RFB 3.8 with DES-based VNC auth) and is implemented in pure stdlib (custom WebSocket client + DES). Only QEMU VMs are supported. Text entry is layout-dependent:vm_send_textmaps ASCII to a US keyboard layout (Shift-mapping for uppercase and symbols); non-ASCII input (e.g. Cyrillic) is not supported by the sendkey protocol.
Snapshots
Tool | Description |
| List all snapshots for a VM/CT |
| Create a new snapshot |
| Rollback to a snapshot (requires confirmation) |
| Delete a snapshot (requires confirmation) |
Network
Tool | Description |
| List bridges, bonds, and physical interfaces on a node |
Resize
Tool | Description |
| Resize CPU, memory, and/or disk of a VM or container (requires confirmation) |
Monitoring
Tool | Description |
| CPU, memory, network, disk I/O over time |
| Recent tasks on a node (backups, migrations, etc.) |
Firewall
Tool | Description |
| List firewall rules for a VM/CT, node, or the cluster |
| Add a firewall rule (action, direction, protocol, port, source/dest) |
| Delete a firewall rule by position (requires confirmation) |
Migration
Tool | Description |
| Live or offline migrate a VM/CT to another node (requires confirmation) |
Templates & Cloud-init
Tool | Description |
| List all VM templates available for cloning |
| Convert a stopped VM into a template (requires confirmation, irreversible) |
| Set user, password, SSH keys, IP config, and DNS on a VM |
Safety
Destructive operations (stop_guest, reboot_guest, rollback_snapshot, delete_snapshot, delete_guest, resize_guest, restore_backup, delete_firewall_rule, migrate_guest, create_template) require explicit confirm=true. The first call returns a warning describing the impact; only a second call with confirmation executes the action.
Examples
Once connected, you can ask your AI assistant:
"List all my VMs and their status"
"How much memory is VM 100 using?"
"Shut down container 105"
"Create a snapshot of VM 200 called before-upgrade"
"Show me the CPU usage of VM 100 over the last day"
"What tasks ran on node pve recently?"
"Which VMs are stopped?"
"What storage pools do I have and how full are they?"
"Show me available ISO images"
"Create a new Ubuntu VM with 4 cores and 8GB RAM"
"Clone VM 100 as a test environment"
"Create a Debian container from template"
"Delete the old test VM 999"
"Back up VM 100 to the zfs-backup-storage"
"Show me all backups for VM 200"
"Restore the latest backup of container 101"
"Run 'df -h' on VM 100"
"Check if nginx is running on VM 200"
"Take a screenshot of VM 100 so I can see the console"
"The VM is stuck at a login prompt — type 'root' and press Enter"
"Show me the network bridges on node pve"
"Give VM 100 more CPU — bump it to 8 cores"
"Add 50GB of disk to container 101"
"Show me the firewall rules on VM 100"
"Allow TCP port 443 on container 101"
"Migrate VM 200 to node pve2"
"List all templates in the cluster"
"Convert VM 102 into a template"
"Set cloud-init on VM 100: user admin, IP dhcp, DNS 8.8.8.8"
Troubleshooting
Missing required environment variables
This error means one or more required connection settings are not available to the server process. Copy .env.example to .env, then set PROXMOX_HOST, PROXMOX_TOKEN_ID, and PROXMOX_TOKEN_SECRET. If you configure an MCP client directly, make sure the same variables are present in that client's env block.
403 Permission check failed
A 403 usually means the API token is valid but does not have enough Proxmox privileges for the requested operation. Revisit Creating a Proxmox API Token and either uncheck "Privilege Separation" for full access or assign the specific privileges listed there, such as VM.Audit, VM.PowerMgmt, VM.Snapshot, or storage permissions for datastore operations.
exec_command fails for guest-agent or LXC reasons
exec_command only works for QEMU VMs with qemu-guest-agent installed and running inside the guest. If the tool reports that the QEMU guest agent is not responding, start or install the agent in the VM and retry. LXC containers are not supported by this Proxmox API path, so use another container access method instead.
ModuleNotFoundError: No module named 'mcp.server.fastmcp'
The MCP Python SDK 2.0 removed the mcp.server.fastmcp module that mcp-proxmox 1.2.1 and earlier import. Fresh installs (uvx mcp-proxmox, uv tool install, pip install) resolved mcp 2.x and failed on startup — in Claude Desktop this only shows up as "Server disconnected". Upgrade to mcp-proxmox 1.2.2 or later, which pins mcp<2. If you must stay on an older mcp-proxmox, constrain the SDK yourself: uvx --with "mcp<2" mcp-proxmox.
Self-signed certificate or connection errors
Proxmox commonly runs on port 8006, so check that PROXMOX_HOST and PROXMOX_PORT point to the same endpoint you use for the Proxmox web UI. For homelab clusters with self-signed certificates, leave PROXMOX_VERIFY_SSL=false or set it explicitly. Use PROXMOX_VERIFY_SSL=true only when the Proxmox certificate chains to a CA trusted by your runtime.
Development
git clone https://github.com/felhen-ai/mcp-proxmox.git
cd mcp-proxmox
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
# Run tests
pytest
# Lint
ruff check src/ tests/
ruff format src/ tests/
# Type check
mypy src/License
MIT
Repository and registry compatibility
The canonical repository is https://github.com/felhen-ai/mcp-proxmox. Existing GitHub clone and issue URLs redirect to this repository. Do not recreate a repository at the old address, which would remove those redirects.
The canonical MCP Registry identifier is io.github.felhen-ai/mcp-proxmox. The legacy identifier io.github.antonio-mello-ai/mcp-proxmox remains supported with a separate server.legacy.json manifest. Both identifiers install the same mcp-proxmox package from PyPI, and the package name and CLI command remain unchanged. Keep both ownership markers in this README so future releases can be registered under either identifier.
New Docker publications use ghcr.io/felhen-ai/mcp-proxmox. Existing images and tags at ghcr.io/antonio-mello-ai/mcp-proxmox are retained for compatibility; they are not deleted or silently replaced. The legacy Glama badge above remains a discovery link until that directory migrates its entry.
Available Tools
37 toolsadd_firewall_ruleA
Add a firewall rule to a VM/CT, node, or cluster.
Args: action: Rule action: 'ACCEPT', 'DROP', or 'REJECT'. type_: Rule direction: 'in' (incoming) or 'out' (outgoing). vmid: Optional. Add rule to this VM/container. node: Optional. Add rule to this node. Ignored if vmid is provided. proto: Optional. Protocol: 'tcp', 'udp', 'icmp', etc. dport: Optional. Destination port or range (e.g. '80', '8000-9000', '80,443'). sport: Optional. Source port or range. source: Optional. Source IP/CIDR (e.g. '192.168.1.0/24'). dest: Optional. Destination IP/CIDR. iface: Optional. Network interface (e.g. 'net0'). enable: Enable rule immediately (default true). comment: Optional description for the rule. pos: Optional position in the rule chain (0 = first). If neither vmid nor node is provided, adds a cluster-level rule.
Inputs: type_ (required), action (required), pos, dest, +9 more. Returns: result
clone_guestA
Clone an existing VM or container. Auto-detects type and node.
Creates a full (independent) clone by default. Set full_clone=false for a linked clone.
Args: vmid: Source VM/container VMID to clone. new_name: Optional name for the clone. target_node: Optional target node for the clone (for cross-node cloning). full_clone: Full clone (true, default) or linked clone (false). target_storage: Optional target storage for the clone's disks. new_vmid: Optional VMID for the clone. Auto-assigned if not provided.
Inputs: vmid (required), new_name, new_vmid, full_clone, +2 more. Returns: result
configure_cloud_initA
Configure cloud-init settings on a VM for automated provisioning.
At least one parameter must be provided. Changes take effect on next boot.
Args: vmid: The numeric ID of the VM. user: Default user name for cloud-init. password: Password for the default user. ssh_keys: SSH public keys (URL-encoded, newline-separated for multiple keys). ip_config: IP configuration string (e.g. 'ip=dhcp' or 'ip=10.0.0.5/24,gw=10.0.0.1'). nameserver: DNS server IP(s), space-separated. searchdomain: DNS search domain(s), space-separated.
Inputs: vmid (required), user, password, ssh_keys, +3 more. Returns: result
create_backupA
Create a backup (vzdump) of a VM or container.
Args: vmid: The numeric ID of the VM or container to back up. storage_name: Target storage for the backup (default 'local'). mode: Backup mode: 'snapshot' (no downtime, default), 'suspend', or 'stop'. compress: Compression: 'zstd' (default), 'lzo', 'gzip', or '0' (none). notes: Optional notes/description for the backup.
Inputs: vmid (required), mode, notes, compress, +1 more. Returns: result
create_containerA
Create a new LXC container from a template.
Args: node: Target node name (e.g. 'pve'). name: Container hostname. template: Template volume ID (e.g. 'local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst'). Use list_storage_content with content_type='vztmpl' to find available templates. cores: Number of CPU cores (default 1). memory: Memory in MB (default 512). disk_size: Root disk size in GB (default 8). storage_pool: Storage for rootfs (default 'local-lvm'). net_bridge: Network bridge (default 'vmbr0'). password: Optional root password. ssh_public_keys: Optional SSH public keys for root access. start_after_create: Start container after creation (default false). vmid: Optional specific VMID. Auto-assigned if not provided.
Inputs: name (required), node (required), template (required), vmid, +8 more. Returns: result
create_snapshotC
Create a new snapshot for a VM or container.
Args: vmid: The numeric ID of the VM or container. name: Snapshot name (alphanumeric, hyphens, underscores). description: Optional description for the snapshot.
Inputs: name (required), vmid (required), description. Returns: result
create_templateA
Convert a stopped VM into a template. IRREVERSIBLE.
Once converted, the VM can no longer be started — it can only be cloned.
Args: vmid: The numeric ID of the VM to convert. confirm: Must be true to execute. First call without confirm shows a warning.
Inputs: vmid (required), confirm. Returns: result
create_vmA
Create a new QEMU virtual machine.
The VM is created stopped by default. Use start_after_create=true to auto-start.
Args: node: Target node name (e.g. 'pve'). name: VM name. cores: Number of CPU cores (default 1). memory: Memory in MB (default 2048). disk_size: Disk size with unit (default '32G'). Examples: '10G', '100G', '1T'. storage_pool: Storage for disk (default 'local-lvm'). iso: Optional ISO volume ID for installation (e.g. 'local:iso/ubuntu-24.04.iso'). os_type: OS type (default 'l26' for Linux). Options: l26, l24, win11, win10, other. net_bridge: Network bridge (default 'vmbr0'). start_after_create: Start VM after creation (default false). vmid: Optional specific VMID. Auto-assigned if not provided.
Inputs: name (required), node (required), iso, vmid, +7 more. Returns: result
delete_firewall_ruleA
Delete a firewall rule by its position number.
Use list_firewall_rules first to see rule positions.
Args: pos: Position of the rule to delete (from list_firewall_rules output). vmid: Optional. Delete from this VM/container's rules. node: Optional. Delete from this node's rules. Ignored if vmid is provided. confirm: Must be true to execute. First call without confirm shows a warning. If neither vmid nor node is provided, deletes from cluster-level rules.
Inputs: pos (required), node, vmid, confirm. Returns: result
delete_guestA
Permanently delete a VM or container. IRREVERSIBLE.
The guest must be stopped before deletion. All disk images will be destroyed.
Args: vmid: The numeric ID of the VM or container to delete. confirm: Must be true to execute. First call without confirm shows a warning.
Inputs: vmid (required), confirm. Returns: result
delete_snapshotA
Delete a snapshot from a VM or container.
Args: vmid: The numeric ID of the VM or container. name: Name of the snapshot to delete. confirm: Must be true to execute. First call without confirm shows a warning.
Inputs: name (required), vmid (required), confirm. Returns: result
exec_commandA
Execute a command inside a QEMU VM via the guest agent.
Requires qemu-guest-agent to be installed and running inside the VM. Not supported for LXC containers.
Args: vmid: The numeric ID of the VM. command: The command to execute (e.g. 'hostname', 'df -h', 'systemctl status nginx'). timeout: Max seconds to wait for command completion (default 30, max 300).
Inputs: vmid (required), command (required), timeout. Returns: result
get_guest_metricsB
Get resource usage metrics (CPU, memory, network, disk I/O) for a VM or container.
Args: vmid: The numeric ID of the VM or container. timeframe: Time range for metrics. Options: 'hour', 'day', 'week', 'month', 'year'.
Inputs: vmid (required), timeframe. Returns: result
get_guest_statusB
Get detailed status of a VM or container by VMID. Auto-detects type and node.
Args: vmid: The numeric ID of the VM or container (e.g. 100, 200).
Inputs: vmid (required). Returns: result
get_node_statusA
Get detailed status for a specific node including CPU model, memory, disk, and versions.
Args: node: Name of the Proxmox node (e.g. 'pve', 'node1').
Inputs: node (required). Returns: result
list_backupsC
List backup files across storages.
Args: node: Optional. Filter by node name. storage_name: Optional. Filter by storage name. vmid: Optional. Filter by VMID to see backups of a specific guest.
Inputs: node, vmid, storage_name. Returns: result
list_containersB
List all LXC containers across the cluster.
Args: node: Optional. Filter by node name. status: Optional. Filter by status ('running', 'stopped').
Inputs: node, status. Returns: result
list_firewall_rulesA
List firewall rules. Can target a specific VM/CT, a node, or the cluster.
Args: vmid: Optional. List rules for this VM/container. node: Optional. List rules for this node. Ignored if vmid is provided. If neither vmid nor node is provided, lists cluster-level rules.
Inputs: node, vmid. Returns: result
list_networksB
List network interfaces, bridges, and bonds on a Proxmox node.
Args: node: Name of the Proxmox node (e.g. 'pve').
Inputs: node (required). Returns: result
list_nodesA
List all nodes in the Proxmox cluster with status, CPU, memory, and uptime.
Inputs: no named parameters. Returns: result
list_snapshotsC
List all snapshots for a VM or container.
Args: vmid: The numeric ID of the VM or container.
Inputs: vmid (required). Returns: result
list_storage_contentA
List content of a storage pool (ISOs, templates, backups, disk images).
Args: node: Name of the Proxmox node. storage_name: Name of the storage pool (e.g. 'local', 'local-lvm'). content_type: Optional. Filter by type: 'iso', 'vztmpl', 'backup', 'images', 'rootdir'.
Inputs: node (required), storage_name (required), content_type. Returns: result
list_storagesB
List storage pools across the cluster with capacity and usage info.
Args: node: Optional. Filter by node name.
Inputs: node. Returns: result
list_tasksB
List recent tasks on a Proxmox node (backups, migrations, snapshots, etc.).
Args: node: Name of the Proxmox node. limit: Maximum number of tasks to return (default 20, max 100). status: Optional. Filter by task status ('ok', 'error', 'running').
Inputs: node (required), limit, status. Returns: result
list_templatesA
List all VM templates available in the cluster for cloning.
Inputs: no named parameters. Returns: result
list_vmsA
List all QEMU virtual machines across the cluster.
Args: node: Optional. Filter by node name. status: Optional. Filter by status ('running', 'stopped').
Inputs: node, status. Returns: result
migrate_guestA
Live migrate a VM or container to another node in the cluster.
Args: vmid: The numeric ID of the VM or container to migrate. target_node: Name of the destination node (e.g. 'pve2'). online: Live migration (true, default) or offline (false). Online keeps the guest running. confirm: Must be true to execute. First call without confirm shows a warning.
Inputs: vmid (required), target_node (required), online, confirm. Returns: result
reboot_guestA
Reboot a running VM or container.
Args: vmid: The numeric ID of the VM or container to reboot. confirm: Must be true to execute. First call without confirm shows a warning.
Inputs: vmid (required), confirm. Returns: result
resize_guestA
Resize CPU, memory, and/or disk of a VM or container.
At least one of cores, memory, or disk_size must be provided. CPU and memory changes take effect on next reboot for running guests. Disk resize is immediate but IRREVERSIBLE (disks can only grow).
Args: vmid: The numeric ID of the VM or container. cores: New number of CPU cores. memory: New memory size in MB. disk_size: Disk size change. Use '+10G' to add 10GB, or '50G' for absolute size. Supported units: K, M, G, T. disk: Disk name to resize (default 'scsi0' for VMs, auto-mapped to 'rootfs' for CTs). confirm: Must be true to execute. First call without confirm shows a warning.
Inputs: vmid (required), disk, cores, memory, +2 more. Returns: result
restore_backupA
Restore a VM or container from a backup file.
Args: volid: Volume ID of the backup (e.g. 'local:backup/vzdump-qemu-100-2024_03_04.vma.zst'). Use list_backups to find available backups. node: Target node for the restored guest. vmid: Optional VMID for the restored guest. Auto-assigned if not provided. storage_pool: Storage for restored disks (default 'local-lvm'). guest_type: Type of guest: 'vm' or 'container'. confirm: Must be true to execute. First call without confirm shows a warning.
Inputs: node (required), volid (required), vmid, confirm, +2 more. Returns: result
rollback_snapshotA
Rollback a VM or container to a previous snapshot.
WARNING: All changes since the snapshot will be LOST.
Args: vmid: The numeric ID of the VM or container. name: Name of the snapshot to rollback to. confirm: Must be true to execute. First call without confirm shows a warning.
Inputs: name (required), vmid (required), confirm. Returns: result
shutdown_guestA
Gracefully shut down a VM or container via ACPI signal (VMs) or init (containers).
Args: vmid: The numeric ID of the VM or container to shut down.
Inputs: vmid (required). Returns: result
start_guestA
Start a stopped VM or container.
Args: vmid: The numeric ID of the VM or container to start.
Inputs: vmid (required). Returns: result
stop_guestA
Force-stop a running VM or container. WARNING: May cause data loss.
Args: vmid: The numeric ID of the VM or container to stop. confirm: Must be true to execute. First call without confirm shows a warning.
Inputs: vmid (required), confirm. Returns: result
vm_screenshotA
Capture a PNG screenshot of a QEMU VM's display.
The VM must be running. Returns the screenshot as a PNG image. Use this to see the current state of the VM console (login prompt, GUI, boot messages, installer screens, etc.).
Args: vmid: The numeric ID of the QEMU VM.
Inputs: vmid (required).
vm_send_keyA
Send a key or key combination to a QEMU VM's console.
The VM must be running. Key names are human-readable and auto-converted to QEMU Monitor key codes. Use vm_screenshot first to see the console state.
Common keys and combos: - 'enter' — Enter key - 'esc' — Escape key - 'tab' — Tab key - 'space' — Space bar - 'backspace' — Backspace - 'up', 'down', 'left', 'right' — Arrow keys - 'f1'-'f12' — Function keys - 'ctrl-alt-delete' — Ctrl+Alt+Del (reboot) - 'ctrl-c' — Ctrl+C - 'win-r' — Win+R (opens Run dialog on Windows) - 'a'-'z', '0'-'9' — Single character keys
Args: vmid: The numeric ID of the QEMU VM. key: Key name or hyphen-separated combo (e.g. 'enter', 'ctrl-alt-delete', 'win-r'). confirm: Must be true to send the key to the VM console.
Inputs: key (required), vmid (required), confirm. Returns: result
vm_send_textA
Type a text string into a QEMU VM's console, character by character.
Each character is sent as an individual keypress. Use this to type
login credentials, commands, or other text into the VM console.
Combine with vm_screenshot to verify the result.
Supports printable ASCII characters. Newlines ('
') are sent as Enter. Note: characters requiring Shift (uppercase, symbols like '!', '@') are sent with shift automatically.
Args:
vmid: The numeric ID of the QEMU VM.
text: Text string to type into the VM console (e.g. 'administrator
admin '). delay: Delay between keypresses in seconds (default 0.05). confirm: Must be true to type the text into the VM console.
Inputs: text (required), vmid (required), delay, confirm. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 37 tools
Most tools target a distinct resource/action pair, such as list_vms vs list_containers vs list_snapshots. A few boundaries are fuzzy—list_storage_content with content_type='backup' overlaps list_backups, and stop_guest (force) vs shutdown_guest (graceful) could be confused—but descriptions make the intended use clear.
The set predominantly uses verb_noun naming with list_*, get_*, create_*, and delete_* prefixes, and guest lifecycle verbs consistently use the _guest suffix. The vm_screenshot/vm_send_key/vm_send_text prefix and generic exec_command are minor deviations from the dominant pattern.
At 37 tools, the surface is heavy for a typical MCP server, but the broad Proxmox domain (guests, storage, backups, snapshots, network, firewall, console) justifies much of it. Some near-duplicate listing tools (list_storage_content vs list_backups vs list_templates) make it feel slightly larger than necessary.
The toolset covers the main guest lifecycle, snapshots, backups/restore, migration, resizing, firewall, and console workflows. Notable gaps include generic guest configuration updates beyond resize/cloud-init and backup deletion, but agents can work around these or they fall outside the core surface.
Maintenance
Related MCP Connectors
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server for AI dialogue using various LLM models via AceDataCloud
MCP server for OpenAI API (chat completions, image generation, embeddings) via AceDataCloud
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server for Proxmox VE that enables AI assistants to inspect and manage LXC containers, VMs, snapshots, and resource pools via the Proxmox API.-
- AlicenseAqualityDmaintenanceMCP server for managing Proxmox VE resources, VM/CT lifecycle, snapshots, backups, and clones via natural language.23MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for managing Proxmox VE virtualization infrastructure, providing tools for VMs, containers, snapshots, storage, cluster nodes, and tasks. Compatible with Claude Desktop, Cline, and other MCP clients via natural language.49 npmMIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server for interacting with the Proxmox Virtual Environment API, enabling management of VMs, containers, storage, and cluster resources through natural language.MIT