PDM MCP Server
Provides read-only integration with Proxmox Datacenter Manager (PDM), allowing listing and inspection of remotes, resources, QEMU VMs, nodes, LXC containers, storages, and remote summaries.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PDM MCP Serverlist all VMs across all remotes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
PDM MCP Server
Ejecutar con Docker
Editá las credenciales PDM y ejecutá:
docker run -d \
--name pdm-mcp-server \
--restart unless-stopped \
--pull always \
-p 3000:3000 \
-e PDM_URL="https://pdm.example.com:8443" \
-e PDM_TOKEN_ID='readonly@pdm!mcp' \
-e PDM_TOKEN_SECRET='replace-with-token-secret' \
-e PDM_TLS_INSECURE="false" \
jer3m/pdm-mcp-server:latestEl servidor queda disponible en http://localhost:3000/mcp. Verificá que arrancó con:
curl http://localhost:3000/healthzSi PDM utiliza un certificado interno o autofirmado, cambiá PDM_TLS_INSECURE a true. Para evitar guardar el secreto en el historial del shell, también podés pasar estas mismas variables mediante --env-file.
Servidor MCP estrictamente read-only para Proxmox Datacenter Manager (PDM). Expone Streamable HTTP stateless en /mcp; cada request recibe un servidor y transporte nuevos, por lo que no depende de sesiones en memoria.
Related MCP server: Proxmox MCP Server
Tools
Tool | Fuente PDM | Uso |
|
| Remotes configurados |
|
| Inventario global cacheado o de un remote |
| Inventario global o | VMs QEMU, globales o por remote |
|
| Runtime y configuración sanitizada |
| Inventario global o | Nodos globales o por remote |
|
| Estado detallado del nodo |
| Inventario global o | Containers LXC, globales o por remote |
|
| Runtime y configuración sanitizada |
| Inventario global o | Estado general, sin listar contenido |
| Inventario global y | Estado de un storage, sin su contenido |
|
| Totales y capacidad física sin listar cada recurso |
En la tabla, ... significa /api2/json/pve/remotes/{remote}. La colección de configuración de remotes es distinta y conserva /api2/json/remotes/remote. Los nombres de remote, node y storage se codifican como segmentos URL. Las respuestas incluyen texto JSON por compatibilidad y structuredContent para clientes MCP que lo soportan.
El inventario global envía max-age=300 por defecto para reutilizar el cache de PDM y evitar recolectar todos los remotes en cada consulta. list_resources acepta max_age; usá 0 cuando necesites forzar una actualización. Con remote se consulta directamente /pve/remotes/{remote}/resources, evitando el fan-out global. PDM_TIMEOUT_MS sigue siendo configurable y mantiene su default de 15 segundos.
get_vm y get_container eliminan claves sensibles como passwords, tokens, secrets, claves SSH y valores equivalentes embebidos. El servidor nunca incluye el header de autorización ni el body de un error PDM en sus errores.
Respuestas compactas
Las tools de listado devuelven una frase corta en content y los datos una sola vez en structuredContent. La vista predeterminada es siempre compacta:
list_vmsylist_containers:summary,hardware,runtimeofull.list_nodes:summary,capacity,runtimeofull.list_storages:summary,capacityofull.list_resources:summaryofull.
summary sirve para descubrir e identificar recursos. hardware/capacity normalizan bytes a GiB; runtime normaliza ratios a porcentajes. full debe pedirse explícitamente y continúa sanitizando secretos. Para el detalle de un único elemento usá su tool get_*.
Para preguntas agregadas como cantidad de VMs encendidas o RAM física total, preferí get_remote_summary: usa solamente los listados de nodes, QEMU y LXC, sin hacer una request por guest.
Requisitos y configuración
Node.js 24 o posterior.
PDM 1.x accesible por HTTPS.
Usuario y token dedicados con rol
Auditorpropagado sobre/resource. Los permisos del token nunca superan los del usuario.
Variables requeridas:
PDM_URL=https://pdm.example.com:8443
PDM_TOKEN_ID=readonly@pdm!mcp
PDM_TOKEN_SECRET=replace-meVariables opcionales:
PDM_TLS_INSECURE=false
PDM_TIMEOUT_MS=15000
MCP_PORT=3000PDM_TLS_INSECURE=true deshabilita la validación TLS solamente para esa conexión PDM; usalo únicamente con certificados internos/autofirmados.
Desarrollo y prueba manual
npm install
npm test
npm startComprobá primero la salud:
curl.exe http://localhost:3000/healthzPara ejecutar tools sin poner credenciales PDM en comandos, iniciá MCP Inspector:
npx @modelcontextprotocol/inspectorEn Inspector elegí Streamable HTTP, usá http://localhost:3000/mcp, conectá y abrí Tools. Pruebas sugeridas:
list_resources {}
list_vms {"view":"summary"}
list_vms {"remote":"LAB-A"}
list_vms {"remote":"LAB-A","view":"hardware"}
list_vms {"remote":"LAB-A","view":"runtime"}
get_vm {"remote":"LAB-A","vmid":105}
list_nodes {"view":"summary"}
list_nodes {"remote":"LAB-A"}
list_containers {}
list_storages {}
list_storages {"remote":"LAB-A","node":"pve-test-01"}
get_remote_summary {"remote":"LAB-A"}Para Codex:
[mcp_servers.pdm]
url = "http://mcp.example.internal:3000/mcp"El endpoint MCP no tiene autenticación propia. Publicá el puerto 3000 únicamente en una red interna confiable o restringilo mediante firewall/reverse proxy.
Docker y CI
La imagen pública es jer3m/pdm-mcp-server:latest y se construye desde GitHub Actions. Para publicar nuevas versiones configurá:
Variable
DOCKERHUB_IMAGE, por ejemplotuusuario/pdm-mcp-server.Secret
DOCKERHUB_USERNAME.Secret
DOCKERHUB_TOKEN, un access token de Docker Hub con permiso de escritura.
El workflow Publish Docker image se ejecuta manualmente con el tag indicado o con un tag Git v*; en este último caso también publica latest.
compose.yml publica 3000:3000 y muestra todas las variables necesarias. Después de editar sus valores:
docker pull jer3m/pdm-mcp-server:latest
docker compose up -d
curl http://localhost:3000/healthzThis server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
Read-only MCP for provider identity, runtime, API, MCP, A2A, and x402 trust checks.
Read-only Dant3 MCP for public rooms, agents, jobs and provisional machine onboarding.
Read-only MCP access to sessions, funnels, campaigns, errors, live visitors, and anomalies.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables read-only interaction with Proxmox homelab VMs and containers, allowing LLM agents to list VMs, monitor status and performance metrics, view snapshots, and check cluster health through natural language queries.8MIT
- AlicenseAqualityBmaintenanceMCP server for Proxmox VE and Proxmox Datacenter Manager, covering every API endpoint via six consolidated tools for list, describe, and call operations with a read-only safety gate.6311AGPL 3.0
- AlicenseAqualityCmaintenanceA read-only MCP server for Proxmox VE that provides AI assistants with structured visibility into cluster nodes, guests, storage, and Docker workloads. It is designed to prevent any mutating operations by construction.12MIT
- FlicenseBqualityCmaintenanceRead-only Proxmox VE MCP server providing 25 tools for VM, LXC, node, storage, and cluster inspection via stdio transport.25
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/j3r3g1l3s/proxmox-datacenter-manager-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server