Skip to main content
Glama
k-krawczyk

proxmox-mcp-server

by k-krawczyk

proxmox-mcp-server

npm CI

An MCP server that exposes a Proxmox VE cluster as tools for an MCP client such as Claude. It talks to the Proxmox REST API (/api2/json) with an API token and communicates with the client over stdio.

Write operations in Proxmox are asynchronous: the API returns a task id (UPID) and the work continues in the background. This server polls each task to completion and reports the real exit status, so a tool only reports success once the operation has actually finished.

Requirements

  • Node.js 20 or newer

  • A Proxmox VE 7.2+ node or cluster reachable over HTTPS (the ISO/template download tool uses the download-url endpoint introduced in 7.2)

  • An API token (see below)

Related MCP server: Proxmox MCP Server

Install and build

npm install
npm run build

This produces dist/index.js, the entry point you point your MCP client at.

Creating an API token

Use a dedicated user and token with privilege separation enabled, not the root token. In the Proxmox web UI: Datacenter → Permissions → API Tokens → Add.

# create a user and a token with privilege separation on
pveum user add mcp@pve
pveum user token add mcp@pve mcp --privsep 1

The token secret (a UUID) is shown once. The token id is mcp@pve!mcp.

Grant only the privileges the tools you intend to use need. With privilege separation on, permissions must be assigned to the token itself, not just the user.

Read-only usage (everything in PVE_READONLY=true mode):

pveum acl modify / --tokens 'mcp@pve!mcp' --roles PVEAuditor

For write operations, grant the matching privileges per group. A practical setup grants PVEVMAdmin on the guests and audit/space roles on storage:

pveum acl modify /vms     --tokens 'mcp@pve!mcp' --roles PVEVMAdmin
pveum acl modify /storage --tokens 'mcp@pve!mcp' --roles PVEDatastoreAdmin

Privileges by tool group, if you prefer to build a custom role:

  • Read / cluster (pve_list_*, *_status, *_config, pve_cluster_resources): VM.Audit, Datastore.Audit, Sys.Audit.

  • VM/LXC lifecycle (start, stop, shutdown, reboot, reset): VM.PowerMgmt.

  • Create / set config / clone: VM.Allocate, VM.Config.Disk, VM.Config.CPU, VM.Config.Memory, VM.Config.Network, VM.Config.Options, VM.Clone, plus Datastore.AllocateSpace on the target storage.

  • Migrate: VM.Migrate.

  • Delete: VM.Allocate.

  • Snapshots (create/rollback/delete): VM.Snapshot (rollback also needs VM.Snapshot.Rollback).

  • Storage listing and ISO/template download: Datastore.Audit, Datastore.AllocateTemplate.

  • Network (create bridge, apply): Sys.Modify.

  • Backup / restore / schedule: VM.Backup, Datastore.AllocateSpace; restore also needs VM.Allocate; scheduling a cluster job also needs Sys.Modify.

A 403 from a tool almost always means a missing privilege on the token for that path.

Configuration

All configuration is via environment variables. Copy .env.example and fill it in, or set them directly in your MCP client config.

  • PROXMOX_HOST (required) — full base URL, e.g. https://pve.local:8006.

  • PROXMOX_TOKEN_ID (required) — USER@REALM!TOKENID, e.g. mcp@pve!mcp.

  • PROXMOX_TOKEN_SECRET (required) — the token UUID.

  • PROXMOX_INSECURE_TLStrue to accept self-signed certificates. Off by default; only for labs. See the security note below.

  • PVE_READONLYtrue (default) registers only read tools. Set to false to enable write and destructive tools.

  • PVE_NODE_ALLOWLIST — optional comma-separated node names; tools refuse to act on any node outside the list.

  • PVE_VMID_ALLOWLIST — optional comma-separated guest ids; same idea for VMs/CTs.

  • PROXMOX_REQUEST_TIMEOUT_MS — per-request timeout (default 30000).

  • PVE_TASK_TIMEOUT_MS — how long to wait for an async task (default 600000).

  • LOG_LEVELdebug | info | warn | error (default info). Logs go to stderr; stdout is reserved for the MCP protocol.

The auth header sent to Proxmox is Authorization: PVEAPIToken=USER@REALM!TOKENID=UUID (no Bearer prefix), as required for API tokens.

Running

Register the built server with your MCP client. For Claude Desktop, add to claude_desktop_config.json:

