ProxmoxMCP-Plus

Servidor MCP de gestión de Proxmox VE con integración completa de OpenAPI para controlar máquinas virtuales, contenedores y recursos del clúster.

Documentación

ProxmoxMCP-Plus

Buy Me A Coffee

Un servidor mejorado del Protocolo de Contexto de Modelo (MCP) basado en Python para interactuar con plataformas de virtualización Proxmox. Este proyecto extiende canvrno/ProxmoxMCP con características adicionales, incluyendo integración completa de OpenAPI y capacidades ampliadas de gestión de virtualización.

Agradecimientos

Este proyecto se basa en el proyecto de código abierto ProxmoxMCP de @canvrno.

Nuevas Características y Mejoras

Mejoras Principales

Categoría de CaracterísticaDescripciónHerramientas
Gestión del Ciclo de Vida de VMCreación, gestión y eliminación completa de máquinas virtualescreate_vm, delete_vm
Gestión de EnergíaControl de estados de energía de VMstart_vm, stop_vm, shutdown_vm, reset_vm
Soporte de ContenedoresGestión completa del ciclo de vida de contenedores LXCget_containers, create_container, delete_container, start_container, stop_container, restart_container, update_container_resources
Gestión de InstantáneasCrear y gestionar instantáneas de VM/contenedoreslist_snapshots, create_snapshot, delete_snapshot, rollback_snapshot
Copia de Seguridad y RestauraciónCopia de seguridad y restauración de VMs y contenedoreslist_backups, create_backup, restore_backup, delete_backup
Gestión de ISO y PlantillasGestión de medios de instalación y plantillaslist_isos, list_templates, download_iso, delete_iso
MonitoreoMonitoreo de clúster y recursosget_nodes, get_node_status, get_vms, get_storage, get_cluster_status
Integración OpenAPIEndpoints de API REST para integración externaMás de 20 endpoints de API
Seguridad y EstabilidadManejo de errores y validación de nivel de producciónAutenticación basada en tokens, registro integral

Construido Con

  • Proxmoxer - Envoltorio de Python para la API de Proxmox
  • MCP SDK - SDK del Protocolo de Contexto de Modelo
  • Pydantic - Validación de datos usando anotaciones de tipo de Python

Características

  • Integración completa con Cline y Open WebUI
  • Construido con el SDK oficial de MCP
  • Autenticación segura basada en tokens con Proxmox
  • Gestión completa del ciclo de vida de VM (crear, iniciar, detener, reiniciar, apagar, eliminar)
  • Ejecución de comandos de consola de VM
  • Soporte de gestión de contenedores LXC
  • Detección inteligente de tipo de almacenamiento (LVM/basado en archivos)
  • Sistema de registro configurable
  • Implementación segura de tipos con Pydantic
  • Formato de salida enriquecido con temas personalizables
  • Endpoints REST de OpenAPI para integración
  • Más de 20 endpoints de API totalmente funcionales
  • Gestión completa de instantáneas (crear, eliminar, revertir)
  • Capacidades de copia de seguridad y restauración
  • Gestión de ISO y plantillas

Instalación

Requisitos Previos

  • Gestor de paquetes UV (recomendado)
  • Python 3.9 o superior
  • Git
  • Acceso a un servidor Proxmox con credenciales de token de API

Antes de comenzar, asegúrate de tener:

Opción 1: Instalación Rápida (Recomendada)

  1. Clona y configura el entorno:

    # 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
    
  2. Instala las dependencias:

    # Install with development dependencies
    uv pip install -e ".[dev]"
    
  3. Crea la configuración:

    # Create config directory and copy template
    mkdir -p proxmox-config
    cp proxmox-config/config.example.json proxmox-config/config.json
    
  4. Edita 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
        },
        "mcp": {
            "host": "127.0.0.1",           # Optional: Host for SSE/STREAMABLE transports
            "port": 8000,                  # Optional: Port for SSE/STREAMABLE transports
            "transport": "STDIO"           # Optional: STDIO, SSE, or STREAMABLE
        }
    }
    

