proxmox-mcp
This server provides 38 tools for managing a Proxmox VE cluster across nodes, QEMU VMs, LXC containers, storage, and cluster resources. Operations are gated by the PROXMOX_RISK_LEVEL environment variable: read (default, read-only), lifecycle (start/stop/clone/snapshot), all (destructive: delete/rollback).
Node Management
List nodes with status, CPU, memory, uptime; get detailed metrics (disk, load, kernel)
View network interfaces and physical disks
List recent tasks; get task status or log output by UPID
QEMU VM Management
List, get status/config/snapshots of VMs
Start, stop (force), shutdown, reboot, suspend, resume, clone (lifecycle)
Create snapshots (lifecycle); delete or rollback snapshots (all)
LXC Container Management
List, get status/config/snapshots of containers
Start, stop (force), shutdown, reboot (lifecycle)
Create snapshots (lifecycle); delete or rollback snapshots (all)
Storage Management
List storage pools with usage info
Browse contents filtered by type (ISOs, disk images, backups, templates)
Cluster Management
Get cluster health, quorum state, and node membership
List all resources (VMs, containers, storage, nodes) with optional type filtering
View configured backup jobs (vzdump schedules)
Get the next available VM/container ID
Provides tools for managing Proxmox VE environments, including nodes, QEMU VMs, LXC containers, storage, cluster resources, and backups with configurable risk levels for destructive operations.
Allows management of QEMU virtual machines, including start, stop, shutdown, reboot, suspend, resume, clone, and snapshot operations.
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:latestand you're doneJust env vars — no config files, no database, no state
Read-only by default — destructive ops are gated behind an explicit
PROXMOX_RISK_LEVELstdio 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
Related MCP server: nandi-proxmox-mcp
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=readReload: 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.
Variable | Default | Description |
| — | Proxmox host (IP or hostname) |
|
| API user |
Auth | — | token or password — see below |
|
| API port |
|
| Verify TLS certificate |
|
| Seconds to wait for each API request |
|
|
|
| — | Comma-separated tool names to register, on top of the risk level |
|
| Mask |
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-xxxxxxxxxxxxSetting 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-passwordLeast 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 PVEAuditorCheck what the token actually ended up with:
pveum user permissions mcp@pve --token mcpPVEAuditor 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:
Level | Tools | Adds |
| 32 | read-only tools |
| 46 | + start / stop / reboot / suspend / clone / migrate / create-snapshot |
| 50 | + 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_resourcesNames 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:latestVariable | Default | Description |
|
|
|
|
| Bind address — |
|
| Port |
|
| Endpoint path |
|
| JSON responses instead of an SSE stream |
| — |
|
| — | Browser origins allowed; empty = same-origin only |
The prefix is PROXMOX_MCP_, not PROXMOX_, because Kubernetes injects <SERVICE>_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:
Path | Meaning |
| The 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. |
| Proxmox answered |
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-mcpVariable | Default | Description |
| — | Set it to enable reporting |
|
| Free-form environment label |
|
| Share of tool calls traced |
|
| Send tool arguments and results as span data |
Leave SENTRY_SEND_DEFAULT_PII off unless you mean it: with it on, tool arguments and
results are attached to spans, and get_vm_config returns ssh keys and cipassword
hashes. A DSN set without the extra installed logs a warning and the server runs on.
Tools
Nodes (10)
Tool | Description |
| List all cluster nodes with status, CPU, memory, uptime |
| Detailed node metrics (CPU, memory, disk, load, kernel) |
| Network interfaces on a node |
| Physical disks on a node |
| Proxmox system services and their state |
| Pending APT package updates |
| Historical CPU/memory/disk/network metrics (RRD) |
| Recent tasks on a node, optionally errors only |
| Status of a specific task by UPID |
| Log output from a task |
QEMU VMs (17)
Tool | Tier | Description |
| read | List all VMs, optionally filter by node |
| read | Current VM status (running/stopped, CPU, memory) |
| read | VM configuration (hardware, disks, network) |
| read | IP addresses of a running VM (via QEMU guest agent) |
| read | Historical CPU/memory/disk/network metrics (RRD) |
| read | List all snapshots of a VM |
| lifecycle | Start a VM |
| lifecycle | Force-stop a VM — annotated destructive, unsaved guest state is lost |
| lifecycle | Graceful ACPI shutdown with timeout |
| lifecycle | Reboot via ACPI |
| lifecycle | Suspend a VM |
| lifecycle | Resume a suspended VM |
| lifecycle | Full or linked clone |
| lifecycle | Move a VM to another node, online or offline |
| lifecycle | Create a snapshot |
| all | Delete a snapshot |
| all | Rollback to a snapshot |
LXC Containers (13)
Tool | Tier | Description |
| read | List all LXC containers, optionally filter by node |
| read | Current container status |
| read | Container configuration |
| read | IP addresses of a running container |
| read | Historical CPU/memory/disk/network metrics (RRD) |
| read | List all snapshots |
| lifecycle | Start a container |
| lifecycle | Force-stop a container — annotated destructive |
| lifecycle | Graceful shutdown with timeout |
| lifecycle | Reboot a container |
| lifecycle | Create a snapshot |
| all | Delete a snapshot |
| all | Rollback to a snapshot |
Storage (2)
Tool | Description |
| Storage pools with usage, optionally filter by node |
| Contents of a storage pool (ISOs, backups, images, templates) |
Cluster (7)
Tool | Description |
| Cluster health, quorum, node membership |
| All resources (VMs, containers, storage, nodes) |
| Configured backup jobs |
| High-availability resources and their state |
| Resource pools |
| Cluster-wide event log, newest first |
| Next available VM/container ID |
Server (1)
Tool | Description |
| This server's own risk level, tool count, versions and Proxmox reachability |
Architecture
src/proxmox_mcp/
├── server.py # MCPServer instance, health routes, transport selection, entry point
├── config.py # Pydantic Settings (PROXMOX_) + transport config (PROXMOX_MCP_)
├── client.py # Proxmoxer connection, built once per process
└── tools/ # nodes, vms, containers, storage, cluster, server_infoRead-only by default — elevated tools gated by
PROXMOX_RISK_LEVELGated at registration — a tool above the tier is absent from
tools/list, not refused at call time: what the model cannot see, it cannot retryAdmission and annotations are separate —
tier=is the operator's policy,annotations=is what the client is told a call does, so a force-stop can bedestructiveHint: trueand still live at thelifecycletierLazy connection — the Proxmoxer client is built on first use, once, and shared; the server therefore starts cleanly even when Proxmox is unreachable
Raw JSON output — compact, no formatting; LLM consumes data directly
Normalized errors — Proxmox and network failures are translated into one actionable sentence instead of a
requeststraceback
Development
Run standalone (testing)
export PROXMOX_HOST=192.168.1.100
export PROXMOX_USER=root@pam
export PROXMOX_TOKEN_NAME=mcp
export PROXMOX_TOKEN_VALUE=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
docker run -i --rm \
-e PROXMOX_HOST -e PROXMOX_USER \
-e PROXMOX_TOKEN_NAME -e PROXMOX_TOKEN_VALUE \
ghcr.io/akmalovaa/proxmox-mcp:latestWithout Docker (UV)
git clone https://github.com/akmalovaa/proxmox-mcp.git && cd proxmox-mcp && uv syncMCP client config:
{
"mcpServers": {
"proxmox": {
"command": "uv",
"args": ["run", "--directory", "/path/to/proxmox-mcp", "python", "-m", "proxmox_mcp"],
"env": {
"PROXMOX_HOST": "192.168.1.100",
"PROXMOX_TOKEN_NAME": "mcp",
"PROXMOX_TOKEN_VALUE": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
}
}
}Build from source
git clone https://github.com/akmalovaa/proxmox-mcp.git
cd proxmox-mcp
docker build -t proxmox-mcp .The image is multi-stage: uv builds the virtualenv in a throwaway layer, and the
runtime stage carries only Python plus the venv and runs as the unprivileged mcp
user (uid 10001).
Lint, type-check, test
uv sync --locked --group dev
uv run ruff check .
uv run mypy src/
uv run pytest -vLicense
MIT
Available Tools
38 toolsclone_vmA
Clone a VM into a new VM. Requires PROXMOX_RISK_LEVEL=lifecycle.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the VM resides. | |
| vmid | Yes | Source VM ID to clone from. | |
| newid | Yes | ID for the new cloned VM (must not be in use). | |
| name | No | Optional name for the cloned VM. | |
| full | No | True = full clone (independent disks); False = linked clone. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the behavioral trait that this is a mutation (clone) and adds context about the required risk level. This goes beyond annotations (which are consistent) by providing operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences with no filler. Every sentence adds value—first stating the action, second stating a key requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple operation and the presence of an output schema, the description is nearly complete. It could mention that the source VM must exist or that the new ID must be unique, but these are implied by the schema. A minor gap, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have descriptions in the input schema (100% coverage), so the description adds no extra parameter meaning beyond what the schema already provides. Baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Clone a VM') and the resource ('into a new VM'), making the tool's purpose immediately understandable. It is distinct from sibling tools like create_vm_snapshot which deal with snapshots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a prerequisite ('Requires PROXMOX_RISK_LEVEL=lifecycle'), which helps agents understand when the tool is usable. However, it does not explicitly contrast with alternatives like snapshots or other VM creation methods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_container_snapshotA
Create a snapshot of an LXC container. Requires PROXMOX_RISK_LEVEL=lifecycle.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the container resides. | |
| vmid | Yes | LXC container numeric ID. | |
| snapname | Yes | Snapshot name. | |
| description | No | Optional human-readable description of the snapshot. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false (mutates) and destructiveHint=false. The description adds the lifecycle risk level requirement, which is a behavioral constraint. No contradiction with annotations. Additional details about failure modes or concurrency are not needed given 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence plus a requirement, with no fluff. It is front-loaded and every word contributes to the meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the four parameters with clear schema descriptions, an output schema, and annotations, the description is complete enough. It captures the essential purpose and risk level without needing to explain return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage for all four parameters. The tool description does not add any extra semantics beyond the schema, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a snapshot of an LXC container', specifying the action and resource. It also includes a risk level requirement. The tool name and sibling tools (e.g., create_vm_snapshot, delete_container_snapshot) further differentiate it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a precondition ('Requires PROXMOX_RISK_LEVEL=lifecycle'), guiding when the tool can be used. It does not explicitly list alternatives or when-not, but the tool name and siblings imply it's for LXC containers, which is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_vm_snapshotA
Create a snapshot of a VM. Requires PROXMOX_RISK_LEVEL=lifecycle.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the VM resides. | |
| vmid | Yes | QEMU VM numeric ID. | |
| snapname | Yes | Snapshot name. | |
| description | No | Optional human-readable description of the snapshot. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide basic behavioral hints (non-read-only, non-destructive, non-idempotent). The description adds one requirement (risk level) but does not elaborate on additional behaviors such as whether the VM must be running, what happens if snapshot name exists, or side effects like disk I/O. With annotations present, the description adds marginal value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (one sentence plus a requirement) and front-loaded with the purpose. It is not verbose, but could be slightly more informative without losing conciseness, hence a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks important context such as prerequisites (beyond risk level), constraints (unique snapshot name, VM existence), and potential side effects. An output schema exists, so return values are covered, but the overall contextual information for correct invocation is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the schema already documents each parameter. The description does not add any parameter-specific meaning beyond what is in the schema, earning the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action 'Create a snapshot of a VM' with a verb and resource. It distinguishes from sibling tools like delete_vm_snapshot or create_container_snapshot by specifying the target (VM vs container) and action (create vs delete).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states a prerequisite (PROXMOX_RISK_LEVEL=lifecycle) but provides no explicit guidance on when to use this tool vs alternatives like create_container_snapshot or rollback_vm_snapshot. Usage context is implied through the tool name and description but not detailed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_container_snapshotADestructive
Delete an LXC container snapshot. Irreversible. Requires PROXMOX_RISK_LEVEL=all.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the container resides. | |
| vmid | Yes | LXC container numeric ID. | |
| snapname | Yes | Snapshot name to delete (irreversible). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the explicit warning 'Irreversible', which goes beyond the annotations (destructiveHint=true). It also mentions the risk level requirement. However, it does not describe other behavioral aspects like error conditions or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, each providing essential information without any fluff. It is front-loaded with the primary action and immediately followed by critical caveats.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation, the description covers the core purpose, irreversibility, and a prerequisite (risk level). The output schema likely handles return values. It lacks details on error states or dependencies, but this is acceptable for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides clear descriptions for all 3 parameters (100% coverage). The description does not add any new semantic information beyond what the schema provides, so it meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Delete' and the resource 'LXC container snapshot', distinguishing it from sibling tools like create_container_snapshot and rollback_container_snapshot. The added caveats 'Irreversible' and risk level requirement further clarify the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the risk level requirement, which is a precondition, but does not explicitly state when to use this tool versus alternatives or when not to use it. Usage is implied by the tool name and action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_vm_snapshotADestructive
Delete a VM snapshot. Irreversible. Requires PROXMOX_RISK_LEVEL=all.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the VM resides. | |
| vmid | Yes | QEMU VM numeric ID. | |
| snapname | Yes | Snapshot name to delete (irreversible). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds 'Irreversible' beyond annotations (destructiveHint=true), providing stronger behavioral context. Also mentions a requirement, which is helpful. However, doesn't disclose potential side effects or permissions beyond the risk level.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise with three short sentences. Front-loaded with the main purpose, followed by key warnings. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and annotations, the description adequately covers the core action and important behavioral traits. Could mention that it permanently removes the snapshot to differentiate from rollback, but not necessary for a simple delete operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all three parameters with descriptions (100% coverage), so baseline is 3. Description does not add any parameter-specific details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states 'Delete a VM snapshot', specifying the verb and resource, and distinguishes from sibling tools like delete_container_snapshot by mentioning VM.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives mentioned, but it provides a prerequisite ('Requires PROXMOX_RISK_LEVEL=all'). The purpose is clear enough to infer usage, but lacks guidance compared to rollback or list operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cluster_backupsARead-onlyIdempotent
List all backup jobs configured in the cluster (vzdump schedules).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the description adds no safety info. However, it adds technical context ('vzdump schedules') and confirms the operation is a list of configurations, which is valuable 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the verb and resource. Every word contributes meaning, with no redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, read-only, with output schema), the description is complete. It specifies scope ('cluster') and technology ('vzdump schedules'), leaving no ambiguity about what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and 100% schema coverage, so the description need not add parameter info. Baseline for 0 params is 4, and the description provides no additional parameter semantics, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('backup jobs') with context ('in the cluster') and technology hint ('vzdump schedules'). It clearly distinguishes from sibling tools like 'list_vms' or 'list_storage'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states its purpose without explicit when-to-use or alternatives, but the tool is self-evident as a unique list operation for backup jobs among siblings. It provides sufficient context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cluster_resourcesARead-onlyIdempotent
List all resources in the cluster (VMs, containers, storage, nodes).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by resource type: 'vm' (QEMU + LXC), 'storage', 'node', 'sdn'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds no behavioral details beyond what annotations provide, so it is adequate but not enhanced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It is front-loaded with the verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one optional parameter and an output schema, the description sufficiently covers the tool's purpose. No additional context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter 'type' with a clear description. The description does not add any additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'List all resources in the cluster' with examples (VMs, containers, storage, nodes), clearly conveying the scope and distinguishing it from sibling tools that list 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this broad listing versus more specific sibling tools like list_vms or list_storage. The description does not provide context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cluster_statusARead-onlyIdempotent
Get overall cluster status: quorum state and node membership.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, open-world. The description adds what is returned (quorum state, node membership). Adequate but does not elaborate on behavioral traits 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence with no waste, front-loading the key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, output schema exists, and annotations cover behavioral traits, the description is complete enough for an agent to understand the tool's purpose and usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema description coverage is 100% (vacuously). The description adds no extra meaning, but baseline is 4 for zero parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves overall cluster status with quorum state and node membership. However, it does not differentiate from sibling status tools like get_cluster_resources or get_node_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus other status tools. There is no mention of when-not or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_container_configARead-onlyIdempotent
Get LXC container configuration: rootfs, network, resources, hostname.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the container resides. | |
| vmid | Yes | LXC container numeric ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and openWorldHint. The description adds behavioral context by specifying which configuration aspects are returned (rootfs, network, resources, hostname), which is consistent with the read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently states the purpose and lists key configuration aspects, with no unnecessary words or redundancies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 required parameters), rich annotations, and existence of an output schema, the description is complete enough. It covers what the tool does and what configuration aspects are included.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description does not add any parameter-level information beyond what the schema provides, meeting the baseline but not exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get LXC container configuration' and lists specific aspects (rootfs, network, resources, hostname), which distinguishes it from siblings like get_vm_config (VM config) and get_container_status (status).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving container configuration, but does not explicitly state when to use it versus alternatives or provide exclusions. Usage is clear from the name but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_container_statusARead-onlyIdempotent
Get current runtime status of an LXC container (running/stopped, CPU, memory).
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the container resides. | |
| vmid | Yes | LXC container numeric ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true. The description adds value by specifying the exact data returned: running/stopped status, CPU, and memory. This goes beyond the annotations, providing context about the output content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the verb and purpose. Every word is necessary; no wasted text. It efficiently conveys the tool's function and key outputs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (2 parameters, simple read operation) and the presence of an output schema (not shown but indicated), the description adequately covers what the tool does and returns. It is complete for an agent to understand tool usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for both parameters (node and vmid). The description does not add additional meaning beyond what the schema already provides. Thus baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and clearly identifies the resource 'runtime status of an LXC container' with key data points (running/stopped, CPU, memory). This distinguishes it from sibling tools like get_container_config (which returns config details) and list_containers (which lists containers, not status).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating what it returns, but lacks explicit guidance on when to use this tool vs alternatives, when not to use it, or prerequisites. For example, it does not mention that this tool is for LXC containers only, not VMs, which could be inferred from sibling names but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_next_vmidARead-onlyIdempotent
Get the next available VM/container ID in the cluster.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and idempotentHint, so the tool is clearly a safe, idempotent read operation. The description adds no further behavioral details (e.g., how 'available' is determined, auth requirements, or potential side effects), but given the annotations, the bar is lower and the description is not contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no extraneous words. It is front-loaded with the key information and perfectly sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema likely exists (though not shown), the description is mostly complete. However, it could clarify what 'next available' means (e.g., sequential, lowest unused ID) to avoid ambiguity. Still, it adequately covers the tool's purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters with 100% schema description coverage, so the baseline score is 3. The description does not add any parameter information, as there are none to describe, but this is acceptable given the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get the next available VM/container ID in the cluster.' It uses a specific verb ('get') and resource ('next available VM/container ID'), and it is distinct from all sibling tools, which focus on creating, deleting, or managing existing VMs/containers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention when not to use it or any prerequisites. It simply states what it does, leaving the agent to infer usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_disksARead-onlyIdempotent
List physical disks on a node.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, idempotentHint, openWorldHint) already declare safety. Description adds minimal extra behavioral info (listing disks) but does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with 5 words, highly concise, and front-loaded with essential action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (per context signals), the description is complete enough for a simple list tool. It could be slightly improved by noting the return format but is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (parameter 'node' has description 'Node name'). The tool description does not add further parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List physical disks on a node' uses a specific verb (List) and resource (physical disks), clearly differentiating from sibling tools like get_node_networks or get_node_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs alternatives; implied usage is straightforward but lacks exclusions or comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_networksARead-onlyIdempotent
List network interfaces on a node.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds no new behavioral traits beyond 'list', but it is consistent with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single, clear sentence with no superfluous words. It is appropriately concise for a simple list operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, one required parameter, existing output schema, and annotations, the description is largely sufficient. It could benefit from noting behavior on non-existent nodes, but the overall context is adequate for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides full description coverage (100%) for the single parameter 'node'. The tool description adds no additional semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool lists network interfaces on a node, using a specific verb and resource. It is distinct from sibling tools that deal with VMs, containers, storage, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternative guidance is provided, but for a simple list operation with one parameter, the purpose is self-explanatory. Implicitly, it is used when network interfaces are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_statusBRead-onlyIdempotent
Get detailed status of a node: CPU, memory, disk, load average, kernel version.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name (e.g. 'pve', 'node1'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, so the description is not solely responsible for safety signals. The description adds value by specifying the data categories returned, but does not discuss potential side effects or error scenarios, which is acceptable given 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no extraneous words. Front-loaded with the core action ('Get detailed status of a node') followed by a brief list of metrics. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 one parameter and an output schema (not shown), the description covers the main status categories. It does not mention possible error conditions or prerequisites, but given the annotations, this is acceptable. Slightly incomplete for agents unfamiliar with the domain, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage with the parameter 'node' already explained as 'Node name (e.g. 'pve', 'node1').' The tool description does not add any additional semantics 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the tool's purpose: 'Get detailed status of a node' and enumerates key metrics (CPU, memory, disk, load average, kernel version). It distinguishes from sibling tools that focus on individual aspects (e.g., get_node_disks, get_node_networks) by providing a holistic status view.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 get_cluster_status or get_node_disks. There are no explicit when-to-use or when-not-to-use statements, leaving the agent to infer context from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_tasksARead-onlyIdempotent
List recent tasks on a node.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name. | |
| limit | No | Maximum number of tasks to return. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, covering safety and idempotency. The description adds the notion of 'recent' tasks but does not clarify ordering or pagination beyond the limit parameter. With annotations present, the description is adequate but not enriched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with 5 words, no redundancy, and immediately conveys the tool's purpose. It earns its place without any waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, existing output schema, and annotations, the description is nearly complete. It specifies the resource (tasks on a node) and implies a filter (recent). Could be slightly improved by defining 'recent' or ordering, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with descriptions for 'node' and 'limit'. The description does not add further meaning beyond what the schema provides, so it meets the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List recent tasks on a node.' uses a specific verb ('List') and clearly identifies the resource ('recent tasks') and scope ('on a node'). It distinguishes from sibling tools like get_task_log and get_task_status, which address different aspects of tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., get_task_log for logs, get_task_status for status). The description is minimal and does not indicate context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_storage_contentARead-onlyIdempotent
List contents of a storage pool: ISOs, disk images, backups, container templates.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name. | |
| storage | Yes | Storage pool name (e.g. 'local', 'local-lvm', 'cephfs'). | |
| content | No | Filter by content type: 'iso' (ISO images), 'backup' (vzdump backups), 'images' (VM disks), 'rootdir' (LXC rootfs), 'vztmpl' (LXC templates). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and openWorldHint, so the description need not elaborate. It does not contradict annotations and adds no additional behavioral context, meeting the baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys the tool's purpose without unnecessary words. It is front-loaded and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool and the presence of an output schema, the description provides sufficient high-level context. It does not need to detail return values or error handling, so completeness is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is documented. The tool description adds only marginal context (listing example content types) beyond the schema, so a score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (List) and resource (contents of a storage pool), with examples of content types. It effectively distinguishes from sibling tools like list_storage by focusing on contents of a specific pool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 is provided. The usage context is implied by the tool name and description, but alternatives are not mentioned, so the score is moderate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_logBRead-onlyIdempotent
Get log output from a specific task.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the task runs. | |
| upid | Yes | Task UPID string. | |
| limit | No | Maximum number of log lines. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description is not required to repeat those. However, it does not disclose the output format (e.g., array of lines) beyond 'log output', which is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple log retrieval tool with an output schema and clear annotations, the description is largely complete. It could mention that limit controls line count, but the schema handles that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions for all parameters. The description adds no additional meaning beyond what the schema provides, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get log output from a specific task', specifying the action and resource. It is distinct from the sibling get_task_status tool, but could be more specific about the nature of 'task'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like get_task_status. The description does not provide context for selection or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_statusARead-onlyIdempotent
Get status of a specific task by its UPID.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the task runs. | |
| upid | Yes | Task UPID string returned by a previous operation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is clear. The description adds no behavioral details beyond the UPID identifier, but this is acceptable given annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence that is fully front-loaded and contains no extraneous information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with full schema coverage and safe annotations, the description is largely complete. It could mention that this is used to poll async task status, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and both parameters are already well-described in the schema. The description does not add further semantic value 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (get), the resource (status of a specific task), and the method (by its UPID). It distinguishes from siblings like 'get_task_log' or 'get_node_tasks' which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'get_task_log' or 'get_node_tasks'. The description does not mention prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vm_configARead-onlyIdempotent
Get VM configuration: hardware, boot order, disks, network, cloud-init, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the VM resides. | |
| vmid | Yes | QEMU VM numeric ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds value by specifying the content of the configuration (hardware, boot order, etc.) 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently lists key configuration areas without redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (as indicated by context signals), the description sufficiently summarizes the tool's return content. It could be slightly more explicit about the full scope, but the output schema fills the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described in the schema. The description does not add additional semantic meaning beyond the schema's own descriptions, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'Get' and resource 'VM configuration', listing specific components (hardware, boot order, disks, etc.) which clearly distinguishes it from siblings like `get_vm_status` and `get_container_config`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving full VM configuration details, but lacks explicit guidance on when to use this vs alternatives like `get_vm_status`. Context from sibling names provides implicit differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vm_statusARead-onlyIdempotent
Get current runtime status of a VM (running/stopped, CPU, memory, uptime).
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the VM resides. | |
| vmid | Yes | QEMU VM numeric ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true. The description adds that it returns runtime status fields, which is consistent but does not reveal significant behavioral traits beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no superfluous words. It is concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema, the description does not need to explain return values. It succinctly covers what the tool does and its key output fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema adequately describes parameters. The description does not add additional semantics beyond the schema's clear definitions of node and vmid.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets current runtime status of a VM, listing specific attributes (running/stopped, CPU, memory, uptime). It distinguishes it from sibling tools like get_vm_config (configuration) and action-oriented tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking VM status, but does not explicitly state when to use vs alternatives like get_vm_config or when not to use. However, given the context of read-only status, it is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_containersARead-onlyIdempotent
List all LXC containers in the cluster, optionally filtered by node.
| Name | Required | Description | Default |
|---|---|---|---|
| node | No | Optional node name. If omitted, lists containers across the cluster. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, and open world. Description adds that the tool lists all containers cluster-wide unless filtered by node, which is consistent and adds context. No contradictions; the description complements annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no wasted words. Front-loaded with action and resource. Ideal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 param and an output schema, the description is adequate but minimal. It does not mention pagination, sorting, or limits, but annotations hint at open world. With output schema available, this is minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'node' is fully described in the input schema (100% coverage). The description's mention of optional filtering adds no new information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'List' and resource 'LXC containers', and mentions optional filtering by node. This distinguishes it from siblings like list_vms (VMs) or list_nodes (nodes).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing containers but does not explicitly state when to use this tool vs alternatives like list_vms for VMs. No when-not 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.
list_container_snapshotsARead-onlyIdempotent
List all snapshots of an LXC container.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the container resides. | |
| vmid | Yes | LXC container numeric ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and openWorldHint=true. The description adds no further behavioral details, but is consistent with annotations. It could mention that the operation has no side effects or requires no special permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one sentence with no wasted words. It is front-loaded with the key action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (read-only list with output schema present), the description is reasonably complete. It could mention prerequisites (e.g., container must exist) but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers both parameters with descriptions (100% coverage). The description does not add any additional meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 'snapshots of an LXC container'. It distinguishes from sibling tools like 'list_vm_snapshots' by specifying 'LXC container'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like create, delete, or rollback container snapshots. It lacks context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_nodesARead-onlyIdempotent
List all nodes in the Proxmox cluster with status, CPU, memory, and uptime.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, openWorldHint. Description adds value by specifying the exact fields returned (status, CPU, memory, uptime), which enhances transparency 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the core action, no redundant information. Every word is necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and an output schema available, the description covers all necessary context: what the tool does and what data it returns. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters with 100% coverage. Description does not need to add parameter info, but it implicitly confirms no arguments. Baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all nodes in the Proxmox cluster with specific attributes (status, CPU, memory, uptime). This distinguishes it from sibling tools that focus on VMs or containers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, but the name and description make it obvious for listing nodes. Implied usage is clear but not formally stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_storageARead-onlyIdempotent
List storage pools with usage info, optionally filtered by node.
| Name | Required | Description | Default |
|---|---|---|---|
| node | No | Optional node name. If omitted, lists all cluster-wide storage. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description adds value by specifying 'usage info' context, which is beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 11 words, front-loaded with the verb, and contains no unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (1 optional param, no required params) and presence of an output schema, the description sufficiently covers what the tool does without missing critical details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the node parameter (100% coverage). The description adds minimal extra meaning beyond stating the filter option.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list), the resource (storage pools), and what is included (usage info). It also mentions optional filtering by node, which distinguishes it from siblings like get_storage_content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (list with optional filter) but does not provide explicit guidance on when to use this tool versus alternatives like get_node_disks or get_storage_content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vmsARead-onlyIdempotent
List all QEMU VMs in the cluster, optionally filtered by node.
| Name | Required | Description | Default |
|---|---|---|---|
| node | No | Optional node name. If omitted, lists VMs across the cluster. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and openWorldHint. The description adds no behavioral details beyond that (e.g., pagination, order, performance impact). Since annotations carry the safety profile, the description should add more context but fails to do so.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the verb and resource. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple operation (list VMs with one optional parameter), good annotations, and existence of an output schema, the description is mostly complete. However, it lacks mention of pagination or limits, which could be relevant for a cluster with many VMs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description covers 100% of the single parameter, and the description says 'optionally filtered by node', which matches the schema. No additional semantics beyond the schema are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all QEMU VMs' with the specific resource (QEMU VMs) and scope (cluster, optionally filtered by node). This distinguishes it from sibling tools like list_containers and get_vm_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for enumeration of VMs but does not explicitly state when to use it over alternatives like get_vm_config or get_vm_status. No guidance on when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vm_snapshotsARead-onlyIdempotent
List all snapshots of a VM.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the VM resides. | |
| vmid | Yes | QEMU VM numeric ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description adds no additional behavioral context. It neither contradicts nor enhances the annotations, providing a baseline adequate score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that is front-loaded with the essential information, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with two parameters and existing output schema, the description is mostly complete. It could mention the return type but is not critical given the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both parameters; the description does not add any extra meaning beyond the schema, resulting in a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list) and the resource (snapshots of a VM), with specific verb and resource. It distinguishes from sibling tools like 'list_container_snapshots' and mutation tools like 'create_vm_snapshot'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when/when-not guidance or alternatives are provided. The usage is implied by the tool name and description, but lacks any clarification of context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reboot_containerA
Reboot an LXC container. Requires PROXMOX_RISK_LEVEL=lifecycle.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the container resides. | |
| vmid | Yes | LXC container numeric ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by specifying the required risk level, but could add more context about the reboot being non-graceful or the impact on the container's state. Annotations already indicate non-read-only and non-destructive, and the description adds the lifecycle requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of two short sentences that immediately state the action and a key prerequisite. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, good annotations, and full schema coverage, the description is almost complete. It could mention that this applies only to LXC containers (not VMs) but that is already clear from the name and purpose. The existence of an output schema means return values are covered elsewhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides clear descriptions for both parameters (node and vmid) with 100% coverage. The description does not add additional parameter information, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Reboot' and the resource 'LXC container', distinguishing it from sibling tools like 'reboot_vm' and other container lifecycle operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an important prerequisite: requires PROXMOX_RISK_LEVEL=lifecycle, guiding when this tool should be used. However, it does not explicitly mention when not to use it or compare to alternatives like shutdown_container + start_container.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reboot_vmA
Reboot a VM via ACPI. Requires PROXMOX_RISK_LEVEL=lifecycle.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the VM resides. | |
| vmid | Yes | QEMU VM numeric ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide safety hints (non-read-only, non-destructive, non-idempotent). The description adds the detail 'via ACPI' indicating a graceful mechanism, but does not elaborate on side effects like temporary downtime or prerequisites like VM running state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences that front-load the core action and critical requirement. No superfluous words, but could be slightly expanded for completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the output schema reduces the need to describe return values, the description omits important context such as whether the VM must be running, that the operation is asynchronous, or any side effects. It is minimally adequate for a simple reboot tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers both parameters with descriptions, achieving 100% coverage. The description adds no new parameter information, so baseline score applies as per guidelines.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (reboot) and resource (VM) with the specific method (via ACPI). It distinguishes from siblings like start_vm, stop_vm, and shutdown_vm by indicating a restart operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a necessary condition (PROXMOX_RISK_LEVEL=lifecycle) but lacks guidance on when to use this tool versus alternatives like shutdown_vm or stop_vm. The usage context is implied but not explicitly contrasted with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_vmA
Resume a suspended VM. Requires PROXMOX_RISK_LEVEL=lifecycle.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the VM resides. | |
| vmid | Yes | QEMU VM numeric ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description states the action (resume) and a prerequisite (env var), but adds no further behavioral detail beyond what annotations imply. Annotations already indicate it's not read-only, not destructive, etc., so the description is adequate but not enhanced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of one clear sentence and a requirement note. Every word adds value with no unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and the clear annotations, the description is fairly complete. It lacks discussion of error states or what happens if the VM is not suspended, but overall it's sufficient for a straightforward resume operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema provides 100% coverage with clear descriptions for 'node' and 'vmid'. The description does not add any additional semantic value beyond the schema, so it meets the baseline but does not improve understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states 'Resume a suspended VM' with a specific verb and resource, clearly distinguishing it from siblings like suspend_vm or start_vm.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a required environment variable for use, but does not provide explicit guidance on when to use this tool versus alternatives. The context clarifies its role among siblings, but the description itself lacks usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_container_snapshotADestructive
Roll back an LXC container to a snapshot. Discards changes since then.
Requires PROXMOX_RISK_LEVEL=all.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the container resides. | |
| vmid | Yes | LXC container numeric ID. | |
| snapname | Yes | Snapshot name to roll back to. Discards all changes since then. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=false. The description adds that it 'Discards changes since then,' which elaborates on the destructive nature, but does not provide additional behavioral details such as whether the snapshot itself is deleted or how state is restored. No contradiction 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a requirement line, all concise and front-loaded. No redundant information; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward rollback operation, the description is reasonably complete: it specifies the action, resource, effect, and a critical prerequisite. The presence of an output schema (not shown) may cover return values. Minor missing context: no mention of what happens to the snapshot after rollback, but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage for all three parameters. The description adds little beyond the schema; the snapname description repeats the discard concept from the main description. Parameter semantics are adequately handled by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Roll back an LXC container to a snapshot') and the resource (LXC container snapshot), and the phrase 'Discards changes since then' reinforces the purpose. It distinguishes from sibling tool 'rollback_vm_snapshot' by specifying LXC container.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'Requires PROXMOX_RISK_LEVEL=all' as a prerequisite, but does not provide explicit guidance on when to use this tool versus alternatives like creating or deleting snapshots. There is no when-not-to-use or mention of other context-specific conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_vm_snapshotADestructive
Roll back a VM to a snapshot. Discards changes made since the snapshot.
Requires PROXMOX_RISK_LEVEL=all.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the VM resides. | |
| vmid | Yes | QEMU VM numeric ID. | |
| snapname | Yes | Snapshot name to roll back to. Discards all changes since then. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, indicating a destructive write operation. The description adds the detail that it discards changes, which is consistent. However, it does not disclose additional behavioral traits such as whether the VM must be stopped, if the operation is reversible, or any side effects beyond discarding changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with only two sentences, front-loading the purpose and effect. Every sentence provides essential information without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema (not shown), but the description does not explain expected output or return values. Given the complexity (destructive operation with 3 parameters), the description could be more complete by mentioning preconditions like VM state or confirmation requirements. However, annotations and schema cover many aspects, so it is minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage for 3 parameters, so the baseline is 3. The description does not add any parameter-specific guidance beyond what is already in the schema (e.g., node, vmid, snapname are fully described in schema). No additional semantics are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Roll back a VM to a snapshot') and the effect ('Discards changes made since the snapshot'). This distinguishes it from sibling tools like create/delete snapshot, and the verb 'roll back' is specific to reverting state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states a prerequisite: 'Requires PROXMOX_RISK_LEVEL=all.' This is a valuable usage guideline. However, it does not provide guidance on when to use this tool versus alternatives like deleting the snapshot or reverting via other means, nor does it mention potential preconditions (e.g., VM state).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shutdown_containerA
Gracefully shutdown an LXC container. Requires PROXMOX_RISK_LEVEL=lifecycle.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the container resides. | |
| vmid | Yes | LXC container numeric ID. | |
| timeout | No | Seconds to wait for graceful shutdown before force-stop. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-readOnly and non-destructive, consistent with a shutdown operation. The description adds that the shutdown is graceful and includes a timeout parameter behavior, though it does not detail side effects or authorization beyond the risk level requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with an essential prerequisite, front-loading the key information. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (though not shown), the description suffices for a simple shutdown operation. It covers the action, resource, and risk requirement, making it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with clear descriptions for all three parameters (node, vmid, timeout). The description does not add meaningfully 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Gracefully shutdown an LXC container,' specifying the action (shutdown) and resource (LXC container). This distinguishes it from siblings like stop_container (likely force-stop) and shutdown_vm (for VMs).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes 'Requires PROXMOX_RISK_LEVEL=lifecycle,' which informs the agent of a prerequisite. While it does not explicitly list alternatives or when-not to use, the sibling context implies it is for graceful shutdown of LXC containers, as opposed to stop_container.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shutdown_vmA
Gracefully shutdown a VM via ACPI. Requires PROXMOX_RISK_LEVEL=lifecycle.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the VM resides. | |
| vmid | Yes | QEMU VM numeric ID. | |
| timeout | No | Seconds to wait for ACPI shutdown before force-stop. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: it specifies the shutdown method (ACPI), the existence of a timeout parameter (from schema), and the required risk level. Annotations already indicate mutability (readOnlyHint=false) and non-destructiveness (destructiveHint=false), which is consistent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence plus a requirement, with no unnecessary words. It effectively communicates the core action and a key precondition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, an output schema, and sibling tools, the description covers the essential purpose and a prerequisite. It could be more complete by mentioning that the VM should be running or that the operation may be asynchronous, but it is sufficient for most use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes all parameters (node, vmid, timeout). The description does not add significant meaning beyond what is in the schema (e.g., it mentions 'via ACPI' but that does not elaborate on parameters). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Gracefully shutdown a VM via ACPI.' It uses a specific verb and resource, and distinguishes it from sibling tools like stop_vm by implying a graceful, ACPI-based shutdown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a prerequisite (PROXMOX_RISK_LEVEL=lifecycle) but does not provide explicit guidance on when to use this tool versus alternatives (e.g., stop_vm for forced shutdown). The context is implied but lacks clear exclusions or when-not scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_containerA
Start an LXC container. Requires PROXMOX_RISK_LEVEL=lifecycle.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the container resides. | |
| vmid | Yes | LXC container numeric ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate mutation and non-destructiveness, but the description adds the risk level requirement, which is additional behavioral context. It does not explain idempotency or state prerequisites, but the added info is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise with two sentences, no filler, and immediately conveys the action and a critical requirement. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lifecycle action, the description is fairly complete, especially with the risk level hint. However, it could mention prerequisites (e.g., container must be stopped) or error conditions to be fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters, so the description does not add new semantic information beyond the schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Start') and resource ('LXC container'), distinguishing it from sibling 'start_vm' for VMs. It is concise and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a usage requirement ('Requires PROXMOX_RISK_LEVEL=lifecycle'), which guides when the tool can be used. However, it lacks explicit guidance on when not to use it (e.g., if container is already running) or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_vmA
Start a VM. Requires PROXMOX_RISK_LEVEL=lifecycle.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the VM resides. | |
| vmid | Yes | QEMU VM numeric ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds that it requires a lifecycle risk level, but provides no further behavioral details such as idempotency or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences, no wasted words, and front-loads the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the schema covers parameters and an output schema exists, the description lacks context about prerequisites (e.g., VM must be powered off), behavior if VM is already running, or potential errors. Given the tool's lifecycle implications, more detail would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions for both parameters. The description adds no additional parameter semantics beyond what is already provided in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Start a VM' using a specific verb and resource, clearly distinguishing it from sibling tools like stop_vm, shutdown_vm, reboot_vm, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the requirement 'PROXMOX_RISK_LEVEL=lifecycle' but does not provide guidance on when to use this tool versus alternatives (e.g., resume_vm or start_container) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_containerA
Force-stop an LXC container. Requires PROXMOX_RISK_LEVEL=lifecycle.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the container resides. | |
| vmid | Yes | LXC container numeric ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is not read-only but not explicitly destructive. The description only adds the risk level requirement, but does not disclose behavioral details such as what happens to running processes, whether it kills forcefully, or if there are side effects. For a mutation tool, more context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action, and contains no filler. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core action and a key prerequisite. While missing output details and error conditions, it is reasonably complete for a straightforward mutating operation. Sibling tools are available for contrast, but the description could briefly mention when to prefer this over 'shutdown_container'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage (node and vmid are well-described). The description adds no additional parameter details, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Force-stop an LXC container', using a specific verb and resource. This distinguishes it from siblings like 'shutdown_container' (graceful stop) and 'stop_vm' (different resource), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the required risk level ('PROXMOX_RISK_LEVEL=lifecycle'), which is a usage prerequisite. However, it does not provide explicit guidance on when to use this tool versus alternatives (e.g., 'shutdown_container' for graceful stops), nor does it note when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_vmB
Force-stop a VM (like pulling the power). Requires PROXMOX_RISK_LEVEL=lifecycle.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the VM resides. | |
| vmid | Yes | QEMU VM numeric ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotation contradiction: destructiveHint=false conflicts with the description describing a forced stop, which is destructive (like pulling power). No other behavioral traits disclosed beyond the risk level.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no unnecessary words. The essential information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values are not needed. However, the annotation contradiction reduces completeness, and no explanation of post-stop state or side effects is provided. Adequate for a simple tool but with a significant issue.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers 100% of parameters with descriptions. The tool description adds no additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Force-stop a VM' which is a specific verb+resource, and distinguishes from siblings like shutdown_vm by using 'force-stop' and the analogy of pulling the power.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions the required environment variable PROXMOX_RISK_LEVEL=lifecycle, but does not explicitly state when to use this tool vs alternatives (e.g., shutdown_vm for graceful stop). The analogy implies emergency use, but no direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suspend_vmA
Suspend a VM (pause execution, keep memory). Requires PROXMOX_RISK_LEVEL=lifecycle.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name where the VM resides. | |
| vmid | Yes | QEMU VM numeric ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it is not read-only and not destructive; the description adds 'keep memory' behavior and the risk level requirement, providing useful context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with an added requirement, both front-loaded and free of unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple suspend operation with an output schema, the description covers purpose and key prerequisite. It could mention that the VM must be running, but overall is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with clear descriptions for both parameters, so the description does not need to add parameter details. It does not, maintaining a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Suspend a VM (pause execution, keep memory)' with a specific verb and resource, and distinguishes from siblings like stop_vm and shutdown_vm by noting that memory is preserved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a prerequisite ('Requires PROXMOX_RISK_LEVEL=lifecycle') but does not explicitly compare to sibling tools like resume_vm or stop_vm, nor does it provide when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct resource type (VM, container, node, storage, cluster) and action, with no overlap. For example, VM operations are separate from container operations, and snapshot operations are distinct from lifecycle operations.
All tools follow a consistent verb_noun pattern using snake_case, e.g., list_vms, get_vm_config, start_container. The naming is predictable and mirrors each other for VMs and containers.
38 tools is on the higher end but justified for a comprehensive Proxmox management server covering VMs, containers, snapshots, cluster, nodes, storage, and tasks. Minor redundancy exists (e.g., separate get and list for VMs and containers) but overall scope is appropriate.
The tool set lacks essential CRUD operations: there is no create VM or container (only clone_vm exists), no delete VM or container, and no update/configure tools. This leaves significant gaps in managing the full lifecycle of resources.
Maintenance
Related MCP Connectors
MCP server for Superserve sandboxes: create, exec, and manage Firecracker microVMs
A MCP server built for developers enabling Git based project management with project and personal…
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Go MCP server for GitLab: 2 dynamic tools reach 1000+ REST/GraphQL actions. Free/CE, no paid tier.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA powerful and flexible Kubernetes MCP server implementation with support for OpenShift.2,052GoApache 2.0
- AlicenseNot gradedqualityAmaintenanceAn open-source MCP server for managing Proxmox environments, including nodes, virtual machines, and containers. It enables users to perform inventory checks, status monitoring, and control operations directly through MCP-compatible tools.242MIT
- AlicenseBqualityCmaintenanceA comprehensive MCP server providing 92 tools for managing Proxmox Virtual Environment, including QEMU VMs and LXC containers.921545MIT
- AlicenseAqualityCmaintenanceProvides tools to manage Proxmox VE clusters via Claude Code, enabling listing nodes, VMs, templates, power actions, and creation of LXC containers and VMs through the Proxmox REST API.1034MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/akmalovaa/proxmox-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server