关于 Proxmox VE MCP Server
MCP PVE 是用于管理 Proxmox VE 的 MCP 服务,可在 Cursor、Claude Code 和 Claude Desktop 中通过自然语言管理虚拟机、容器、存储、网络和集群。它提供三级访问权限和按类别过滤工具的功能。
主要功能
- 01覆盖 Proxmox VE REST API 的 122 个工具
- 02read-only、read-execute、full 三级访问权限
- 03通过 PVE_CATEGORIES 按类别筛选工具
- 04支持 stdio 与 Streamable HTTP 传输
- 05提供 linux/amd64 和 linux/arm64 的 Docker 镜像
适用场景
- 01通过 AI 助手查询节点、虚拟机和容器的状态
- 02在只读权限下浏览 Proxmox 环境而不改变状态
- 03为远程 MCP 客户端部署集中的 HTTP 服务
MCP 相关
该项目是 MCP 服务,将 Proxmox VE 的虚拟机、容器、存储等 REST API 操作以工具形式暴露给 MCP 客户端。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @samik081/mcp-pvePVE_BASE_URLURL of the Proxmox VE instance (e.g. https://pve.example.com:8006)PVE_TOKEN_ID密钥Proxmox VE API token ID (e.g. user@pam!token-name)PVE_TOKEN_SECRET密钥Proxmox VE API token secret本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP PVE
适用于 Proxmox VE 的 MCP 服务。通过 Cursor、Claude Code 和 Claude Desktop 中的自然语言管理虚拟机、容器、存储、网络和集群。
功能
- 122 个工具,分为 12 个类别,涵盖 Proxmox VE REST API
- 三个访问级别(
read-only、read-execute、full),实现精细控制 - 通过
PVE_CATEGORIES筛选类别,仅开放所需工具 - 零 HTTP 依赖——使用原生
fetch(Node 22+) - 通过
PVE_VERIFY_SSL=false支持自签名证书 - 在 GHCR 提供适用于
linux/amd64和linux/arm64的 Docker 镜像 - 通过 HTTP 传输(
MCP_TRANSPORT=http)和 Streamable HTTP 协议提供 远程 MCP - TypeScript/ESM,提供完整类型安全
API 兼容性
已在 Proxmox VE 9.2.4 上测试。
快速开始
使用 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
使用 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-pve
MCP 端点位于 http://localhost:3000,健康检查端点位于 http://localhost:3000/health。
配置
Claude Code CLI(推荐):
# 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:3000
JSON 配置(适用于 Claude Code .mcp.json、Claude Desktop claude_desktop_config.json、Cursor .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(stdio):
{
"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(默认) | 122 | 读取、执行和写入——完全控制 |
read-execute | 77 | 读取和执行——不创建或删除资源 |
read-only | 55 | 仅读取——可安全探索,不更改状态 |
级别详情:
- full:全部 122 个工具。包括创建/删除虚拟机、容器、存储、用户、防火墙规则等。
- read-execute:77 个工具。包含所有读取工具,以及电源操作(启动、停止、迁移)、批量来宾操作、OCI 镜像拉取、备份执行和任务管理。
- read-only:55 个工具。仅包含列表、获取、状态和日志工具。不更改状态。
在当前级别不可用的工具不会注册到 MCP 服务中,也不会出现在 AI 工具的工具列表中,从而保持上下文整洁。
环境变量
| 变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
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_SESSION_IDLE_TIMEOUT | 否 | 1800 | HTTP 会话关闭并释放其内存前的空闲秒数(存在已连接 SSE 流的会话永远不会关闭)。设为 0 可禁用。仅在 MCP_TRANSPORT=http 时使用 |
MCP_EXCLUDE_TOOL_TITLES | 否 | false | 设为 true 可在注册时省略工具标题(节省令牌) |
在 PVE UI 中,通过 Datacenter > Permissions > API Tokens 创建 API 令牌。如果希望令牌继承用户的全部权限,请务必取消勾选“Privilege Separation”。
可用类别
nodes、qemu、lxc、storage、cluster、access、pools、network、firewall、backup、tasks、ha
工具
mcp-pve 按类别提供 122 个工具。每个工具的 Access 列显示所需的最低访问级别:read-only(所有级别均可用)、read-execute(需要 read-execute 或 full)或 full(仅需要 full 级别)。Hints 列显示工具行为:read-only(不更改状态)、destructive(修改现有状态)、idempotent(调用两次结果相同)。
节点(9 个工具)
| 工具 | 说明 | 访问级别 | 提示 |
|---|---|---|---|
pve_list_nodes | 列出集群中的所有节点 | read-only | read-only, idempotent |
pve_get_node_status | 获取节点的详细状态(CPU、内存、运行时间、负载) | read-only | read-only, idempotent |
pve_get_node_rrddata | 获取指定时间段内的节点 RRD 统计数据(CPU、IO 等待、负载、内存、网络;输出与来宾 RRD 数据相同,采用紧凑分桶格式) | read-only | read-only, idempotent |
pve_get_node_version | 获取节点的 PVE 版本信息 | read-only | read-only, idempotent |
pve_get_node_dns | 获取节点的 DNS 设置 | read-only | read-only, idempotent |
pve_get_node_time | 获取节点的时间和时区信息 | read-only | read-only, idempotent |
pve_get_node_syslog | 获取节点的系统日志条目 | read-only | read-only, idempotent |
pve_list_node_services | 列出节点上的所有系统服务 | read-only | read-only, idempotent |
pve_manage_node_service | 启动、停止、重启或重新加载节点服务 | read-execute | destructive |
QEMU 虚拟机(20 个工具)
| 工具 | 描述 | 访问权限 | 提示 | |------|-------------|--------|-------| | `pve_list_qemu_vms` | 列出节点上的所有 QEMU 虚拟机 | 只读 | 只读、幂等 | | `pve_get_qemu_status` | 获取虚拟机当前状态(CPU、内存、磁盘、网络) | 只读 | 只读、幂等 | | `pve_get_qemu_config` | 获取虚拟机配置 | 只读 | 只读、幂等 | | `pve_get_qemu_rrddata` | 获取一段时间内的 RRD 统计信息(默认包含 60 个数据点的精简表格;支持 `fields`、`cf`、`buckets`、`format: raw`) | 只读 | 只读、幂等 | | `pve_list_qemu_snapshots` | 列出所有虚拟机快照 | 只读 | 只读、幂等 | | `pve_start_qemu_vm` | 启动虚拟机 | 读写执行 | 有破坏性 | | `pve_stop_qemu_vm` | 停止虚拟机(立即) | 读写执行 | 有破坏性 | | `pve_shutdown_qemu_vm` | 平稳关闭虚拟机 | 读写执行 | 有破坏性 | | `pve_reboot_qemu_vm` | 重启虚拟机 | 读写执行 | 有破坏性 | | `pve_suspend_qemu_vm` | 挂起虚拟机 | 读写执行 | 有破坏性 | | `pve_resume_qemu_vm` | 恢复已挂起的虚拟机 | 读写执行 | 有破坏性 | | `pve_reset_qemu_vm` | 重置虚拟机(强制) | 读写执行 | 有破坏性 | | `pve_migrate_qemu_vm` | 将虚拟机迁移到另一节点 | 读写执行 | 有破坏性 | | `pve_create_qemu_vm` | 创建新虚拟机 | 完全访问 | — | | `pve_delete_qemu_vm` | 删除虚拟机及其所有数据 | 完全访问 | 有破坏性 | | `pve_update_qemu_config` | 更新虚拟机配置 | 完全访问 | 有破坏性、幂等 | | `pve_clone_qemu_vm` | 克隆虚拟机 | 完全访问 | — | | `pve_create_qemu_snapshot` | 创建虚拟机快照 | 完全访问 | — | | `pve_delete_qemu_snapshot` | 删除虚拟机快照 | 完全访问 | 有破坏性 | | `pve_rollback_qemu_snapshot` | 将虚拟机回滚到某个快照 | 完全访问 | 有破坏性、幂等 |LXC 容器(18 个工具)
| 工具 | 描述 | 访问权限 | 提示 |
|---|---|---|---|
pve_list_lxc_containers | 列出节点上的所有 LXC 容器 | 只读 | 只读、幂等 |
pve_get_lxc_status | 获取容器当前状态 | 只读 | 只读、幂等 |
pve_get_lxc_config | 获取容器配置 | 只读 | 只读、幂等 |
pve_get_lxc_rrddata | 获取一段时间内的 RRD 统计信息(默认包含 60 个数据点的精简表格;支持 fields、cf、buckets、format: raw) | 只读 | 只读、幂等 |
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 | 创建新容器 | 完全访问 | — |
pve_delete_lxc_container | 删除容器及其所有数据 | 完全访问 | 有破坏性 |
pve_update_lxc_config | 更新容器配置 | 完全访问 | 有破坏性、幂等 |
pve_clone_lxc_container | 克隆容器 | 完全访问 | — |
pve_create_lxc_snapshot | 创建容器快照 | 完全访问 | — |
pve_delete_lxc_snapshot | 删除容器快照 | 完全访问 | 有破坏性 |
pve_rollback_lxc_snapshot | 将容器回滚到某个快照 | 完全访问 | 有破坏性、幂等 |
存储(9 个工具)
| 工具 | 描述 | 访问权限 | 提示 | |------|-------------|--------|-------| | `pve_list_storage` | 列出所有已配置的存储后端 | 只读 | 只读、幂等 | | `pve_get_storage_config` | 获取存储后端配置 | 只读 | 只读、幂等 | | `pve_list_node_storage` | 列出节点上可用的存储及其使用情况 | 只读 | 只读、幂等 | | `pve_get_storage_status` | 获取节点上的存储状态和使用情况 | 只读 | 只读、幂等 | | `pve_list_storage_content` | 列出存储内容(镜像、ISO、备份);可按 `vmid` 筛选,或按每个来宾的 `mode` `latest` / `summary` 筛选 | 只读 | 只读、幂等 | | `pve_pull_oci_image` | 将 OCI 容器镜像拉取到存储的模板缓存中(PVE 9.1+) | 读写执行 | — | | `pve_create_storage` | 创建新的存储后端 | 完全访问 | — | | `pve_update_storage` | 更新存储配置 | 完全访问 | 破坏性、幂等 | | `pve_delete_storage` | 删除存储后端 | 完全访问 | 破坏性 |集群(13 个工具)
| 工具 | 描述 | 访问权限 | 提示 |
|---|---|---|---|
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_bulk_start_guests | 在整个集群中批量启动 VM/容器(PVE 9.1+) | 读写执行 | 破坏性 |
pve_bulk_shutdown_guests | 在整个集群中批量关闭 VM/容器(PVE 9.1+) | 读写执行 | 破坏性 |
pve_bulk_suspend_guests | 在整个集群中批量暂停 VM(PVE 9.1+) | 读写执行 | 破坏性 |
pve_bulk_migrate_guests | 将 VM/容器批量迁移到目标节点(PVE 9.1+) | 读写执行 | 破坏性 |
pve_update_cluster_options | 更新数据中心选项 | 完全访问 | 破坏性、幂等 |
访问控制(14 个工具)
| 工具 | 描述 | 访问权限 | 提示 |
|---|---|---|---|
pve_list_users | 列出所有用户 | 只读 | 只读、幂等 |
pve_get_user | 获取用户详情 | 只读 | 只读、幂等 |
pve_list_roles | 列出所有角色和权限 | 只读 | 只读、幂等 |
pve_list_groups | 列出所有用户组 | 只读 | 只读、幂等 |
pve_list_acls | 列出所有 ACL 条目 | 只读 | 只读、幂等 |
pve_list_domains | 列出身份验证域/领域 | 只读 | 只读、幂等 |
pve_list_user_tokens | 列出用户的 API 令牌 | 只读 | 只读、幂等 |
pve_create_user | 创建新用户 | 完全访问 | — |
pve_update_user | 更新用户属性 | 完全访问 | 破坏性、幂等 |
pve_delete_user | 删除用户 | 完全访问 | 破坏性 |
pve_update_acl | 授予或撤销 ACL 权限 | 完全访问 | 破坏性、幂等 |
pve_create_user_token | 创建 API 令牌(密钥仅显示一次) | 完全访问 | — |
pve_update_user_token | 更新 API 令牌的注释、过期时间或 privsep | 完全访问 | 破坏性、幂等 |
pve_delete_user_token | 从用户处删除 API 令牌 | 完全访问 | 破坏性 |
资源池(5 个工具)
| 工具 | 描述 | 访问权限 | 提示 | |------|-------------|--------|-------| | `pve_list_pools` | 列出所有资源池 | 只读 | 只读、幂等 | | `pve_get_pool` | 获取资源池详情和成员 | 只读 | 只读、幂等 | | `pve_create_pool` | 创建资源池 | 完整 | — | | `pve_update_pool` | 更新资源池成员和设置 | 完整 | 破坏性、幂等 | | `pve_delete_pool` | 删除资源池 | 完整 | 破坏性 |网络(5 个工具)
| 工具 | 描述 | 访问权限 | 提示 |
|---|---|---|---|
pve_list_networks | 列出节点上的所有网络接口 | 只读 | 只读、幂等 |
pve_get_network | 获取网络接口配置 | 只读 | 只读、幂等 |
pve_create_network | 创建网络接口 | 完整 | — |
pve_update_network | 更新网络接口配置 | 完整 | 破坏性、幂等 |
pve_delete_network | 删除网络接口 | 完整 | 破坏性 |
防火墙(8 个工具)
| 工具 | 描述 | 访问权限 | 提示 |
|---|---|---|---|
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 | 创建防火墙规则 | 完整 | — |
pve_update_firewall_rule | 更新防火墙规则 | 完整 | 破坏性、幂等 |
pve_delete_firewall_rule | 删除防火墙规则 | 完整 | 破坏性 |
备份(5 个工具)
| 工具 | 描述 | 访问权限 | 提示 |
|---|---|---|---|
pve_list_backup_jobs | 列出所有计划备份任务 | 只读 | 只读、幂等 |
pve_get_backup_job | 获取备份任务配置 | 只读 | 只读、幂等 |
pve_run_backup | 立即运行备份(vzdump) | 读取/执行 | — |
pve_create_backup_job | 创建计划备份任务 | 完整 | — |
pve_delete_backup_job | 删除计划备份任务 | 完整 | 破坏性 |
任务(4 个工具)
| 工具 | 描述 | 访问权限 | 提示 |
|---|---|---|---|
pve_list_tasks | 列出节点上的近期任务 | 只读 | 只读、幂等 |
pve_get_task_status | 根据 UPID 获取任务状态 | 只读 | 只读、幂等 |
pve_get_task_log | 根据 UPID 获取任务日志输出 | 只读 | 只读、幂等 |
pve_stop_task | 停止正在运行的任务 | 读取/执行 | 破坏性 |
高可用性(12 个工具)
| 工具 | 描述 | 访问权限 | 提示 | |------|-------------|--------|-------| | `pve_list_ha_resources` | 列出所有由 HA 管理的资源 | 只读 | 只读、幂等 | | `pve_get_ha_resource` | 获取资源的 HA 配置 | 只读 | 只读、幂等 | | `pve_list_ha_rules` | 列出 HA 规则(节点/资源亲和性) | 只读 | 只读、幂等 | | `pve_get_ha_rule` | 获取 HA 规则配置 | 只读 | 只读、幂等 | | `pve_create_ha_resource` | 将 VM/容器添加到 HA 管理 | 完整 | — | | `pve_update_ha_resource` | 更新 HA 资源配置 | 完整 | 破坏性、幂等 | | `pve_delete_ha_resource` | 从 HA 管理中移除资源 | 完整 | 破坏性 | | `pve_create_ha_rule` | 创建 HA 规则 | 完整 | — | | `pve_update_ha_rule` | 更新 HA 规则 | 完整 | 破坏性、幂等 | | `pve_delete_ha_rule` | 删除 HA 规则 | 完整 | 破坏性 | | `pve_disarm_ha` | 为维护停用 HA 堆栈(PVE 9.2+) | 完整 | 破坏性、幂等 | | `pve_arm_ha` | 重新启用 HA 堆栈(PVE 9.2+) | 完整 | 破坏性、幂等 |注意: PVE 9 中已弃用 HA 组,改为使用 HA 规则。PVE 9.1 中,HA 状态输出已移除每个服务的
group字段。
验证是否正常工作
配置 MCP 客户端后,向 AI 助手提问:
“我的 Proxmox 集群中有哪些节点?”
如果连接正常,助手会调用 pve_list_nodes,并返回节点及其当前状态。
使用示例
配置完成后,可以用自然语言向 AI 工具提问:
-
“列出节点 pve1 上的所有 VM” -- 调用
pve_list_qemu_vms,显示 VM 的状态、CPU 和内存使用情况。 -
“VM 100 的状态如何?” -- 调用
pve_get_qemu_status,显示实时资源使用情况。 -
“VM 100 的 CPU 使用率今天何时开始上升?” -- 调用
pve_get_qemu_rrddata,并传入timeframe: "day"和fields: ["cpu"],返回紧凑的 60 个数据桶表格,而不是约 1,400 条原始样本。 -
“在 pve1 上启动容器 200” -- 调用
pve_start_lxc_container启动容器并返回任务 UPID。 -
“为 VM 100 创建名为 pre-upgrade 的快照” -- 调用
pve_create_qemu_snapshot,在进行更改前创建快照。 -
“显示集群资源” -- 调用
pve_list_cluster_resources,显示所有 VM、容器、存储和节点。 -
“VM 100 在 PBS 上的最新备份是什么时候?” -- 调用
pve_list_storage_content并传入vmid: 100和mode: "latest",而不是列出数据存储上的每个快照。 -
“将 VM 100 迁移到节点 pve2” -- 调用
pve_migrate_qemu_vm,将 VM 实时迁移到另一节点。 -
“并行关闭 VM 103、104 和 105” -- 调用
pve_bulk_shutdown_guests,通过单个请求关闭整个集群中的多个客户机。
故障排查
连接被拒绝 / ECONNREFUSED
检查 PVE_BASE_URL 是否正确且包含端口(默认值:8006)。确保运行 MCP 服务的环境可以访问 PVE 主机。
SSL 证书错误
如果 PVE 实例使用自签名证书,请设置 PVE_VERIFY_SSL=false。这会对所有请求禁用 TLS 验证。
未显示工具
检查访问权限级别设置。在 read-only 模式下会注册 55 个工具。在 read-execute 模式下会注册 77 个工具。使用 full(或省略 PVE_ACCESS_TIER)以启用全部 122 个工具。检查 PVE_CATEGORIES——只会注册所列类别中的工具。还要检查标准错误输出,确认服务启动时没有错误。
开发
# 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
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。