Verificación de la Instalación

  1. Verifica el entorno de Python:

    python -c "import proxmox_mcp; print('Installation OK')"
    
  2. Ejecuta las pruebas:

    pytest
    
  3. Verifica la configuración:

    # 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
    

Configuración

Configuración del Token de API de Proxmox

  1. Inicia sesión en tu interfaz web de Proxmox
  2. Navega a Datacenter -> Permisos -> Tokens de API
  3. Crea un nuevo token de API:
    • Selecciona un usuario (por ejemplo, root@pam)
    • Ingresa un ID de token (por ejemplo, "mcp-token")
    • Desmarca "Separación de Privilegios" si deseas acceso completo
    • Guarda y copia tanto el ID del token como el secreto

Ejecución del Servidor

Modo de Desarrollo

Para pruebas y desarrollo:

# Activate virtual environment first
source .venv/bin/activate  # Linux/macOS
# OR
.\.venv\Scripts\Activate.ps1  # Windows

# Run the server
python -m proxmox_mcp.server

Configuración de Transporte MCP

El servidor MCP admite múltiples modos de transporte. Configúralos en la sección mcp de tu proxmox-config/config.json:

  • STDIO: Predeterminado. Se ejecuta sobre stdio para clientes MCP como Claude Desktop/Cline.
  • SSE: Sirve MCP sobre Eventos Enviados por el Servidor (SSE).
  • STREAMABLE: Sirve MCP sobre HTTP transmisible.

Despliegue OpenAPI (Listo para Producción)

Despliega ProxmoxMCP Plus como endpoints REST estándar de OpenAPI para integración con Open WebUI y otras aplicaciones.

Inicio Rápido de OpenAPI

# Install mcpo (MCP-to-OpenAPI proxy)
pip install mcpo

# Start OpenAPI service on port 8811
./start_openapi.sh

Despliegue con Docker

# 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

Acceso al Servicio OpenAPI

Una vez desplegado, accede a tu servicio en:

Integración con Claude Desktop

Para usuarios de Claude Desktop, agrega esta configuración a tu archivo de configuración de MCP:

Ubicación del archivo de configuración:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json

Configuración Rápida:

  1. Copia la configuración de ejemplo:

    # macOS
    cp proxmox-config/claude_desktop_config.example.json ~/Library/Application\ Support/Claude/claude_desktop_config.json
    
    # Linux
    cp proxmox-config/claude_desktop_config.example.json ~/.config/Claude/claude_desktop_config.json
    
    # Windows (PowerShell)
    Copy-Item proxmox-config\claude_desktop_config.example.json $env:APPDATA\Claude\claude_desktop_config.json
    
  2. Edita el archivo y reemplaza los siguientes valores:

    • /absolute/path/to/ProxmoxMCP-Plus - Ruta completa a tu instalación
    • your-proxmox-host - IP o nombre de host de tu servidor Proxmox
    • username@pve - Tu nombre de usuario de Proxmox
    • token-name - Tu nombre de token de API
    • token-value - Tu valor de token de API

Configuración:

{
    "mcpServers": {
        "ProxmoxMCP-Plus": {
            "command": "/absolute/path/to/ProxmoxMCP-Plus/.venv/bin/python",
            "args": ["-m", "proxmox_mcp.server"],
            "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"
            }
        }
    }
}

Después de la configuración:

  1. Reinicia Claude Desktop
  2. Las herramientas de ProxmoxMCP-Plus estarán disponibles en tus conversaciones
  3. ¡Ahora puedes gestionar tu infraestructura Proxmox a través de Claude Desktop!

Integración con Cline Desktop

Para usuarios de Cline, agrega esta configuración a tu archivo de configuración de MCP (típicamente en ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json):

{
    "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": []
        }
    }
}

Herramientas Disponibles y Endpoints de API

El servidor proporciona herramientas MCP integrales y endpoints de API REST correspondientes:

Herramientas de Gestión de VM

create_vm

Crea una nueva máquina virtual con los recursos especificados.