{
  "mcpServers": {
    "proxmox": {
      "command": "node",
      "args": ["/absolute/path/to/dist/index.js"],
      "env": {
        "PROXMOX_HOST": "https://pve.local:8006",
        "PROXMOX_TOKEN_ID": "mcp@pve!mcp",
        "PROXMOX_TOKEN_SECRET": "00000000-0000-0000-0000-000000000000",
        "PVE_READONLY": "true"
      }
    }
  }
}

To inspect the tools manually before wiring it into a client:

npx @modelcontextprotocol/inspector node dist/index.js

During development you can run from source with npm run dev.

Install as a Claude Code plugin

This repo doubles as a Claude Code plugin and its own marketplace, so it can be installed in two commands. From inside Claude Code:

/plugin marketplace add k-krawczyk/proxmox-mcp-server
/plugin install proxmox-mcp@proxmox

(The non-interactive equivalents are claude plugin marketplace add k-krawczyk/proxmox-mcp-server and claude plugin install proxmox-mcp@proxmox.)

Installing the plugin registers the proxmox MCP server automatically — it runs the prebuilt dist/ that ships in the repo, so no build step is needed on install. The plugin reads the connection details from your environment instead of storing them, so export them before launching Claude Code:

export PROXMOX_HOST=https://pve.local:8006
export PROXMOX_TOKEN_ID='mcp@pve!mcp'
export PROXMOX_TOKEN_SECRET=your-secret
export PVE_READONLY=true            # optional, defaults to true
export PROXMOX_INSECURE_TLS=false   # optional, defaults to false

When changing the source, rebuild and commit dist/ (npm run build) — marketplace installs do not run a build. The sections below cover wiring the server into other clients by hand.

Claude Desktop extension (.mcpb)

Claude Desktop installs this as a one-click extension. Download proxmox-mcp-server.mcpb from the GitHub Releases page and drag it onto the Claude Desktop window (Settings → Extensions). Claude Desktop asks for the host, token id and token secret in a form — no config file to edit, and the secret is stored in the OS keychain. Build the bundle yourself with npm run bundle:mcpb.

Adding to MCP clients

The package is on npm, so every client runs it the same way with no clone or build:

npx -y proxmox-mcp-server

Each client just needs that command plus the PROXMOX_* variables. The examples start in read-only mode; set PVE_READONLY=false to enable write tools. Keep the token secret out of version control — for shared/committed config files prefer ${PROXMOX_TOKEN_SECRET} expansion and export the value in your shell.

One-click install:

Add to Cursor Install in VS Code

The buttons register the server only; add your PROXMOX_* environment afterwards in the client's MCP settings.

Claude Code (CLI)

claude mcp add --transport stdio \
  --env PROXMOX_HOST=https://pve.local:8006 \
  --env PROXMOX_TOKEN_ID='mcp@pve!mcp' \
  --env PROXMOX_TOKEN_SECRET=your-secret \
  --env PVE_READONLY=true \
  proxmox -- npx -y proxmox-mcp-server

Place an option (here --transport) between the last --env and the server name, otherwise the name is parsed as another env pair. Use --scope user to make it available in every project, or --scope project to write a shared .mcp.json at the repo root. Manage with claude mcp list, claude mcp get proxmox, claude mcp remove proxmox, and /mcp inside a session.

A project .mcp.json looks like:

{
  "mcpServers": {
    "proxmox": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "proxmox-mcp-server"],
      "env": {
        "PROXMOX_HOST": "https://pve.local:8006",
        "PROXMOX_TOKEN_ID": "mcp@pve!mcp",
        "PROXMOX_TOKEN_SECRET": "${PROXMOX_TOKEN_SECRET}",
        "PVE_READONLY": "true"
      }
    }
  }
}

Codex CLI

Add to ~/.codex/config.toml:

[mcp_servers.proxmox]
command = "npx"
args = ["-y", "proxmox-mcp-server"]
env = { PROXMOX_HOST = "https://pve.local:8006", PROXMOX_TOKEN_ID = "mcp@pve!mcp", PROXMOX_TOKEN_SECRET = "your-secret", PVE_READONLY = "true" }

Cursor

~/.cursor/mcp.json (global) or .cursor/mcp.json (per project):

