🚀 MCP Proxmox Server
MCP Proxmox Server 是一个用 Python 编写的高级 Proxmox 模型上下文协议(MCP)服务器,它提供了丰富的 Proxmox 实用工具,可用于发现、生命周期管理、网络配置、快照/备份、指标监控、资源池/权限管理以及编排等操作。
🚀 快速开始
克隆仓库并创建虚拟环境
git clone https://github.com/bsahane/mcp-proxmox.git
cd mcp-proxmox
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -U pip
pip install -r requirements.txt
pip install -e .
配置 .env 文件
- 复制
.env.example 文件到 .env 并编辑相关值:
cp .env.example .env
.env 文件中的键值示例:
PROXMOX_API_URL="https://proxmox.example.com:8006"
PROXMOX_TOKEN_ID="root@pam!mcp-proxmox"
PROXMOX_TOKEN_SECRET="<secret>"
PROXMOX_VERIFY="true"
PROXMOX_DEFAULT_NODE="pve"
PROXMOX_DEFAULT_STORAGE="local-lvm"
PROXMOX_DEFAULT_BRIDGE="vmbr0"
⚠️ 重要提示
- 请使用具有适当访问控制列表(ACL)的 API 令牌;对于发现操作,根目录下的
PVEAuditor 权限已足够;对于生命周期管理操作,请在资源池上授予更窄的角色(例如 PVEVMAdmin)。
- 使用
.env 文件可以避免 zsh 历史扩展中因令牌 ID 包含 ! 而导致的问题。
运行 MCP 服务器(标准输入输出)
推荐方式(模块形式)
source .venv/bin/activate
python -m proxmox_mcp.server
已安装的控制台脚本方式
source .venv/bin/activate
proxmox-mcp
在 Cursor 中配置
编辑 ~/.cursor/mcp.json 文件(可移植示例):
{
"mcpServers": {
"proxmox-mcp": {
"command": "python",
"args": ["-m", "proxmox_mcp.server"]
}
}
}
在 Claude for Desktop 中配置
添加到 ~/Library/Application Support/Claude/claude_desktop_config.json 文件:
{
"mcpServers": {
"proxmox-mcp": {
"command": "python",
"args": ["-m", "proxmox_mcp.server"]
}
}
}
✨ 主要特性
核心发现工具
| 工具名称 |
描述 |
示例问题 |
可能的答案 |
proxmox-list-nodes |
列出集群节点(包含名称、状态、CPU/RAM/磁盘摘要) |
"List cluster nodes" |
[ { "node": "pve", "status": "online", ... } ] |
proxmox-node-status |
详细的节点健康信息(负载、正常运行时间、版本) |
{ "node": "pve" } |
{ "kversion": "...", "uptime": 123456, ... } |
proxmox-list-vms |
列出虚拟机(可按节点、状态、名称子串过滤) |
{ "node": "pve", "status": "running" } |
[ { "vmid": 100, "name": "web01", ... } ] |
proxmox-vm-info |
根据 vmid 或 name(可选节点)获取虚拟机详细信息,包括配置 |
{ "name": "web01" } |
{ "selector": {...}, "config": {...} } |
proxmox-list-lxc |
列出 LXC 容器(可过滤) |
{ "node": "pve" } |
[ { "vmid": 50001, "name": "ct01", ... } ] |
proxmox-lxc-info |
根据 vmid 或 name(可选节点)获取 LXC 容器详细信息 |
{ "vmid": 50001 } |
{ "selector": {...}, "config": {...} } |
proxmox-list-storage |
列出存储(类型、可用/已用空间) |
{} |
[ { "storage": "local-lvm", "type": "lvmthin", ... } ] |
proxmox-storage-content |
列出存储内容(ISO、模板、镜像) |
{ "node": "pve", "storage": "local" } |
[ { "volid": "local:iso/foo.iso", ... } ] |
proxmox-list-bridges |
列出节点网桥(vmbr...) |
{ "node": "pve" } |
[ { "iface": "vmbr0", ... } ] |
proxmox-list-tasks |
最近的任务(可按节点、用户过滤) |
{ "node": "pve", "limit": 20 } |
[ { "upid": "UPID:...", "status": "OK" }, ... ] |
proxmox-task-status |
检查任务状态 |
{ "upid": "UPID:..." } |
{ "status": "stopped", "exitstatus": "OK" } |
虚拟机生命周期管理工具
proxmox-clone-vm:将模板虚拟机克隆到新的 VMID/名称(支持目标节点、存储)
proxmox-create-vm:从 ISO/模板创建新的虚拟机(最小配置)
proxmox-delete-vm:删除虚拟机(需确认、可清除)
proxmox-start-vm / proxmox-stop-vm / proxmox-reboot-vm / proxmox-shutdown-vm:管理虚拟机电源状态(停止操作支持硬停止和超时设置)
proxmox-migrate-vm:实时/离线迁移到其他节点
proxmox-resize-vm-disk:扩展目标磁盘(如 scsi0)的大小(GB)
proxmox-configure-vm:设置白名单参数(核心数、内存、气球、网络、代理等)
LXC 容器生命周期管理工具
proxmox-create-lxc:从模板创建容器(CPU/内存、根文件系统大小、网络、存储)
proxmox-delete-lxc / proxmox-start-lxc / proxmox-stop-lxc / proxmox-configure-lxc:管理容器生命周期和配置
云初始化与网络配置工具
proxmox-cloudinit-set:设置云初始化参数(ipconfig0、ssh 密钥、ci 用户/密码)
proxmox-vm-nic-add / proxmox-vm-nic-remove:添加/移除网卡(网桥、模型、VLAN)
proxmox-vm-firewall-get / proxmox-vm-firewall-set:获取/设置每个虚拟机的防火墙状态和规则
镜像、模板、快照、备份工具
proxmox-upload-iso / proxmox-upload-template:将 ISO 或 LXC 模板上传到存储
proxmox-template-vm:将虚拟机转换为模板
proxmox-list-snapshots / proxmox-create-snapshot / proxmox-delete-snapshot / proxmox-rollback-snapshot:管理快照;回滚操作支持 wait 参数
proxmox-backup-vm / proxmox-restore-vm:运行 vzdump 备份和恢复存档
指标监控工具
proxmox-vm-metrics:获取虚拟机的 RRD 指标(时间范围、合并函数)
proxmox-node-metrics:获取节点的 RRD 指标
资源池、用户、权限管理工具
proxmox-list-pools / proxmox-create-pool / proxmox-delete-pool / proxmox-pool-add / proxmox-pool-remove
proxmox-list-users / proxmox-list-roles / proxmox-assign-permission
编排辅助工具
proxmox-wait-task:轮询任务直到完成或超时
proxmox-register-vm-as-host:为 Ansible 清单生成 JSON/INI 片段(主机名、IP、SSH 用户/密钥)
proxmox-guest-exec(可选):通过 QEMU 来宾代理运行命令(需要来宾中安装代理)
💻 使用示例
基础用法
{}
用于 proxmox-list-nodes 工具。
{ "node": "pve" }
用于 proxmox-list-vms 工具。
高级用法
{ "source_vmid": 101, "new_vmid": 50009, "name": "web01", "storage": "local-lvm", "confirm": true, "wait": true }
用于 proxmox-clone-vm 工具。
{ "name": "web01", "ipconfig0": "ip=192.168.1.50/24,gw=192.168.1.1", "confirm": true }
用于 proxmox-cloudinit-set 工具。
📚 详细文档
🔧 技术细节
- 服务器使用标准输入输出传输;仅将 MCP 协议打印到标准输出。日志记录到标准错误输出。
- 身份验证使用环境变量和/或
.env 文件。
- 跨节点的名称冲突会返回明确的错误,除非指定
node 参数。
📄 许可证
本项目采用 MIT 许可证。