homebutler
Homelab operations over MCP: change reports, Docker, backups, app installs and Proxmox guests
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
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs PROXMOX_HOST, PROXMOX_USER, PROXMOX_TOKEN_NAME, PROXMOX_TOKEN_VALUE. Replace each <NAME> with your value.
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{
"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>"
}
}
}
}{
"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>"
}
}
}
}{
"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>"
}
}
}
}[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 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-plusPROXMOX_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. |
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).
| Runtime | Python |
|---|
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.
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.
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.
list_targetsget_nodesget_node_statuslist_bridgesget_storageget_cluster_statuslist_jobsget_jobpoll_jobcancel_jobretry_jobreconcile_jobget_vmsget_vm_configset_vm_descriptionget_next_vmidupdate_vm_configget_vm_ip_addressescreate_vmclone_vmexecute_vm_commandstart_vmstop_vmshutdown_vmreset_vmdelete_vmget_containersget_container_configget_container_ipcreate_containerstart_containerstop_containerrestart_containerdelete_containerupdate_container_resourcesupdate_container_networkset_container_descriptionexecute_container_commandexecute_node_commandupdate_container_ssh_keyslist_snapshotscreate_snapshotrollback_snapshotdelete_snapshotlist_isoslist_templatesdownload_isodelete_isolist_backupscreate_backuprestore_backupdelete_backupget_node_syslogget_cluster_logget_task_logget_node_firewall_logget_guest_firewall_logproxmox_code_searchproxmox_code_get_schemaproxmox_code_execute