原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

Proxmox VE

作者:akmalovaa版本 2.3.0i★ –i在你的电脑上运行
注册名称io.github.akmalovaa/proxmox-mcp

安装

概览

作者提供的说明(英文原文)

Manage Proxmox VE nodes, VMs, containers, storage and snapshots. Read-only by default.

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 开发者工具
  • 你需要填写:PROXMOX_HOST, PROXMOX_TOKEN_VALUE, PROXMOX_PASSWORD, SENTRY_DSN

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

  • 基础检查:1 项中通过 1 项
  • 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
  • 需要你自己填写: PROXMOX_HOST, PROXMOX_PORT, PROXMOX_VERIFY_SSL, PROXMOX_TIMEOUT, PROXMOX_USER, PROXMOX_TOKEN_NAME, PROXMOX_TOKEN_VALUE, PROXMOX_PASSWORD, PROXMOX_RISK_LEVEL, PROXMOX_TOOLS_ALLOW, PROXMOX_REDACT_SECRETS, PROXMOX_MCP_TRANSPORT, PROXMOX_MCP_HOST, PROXMOX_MCP_PORT, PROXMOX_MCP_PATH, PROXMOX_MCP_JSON_RESPONSE, PROXMOX_MCP_ALLOWED_HOSTS, PROXMOX_MCP_ALLOWED_ORIGINS, SENTRY_DSN

标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。

你需要

  • PyPI已安装 Python 的 uv(用于 uvx 命令)

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json

{
  "mcpServers": {
    "proxmox": {
      "command": "uvx",
      "args": [
        "proxmox-ve-mcp"
      ],
      "env": {
        "PROXMOX_HOST": "your-value",
        "PROXMOX_PORT": "your-value",
        "PROXMOX_VERIFY_SSL": "your-value",
        "PROXMOX_TIMEOUT": "your-value",
        "PROXMOX_USER": "your-value",
        "PROXMOX_TOKEN_NAME": "your-value",
        "PROXMOX_TOKEN_VALUE": "your-value",
        "PROXMOX_PASSWORD": "your-value",
        "PROXMOX_RISK_LEVEL": "your-value",
        "PROXMOX_TOOLS_ALLOW": "your-value",
        "PROXMOX_REDACT_SECRETS": "your-value",
        "PROXMOX_MCP_TRANSPORT": "your-value",
        "PROXMOX_MCP_HOST": "your-value",
        "PROXMOX_MCP_PORT": "your-value",
        "PROXMOX_MCP_PATH": "your-value",
        "PROXMOX_MCP_JSON_RESPONSE": "your-value",
        "PROXMOX_MCP_ALLOWED_HOSTS": "your-value",
        "PROXMOX_MCP_ALLOWED_ORIGINS": "your-value",
        "SENTRY_DSN": "your-value"
      }
    }
  }
}

在终端中运行这条命令

claude mcp add proxmox --env PROXMOX_HOST=your-value --env PROXMOX_PORT=your-value --env PROXMOX_VERIFY_SSL=your-value --env PROXMOX_TIMEOUT=your-value --env PROXMOX_USER=your-value --env PROXMOX_TOKEN_NAME=your-value --env PROXMOX_TOKEN_VALUE=your-value --env PROXMOX_PASSWORD=your-value --env PROXMOX_RISK_LEVEL=your-value --env PROXMOX_TOOLS_ALLOW=your-value --env PROXMOX_REDACT_SECRETS=your-value --env PROXMOX_MCP_TRANSPORT=your-value --env PROXMOX_MCP_HOST=your-value --env PROXMOX_MCP_PORT=your-value --env PROXMOX_MCP_PATH=your-value --env PROXMOX_MCP_JSON_RESPONSE=your-value --env PROXMOX_MCP_ALLOWED_HOSTS=your-value --env PROXMOX_MCP_ALLOWED_ORIGINS=your-value --env SENTRY_DSN=your-value -- uvx proxmox-ve-mcp

运行前请先填写空着的值。

在 Cursor 中打开

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

