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
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ística | Descripción | Herramientas |
|---|---|---|
| Gestión del Ciclo de Vida de VM | Creación, gestión y eliminación completa de máquinas virtuales | create_vm, delete_vm |
| Gestión de Energía | Control de estados de energía de VM | start_vm, stop_vm, shutdown_vm, reset_vm |
| Soporte de Contenedores | Gestión completa del ciclo de vida de contenedores LXC | get_containers, create_container, delete_container, start_container, stop_container, restart_container, update_container_resources |
| Gestión de Instantáneas | Crear y gestionar instantáneas de VM/contenedores | list_snapshots, create_snapshot, delete_snapshot, rollback_snapshot |
| Copia de Seguridad y Restauración | Copia de seguridad y restauración de VMs y contenedores | list_backups, create_backup, restore_backup, delete_backup |
| Gestión de ISO y Plantillas | Gestión de medios de instalación y plantillas | list_isos, list_templates, download_iso, delete_iso |
| Monitoreo | Monitoreo de clúster y recursos | get_nodes, get_node_status, get_vms, get_storage, get_cluster_status |
| Integración OpenAPI | Endpoints de API REST para integración externa | Más de 20 endpoints de API |
| Seguridad y Estabilidad | Manejo de errores y validación de nivel de producción | Autenticació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:
- Nombre de host o IP del servidor Proxmox
- Token de API de Proxmox (consulta Configuración de Token de API)
- UV instalado (
pip install uv)
Opción 1: Instalación Rápida (Recomendada)
-
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 -
Instala las dependencias:
# Install with development dependencies uv pip install -e ".[dev]" -
Crea la configuración:
# Create config directory and copy template mkdir -p proxmox-config cp proxmox-config/config.example.json proxmox-config/config.json -
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
-
Verifica el entorno de Python:
python -c "import proxmox_mcp; print('Installation OK')" -
Ejecuta las pruebas:
pytest -
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
- Inicia sesión en tu interfaz web de Proxmox
- Navega a Datacenter -> Permisos -> Tokens de API
- 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:
- Documentación de API: http://your-server:8811/docs
- Especificación OpenAPI: http://your-server:8811/openapi.json
- Verificación de Salud: http://your-server:8811/health
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:
-
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 -
Edita el archivo y reemplaza los siguientes valores:
/absolute/path/to/ProxmoxMCP-Plus- Ruta completa a tu instalaciónyour-proxmox-host- IP o nombre de host de tu servidor Proxmoxusername@pve- Tu nombre de usuario de Proxmoxtoken-name- Tu nombre de token de APItoken-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:
- Reinicia Claude Desktop
- Las herramientas de ProxmoxMCP-Plus estarán disponibles en tus conversaciones
- ¡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 nodovmid(cadena, requerido): ID para la nueva VMname(cadena, requerido): Nombre para la VMcpus(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 almacenamientoostype(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 hostvmid(cadena, requerido): ID de VM o contenedorsnapname(cadena, requerido): Nombre de la instantánea (sin espacios, por ejemplo, 'antes-de-actualizar')description(cadena, opcional): Descripción de la instantáneavmstate(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 hostvmid(cadena, requerido): ID de VM o contenedorsnapname(cadena, requerido): Nombre de la instantánea a eliminarvm_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 hostvmid(cadena, requerido): ID de VM o contenedorsnapname(cadena, requerido): Nombre de la instantánea a restaurarvm_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 rootssh_public_keys(cadena, opcional): Claves públicas SSH para el usuario rootnetwork_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 nodostorage(cadena, opcional): Filtrar por grupo de almacenamientovmid(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/contenedorvmid(cadena, requerido): ID de VM o contenedor a respaldarstorage(cadena, requerido): Almacenamiento de copia de seguridad de destinocompress(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ónarchive(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 restauradastorage(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 nodostorage(cadena, obligatorio): Nombre del grupo de almacenamientovolid(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 nodostorage(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 nodostorage(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 destinostorage(cadena, obligatorio): Grupo de almacenamiento de destino (debe soportar contenido ISO)url(cadena, obligatorio): URL desde la que descargarfilename(cadena, obligatorio): Nombre del archivo de destino (p. ej., 'ubuntu-22.04-live-server-amd64.iso')checksum(cadena, opcional): Checksum para verificaciónchecksum_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 nodostorage(cadena, obligatorio): Nombre del grupo de almacenamientofilename(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 VMvmid(cadena, obligatorio): ID de la VMcommand(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
- Accede a tu instancia de Open WebUI
- Navega a Configuración → Conexiones → OpenAPI
- 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
-
Puerto ya en uso
netstat -tlnp | grep 8811 # Change port if needed mcpo --port 8812 -- ./start_server.sh -
Errores de configuración
# Verify config file cat proxmox-config/config.json -
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:
- Llamará al endpoint de API
create_vm - Seleccionará automáticamente el almacenamiento y formato apropiados
- Creará VMs que coincidan con los requisitos especificados
- Devolverá información de configuración detallada
- 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.