Parámetros:

  • node (cadena, requerido): Nombre del nodo
  • vmid (cadena, requerido): ID para la nueva VM
  • name (cadena, requerido): Nombre para la VM
  • cpus (entero, requerido): Número de núcleos de CPU (1-32)
  • memory (entero, requerido): Memoria en MB (512-131072)
  • disk_size (entero, requerido): Tamaño del disco en GB (5-1000)
  • storage (cadena, opcional): Nombre del grupo de almacenamiento
  • ostype (cadena, opcional): Tipo de sistema operativo (predeterminado: l26)

Endpoint de API:

POST /create_vm
Content-Type: application/json

{
    "node": "pve",
    "vmid": "200",
    "name": "my-vm",
    "cpus": 1,
    "memory": 2048,
    "disk_size": 10
}

Ejemplo de Respuesta:

VM 200 created successfully.

VM Configuration:
  - Name: my-vm
  - Node: pve
  - VM ID: 200
  - CPU Cores: 1
  - Memory: 2048 MB (2.0 GB)
  - Disk: 10 GB (local-lvm, raw format)
  - Storage Type: lvmthin
  - Network: virtio (bridge=vmbr0)
  - QEMU Agent: Enabled

Task ID: UPID:pve:001AB729:0442E853:682FF380:qmcreate:200:root@pam!mcp

Gestión de Energía de VM

start_vm: Inicia una máquina virtual

POST /start_vm
{"node": "pve", "vmid": "200"}

stop_vm: Detiene forzosamente una máquina virtual

POST /stop_vm
{"node": "pve", "vmid": "200"}

shutdown_vm: Apaga correctamente una máquina virtual

POST /shutdown_vm
{"node": "pve", "vmid": "200"}

reset_vm: Reinicia una máquina virtual

POST /reset_vm
{"node": "pve", "vmid": "200"}

delete_vm: Elimina completamente una máquina virtual

POST /delete_vm
{"node": "pve", "vmid": "200", "force": false}

Herramientas de Gestión de Instantáneas

list_snapshots

Lista todas las instantáneas de una VM o contenedor.

Parámetros:

  • node (cadena, requerido): Nombre del nodo host (por ejemplo, 'pve')
  • vmid (cadena, requerido): ID de VM o contenedor (por ejemplo, '100')
  • vm_type (cadena, opcional): Tipo - 'qemu' para VMs, 'lxc' para contenedores (predeterminado: 'qemu')

Endpoint de API: POST /list_snapshots

Ejemplo:

POST /list_snapshots
{"node": "pve", "vmid": "100", "vm_type": "qemu"}

create_snapshot

Crea una instantánea de una VM o contenedor.

Parámetros:

  • node (cadena, requerido): Nombre del nodo host
  • vmid (cadena, requerido): ID de VM o contenedor
  • snapname (cadena, requerido): Nombre de la instantánea (sin espacios, por ejemplo, 'antes-de-actualizar')
  • description (cadena, opcional): Descripción de la instantánea
  • vmstate (booleano, opcional): Incluir estado de memoria (solo VMs, predeterminado: false)
  • vm_type (cadena, opcional): Tipo - 'qemu' o 'lxc' (predeterminado: 'qemu')

Endpoint de API:

POST /create_snapshot
Content-Type: application/json

{
    "node": "pve",
    "vmid": "100",
    "snapname": "pre-upgrade",
    "description": "Before system upgrade",
    "vmstate": true
}

delete_snapshot

Elimina una instantánea.

Parámetros:

  • node (cadena, requerido): Nombre del nodo host
  • vmid (cadena, requerido): ID de VM o contenedor
  • snapname (cadena, requerido): Nombre de la instantánea a eliminar
  • vm_type (cadena, opcional): Tipo - 'qemu' o 'lxc' (predeterminado: 'qemu')

Endpoint de API:

POST /delete_snapshot
{"node": "pve", "vmid": "100", "snapname": "old-snapshot"}

rollback_snapshot

Revierte VM/contenedor a una instantánea anterior.

ADVERTENCIA: ¡Esto detendrá la VM/contenedor y restaurará al estado de la instantánea!