{
  "mcpServers": {
    "proxmox": {
      "command": "uvx",
      "args": [
        "proxmox-ve-mcp"
      ],
      "env": {
        "PROXMOX_HOST": "your-value",
        "PROXMOX_PORT": "your-value",
        "PROXMOX_VERIFY_SSL": "your-value",
        "PROXMOX_TIMEOUT": "your-value",
        "PROXMOX_USER": "your-value",
        "PROXMOX_TOKEN_NAME": "your-value",
        "PROXMOX_TOKEN_VALUE": "your-value",
        "PROXMOX_PASSWORD": "your-value",
        "PROXMOX_RISK_LEVEL": "your-value",
        "PROXMOX_TOOLS_ALLOW": "your-value",
        "PROXMOX_REDACT_SECRETS": "your-value",
        "PROXMOX_MCP_TRANSPORT": "your-value",
        "PROXMOX_MCP_HOST": "your-value",
        "PROXMOX_MCP_PORT": "your-value",
        "PROXMOX_MCP_PATH": "your-value",
        "PROXMOX_MCP_JSON_RESPONSE": "your-value",
        "PROXMOX_MCP_ALLOWED_HOSTS": "your-value",
        "PROXMOX_MCP_ALLOWED_ORIGINS": "your-value",
        "SENTRY_DSN": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

在 VS Code 中打开

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

{
  "servers": {
    "proxmox": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "proxmox-ve-mcp"
      ],
      "env": {
        "PROXMOX_HOST": "your-value",
        "PROXMOX_PORT": "your-value",
        "PROXMOX_VERIFY_SSL": "your-value",
        "PROXMOX_TIMEOUT": "your-value",
        "PROXMOX_USER": "your-value",
        "PROXMOX_TOKEN_NAME": "your-value",
        "PROXMOX_TOKEN_VALUE": "your-value",
        "PROXMOX_PASSWORD": "your-value",
        "PROXMOX_RISK_LEVEL": "your-value",
        "PROXMOX_TOOLS_ALLOW": "your-value",
        "PROXMOX_REDACT_SECRETS": "your-value",
        "PROXMOX_MCP_TRANSPORT": "your-value",
        "PROXMOX_MCP_HOST": "your-value",
        "PROXMOX_MCP_PORT": "your-value",
        "PROXMOX_MCP_PATH": "your-value",
        "PROXMOX_MCP_JSON_RESPONSE": "your-value",
        "PROXMOX_MCP_ALLOWED_HOSTS": "your-value",
        "PROXMOX_MCP_ALLOWED_ORIGINS": "your-value",
        "SENTRY_DSN": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

需要你填写的值

  • PROXMOX_HOST 必填 env
    Proxmox host IP or hostname.
  • PROXMOX_PORT env
    Proxmox API port.
  • PROXMOX_VERIFY_SSL env
    Verify the TLS certificate. Proxmox self-signs by default.
  • PROXMOX_TIMEOUT env
    Seconds to wait for each Proxmox API request.
  • PROXMOX_USER env
    API user, including the realm.
  • PROXMOX_TOKEN_NAME env
    API token name. Use this plus PROXMOX_TOKEN_VALUE, or PROXMOX_PASSWORD.
  • PROXMOX_TOKEN_VALUE 机密 env
    API token secret.
  • PROXMOX_PASSWORD 机密 env
    Password, used only when no API token is set.
  • PROXMOX_RISK_LEVEL env
    Which tools exist: read-only, plus lifecycle, or everything.
  • PROXMOX_TOOLS_ALLOW env
    Comma-separated tool names to register, intersected with the risk level. Unset = all of them.
  • PROXMOX_REDACT_SECRETS env
    Mask cipassword and sshkeys in every response.
  • PROXMOX_MCP_TRANSPORT env
    stdio (default) or streamable-http.
  • PROXMOX_MCP_HOST env
    HTTP bind address. Anything but loopback also needs PROXMOX_MCP_ALLOWED_HOSTS.
  • PROXMOX_MCP_PORT env
    HTTP port.
  • PROXMOX_MCP_PATH env
    Streamable HTTP endpoint path.
  • PROXMOX_MCP_JSON_RESPONSE env
    Answer with JSON instead of an SSE stream.
  • PROXMOX_MCP_ALLOWED_HOSTS env
    Comma-separated Host headers to accept over HTTP; '*' disables the check.
  • PROXMOX_MCP_ALLOWED_ORIGINS env
    Comma-separated browser origins allowed to call the endpoint. Empty = same-origin only.
  • SENTRY_DSN 机密 env
    Optional: report tool traces and errors to Sentry. Unset disables it.

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月9日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过 GitHub 账户 akmalovaa 验证,该账户拥有此仓库

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“开发者工具”中的其他服务器比较i

  • 星标数多于此分类中其他 5594 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 5594 个服务器的 34% 更新
  • 基础检查结果等于或优于此分类中其他 5594 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

Proxmox VE 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

你需要填写:PROXMOX_HOST, PROXMOX_TOKEN_VALUE, PROXMOX_PASSWORD, SENTRY_DSN

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(2.3.0)于2个月前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv), Docker。

有什么可以替代它?

同一分类中有:GitHub, Desktop Commander, Cloudflare MCP

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

GitHub

Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.

作者:github广泛使用★ 3.4万6天前更新

电脑或云端

Desktop Commander

MCP server for terminal commands, file operations, and process management

作者:wonderwhy-er广泛使用↓ 71万/周★ 1万18天前更新

在你的电脑上运行

Cloudflare MCP

Cloudflare MCP servers

作者:cloudflare广泛使用★ 444614个月前更新

在云端运行✓ mcp.cloudflare.com

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

Proxmox MCP server

Simple Proxmox MCP

MCP server for managing Proxmox VE

50 tools — nodes, QEMU VMs, LXC containers, storage, cluster, snapshots.

Why this one?
  • One image, multi-arch — docker run ghcr.io/akmalovaa/proxmox-mcp:latest and you're done
  • Just env vars — no config files, no database, no state
  • Read-only by default — destructive ops are gated behind an explicit PROXMOX_RISK_LEVEL
  • stdio or Streamable HTTP — one env var apart; stdio by default, HTTP binds loopback
  • Tiny codebase — a thin layer over Proxmoxer, no config files, no database, no state
  • Raw JSON out — no formatting, no emoji; LLM gets clean data
  • Readable failures — a 403, a dead host or a blocked tier come back as a sentence, not a stack trace

Quick start

Image: ghcr.io/akmalovaa/proxmox-mcp:latest (multi-arch: amd64 + arm64).

1. Export credentials in your shell profile (~/.zprofile, ~/.zshrc or ~/.bashrc):

# token auth (recommended — see "Least privilege" for the user and role to give it):

export PROXMOX_HOST=192.168.1.100 export PROXMOX_USER=mcp@pve export PROXMOX_TOKEN_NAME=mcp export PROXMOX_TOKEN_VALUE=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

or password auth:

export PROXMOX_USER=root@pam

export PROXMOX_PASSWORD=your-password

optional:

export PROXMOX_RISK_LEVEL=read

Reload: source ~/.zprofile (or restart the shell).

2. Add to `~/.claude/settings.json` (Claude Code) or `claude_desktop_config.json` (Claude Desktop):

{

"mcpServers": { "proxmox": { "command": "docker", "args": ["run", "-i", "--rm", "-e", "PROXMOX_HOST", "-e", "PROXMOX_USER", "-e", "PROXMOX_PASSWORD", "ghcr.io/akmalovaa/proxmox-mcp:latest"] } } }

or token auth:

{

"mcpServers": { "proxmox": { "command": "docker", "args": ["run", "-i", "--rm", "-e", "PROXMOX_HOST", "-e", "PROXMOX_USER", "-e", "PROXMOX_TOKEN_NAME", "-e", "PROXMOX_TOKEN_VALUE", "ghcr.io/akmalovaa/proxmox-mcp:latest"] } } }

docker run -e VAR without a value passes the host variable through — no secrets in the config file. Restart the client — 32 read-only Proxmox tools become available (more if you raise PROXMOX_RISK_LEVEL).

For password auth, swap the token vars for PROXMOX_PASSWORD.

Note: Claude Desktop on macOS is launched via launchd and does not inherit ~/.zprofile/~/.zshrc. Either put the exports in ~/.zshenv, or fall back to an inline "env": { ... } block in the config.

Configuration

All settings are environment variables — set them in your shell profile, pass them inline to docker run -e, or declare them in your MCP client's env block.

VariableDefaultDescription
PROXMOX_HOST—Proxmox host (IP or hostname)
PROXMOX_USERroot@pamAPI user
Auth—**token *or* password — see below**
PROXMOX_PORT8006API port
PROXMOX_VERIFY_SSLfalseVerify TLS certificate
PROXMOX_TIMEOUT15Seconds to wait for each API request
PROXMOX_RISK_LEVELreadread / lifecycle / all — see Risk levels
PROXMOX_TOOLS_ALLOW—Comma-separated tool names to register, on top of the risk level
PROXMOX_REDACT_SECRETStrueMask cipassword / sshkeys in responses

Transport settings live under a PROXMOX_MCP_ prefix — see Streamable HTTP.

Authentication: token *or* password

Pick one. If both are set, the token wins.

Token (recommended):

export PROXMOX_USER=mcp@pve

export PROXMOX_TOKEN_NAME=mcp export PROXMOX_TOKEN_VALUE=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Setting only one half of the pair is a startup error rather than a silent fallback to the password — a typo in PROXMOX_TOKEN_NAME used to mean quietly running as whoever PROXMOX_USER is.

Password (fallback):

export PROXMOX_PASSWORD=your-password
Least privilege

An MCP server is reachable by a model acting on text it did not write, so give it its own user and its own token rather than root@pam. On the Proxmox host:

# a user that is not root, with a role that matches the risk level you plan to run

pveum user add mcp@pve pveum acl modify / --users mcp@pve --roles PVEAuditor # read

pveum acl modify / --users mcp@pve --roles PVEVMAdmin # lifecycle / all

a token for that user. Privilege Separation ON (the default) means the token starts

with no rights at all, so grant it the same role explicitly:

pveum user token add mcp@pve mcp --privsep 1 pveum acl modify / --tokens 'mcp@pve!mcp' --roles PVEAuditor

Check what the token actually ended up with:

pveum user permissions mcp@pve --token mcp

PVEAuditor covers all 32 read tools. PVEVMAdmin on /vms adds guest lifecycle and snapshots; migrate_vm additionally needs VM.Migrate on the target node, and clone_vm needs Datastore.AllocateSpace on the target storage. Narrow the ACL path (/vms/101, /pool/homelab) if the server should only see part of the cluster.

root@pam still works and is the quickest thing for a local look around — it is just not what should be left running.

Risk levels

PROXMOX_RISK_LEVEL controls which tools exist. Tools above the active level are not registered, so they never appear in the MCP client's tool list:

LevelToolsAdds
read *(default)*32read-only tools
lifecycle46+ start / stop / reboot / suspend / clone / migrate / create-snapshot
all50+ delete-snapshot / rollback-snapshot

Each elevated call is also re-checked at call time and logged to stderr (ALLOW / DENY + tool + tier).

The active level is not otherwise observable from the client side — a tool that is missing looks the same as a tool that was never written — so get_server_info reports it, along with the versions and the tool count.

PROXMOX_TOOLS_ALLOW narrows further within the tier, for a deployment that serves one specific agent:

export PROXMOX_TOOLS_ALLOW=list_nodes,list_containers,get_container_status,get_cluster_resources

Names that do not exist are a startup error, so a typo cannot silently amputate the tool list. Keep get_server_info on the list unless you have a reason not to — it is how a client learns what the rest of the list means.

Response shape

Inventory listings (list_nodes, list_vms, list_containers, get_cluster_resources) return a compact subset of each row: identity, status, uptime, CPU and memory. What is dropped is per-second IO counters and PSI pressure gauges — real data, but nothing a triage decision turns on, and several times the volume of what is kept. Pass verbose=true for the untouched rows.

Write tools answer with the task Proxmox accepted, not with a finished result:

{"state":"accepted","operation":"start_vm","node":"pve","vmid":101,

"upid":"UPID:pve:...","poll_with":"get_task_status"}

cipassword and sshkeys are replaced with ***redacted*** everywhere, keeping the key so the model can still tell that cloud-init is configured. Set PROXMOX_REDACT_SECRETS=false to get the raw values.

Streamable HTTP

stdio stays the default and is what an MCP client on your own machine should use. For a shared deployment — a container in a cluster, several clients on one URL — set the transport and nothing else changes:

docker run --rm -p 8000:8000 \

-e PROXMOX_HOST -e PROXMOX_TOKEN_NAME -e PROXMOX_TOKEN_VALUE \ -e PROXMOX_MCP_TRANSPORT=streamable-http \ -e PROXMOX_MCP_HOST=0.0.0.0 \ -e PROXMOX_MCP_ALLOWED_HOSTS=proxmox-mcp.example.com \ ghcr.io/akmalovaa/proxmox-mcp:latest

VariableDefaultDescription
PROXMOX_MCP_TRANSPORTstdiostdio or streamable-http
PROXMOX_MCP_HOST127.0.0.1Bind address — 0.0.0.0 in a container
PROXMOX_MCP_PORT8000Port
PROXMOX_MCP_PATH/mcpEndpoint path
PROXMOX_MCP_JSON_RESPONSEtrueJSON responses instead of an SSE stream
PROXMOX_MCP_ALLOWED_HOSTS—Host headers to accept; * disables the check
PROXMOX_MCP_ALLOWED_ORIGINS—Browser origins allowed; empty = same-origin only

The prefix is PROXMOX_MCP_, not PROXMOX_, because Kubernetes injects _PORT for every linked Service — a Service named proxmox would otherwise redefine PROXMOX_PORT.

Sessions are not used (stateless_http): they were removed from the protocol in revision 2026-07-28, and without them several clients can share one URL and a rolling update does not cut anyone off.

Host and Origin validation. Binding anything other than loopback requires PROXMOX_MCP_ALLOWED_HOSTS; the server refuses to start otherwise. A foreign Origin gets 403 and an unexpected Host gets 421 — this is what stops a page in a browser on the same LAN from driving the server through DNS rebinding. A request with no Origin header (curl, MCP clients) always passes. Set PROXMOX_MCP_ALLOWED_HOSTS=* only when something in front already validates it.

There is no authentication. Anyone who can reach the endpoint gets whatever PROXMOX_RISK_LEVEL allows. Put it behind a gateway, an authenticating proxy or a network boundary you trust, and keep PROXMOX_RISK_LEVEL=read unless the path to it is authenticated.

Health endpoints are served alongside /mcp and need no auth:

PathMeaning
GET /healthzThe process is up. Never touches Proxmox — a liveness probe that fails when Proxmox is down would restart the server in a loop and fix nothing.
GET /readyzProxmox answered version.get(). This is the one that should gate traffic; 503 with a readable reason otherwise.
livenessProbe:

httpGet: { path: /healthz, port: 8000 } readinessProbe: httpGet: { path: /readyz, port: 8000 }

Flags mirror the variables for interactive use: uvx proxmox-ve-mcp --transport streamable-http --port 8080.

Sentry (optional)

Tool calls and failures can be shipped to Sentry — every tools/call becomes a span, every failing tool an issue. Nothing is sent, and the SDK is never even imported, while SENTRY_DSN is unset.

The ghcr.io image already contains the SDK. From PyPI, install the extra:

uvx --from 'proxmox-ve-mcp[sentry]' proxmox-ve-mcp
VariableDefaultDescription
SENTRY_DSN—Set it to enable reporting
SENTRY_ENVIRONMENTproductionFree-form environment label
SENTRY_TRACES_SAMPLE_RATE1.0Share of tool calls traced

| `SENTRY_SEND_DEF

只显示了开头部分;其余内容请在仓库中阅读

问 PopNx