Proxmox MCP Server
Provides tools for managing Ceph within Proxmox VE, including status, OSDs, monitors, managers, MDS, pools, flags, and CRUSH configuration.
Allows interaction with the Proxmox Virtual Environment API, providing extensive tools for managing nodes, QEMU VMs, LXC containers, storage and backups, clusters and HA, access control, firewall, disks, Ceph, ACME certificates, SDN, notifications, and resource pools.
Provides tools for managing QEMU virtual machines through Proxmox, covering lifecycle operations, configuration, snapshots, migration, disk resize/move, RRD metrics, guest agent execution, and VNC proxy access.
Click on "Deploy 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 MCP Servershow me the status of all VMs on node1"
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.
Proxmox MCP Server
A Model Context Protocol (MCP) server for the Proxmox Virtual Environment API. It exposes 338 tools covering nodes, VMs, containers, storage, clustering and HA, users and permissions, firewall, disks, Ceph, ACME certificates, SDN, notifications and resource pools.
Built with Python and uv for fast, reliable dependency management.
Features
Agent-to-Agent (A2A) Protocol Support
This server implements the A2A protocol for seamless agent-to-agent communication. The included agent-card.json file provides:
Structured agent capabilities - Detailed skill definitions for AI-to-AI discovery
Authentication specifications - Clear auth requirements for automated integration
Tool catalog - Complete inventory of available operations organized by category
MCP protocol support - Native Model Context Protocol implementation
Use Cases:
Multi-agent orchestration systems
Automated infrastructure workflows
Agent discovery and composition
Cross-system AI collaboration
See the A2A Protocol Documentation section below for integration details.
Proxmox VE API Coverage
Area | Tools | Highlights |
Nodes | 38 | Status, config, DNS/hosts/time, network interfaces, services, APT updates, syslog, power |
QEMU VMs | 46 | Lifecycle, create/clone/delete, config, snapshots, migration, disk resize/move, RRD metrics, guest agent ( |
LXC containers | 28 | Lifecycle, create/clone/delete, config, snapshots, migration, resize |
Storage & backup | 14 | Storage definitions, content and volumes, URL downloads, |
Cluster | 37 | Status, resources, options, log, tasks, HA resources/groups, replication, backup jobs |
Access control | 33 | Users, API tokens, groups, roles, ACLs, realms |
Firewall | 31 | Cluster and node rules, security groups, aliases, IP sets, macros, logs (per-VM/container rules are in the guest modules) |
Disks | 17 | SMART, wipe, GPT init, LVM, LVM-thin, ZFS, directory storage |
Ceph | 33 | Status, OSDs, monitors, managers, MDS, pools, flags, CRUSH |
ACME & certificates | 17 | ACME accounts and plugins, node certificate ordering, custom certs |
SDN | 16 | Zones, VNets, subnets, apply |
Notifications | 23 | Gotify, sendmail, SMTP and webhook endpoints, matchers |
Pools | 5 | Resource pool CRUD |
See Available Tools for how to browse the full list.
Related MCP server: ProxmoxMCP-Plus
Quick Start
# 1. Install uv (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 2. Run setup script
chmod +x setup.sh
./setup.sh
# 3. Set environment variables
export PROXMOX_HOST="192.168.1.100"
export PROXMOX_USER="root@pam"
export PROXMOX_TOKEN_NAME="automation"
export PROXMOX_TOKEN_VALUE="your-token-here"
# 4. Test connection
./test-connection.sh
# 5. Configure Claude Desktop and restartSee QUICKSTART.md for detailed instructions.
Installation
Prerequisites
Python 3.10 or higher
uvpackage managerProxmox VE 6.0 or later
Setup
# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clone or download this repository
cd proxmox-mcp-server
# Run setup script (installs dependencies)
./setup.sh
# Or manually:
uv syncDocker
A multi-arch image is published to GitHub Container Registry on every push to main and for each release tag:
docker pull ghcr.io/thanhan92-f1/proxmox-mcp-server:latest # or a version tag, e.g. :2.2.0MCP clients talk to the server over stdio, so run the container interactively (-i) and pass configuration as environment variables:
docker run -i --rm --env-file .env ghcr.io/thanhan92-f1/proxmox-mcp-server:latestdocker-compose.yaml in this repository does the same using your .env file (copy .env.example to get started).
Configuration
The server is configured via environment variables:
Required Variables
PROXMOX_HOST: Proxmox server hostname or IP address, without scheme or port (e.g.192.168.1.100, nothttps://192.168.1.100:8006)PROXMOX_USER: Username (e.g.,root@pam,admin@pve)
Authentication (choose one method)
Option 1: API Token (Recommended)
PROXMOX_TOKEN_NAME: API token namePROXMOX_TOKEN_VALUE: API token value
Option 2: Password
PROXMOX_PASSWORD: User password
Optional Variables
PROXMOX_PORT: API port (default:8006)PROXMOX_VERIFY_SSL: Verify SSL certificates (default:false)PROXMOX_READ_ONLY: Block all writes — only GET requests are allowed; any create/update/delete/action tool is refused (default:false). 149 of the 338 tools are read-only and keep working. Three read-style tools also send POST requests and are blocked:vm_agent_ping, plusget_vm_vnc_proxyandget_vm_spice_proxy, which create console access tickets
When running from a clone, a .env file in the project directory is loaded automatically. See .env.example.
Setting Up Proxmox Authentication
Creating an API Token (Recommended)
Log into your Proxmox web interface
Navigate to Datacenter → Permissions → API Tokens
Click Add and create a token for your user
Uncheck "Privilege Separation" to inherit user permissions
Copy the Token ID and Secret (you won't see it again!)
Example token format:
PROXMOX_TOKEN_NAME=automation
PROXMOX_TOKEN_VALUE=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxThe full token identifier will be: root@pam!automation
Using Password Authentication
Simply set your user password:
export PROXMOX_PASSWORD=yourpasswordMCP Configuration
Add to your Claude Desktop configuration file:
MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
With API Token (Recommended)
{
"mcpServers": {
"proxmox": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/proxmox-mcp-server",
"run",
"proxmox-mcp-server"
],
"env": {
"PROXMOX_HOST": "192.168.1.100",
"PROXMOX_USER": "root@pam",
"PROXMOX_TOKEN_NAME": "automation",
"PROXMOX_TOKEN_VALUE": "your-token-value-here"
}
}
}
}With Password
{
"mcpServers": {
"proxmox": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/proxmox-mcp-server",
"run",
"proxmox-mcp-server"
],
"env": {
"PROXMOX_HOST": "192.168.1.100",
"PROXMOX_USER": "root@pam",
"PROXMOX_PASSWORD": "your-password-here"
}
}
}
}With Docker
{
"mcpServers": {
"proxmox": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "PROXMOX_HOST",
"-e", "PROXMOX_USER",
"-e", "PROXMOX_TOKEN_NAME",
"-e", "PROXMOX_TOKEN_VALUE",
"ghcr.io/thanhan92-f1/proxmox-mcp-server:latest"
],
"env": {
"PROXMOX_HOST": "192.168.1.100",
"PROXMOX_USER": "root@pam",
"PROXMOX_TOKEN_NAME": "automation",
"PROXMOX_TOKEN_VALUE": "your-token-value-here"
}
}
}
}Important: For the uv configurations, use the absolute path to your project directory!
Available Tools
The server registers 338 tools, grouped by API area in proxmox_mcp/tools/, one module per area. Tool names follow the Proxmox API: list_*, get_*, create_*, update_*/set_*, delete_*, plus actions such as start_vm, migrate_container or apply_sdn.
Some commonly used tools:
Task | Tools |
Inventory |
|
VM lifecycle |
|
Snapshots |
|
Monitoring |
|
Tasks |
|
Guest agent |
|
Your MCP client lists every tool with its full input schema. To print them all locally:
uv run python -c "from proxmox_mcp.server import ALL_TOOLS; print('\n'.join(sorted(t.name for t in ALL_TOOLS)))"See USAGE.md for worked examples.
Example Usage
Once configured, you can ask Claude to interact with your Proxmox environment:
"Can you list all VMs in my Proxmox cluster?"
"What's the status of VM 100 on node pve1?"
"Start VM 105 on node pve1"
"Create a snapshot called 'backup-2025' for VM 100 on pve1"
"Show me the storage usage on all nodes"
"List all running tasks in the cluster"
"Clone VM 9000 to a new VM called web-02 and start it"
"Run
df -hinside VM 120 using the guest agent and show me the output"
Development
# Install dependencies
uv sync
# Run the server directly
uv run proxmox-mcp-server
# Run with custom environment
PROXMOX_HOST=192.168.1.100 \
PROXMOX_USER=root@pam \
PROXMOX_TOKEN_NAME=automation \
PROXMOX_TOKEN_VALUE=your-token \
uv run proxmox-mcp-server
# Lint and format (dev dependencies are installed by `uv sync`)
uv run ruff check .
uv run black .Project Structure
proxmox-mcp-server/
├── proxmox_mcp/
│ ├── server.py # MCP server entrypoint and tool registry
│ ├── client.py # Proxmox API client (token/password auth)
│ └── tools/ # Tool definitions and handlers, one module per API area
│ ├── nodes.py, qemu.py, lxc.py, storage.py, cluster.py, access.py
│ └── firewall.py, disks.py, ceph.py, acme.py, sdn.py, notifications.py, pools.py
├── Dockerfile # Container image (stdio transport)
├── docker-compose.yaml # Compose setup using .env
├── agent-card.json # A2A agent card
├── pyproject.toml # Project configuration
├── uv.lock # Locked dependencies
├── .env.example # Environment variable template
├── setup.sh # Automated setup script
├── test-connection.sh # Connection test script
├── README.md # This file
├── CHANGELOG.md # Release history
├── QUICKSTART.md # 5-minute setup guide
├── SETUP.md # Detailed setup guide
└── USAGE.md # Usage examples
Security Considerations
API Tokens are more secure than password authentication as they can be revoked independently
For monitoring-only deployments, set
PROXMOX_READ_ONLY=trueand use aPVEAuditortoken. The flag stops the server from sending writes, and the token permissions enforce the same limit on the Proxmox sideSet
PROXMOX_VERIFY_SSL=truein production environments with valid SSL certificatesGrant minimal required permissions to API tokens. The server exposes destructive operations (deleting VMs, wiping disks, running commands inside guests via the agent), and the token's permissions are the only thing limiting what a connected AI client can do. For monitoring-only use, a token with the
PVEAuditorrole is enoughStore credentials securely and never commit them to version control
Consider network restrictions (firewall rules) for API access
Troubleshooting
Authentication Errors
Verify your credentials are correct
Check that the user has appropriate permissions
For API tokens, ensure the token hasn't expired or been revoked
Ensure "Privilege Separation" was unchecked when creating the token
Connection Errors
Verify
PROXMOX_HOSTandPROXMOX_PORTare correctCheck network connectivity to the Proxmox host
If using SSL verification, ensure certificates are valid
Test with:
curl -k https://YOUR_HOST:8006/api2/json/version
Permission Errors
The user/token needs appropriate privileges for the operations
Common required privileges:
VM.Monitor,VM.Audit,Datastore.Audit,Sys.Audit,VM.PowerMgmt,VM.Snapshot
Debug Mode
To see detailed logs, check stderr output when running the server. The server logs authentication method and connection status to stderr (visible in Claude Desktop logs).
Tools Not Showing in Claude
Verify the path in Claude config is absolute, not relative
Check that the config file is valid JSON
Ensure you completely quit and restarted Claude Desktop (not just closed the window)
Check Claude Desktop logs for errors
Testing Connection
Before configuring Claude, test your Proxmox connection:
# Set environment variables
export PROXMOX_HOST="192.168.1.100"
export PROXMOX_USER="root@pam"
export PROXMOX_TOKEN_NAME="automation"
export PROXMOX_TOKEN_VALUE="your-token-here"
# Run test script
./test-connection.shThe script will verify:
Connection to Proxmox
API availability
Authentication
Permission to list nodes
Access to cluster resources
A2A Protocol
Overview
This Proxmox MCP server implements the Agent-to-Agent (A2A) protocol, enabling AI agents to discover, communicate with, and orchestrate infrastructure management tasks autonomously.
Agent Card
The agent-card.json file serves as the agent's identity and capability manifest. It provides:
Location: /agent-card.json (repository root)
Contents:
Agent name, version, and description
MCP protocol version and capabilities
Authentication methods and requirements
Skill catalog organized by functional category
Required permissions and dependencies
Endpoint configuration
Available Skills
The agent card lists all 338 tools in 13 skill categories, generated from the server's tool registry. Each entry has the tool's name, description and inputs:
Category | Tools |
| 38 |
| 46 |
| 28 |
| 14 |
| 37 |
| 33 |
| 31 |
| 17 |
| 33 |
| 17 |
| 16 |
| 23 |
| 5 |
Agent-to-Agent Integration
Discovery
Other agents can discover this agent's capabilities by reading the agent card:
import json
# Load agent card
with open('agent-card.json') as f:
agent_card = json.load(f)
# Discover capabilities
print(f"Agent: {agent_card['name']}")
print(f"Version: {agent_card['version']}")
print(f"Skills: {len(agent_card['skills'])} categories")
# List available skills
for skill in agent_card['skills']:
print(f"\n{skill['category']}:")
for capability in skill['capabilities']:
print(f" - {capability['name']}: {capability['description']}")Authentication Setup
Agents can programmatically configure authentication:
# API Token (recommended)
env_config = {
"PROXMOX_HOST": "192.168.1.100",
"PROXMOX_USER": "root@pam",
"PROXMOX_TOKEN_NAME": "automation",
"PROXMOX_TOKEN_VALUE": "your-token-value"
}
# Or Password-based
env_config = {
"PROXMOX_HOST": "192.168.1.100",
"PROXMOX_USER": "root@pam",
"PROXMOX_PASSWORD": "your-password"
}Tool Invocation
Agents communicate via MCP protocol:
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
# Connect to the agent
server_params = StdioServerParameters(
command="uv",
args=["--directory", "/path/to/proxmox-mcp-server", "run", "proxmox-mcp-server"],
env=env_config
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
# Initialize session
await session.initialize()
# List available tools
tools = await session.list_tools()
# Call a tool
result = await session.call_tool("list_vms", arguments={})
print(result.content)Multi-Agent Orchestration Example
Example workflow with multiple agents:
# Agent orchestration: VM backup workflow
async def backup_workflow():
# 1. Proxmox agent: List VMs
vms = await proxmox_agent.call_tool("list_vms", {})
# 2. Proxmox agent: Create snapshots for each VM
for vm in vms['data']:
snapshot_name = f"backup-{datetime.now().strftime('%Y%m%d-%H%M%S')}"
await proxmox_agent.call_tool("create_vm_snapshot", {
"node": vm['node'],
"vmid": vm['vmid'],
"snapname": snapshot_name
})
# 3. Storage agent: Verify backup storage capacity
storage_status = await storage_agent.call_tool("check_capacity", {})
# 4. Notification agent: Send completion report
await notification_agent.call_tool("send_alert", {
"message": f"Backup completed: {len(vms['data'])} VMs"
})A2A Protocol Benefits
For AI Agents:
Self-documenting - Agent card provides complete capability discovery
Type-safe - Structured skill definitions with input/output schemas
Composable - Skills can be combined for complex workflows
Secure - Clear authentication requirements and permissions
For Orchestration Systems:
Dynamic discovery - Find and integrate agents at runtime
Capability matching - Match tasks to agent skills automatically
Parallel execution - Coordinate multiple agents simultaneously
Error handling - Standardized error responses and retry logic
Integration Examples
Example 1: Infrastructure Monitoring Agent
# Monitoring agent that uses Proxmox agent skills
async def monitor_infrastructure():
# Get cluster status
cluster = await proxmox_agent.call_tool("get_cluster_status", {})
# Get all nodes
nodes = await proxmox_agent.call_tool("list_nodes", {})
# Check each node's status
for node in nodes['data']:
status = await proxmox_agent.call_tool("get_node_status", {
"node": node['node']
})
# Alert if resource usage is high
if status['data']['cpu'] > 0.9:
await alert_agent.send_alert(f"High CPU on {node['node']}")API Documentation
For more information about the Proxmox VE API:
Dependencies
mcp (>=1.0.0, <2): Model Context Protocol SDK. 2.x changed the server API and is not supported yet
httpx (>=0.28.1): Async HTTP client for the Proxmox API
python-dotenv (>=1.2.3): Loads configuration from
.env
Roadmap
Streamable-HTTP transport for running the server as a network service (#24, #29)
Support for
mcp2.xAutomatic ticket refresh for long-running password-authenticated sessions
Automated test suite
See CHANGELOG.md for what has shipped.
Contributing
Contributions are welcome! Please feel free to submit issues or pull requests.
Areas for improvement:
Additional tools/features
Better error handling
Performance optimizations
Documentation improvements
Test coverage
Bug fixes
License
MIT. See LICENSE.
Related Projects
Support
If you encounter issues:
Check the documentation files:
QUICKSTART.md - Quick setup
SETUP.md - Detailed setup with security
USAGE.md - Usage examples
Test your connection with
./test-connection.shCheck Claude Desktop logs for errors
Verify Proxmox server logs:
/var/log/pve/Review Proxmox API documentation
Acknowledgments
This project uses:
The Model Context Protocol by Anthropic
Proxmox VE API
Python httpx for HTTP requests
uv for fast Python package management
Ready to get started? → See QUICKSTART.md
Need detailed setup? → See SETUP.md
Want examples? → Check USAGE.md
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
327 dev tools via REST API and MCP. Generate Dockerfiles, schemas, K8s, APIs, and more.
Unified gateway exposing 150+ tools across all NexGenData MCP servers via one endpoint.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables comprehensive management of Proxmox Virtual Environment through 35 tools for VMs, containers, storage, backups, snapshots, and cluster operations via the Proxmox VE API.42 npm22MIT
- AlicenseNot gradedqualityCmaintenanceEnables comprehensive management of Proxmox virtualization environments, including VM and container lifecycle, snapshots, backups, monitoring, and OpenAPI integration.14MIT
- AlicenseNot gradedqualityAmaintenanceA PROXMOX implementation containing 152 tools covering QEMU VMs, LXC, unified guest power, storage admin, cluster/tasks, snapshots, backups (incl. scheduled jobs), migration, HA, firewall (incl. IPSet CIDRs), access control, replication, SDN (read), ACME (read), pools, and console tickets.31 PyPI1MIT
- FlicenseNot gradedqualityBmaintenanceManages Proxmox VE clusters through the official PVE API with 22 tools for cluster status, VMs/containers, storage, snapshots, and provisioning. Supports stdio or HTTP/StreamableHTTP transports with optional OAuth for Gemini and multi-server configurations.-