{
  "mcpServers": {
    "proxmox": {
      "command": "npx",
      "args": ["-y", "proxmox-mcp-server"],
      "env": {
        "PROXMOX_HOST": "https://pve.local:8006",
        "PROXMOX_TOKEN_ID": "mcp@pve!mcp",
        "PROXMOX_TOKEN_SECRET": "your-secret",
        "PVE_READONLY": "true"
      }
    }
  }
}

VS Code

.vscode/mcp.json (note the top-level key is servers):

{
  "servers": {
    "proxmox": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "proxmox-mcp-server"],
      "env": {
        "PROXMOX_HOST": "https://pve.local:8006",
        "PROXMOX_TOKEN_ID": "mcp@pve!mcp",
        "PROXMOX_TOKEN_SECRET": "${env:PROXMOX_TOKEN_SECRET}",
        "PVE_READONLY": "true"
      }
    }
  }
}

Other clients (Windsurf, Cline, Zed, …)

These read the same mcpServers JSON object as Claude Desktop and Cursor. Point command at npx with args ["-y", "proxmox-mcp-server"].

Tools

Read tools are always registered. Tools marked write are only registered when PVE_READONLY=false. Destructive tools additionally require confirm: true, and delete/restore/rollback require echoing the target id or name.

Cluster and nodes:

  • pve_version — Proxmox VE version of the connected node

  • pve_list_nodes, pve_node_status

  • pve_cluster_resources — VMs, containers, storage and nodes in one view

  • pve_list_tasks — recent tasks on a node, with UPID and exit status

The server logs the detected PVE version on startup. pve_download_iso needs the download-url endpoint and is gated to Proxmox VE 7.2+ (older nodes get a clear message); everything else works on 7.0, and most of it back to 6.2.

VMs (QEMU):

  • pve_list_vms, pve_vm_status, pve_vm_config

  • pve_vm_start, pve_vm_shutdown, pve_vm_reboot, pve_vm_stop (confirm), pve_vm_reset (confirm)

  • pve_vm_create, pve_vm_clone, pve_vm_migrate, pve_vm_set_config

  • pve_vm_delete (confirm + confirmVmid)

Containers (LXC):

  • pve_list_containers, pve_lxc_status, pve_lxc_config

  • pve_lxc_start, pve_lxc_shutdown, pve_lxc_reboot, pve_lxc_stop (confirm)

  • pve_lxc_create, pve_lxc_clone, pve_lxc_delete (confirm + confirmVmid)

Snapshots (qemu or lxc via the type argument):

  • pve_list_snapshots, pve_snapshot_create

  • pve_snapshot_rollback (confirm + confirmName), pve_snapshot_delete (confirm + confirmName)

Storage and images:

  • pve_list_storage, pve_storage_content, pve_download_iso

Network:

  • pve_list_network, pve_create_bridge, pve_apply_network (confirm)

Backup:

  • pve_list_backups, pve_backup_now, pve_restore (confirm + confirmVmid), pve_schedule_backup

Security notes

  • Start in PVE_READONLY=true. Write tools are not just hidden — they are never registered, so the client cannot call them at all.

  • Destructive tools require confirm: true. Deleting a guest, rolling back or deleting a snapshot, and restoring a backup also require repeating the target id or snapshot name, which guards against acting on the wrong target.

  • Use a token with the minimum privileges for your use case and keep privilege separation on.

  • The token secret is read only from the environment and is never written to logs.

  • PROXMOX_INSECURE_TLS=true disables certificate verification for the whole client and exposes the connection to man-in-the-middle attacks. Use it only against a lab with a self-signed certificate; for anything else, install a properly issued certificate or add the cluster CA to the host trust store.

Development

npm run dev          # run from source (tsx)
npm run lint         # eslint
npm run format       # prettier --write
npm test             # unit tests (vitest)
npm run build        # type-check and emit to dist/

The unit tests mock fetch and cover the auth header, UPID parsing and polling, error mapping, the confirmation gate and read-only registration. An optional live smoke test runs only when PVE_INTEGRATION=1 is set together with valid PROXMOX_* variables:

PVE_INTEGRATION=1 npm test

End-to-end sweep against a simulator

sim/ contains a small in-memory simulator of the Proxmox API. It is faithful to the request/response contract (token auth, the {data:...} envelope, UPID task ids and the task status lifecycle) and keeps state, so every tool can be exercised end to end — the full create → start → snapshot → clone → backup → delete → restore cycle for VMs and containers — without a hypervisor. It does not emulate virtualization; it proves the tool/client/polling/guard code paths.