Parámetros:

  • node (cadena, requerido): Nombre del nodo host
  • vmid (cadena, requerido): ID de VM o contenedor
  • snapname (cadena, requerido): Nombre de la instantánea a restaurar
  • vm_type (cadena, opcional): Tipo - 'qemu' o 'lxc' (predeterminado: 'qemu')

Endpoint de API:

POST /rollback_snapshot
{"node": "pve", "vmid": "100", "snapname": "before-update"}

Herramientas de Gestión de Contenedores

get_containers

Lista todos los contenedores LXC en todo el clúster.

Endpoint de API: POST /get_containers

Ejemplo de Respuesta:

Containers

nginx-server (ID: 200)
  - Status: RUNNING
  - Node: pve
  - CPU Cores: 2
  - Memory: 1.5 GB / 2.0 GB (75.0%)

create_container

Crea un nuevo contenedor LXC con la configuración especificada.

Parámetros:

  • node (cadena, requerido): Nombre del nodo host (por ejemplo, 'pve')
  • vmid (cadena, requerido): Número de ID del contenedor (por ejemplo, '200')
  • ostemplate (cadena, requerido): Ruta de la plantilla del sistema operativo (por ejemplo, 'local:vztmpl/alpine-3.19-default_20240207_amd64.tar.xz')
  • hostname (cadena, opcional): Nombre de host del contenedor (predeterminado: 'ct-{vmid}')
  • cores (entero, opcional): Número de núcleos de CPU (predeterminado: 1)
  • memory (entero, opcional): Tamaño de memoria en MiB (predeterminado: 512)
  • swap (entero, opcional): Tamaño de intercambio en MiB (predeterminado: 512)
  • disk_size (entero, opcional): Tamaño del disco raíz en GB (predeterminado: 8)
  • storage (cadena, opcional): Grupo de almacenamiento para rootfs (detección automática si no se especifica)
  • password (cadena, opcional): Contraseña de root
  • ssh_public_keys (cadena, opcional): Claves públicas SSH para el usuario root
  • network_bridge (cadena, opcional): Nombre del puente de red (predeterminado: 'vmbr0')
  • start_after_create (booleano, opcional): Iniciar contenedor después de la creación (predeterminado: false)
  • unprivileged (booleano, opcional): Crear contenedor sin privilegios (predeterminado: true)

Endpoint de API:

POST /create_container
Content-Type: application/json

{
    "node": "pve",
    "vmid": "200",
    "ostemplate": "local:vztmpl/alpine-3.19-default_20240207_amd64.tar.xz",
    "hostname": "my-container",
    "cores": 2,
    "memory": 1024,
    "disk_size": 10
}

delete_container

Elimina/remueve un contenedor LXC completamente.

ADVERTENCIA: ¡Esta operación elimina permanentemente el contenedor y todos sus datos!

Parámetros:

  • selector (cadena, requerido): Selector de contenedor - '123' | 'pve1:123' | 'pve1/nombre' | 'nombre'
  • force (booleano, opcional): Forzar eliminación incluso si el contenedor está en ejecución (predeterminado: false)

Endpoint de API:

POST /delete_container
Content-Type: application/json

{
    "selector": "200",
    "force": false
}

Herramientas de Copia de Seguridad y Restauración

list_backups

Lista las copias de seguridad disponibles en todo el clúster.

Parámetros:

  • node (cadena, opcional): Filtrar por nodo
  • storage (cadena, opcional): Filtrar por grupo de almacenamiento
  • vmid (cadena, opcional): Filtrar por ID de VM/contenedor

Endpoint de API: POST /list_backups

Ejemplo:

POST /list_backups
{"node": "pve", "storage": "backup-storage"}

create_backup

Crea una copia de seguridad de una VM o contenedor.

Parámetros:

  • node (cadena, requerido): Nodo donde se ejecuta la VM/contenedor
  • vmid (cadena, requerido): ID de VM o contenedor a respaldar
  • storage (cadena, requerido): Almacenamiento de copia de seguridad de destino
  • compress (cadena, opcional): Compresión - '0', 'gzip', 'lz4', 'zstd' (predeterminado: 'zstd')
  • mode (cadena, opcional): Modo de copia de seguridad - 'snapshot', 'suspend', 'stop' (predeterminado: 'snapshot')
  • notes (cadena, opcional): Notas/descripción para la copia de seguridad

