Proxmox
STDIOAdvanced Proxmox MCP server providing comprehensive virtualization management including VMs, containers, networking, and orchestration
Advanced Proxmox MCP server providing comprehensive virtualization management including VMs, containers, networking, and orchestration
Advanced Proxmox Model Context Protocol (MCP) server in Python exposing rich Proxmox utilities for discovery, lifecycle, networking, snapshots/backups, metrics, pools/permissions, and orchestration.
bsahane/mcp-ansiblegit clone https://github.com/bsahane/mcp-proxmox.git cd mcp-proxmox python3 -m venv .venv source .venv/bin/activate python -m pip install -U pip pip install -r requirements.txt # (Optional) install the package locally pip install -e .
.env.example to .env and edit values:cp .env.example .env
.env keys:
PROXMOX_API_URL="https://proxmox.example.com:8006" PROXMOX_TOKEN_ID="root@pam!mcp-proxmox" PROXMOX_TOKEN_SECRET="<secret>" PROXMOX_VERIFY="true" PROXMOX_DEFAULT_NODE="pve" PROXMOX_DEFAULT_STORAGE="local-lvm" PROXMOX_DEFAULT_BRIDGE="vmbr0"
Notes:
PVEAuditor at / is sufficient; for lifecycle, grant narrower roles (e.g., PVEVMAdmin) on a pool..env avoids zsh history expansion issues with ! in token IDs.Preferred (module form):
source .venv/bin/activate python -m proxmox_mcp.server
Or installed console script:
source .venv/bin/activate proxmox-mcp
Edit ~/.cursor/mcp.json (portable example):
{ "mcpServers": { "proxmox-mcp": { "command": "python", "args": ["-m", "proxmox_mcp.server"] } } }
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{ "mcpServers": { "proxmox-mcp": { "command": "python", "args": ["-m", "proxmox_mcp.server"] } } }
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:
proxmox-list-nodes
[ { "node": "pve", "status": "online", ... } ]proxmox-node-status
{ "node": "pve" }{ "kversion": "...", "uptime": 123456, ... }proxmox-list-vms
{ "node": "pve", "status": "running" }[ { "vmid": 100, "name": "web01", ... } ]proxmox-vm-info
vmid or name (+optional node), includes config{ "name": "web01" }{ "selector": {...}, "config": {...} }proxmox-list-lxc
{ "node": "pve" }[ { "vmid": 50001, "name": "ct01", ... } ]proxmox-lxc-info
vmid or name (+optional node){ "vmid": 50001 }{ "selector": {...}, "config": {...} }proxmox-list-storage
{}[ { "storage": "local-lvm", "type": "lvmthin", ... } ]proxmox-storage-content
{ "node": "pve", "storage": "local" }[ { "volid": "local:iso/foo.iso", ... } ]proxmox-list-bridges
{ "node": "pve" }[ { "iface": "vmbr0", ... } ]proxmox-list-tasks
{ "node": "pve", "limit": 20 }[ { "upid": "UPID:...", "status": "OK" }, ... ]proxmox-task-status
{ "upid": "UPID:..." }{ "status": "stopped", "exitstatus": "OK" }proxmox-clone-vm
{ "source_vmid": 101, "new_vmid": 50009, "name": "web01", "storage": "local-lvm", "confirm": true, "wait": true }{ "upid": "UPID:...", "status": {...} }proxmox-create-vm
{ "node": "pve", "vmid": 200, "name": "web02", "iso": "debian.iso", "confirm": true }{ "upid": "UPID:..." }proxmox-delete-vm
{ "name": "web01", "purge": true, "confirm": true }{ "upid": "UPID:..." }proxmox-start-vm / proxmox-stop-vm / proxmox-reboot-vm / proxmox-shutdown-vm
{ "name": "web01", "wait": true }{ "upid": "UPID:...", "status": {...} }proxmox-migrate-vm
{ "name": "web01", "target_node": "pve2", "live": true }{ "upid": "UPID:..." }proxmox-resize-vm-disk
{ "name": "web01", "disk": "scsi0", "grow_gb": 10, "confirm": true, "wait": true }{ "upid": "UPID:...", "status": {...} }proxmox-configure-vm
{ "name": "web01", "params": { "memory": 4096, "cores": 4 }, "confirm": true }{ "upid": "UPID:..." } or { "result": null }proxmox-create-lxc
{ "node": "pve", "vmid": 50050, "hostname": "ct01", "ostemplate": "debian-12.tar.zst", "confirm": true }{ "upid": "UPID:..." }proxmox-delete-lxc / proxmox-start-lxc / proxmox-stop-lxc / proxmox-configure-lxc
proxmox-cloudinit-set
{ "name": "web01", "ipconfig0": "ip=192.168.1.50/24,gw=192.168.1.1", "confirm": true }{ "upid": "UPID:..." } or { "result": null }proxmox-vm-nic-add / proxmox-vm-nic-remove
proxmox-vm-firewall-get / proxmox-vm-firewall-set
proxmox-upload-iso / proxmox-upload-template
proxmox-template-vm
proxmox-list-snapshots / proxmox-create-snapshot / proxmox-delete-snapshot / proxmox-rollback-snapshot
waitproxmox-backup-vm / proxmox-restore-vm
proxmox-vm-metrics
proxmox-node-metrics
proxmox-list-pools / proxmox-create-pool / proxmox-delete-pool / proxmox-pool-add / proxmox-pool-removeproxmox-list-users / proxmox-list-roles / proxmox-assign-permissionproxmox-wait-task
proxmox-register-vm-as-host
proxmox-guest-exec (optional)
{} for proxmox-list-nodespve: { "node": "pve" } for proxmox-list-vms{ "source_vmid": 101, "new_vmid": 50009, "name": "web01", "storage": "local-lvm", "confirm": true, "wait": true }{ "name": "web01", "ipconfig0": "ip=192.168.1.50/24,gw=192.168.1.1", "confirm": true }.env file.node.# Lint/type-check as needed (not included by default)
MIT