Unofficial-Proxmox-MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PVE_HOST | Yes | Proxmox VE host address, for example 192.168.1.100. | |
| PVE_USER | Yes | Proxmox API user/token identifier, for example mcp-bot@pve!mcp-token. | |
| PVE_SELF_VMID | No | Optional self VMID used for LXC container self-protection. May be auto-detected via /etc/pve-self-vmid. | |
| PVE_VERIFY_SSL | No | Whether to verify SSL when connecting to Proxmox. Example: false. | |
| PVE_TOKEN_SECRET | Yes | Proxmox API token secret. | |
| PVE_PROTECTED_VMIDS | No | Comma-separated list of VMIDs that can never be destroyed via MCP, for example 100,101,200. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pve_list_nodesB | List all cluster nodes, their online status, CPU usage %, memory allocation, and uptime. Returns JSON formatted overview. |
| pve_get_node_statusA | Get deep telemetry for a Proxmox node: PVE version, kernel version, CPU sockets/cores/model, load averages, and memory/swap utilization in MB. Args: node: Target node name (e.g. 'pve'). Defaults to cluster default node if empty. |
| pve_list_storage_poolsA | List all configured storage pools (ZFS, LVM-Thin, Directory, NFS, Ceph) on a node or cluster, including enabled content types (iso, vztmpl, images, backup), total space, used, and free GB. Args: node: Target node name. Defaults to cluster default node if empty. |
| pve_list_systemsA | List virtual machines and LXC containers in the cluster. Args: node: Filter by specific node name (e.g. 'pve') or 'all' across cluster. type_filter: 'all', 'qemu' (VMs only), or 'lxc' (Containers only). status_filter: 'all', 'running', or 'stopped'. |
| pve_get_systemA | Get detailed hardware configuration, network adapters, memory, disk layouts, and live status for a VM or LXC container. Args: vmid: Target VM or LXC Container ID (e.g. 101 or 204). node: Optional node name. If omitted, automatically locates the system across cluster nodes. |
| pve_get_guest_networkA | Retrieve live guest IP addresses (IPv4 & IPv6), MAC addresses, and network interfaces. Uses QEMU Guest Agent for VMs, or container interface discovery for LXC. Args: vmid: Target VM or LXC Container ID. node: Optional node name. |
| pve_exec_guest_commandA | Execute a non-interactive shell command inside a QEMU VM via the QEMU Guest Agent. Returns exit code, stdout, and stderr. Args: vmid: Target QEMU Virtual Machine ID. command: Shell command string to execute (e.g. 'ip a', 'uptime', 'docker ps'). node: Optional node name. timeout: Execution timeout in seconds (default: 30). |
| pve_lifecycleB | Perform a lifecycle state transition on a VM or container. Args: vmid: Target VM or Container ID. action: One of: 'start', 'stop', 'shutdown', 'reboot', 'reset', 'suspend', 'resume'. node: Optional node name. Automatically discovers node if omitted. |
| pve_create_snapshotB | Take a snapshot of a VM or LXC container. Args: vmid: Target VM or Container ID. snapname: Name for the snapshot (alphanumeric and dashes/underscores, e.g. 'pre-upgrade-v1'). description: Informative description or changelog for the snapshot. vmstate: For QEMU VMs only. If True, saves running RAM state (live snapshot). node: Optional node name. |
| pve_list_snapshotsB | List all existing snapshots and hierarchy for a VM or LXC container. Args: vmid: Target VM or Container ID. node: Optional node name. |
| pve_rollback_snapshotB | Revert a VM or LXC container to a previous snapshot state. Args: vmid: Target VM or Container ID. snapname: Name of the snapshot to restore. start_after: If True, automatically powers the system on after rollback completes. node: Optional node name. |
| pve_delete_snapshotA | Delete a snapshot from a VM or LXC container. SAFETY REQUIREMENT: Deleting a snapshot merges or purges historical states. If confirmation_phrase is not provided, this tool will safely block and ask you to confirm with confirmation_phrase='CONFIRM_DELETE_SNAPSHOT_'. Args: vmid: Target VM or Container ID. snapname: Snapshot identifier to delete. confirmation_phrase: Explicit confirmation phrase (e.g. 'CONFIRM_DELETE_SNAPSHOT_pre-upgrade'). node: Optional node name. |
| pve_edit_systemB | Edit configuration parameters of an existing VM or container (CPU cores, RAM, notes, tags, onboot). Args: vmid: Target VM or Container ID. cores: Number of virtual CPU cores to assign. memory_mb: Allocated RAM in megabytes (e.g. 4096 for 4GB). description: Notes / documentation markdown string. tags: Semicolon or comma-separated tags (e.g. 'web;production;docker'). onboot: Whether the system automatically starts on Proxmox node boot. node: Optional node name. |
| pve_set_cloudinitB | Configure Cloud-Init parameters on a QEMU virtual machine. Args: vmid: Target VM ID. ciuser: Default cloud-init username (e.g. 'ubuntu' or 'debian'). cipassword: User password. sshkeys: URL-encoded or raw OpenSSH public key string. ipconfig0: IP addressing config (e.g. 'ip=dhcp' or 'ip=192.168.1.50/24,gw=192.168.1.1'). nameserver: DNS nameserver IP. searchdomain: DNS search domain. node: Optional node name. |
| pve_resize_diskB | Incrementally expand the storage capacity of a virtual disk. Args: vmid: Target VM or Container ID. disk: Disk device identifier (e.g. 'scsi0', 'virtio0', or 'rootfs'). add_gb: Size in gigabytes to expand by (e.g. 10 adds 10GB). node: Optional node name. |
| pve_clone_systemB | Clone a new VM or LXC container from an existing template or system. Args: source_vmid: Source template or instance VMID. new_vmid: Unique ID for the newly created instance (e.g. 301). new_name: Hostname or display name for the new system. full_clone: If True, makes an independent full clone. If False, creates a linked clone. target_storage: Storage pool name (e.g. 'local-lvm', 'fast-tier'). Optional. target_node: Target node name. Optional. |
| pve_create_lxcB | Create a new LXC container from an OS template tarball. Args: vmid: Unique Container ID (e.g. 255). hostname: Hostname for the container. ostemplate: Storage template path (e.g. 'local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst'). cores: Number of assigned CPU cores. memory_mb: Memory in megabytes. disk_gb: Root filesystem disk size in gigabytes. storage: Target storage pool (e.g. 'local-lvm' or 'fast-tier'). password: Root user password. ssh_public_key: Optional SSH public key to inject into /root/.ssh/authorized_keys. net0: Network interface configuration string. unprivileged: If True, provisions container in an unprivileged user namespace (recommended). node: Target node name. |
| pve_create_vmB | Create a new QEMU virtual machine. Args: vmid: Unique Virtual Machine ID (e.g. 150). name: Name / hostname of the virtual machine. cores: Number of virtual CPU cores. memory_mb: Memory in megabytes. disk_gb: Boot disk size in gigabytes. storage: Target storage pool (e.g. 'local-lvm', 'fast-tier'). iso_image: Optional ISO image path (e.g. 'local:iso/ubuntu-24.04-live-server-amd64.iso'). net0: Network interface configuration string. node: Target node name. |
| pve_trigger_backupB | Execute an immediate vzdump backup of a VM or container to a target storage pool. Args: vmid: Target VM or LXC Container ID. storage: Target backup storage pool (e.g. 'local', 'pbs-backup'). mode: Backup mode: 'snapshot' (live, zero downtime), 'suspend', or 'stop'. compression: Compression algorithm: 'zstd', 'gzip', or 'none'. node: Optional node name. |
| pve_list_backupsB | List available backup archives stored in a designated storage pool. Args: storage: Storage pool identifier (e.g. 'local', 'vault-backups'). node: Optional node name. |
| pve_get_firewallC | Inspect the firewall rules and security options active on a VM or container. Args: vmid: Target VM or LXC Container ID. node: Optional node name. |
| pve_set_firewall_ruleB | Add or modify a firewall rule on a VM or container. Args: vmid: Target VM or LXC Container ID. action: 'ACCEPT', 'DROP', or 'REJECT'. rule_type: 'in' (inbound) or 'out' (outbound). proto: Protocol: 'tcp', 'udp', 'icmp', etc. dport: Destination port or port range (e.g. '80', '443', '8000:8050'). comment: Brief description of the firewall rule. enable: Whether the rule is actively enabled. node: Optional node name. |
| pve_recommend_placementA | Analyze cluster resource congestion and recommend the optimal node for placing new workloads. Args: required_cores: Number of virtual CPU cores needed. required_mem_mb: RAM in megabytes required. required_disk_gb: Storage in gigabytes required. |
| pve_get_vnc_ticketA | Generate a time-limited NoVNC console ticket and URL for browser-based out-of-band management. Args: vmid: Target VM or LXC Container ID. node: Optional node name. |
| pve_export_terraformA | Export the complete live specification of a VM or container into a ready-to-run Terraform / OpenTofu (.tf) block. Args: vmid: Target VM or LXC Container ID. node: Optional node name. |
| pve_destroy_systemA | Safely delete and remove a virtual machine or LXC container. MANDATORY CONFIRMATION SAFETY GATES:
Args: vmid: Target ID of the VM or container to destroy. confirm_vmid: Must equal vmid as an explicit confirmation gate. confirmation_phrase: Must equal 'CONFIRM_DELETE_' (e.g. 'CONFIRM_DELETE_300'). purge_data: Whether to purge and release all associated virtual disks and backup files. node: Optional node name. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 26 tools
Most tools are clearly separated by resource and action, such as list_nodes vs list_systems and create_vm vs clone_system. Minor ambiguity exists between pve_get_system and pve_get_guest_network because both can return network-related information, and pve_export_terraform partially overlaps with configuration retrieval.
All tools use the pve_ snake_case prefix and nearly all follow a verb_noun pattern. The main exception is pve_lifecycle, which is noun-style rather than verb-style, but the naming remains highly predictable overall.
With 26 tools, the set is above the typical 3–15 range, but the broad Proxmox domain includes many distinct operations. Each tool generally earns its place, though the surface is slightly heavy and some specialized tools could potentially be consolidated.
The core VM/container lifecycle is well covered, including create, clone, edit, resize, lifecycle actions, destroy, snapshots, and Terraform export. However, notable gaps remain: backup restore/delete, firewall rule deletion, migration, task tracking, and node/storage network administration are missing, creating several dead ends.