Run the sweep against the simulator started with Node:

npm run build
npm run sim          # in one terminal
npm run sweep        # in another

Or run the simulator in a container and sweep against it:

npm run sweep:docker

This requires a running Docker engine. Building the real Proxmox VE inside Docker is not supported here: it is a hypervisor and needs /dev/kvm and the host LXC stack, which a container (especially on macOS, where Docker itself runs in a VM without nested virtualization) cannot provide. For real lifecycle testing point PVE_INTEGRATION=1 at an actual node instead.

End-to-end sweep against a real node

sim/live-real.mjs runs the same kind of sweep against an actual Proxmox node: it creates a VM (qcow2 disk) and an LXC container in a free VMID range and drives the full create → start → snapshot → clone → backup → delete → restore cycle, then cleans up every guest, the pending bridge, the downloaded template, backup archives and schedule jobs — even on failure. It deliberately skips pve_apply_network (reloading networking on a remote node can drop the connection) and treats a migration to the only node as the expected rejection. Point a .env at the node and:

npm run build
set -a; . ./.env; set +a   # load PROXMOX_* into the environment
npm run test:live

Guests use no NIC unless the node has a bridge, so a single-storage node with only local and no vmbr0 is enough.

Available Tools

16 tools
pve_cluster_resourcesCluster resourcesA
Read-only

Single combined view of cluster resources (VMs, containers, storage, nodes). Use the type filter to narrow the result.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoOptional resource type filter

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds that it's a 'combined view' and mentions the type filter, which harmonizes with the annotations. No contradictions; the extra context is useful but not extensive, so a 4 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no superfluous words. The first sentence states the core purpose; the second adds actionable guidance on filtering. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter, no output schema, openWorldHint), the description adequately explains the combined nature and filter usage. It doesn't detail return fields, but with openWorldHint that is acceptable. Complete for this context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a clear parameter description ('Optional resource type filter'). The description merely restates this usage without adding additional semantic detail like format or default behavior, meeting the baseline for full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it provides a 'single combined view of cluster resources' listing VMs, containers, storage, and nodes. This verb+resource combination is precise and distinguishes it from siblings like pve_list_vms or pve_list_storage, which focus on individual resource types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions using the type filter to narrow results, implying use cases. However, it does not explicitly state when to prefer this tool over sibling tools (e.g., for a complete overview vs. specific lists) or provide exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pve_list_backupsList backupsB
Read-only

List backup archives stored on a storage.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeYesTarget Proxmox node name, e.g. "pve1"
storageYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint and openWorldHint. The description adds no additional behavioral context beyond stating it lists backups, which aligns with readOnly. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, concise but lacking structure. It fits the tool but could be slightly more informative without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description does not cover return format, pagination, or error scenarios. Given the simplicity of the tool, the description is minimally adequate but leaves gaps for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% (node has description, storage does not). The tool description does not enhance understanding of parameters beyond the schema, leaving the storage parameter inadequately explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'List backup archives stored on a storage.' It specifies the verb 'list' and resource 'backup archives', and the sibling tools focus on different resources, so it is well-distinguished.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like pve_storage_content. No mention of prerequisites or context, leaving the agent uninformed about selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pve_list_containersList containersA
Read-only

List LXC containers. With a node, lists that node directly; without one, returns every container in the cluster from the resource index.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only (readOnlyHint=true) and open-world (openWorldHint=true). The description adds behavioral context beyond annotations by explaining the dual behavior based on the node parameter, which is valuable for correct invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the main purpose ('List LXC containers'), and every word adds value. No fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one optional parameter and no output schema, the description sufficiently covers the behavior. It does not elaborate on return format or pagination, but given the tool's simplicity and annotations, it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero description coverage for the single optional parameter 'node'. The description compensates by explaining its effect: providing it lists that node directly, omitting it returns all containers from the cluster index. This adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool lists LXC containers, and clarifies the scope difference with and without the node parameter. This distinguishes it from sibling tools like pve_list_vms (for VMs) and pve_lxc_status (for status).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the node parameter (to list a specific node directly) versus omitting it (to get all containers via the resource index). However, it does not explicitly state when not to use this tool or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pve_list_networkList network interfacesA
Read-only

