Skip to main content
Glama
pve-mcp
by tiancode

pve-mcp

An MCP server for managing Proxmox VE (single node or cluster): query resources, manage VM/CT lifecycle, snapshots, backups, clones — from Claude Code or any MCP host.

  • Works with both QEMU VMs and LXC containers, on single nodes and clusters.

  • Tools that target one guest only need the vmid — the node and guest type are resolved automatically.

  • Safety first: an optional read-only mode, confirm=true required for destructive operations, and guest command execution disabled by default.

Requirements

  • Python >= 3.11 (a pinned 3.12 is used via uv)

  • A Proxmox VE 7/8 host with an API token (see below)

Related MCP server: mcp-server-proxmox

Installation

git clone <this-repo> pve-mcp
cd pve-mcp
uv sync            # installs runtime + dev dependencies into .venv
uv run pytest      # optional: run the test suite

Or run it directly with uvx (no install):

uvx --from /path/to/pve-mcp pve-mcp

The console entry point is pve-mcp (stdio transport).

Creating a PVE API token

Authentication uses API tokens only (Authorization: PVEAPIToken=<id>=<secret>), never username/password tickets. Create a dedicated user and token on the PVE host (as root):

# 1. Dedicated user
pveum user add mcp@pve --comment "MCP server"

# 2a. Read-only usage: PVEAuditor on the whole tree
pveum acl modify / --users mcp@pve --roles PVEAuditor

# 2b. Management usage: PVEVMAdmin (VM/CT lifecycle, snapshots, backups)
pveum acl modify / --users mcp@pve --roles PVEVMAdmin
# For backup/restore you may also need PVEDatastoreUser on the backup storage:
pveum acl modify /storage/<backup-storage> --users mcp@pve --roles PVEDatastoreUser

# 3. Token
pveum user token add mcp@pve mcp --privsep 1

Note the privsep setting: with --privsep 1 (recommended) the token has its own ACLs — grant the roles above to the token too (pveum acl modify / --tokens 'mcp@pve!mcp' --roles PVEVMAdmin), or the token ends up with no permissions. With --privsep 0 the token inherits all permissions of the user.

The command prints the token secret once — store it safely.

Configuration (environment variables)

Variable

Required

Default

Description

PVE_HOST

yes

—

PVE API URL, e.g. https://192.168.1.10:8006

PVE_TOKEN_ID

yes

—

Token ID: user@realm!tokenname, e.g. mcp@pve!mcp

PVE_TOKEN_SECRET

yes

—

Token secret (UUID)

PVE_VERIFY_SSL

no

true

Set false for self-signed certificates (home labs)

PVE_TIMEOUT

no

30

HTTP timeout in seconds

PVE_MCP_READ_ONLY

no

false

true registers only the 12 read-only tools

PVE_MCP_ENABLE_EXEC

no

false

true registers pve_vm_exec (guest agent commands)

PVE_MCP_TASK_WAIT

no

30

Seconds to wait for PVE tasks; on timeout the UPID is returned

A .env file in the working directory is loaded automatically; see .env.example.

Registering with Claude Code

claude mcp add pve -e PVE_HOST=https://192.168.1.10:8006 \
  -e PVE_TOKEN_ID='root@pam!mcp' -e PVE_TOKEN_SECRET=xxx \
  -e PVE_VERIFY_SSL=false -- uvx --from /path/to/pve-mcp pve-mcp

Add -e PVE_MCP_READ_ONLY=true for a safe, audit-only setup.

Tools

Read-only (12, always registered)

Tool

Purpose

pve_cluster_status

Cluster/node health, quorum (works on single nodes too)

pve_list_nodes

Nodes with CPU/memory/disk usage and online status

pve_node_status

One node in detail (load, kernel, PVE version)

pve_list_vms

All VMs + CTs; filter by node / type / status

pve_vm_status

Live status of one guest (CPU/mem, agent, uptime)

pve_vm_config

Full config of one guest (cores, memory, disks, NICs)

pve_list_storage

Storage usage (cluster-wide or per node)

pve_storage_content

Contents of a storage (iso/backup/vztmpl/images)

pve_list_backups

Backups across storages; filter by vmid / storage

pve_list_snapshots

Snapshot tree of one guest

pve_list_tasks

