](https://www.npmjs.com/package/@samik081/mcp-pve) ](https://ghcr.io/samik081/mcp-pve)  ](https://nodejs.org)
MCP-PVE
MCP服务器 Proxmox VE.通过Cursor、Claude Code和Claude Desktop中的自然语言管理虚拟机、容器、存储、网络和集群。
特性
- 105工具 穿过 12个类别 覆盖Proxmox VE REST API
- 三个访问层 (
read-only,read-execute,full)用于粒度控制 - 类别筛选 通过
PVE_CATEGORIES仅公开您需要的工具 - 零HTTP依赖 --使用本地
fetch(节点18+) - 自签名证书支持 通过
PVE_VERIFY_SSL=false - Docker镜像 为了
linux/amd64和linux/arm64上 GHCR - 远程MCP 通过HTTP传输(
MCP_TRANSPORT=http)使用流式HTTP协议 - Types/ESM 具有全类型安全性
API兼容性
使用Proxmox VE进行测试 9.0.10.
快速开始
使用npx直接运行服务器:
PVE_BASE_URL="https://pve.example.com:8006" \
PVE_TOKEN_ID="root@pam!mcp" \
PVE_TOKEN_SECRET="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
npx -y @samik081/mcp-pve服务器在启动时验证您的PVE连接,如果凭据丢失或无效,则立即失败并显示明确的错误。
码头工人
使用Docker运行(stdio传输,与npx相同):
docker run --rm -i \
-e PVE_BASE_URL=https://pve.example.com:8006 \
-e PVE_TOKEN_ID=root@pam!mcp \
-e PVE_TOKEN_SECRET=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
-e PVE_VERIFY_SSL=false \
ghcr.io/samik081/mcp-pve要作为具有HTTP传输的远程MCP服务器运行:
docker run -d -p 3000:3000 \
-e MCP_TRANSPORT=http \
-e PVE_BASE_URL=https://pve.example.com:8006 \
-e PVE_TOKEN_ID=root@pam!mcp \
-e PVE_TOKEN_SECRET=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
-e PVE_VERIFY_SSL=false \
ghcr.io/samik081/mcp-pveMCP端点位于 http://localhost:3000 健康检查在 http://localhost:3000/health.
配置
Claude Code命令行界面(推荐):
# Using npx
claude mcp add --transport stdio pve \
--env PVE_BASE_URL=https://pve.example.com:8006 \
--env PVE_TOKEN_ID=root@pam!mcp \
--env PVE_TOKEN_SECRET=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--env PVE_VERIFY_SSL=false \
-- npx -y @samik081/mcp-pve
# Using Docker
claude mcp add --transport stdio pve \
--env PVE_BASE_URL=https://pve.example.com:8006 \
--env PVE_TOKEN_ID=root@pam!mcp \
--env PVE_TOKEN_SECRET=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--env PVE_VERIFY_SSL=false \
-- docker run --rm -i ghcr.io/samik081/mcp-pve
# Using remote HTTP (connect to a running Docker container or HTTP server)
claude mcp add --transport http pve http://localhost:3000JSON配置 (与Claude Code合作 .mcp.json,克劳德桌面 claude_desktop_config.json,光标 .cursor/mcp.json):
{
"mcpServers": {
"pve": {
"command": "npx",
"args": ["-y", "@samik081/mcp-pve"],
"env": {
"PVE_BASE_URL": "https://pve.example.com:8006",
"PVE_TOKEN_ID": "root@pam!mcp",
"PVE_TOKEN_SECRET": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"PVE_VERIFY_SSL": "false"
}
}
}
}Docker(标准操作系统):
{
"mcpServers": {
"pve": {
"command": "docker",
"args": ["run", "--rm", "-i",
"-e", "PVE_BASE_URL=https://pve.example.com:8006",
"-e", "PVE_TOKEN_ID=root@pam!mcp",
"-e", "PVE_TOKEN_SECRET=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"-e", "PVE_VERIFY_SSL=false",
"ghcr.io/samik081/mcp-pve"
]
}
}
}远程MCP (连接到正在运行的Docker容器或HTTP服务器):
{
"mcpServers": {
"pve": {
"type": "streamable-http",
"url": "http://localhost:3000"
}
}
}访问层
使用控制哪些工具可用 PVE_ACCESS_TIER 环境变量:
| 层级 | 工具 | 描述 |
|---|---|---|
full (默认) | 105 | 读取、执行和写入--完全控制 |
read-execute | 68 | 读取并执行--不创建/删除资源 |
read-only | 51 | 只读-可安全探索,无状态变化 |
层级详细信息:
- 满的:全部105个工具。包括创建/删除虚拟机、容器、存储、用户、防火墙规则等。
- 读取执行:68个工具。所有读取工具以及电源操作(启动、停止、迁移)、备份执行和任务管理。
- 只读:51个工具。仅列出、获取、状态和日志工具。没有状态变化。
您层中不可用的工具未在MCP服务器上注册。它们不会出现在你的人工智能工具的工具列表中,保持上下文干净。
环境变量
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
PVE_BASE_URL | 是 | -- | PVE实例的URL(例如。 https://pve:8006) |
PVE_TOKEN_ID | 是 | -- | API令牌ID(user@realm!tokenname) |
PVE_TOKEN_SECRET | 是 | -- | API令牌UUID机密 |
PVE_ACCESS_TIER | 没有 | full | read-only, read-execute,或 full |
PVE_CATEGORIES | 没有 | *(全部)* | 逗号分隔的类别列表 |
PVE_TOOL_BLACKLIST | 没有 | *(无)* | 以逗号分隔的要排除的工具名称列表(例如。, pve_delete_qemu_vm) |
PVE_TOOL_WHITELIST | 没有 | *(无)* | 以逗号分隔的工具名称列表将强制包含,绕过访问层和类别筛选器 |
PVE_VERIFY_SSL | 没有 | true | 设置 false 用于自签名证书 |
DEBUG | 没有 | false | 启用stderr的调试日志记录 |
MCP_TRANSPORT | 没有 | stdio | 运输方式: stdio (默认)或 http |
MCP_PORT | 没有 | 3000 | HTTP服务器端口(仅在以下情况下使用 MCP_TRANSPORT=http) |
MCP_HOST | 没有 | 0.0.0.0 | HTTP服务器绑定地址(仅在以下情况下使用 MCP_TRANSPORT=http) |
MCP_EXCLUDE_TOOL_TITLES | 没有 | false | 设置 true 从注册中省略工具标题(保存标记) |
在下的PVE UI中创建API内标识 数据中心>权限>API令牌。如果您希望令牌继承用户的完全权限,请确保取消选中“特权分离”。
可用类别
nodes, qemu, lxc, storage, cluster, access, pools, network, firewall, backup, tasks, ha
工具
mcp-pve提供了105个按类别组织的工具。每个工具的“访问”列显示了所需的最低级别: read-only (适用于所有级别), read-execute (要求 read-execute 或 full),或 full (要求 full 仅限级别)。提示列显示工具行为: read-only (无状态变化), destructive (修改现有状态), idempotent (如果调用两次,结果相同)。
Nodes (8 tools)
| 工具 | 描述 | 访问 | 提示 |
|---|---|---|---|
pve_list_nodes | 列出群集中的所有节点 | 只读 | 只读,幂等 |
pve_get_node_status | 获取详细的节点状态(CPU、内存、正常运行时间、负载) | 只读 | 只读,幂等 |
pve_get_node_version | 获取节点的PVE版本信息 | 只读 | 只读,幂等 |
pve_get_node_dns | 获取节点的DNS设置 | 只读 | 只读,幂等 |
pve_get_node_time | 获取节点的时间和时区信息 | 只读 | 只读,幂等 |
pve_get_node_syslog | 从节点获取系统日志条目 | 只读 | 只读,幂等 |
pve_list_node_services | 列出节点上的所有系统服务 | 只读 | 只读,幂等 |
pve_manage_node_service | 启动、停止、重新启动或重新加载节点服务 | 读取执行 | 破坏性 |
QEMU Virtual Machines (20 tools)
| 工具 | 描述 | 访问 | 提示 |
|---|---|---|---|
pve_list_qemu_vms | 列出节点上的所有QEMU VM | 只读 | 只读,幂等 |
pve_get_qemu_status | 获取当前VM状态(CPU、内存、磁盘、网络) | 只读 | 只读,幂等 |
pve_get_qemu_config | 获取VM配置 | 只读 | 只读,幂等 |
pve_get_qemu_rrddata | 获取一段时间内的RRD统计信息 | 只读 | 只读,幂等 |
pve_list_qemu_snapshots | 列出所有VM快照 | 只读 | 只读,幂等 |
pve_start_qemu_vm | 启动虚拟机 | 读取执行 | 破坏性 |
pve_stop_qemu_vm | 停止虚拟机(立即) | 读取执行 | 破坏性 |
pve_shutdown_qemu_vm | 优雅地关闭虚拟机 | 读取执行 | 破坏性 |
pve_reboot_qemu_vm | 重新启动虚拟机 | 读取执行 | 破坏性 |
pve_suspend_qemu_vm | 挂起VM | 读取执行 | 破坏性 |
pve_resume_qemu_vm | 恢复挂起的VM | 读取执行 | 破坏性 |
pve_reset_qemu_vm | 重置虚拟机(硬) | 读取执行 | 破坏性 |
pve_migrate_qemu_vm | 将虚拟机迁移到另一个节点 | 读取执行 | 破坏性 |
pve_create_qemu_vm | 新建虚拟机 | full | -- |
pve_delete_qemu_vm | 删除虚拟机及其所有数据 | 完全 | 破坏性 |
pve_update_qemu_config | 更新VM配置 | 完全 | 破坏性,幂等 |
pve_clone_qemu_vm | 克隆虚拟机 | 已满 | -- |
pve_create_qemu_snapshot | 创建VM快照 | full | -- |
pve_delete_qemu_snapshot | 删除VM快照 | 完整 | 破坏性 |
pve_rollback_qemu_snapshot | 将VM回滚到快照 | 完整 | 破坏性、幂等 |
LXC Containers (18 tools)
| 工具 | 描述 | 访问 | 提示 |
|---|---|---|---|
pve_list_lxc_containers | 列出节点上的所有LXC容器 | 只读 | 只读,幂等 |
pve_get_lxc_status | 获取当前容器状态 | 只读 | 只读,幂等 |
pve_get_lxc_config | 获取容器配置 | 只读 | 只读,幂等 |
pve_get_lxc_rrddata | 获取一段时间内的RRD统计信息 | 只读 | 只读,幂等 |
pve_list_lxc_snapshots | 列出所有容器快照 | 只读 | 只读,幂等 |
pve_start_lxc_container | 启动容器 | 读取执行 | 破坏性 |
pve_stop_lxc_container | 停止容器(立即) | 读取执行 | 破坏性 |
pve_shutdown_lxc_container | 优雅地关闭容器 | 读取执行 | 破坏性 |
pve_reboot_lxc_container | 重新启动容器 | 读取执行 | 破坏性 |
pve_suspend_lxc_container | 暂停(冻结)容器 | 读取执行 | 破坏性 |
pve_resume_lxc_container | 恢复(解冻)容器 | 读取执行 | 破坏性 |
pve_create_lxc_container | 创建新容器 | full | -- |
pve_delete_lxc_container | 删除容器及其所有数据 | 满 | 破坏性 |
pve_update_lxc_config | 更新容器配置 | 满 | 破坏性,幂等 |
pve_clone_lxc_container | 克隆容器 | 满 | -- |
pve_create_lxc_snapshot | 创建容器快照 | full | -- |
pve_delete_lxc_snapshot | 删除容器快照 | 已满 | 破坏性 |
pve_rollback_lxc_snapshot | 将容器回滚到快照 | 满 | 破坏性、幂等 |
Storage (8 tools)
| 工具 | 描述 | 访问 | 提示 |
|---|---|---|---|
pve_list_storage | 列出所有已配置的存储后端 | 只读 | 只读,幂等 |
pve_get_storage_config | 获取存储后端配置 | 只读 | 只读,幂等 |
pve_list_node_storage | 使用用法信息列出节点上的可用存储 | 只读 | 只读,幂等 |
pve_get_storage_status | 获取节点上的存储状态和使用情况 | 只读 | 只读,幂等 |
pve_list_storage_content | 列出存储内容(映像、ISO、备份) | 只读 | 只读,幂等 |
pve_create_storage | 创建新的存储后端 | 已满 | -- |
pve_update_storage | 更新存储配置 | 满 | 破坏性、幂等 |
pve_delete_storage | 删除存储后端 | 已满 | 破坏性 |
Cluster (9 tools)
| 工具 | 描述 | 访问 | 提示 |
|---|---|---|---|
pve_get_cluster_status | 获取集群状态(成员资格、仲裁) | 只读 | 只读,幂等 |
pve_list_cluster_resources | 列出所有具有可选类型筛选器 | 只读 | 只读、幂等的群集资源 |
pve_get_next_vmid | 获取下一个可用的VMID | 只读 | 只读,幂等 |
pve_get_cluster_log | 获取最近的群集日志条目 | 只读 | 只读,幂等 |
pve_get_cluster_options | 获取数据中心选项 | 只读 | 只读,幂等 |
pve_list_cluster_backup_info | 列出备份作业未覆盖的来宾 | 只读 | 只读,幂等 |
pve_get_cluster_ha_status | 获取HA管理器状态 | 只读 | 只读,幂等 |
pve_list_cluster_replication | 列出所有复制作业 | 只读 | 只读,幂等 |
pve_update_cluster_options | 更新数据中心选项 | 完全 | 破坏性、幂等 |
Access Control (10 tools)
| 工具 | 描述 | 访问 | 提示 |
|---|---|---|---|
pve_list_users | 列出所有用户 | 只读 | 只读,幂等 |
pve_get_user | 获取用户详细信息 | 只读 | 只读,幂等 |
pve_list_roles | 列出所有角色和权限 | 只读 | 只读,幂等 |
pve_list_groups | 列出所有用户组 | 只读 | 只读,幂等 |
pve_list_acls | 列出所有ACL条目 | 只读 | 只读,幂等 |
pve_list_domains | 列出身份验证域/领域 | 只读 | 只读,幂等 |
pve_create_user | 创建新用户 | full | -- |
pve_update_user | 更新用户属性 | 完全 | 破坏性,幂等 |
pve_delete_user | 删除用户 | 完全 | 破坏性 |
pve_update_acl | 授予或撤销ACL权限 | 完全 | 破坏性、幂等 |
Pools (5 tools)
| 工具 | 描述 | 访问 | 提示 |
|---|---|---|---|
pve_list_pools | 列出所有资源池 | 只读 | 只读,幂等 |
pve_get_pool | 获取池详细信息和成员 | 只读 | 只读,幂等 |
pve_create_pool | 创建资源池 | full | -- |
pve_update_pool | 更新池成员和设置 | 满 | 破坏性,幂等 |
pve_delete_pool | 删除资源池 | 已满 | 破坏性 |
Network (5 tools)
| 工具 | 描述 | 访问 | 提示 |
|---|---|---|---|
pve_list_networks | 列出节点上的所有网络接口 | 只读 | 只读,幂等 |
pve_get_network | 获取网络接口配置 | 只读 | 只读,幂等 |
pve_create_network | 创建网络接口 | full | -- |
pve_update_network | 更新网络接口配置 | 完全 | 破坏性,幂等 |
pve_delete_network | 删除网络接口 | 完全 | 破坏性 |
Firewall (8 tools)
| 工具 | 描述 | 访问 | 提示 |
|---|---|---|---|
pve_get_firewall_options | 获取群集防火墙选项 | 只读 | 只读,幂等 |
pve_list_firewall_rules | 列出群集防火墙规则 | 只读 | 只读,幂等 |
pve_list_firewall_aliases | 列出防火墙别名 | 只读 | 只读,幂等 |
pve_list_firewall_ipsets | 列出防火墙IP集 | 只读 | 只读,幂等 |
pve_update_firewall_options | 更新群集防火墙选项 | 完全 | 破坏性、幂等 |
pve_create_firewall_rule | 创建防火墙规则 | full | -- |
pve_update_firewall_rule | 更新防火墙规则 | 完全 | 破坏性、幂等 |
pve_delete_firewall_rule | 删除防火墙规则 | 完全 | 破坏性 |
Backup (5 tools)
| 工具 | 描述 | 访问 | 提示 |
|---|---|---|---|
pve_list_backup_jobs | 列出所有计划备份作业 | 只读 | 只读,幂等 |
pve_get_backup_job | 获取备份作业配置 | 只读 | 只读,幂等 |
pve_run_backup | 运行立即备份(vzdump) | 读取执行 | -- |
pve_create_backup_job | 创建定时备份作业 | 已满 | -- |
pve_delete_backup_job | 删除计划备份作业 | 已满 | 破坏性 |
Tasks (4 tools)
| 工具 | 描述 | 访问 | 提示 |
|---|---|---|---|
pve_list_tasks | 列出节点上最近的任务 | 只读 | 只读,幂等 |
pve_get_task_status | 通过UPID | 只读 | 只读,幂等获取任务状态 |
pve_get_task_log | 通过UPID | 只读 | 只读,幂等获取任务日志输出 |
pve_stop_task | 停止正在运行的任务 | 读取执行 | 破坏性 |
High Availability (5 tools)
| 工具 | 描述 | 访问 | 提示 |
|---|---|---|---|
pve_list_ha_resources | 列出所有HA管理的资源 | 只读 | 只读,幂等 |
pve_get_ha_resource | 获取资源的HA配置 | 只读 | 只读,幂等 |
pve_create_ha_resource | 将VM/容器添加到HA管理 | full | -- |
pve_update_ha_resource | 更新HA资源配置 | 完全 | 破坏性、幂等 |
pve_delete_ha_resource | 从HA管理中删除资源 | 完全 | 破坏性 |
验证它是否有效
配置完MCP客户端后,询问您的AI助手:
“我的Proxmox群集中有哪些节点?”
如果连接正常,助理会打电话 pve_list_nodes 并返回节点的当前状态。
用法示例
配置后,用自然语言向您的AI工具提问:
- “列出节点pve1上的所有虚拟机” --电话
pve_list_qemu_vms显示VM的状态、CPU和内存使用情况。
- “VM 100的状态如何?” --电话
pve_get_qemu_status以显示实时资源利用率。
- “在pve1上启动容器200” --电话
pve_start_lxc_container启动容器并返回任务UPID。
- “创建VM 100的快照,称为预升级” --电话
pve_create_qemu_snapshot在更改之前创建快照。
- “显示群集资源” --电话
pve_list_cluster_resources显示所有VM、容器、存储和节点。
- “将VM 100迁移到节点pve2” --电话
pve_migrate_qemu_vm将VM实时迁移到另一个节点。
故障排除
连接被拒绝/ECONNREFUSED
检查一下 PVE_BASE_URL 正确且包含端口(默认值:8006)。确保可以从运行MCP服务器的位置访问PVE主机。
SSL证书错误
如果您的PVE实例使用自签名证书,请设置 PVE_VERIFY_SSL=false。这将禁用所有请求的TLS验证。
工具未显示
检查您的访问层设置。在 read-only 模式下,仅注册了51个工具。在 read-execute 模式下,注册了68个工具。使用 full (或省略 PVE_ACCESS_TIER)所有105个工具。检查 PVE_CATEGORIES --仅注册所列类别中的工具。还可以通过检查stderr输出来验证服务器是否已正确启动。
发展
# Install dependencies
npm install
# Build the project
npm run build
# Run in development mode (auto-reload)
npm run dev
# Open the MCP Inspector for interactive testing
npm run inspect