Endpoint de API:

POST /create_backup
Content-Type: application/json

{
    "node": "pve",
    "vmid": "100",
    "storage": "backup-storage",
    "compress": "zstd",
    "mode": "snapshot",
    "notes": "Weekly backup"
}

restore_backup

Restaura una VM o contenedor desde una copia de seguridad.

Parámetros:

  • node (cadena, requerido): Nodo de destino para la restauración
  • archive (cadena, requerido): ID de volumen de copia de seguridad (de la salida de list_backups)
  • vmid (cadena, requerido): Nuevo ID de VM/contenedor para la máquina restaurada
  • storage (cadena, opcional): Almacenamiento de destino para discos (usa el original si no se especifica)
  • unique (booleano, opcional): Generar direcciones MAC únicas (predeterminado: true)

Endpoint de API:

POST /restore_backup
Content-Type: application/json

{
    "node": "pve",
    "archive": "backup:backup/vzdump-qemu-100-2024_01_15.vma.zst",
    "vmid": "200",
    "unique": true
}

delete_backup

Elimina un archivo de copia de seguridad del almacenamiento.

ADVERTENCIA: ¡Esto elimina permanentemente la copia de seguridad!

Parámetros:

  • node (cadena, obligatorio): Nombre del nodo
  • storage (cadena, obligatorio): Nombre del grupo de almacenamiento
  • volid (cadena, obligatorio): ID del volumen de copia de seguridad a eliminar

Endpoint de API:

POST /delete_backup
{
    "node": "pve",
    "storage": "backup-storage",
    "volid": "backup:backup/vzdump-qemu-100-2024_01_15.vma.zst"
}

Herramientas de Gestión de ISO y Plantillas

list_isos

Lista las imágenes ISO disponibles en todo el clúster.

Parámetros:

  • node (cadena, opcional): Filtrar por nodo
  • storage (cadena, opcional): Filtrar por grupo de almacenamiento

Endpoint de API: POST /list_isos

Devuelve: Lista de ISOs con nombre de archivo, tamaño y ubicación de almacenamiento.

list_templates

Lista las plantillas de sistema operativo disponibles para la creación de contenedores.

Parámetros:

  • node (cadena, opcional): Filtrar por nodo
  • storage (cadena, opcional): Filtrar por grupo de almacenamiento

Endpoint de API: POST /list_templates

Devuelve: Lista de plantillas (vztmpl) con nombre, tamaño y almacenamiento. Usa el ID de volumen devuelto con el parámetro ostemplate de create_container.

download_iso

Descarga una imagen ISO desde una URL al almacenamiento de Proxmox.

Parámetros:

  • node (cadena, obligatorio): Nombre del nodo de destino
  • storage (cadena, obligatorio): Grupo de almacenamiento de destino (debe soportar contenido ISO)
  • url (cadena, obligatorio): URL desde la que descargar
  • filename (cadena, obligatorio): Nombre del archivo de destino (p. ej., 'ubuntu-22.04-live-server-amd64.iso')
  • checksum (cadena, opcional): Checksum para verificación
  • checksum_algorithm (cadena, opcional): Algoritmo - 'sha256', 'sha512', 'md5' (predeterminado: 'sha256')

Endpoint de API:

POST /download_iso
Content-Type: application/json

{
    "node": "pve",
    "storage": "local",
    "url": "https://releases.ubuntu.com/22.04/ubuntu-22.04-live-server-amd64.iso",
    "filename": "ubuntu-22.04-live-server-amd64.iso",
    "checksum": "a1b2c3..."
}

delete_iso

Elimina un ISO o plantilla del almacenamiento.

Parámetros:

  • node (cadena, obligatorio): Nombre del nodo
  • storage (cadena, obligatorio): Nombre del grupo de almacenamiento
  • filename (cadena, obligatorio): Nombre del archivo ISO/plantilla a eliminar

Endpoint de API:

POST /delete_iso
{
    "node": "pve",
    "storage": "local",
    "filename": "old-distro.iso"
}

