Information
# Proxmox Manager - Proxmox MCP Server

A Python-based Model Context Protocol (MCP) server for interacting with Proxmox hypervisors, providing a clean interface for managing nodes, VMs, and containers.
## Built With
- [Cline](https://github.com/cline/cline) - Autonomous coding agent - Go faster with Cline.
- [Proxmoxer](https://github.com/proxmoxer/proxmoxer) - Python wrapper for Proxmox API
- [MCP SDK](https://github.com/modelcontextprotocol/sdk) - Model Context Protocol SDK
- [Pydantic](https://docs.pydantic.dev/) - Data validation using Python type annotations
## Features
- Full integration with Cline
- Built with the official MCP SDK
- Secure token-based authentication with Proxmox
- Tools for managing nodes and VMs
- VM console command execution
- Configurable logging system
- Type-safe implementation with Pydantic
- Rich output formatting with customizable themes
https://github.com/user-attachments/assets/1b5f42f7-85d5-4918-aca4-d38413b0e82b
## Installation
### Prerequisites
- UV package manager (recommended)
- Python 3.10 or higher
- Git
- Access to a Proxmox server with API token credentials
Before starting, ensure you have:
- [ ] Proxmox server hostname or IP
- [ ] Proxmox API token (see [API Token Setup](#proxmox-api-token-setup))
- [ ] UV installed (\`pip install uv\`)
### Option 1: Quick Install (Recommended)
1. Clone and set up environment:
\`\`\`bash
# Clone repository
cd ~/Documents/Cline/MCP # For Cline users
# OR
cd your/preferred/directory # For manual installation
git clone https://github.com/canvrno/ProxmoxMCP.git
cd ProxmoxMCP
# Create and activate virtual environment
uv venv
source .venv/bin/activate # Linux/macOS
# OR
.\.venv\Scripts\Activate.ps1 # Windows
\`\`\`
2. Install dependencies:
\`\`\`bash
# Install with development dependencies
uv pip install -e ".[dev]"
\`\`\`
3. Create configuration:
\`\`\`bash
# Create config directory and copy template
mkdir -p proxmox-config
cp config/config.example.json proxmox-config/config.json
\`\`\`
4. Edit \`proxmox-config/config.json\`:
\`\`\`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
\}
\}
\`\`\`
### Verifying Installation
1. Check Python environment:
\`\`\`bash
python -c "import proxmox_mcp; print('Installation OK')"
\`\`\`
2. Run the tests:
\`\`\`bash
pytest
\`\`\`
3. Verify configuration:
\`\`\`bash
# 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
\`\`\`
You should see either:
- A successful connection to your Proxmox server
- Or a connection error (if Proxmox details are incorrect)
## Configuration
### Proxmox API Token Setup
1. Log into your Proxmox web interface
2. Navigate to Datacenter -> Permissions -> API Tokens
3. Create a new API token:
- Select a user (e.g., root@pam)
- Enter a token ID (e.g., "mcp-token")
- Uncheck "Privilege Separation" if you want full access
- Save and copy both the token ID and secret
## Running the Server
### Development Mode
For testing and development:
\`\`\`bash
# Activate virtual environment first
source .venv/bin/activate # Linux/macOS
# OR
.\.venv\Scripts\Activate.ps1 # Windows
# Run the server
python -m proxmox_mcp.server
\`\`\`
### Cline Desktop Integration
For Cline users, add this configuration to your MCP settings file (typically at \`~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json\`):
\`\`\`json
\{
"mcpServers": \{
"github.com/canvrno/ProxmoxMCP": \{
"command": "/absolute/path/to/ProxmoxMCP/.venv/bin/python",
"args": ["-m", "proxmox_mcp.server"],
"cwd": "/absolute/path/to/ProxmoxMCP",
"env": \{
"PYTHONPATH": "/absolute/path/to/ProxmoxMCP/src",
"PROXMOX_MCP_CONFIG": "/absolute/path/to/ProxmoxMCP/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 help generate the correct paths, you can use this command:
\`\`\`bash
# This will print the MCP settings with your absolute paths filled in
python -c "import os; print(f'''\{\{
\"mcpServers\": \{\{
\"github.com/canvrno/ProxmoxMCP\": \{\{
\"command\": \"\{os.path.abspath('.venv/bin/python')\}\",
\"args\": [\"-m\", \"proxmox_mcp.server\"],
\"cwd\": \"\{os.getcwd()\}\",
\"env\": \{\{
\"PYTHONPATH\": \"\{os.path.abspath('src')\}\",
\"PROXMOX_MCP_CONFIG\": \"\{os.path.abspath('proxmox-config/config.json')\}\",
...
\}\}
\}\}
\}\}
\}\}''')"
\`\`\`
Important:
- All paths must be absolute
- The Python interpreter must be from your virtual environment
- The PYTHONPATH must point to the src directory
- Restart VSCode after updating MCP settings
# Available Tools
The server provides the following MCP tools for interacting with Proxmox:
### get_nodes
Lists all nodes in the Proxmox cluster.
- Parameters: None
- Example Response:
\`\`\`
Proxmox Nodes
pve-compute-01
• Status: ONLINE
• Uptime: 156d 12h
• CPU Cores: 64
• Memory: 186.5 GB / 512.0 GB (36.4%)
pve-compute-02
• Status: ONLINE
• Uptime: 156d 11h
• CPU Cores: 64
• Memory: 201.3 GB / 512.0 GB (39.3%)
\`\`\`
### get_node_status
Get detailed status of a specific node.
- Parameters:
- \`node\` (string, required): Name of the node
- Example Response:
\`\`\`
Node: pve-compute-01
• Status: ONLINE
• Uptime: 156d 12h
• CPU Usage: 42.3%
• CPU Cores: 64 (AMD EPYC 7763)
• Memory: 186.5 GB / 512.0 GB (36.4%)
• Network: 12.8 GB/s 9.2 GB/s
• Temperature: 38°C
\`\`\`
### get_vms
List all VMs across the cluster.
- Parameters: None
- Example Response:
\`\`\`
Virtual Machines
prod-db-master (ID: 100)
• Status: RUNNING
• Node: pve-compute-01
• CPU Cores: 16
• Memory: 92.3 GB / 128.0 GB (72.1%)
prod-web-01 (ID: 102)
• Status: RUNNING
• Node: pve-compute-01
• CPU Cores: 8
• Memory: 12.8 GB / 32.0 GB (40.0%)
\`\`\`
### get_storage
List available storage.
- Parameters: None
- Example Response:
\`\`\`
Storage Pools
ceph-prod
• Status: ONLINE
• Type: rbd
• Usage: 12.8 TB / 20.0 TB (64.0%)
• IOPS: 15.2k 12.8k
local-zfs
• Status: ONLINE
• Type: zfspool
• Usage: 3.2 TB / 8.0 TB (40.0%)
• IOPS: 42.8k 35.6k
\`\`\`
### get_cluster_status
Get overall cluster status.
- Parameters: None
- Example Response:
\`\`\`
Proxmox Cluster
• Name: enterprise-cloud
• Status: HEALTHY
• Quorum: OK
• Nodes: 4 ONLINE
• Version: 8.1.3
• HA Status: ACTIVE
• Resources:
- Total CPU Cores: 192
- Total Memory: 1536 GB
- Total Storage: 70 TB
• Workload:
- Running VMs: 7
- Total VMs: 8
- Average CPU Usage: 38.6%
- Average Memory Usage: 42.8%
\`\`\`
### execute_vm_command
Execute a command in a VM's console using QEMU Guest Agent.
- Parameters:
- \`node\` (string, required): Name of the node where VM is running
- \`vmid\` (string, required): ID of the VM
- \`command\` (string, required): Command to execute
- Example Response:
\`\`\`
Console Command Result
• Status: SUCCESS
• Command: systemctl status nginx
• Node: pve-compute-01
• VM: prod-web-01 (ID: 102)
Output:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2025-02-18 15:23:45 UTC; 2 months 3 days ago
\`\`\`
- Requirements:
- VM must be running
- QEMU Guest Agent must be installed and running in the VM
- Command execution permissions must be enabled in the Guest Agent
- Error Handling:
- Returns error if VM is not running
- Returns error if VM is not found
- Returns error if command execution fails
- Includes command output even if command returns non-zero exit code
## Development
After activating your virtual environment:
- Run tests: \`pytest\`
- Format code: \`black .\`
- Type checking: \`mypy .\`
- Lint: \`ruff .\`
## Project Structure
\`\`\`
proxmox-mcp/
├── src/
│ └── proxmox_mcp/
│ ├── server.py # Main MCP server implementation
│ ├── config/ # Configuration handling
│ ├── core/ # Core functionality
│ ├── formatting/ # Output formatting and themes
│ ├── tools/ # Tool implementations
│ │ └── console/ # VM console operations
│ └── utils/ # Utilities (auth, logging)
├── tests/ # Test suite
├── proxmox-config/
│ └── config.example.json # Configuration template
├── pyproject.toml # Project metadata and dependencies
└── LICENSE # MIT License
\`\`\`
## License
MIT License