Skip to content

shanemort1982/mcp-proxmox

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

25 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ Proxmox MCP Server (Node.js Edition)

A Node.js-based Model Context Protocol (MCP) server for interacting with Proxmox hypervisors, providing a clean interface for managing nodes, VMs, and containers with configurable permission levels.

πŸ™ Credits

This project is based on the original Python implementation by canvrno/ProxmoxMCP. This Node.js version maintains the same core functionality while adapting it for JavaScript/Node.js environments and adding configurable permission management.

πŸ”„ Changes from Original

Architecture Changes:

  • βœ… Complete rewrite from Python to Node.js
  • βœ… Uses @modelcontextprotocol/sdk instead of Python MCP SDK
  • βœ… Environment variable configuration instead of JSON config files
  • βœ… Simplified dependency management with npm

New Features:

  • πŸ”’ Configurable Permission Levels: PROXMOX_ALLOW_ELEVATED setting for security
  • πŸ›‘οΈ Basic Mode: Safe operations (node listing, VM status) with minimal permissions
  • πŸ”“ Elevated Mode: Advanced features (detailed metrics, command execution) requiring full permissions
  • πŸ“ Better Error Handling: Clear permission warnings and graceful degradation
  • πŸ”§ Auto Environment Loading: Automatically loads .env files from parent directories

πŸ—οΈ Built With

✨ Features

  • πŸ”’ Configurable Security: Two permission levels for safe operation
  • πŸ› οΈ Built with the official MCP SDK for Node.js
  • πŸ” Secure token-based authentication with Proxmox
  • πŸ–₯️ Comprehensive node and VM management
  • πŸ’» VM console command execution (elevated mode)
  • πŸ“Š Real-time resource monitoring
  • 🎨 Rich markdown-formatted output
  • ⚑ Fast Node.js performance
  • πŸ”§ Easy environment-based configuration
Proxmox.Manager.Demo.mp4

πŸ“¦ Installation

Prerequisites

  • Node.js 16+ and npm
  • Git
  • Access to a Proxmox server with API token credentials

Before starting, ensure you have:

  • Node.js and npm installed
  • Proxmox server hostname or IP
  • Proxmox API token (see API Token Setup)

Quick Install

  1. Clone and set up:

    git clone https://github.com/gilby125/mcp-proxmox.git
    cd mcp-proxmox
    npm install
  2. Create .env file with your Proxmox configuration:

    # Proxmox Configuration
    PROXMOX_HOST=192.168.1.100
    PROXMOX_USER=root@pam
    PROXMOX_TOKEN_NAME=mcp-server
    PROXMOX_TOKEN_VALUE=your-token-value-here
    PROXMOX_ALLOW_ELEVATED=false  # Set to 'true' for advanced features

    Note: PROXMOX_PORT defaults to 8006 and can be omitted unless using a custom port.

Permission Levels

Basic Mode (PROXMOX_ALLOW_ELEVATED=false):

  • List cluster nodes and their status
  • List VMs and containers
  • Basic cluster health overview
  • Requires minimal API token permissions

Elevated Mode (PROXMOX_ALLOW_ELEVATED=true):

  • All basic features plus:
  • Detailed node resource metrics
  • VM command execution
  • Advanced cluster statistics
  • Requires API token with Sys.Audit, VM.Monitor, VM.Console permissions

Verifying Installation

  1. Test the MCP server:

    echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' | node index.js
  2. Test a basic API call:

    echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "proxmox_get_nodes", "arguments": {}}}' | node index.js

    You should see either:

    • A successful list of your Proxmox nodes
    • Or a connection/permission error with helpful guidance

βš™οΈ Configuration

Proxmox API Token Setup

  1. Log into your Proxmox web interface
  2. Navigate to Datacenter β†’ Permissions β†’ API Tokens
  3. Click Add to create a new API token:
    • User: Select existing user (e.g., root@pam)
    • Token ID: Enter a name (e.g., mcp-server)
    • Privilege Separation: Uncheck for full access or leave checked for limited permissions
    • Click Add
  4. Important: Copy both the Token ID and Secret immediately (secret is only shown once)
    • Use Token ID as PROXMOX_TOKEN_NAME
    • Use Secret as PROXMOX_TOKEN_VALUE

Permission Requirements:

  • Basic Mode: Minimal permissions (usually default user permissions work)
  • Elevated Mode: Add permissions for Sys.Audit, VM.Monitor, VM.Console to the user/token

πŸš€ Running the Server

Direct Execution

node index.js

MCP Client Integration

For Claude Code or other MCP clients, add this to your MCP configuration:

{
  "mcpServers": {
    "mcp-proxmox": {
      "command": "node",
      "args": ["index.js"],
      "cwd": "/absolute/path/to/mcp-proxmox"
    }
  }
}

Important:

  • Replace /absolute/path/to/mcp-proxmox with the actual path to your installation
  • The server automatically loads environment variables from .env files
  • Ensure the .env file is in the same directory as index.js or a parent directory

πŸ”§ Available Tools

The server provides the following MCP tools for interacting with Proxmox:

proxmox_get_nodes

Lists all nodes in the Proxmox cluster with their status and resources.

  • Parameters: None
  • Example Response:
    πŸ–₯️  **Proxmox Cluster Nodes**
    
    🟒 **pve1**
       β€’ Status: online
       β€’ Uptime: 3d 2h 53m
       β€’ CPU: 1.8%
       β€’ Memory: 5.89 GB / 62.21 GB (9.5%)
       β€’ Load: N/A
    