Herramientas de Monitoreo

get_nodes

Lista todos los nodos en el clúster de Proxmox.

Endpoint de API: POST /get_nodes

Ejemplo de respuesta:

Proxmox Nodes

pve-compute-01
  - Status: ONLINE
  - Uptime: 156d 12h
  - CPU Cores: 64
  - Memory: 186.5 GB / 512.0 GB (36.4%)

get_node_status

Obtén el estado detallado de un nodo específico.

Parámetros:

  • node (cadena, obligatorio): Nombre del nodo

Endpoint de API: POST /get_node_status

get_vms

Lista todas las máquinas virtuales en todo el clúster.

Endpoint de API: POST /get_vms

get_storage

Lista los grupos de almacenamiento disponibles.

Endpoint de API: POST /get_storage

get_cluster_status

Obtén el estado general y la salud del clúster.

Endpoint de API: POST /get_cluster_status

execute_vm_command

Ejecuta un comando en la consola de una VM usando QEMU Guest Agent.

Parámetros:

  • node (cadena, obligatorio): Nombre del nodo donde se está ejecutando la VM
  • vmid (cadena, obligatorio): ID de la VM
  • command (cadena, obligatorio): Comando a ejecutar

Endpoint de API: POST /execute_vm_command

Requisitos:

  • La VM debe estar en ejecución
  • QEMU Guest Agent debe estar instalado y ejecutándose en la VM

Integración con Open WebUI

Configurar Open WebUI

  1. Accede a tu instancia de Open WebUI
  2. Navega a ConfiguraciónConexionesOpenAPI
  3. Añade una nueva configuración de API:
{
  "name": "Proxmox MCP API Plus",
  "base_url": "http://your-server:8811",
  "api_key": "",
  "description": "Enhanced Proxmox Virtualization Management API"
}

Creación de VM en Lenguaje Natural

El sistema admite solicitudes de creación de VM en lenguaje natural a través de asistentes de IA. Ejemplos de solicitudes:

  • "¿Puedes crear una VM con 1 núcleo de CPU y 2 GB de RAM con 10 GB de disco de almacenamiento?"
  • "Crea una nueva VM para pruebas con recursos mínimos"
  • "Necesito un servidor de desarrollo con 4 núcleos y 8 GB de RAM"

El asistente de IA llamará automáticamente a las APIs apropiadas y proporcionará comentarios detallados.

Soporte de Tipos de Almacenamiento

Detección Inteligente de Almacenamiento

ProxmoxMCP Plus detecta automáticamente los tipos de almacenamiento y selecciona los formatos de disco apropiados:

Almacenamiento LVM (local-lvm, vm-storage)

  • Formato: raw
  • Alto rendimiento
  • Nota: Sin soporte de imagen cloud-init

Almacenamiento basado en archivos (local, NFS, CIFS)

  • Formato: qcow2
  • Soporte de cloud-init
  • Capacidades flexibles de instantáneas

Estructura del Proyecto

ProxmoxMCP-Plus/
├── src/                          # Source code
│   └── proxmox_mcp/
│       ├── server.py             # Main MCP server implementation
│       ├── config/               # Configuration handling
│       ├── core/                 # Core functionality
│       ├── formatting/           # Output formatting and themes
│       ├── tools/                # Tool implementations
│       │   ├── vm.py             # VM management
│       │   ├── container.py      # Container management
│       │   └── console/          # VM console operations
│       └── utils/                # Utilities (auth, logging)
│
├── tests/                        # Unit test suite
├── test_scripts/                 # Integration tests & demos
│   ├── README.md                 # Test documentation
│   ├── test_vm_power.py          # VM power management tests
│   ├── test_vm_start.py          # VM startup tests
│   ├── test_create_vm.py         # VM creation tests
│   └── test_openapi.py           # OpenAPI service tests
│
├── proxmox-config/               # Configuration files
│   └── config.json               # Server configuration
│
├── Configuration Files
│   ├── pyproject.toml            # Project metadata
│   ├── docker-compose.yml        # Docker orchestration
│   ├── Dockerfile                # Docker image definition
│   └── requirements.in           # Dependencies
│
├── Scripts
│   ├── start_server.sh           # MCP server launcher
│   └── start_openapi.sh          # OpenAPI service launcher
│
└── Documentation
    ├── README.md                 # This file
    ├── VM_CREATION_GUIDE.md      # VM creation guide
    ├── OPENAPI_DEPLOYMENT.md     # OpenAPI deployment
    └── LICENSE                   # MIT License

