Open-source MCP server for secure Proxmox node, VM, and LXC operations.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Turn your Proxmox cluster into an AI-driven platform with 140+ tools for automation, monitoring, and controlled execution.
Open source MCP server for Proxmox VE, powered by NANDI Services.
nandi-proxmox-mcp exposes Proxmox inventory, lifecycle, storage, backup, networking, firewall, access, monitoring, SSH diagnostics, and guarded remote/container operations without removing the safety rails needed for production clusters.
read-only, read-execute, full.PVE_MODULE_MODE=core|advanced.PVE_CATEGORIES, PVE_TOOL_BLACKLIST, PVE_TOOL_WHITELIST.confirm=true.listNodes, getVMStatus, startVM, stopContainer.stdio transport for MCP clients and Streamable HTTP transport for controlled remote deployments.The server needs two trust channels and both are preserved intentionally:
pct exec, batch SSH diagnostics, and container-level Docker inspection tools.pct and SSH-based diagnostics.More detail: docs/PERMISSIONS.md
Operations marked destructive do not execute unless the caller sends confirm=true.
Examples:
pve_exec_in_containerThe server returns a structured CONFIRMATION_REQUIRED error when confirmation is missing. This behavior is unchanged and reinforced.
confirm=true is supplied by the agent, not by you. A model that reads the rejection can simply
retry with the flag set, so on its own that check guards against an accident rather than against a
confident agent β and it never asks you anything.
So the 47 tools that require confirmation are also announced to the client as needing a person:
In Claude Code 2.1.199 and later, a tool marked this way prompts on every call β including in
auto and bypassPermissions modes β and cannot be pre-approved by an allow rule or by a
PreToolUse hook returning allow. Under --permission-prompt-tool an automated approval is
converted to a denial, and Remote Control withholds one-tap approval and sends you to the full
prompt. The operator who answered is the one who authorised the operation.
One caveat, measured on 2.1.229 rather than taken from the documentation: the prompt still offers
"Yes, and don't ask again", even though the documentation says a flagged tool has no such option.
Choosing it writes an allow rule that does not retire the gate β the next call prompts again.
So the behaviour is right and only the button is misleading. Do not read its absence as the signal
that the guard is on; verify by calling a gated tool twice.
Starting and resuming a guest are deliberately left out: they change state without destroying anything, and a guard people resent is a guard people route around.
setup additionally writes matching permissions.ask rules into .claude/settings.json, which
cover Claude Code versions that predate the annotation. Rules are evaluated deny, then ask, then
allow β first match wins β so an ask rule survives both bypassPermissions and a later
"yes, don't ask again". For an install that was configured by hand rather than through setup:
Both mechanisms are Claude Code specific. In any other client the guards are confirm=true and the
access tier, so choose the tier deliberately there.
read-only
read-execute
full
PVE_MODULE_MODE=core hides advanced tools without renaming or removing canonical tool IDs from the codebase.
Required:
PROXMOX_HOSTPROXMOX_USERPROXMOX_REALMPROXMOX_TOKEN_NAMEPROXMOX_TOKEN_SECRETPROXMOX_SSH_HOSTPROXMOX_SSH_USERPROXMOX_SSH_KEY_PATHOptional:
PROXMOX_PORT default 8006PROXMOX_SSH_PORT default 22PROXMOX_ALLOW_INSECURE_TLS default falsePVE_ACCESS_TIER=read-only|read-execute|fullPVE_MODULE_MODE=core|advancedPVE_CATEGORIESPVE_TOOL_BLACKLISTPVE_TOOL_WHITELISTHTTP transport:
MCP_TRANSPORT=stdio|httpMCP_HOST default 0.0.0.0MCP_PORT default 3000MCP_ALLOWED_HOSTSMCP_ALLOWED_ORIGINSMCP_RATE_LIMIT_WINDOW_MSMCP_RATE_LIMIT_MAXMCP_MAX_BODY_SIZE_BYTESMCP_HEADERS_TIMEOUT_MSMCP_REQUEST_TIMEOUT_MSMCP_KEEPALIVE_TIMEOUT_MSMCP_MAX_HEADERS_COUNTSetup writes one credentials file per configured Proxmox,
.nandi-proxmox-mcp/<instance>.json, plus a registration entry in each client
config it was asked for β .mcp.json for Claude Code and .vscode/mcp.json for
VS Code, by default both.
The credentials file is the only one holding the token, and it is gitignored.
When NANDI_PROXMOX_CONFIG is not set, the server discovers it: a single
configured instance is used automatically, and more than one is an error naming
them rather than a guess.
The config loader now rejects:
Never used an MCP before? Start with docs/EMPEZAR.md β a step-by-step guide (in Spanish) that assumes no prior MCP knowledge and covers creating the Proxmox token, which is the part that trips most people up.
You need an API token from your own Proxmox first. This prints the commands that create one, ready to paste into the Proxmox shell β it connects to nothing:
Then guided setup. By default this writes config for Claude Code
(.mcp.json) and VS Code (.vscode/mcp.json), merging into either file if
it already exists:
Start with --access-tier read-only. The server's built-in default is full,
which exposes every destructive tool including arbitrary command execution;
passing the flag writes the tier explicitly into the client config so the
choice is visible rather than implicit. Raise it once you trust the setup.
Pick specific clients, or print a block for any other MCP client:
.mcp.json holds only a config path and policy settings, so it is safe to
commit and share. Your API token stays in .nandi-proxmox-mcp/config.json,
which is gitignored.
Direct run with environment variables:
This MCP server operates real Proxmox infrastructure and is not a sandboxed environment.
The following risks are inherent to the system design:
Privileged Operations
Full access tier and container execution capabilities can perform destructive or system-level actions.
SSH Execution Boundary
Remote command execution relies on SSH and inherits the security posture of the target system.
Optional Insecure TLS Mode
When enabled (PROXMOX_ALLOW_INSECURE_TLS=true), TLS certificate validation is bypassed and may expose connections to MITM attacks. Intended for lab use only.
External Dependency Synchronization
Package distribution and listing visibility depend on npm, MCP Registry, and marketplace propagation timing.
Users are responsible for:
Factual signals from GitHub, npm, and our automated checks β not a rating.
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/nandi-proxmox-mcp)<a href="https://allmcps.com/mcp/nandi-proxmox-mcp"><img src="https://allmcps.com/api/badge/nandi-proxmox-mcp?style=directory" alt="Nandi Proxmox MCP on AllMCPs" /></a>