List network interfaces on a node (bridges, bonds, physical NICs, VLANs). Pending, not-yet-applied changes are included.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeYesTarget Proxmox node name, e.g. "pve1"
typeNoFilter by interface type

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds that pending, not-yet-applied changes are included, which is valuable behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main purpose, and contains no unnecessary words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains what the tool lists and notes pending changes, but lacks details about the output format or structure. For a simple list tool, it is fairly complete, but could be more informative.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters are fully described in the input schema (100% coverage). The description does not add additional meaning beyond what the schema provides, so a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists network interfaces on a node, listing the types included (bridges, bonds, physical NICs, VLANs). It is specific about the resource and action, but does not explicitly distinguish from sibling list tools, though the name and context make it clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives. The context and sibling tool names imply it is for network interfaces, but no when-not-to-use or prerequisites are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pve_list_nodesList nodesA
Read-only

List all nodes in the Proxmox cluster with their online status and load.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true. Description adds that it returns 'online status and load', which is useful beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded, no wasted words. Perfectly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and zero parameters, the description is sufficient. It could optionally mention the return format (e.g., list of node objects), but it's still complete enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so baseline is 4. Description doesn't need to add parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'List', resource 'nodes', and includes specific details (online status, load). It distinguishes from siblings like pve_cluster_resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance. The description implies usage for basic node info, but there are no exclusions or alternatives mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pve_list_snapshotsList snapshotsA
Read-only

List snapshots of a VM or container, including the "current" pseudo-snapshot.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeYesTarget Proxmox node name, e.g. "pve1"
typeYesGuest kind: "qemu" for VMs, "lxc" for containers
vmidYesNumeric guest id (VMID) of the VM or container

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true and openWorldHint=true. The description adds behavioral context by mentioning the inclusion of the 'current' pseudo-snapshot, which is beyond what annotations provide. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of 14 words, efficiently conveying the essential purpose and a key behavioral detail. There is no redundancy or unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool, the description covers the main purpose and a notable detail (current pseudo-snapshot). Combined with full schema descriptions and annotations, it is sufficiently complete. Missing details like return format are acceptable given tool simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with clear descriptions for node, vmid, and type. The description does not add any additional meaning to these parameters beyond what the schema already provides, so baseline score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (list), resource (snapshots), and scope (VM or container). It includes the specific detail about the 'current' pseudo-snapshot, distinguishing it from sibling tools like pve_list_backups that list different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing snapshots but provides no explicit guidance on when to use this tool vs alternatives (e.g., pve_vm_status). The purpose is clear, but an agent might benefit from context on when listing snapshots is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pve_list_storageList storageA
Read-only

List storages visible from a node, with type, enabled content and free space.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeYesTarget Proxmox node name, e.g. "pve1"

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description mentions the output fields (type, enabled content, free space), providing behavioral insight beyond the readOnlyHint annotation. It does not disclose potential errors, permissions, or performance traits, but for a simple read-only list, the description is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence of 12 words that immediately conveys the tool's purpose and output. Every word adds value, making it highly concise and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (single parameter, no output schema), the description covers the essential behavior: listing storages with key attributes. It could mention if any authentication or permissions are needed, but it is largely complete for a basic list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already provides a clear description for the node parameter. The description's phrase 'visible from a node' reinforces the parameter but adds no new semantic meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (list), resource (storages), and scope (visible from a node). It also specifies the returned attributes (type, enabled content, free space), distinguishing it from sibling tools like pve_storage_content that list content of a storage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that the tool requires a node parameter, but does not explicitly state when to use it versus alternatives such as pve_storage_content for storage contents. It lacks explicit exclusions or when-not recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pve_list_tasksList tasksA
Read-only

Recent task log for a node, including UPID, type, status and exit status. Useful to check on a long-running operation that may have outlived a tool call timeout.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeYesTarget Proxmox node name, e.g. "pve1"
limitNoMaximum tasks to return
runningNoOnly return tasks that are still running

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, so the description adds useful context about the return fields (UPID, type, status, exit status). No contradictions; it reinforces safe read behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no extraneous information. Purpose is front-loaded and every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no output schema, the description sufficiently covers what is returned and a typical usage scenario. All parameters are documented in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and describes all parameters adequately. The description does not add extra meaning beyond the schema, meeting baseline expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists recent tasks for a node, including specific fields (UPID, type, status, exit status), which distinguishes it from sibling list tools like pve_list_vms or pve_list_nodes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a practical use case: checking on long-running operations that may have outlived a tool call timeout. It does not explicitly exclude alternative scenarios, but the context makes when to use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pve_list_vmsList VMsA
Read-only