Pruebas

Ejecutar Pruebas Unitarias

pytest

Ejecutar Pruebas de Integración

cd test_scripts

# Test VM power management
python test_vm_power.py

# Test VM creation
python test_create_vm.py

# Test OpenAPI service
python test_openapi.py

Pruebas de API con curl

# Test node listing
curl -X POST "http://your-server:8811/get_nodes" \
  -H "Content-Type: application/json" \
  -d "{}"

# Test VM creation
curl -X POST "http://your-server:8811/create_vm" \
  -H "Content-Type: application/json" \
  -d '{
    "node": "pve",
    "vmid": "300",
    "name": "test-vm",
    "cpus": 1,
    "memory": 2048,
    "disk_size": 10
  }'

Seguridad en Producción

Autenticación con Clave de API

Configura el acceso seguro a la API:

export PROXMOX_API_KEY="your-secure-api-key"
export PROXMOX_MCP_CONFIG="/app/proxmox-config/config.json"

Proxy Inverso Nginx

Ejemplo de configuración de nginx:

server {
    listen 80;
    server_name your-domain.com;
    
    location / {
        proxy_pass http://localhost:8811;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Solución de Problemas

Problemas Comunes

  1. Puerto ya en uso

    netstat -tlnp | grep 8811
    # Change port if needed
    mcpo --port 8812 -- ./start_server.sh
    
  2. Errores de configuración

    # Verify config file
    cat proxmox-config/config.json
    
  3. Problemas de conexión

    # Test Proxmox connectivity
    curl -k https://your-proxmox:8006/api2/json/version
    

Ver Registros

# View service logs
tail -f proxmox_mcp.log

# Docker logs
docker logs proxmox-mcp-api -f

Estado de Implementación

Estado de Finalización de Funciones

  • Creación de VM (requisito del usuario: 1 CPU + 2 GB RAM + 10 GB de almacenamiento)
  • Gestión de Energía de VM (iniciar VPN-Server ID:101)
  • Función de Eliminación de VM
  • Gestión de Contenedores (LXC)
  • Creación y Eliminación de Contenedores
  • Gestión de Instantáneas (crear, eliminar, revertir)
  • Copia de Seguridad y Restauración
  • Gestión de ISO y Plantillas
  • Compatibilidad de Almacenamiento (LVM/basado en archivos)
  • Integración OpenAPI (puerto 8811)
  • Integración con Open WebUI
  • Manejo de Errores y Validación
  • Documentación y Pruebas Completas

Preparación para Producción

ProxmoxMCP Plus está listo para la implementación en producción. El sistema admite solicitudes de creación de VM en lenguaje natural a través de asistentes de IA. Cuando un usuario solicita la creación de una VM (p. ej., "crea una VM con 1 núcleo de CPU y 2 GB de RAM con 10 GB de disco de almacenamiento"), el sistema:

  1. Llamará al endpoint de API create_vm
  2. Seleccionará automáticamente el almacenamiento y formato apropiados
  3. Creará VMs que coincidan con los requisitos especificados
  4. Devolverá información de configuración detallada
  5. Proporcionará recomendaciones de próximos pasos

Desarrollo

Después de activar tu entorno virtual:

  • Ejecutar pruebas: pytest
  • Formatear código: black .
  • Verificación de tipos: mypy .
  • Lint: ruff .

Licencia

Licencia MIT

Agradecimientos Especiales

  • @canvrno por el proyecto fundacional ProxmoxMCP
  • Gracias a la comunidad de Proxmox por proporcionar la potente plataforma de virtualización
  • Gracias a todos los contribuyentes y usuarios por su apoyo

ProxmoxMCP Plus con integración OpenAPI está listo para la implementación en producción.