ต้นแบบ · รุ่นทดลอง: มีทุก server ในทะเบียนทางการ อัปเดตทุก 30 นาที รีวิวและบัญชีผู้ใช้จะมาในขั้นถัดไป
PopNx MCPที่รวม MCP สำหรับคนใช้ AI · อธิบายเป็นภาษาคน

Proxmox VE

โดย akmalovaaรุ่น 2.3.0i★ –iรันบนเครื่อง
ชื่อใน registryio.github.akmalovaa/proxmox-mcp

ติดตั้ง

ภาพรวม

คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)

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

สามเสาของ PopNx MCP

สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน

ใช้ทำอะไรได้

ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry

  • การเชื่อมต่อ: รันบนเครื่อง
  • ช่องทาง (transport): 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ติดตั้ง uv ของ Python (มีคำสั่ง uvx) ในเครื่อง

คุณใช้แอปไหน

เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”

เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json

{
  "mcpServers": {
    "proxmox": {
      "command": "uvx",
      "args": [
        "proxmox-ve-mcp"
      ],
      "env": {
        "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": "ใส่ค่าของคุณ"
      }
    }
  }
}

พิมพ์คำสั่งนี้ใน Terminal

claude mcp add proxmox --env PROXMOX_HOST='ใส่ค่าของคุณ' --env PROXMOX_PORT='ใส่ค่าของคุณ' --env PROXMOX_VERIFY_SSL='ใส่ค่าของคุณ' --env PROXMOX_TIMEOUT='ใส่ค่าของคุณ' --env PROXMOX_USER='ใส่ค่าของคุณ' --env PROXMOX_TOKEN_NAME='ใส่ค่าของคุณ' --env PROXMOX_TOKEN_VALUE='ใส่ค่าของคุณ' --env PROXMOX_PASSWORD='ใส่ค่าของคุณ' --env PROXMOX_RISK_LEVEL='ใส่ค่าของคุณ' --env PROXMOX_TOOLS_ALLOW='ใส่ค่าของคุณ' --env PROXMOX_REDACT_SECRETS='ใส่ค่าของคุณ' --env PROXMOX_MCP_TRANSPORT='ใส่ค่าของคุณ' --env PROXMOX_MCP_HOST='ใส่ค่าของคุณ' --env PROXMOX_MCP_PORT='ใส่ค่าของคุณ' --env PROXMOX_MCP_PATH='ใส่ค่าของคุณ' --env PROXMOX_MCP_JSON_RESPONSE='ใส่ค่าของคุณ' --env PROXMOX_MCP_ALLOWED_HOSTS='ใส่ค่าของคุณ' --env PROXMOX_MCP_ALLOWED_ORIGINS='ใส่ค่าของคุณ' --env SENTRY_DSN='ใส่ค่าของคุณ' -- uvx proxmox-ve-mcp

เติมค่าที่เว้นว่างไว้ก่อนรัน

เปิดใน Cursor

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json

{
  "mcpServers": {
    "proxmox": {
      "command": "uvx",
      "args": [
        "proxmox-ve-mcp"
      ],
      "env": {
        "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": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

เปิดใน VS Code

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .vscode/mcp.json ของโปรเจกต์

{
  "servers": {
    "proxmox": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "proxmox-ve-mcp"
      ],
      "env": {
        "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": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น

ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี

ค่าที่ต้องใส่เอง

  • 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.

ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README

ทำอะไรได้บ้าง

รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง

ผลตรวจเบื้องต้นi

เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 8 พ.ย. 2569

  • ✓ ผ่าน

    ตัวตนผู้ทำตรงกับ repo

    ชื่อใน registry ยืนยันด้วยบัญชี GitHub akmalovaa ซึ่งเป็นเจ้าของ repo

  • … ยังไม่ตรวจ

    ยังมีคนดูแล

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • … ยังไม่ตรวจ

    มีสัญญาอนุญาต (license)

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • – ไม่เกี่ยว

    endpoint ตอบ

    ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต

  • – ไม่เกี่ยว

    ล็อกอินแบบ OAuth

    ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน

  • … ยังไม่ตรวจ

    คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง

    รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต

เทียบกับตัวอื่นในหมวด เครื่องมือนักพัฒนาi

  • ดาวมากกว่า 0% ของอีก 4917 ตัวในหมวดนี้
  • ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 39% ของอีก 4917 ตัวในหมวดนี้
  • ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 4917 ตัวในหมวดนี้

เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo

คำถามที่พบบ่อย

Proxmox VE ปลอดภัยไหม?

จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น

ต้องใช้กุญแจหรือรหัสอะไรบ้าง?

ต้องใส่ค่าเหล่านี้: PROXMOX_HOST, PROXMOX_TOKEN_VALUE, PROXMOX_PASSWORD, SENTRY_DSN

ตัวนี้รันบนเครื่องหรือบนคลาวด์?

รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)

ยังมีคนดูแลอยู่ไหม?

repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (2.3.0) เข้า registry 2 เดือนที่ผ่านมา

ใช้กับโปรแกรมไหนได้บ้าง?

โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv), Docker ในเครื่องด้วย

มีตัวไหนใช้แทนได้บ้าง?

ในหมวดเดียวกันมี GitHub, Desktop Commander, Cloudflare MCP

ตัวที่ใช้แทนได้

server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว

อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi

GitHub

โดย github

server ทางการของ GitHub ให้ AI อ่านและจัดการโค้ด issue และ pull request ในบัญชีของคุณได้ ใช้ผ่านคลาวด์ของ GitHub หรือรันในเครื่องด้วย Docker ก็ได้

บนเครื่องหรือคลาวด์★ 34,245MITอัปเดต 4 วันที่ผ่านมา
ติดตั้ง

Desktop Commander

โดย wonderwhy-er

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

รันบนเครื่อง★ 10,225MITอัปเดต 17 วันที่ผ่านมา
ติดตั้ง

Cloudflare MCP

โดย cloudflare

Cloudflare MCP servers

รันบนคลาวด์★ 4,446Apache-2.0อัปเดต 14 เดือนที่ผ่านมา
ติดตั้ง

README จากผู้ทำ

เปิดอ่าน README

ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ 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

ตัดมาแค่ช่วงต้น อ่านต่อใน repo

ถาม PopNx