ProxmoxMCP-Plus

Run day-to-day Proxmox VE work, from VMs and LXCs to snapshots, backups and ISOs, from an MCP client

By rekkles (individual) Python Local · stdio Cloud platformsDevOps and monitoring

70 popularity score ★ 644 ↓ 10k/mo

Connect your client

Local (PyPI)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs PROXMOX_HOST, PROXMOX_USER, PROXMOX_TOKEN_NAME, PROXMOX_TOKEN_VALUE. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add proxmoxmcp-plus -e PROXMOX_HOST=<PROXMOX_HOST> -e PROXMOX_USER=<PROXMOX_USER> -e PROXMOX_TOKEN_NAME=<PROXMOX_TOKEN_NAME> -e PROXMOX_TOKEN_VALUE=<PROXMOX_TOKEN_VALUE> -- uvx proxmox-mcp-plus
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "proxmoxmcp-plus": {
      "command": "uvx",
      "args": [
        "proxmox-mcp-plus"
      ],
      "env": {
        "PROXMOX_HOST": "<PROXMOX_HOST>",
        "PROXMOX_USER": "<PROXMOX_USER>",
        "PROXMOX_TOKEN_NAME": "<PROXMOX_TOKEN_NAME>",
        "PROXMOX_TOKEN_VALUE": "<PROXMOX_TOKEN_VALUE>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "proxmoxmcp-plus": {
      "command": "uvx",
      "args": [
        "proxmox-mcp-plus"
      ],
      "env": {
        "PROXMOX_HOST": "<PROXMOX_HOST>",
        "PROXMOX_USER": "<PROXMOX_USER>",
        "PROXMOX_TOKEN_NAME": "<PROXMOX_TOKEN_NAME>",
        "PROXMOX_TOKEN_VALUE": "<PROXMOX_TOKEN_VALUE>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "proxmoxmcp-plus": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "proxmox-mcp-plus"
      ],
      "env": {
        "PROXMOX_HOST": "<PROXMOX_HOST>",
        "PROXMOX_USER": "<PROXMOX_USER>",
        "PROXMOX_TOKEN_NAME": "<PROXMOX_TOKEN_NAME>",
        "PROXMOX_TOKEN_VALUE": "<PROXMOX_TOKEN_VALUE>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.proxmoxmcp-plus]
command = "uvx"
args = ["proxmox-mcp-plus"]

[mcp_servers.proxmoxmcp-plus.env]
PROXMOX_HOST = "<PROXMOX_HOST>"
PROXMOX_USER = "<PROXMOX_USER>"
PROXMOX_TOKEN_NAME = "<PROXMOX_TOKEN_NAME>"
PROXMOX_TOKEN_VALUE = "<PROXMOX_TOKEN_VALUE>"
Gemini CLITerminal
gemini mcp add --scope user -e PROXMOX_HOST=<PROXMOX_HOST> -e PROXMOX_USER=<PROXMOX_USER> -e PROXMOX_TOKEN_NAME=<PROXMOX_TOKEN_NAME> -e PROXMOX_TOKEN_VALUE=<PROXMOX_TOKEN_VALUE> proxmoxmcp-plus uvx -- proxmox-mcp-plus

Settings 12

PROXMOX_HOST Required: Proxmox VE host name or address.
PROXMOX_USER Required: Proxmox user the token belongs to, e.g. root@pam.
PROXMOX_TOKEN_NAME Required: API token name.
PROXMOX_TOKEN_VALUE Required: API token secret.
PROXMOX_PORT Optional: API port, 8006 by default.
PROXMOX_VERIFY_SSL Optional: Verify the TLS certificate; true by default, false only works with PROXMOX_DEV_MODE=true.
PROXMOX_MCP_CONFIG Optional: Path to a JSON config file used instead of the variables above; needed for SSH tools and multiple targets.
COMMAND_POLICY_MODE Optional: Command execution policy; deny_all by default.
COMMAND_POLICY_HIGH_RISK_MODE Optional: Handling of high-risk actions such as deletes; audit_only by default.
MCP_TOOL_ALLOWLIST Optional: Comma-separated tool names to expose; MCP_TOOL_DENYLIST hides tools instead.
MCP_CODE_MODE Optional: Set true to expose only the three Code Mode tools.
PROXMOX_JOBS_SQLITE_PATH Optional: Where job history is stored; proxmox-jobs.sqlite3 by default.

What it does

ProxmoxMCP-Plus is a community-built Python server that talks to the Proxmox VE API with an API token and turns common operator tasks into MCP tools. It can list nodes, storage, bridges and cluster status; create, clone, start, stop, reconfigure and delete virtual machines and LXC containers; take, roll back and remove snapshots; create, restore and delete backups; download and remove ISO images; and read node syslogs, cluster logs, task logs and firewall logs.

Slow Proxmox operations come back with a server-side job_id next to the raw Proxmox UPID. Jobs are kept in a local SQLite file (proxmox-jobs.sqlite3 by default) so they can be polled, retried or cancelled after a restart, with an audit trail. One process can drive several Proxmox targets defined in its config file.

The same code can also run as a Streamable HTTP MCP endpoint (Docker, with a bearer key and optional OAuth backed by PostgreSQL) or as an OpenAPI bridge for plain HTTP tooling. An opt-in Code Mode replaces the full catalog with three tools that run short scripts in a sandbox calling the other tools.

What the README leaves out, from the v0.6.2 source: the full catalog registers 57 tools, three of which (container commands, node commands and container SSH key updates) only appear when an ssh section is configured. When the server is set up from environment variables alone, COMMAND_POLICY_MODE defaults to deny_all and high-risk actions such as delete_vm default to audit_only, meaning they are logged but not blocked unless an approval token is required (src/proxmox_mcp/config/loader.py).

What it needs

RuntimePython

uv for the uvx command (or pip install proxmox-mcp-plus). A reachable Proxmox VE host (API on port 8006 by default) and a Proxmox API token: user, token name and token secret, with only the permissions you need. Running commands inside VMs needs the QEMU Guest Agent in the guest; container and node commands need SSH access to the Proxmox node set in the config file's ssh section. The HTTP and OAuth modes need Docker, and OAuth also needs PostgreSQL.

Limits

TLS verification cannot be switched off with PROXMOX_VERIFY_SSL=false alone: startup refuses unless PROXMOX_DEV_MODE=true is also set (loader.py). The SSH-backed tools have no environment-variable setup; they need a JSON config file with an ssh section, and execute_node_command also needs allow_node_commands. Code Mode caps scripts at 64,000 characters, 100 MB memory, 25 tool calls, 30 seconds and 16 KB of output, and a failed script does not undo changes already made. Asking to cancel a job does not finish it; it must be polled until it is cancelled before retry_job works. Unknown names in a tool allowlist or denylist stop the server from starting.

Who it suits

Suits Proxmox VE home-lab owners and small operations teams who want an assistant to inspect a cluster and carry out routine VM, LXC, snapshot and backup work, and who can create a scoped API token. Because it writes and deletes by default, plan on a limited token, a tool allowlist or approval tokens before giving it a production cluster. Teams that also need HTTP automation get an OpenAPI bridge from the same project. It is a community project, not from Proxmox Server Solutions, and works only on Proxmox VE.

Tools 60

list_targets
List the configured Proxmox targets and whether each is reachable
get_nodes
List cluster nodes
get_node_status
Show status details for one node
list_bridges
List network bridges on a node
get_storage
List storage pools and usage
get_cluster_status
Show overall cluster health
list_jobs
List tracked long-running jobs
get_job
Fetch one tracked job
poll_job
Refresh a job's status from Proxmox
cancel_job
Ask Proxmox to cancel a running job
retry_job
Run a failed or cancelled job again
reconcile_job
Bring a stored job record back in line with Proxmox
get_vms
List virtual machines
get_vm_config
Show a VM's configuration
set_vm_description
Change a VM's description
get_next_vmid
Get the next free VM ID
update_vm_config
Change VM settings such as CPU, memory or cloud-init keys
get_vm_ip_addresses
Read a VM's IP addresses through the guest agent
create_vm
Create a new VM
clone_vm
Clone a VM or template
execute_vm_command
Run a command inside a VM through the QEMU guest agent
start_vm
Start a VM
stop_vm
Force-stop a VM
shutdown_vm
Shut a VM down cleanly
reset_vm
Hard-reset a VM
delete_vm
Delete a VM
get_containers
List LXC containers
get_container_config
Show an LXC container's configuration
get_container_ip
Read an LXC container's IP addresses
create_container
Create an LXC container
start_container
Start an LXC container
stop_container
Stop an LXC container
restart_container
Restart an LXC container
delete_container
Delete an LXC container
update_container_resources
Change a container's CPU, memory or disk size
update_container_network
Change a container's network settings
set_container_description
Change a container's description
execute_container_command
Run a shell command in a container over SSH (needs ssh config)
execute_node_command
Run a shell command on a Proxmox node (needs ssh config with allow_node_commands)
update_container_ssh_keys
Add or replace a container's authorized SSH keys (needs ssh config)
list_snapshots
List snapshots of a VM or container
create_snapshot
Take a snapshot
rollback_snapshot
Roll a guest back to a snapshot
delete_snapshot
Remove a snapshot
list_isos
List ISO images on storage
list_templates
List container templates on storage
download_iso
Download an ISO image to storage from a URL
delete_iso
Remove an ISO image
list_backups
List backups
create_backup
Back up a VM or container
restore_backup
Restore a guest from a backup
delete_backup
Remove a backup
get_node_syslog
Read a node's system log
get_cluster_log
Read the cluster log
get_task_log
Read the log of any Proxmox task by UPID
get_node_firewall_log
Read a node's firewall log
get_guest_firewall_log
Read a guest's firewall log
proxmox_code_search
Code Mode only: search the tool catalog
proxmox_code_get_schema
Code Mode only: get a tool's argument schema
proxmox_code_execute
Code Mode only: run a sandboxed script that calls tools

Similar servers