proxmox_get_node_status

Get detailed status of a specific node (requires elevated permissions).

  • Parameters:
    • node (string, required): Name of the node
  • Example Response (Basic Mode):
    ⚠️  **Node Status Requires Elevated Permissions**
    
    To view detailed node status, set `PROXMOX_ALLOW_ELEVATED=true` in your .env file 
    and ensure your API token has Sys.Audit permissions.
    
    **Current permissions**: Basic (node listing only)
    

proxmox_get_vms

List all virtual machines across the cluster with their status.

  • Parameters:
    • node (string, optional): Filter by specific node
    • type (string, optional): VM type filter ('qemu', 'lxc', 'all'), default: 'all'
  • Example Response:
    πŸ’» **Virtual Machines**
    
    🟒 πŸ“¦ **docker** (ID: 100)
       β€’ Node: pve1
       β€’ Status: running
       β€’ Type: LXC
       β€’ Uptime: 5h 40m
       β€’ CPU: 0.8%
       β€’ Memory: 7.46 GB / 46.88 GB
    
    πŸ”΄ πŸ“¦ **ubuntu1** (ID: 115)
       β€’ Node: pve1
       β€’ Status: stopped
       β€’ Type: LXC
    

proxmox_get_vm_status

Get detailed status information for a specific VM.

  • Parameters:
    • node (string, required): Node name where VM is located
    • vmid (string, required): VM ID number
    • type (string, optional): VM type ('qemu', 'lxc'), default: 'qemu'
  • Example Response:
    🟒 πŸ“¦ **docker** (ID: 100)
    
    β€’ **Node**: pve1
    β€’ **Status**: running
    β€’ **Type**: LXC
    β€’ **Uptime**: 5h 42m
    β€’ **CPU Usage**: 0.8%
    β€’ **Memory**: 7.47 GB / 46.88 GB (15.9%)
    β€’ **Disk Read**: 19.74 GB
    β€’ **Disk Write**: 21.71 GB
    β€’ **Network In**: 1.32 GB
    β€’ **Network Out**: 216.56 MB
    

proxmox_get_storage

List all storage pools and their usage across the cluster.

  • Parameters:
    • node (string, optional): Filter by specific node
  • Example Response:
    πŸ’Ύ **Storage Pools**
    
    🟒 **local**
       β€’ Node: pve1
       β€’ Type: dir
       β€’ Content: vztmpl,iso,backup
       β€’ Usage: 19.58 GB / 93.93 GB (20.8%)
       β€’ Status: Enabled
    
    🟒 **zfs**
       β€’ Node: pve1
       β€’ Type: zfspool
       β€’ Content: rootdir,images
       β€’ Usage: 87.33 MB / 899.25 GB (0.0%)
       β€’ Status: Enabled
    

proxmox_get_cluster_status

Get overall cluster status including nodes and resource usage.

  • Parameters: None
  • Example Response (Basic Mode):
    πŸ—οΈ  **Proxmox Cluster Status**
    
    **Cluster Health**: 🟒 Healthy
    **Nodes**: 1/1 online
    
    ⚠️  **Limited Information**: Resource usage requires elevated permissions
    
    **Node Details**:
    🟒 pve1 - online
    

proxmox_execute_vm_command

Execute a shell command on a virtual machine via Proxmox API (requires elevated permissions).

  • Parameters:
    • node (string, required): Node name where VM is located
    • vmid (string, required): VM ID number
    • command (string, required): Shell command to execute
    • type (string, optional): VM type ('qemu', 'lxc'), default: 'qemu'
  • Example Response (Basic Mode):
    ⚠️  **VM Command Execution Requires Elevated Permissions**
    
    To execute commands on VMs, set `PROXMOX_ALLOW_ELEVATED=true` in your .env file 
    and ensure your API token has appropriate VM permissions.
    
    **Current permissions**: Basic (VM listing only)
    **Requested command**: `uptime`
    
  • Requirements (Elevated Mode):
    • VM must be running
    • For QEMU: QEMU Guest Agent must be installed and running
    • For LXC: Direct execution via Proxmox API
    • Appropriate API token permissions

πŸ‘¨β€πŸ’» Development

Development Commands

# Install dependencies
npm install

# Run server (production)
npm start
# or
node index.js

# Run server with auto-reload (development)
npm run dev

# Test MCP server functionality
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' | node index.js

# Test specific API call
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "proxmox_get_nodes", "arguments": {}}}' | node index.js

Development Notes

  • The server loads environment variables from .env files automatically
  • Use npm run dev for development with auto-reload on file changes
  • All API calls require a proper .env configuration
  • Check the server logs for connection and permission issues

πŸ“ Project Structure

mcp-proxmox/
β”œβ”€β”€ index.js                  # Main MCP server implementation
β”œβ”€β”€ package.json             # Node.js dependencies and scripts
β”œβ”€β”€ package-lock.json        # Dependency lock file
β”œβ”€β”€ .env                     # Environment configuration (not in git)
β”œβ”€β”€ node_modules/            # Dependencies (not in git)
└── README.md               # This documentation

πŸ“„ License

MIT License

About

MCP server for Proxmox virtualization management with configurable permissions

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 81.3%
  • JavaScript 18.7%