Recent tasks (all nodes or one), errors-only option

pve_task_status

One task's status; failed tasks include a log tail

Write (11, skipped when PVE_MCP_READ_ONLY=true)

Tool

Purpose

Destructive

pve_vm_power

start / shutdown / stop / reboot / suspend / resume

no (stop is a hard power-off — prefer shutdown)

pve_vm_migrate

Move a guest to another node (QEMU live / CT restart)

no

pve_vm_set_config

Change config keys (cores, memory, onboot, ...)

no (most changes need a guest restart)

pve_vm_resize_disk

Grow a disk (+10G or absolute); shrinking unsupported

no

pve_vm_clone

Clone to a new vmid (full or linked)

no

pve_snapshot_create

Snapshot a guest (vmstate = include RAM, QEMU only)

no

pve_backup_create

vzdump backup (snapshot/suspend/stop mode)

no

pve_snapshot_rollback

Roll back to a snapshot

yes — requires confirm=true

pve_snapshot_delete

Delete a snapshot

yes — requires confirm=true

pve_vm_delete

Delete a guest and all its disks

yes — requires confirm=true

pve_backup_restore

Restore an archive to a vmid

new vmid: no; overwrite: yes — requires force=true + confirm=true

Exec (1, requires PVE_MCP_ENABLE_EXEC=true)

Tool

Purpose

pve_vm_exec

Run a shell command in a QEMU VM via the guest agent (/bin/sh -c); never registered in read-only mode

