proxmox-mcps
Provides comprehensive management of Proxmox VE environments, including CRUD and lifecycle operations for QEMU VMs and LXC containers, cluster administration, storage management, networking, high availability, replication, SDN, and node-level tasks such as apt, DNS, and systemd services.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@proxmox-mcpslist all VMs on the cluster"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
A Model Context Protocol server that exposes your Proxmox VE cluster to AI assistants (Claude Code, Cursor, Windsurf, …). VMs, containers, storage, network, HA, replication, SDN, node admin — 195 tools over stdio, HTTP+SSE, or streamable HTTP.
User-confirmation gates every destructive call. No silent deletes.
Why
Proxmox has no first-class AI surface. Existing bridges are usually a thin wrapper around one or two endpoints. This server exposes the entire Proxmox API surface — VMs and containers, lifecycle, diagnostics, console access, replication, SDN, HA, cluster jobs, node admin — and wraps every destructive call behind an explicit yes/no prompt the model has to relay to you.
195 tools across 9 functional areas (see Tool catalog)
3 transports — stdio for Claude Code, streamable HTTP for remote clients, SSE legacy
Approval-gated destructive ops —
delete_vm,wipe_node_disk,apply_sdn, … wait for you to typeyesSSRF guard for server-side downloads (URL allowlist, RFC1918 / loopback rejection)
Pluggable job store — in-memory (default) or SQLite for tracking long-running operations across restarts
QEMU guest agent — exec inside the guest, fstrim, fsinfo, hostname, OS info, users, network
SSH-backed
execute_container_command— runspct execon the host to drop into a container
Related MCP server: Proxmox MCP Server
Install
From npm
# One-off run (always picks the latest published version)
npx proxmox-mcps
# Or install globally
npm install -g proxmox-mcps
proxmox-mcpsThe package ships three binaries:
Binary | Purpose |
| MCP server (the thing you wire into Claude Code / your client) |
| Validate |
| Print every registered tool (or just the destructive ones) |
From source
git clone https://github.com/ngocdd/proxmox-mcps.git
cd proxmox-mcps
npm install
cp .env.example .env # then fill in host + API token
npm run check-config # validates your env without starting the server
npm run build # tsc → dist/
npm start # node dist/index.jsConfigure
1. Get a Proxmox API token
Proxmox UI → Datacenter → Permissions → API Tokens → Add
User:
root@pamToken ID:
mcpUncheck "Privilege Separation" (so the token inherits the user's full privileges)
Copy the generated UUID — that goes into
PROXMOX_TOKEN_VALUE
2. Wire it into Claude Code
Install at user scope so the same proxmox server follows you across every project:
claude mcp add proxmox --scope user \
-e PROXMOX_HOST=proxmox.example.com \
-e PROXMOX_PORT=8006 \
-e PROXMOX_USER=root@pam \
-e PROXMOX_TOKEN_NAME=mcp \
-e PROXMOX_TOKEN_VALUE=<uuid> \
-e PROXMOX_VERIFY_SSL=false \
-e PROXMOX_DEV_MODE=true \
-- npx -y proxmox-mcps
--scope userwrites to~/.claude.json(or~/.config/claude/on Linux). Use--scope projectto commit a.mcp.jsonentry, or--scope localfor a one-off project-only entry.
Restart Claude Code. Verify with /mcp — you should see proxmox with 195 tools.
Inspect or remove later:
claude mcp list # show all configured servers
claude mcp get proxmox # show env vars + command
claude mcp remove proxmox # delete the entryA drop-in .mcp.json snippet is in .mcp.json.example.
3. Or use any other MCP client
The server speaks the standard MCP protocol over three transports. Pick one via MCP_TRANSPORT:
Transport | When to use |
| Default. Local clients (Claude Code, Cursor, Windsurf) |
| Remote clients, modern MCP-over-HTTP |
| Legacy SSE-only clients |
For STREAMABLE / SSE the server listens on MCP_HOST:MCP_PORT and exposes /mcp (JSON-RPC) plus /health.
Tool catalog
195 tools, grouped by surface. Run proxmox-mcps-print-tools for the canonical list with risk classifications.
Group | Count | Highlights |
Cluster status | 1 |
|
Pools | 5 | CRUD + |
HA | 11 | Resources + groups + migrate-on-fail |
VM (QEMU) | 43 | Lifecycle, config, diagnostics, console (VNC/SPICE/termproxy/monitor), migration, 12 QEMU guest-agent tools |
Container (LXC) | 27 | Lifecycle, config, diagnostics, SSH-backed |
Snapshots | 4 |
|
Backups | 13 | On-demand + scheduled (vzdump) jobs + restore + prune |
ISO / templates | 4 | List / download / delete (URL-guarded) |
Tasks & jobs | 8 | Proxmox task log + long-running MCP job tracking |
Storage | 5 | list / get / create / update / delete (lvm, zfs, nfs, cifs, pbs, dir, …) |
Replication | 7 | ZFS replication jobs CRUD + status |
SDN | 21 | Controllers / zones / vnets / subnets + |
Node admin | 46 | apt · DNS · hosts · time · config · journal · syslog · pvereport · systemd services · network (bonds/bridges/VLANs/OVS) · disks + ZFS · bulk start/stop/migrate · subscription · certificates |
Risk profile (auto-discovered by print-tools):
Risk | Count | Behaviour |
| 79 | Runs immediately. Read-only / inspection tools. |
| 72 | Runs immediately. State-changing but recoverable. |
| 19 | Confirmation prompt (returns a yes/no request to the model). |
| 25 | Confirmation prompt + irreversible — extra warning. |
Audit-only logging for medium-risk tools is independent of the destructive gate. See Safety model.
Safety model
Destructive & high-risk tools
Any tool classified high or destructive does not run immediately. The server returns a confirmation prompt that the model must show you:
⚠️ Confirmation required: 'delete_vm' is DESTRUCTIVE and cannot be undone.
Target: node=pve, vmid=100
Ask the user to reply 'yes' to proceed, or anything else to cancel.
If they confirm, re-invoke this tool with `confirm: true` added to the arguments.You reply "yes", the model calls the same tool again with confirm: true, and the operation proceeds. Every destructive action is gated behind an explicit, visible human yes/no.
To skip the prompt for fully trusted automation:
PROXMOX_DANGEROUSLY_ALLOW_DESTRUCTIVE=trueAudit-only logging for medium-risk tools is independent:
PROXMOX_MCP_AUDIT_ONLY=trueInspect the risk registry at any time:
proxmox-mcps-print-tools # all 195 tools with risk levels
proxmox-mcps-print-tools destructive # only the 25 destructive onesSSRF guard for server-side downloads
download_iso (and any future *_from_url tool) hands the URL to Proxmox, which fetches it server-side. Before that happens, the URL is checked:
Schemes must be in
PROXMOX_DOWNLOAD_ALLOWED_SCHEMES(default:http,https).Hosts are resolved and rejected if they fall in RFC1918, RFC4193, loopback, link-local, CGNAT, multicast, or any other reserved range. The Proxmox host cannot be turned into an SSRF proxy against your internal network.
An optional operator allowlist (
PROXMOX_DOWNLOAD_ALLOWED_HOSTS) supports suffix (.corp.example), bare-IP, or CIDR matches.
See .env.example for the full reference.
VM config allowlist
update_vm_config rejects keys that can attach host PCI/USB devices, override SMBIOS, or change the QEMU machine type — see src/safety/vm-config-allowlist.ts.
Environment reference
All variables can be passed inline, in .env, or as MCP server env vars. See .env.example for the canonical list with defaults.
Var | Required | Default | Purpose |
| ✅ | — | Proxmox API hostname / IP |
|
| Proxmox API port | |
| ✅ | — | API user ( |
| ✅ | — | Token ID |
| ✅ | — | Token secret UUID |
|
| Set | |
|
| Per-request timeout | |
|
|
| |
|
| Required when | |
|
| Skip confirmation prompts for high/destructive tools | |
|
| Audit-log every medium-risk call | |
|
|
| |
|
| Use pino-pretty (dev only) | |
|
| Retries on transient API errors | |
|
| Retry backoff base | |
|
| Long-running job retention | |
|
|
| |
|
| SQLite job store path | |
|
|
| |
|
| HTTP bind address | |
|
| HTTP listen port | |
|
| SSH user for | |
|
| SSH port | |
| — | Path to SSH private key | |
| — | SSH password (prefer key) | |
| — | JSON map of | |
| — | Path to | |
|
| Reject unknown host keys | |
|
| URL schemes for | |
| — | Optional allowlist (suffix / IP / CIDR) |
PROXMOX_VERIFY_SSL=falserequiresPROXMOX_DEV_MODE=true— the server refuses to start otherwise.
Development
git clone https://github.com/ngocdd/proxmox-mcps.git
cd proxmox-mcps
npm install
npm run dev # tsx watch mode
npm run build # tsc → dist/
npm test # 179 unit tests
npm run lint # eslint
npm run format:check # prettierUpdating dependencies
npm outdated # see available updates
npm update # safe patch + minor bumps
npm audit # known CVEs
npm audit fix # safe security fixesNative deps (better-sqlite3, ssh2, …) need install scripts. The repo's .npmrc carries the npm 11+ allowlist. If you add a new native dep, append its name to allow-scripts[] there.
Releasing
Bump
versioninpackage.json.npm test && npm run build.git tag v<version> && git push --tags.npm publish.
Project layout
src/
index.ts entry point (stdio / streamable / sse)
server.ts MCP server factory
config/ env schema (zod) + typed config
format/ response formatters
jobs/ long-running job tracking (memory + sqlite)
log.ts pino logger
proxmox/ API client + path helpers
safety/ risk registry + approval policy + URL guard
security/ auth + secret redaction
ssh/ SSH client for pct exec
tools/ one file per tool group
vm/ crud, config, diagnostics, migration, console
container/ crud, config, diagnostics, migration, console
cluster, node, storage, tasks, jobs,
snapshot, backup, backup-schedule, iso,
pools, ha, replication, sdn,
node-admin, node-services, node-network, node-disks, node-certs,
storage-admin
cli/ check-config, print-tools
tests/
unit/ vitest unit suite (179 tests)
integration/ end-to-end (gated by PROXMOX_E2E=1)Security
Destructive calls require an explicit
confirm: truefrom the model after a user-typed "yes".URL guard rejects private/loopback hosts for server-side downloads.
VM config allowlist blocks keys that can attach host devices or change machine type.
Logs redact token UUIDs and SSH passwords.
Found a vulnerability? Please email ngocdd94@gmail.com rather than filing a public issue.
Contributing
Issues and PRs welcome. For anything beyond a typo:
Open an issue first describing the change.
New tools must register a risk level in
src/safety/risk.ts(low/medium/high/destructive).New env vars must be added to both
src/config/env.ts(zod schema) and.env.example.Run
npm test && npm run lint && npm run buildbefore opening the PR.
Acknowledgments
Built on
@modelcontextprotocol/sdk.The Proxmox API client uses
axioswithp-retryfor transient errors.Long-running job tracking uses
better-sqlite3when persistence is enabled.Container command execution uses
ssh2to shell out topct execon the host.
License
MIT © Proxmox MCP Contributors
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ngocdd/proxmox-mcps'
If you have feedback or need assistance with the MCP directory API, please join our Discord server