Proxmox
STDIO高级Proxmox MCP虚拟化管理服务器
高级Proxmox MCP虚拟化管理服务器
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