Security model

  1. Read-only mode — with PVE_MCP_READ_ONLY=true the write tools are not registered at all (they don't exist for the model), leaving exactly the 12 read-only tools.

  2. Tool annotations — read-only tools carry readOnlyHint, the four destructive tools carry destructiveHint, so MCP hosts (e.g. Claude Code) can prompt appropriately.

  3. confirm parameter — destructive tools refuse to run without confirm=true and explain the consequences first. Nothing is sent to PVE until confirmed.

  4. Exec opt-in — pve_vm_exec (arbitrary command execution in guests) is only registered with PVE_MCP_ENABLE_EXEC=true, and never in read-only mode.

Combine with a least-privilege token: PVEAuditor for read-only setups, PVEVMAdmin for management.

Behavior notes

  • Async tasks: write operations wait up to PVE_MCP_TASK_WAIT seconds for the PVE task to finish. Long operations (backups, clones, migrations) return {"status": "running", "upid": ...} — follow up with pve_task_status.

  • Output: responses are JSON with a per-tool field whitelist; byte values keep the raw number and gain a *_human companion (e.g. "31.25 GiB").

  • Errors: HTTP/auth/SSL errors are translated into actionable messages (e.g. 403 suggests the missing role; unknown vmids list the existing ones).

Development

uv sync
uv run pytest        # unit tests (PVE API mocked with respx)

See DESIGN.md for the full specification.

Available Tools

23 tools
pve_backup_createA

Create a vzdump backup of a VM or container.

    Applies to: QEMU VMs and LXC containers, located by ``vmid`` (``node``
    optional and auto-resolved). ``storage`` is the target backup storage.
    ``mode``: ``snapshot`` (default, no downtime), ``suspend`` (brief
    pause), or ``stop`` (guest is shut down for the backup). ``compress``
    defaults to ``zstd`` (valid: 0, 1, gzip, lzo, zstd). ``notes`` attaches
    a comment to the archive; ``{{...}}`` template variables (e.g.
    ``{{guestname}}``) are expanded by PVE.

    Side effects: creates a backup archive on ``storage``; ``stop`` mode
    shuts the guest down during the backup. Backups often outlast the
    PVE_MCP_TASK_WAIT window — then ``task.status`` is "running" and the
    ``upid`` can be followed with pve_task_status. Returns JSON with
    ``vmid``/``node``/``type``/``storage``/``mode`` and ``task``.
    Source: POST /nodes/{node}/vzdump.
    

Inputs: vmid (required), storage (required), mode, node, +2 more. Returns: result

pve_backup_restoreA
Destructive

Restore a backup archive to a VM/CT id. DESTRUCTIVE when overwriting.

    Applies to: vzdump/PBS backup archives (``archive`` is the volid, e.g.
    ``local:backup/vzdump-qemu-100-....vma.zst``); the guest type
    (QEMU vs LXC) is inferred from the archive name. ``node`` is required —
    the target may not exist yet, so it cannot be auto-resolved. ``storage``
    optionally overrides where restored disks are placed.

    Restoring to a NEW (unused) ``vmid`` needs no confirmation. Overwriting
    an EXISTING ``vmid`` destroys that guest's current disks and config:
    it requires ``force=true`` AND ``confirm=true``.

    Waits up to PVE_MCP_TASK_WAIT seconds (restores often run longer — then
    ``task.status`` is "running"; follow the ``upid`` with pve_task_status).
    Returns JSON with ``vmid``/``node``/``type``/``archive`` and ``task``.
    Source: POST /nodes/{node}/qemu (archive=...) or
    POST /nodes/{node}/lxc (ostemplate=..., restore=1).
    

Inputs: node (required), vmid (required), archive (required), force, +2 more. Returns: result

pve_cluster_statusA
Read-only

Cluster and node health, including quorum.

    Applies to: the whole cluster (also works on a single, unclustered node,
    which reports one entry of type ``node``).

    Returns a JSON list of entries. Cluster entries carry ``quorate`` and the
    node count; node entries carry ``online``, ``ip`` and ``nodeid``.
    Source: GET /cluster/status.
    

Inputs: no named parameters. Returns: result

pve_list_backupsA
Read-only

List backup archives across storages, optionally filtered.

    Applies to: VM and CT backups (vzdump archives). ``vmid`` filters to one
    guest; ``storage`` filters to one storage. Convenience wrapper that scans
    every backup-capable storage (via /cluster/resources?type=storage) and
    aggregates their ``content=backup`` listings.

    Returns a JSON list with ``volid``, ``vmid``, ``storage``, ``node``,
    ``size`` (bytes, +human) and ``ctime`` (+human), newest first.
    

Inputs: vmid, storage. Returns: result

pve_list_nodesA
Read-only

List all nodes with CPU, memory, disk usage and online status.

    Applies to: every node in the cluster.

    Returns a JSON list. ``cpu`` is a 0..1 load fraction; ``mem``/``maxmem``
    and ``disk``/``maxdisk`` are bytes (with ``*_human`` companions);
    ``uptime`` is seconds (with ``uptime_human``). Source: GET /nodes.
    

Inputs: no named parameters. Returns: result

pve_list_snapshotsA
Read-only

List snapshots of one VM or container.

    Applies to: a single VM or CT, located by ``vmid`` (``node`` optional and
    auto-resolved). PVE includes a synthetic ``current`` entry representing
    the live state; ``parent`` links form the snapshot tree.

    Returns a JSON list with ``name``, ``description``, ``parent``,
    ``snaptime`` (+human) and ``vmstate`` (1 = includes RAM).
    Source: GET /nodes/{node}/{qemu|lxc}/{vmid}/snapshot.
    

Inputs: vmid (required), node. Returns: result

pve_list_storageA
Read-only

List storages with usage figures.

    Applies to: all storages. If ``node`` is given, reports that node's view
    (GET /nodes/{node}/storage); otherwise reports a cluster-wide view
    (GET /cluster/resources?type=storage).

    Returns a JSON list; ``total``/``used``/``avail`` are bytes with
    ``*_human`` companions.
    

Inputs: node. Returns: result

pve_list_tasksA
Read-only

List recent tasks, newest first.

    Applies to: task history. If ``node`` is given, lists that node's tasks;
    otherwise aggregates across all nodes. ``limit`` caps the number of
    entries returned; ``errors_only`` keeps only failed tasks.

    Returns a JSON list with ``upid``, ``type``, ``id`` (often the vmid),
    ``user``, ``status`` (final status / "OK"), ``starttime``/``endtime``
    (+human). Source: GET /nodes/{node}/tasks.
    

Inputs: node, limit, errors_only. Returns: result

pve_list_vmsA
Read-only

List QEMU VMs and LXC containers across the cluster.

    Applies to: both VMs and CTs. Optional filters: ``node`` (name),
    ``type`` (``qemu`` or ``lxc``), ``status`` (``running`` or ``stopped``).

    Returns a JSON list with ``vmid``, ``name``, ``status``, ``node``,
    ``type``, cpu, and byte-valued ``mem``/``maxmem``/``disk``/``maxdisk``
    (with ``*_human``) plus ``uptime`` (+human).
    Source: GET /cluster/resources?type=vm.
    

Inputs: node, type, status. Returns: result

pve_node_statusA
Read-only

Detailed status of a single node (load, kernel, PVE version, memory).

    Applies to: one node, identified by its name (e.g. ``pve1``).

    Returns a JSON object with ``uptime`` (+human), ``loadavg``, ``cpu``
    (0..1), ``cpuinfo`` (model, cpus), and ``memory``/``swap``/``rootfs``
    each as ``{total, used, free/avail}`` bytes with ``*_human`` companions.
    Source: GET /nodes/{node}/status.
    

Inputs: node (required). Returns: result

pve_snapshot_createA

Create a snapshot of a VM or container.

    Applies to: QEMU VMs and LXC containers, located by ``vmid`` (``node``
    optional and auto-resolved). ``name`` is the snapshot identifier.
    ``vmstate=true`` also saves the RAM state (live snapshot) — QEMU only;
    LXC containers reject it with an error.

    Side effects: creates a snapshot (disk space usage grows over time).
    Waits up to PVE_MCP_TASK_WAIT seconds for the PVE task; returns JSON with
    ``vmid``/``node``/``type``/``snapshot`` and ``task`` (``exitstatus``
    "OK", failure + ``log_tail``, or ``status`` "running" with the ``upid``).
    Source: POST /nodes/{node}/{qemu|lxc}/{vmid}/snapshot.
    

Inputs: name (required), vmid (required), node, vmstate, +1 more. Returns: result

pve_snapshot_deleteA
Destructive

Delete a snapshot of a VM or container. DESTRUCTIVE.

    Applies to: QEMU VMs and LXC containers, located by ``vmid`` (``node``
    optional and auto-resolved). Requires ``confirm=true``: the snapshot
    ``name`` is removed permanently and can no longer be rolled back to.

    Side effects: frees the snapshot's disk space; the guest keeps running
    unaffected. Waits up to PVE_MCP_TASK_WAIT seconds; returns JSON with
    ``vmid``/``node``/``type``/``snapshot`` and ``task``.
    Source: DELETE /nodes/{node}/{qemu|lxc}/{vmid}/snapshot/{name}.
    

Inputs: name (required), vmid (required), node, confirm. Returns: result

pve_snapshot_rollbackA
Destructive

Roll a VM or container back to a snapshot. DESTRUCTIVE.

    Applies to: QEMU VMs and LXC containers, located by ``vmid`` (``node``
    optional and auto-resolved). Requires ``confirm=true``: rolling back
    DISCARDS ALL CHANGES (disk data and config) made after snapshot ``name``
    was taken, irreversibly.

    Side effects: guest disk/config revert to the snapshot; a running guest
    is stopped unless the snapshot includes RAM state. Waits up to
    PVE_MCP_TASK_WAIT seconds; returns JSON with ``vmid``/``node``/``type``/
    ``snapshot`` and ``task``.
    Source: POST /nodes/{node}/{qemu|lxc}/{vmid}/snapshot/{name}/rollback.
    

Inputs: name (required), vmid (required), node, confirm. Returns: result

pve_storage_contentA
Read-only

List the contents of a storage on a node.

    Applies to: one storage on one node. ``content`` optionally filters by
    kind: ``iso``, ``backup``, ``vztmpl`` (CT templates) or ``images`` (VM
    disks).

    Returns a JSON list of volumes with ``volid``, ``size`` (bytes, +human),
    ``format``, ``vmid`` and ``ctime`` (+human).
    Source: GET /nodes/{node}/storage/{storage}/content.
    

Inputs: node (required), storage (required), content. Returns: result

pve_task_statusA
Read-only

Status of a single task; attaches the log tail when it failed.

    Applies to: any PVE task, identified by its ``upid``. ``node`` is optional
    and, when omitted, is parsed from the UPID.

    Returns a JSON object with ``status`` (``running``/``stopped``),
    ``exitstatus`` (``OK`` or the error), ``type``, ``id``, ``user`` and
    ``starttime`` (+human). On failure, a ``log_tail`` array of the last log
    lines is included. Source: GET .../tasks/{upid}/status (+ .../log).
    

Inputs: upid (required), node. Returns: result

pve_vm_cloneA

Clone a VM or container to a new vmid.

    Applies to: QEMU VMs and LXC containers, located by ``vmid`` (``node``
    optional and auto-resolved). ``newid`` must be unused. ``full=true``
    makes an independent full copy (required when the source is not a
    template); linked clones (``full=false``) need a template source.
    ``storage`` sets the target storage for a full clone; ``target_node``
    places the clone on another node (shared storage required).

    Side effects: creates a new guest (stopped). Clones often outlast the
    PVE_MCP_TASK_WAIT window — then ``task.status`` is "running" and the
    ``upid`` can be followed with pve_task_status. Returns JSON with
    ``vmid`` (source), ``newid``, ``node``/``type`` and ``task``.
    Source: POST /nodes/{node}/{qemu|lxc}/{vmid}/clone.
    

Inputs: vmid (required), newid (required), full, name, +3 more. Returns: result

pve_vm_configA
Read-only

Full configuration of one VM or container.

    Applies to: a single VM or CT, located by ``vmid`` (``node`` optional and
    auto-resolved). Returns the complete config object (cores, memory, disk
    entries like ``scsi0``, network entries like ``net0``, ``onboot`` ...),
    with ``vmid``/``node``/``type`` context added.
    Source: GET /nodes/{node}/{qemu|lxc}/{vmid}/config.
    

Inputs: vmid (required), node. Returns: result

pve_vm_deleteA
Destructive

Delete a VM or container permanently. DESTRUCTIVE.

    Applies to: QEMU VMs and LXC containers, located by ``vmid`` (``node``
    optional and auto-resolved). Requires ``confirm=true``: the guest and
    ALL of its disks are destroyed irreversibly (backups on backup storage
    are kept). ``purge=true`` additionally removes the vmid from backup
    jobs, replication and HA configuration.

    Side effects: permanently destroys the guest. The guest must be stopped
    first (PVE rejects deleting a running guest). Waits up to
    PVE_MCP_TASK_WAIT seconds; returns JSON with the deleted ``vmid``/
    ``node``/``type`` and ``task``.
    Source: DELETE /nodes/{node}/{qemu|lxc}/{vmid}.
    

Inputs: vmid (required), node, purge, confirm. Returns: result

pve_vm_migrateA

Migrate a VM or container to another node.

    Applies to: QEMU VMs and LXC containers, located by ``vmid`` (source
    ``node`` optional and auto-resolved). For a running QEMU VM pass
    ``online=true`` for live migration. LXC containers cannot live-migrate:
    for them ``online=true`` is mapped to PVE restart migration (the CT is
    stopped, migrated, and started on ``target_node``).

    Side effects: moves the guest (brief downtime for CT restart migration).
    Waits up to PVE_MCP_TASK_WAIT seconds for the PVE task; returns JSON with
    ``vmid``/``node`` (source)/``target_node``/``type`` and ``task``
    (``exitstatus`` "OK", failure + ``log_tail``, or ``status`` "running"
    with the ``upid`` to follow up via pve_task_status — migrations often
    outlast the wait window).
    Source: POST /nodes/{node}/{qemu|lxc}/{vmid}/migrate.
    

Inputs: vmid (required), target_node (required), node, online. Returns: result

pve_vm_powerA

Change the power state of a VM or container.

    Applies to: QEMU VMs and LXC containers, located by ``vmid`` (``node``
    optional and auto-resolved). ``action`` is one of ``start``,
    ``shutdown`` (clean, via guest), ``stop``, ``reboot``, ``suspend``,
    ``resume``. NOTE: ``stop`` is a hard power-off (like pulling the plug) —
    prefer ``shutdown`` unless the guest is unresponsive. ``suspend`` /
    ``resume`` are QEMU-only; containers must use shutdown/stop/start.
    ``timeout`` (seconds) applies to shutdown/reboot (and QEMU stop) as the
    max wait for the guest.

    Side effects: changes guest power state. Waits up to PVE_MCP_TASK_WAIT
    seconds for the PVE task; returns JSON with ``vmid``/``node``/``type``/
    ``action`` and ``task`` (``exitstatus`` "OK", failure + ``log_tail``, or
    ``status`` "running" with the ``upid`` to follow up via pve_task_status).
    Source: POST /nodes/{node}/{qemu|lxc}/{vmid}/status/{action}.
    

Inputs: vmid (required), action (required), node, timeout. Returns: result

pve_vm_resize_diskA

Grow a disk of a VM or container.

    Applies to: QEMU VMs and LXC containers, located by ``vmid`` (``node``
    optional and auto-resolved). ``disk`` is the config key (e.g. ``scsi0``,
    ``virtio1``, or ``rootfs``/``mp0`` for containers). ``size`` is either
    relative (``+10G`` — add 10 GiB) or an absolute new size (``64G``);
    units K/M/G/T. GROW ONLY: PVE does not support shrinking disks, and an
    absolute size smaller than the current one is rejected by PVE.

    Side effects: enlarges the disk volume (the filesystem inside the guest
    usually must be grown separately). Waits up to PVE_MCP_TASK_WAIT
    seconds; returns JSON with ``vmid``/``node``/``type``/``disk``/``size``
    and ``task``. Source: PUT /nodes/{node}/{qemu|lxc}/{vmid}/resize.
    

Inputs: disk (required), size (required), vmid (required), node. Returns: result

pve_vm_set_configA

Change configuration options of a VM or container.

    Applies to: QEMU VMs and LXC containers, located by ``vmid`` (``node``
    optional and auto-resolved). ``config`` is a dict of PVE config keys to
    values, e.g. ``{"cores": 4, "memory": 8192, "name": "web02",
    "onboot": 1}`` — the same keys pve_vm_config returns.

    Side effects: updates the guest config. NOTE: most changes (cores,
    memory without hotplug, disks, NICs) only take effect after the guest
    is restarted; PVE applies hotpluggable changes immediately and stages
    the rest as "pending". Waits up to PVE_MCP_TASK_WAIT seconds when PVE
    runs the change as a task; returns JSON with ``vmid``/``node``/``type``/
    ``applied`` (the submitted config) and ``task``.
    Source: POST /nodes/{node}/qemu/{vmid}/config (async) or
    PUT /nodes/{node}/lxc/{vmid}/config (LXC has no async variant).
    

Inputs: vmid (required), config (required), node. Returns: result

pve_vm_statusA
Read-only

Live runtime status of one VM or container.

    Applies to: a single VM or CT, located by ``vmid`` (``node`` optional and
    auto-resolved). Returns a JSON object with ``status``, live cpu/memory,
    network and disk I/O counters (bytes, with ``*_human``), ``uptime``
    (+human) and, for QEMU, whether the guest ``agent`` is enabled.
    Source: GET /nodes/{node}/{qemu|lxc}/{vmid}/status/current.
    

Inputs: vmid (required), node. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.4/5.0

    Scored across 23 tools

    Disambiguation5/5

    Each tool targets a distinct resource and action, with clear boundaries between backup, snapshot, VM, node, and storage operations. Even tools with similar names like pve_vm_config and pve_vm_set_config are clearly differentiated as get vs set.

    Naming Consistency5/5

    All tools follow the consistent pattern pve_<resource>_<action>, using snake_case. Actions include create, delete, list, set, get, etc., and resources are always in the plural or singular as appropriate. No mixing of styles.

    Tool Count5/5

    23 tools is appropriate for a Proxmox VE management server, covering essential operations on VMs, containers, snapshots, backups, nodes, storage, and tasks. Each tool serves a distinct purpose without redundancy.

    Completeness4/5

    The tool surface covers most lifecycle operations for VMs/containers, snapshots, and backups. A minor gap is the lack of a tool to create a new VM from scratch (e.g., from an ISO), but cloning and configuration tools cover common provisioning workflows.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      MCP server for managing Proxmox VE clusters — provision VMs and containers, manage snapshots and backups, execute commands, browse storage, and monitor resources through natural language
      37
      289 PyPI
      18
      MIT
    • A
      license
      B
      quality
      C
      maintenance
      A Model Context Protocol (MCP) server for Proxmox Virtual Environment that enables AI assistants to manage virtual machines, containers, nodes, and resources through natural language interactions.
      10
      4
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      MCP server for Proxmox VE that enables AI assistants to inspect and manage LXC containers, VMs, snapshots, and resource pools via the Proxmox API.
      -