ProxmoxMCP-Plus is an enhanced Python-based Model Context Protocol (MCP) server that provides comprehensive management capabilities for Proxmox virtualization platforms. It offers complete VM lifecycle management, container support, and OpenAPI integration, making it ideal for automating Proxmox operations through natural language interfaces.
Before installing, ensure you have:
Clone and set up environment:
# Clone repository
git clone https://github.com/RekklesNA/ProxmoxMCP-Plus.git
cd ProxmoxMCP-Plus
# Create and activate virtual environment
uv venv
source .venv/bin/activate # Linux/macOS
# OR
.\.venv\Scripts\Activate.ps1 # Windows
Install dependencies:
# Install with development dependencies
uv pip install -e ".[dev]"
Create configuration:
# Create config directory and copy template
mkdir -p proxmox-config
cp proxmox-config/config.example.json proxmox-config/config.json
Edit proxmox-config/config.json
:
{
"proxmox": {
"host": "PROXMOX_HOST", # Required: Your Proxmox server address
"port": 8006, # Optional: Default is 8006
"verify_ssl": false, # Optional: Set false for self-signed certs
"service": "PVE" # Optional: Default is PVE
},
"auth": {
"user": "USER@pve", # Required: Your Proxmox username
"token_name": "TOKEN_NAME", # Required: API token ID
"token_value": "TOKEN_VALUE" # Required: API token value
},
"logging": {
"level": "INFO", # Optional: DEBUG for more detail
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
"file": "proxmox_mcp.log" # Optional: Log to file
}
}
Check Python environment:
python -c "import proxmox_mcp; print('Installation OK')"
Run the tests:
pytest
Verify configuration:
# Linux/macOS
PROXMOX_MCP_CONFIG="proxmox-config/config.json" python -m proxmox_mcp.server
# Windows (PowerShell)
$env:PROXMOX_MCP_CONFIG="proxmox-config\config.json"; python -m proxmox_mcp.server
For testing and development:
# Activate virtual environment first
source .venv/bin/activate # Linux/macOS
# OR
.\.venv\Scripts\Activate.ps1 # Windows
# Run the server
python -m proxmox_mcp.server
Deploy as standard OpenAPI REST endpoints for integration with Open WebUI and other applications.
# Install mcpo (MCP-to-OpenAPI proxy)
pip install mcpo
# Start OpenAPI service on port 8811
./start_openapi.sh
# Build and run with Docker
docker build -t proxmox-mcp-api .
docker run -d --name proxmox-mcp-api -p 8811:8811 \
-v $(pwd)/proxmox-config:/app/proxmox-config proxmox-mcp-api
# Or use Docker Compose
docker-compose up -d
Once deployed, access your service at:
Create a new virtual machine with specified resources.
API Endpoint:
POST /create_vm
Content-Type: application/json
{
"node": "pve",
"vmid": "200",
"name": "my-vm",
"cpus": 1,
"memory": 2048,
"disk_size": 10
}
POST /start_vm
with {"node": "pve", "vmid": "200"}
POST /stop_vm
with {"node": "pve", "vmid": "200"}
POST /shutdown_vm
with {"node": "pve", "vmid": "200"}
POST /reset_vm
with {"node": "pve", "vmid": "200"}
POST /delete_vm
with {"node": "pve", "vmid": "200", "force": false}
List all LXC containers across the cluster:
POST /get_containers
POST /get_nodes
- Lists all nodes in the Proxmox clusterPOST /get_node_status
- Get detailed status of a specific nodePOST /get_vms
- List all VMs across the clusterPOST /get_storage
- List available storage poolsPOST /get_cluster_status
- Get overall cluster status and healthExecute a command in a VM's console using QEMU Guest Agent.
POST /execute_vm_command
Content-Type: application/json
{
"node": "pve",
"vmid": "200",
"command": "ls -la"
}
{
"name": "Proxmox MCP API Plus",
"base_url": "http://your-server:8811",
"api_key": "",
"description": "Enhanced Proxmox Virtualization Management API"
}
Port already in use
netstat -tlnp | grep 8811
# Change port if needed
mcpo --port 8812 -- ./start_server.sh
Configuration errors
# Verify config file
cat proxmox-config/config.json
Connection issues
# Test Proxmox connectivity
curl -k https://your-proxmox:8006/api2/json/version
# View service logs
tail -f proxmox_mcp.log
# Docker logs
docker logs proxmox-mcp-api -f
To add this MCP server to Claude Code, run this command in your terminal:
claude mcp add-json "ProxmoxMCP-Plus" '{"command":"/absolute/path/to/ProxmoxMCP-Plus/.venv/bin/python","args":["-m","proxmox_mcp.server"],"cwd":"/absolute/path/to/ProxmoxMCP-Plus","env":{"PYTHONPATH":"/absolute/path/to/ProxmoxMCP-Plus/src","PROXMOX_MCP_CONFIG":"/absolute/path/to/ProxmoxMCP-Plus/proxmox-config/config.json","PROXMOX_HOST":"your-proxmox-host","PROXMOX_USER":"username@pve","PROXMOX_TOKEN_NAME":"token-name","PROXMOX_TOKEN_VALUE":"token-value","PROXMOX_PORT":"8006","PROXMOX_VERIFY_SSL":"false","PROXMOX_SERVICE":"PVE","LOG_LEVEL":"DEBUG"},"disabled":false,"autoApprove":[]}'
See the official Claude Code MCP documentation for more details.
There are two ways to add an MCP server to Cursor. The most common way is to add the server globally in the ~/.cursor/mcp.json
file so that it is available in all of your projects.
If you only need the server in a single project, you can add it to the project instead by creating or adding it to the .cursor/mcp.json
file.
To add a global MCP server go to Cursor Settings > Tools & Integrations and click "New MCP Server".
When you click that button the ~/.cursor/mcp.json
file will be opened and you can add your server like this:
{
"mcpServers": {
"ProxmoxMCP-Plus": {
"command": "/absolute/path/to/ProxmoxMCP-Plus/.venv/bin/python",
"args": [
"-m",
"proxmox_mcp.server"
],
"cwd": "/absolute/path/to/ProxmoxMCP-Plus",
"env": {
"PYTHONPATH": "/absolute/path/to/ProxmoxMCP-Plus/src",
"PROXMOX_MCP_CONFIG": "/absolute/path/to/ProxmoxMCP-Plus/proxmox-config/config.json",
"PROXMOX_HOST": "your-proxmox-host",
"PROXMOX_USER": "username@pve",
"PROXMOX_TOKEN_NAME": "token-name",
"PROXMOX_TOKEN_VALUE": "token-value",
"PROXMOX_PORT": "8006",
"PROXMOX_VERIFY_SSL": "false",
"PROXMOX_SERVICE": "PVE",
"LOG_LEVEL": "DEBUG"
},
"disabled": false,
"autoApprove": []
}
}
}
To add an MCP server to a project you can create a new .cursor/mcp.json
file or add it to the existing one. This will look exactly the same as the global MCP server example above.
Once the server is installed, you might need to head back to Settings > MCP and click the refresh button.
The Cursor agent will then be able to see the available tools the added MCP server has available and will call them when it needs to.
You can also explicitly ask the agent to use the tool by mentioning the tool name and describing what the function does.
To add this MCP server to Claude Desktop:
1. Find your configuration file:
~/Library/Application Support/Claude/claude_desktop_config.json
%APPDATA%\Claude\claude_desktop_config.json
~/.config/Claude/claude_desktop_config.json
2. Add this to your configuration file:
{
"mcpServers": {
"ProxmoxMCP-Plus": {
"command": "/absolute/path/to/ProxmoxMCP-Plus/.venv/bin/python",
"args": [
"-m",
"proxmox_mcp.server"
],
"cwd": "/absolute/path/to/ProxmoxMCP-Plus",
"env": {
"PYTHONPATH": "/absolute/path/to/ProxmoxMCP-Plus/src",
"PROXMOX_MCP_CONFIG": "/absolute/path/to/ProxmoxMCP-Plus/proxmox-config/config.json",
"PROXMOX_HOST": "your-proxmox-host",
"PROXMOX_USER": "username@pve",
"PROXMOX_TOKEN_NAME": "token-name",
"PROXMOX_TOKEN_VALUE": "token-value",
"PROXMOX_PORT": "8006",
"PROXMOX_VERIFY_SSL": "false",
"PROXMOX_SERVICE": "PVE",
"LOG_LEVEL": "DEBUG"
},
"disabled": false,
"autoApprove": []
}
}
}
3. Restart Claude Desktop for the changes to take effect