ProxmoxMCP
If you are the rightful owner of ProxmoxMCP and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
Proxmox Manager is a Python-based Model Context Protocol (MCP) server designed for seamless interaction with Proxmox hypervisors, offering a streamlined interface for managing nodes, VMs, and containers.
š 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.
⨠Features
- š¤ Full integration with Cline
- š ļø Built with the official MCP SDK
- š Secure token-based authentication with Proxmox
- š„ļø Tools for managing nodes, VMs, and LXC containers
- š» VM and container console command execution
- š§ Host command execution via SSH
- š Configurable logging system
- ā Type-safe implementation with Pydantic
- šØ Rich output formatting with customizable themes
š¦ 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)
- UV installed (
pip install uv
)
Quick Install
-
Clone and set up environment:
# Clone repository git clone https://github.com/netixc/ProxmoxMCP.git cd ProxmoxMCP # Create and activate virtual environment uv venv source .venv/bin/activate # Linux/macOS
-
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 }, "ssh": { # Optional: Required for container/host commands "username": "root", # Optional: Default is "root" "port": 22, # Optional: Default is 22 "key_file": "/path/to/ssh/key", # Optional: SSH private key path "password": "password", # Optional: SSH password (not recommended) "timeout": 30 # Optional: Connection timeout in seconds } }
Verifying Installation
-
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
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
- Log into your Proxmox web interface
- Navigate to Datacenter -> Permissions -> API Tokens
- 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
MCP Client Configuration
Add to your MCP settings:
{
"mcpServers": {
"proxmox": {
"command": "/absolute/path/to/ProxmoxMCP/run-server.sh"
}
}
}
š§ 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%
get_containers
List all LXC containers across the cluster.
- Parameters: None
- Example Response:
š¦ LXC Containers š¦ prod-redis (ID: 200) ⢠Status: RUNNING ⢠Node: pve-compute-01 ⢠Template: ubuntu-22.04 ⢠CPU Cores: 4 ⢠Memory: 8.0 GB / 16.0 GB (50.0%) š¦ dev-database (ID: 201) ⢠Status: STOPPED ⢠Node: pve-compute-02 ⢠Template: debian-12 ⢠CPU Cores: 2 ⢠Memory: 0.0 GB / 8.0 GB (0.0%)
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 runningvmid
(string, required): ID of the VMcommand
(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
execute_container_command
Execute a command in an LXC container via SSH and pct exec.
- Parameters:
node
(string, required): Name of the node where container is runningvmid
(string, required): ID of the containercommand
(string, required): Command to execute
- Example Response:
š§ Container Command Result ⢠Status: SUCCESS ⢠Command: systemctl status redis ⢠Node: pve-compute-01 ⢠Container: prod-redis (ID: 200) Output: ā redis-server.service - Advanced key-value store Loaded: loaded (/lib/systemd/system/redis-server.service; enabled) Active: active (running) since Mon 2025-01-15 10:23:45 UTC; 1 month ago
- Requirements:
- Container must be running
- SSH configuration must be provided in config
- SSH access to the Proxmox host
- Error Handling:
- Returns error if container is not running
- Returns error if SSH connection fails
- Returns error if container is not found
- Includes command output even if command returns non-zero exit code
execute_host_command
Execute a command directly on the Proxmox host via SSH.
- Parameters:
node
(string, required): Name of the target nodecommand
(string, required): Command to execute
- Example Response:
š§ Host Command Result ⢠Status: SUCCESS ⢠Command: pct list ⢠Node: pve-compute-01 Output: VMID Status Lock Name 200 running prod-redis 201 stopped dev-database
- Use Cases:
- Container management:
pct start 200
,pct stop 200
,pct reboot 200
- VM management:
qm start 100
,qm stop 100
,qm reboot 100
- System monitoring:
pvesh get /nodes/NODE/status
- Container management:
- Requirements:
- SSH configuration must be provided in config
- SSH access to the Proxmox host
- Error Handling:
- Returns error if SSH connection fails
- Returns error if node is not found
- 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 (Proxmox API, logging)
ā āāā formatting/ # Output formatting and themes
ā āāā tools/ # Tool implementations
ā ā āāā console/ # VM/container console operations
ā ā āāā cluster.py # Cluster management tools
ā ā āāā container.py # LXC container tools
ā ā āāā node.py # Node management tools
ā ā āāā storage.py # Storage management tools
ā ā āāā vm.py # Virtual machine tools
ā āāā utils/ # Utilities (auth, logging)
āāā tests/ # Test suite
āāā proxmox-config/
ā āāā config.example.json # Configuration template
āāā run-server.sh # Server startup script
āāā requirements*.in # Dependency files
āāā uv.lock # UV lock file
āāā pyproject.toml # Project metadata and dependencies
āāā LICENSE # MIT License
š License
MIT License