List QEMU VMs. With a node, lists that node directly; without one, returns every VM in the cluster from the resource index.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds the key behavioral distinction of node parameter affecting scope. It does not contradict annotations and provides additional context beyond what annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the purpose. No redundant or wasted words. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one optional parameter. The description adequately covers the two usage modes. No output schema is needed for a list operation, and the description is sufficient for the complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden for the 'node' parameter. It explains the effect of providing or omitting the node parameter, adding meaning beyond the bare schema definition of a string.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists QEMU VMs and distinguishes between two modes: with a node (node-specific) and without (cluster-wide from resource index). This differentiates it from sibling tools like 'pve_list_containers' and 'pve_cluster_resources'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives context on when to use each mode (node vs no node) but does not explicitly state when not to use this tool or mention alternatives. It provides some guidance but lacks exclusions or comparisons to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pve_lxc_configContainer configA
Read-only

Full configuration of a container (cores, memory, rootfs, network, features).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeYesTarget Proxmox node name, e.g. "pve1"
vmidYesNumeric guest id (VMID) of the VM or container

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the description adds minimal behavioral context. It does not disclose additional traits like response size, formatting, or any potential side effects, but given the read-only nature, this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single clear sentence, front-loading the purpose and listing key aspects. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple config retrieval tool with two parameters and no output schema, the description is mostly complete. It lists the config categories, though it could mention the return format or note that it only gets current config. Still, it provides sufficient context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers both parameters (node, vmid) with descriptions, achieving 100% coverage. The description adds no extra meaning beyond what the schema provides, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the full configuration of a container, listing specific aspects like cores, memory, rootfs, network, and features. It uses a specific verb ('Full configuration') and resource ('container'), and is distinct from sibling tools like pve_lxc_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as pve_lxc_status or pve_vm_config. The description does not mention prerequisites, context, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pve_lxc_statusContainer statusA
Read-only

Current runtime status of a container (running/stopped, CPU, memory, uptime).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeYesTarget Proxmox node name, e.g. "pve1"
vmidYesNumeric guest id (VMID) of the VM or container

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds value beyond the readOnlyHint and openWorldHint annotations by specifying the exact data returned (running/stopped, CPU, memory, uptime). It does not contradict annotations and provides useful behavioral context, though it could mention if authentication or specific node access is needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that conveys all essential information without unnecessary words. It is appropriately front-loaded with the main purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of an output schema, the description adequately explains the return values. However, it could be more complete by mentioning any potential errors, rate limits, or the need for valid node and VMID. Still, for a simple status tool, it provides sufficient context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage for both parameters (node and vmid) with their own descriptions. The tool description does not add additional meaning beyond what is already in the schema, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('status' implied) and resource ('container'), specifying the kind of runtime status information provided (running/stopped, CPU, memory, uptime). This effectively distinguishes it from sibling tools like pve_vm_status (for VMs) and pve_lxc_config (configuration).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus alternatives nor any prerequisites. The usage context is implied by the focus on runtime status, but no direct comparisons or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pve_node_statusNode statusA
Read-only

Detailed status of a single node: CPU, memory, uptime, kernel and PVE version.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeYesTarget Proxmox node name, e.g. "pve1"

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true. The description adds value by listing the specific status fields returned (CPU, memory, uptime, kernel, PVE version), providing behavioral context beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with purpose and key details. Every word adds value; no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but the description lists expected fields. For a simple read-only tool with one parameter, the description sufficiently covers what the agent needs to understand its use and output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema itself describes the parameter clearly. The description does not add additional meaning beyond the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (get detailed status) and the resource (single node), listing specific fields (CPU, memory, uptime, kernel, PVE version). This distinguishes it from sibling tools like pve_list_nodes (list nodes) and pve_version (version only).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for a single node's detailed status but does not explicitly instruct when to use or exclude alternatives (e.g., pve_list_nodes for listing all nodes). No when-not or alternative mentions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pve_storage_contentStorage contentA
Read-only

