Proxbase
OCI · GHCR.IO/VIRTBASE/PROXBASE
Create, test and break real Proxmox VE clusters in QEMU/KVM on the local host.
Available components
Last scanned (2 hours ago)
Scores higher than 85% of OCI servers
Category Cloud Infrastructure
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security0
- No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
- Known CVEs could not be checked: this image's dependency list comes from an SBOM its publisher attached, which nothing verifies, so we will not report it as a clean result.Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: this image's dependency list comes from an SBOM its publisher attached. It names packages and versions but not whether each is deprecated, still maintained or linked to its source, so there is nothing we can fairly grade.Unverified
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (Apache-2.0).Pass
- Actively maintained (last published 12 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability79
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 5376 tokens (~145/item across 37 items; 36 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management70
- Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 6 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 38 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.
- 3 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.
- 1 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.
- 30 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.
- 28 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.
- 26 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.
- 23 Oct 26 +1
- Package version: 0.3.0 → 0.4.0 functional
- 22 Oct 26 0
- Stability: 0.20 → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Schema quality: 116 → 145 ▼ functional
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: 100 → unverified ▼ functional
- Package version: 0.2.1 → 0.3.0 functional
- Package version: 0.2.1 → 0.2.2 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed oci/ghcr.io/virtbase/proxbase@0.4.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | oci |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
cluster_create ~581
Create a Proxmox VE cluster (or resume a failed create of the same name). Without config, it creates 1 node with 4 vCPUs, 4G memory, a 32G ZFS root disk and one 32G data disk holding the ZFS pool "tank". Set nodes: 3 for a real cluster, storage: ceph for Ceph (3+ nodes). The create runs in the background on this host and survives this connection; the tool reports progress and returns when the cluster is ready, or with running=true after timeoutSeconds (then call cluster_wait). Cancelling the call cancels the create (re-run to resume). With snapshot="baseline" it saves a live snapshot when ready, which cluster_reset returns to in seconds. templates in config provide VM templates from cloud images and container templates as fixtures. Needs free memory for all nodes; the first create downloads a ~1.5 GB ISO.
| Name | Type | Req | Description |
|---|---|---|---|
| config | string | – | cluster file (YAML, apiVersion proxbase.virtbase.com/v1alpha1, kind Cluster); the other parameters override it |
| cpus | integer | – | vCPUs per node (default 4) |
| dataDisks | string | – | data disks per node: 2x32G, 32G,64G or none |
| golden | null|boolean | – | clone nodes from a cached installed base image instead of installing each (default true; the first create builds the image) |
| memory | string | – | memory per node, e.g. 4G (default 4G, 6G with Ceph) |
| name | string | yes | cluster name: lowercase letters, digits and dashes, starting with a letter, at most 15 characters |
| nodes | integer | – | number of nodes (default 1) |
| owner | string | – | who owns the cluster, e.g. the agent and its task (default: the client's name) |
| pveVersion | string | – | Proxmox VE ISO version, e.g. 9.2 or 9.2-1 (default: newest supported) |
| rootDisk | string | – | root disk size, e.g. 32G |
| snapshot | string | – | save a live snapshot with this name when the cluster is ready, e.g. baseline; cluster_reset returns to it in seconds |
| storage | string | – | storage on the data disks: zfs, ceph or none |
| timeoutSeconds | integer | – | return after this many seconds while the create keeps running (default 600, max 3600; at most 50 for clients that cancel tool calls after a minute) |
| ttlMinutes | integer | – | lifetime: cluster_gc deletes the cluster this many minutes after the create (default: no expiry) |
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | yes | – |
| command | string | yes | the proxbase command the job runs, e.g. create or node add |
| error | string | – | – |
| hint | string | – | – |
| log | string | yes | progress log (JSON lines); node install logs are in the cluster's logs directory |
| running | boolean | yes | the job is still running; call cluster_wait |
| status | null|object | – | – |
| steps | null|array | yes | latest progress messages |
No examples provided.
cluster_destroy ~85
Delete a cluster: kill its VMs and remove all its disks, snapshots and credentials. Also stops a create running in the background. Set confirm to the cluster name.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | yes | cluster name |
| confirm | string | – | must equal the cluster name (destroying deletes all disks and cannot be undone); without it, clients that support elicitation ask the user |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | – |
No examples provided.
cluster_diagnose ~166
Collect what explains a cluster problem, in one read-only call: the cluster status and, for every node, the quorum seen by it, failed systemd units, PVE tasks that failed, error log lines of corosync, pmxcfs (pve-cluster), pveproxy, pvedaemon, pvestatd, HA and Ceph from the last sinceMinutes, the clock offset, and ceph health detail. For nodes that are not running it returns the end of their serial console. Also lists the log files on this host.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| sinceMinutes | integer | – | report errors and failed tasks of the last this many minutes (default 30, max 1440) |
| Name | Type | Req | Description |
|---|---|---|---|
| healthy | boolean | yes | – |
| logs | null|array | yes | log files on this host: QEMU, install and serial console of each node, the switch; the result links them as resources |
| nodes | null|array | yes | – |
| problem | string | – | – |
| status | null|object | yes | – |
No examples provided.
cluster_env ~130
Return what API and SSH clients need: API endpoint, API token (proxbase@pve!api, full privileges), the cluster CA certificate (PEM and path), SSH user, key path and ports per node. Root password only if includeRootPassword is set.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| includeRootPassword | boolean | – | also return the root password of the nodes (only if needed, e.g. for root@pam API logins) |
| token | string | – | return this scoped token (token_create) instead of the main one |
| Name | Type | Req | Description |
|---|---|---|---|
| caCertPem | string | yes | the cluster CA; API certificates are signed by it |
| env | null|object | yes | – |
No examples provided.
cluster_gc ~62
Delete every expired cluster on this host (see ttlMinutes of cluster_create and cluster_ttl), with its disks and snapshots; clusters with a running job are left. dryRun only lists them.
| Name | Type | Req | Description |
|---|---|---|---|
| dryRun | boolean | – | only list the expired clusters |
| Name | Type | Req | Description |
|---|---|---|---|
| deleted | null|array | yes | expired clusters deleted (with dryRun: to be deleted) |
| skipped | null|array | – | expired clusters left, with the reason |
No examples provided.
cluster_list ~22
List all proxbase clusters on this host with phase and running nodes.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| clusters | null|array | yes | – |
No examples provided.
cluster_plan ~456
Work out what cluster_create would set up, without creating anything: nodes with IPs and ports (a new cluster takes the first free port range), the memory and disk of all nodes, whether the ISO is cached, the host's free memory and disk, warnings, and the resolved cluster file. Takes the parameters of cluster_create.
| Name | Type | Req | Description |
|---|---|---|---|
| config | string | – | cluster file (YAML, apiVersion proxbase.virtbase.com/v1alpha1, kind Cluster); the other parameters override it |
| cpus | integer | – | vCPUs per node (default 4) |
| dataDisks | string | – | data disks per node: 2x32G, 32G,64G or none |
| golden | null|boolean | – | clone nodes from a cached installed base image instead of installing each (default true; the first create builds the image) |
| memory | string | – | memory per node, e.g. 4G (default 4G, 6G with Ceph) |
| name | string | yes | cluster name: lowercase letters, digits and dashes, starting with a letter, at most 15 characters |
| nodes | integer | – | number of nodes (default 1) |
| owner | string | – | who owns the cluster, e.g. the agent and its task (default: the client's name) |
| pveVersion | string | – | Proxmox VE ISO version, e.g. 9.2 or 9.2-1 (default: newest supported) |
| rootDisk | string | – | root disk size, e.g. 32G |
| snapshot | string | – | save a live snapshot with this name when the cluster is ready, e.g. baseline; cluster_reset returns to it in seconds |
| storage | string | – | storage on the data disks: zfs, ceph or none |
| timeoutSeconds | integer | – | return after this many seconds while the create keeps running (default 600, max 3600; at most 50 for clients that cancel tool calls after a minute) |
| ttlMinutes | integer | – | lifetime: cluster_gc deletes the cluster this many minutes after the create (default: no expiry) |
| Name | Type | Req | Description |
|---|---|---|---|
| plan | null|object | yes | – |
| resolved | string | yes | the cluster file with all defaults and the port base, as cluster_create would use it |
No examples provided.
cluster_reset ~112
Return a cluster to a snapshot in one call (default "baseline"): power the nodes off, restore the snapshot and start the cluster. A live snapshot resumes with its memory in seconds; a disk snapshot boots the nodes. Changes since the snapshot are lost. cluster_create with snapshot="baseline" saves one when the cluster is ready; snapshot_save saves one at any time.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| snapshot | string | – | snapshot to return to (default baseline) |
| Name | Type | Req | Description |
|---|---|---|---|
| duration | string | yes | – |
| healthy | boolean | yes | – |
| live | boolean | yes | the snapshot holds the memory, so the cluster resumed instead of booting |
| problem | string | – | – |
| snapshot | string | yes | – |
| status | null|object | yes | – |
No examples provided.
cluster_start ~85
Boot a stopped cluster and wait for quorum, the API and storage. Also boots nodes killed by fault_apply kill. If the call limit (50 s for clients that cancel tool calls after a minute) passes first, it returns healthy=false with what is pending while the nodes keep booting.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster, else "default" |
| Name | Type | Req | Description |
|---|---|---|---|
| healthy | boolean | yes | – |
| job | null|object | – | the background job (create, node add or remove) and its latest progress |
| problem | string | – | – |
| status | null|object | yes | – |
No examples provided.
cluster_status ~86
Show a cluster: phase, quorum, nodes (running/online, IP, web UI URL, SSH port), Ceph health, active faults, and the progress of a create running in the background. healthy=true means ready, quorate, all nodes online and Ceph HEALTH_OK.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster, else "default" |
| Name | Type | Req | Description |
|---|---|---|---|
| healthy | boolean | yes | – |
| job | null|object | – | the background job (create, node add or remove) and its latest progress |
| problem | string | – | – |
| status | null|object | yes | – |
No examples provided.
cluster_stop ~97
Shut all nodes of a cluster down (cleanly, then hard after the timeout). Disks are kept; cluster_start boots it again. Clears all faults.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| timeoutSeconds | integer | – | time for a clean shutdown before powering off hard (default 180; nodes shut their guests down first; at most 30 for clients that cancel tool calls after a minute) |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | – |
No examples provided.
cluster_ttl ~84
Set how long a cluster may live: it expires minutes from now (0: never). cluster_gc deletes expired clusters; set a lifetime on clusters you create so that forgotten ones are cleaned up.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| minutes | integer | yes | the cluster expires this many minutes from now; 0: never |
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | yes | – |
| expiresAt | string | – | RFC 3339; empty: never |
No examples provided.
cluster_wait ~103
Wait for the background job of a cluster (after cluster_create, node_add or node_remove returned running=true), reporting its progress. Returns running=false with the status when it finished, or running=true again after timeoutSeconds.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | yes | cluster name |
| timeoutSeconds | integer | – | return after this many seconds if the job is still running (default 600, max 3600; at most 50 for clients that cancel tool calls after a minute) |
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | yes | – |
| command | string | yes | the proxbase command the job runs, e.g. create or node add |
| error | string | – | – |
| hint | string | – | – |
| log | string | yes | progress log (JSON lines); node install logs are in the cluster's logs directory |
| running | boolean | yes | the job is still running; call cluster_wait |
| status | null|object | – | – |
| steps | null|array | yes | latest progress messages |
No examples provided.
config_validate ~65
Check a cluster file (YAML) without creating anything; returns errors, warnings and the file with all defaults. The schema is the resource https://proxbase.virtbase.com/schema/v1alpha1/cluster.json.
| Name | Type | Req | Description |
|---|---|---|---|
| config | string | yes | cluster file (YAML) |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | null|array | – | – |
| resolved | string | – | the cluster file with all defaults, as create would use it |
| valid | boolean | yes | – |
| warnings | null|array | – | – |
No examples provided.
fault_apply ~227
Inject a failure into a running cluster to test HA, fencing, Ceph or applications: kill, freeze, thaw, link-down, link-up, partition or degrade. fault_clear undoes them.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| delayMs | integer | – | degrade: delay per frame and direction in milliseconds |
| groups | null|array | – | partition: lists of node names; unlisted nodes form one more group |
| kind | string | yes | one of: kill (power the node off hard; cluster_start boots it), freeze (stop its vCPUs), thaw, link-down, link-up (the node's cable on a network), partition (split a network into groups), degrade (la… |
| lossPercent | number | – | degrade: percentage of frames dropped per direction |
| network | string | – | network for link-*, partition and degrade (default: corosync link0) |
| node | string | – | node for kill, freeze, thaw, link-down, link-up |
| Name | Type | Req | Description |
|---|---|---|---|
| cleared | null|array | – | – |
| faults | null|array | yes | active faults |
No examples provided.
fault_clear ~52
Undo all injected faults (thaw, plug cables in, heal partitions and degradations). Killed nodes need cluster_start.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster, else "default" |
| Name | Type | Req | Description |
|---|---|---|---|
| cleared | null|array | – | – |
| faults | null|array | yes | active faults |
No examples provided.
file_get ~126
Read a file of a node: text as content, other data as contentBase64; at most maxBytes (default 256 KiB, max 4 MiB), truncated=true if the file is longer.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| maxBytes | integer | – | read at most this many bytes (default 256 KiB, max 4 MiB) |
| node | string | – | node name, e.g. pve1 (default: the first node) |
| path | string | yes | absolute path on the node |
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | – | the data, if it is UTF-8 text |
| contentBase64 | string | – | the data, base64-encoded, if it is not text |
| node | string | yes | – |
| path | string | yes | – |
| sha256 | string | yes | of the returned data |
| size | integer | yes | size of the whole file |
| truncated | boolean | – | only the first maxBytes were read |
No examples provided.
file_put ~185
Write a file on a node as root, e.g. a config, script or test fixture: text in content, or binary data in contentBase64 (at most 4 MiB). The file is replaced atomically; missing directories are created. Files in /etc/pve (the cluster file system, shared by all nodes) get its fixed permissions.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| content | string | – | file content as text |
| contentBase64 | string | – | file content, base64-encoded; instead of content |
| mode | string | – | permissions in octal, e.g. 0755 (default 0644) |
| node | string | – | node name, e.g. pve1 (default: the first node) |
| path | string | yes | absolute path on the node |
| Name | Type | Req | Description |
|---|---|---|---|
| bytes | integer | yes | – |
| node | string | yes | – |
| path | string | yes | – |
| sha256 | string | yes | – |
No examples provided.
host_check ~66
Check whether this host can run clusters: KVM, nested virtualization, QEMU, free memory, KSM, disk space, free ports and path lengths (as proxbase doctor).
| Name | Type | Req | Description |
|---|---|---|---|
| portBase | integer | – | access.portBase whose first ports to check (default 18000) |
| Name | Type | Req | Description |
|---|---|---|---|
| checks | null|array | yes | – |
| ok | boolean | yes | no check failed; warnings do not block clusters |
No examples provided.
image_list ~25
List the cached base images (golden images) with the clusters that use them.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| images | null|array | yes | – |
No examples provided.
image_prune ~48
Delete the base images no cluster uses (dryRun only lists them). The next create with a deleted image builds it again.
| Name | Type | Req | Description |
|---|---|---|---|
| dryRun | boolean | – | only report what would be deleted |
| Name | Type | Req | Description |
|---|---|---|---|
| deleted | null|array | yes | keys of deleted (or, with dryRun, unused) images |
| kept | null|array | – | images in use, with their clusters |
No examples provided.
node_add ~153
Add nodes to a ready cluster: install (or clone) them, join them and set up ZFS or Ceph as configured. Runs in the background like cluster_create; returns when done or with running=true (then call cluster_wait). Cancelling the call stops it; cluster_create with the cluster's name finishes an interrupted add.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| count | integer | – | nodes to add (default 1); numbers of removed nodes are reused first |
| timeoutSeconds | integer | – | return after this many seconds while the job keeps running (default 600, max 3600; at most 50 for clients that cancel tool calls after a minute) |
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | yes | – |
| command | string | yes | the proxbase command the job runs, e.g. create or node add |
| error | string | – | – |
| hint | string | – | – |
| log | string | yes | progress log (JSON lines); node install logs are in the cluster's logs directory |
| running | boolean | yes | the job is still running; call cluster_wait |
| status | null|object | – | – |
| steps | null|array | yes | latest progress messages |
No examples provided.
node_exec ~159
Run a shell command as root on a running node over SSH and return stdout, stderr and the exit code. Use it for pvesh, qm, pct, pvecm, ceph and the like. Non-interactive; output is capped at 64 KiB per stream.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| command | string | yes | shell command line, run as root through the login shell |
| node | string | – | node name, e.g. pve1 (default: the first node) |
| timeoutSeconds | integer | – | kill the command after this many seconds (default 120, max 3600; at most 50 for clients that cancel tool calls after a minute) |
| Name | Type | Req | Description |
|---|---|---|---|
| exitCode | integer | yes | exit status; -1 if the command was killed |
| stderr | string | yes | – |
| stdout | string | yes | – |
| truncated | boolean | – | stdout or stderr was cut to the last 64 KiB |
No examples provided.
node_remove ~199
Remove a node from a cluster: drain and destroy its Ceph daemons, take it out of the cluster and delete its VM and disks. Refuses with guests on the node or Ceph pools that would be left degraded unless force is set. Runs in the background like cluster_create. Set confirm to the node name.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| confirm | string | – | must equal the node name (removing deletes the node's disks); without it, clients that support elicitation ask the user |
| force | boolean | – | remove even with guests on the node or Ceph pools left degraded |
| node | string | yes | node to remove, e.g. pve3 |
| timeoutSeconds | integer | – | return after this many seconds while the job keeps running (default 600, max 3600; at most 50 for clients that cancel tool calls after a minute) |
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | yes | – |
| command | string | yes | the proxbase command the job runs, e.g. create or node add |
| error | string | – | – |
| hint | string | – | – |
| log | string | yes | progress log (JSON lines); node install logs are in the cluster's logs directory |
| running | boolean | yes | the job is still running; call cluster_wait |
| status | null|object | – | – |
| steps | null|array | yes | latest progress messages |
No examples provided.
pve_call ~302
Change something through the Proxmox VE API of a cluster with its API token: POST, PUT or DELETE a path with params, e.g. POST /nodes/pve1/qemu {"vmid": 100, "memory": 2048} or POST /nodes/pve1/qemu/100/status/start. If the call starts a task (returns a UPID), waits for it and returns its exit status and log; a failed task is an error.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| method | string | yes | POST (create or run), PUT (change) or DELETE |
| node | string | – | node whose API answers (default: the first running node); /nodes/<name>/... paths reach every node through it |
| params | object | – | parameters, e.g. {"vmid": 100, "memory": 2048, "net0": "virtio,bridge=vmbr0"}; booleans become 1 or 0, arrays repeat the parameter |
| path | string | yes | API path under /api2/json, e.g. /nodes/pve1/qemu or /nodes/pve1/qemu/100/status/start |
| timeoutSeconds | integer | – | wait this long for a task the call starts (default 120, max 3600; at most 50 for clients that cancel tool calls after a minute) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | the data of the API response |
| task | null|object | – | the task the call started |
No examples provided.
pve_get ~204
Read from the Proxmox VE API of a cluster with its API token (proxbase@pve!api) and return the response data as JSON. Paths are those of pvesh and the API viewer, e.g. /cluster/resources, /cluster/status, /nodes/pve1/qemu, /nodes/pve1/storage, /nodes/pve1/tasks (recent tasks) or /nodes/pve1/tasks/<upid>/log.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| node | string | – | node whose API answers (default: the first running node); /nodes/<name>/... paths reach every node through it |
| params | object | – | query parameters, e.g. {"type": "vm"} |
| path | string | yes | API path under /api2/json, e.g. /cluster/resources, /nodes/pve1/qemu or /nodes/pve1/tasks/<upid>/log |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | the data of the API response |
| task | null|object | – | the task the call started |
No examples provided.
snapshot_delete ~39
Delete a snapshot of a cluster.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| name | string | yes | snapshot name |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | – |
No examples provided.
snapshot_list ~34
List the snapshots of a cluster.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster, else "default" |
| Name | Type | Req | Description |
|---|---|---|---|
| snapshots | null|array | yes | – |
No examples provided.
snapshot_restore ~76
Reset all disks of a stopped cluster to a snapshot (call cluster_stop first). Changes since the snapshot are lost. After a disk snapshot call cluster_start; a live snapshot starts the cluster in its saved state by itself.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| name | string | yes | snapshot name |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | – |
No examples provided.
snapshot_save ~87
Snapshot all disks of a stopped cluster (call cluster_stop first), or with live=true the running cluster including its memory. Restoring is much faster than creating again.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| live | boolean | – | snapshot the running cluster with its memory; restoring it resumes the cluster in seconds |
| name | string | yes | snapshot name |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | – |
No examples provided.
task_list ~218
List the Proxmox VE tasks of a cluster, newest first: VM and container operations, migrations, backups, storage and Ceph jobs. Reads every node, or one. Filter by errorsOnly, running, type (e.g. qmstart, qmigrate, vzdump), vmid and sinceMinutes. task_log shows a task's log, task_wait waits for one to end.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| errorsOnly | boolean | – | only tasks that failed |
| limit | integer | – | most tasks to return (default 20, max 200) |
| node | string | – | only tasks of this node (default: every node) |
| running | boolean | – | only tasks that are still running |
| sinceMinutes | integer | – | only tasks started in the last this many minutes |
| type | string | – | only tasks of this type, e.g. qmstart, qmigrate, vzdump |
| vmid | integer | – | only tasks of this guest |
| Name | Type | Req | Description |
|---|---|---|---|
| tasks | null|array | yes | – |
| unavailable | null|array | – | nodes whose tasks could not be read, with the reason |
No examples provided.
task_log ~121
Return the status and the end of the log of a Proxmox VE task, by its UPID (from task_list, pve_call or an error).
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| lines | integer | – | last lines to return (default 50, max 2000) |
| upid | string | yes | task ID, e.g. UPID:pve1:000A12B3:0012C4D5:65000000:qmstart:100:root@pam: |
| Name | Type | Req | Description |
|---|---|---|---|
| exitStatus | string | – | OK, WARNINGS: n, or the error |
| log | null|array | yes | – |
| node | string | yes | – |
| status | string | yes | running or stopped |
| totalLines | integer | yes | lines the log has; log holds the last of them |
| upid | string | yes | – |
No examples provided.
task_wait ~118
Wait for a Proxmox VE task (UPID) to end and return its exit status and the end of its log; a failed task is an error. Use it for tasks that pve_call or task_list reported as running.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| timeoutSeconds | integer | – | wait at most this long (default 120, max 3600; at most 50 for clients that cancel tool calls after a minute) |
| upid | string | yes | task ID |
| Name | Type | Req | Description |
|---|---|---|---|
| exitStatus | string | – | OK or WARNINGS: n |
| log | null|array | – | last lines of the task log |
| node | string | yes | – |
| status | string | yes | running or stopped; poll a running task with pve_get /nodes/<node>/tasks/<upid>/status |
| upid | string | yes | – |
No examples provided.
token_create ~230
Create an API token that may only do what a role allows on a path, to test code with least privilege or check that an operation is refused: e.g. role PVEAuditor on /, PVEVMAdmin on /vms/100, PVEDatastoreUser on /storage/tank. Replaces a token of the same name. cluster_env with token returns the endpoint and CA with it.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| name | string | yes | token name: lowercase letters, digits and dashes; the token is proxbase@pve!name |
| path | string | – | ACL path the role applies to (default /), e.g. /vms/100, /storage/tank, /pool/ci |
| propagate | null|boolean | – | the role also applies below path (default true) |
| role | string | yes | a role of the cluster, e.g. PVEAuditor, PVEVMUser, PVEVMAdmin, PVEDatastoreUser, PVEPoolAdmin |
| Name | Type | Req | Description |
|---|---|---|---|
| apiToken | string | – | the value for Authorization: PVEAPIToken=<apiToken> headers (tokenId=tokenSecret) |
| name | string | yes | – |
| path | string | – | – |
| propagate | boolean | yes | the role also applies below path |
| role | string | – | – |
| tokenId | string | yes | proxbase@pve!name |
| tokenSecret | string | – | only returned when the token is created |
No examples provided.
token_delete ~55
Delete a scoped API token and its grant. The main token proxbase@pve!api cannot be deleted.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster |
| name | string | yes | token name |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | – |
No examples provided.
token_list ~44
List the scoped API tokens of a cluster with their role and path (without secrets).
| Name | Type | Req | Description |
|---|---|---|---|
| cluster | string | – | cluster name; default: the only cluster, else "default" |
| Name | Type | Req | Description |
|---|---|---|---|
| tokens | null|array | yes | – |
No examples provided.
How do I install the Proxbase MCP server?
Proxbase runs locally as a container image, launched with docker run --rm -i ghcr.io/virtbase/proxbase:0.4.0. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.
oci · ghcr.io/virtbase/proxbase
claude mcp add virtbase-proxbase -- docker run --rm -i ghcr.io/virtbase/proxbase:0.4.0
What is the Proxbase MCP server?
Proxbase is an MCP server listed in the public MCP registry as io.github.virtbase/proxbase. Create, test and break real Proxmox VE clusters in QEMU/KVM on the local host. This page covers its container image (ghcr.io/virtbase/proxbase).
Is the Proxbase MCP server safe to use?
Proxbase scores 52 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Proxbase MCP server expose?
Proxbase exposes 36 tools: cluster_create, cluster_destroy, cluster_diagnose, cluster_env, cluster_gc, and 31 more. Their descriptions and schemas cost roughly 4,902 tokens of context every time the server is loaded.
Is the Proxbase MCP server still maintained?
Proxbase is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Proxbase MCP server under?
Proxbase declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.