Manage Proxmox VE via Cursor: QEMU, LXC, storage, HA, firewall, access.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Formal Cursor β Proxmox VE MCP integration β 212 tools covering QEMU VMs (incl. guest-agent network/file/guest-info/fsfreeze + bootstrap_cloudinit_vm / provision_vm + qm_set_vm), LXC (incl. provision_lxc, bootstrap_docker_lxc, crun Path B, DNS/SSH helpers, deploy_node_app), unified guest power, storage admin (incl. PBS plugin + status), cluster/tasks (incl. join), snapshots, backups, migration, HA, firewall, access control, replication, SDN write + apply, ACME order/renew, Ceph status/pools + gated OSD create/destroy, node network CRUD, console tickets/get_console_connection, and host reboot/shutdown. v1.9.0 adds optional dual-credential elevated mode (auth_write, D31) + provision_vm + Cursor day-2 auto-approve docs.
Repo: hackmods/cursor-proxmox-mcp
Docs: Setup guide Β· Wiki (docs/wiki/) Β· Publishing Β· Security Β· Contributing Β· API coverage Β· Changelog
Registered via tools/register.py (called from ProxmoxMCPServer._setup_tools()) β inventory locked by tools/inventory.py / tests/expected_tools.py (CI fails on drift).
| Domain | Tools |
|---|---|
| Nodes | get_nodes, get_node_status, list_node_networks + create/update/delete + reload_node_network, get_node_subscription, list_node_certificates, get_node_report, list_node_services, get_node_time, wake_node, reboot_node / shutdown_node (confirm=<node>) |
| Cluster / tasks | get_cluster_status, get_next_vmid, get_task_status, list_tasks, wait_for_task, get_version, get_mcp_capabilities, get_cluster_resources, get_cluster_log, get_cluster_options, get_cluster_join_info, join_cluster (confirm=JOIN) |
| QEMU | lifecycle + config (ISO/cloud-init/net/onboot/tags/description; optional wait=true) + get_vm_network / get_vm_guest_info / fsfreeze_vm / fsthaw_vm / push_to_vm / pull_from_vm (guest agent) + bootstrap_cloudinit_vm / provision_vm (one-shot create or cloneβCIβIP) + qm_set_vm + get_vm_status, get_vm_rrd_data, console tickets |
| LXC | lifecycle + config + suspend/resume (CRIU warn) + get_lxc_status / get_lxc_network / get_lxc_rrd_data + VNC/SPICE/termproxy; ssh_public_keys / docker_ready / nameserver / wait / onboot / description / tags on create; provision_lxc (one-shot createβstartβIPβSSH) / bootstrap_docker_lxc / prepare_lxc_for_docker (`docker_mode=auto |
| Guest (unified) | start/stop/shutdown/reboot/delete_guest, get_guest_status, get_guest_pending, move_guest_disk, get_console_connection (guest_type) |
| Snapshots / Backups | snapshot CRUD/rollback; one-shot backup CRUD; scheduled list/create/delete_backup_job |
| Storage | list, content, list_os_templates, list_isos, download-url, definition CRUD; PBS via create_storage(type=pbs) + get_pbs_storage_status |
| Migrate / HA | migrate_guest; HA groups + resources CRUD |
| Firewall | cluster + guest rules/options; aliases; IP sets + CIDR members; macros |
| Access | users, groups, roles, ACL, tokens, get_permissions, get_token_permissions |
| Replication | list/status/run/create/update/delete jobs |
| SDN | zones/vnets/subnets CRUD + list controllers/ipams/dns + apply_sdn |
| ACME | list + create account/plugin, delete plugin, order_acme_certificate / renew_acme_certificate |
| Ceph | status, list pools/OSDs/MONs/MGRs, pool CRUD; gated OSD: list_node_disks β propose_ceph_osd β create_ceph_osd/destroy_ceph_osd (typed confirm; create defaults dry_run=true) |
| Pools | list/get/create/update/delete |
get_next_vmid β list_os_templates / list_isos β list_node_networksprovision_lxc / provision_vm (preferred one-shot) or create_lxc / create_vm β wait_for_task β startcreate_snapshot before risky changes β update_*_config β get_guest_pending β reboot if neededmigrate_guest / HA / firewall / access / replication as neededGuest type unknown? Prefer unified tools (start_guest, stop_guest, shutdown_guest, reboot_guest, delete_guest, get_guest_status) with guest_type=qemu|lxc. Parallel *_vm / *_lxc names stay for existing prompts.
PyPI package name is cursor-proxmox-mcp (console scripts: cursor-proxmox-mcp, plus aliases proxmox-mcp-server / proxmox-mcp).
Note: The unrelated PyPI project
proxmox-mcp-serveris a different codebase. Always installcursor-proxmox-mcp.
Cursor MCP (published package β no checkout):
From a local checkout, use "args": ["--from", "C:/Users/YOU/Projects/cursor-proxmox-mcp", "cursor-proxmox-mcp"] instead.
Why uvx: it resolves dependencies into an isolated ephemeral env so Cursor does not depend on a hand-managed venv/PYTHONPATH.
Cursor MCP (direct Python β use absolute paths):
Restart the proxmox MCP server in Cursor after pulling new tools. Manual launchers: start.bat (Windows) / start.sh (Unix) β prefer uvx cursor-proxmox-mcp in mcp.json.
Runs: editable install β entrypoint smoke β ruff β pytest β inventory floor (β₯100 tools).
| Symptom | Fix |
|---|---|
spawn uvx ENOENT | Install uv (pip install uv or winget install astral-sh.uv), then restart Cursor |
ModuleNotFoundError: proxmox_mcp | Use uvx/uv run, or set PYTHONPATH=.../src for plain python |
ModuleNotFoundError: mcp.server.fastmcp | MCP SDK v2 dropped FastMCP β this server pins mcp<2. Reinstall from this checkout (pip install -e ".[dev]" / uvx --from .) so the cap applies |
PROXMOX_MCP_CONFIG ... must be set | Point env at proxmox-config/config.json (absolute path) |
| Auth OK but empty data / odd 403 | Privilege Separation Yes without token ACL β see SETUP.md |
403 on HA / firewall / keyctl | Token needs elevated role; prefer scoped mcp@pve over root@pam when possible |
| Tools missing in Cursor | Restart MCP server after git pull |
First-time cluster wiring (token, privsep, Cursor JSON, example prompts): SETUP.md. LXC shell / runtime IP needs opt-in host SSH (authorized_keys, optional host_overrides, reload MCP): SETUP.md β SSH for LXC exec.
Example proxmox-config/config.json:
Tool invocations are audited to the log file as tool_call name=β¦ ok=β¦ duration_ms=β¦ (secrets redacted). Set verbose: true or env PROXMOX_MCP_VERBOSE=1 for richer diagnostics without urllib3 spam. Details: proxmox-config/README.md β Logging.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/cursor-proxmox-mcp)<a href="https://allmcps.com/mcp/cursor-proxmox-mcp"><img src="https://allmcps.com/api/badge/cursor-proxmox-mcp?style=directory" alt="Cursor Proxmox MCP on AllMCPs" /></a>