Provides comprehensive management of Proxmox Virtual Environment infrastructure, including VM/LXC lifecycle operations, storage management, networking configuration, snapshots, backups, user permissions, and cluster monitoring through the Proxmox API.
Click on "Install 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., "@MCP Proxmox Serverlist all running VMs on the pve node"
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.
MCP Proxmox Server
Advanced Proxmox Model Context Protocol (MCP) server in Python exposing rich Proxmox utilities for discovery, lifecycle, networking, snapshots/backups, metrics, pools/permissions, and orchestration.
Guide reference: MCP Quickstart (Python)
Structure mirrors:
bsahane/mcp-ansible
Quick start
Related MCP server: ProxmoxMCP-Plus
.env configuration
Copy
.env.exampleto.envand edit values:
.env keys:
Notes:
Use an API token with appropriate ACLs; for discovery,
PVEAuditorat/is sufficient; for lifecycle, grant narrower roles (e.g.,PVEVMAdmin) on a pool.Using
.envavoids zsh history expansion issues with!in token IDs.
Run the MCP server (stdio)
Preferred (module form):
Or installed console script:
Configure in Cursor
Edit ~/.cursor/mcp.json (portable example):
Configure in Claude for Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
Tools reference
All tools are available via MCP. Destructive tools accept confirm, and most write operations support dry_run, wait, timeout, poll_interval.
Format below per tool:
Description
Example question → Possible answer (shape)
Core discovery
proxmox-list-nodesList cluster nodes (name, status, CPU/RAM/disk summary)
Example: "List cluster nodes"
Answer:
[ { "node": "pve", "status": "online", ... } ]
proxmox-node-statusDetailed node health (load, uptime, versions)
Example:
{ "node": "pve" }Answer:
{ "kversion": "...", "uptime": 123456, ... }
proxmox-list-vmsList VMs (filter by node, status, name substring)
Example:
{ "node": "pve", "status": "running" }Answer:
[ { "vmid": 100, "name": "web01", ... } ]
proxmox-vm-infoGet VM details by
vmidorname(+optional node), includes configExample:
{ "name": "web01" }Answer:
{ "selector": {...}, "config": {...} }
proxmox-list-lxcList LXC containers (filterable)
Example:
{ "node": "pve" }Answer:
[ { "vmid": 50001, "name": "ct01", ... } ]
proxmox-lxc-infoGet LXC details by
vmidorname(+optional node)Example:
{ "vmid": 50001 }Answer:
{ "selector": {...}, "config": {...} }
proxmox-list-storageList storages (types, free/used)
Example:
{}Answer:
[ { "storage": "local-lvm", "type": "lvmthin", ... } ]
proxmox-storage-contentList storage content (ISOs, templates, images)
Example:
{ "node": "pve", "storage": "local" }Answer:
[ { "volid": "local:iso/foo.iso", ... } ]
proxmox-list-bridgesList node bridges (vmbr...)
Example:
{ "node": "pve" }Answer:
[ { "iface": "vmbr0", ... } ]
proxmox-list-tasksRecent tasks (filter by node, user)
Example:
{ "node": "pve", "limit": 20 }Answer:
[ { "upid": "UPID:...", "status": "OK" }, ... ]
proxmox-task-statusCheck a task status
Example:
{ "upid": "UPID:..." }Answer:
{ "status": "stopped", "exitstatus": "OK" }
VM lifecycle
proxmox-clone-vmClone template VM to new VMID/name (supports target node, storage)
Example:
{ "source_vmid": 101, "new_vmid": 50009, "name": "web01", "storage": "local-lvm", "confirm": true, "wait": true }Answer:
{ "upid": "UPID:...", "status": {...} }
proxmox-create-vmCreate new VM from ISO/template (minimal config)
Example:
{ "node": "pve", "vmid": 200, "name": "web02", "iso": "debian.iso", "confirm": true }Answer:
{ "upid": "UPID:..." }
proxmox-delete-vmDelete VM (confirm, purge)
Example:
{ "name": "web01", "purge": true, "confirm": true }Answer:
{ "upid": "UPID:..." }
proxmox-start-vm/proxmox-stop-vm/proxmox-reboot-vm/proxmox-shutdown-vmManage power state (stop supports hard and timeout)
Example:
{ "name": "web01", "wait": true }Answer:
{ "upid": "UPID:...", "status": {...} }
proxmox-migrate-vmLive/offline migrate to another node
Example:
{ "name": "web01", "target_node": "pve2", "live": true }Answer:
{ "upid": "UPID:..." }
proxmox-resize-vm-diskGrow disk (GB) on target disk (e.g., scsi0)
Example:
{ "name": "web01", "disk": "scsi0", "grow_gb": 10, "confirm": true, "wait": true }Answer:
{ "upid": "UPID:...", "status": {...} }
proxmox-configure-vmSet whitelisted params (cores, memory, balloon, netX, agent, etc.)
Example:
{ "name": "web01", "params": { "memory": 4096, "cores": 4 }, "confirm": true }Answer:
{ "upid": "UPID:..." }or{ "result": null }
LXC lifecycle
proxmox-create-lxcCreate container from template (CPU/mem, rootfs size, net, storage)
Example:
{ "node": "pve", "vmid": 50050, "hostname": "ct01", "ostemplate": "debian-12.tar.zst", "confirm": true }Answer:
{ "upid": "UPID:..." }
proxmox-delete-lxc/proxmox-start-lxc/proxmox-stop-lxc/proxmox-configure-lxcManage container lifecycle and config
Cloud-init & networking
proxmox-cloudinit-setSet CI params (ipconfig0, sshkeys, ciuser/cipassword)
Example:
{ "name": "web01", "ipconfig0": "ip=192.168.1.50/24,gw=192.168.1.1", "confirm": true }Answer:
{ "upid": "UPID:..." }or{ "result": null }
proxmox-vm-nic-add/proxmox-vm-nic-removeAdd/remove NICs (bridge, model, VLAN)
proxmox-vm-firewall-get/proxmox-vm-firewall-setGet/set per-VM firewall state and rules
Images, templates, snapshots, backups
proxmox-upload-iso/proxmox-upload-templateUpload ISO or LXC template to storage
proxmox-template-vmConvert VM to template
proxmox-list-snapshots/proxmox-create-snapshot/proxmox-delete-snapshot/proxmox-rollback-snapshotManage snapshots; rollback supports
wait
proxmox-backup-vm/proxmox-restore-vmRun vzdump and restore archives
Metrics and monitoring
proxmox-vm-metricsRRD metrics for VM (timeframe, cf)
proxmox-node-metricsRRD metrics for node
Pools, users, permissions
proxmox-list-pools/proxmox-create-pool/proxmox-delete-pool/proxmox-pool-add/proxmox-pool-removeproxmox-list-users/proxmox-list-roles/proxmox-assign-permission
Orchestration helpers
proxmox-wait-taskPoll a task until done/timeout
proxmox-register-vm-as-hostEmit JSON/INI snippet for Ansible inventory (hostname, IP, SSH user/key)
proxmox-guest-exec(optional)Run a command via QEMU Guest Agent (requires agent in guest)
Examples
List nodes:
{}forproxmox-list-nodesVMs on node
pve:{ "node": "pve" }forproxmox-list-vmsClone a template:
{ "source_vmid": 101, "new_vmid": 50009, "name": "web01", "storage": "local-lvm", "confirm": true, "wait": true }Configure Cloud-init IP:
{ "name": "web01", "ipconfig0": "ip=192.168.1.50/24,gw=192.168.1.1", "confirm": true }
Notes
Server uses stdio transport; prints only MCP protocol to stdout. Logs go to stderr.
Authentication uses your environment variables and/or
.envfile.Name collisions across nodes return clear errors unless you specify
node.
Development
License
MIT