List the volumes on a storage: ISO images, container templates, disk images or backups. Use the content filter to narrow the listing.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeYesTarget Proxmox node name, e.g. "pve1"
contentNoFilter by content type
storageYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds the types of volumes listed and filtering capability, but does not elaborate on openWorld behavior (returning more data than requested) or other traits like pagination. It provides some added context beyond annotations but is not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two clear, front-loaded sentences with no wasted words. Every sentence provides meaningful information about the tool's action and usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with annotations and schema covering required parameters, the description is adequate. It states what is listed and how to filter. However, it does not mention the openWorldHint behavior or provide any return value format, which would be useful given no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%; node and content have descriptions, storage does not. The description mentions content types and filtering, adding value to the content parameter but not addressing the missing storage parameter description. It compensates partially but not fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'volumes on a storage,' specifying the types of content (ISO images, container templates, disk images or backups). This distinguishes it from sibling tools like pve_list_storage (which lists storage definitions) and pve_list_backups (backup-specific).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates using the content filter to narrow results, but does not provide explicit when-to-use or when-not-to-use guidance, nor does it mention alternative tools among siblings. The context is implied but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pve_versionAPI versionA
Read-only

Proxmox VE version of the connected node (version, release, repository id). Tells you which version-gated features are available.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint. The description adds context beyond these by specifying the returned data (version, release, repository id) and the tool's purpose in revealing available features. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and contains no unnecessary words. Every sentence adds distinct value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, simple return, and presence of annotations, the description is largely complete. It could optionally list exact field names, but the current description covers the essential information for correct tool invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameters (100% coverage), so the description cannot add parameter semantics. However, it adds value by explaining exactly what the output contains, compensating for the lack of an output schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the Proxmox VE version of the connected node, including specific data points (version, release, repository id) and its utility in determining version-gated features. It is distinct from all sibling tools which focus on resources, backups, containers, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for checking version information but does not provide explicit guidance on when to use it over alternatives or include prerequisites/limitations. With no sibling version tools, differentiation is implicit but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pve_vm_configVM configA
Read-only

Full configuration of a VM (cores, memory, disks, network, boot order).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeYesTarget Proxmox node name, e.g. "pve1"
vmidYesNumeric guest id (VMID) of the VM or container

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the description's statement 'Full configuration' adds minimal transparency beyond indicating it returns data, not mutations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence without extraneous words. It efficiently communicates the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (2 params, no output schema, read-only), the description is largely sufficient. It could optionally list more configuration aspects but covers the key ones.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters described accurately. The description does not add extra meaning beyond what the schema provides for 'node' and 'vmid'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the full configuration of a VM, specifying included resources (cores, memory, disks, network, boot order). This differentiates it from sibling tools like pve_vm_status which focus on status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. The description implies it is for getting full config, but does not mention when not to use it or suggest alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pve_vm_statusVM statusA
Read-only

Current runtime status of a VM (running/stopped, CPU, memory, uptime).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeYesTarget Proxmox node name, e.g. "pve1"
vmidYesNumeric guest id (VMID) of the VM or container

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true. Description adds specific behavioral context: returns runtime status with CPU, memory, uptime details. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with purpose, no wasted words. Efficiently communicates tool capability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with two well-documented parameters and no output schema, the description sufficiently covers the return data and context. Annotations provide additional safety cues.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters (node, vmid). Description does not add parameter details beyond schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool retrieves current runtime status of a VM, listing specific metrics (running/stopped, CPU, memory, uptime). Distinguished from siblings like pve_vm_config (configuration) and pve_list_vms (listing).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implied usage for checking runtime status, but no explicit guidance on when to use this vs alternatives (e.g., pve_vm_config for static config, or other status tools). Lacks when-not or alternative references.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4/5.0
Disambiguation5/5

Each tool targets a distinct resource and action, e.g., pve_list_vms vs pve_list_containers vs pve_list_backups. Even the combined view pve_cluster_resources is differentiated by its aggregate nature and type filter, so no ambiguity.

Naming Consistency5/5

All tools follow a consistent pattern: 'pve_' prefix + verb_noun (e.g., pve_list_vms) or resource_config/status (e.g., pve_vm_config). The pattern is uniform and predictable across all 16 tools.

Tool Count5/5

16 tools cover the major Proxmox domains: VMs, containers, storage, network, nodes, backups, snapshots, tasks, version, and cluster resources. This is a well-scoped set for a read-only monitoring server—neither too few nor too many.

Completeness4/5

The tool surface covers all key Proxmox resources for querying state. Minor gaps include no tool for individual node storage details beyond listing, and no mutation tools, but that is likely intentional given the server's apparent read-only purpose.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/k-krawczyk/proxmox-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server