@false00/pi-proxmox2.0.0
Production-focused Proxmox VE automation tools for the Pi coding agent — VMs, LXC, storage, cluster, firewall, backup, HA, replication, and access control via the REST API
Untested on omp
This is a pi package. No one has reported whether it works on omp yet. If you try it, add your result below.
Reports 0
No reports yet.
Readme
@false00/pi-proxmox
Production-focused Proxmox VE automation for the Pi coding agent.
@false00/pi-proxmox exposes 141 Pi tools for managing Proxmox clusters: VMs, LXC containers, storage, cluster state, firewall rules, backups, HA, replication, access control, task tracking, and universal raw API access through the Proxmox REST API.
| Resource | Link |
|---|---|
| npm | @false00/pi-proxmox |
| GitHub | github.com/false00/pi-proxmox |
| License | MIT |
| Changelog | CHANGELOG.md |
| Security policy | SECURITY.md |
| Compatibility notes | docs/COMPATIBILITY.md |
| Examples | docs/EXAMPLES.md |
| Permissions guide | docs/PERMISSIONS.md |
| Troubleshooting | docs/TROUBLESHOOTING.md |
| Contributing guide | CONTRIBUTING.md |
Why this package
This package is designed for people who want Pi to operate real Proxmox infrastructure without hand-writing API calls.
What makes it useful:
- Broad coverage — 141 tools spanning VM, LXC, storage, cluster, firewall, backup, HA, replication, task workflows, and universal raw API access
- Consistent wrapper strategy — dedicated tools for common workflows, universal raw tools for edge cases, with parameters that intentionally stay close to the Proxmox API where practical
- Agent-friendly responses — structured JSON output for read/list/status tools, plus progress streaming for long-running operations
- Operational safety — destructive actions are explicit, task-based operations return UPIDs, and tool failures surface as real Pi tool errors
- Live-tested behavior — the repo includes integration tests against a real Proxmox host, including VM/LXC lifecycle tests, package checks, raw API coverage tests, and runtime-behavior tests
- Pi-native packaging — installable as a Pi package through npm and loadable directly via
pi installorpi -e
What you get
Tool coverage by area:
| Area | Tool count |
|---|---|
| Virtual machines | 23 |
| VM guest agent | 13 |
| LXC containers | 20 |
| Nodes | 18 |
| Storage + pools | 11 |
| Cluster | 9 |
| Backup | 3 |
| Firewall | 11 |
| Access control | 16 |
| High availability | 7 |
| Replication | 5 |
| Tasks | 3 |
| Universal raw API coverage | 2 |
| Total | 141 |
Official API coverage audit
Against the official Proxmox VE API viewer at https://pve.proxmox.com/pve-docs/api-viewer/, the API surface audited on 2026-10-21 exposed:
- 449 routes
- 680 route/method combinations
- top-level namespaces:
access,cluster,nodes,pools,storage, andversion - standard REST methods:
GET,POST,PUT, andDELETE
This package covers the common day-to-day workflows with dedicated proxmox_* tools and covers the rest of the official API surface with two universal escape hatches:
proxmox_api_call— generic GET/POST/PUT/DELETE access to any Proxmox API path under/api2/jsonproxmox_api_upload_file— generic multipart upload access for upload-style endpoints
Design philosophy
This package is intentionally a thin-but-usable Proxmox wrapper for Pi.
That means:
- dedicated tools are added for common operational workflows
- raw universal tools exist so official API reach does not depend on hundreds of niche one-off wrappers
- parameter names and many flag conventions stay close to upstream Proxmox behavior when practical
- the package prefers predictable behavior and maintainability over hiding every Proxmox detail behind a custom abstraction layer
Stability guarantees
This repository aims to provide a stable automation surface for Pi users.
Current guarantees:
- published tool names are treated as stable once released; a tool is removed or renamed only in a major release, with the reason in the CHANGELOG (for example,
proxmox_lxc_resetwas removed because it called an endpoint Proxmox does not have) - destructive operations are explicit in tool naming and documentation
- dedicated tools stay close to upstream Proxmox semantics where practical
- universal raw tools are the compatibility layer for long-tail official endpoints
proxmox_node_executeprefers officialargscommand objects and still accepts legacybodyas a compatibility alias
Install
Install into Pi as a package:
pi install npm:@false00/pi-proxmox
Use it for a single run without changing your settings:
pi -e npm:@false00/pi-proxmox
For local development from this repository:
pi -e .
VS Code Copilot through MCP
This repository also includes a stdio MCP bridge that exposes the same 141 proxmox_* tools to VS Code Copilot and other MCP clients. It reuses the existing Pi extension entrypoint and the same local configuration at ~/.config/pi-proxmox/.env; do not put tokens or passwords in mcp.json.
For a local checkout, configure the MCP client with an absolute path to the bridge:
{
"servers": {
"pi-proxmox": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/pi-proxmox/dist/mcp-server.js"]
}
}
}
Then start or trust the MCP server in the client. The bridge preserves the existing tool names, TypeBox-derived JSON schemas, Proxmox REST client, ticket-auth fallback for proxmox_node_execute, and structured error behavior.
Quick start
After installing, ask Pi to operate your Proxmox cluster in plain English:
List all VMs on pve1
Create a Debian container with 2GB RAM on pve1
Show cluster status
Resize disk scsi0 on VM 101 by +20G
Check recent tasks on pve1
Pi will call tools like proxmox_vm_list, proxmox_lxc_create, proxmox_cluster_status, and proxmox_task_list behind the scenes.
Top tasks and example prompts
Common things users ask Pi to do with this package:
List all VMs on pve1
Show running containers on pve1
Create a Debian LXC with 2 GB RAM on pve1
Clone VM 900 to a new VM 101 named web-01
Take a snapshot of VM 101 named pre-update
Roll back VM 101 to snapshot pre-update
Upload an ISO to local storage on pve1
Show failed tasks on pve1
Check cluster quorum and node health
Run hostname inside VM 118 through the guest agent
Choosing dedicated tools vs raw tools
Use the package in this order:
- Dedicated
proxmox_*tools first for common workflows like VM lifecycle, LXC lifecycle, storage, firewall, HA, replication, and backups - Use
proxmox_api_callwhen the official API supports something that does not yet have a dedicated tool - Use
proxmox_api_upload_filefor multipart upload endpoints such as storage uploads
This keeps everyday usage ergonomic while still preserving full official API reach.
Operational docs
For day-to-day use and troubleshooting, see:
Trust, safety, and operating model
This is a full-access infrastructure package. Like any Pi extension, it can perform real changes in your environment if Pi is allowed to call its tools. The package does not restrict itself: what it can actually do is bounded by the Proxmox permissions you grant its credentials, so use the least-privilege setup below.
Important expectations:
- The package does not shell into LXC containers; Proxmox does not expose a comparable API for that
- VM in-guest command execution is only available through the QEMU Guest Agent tools
- Destructive operations such as delete, stop, reboot, rollback, firewall changes, and ACL updates are exposed as explicit tools
- Long-running operations return Proxmox task identifiers or agent PIDs so Pi can continue tracking them
- Runtime failures are thrown back to Pi as proper tool errors, not fake success payloads
- In the verified test environment,
/nodes/{node}/executerequired password/ticket fallback even though normal token-based API calls succeeded; the endpoint is root-only in the Proxmox API, so the recommended least-privilege setup leaves that fallback unset andproxmox_node_executefails closed /nodes/{node}/executeis a real Proxmox endpoint for batching node-relative API requests; it does not provide arbitrary shell execution on the host
If you are evaluating the package for production use, review:
- SECURITY.md
- AGENTS.md
- CHANGELOG.md
- docs/COMPATIBILITY.md
- tests/ for behavioral coverage
- docs/ for the bundled Proxmox API reference material used by the project
Configuration
Requirements
- Node.js 22.19+
- A Pi runtime with extension support
- A reachable Proxmox VE cluster over HTTPS
Recommended setup: least privilege
Give the package a dedicated non-root user and an API token with privilege separation enabled, and grant roles on the narrowest path that works. Run these as an administrator on any cluster node:
# 1. Dedicated non-root user (no password is set; the API token is its credential)
pveum user add pi-proxmox@pve --comment "pi-proxmox automation"
# 2. API token with privilege separation enabled (the Proxmox default, set explicitly)
pveum user token add pi-proxmox@pve automation --privsep 1 --comment "pi-proxmox"
# 3. Resource pool holding only the guests and storage Pi may use (use your own IDs)
pveum pool add pi-proxmox --comment "Managed by pi-proxmox"
pveum pool modify pi-proxmox --vms 101,102 --storage local-lvm
# 4. Start read-only: grant PVEAuditor on the pool to the user AND the token
pveum acl modify /pool/pi-proxmox --roles PVEAuditor --users pi-proxmox@pve
pveum acl modify /pool/pi-proxmox --roles PVEAuditor --tokens 'pi-proxmox@pve!automation'
# 5. Check what the token can actually do
pveum user token permissions pi-proxmox@pve automation
With privilege separation, the token's effective permissions are the intersection of the user's and the token's ACLs, so every grant must go to both. A grant on only one of them gives the token nothing on that path, which usually shows up as empty VM or container lists rather than an error.
pveum user token add prints the token secret once; store it as PROXMOX_TOKEN_SECRET. In the web UI, the same objects live under Datacenter → Permissions; keep Privilege Separation checked when you add the token.
Do not use a root@pam token or disable privilege separation to make tools work; grant the missing privilege on the narrowest path instead.
Permission tiers
Add privileges only when a workflow needs them. Grant each role to both the user and the token.
| Tier | Grant | Enables |
|---|---|---|
| Read-only (start here) | built-in PVEAuditor on /pool/pi-proxmox |
listing and inspecting the pool's guests and storage |
| Guest operator | custom role with VM.Audit, VM.PowerMgmt, VM.Snapshot, VM.Snapshot.Rollback on /pool/pi-proxmox |
start, stop, shutdown, reboot, suspend, resume, snapshots, and rollback |
| Provisioning and infrastructure | specific privileges from docs/PERMISSIONS.md, or broad roles such as PVEVMAdmin, PVEAdmin, or Administrator |
creating and deleting guests; node, storage, cluster, firewall, HA, and backup-job changes |
| Access control | Permissions.Modify on the paths whose ACLs it changes; User.Modify, Realm.AllocateUser, Group.Allocate, or Sys.Modify under /access |
user, group, role, ACL, and token tools |
Guest operator role:
pveum role add PiProxmoxOperator --privs "VM.Audit VM.PowerMgmt VM.Snapshot VM.Snapshot.Rollback"
pveum acl modify /pool/pi-proxmox --roles PiProxmoxOperator --users pi-proxmox@pve
pveum acl modify /pool/pi-proxmox --roles PiProxmoxOperator --tokens 'pi-proxmox@pve!automation'
Reserve broad or admin roles, and the access-control privileges (which let a token change permissions, potentially its own), for people who truly need them, ideally on a separate token. docs/PERMISSIONS.md maps every tool to the privilege and path Proxmox checks.
Connection settings
Create ~/.config/pi-proxmox/.env:
# --- Connection ---
PROXMOX_HOST=192.168.1.100
PROXMOX_PORT=8006
PROXMOX_VERIFY_SSL=false
# --- API token: dedicated non-root user, privilege separation enabled ---
PROXMOX_TOKEN_ID=pi-proxmox@pve!automation
PROXMOX_TOKEN_SECRET=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# --- Timeouts ---
PROXMOX_TIMEOUT_MS=30000
PROXMOX_TOOL_TIMEOUT_MS=30000
Values in ~/.config/pi-proxmox/.env take precedence over environment variables.
Password fallback (optional, discouraged)
PROXMOX_USERNAME and PROXMOX_PASSWORD are not part of the recommended setup. Leave them unset.
proxmox_node_executecalls/nodes/{node}/execute, which Proxmox restricts toroot@pam(the API viewer lists it as Root only). It rejects API tokens, so with the fallback unset the tool fails closed. That is the recommended behavior; the dedicated tools andproxmox_api_callcan make the same node API requests one at a time.- When the fallback is set, the package retries
/nodes/{node}/executewith a password ticket. That only works withroot@pam, the node's Linux root password.PROXMOX_USERNAMEdefaults toroot@pamwhen unset, so settingPROXMOX_PASSWORDalone means root credentials. - If no API token is configured, the fallback credentials are used for every request.
If you deliberately need proxmox_node_execute, keep root credentials out of your everyday configuration and isolate them in a separate, deliberately chosen one, such as a separate OS account whose ~/.config/pi-proxmox/.env is used only for that work:
# WARNING: root@pam credentials. Uncomment only in an isolated configuration you chose deliberately;
# they are used to retry the root-only /nodes/{node}/execute endpoint.
# PROXMOX_USERNAME=root@pam
# PROXMOX_PASSWORD=...
See docs/PERMISSIONS.md for the details and the other root-only operations.
Token format
PROXMOX_TOKEN_ID uses the format:
USER@REALM!TOKENNAME
Examples:
pi-proxmox@pve!automationjohn@pve!ops-bot
Store the .env file with restricted permissions when possible:
chmod 600 ~/.config/pi-proxmox/.env
Environment variables
| Variable | Purpose |
|---|---|
PROXMOX_HOST |
Proxmox server hostname or IP |
PROXMOX_PORT |
HTTPS port, default 8006 |
PROXMOX_TOKEN_ID |
Token ID such as pi-proxmox@pve!automation |
PROXMOX_TOKEN_SECRET |
Token secret UUID |
PROXMOX_USERNAME |
Username for the optional, discouraged password fallback; defaults to root@pam when unset. Leave unset |
PROXMOX_PASSWORD |
Password for the optional, discouraged password fallback, used to retry the root-only /nodes/{node}/execute (and for every request if no token is set). Leave unset |
PROXMOX_VERIFY_SSL |
Verify TLS certificates, true or false |
PROXMOX_TIMEOUT_MS |
Per-request API timeout in milliseconds |
PROXMOX_TOOL_TIMEOUT_MS |
Total Pi tool execution timeout in milliseconds |
Configuration priority
~/.config/pi-proxmox/.env- Constructor options when embedding the client directly
- Environment variables
- Built-in defaults
Runtime behavior
Output model
- List, status, config, and inspection tools return JSON text for Pi to consume
- Long-running tools can stream progress updates into Pi via
onUpdate(...) - Many asynchronous Proxmox operations return a task UPID
- Guest-agent execution returns a PID that can be checked with
proxmox_vm_agent_exec_status
Error model
Tool failures are thrown back to Pi as proper tool errors. The error message body is JSON with fields such as:
errorcategoryguidanceretryableendpointmethodhttpStatus
Standard error categories:
| Category | Meaning |
|---|---|
validation |
Invalid tool parameters |
authentication |
Bad credentials, missing privileges, or expired auth |
not_found |
Requested VM, container, storage, or path does not exist |
timeout |
Request or tool runtime timed out |
network |
Connection failure to the Proxmox host |
server_error |
Proxmox returned a server-side failure |
unknown |
Unexpected error outside the known categories |
Errors in timeout, network, and server_error categories are marked retryable.
Tool catalog
Virtual Machines (QEMU/KVM)
| Tool | Description |
|---|---|
proxmox_vm_list |
List all VMs on a node |
proxmox_vm_status |
Get detailed VM status and config |
proxmox_vm_config |
Get VM configuration |
proxmox_vm_start |
Start a VM |
proxmox_vm_stop |
Force-stop a VM |
proxmox_vm_shutdown |
Graceful ACPI shutdown |
proxmox_vm_reset |
Hard-reset a VM |
proxmox_vm_resume |
Resume a suspended VM |
proxmox_vm_suspend |
Suspend a VM |
proxmox_vm_reboot |
Reboot a VM |
proxmox_vm_create |
Create a new VM |
proxmox_vm_delete |
Delete a VM |
proxmox_vm_update_config |
Update VM configuration |
proxmox_vm_template |
Convert a stopped VM to a template |
proxmox_vm_move_disk |
Move a VM disk to another storage |
proxmox_vm_pending_changes |
List pending config changes |
proxmox_vm_snapshot |
Snapshot a VM |
proxmox_vm_snapshot_list |
List VM snapshots |
proxmox_vm_snapshot_rollback |
Roll back to a VM snapshot |
proxmox_vm_snapshot_delete |
Delete a VM snapshot |
proxmox_vm_clone |
Clone a VM or template |
proxmox_vm_migrate |
Migrate a VM to another node |
proxmox_vm_resize_disk |
Resize a VM disk |
VM QEMU Guest Agent
| Tool | Description |
|---|---|
proxmox_vm_agent_exec |
Execute a command inside a VM |
proxmox_vm_agent_exec_status |
Get execution status and output by PID |
proxmox_vm_agent_ping |
Ping the guest agent |
proxmox_vm_agent_info |
Get guest-agent version and supported commands |
proxmox_vm_agent_get_host_name |
Get VM hostname |
proxmox_vm_agent_get_network_interfaces |
Get VM network interfaces |
proxmox_vm_agent_get_osinfo |
Get VM OS information |
proxmox_vm_agent_get_time |
Get VM system time |
proxmox_vm_agent_get_users |
List logged-in users |
proxmox_vm_agent_get_vcpus |
Get VCPU info |
proxmox_vm_agent_file_read |
Read a file from a VM |
proxmox_vm_agent_file_write |
Write a file to a VM |
proxmox_vm_agent_set_user_password |
Set a user's password inside a VM |
LXC Containers
| Tool | Description |
|---|---|
proxmox_lxc_list |
List containers on a node |
proxmox_lxc_status |
Get container status and config |
proxmox_lxc_start |
Start a container |
proxmox_lxc_stop |
Stop a container |
proxmox_lxc_shutdown |
Shut down a container |
proxmox_lxc_resume |
Resume a suspended container |
proxmox_lxc_suspend |
Suspend a container |
proxmox_lxc_reboot |
Reboot a container |
proxmox_lxc_create |
Create a container from template |
proxmox_lxc_delete |
Delete a container |
proxmox_lxc_update_config |
Update container configuration |
proxmox_lxc_template |
Convert a stopped container to a template |
proxmox_lxc_template_list |
List cached LXC templates |
proxmox_lxc_resize |
Resize a mount point |
proxmox_lxc_pending_changes |
List pending config changes |
proxmox_lxc_snapshot |
Snapshot a container |
proxmox_lxc_snapshot_list |
List container snapshots |
proxmox_lxc_snapshot_rollback |
Roll back to a container snapshot |
proxmox_lxc_snapshot_delete |
Delete a container snapshot |
proxmox_lxc_migrate |
Migrate a container |
Nodes
| Tool | Description |
|---|---|
proxmox_node_list |
List cluster nodes |
proxmox_node_status |
Get detailed node status |
proxmox_node_config |
Get node configuration |
proxmox_node_services |
List services on a node |
proxmox_node_service_status |
Get a service's systemd state |
proxmox_node_service_start |
Start a service |
proxmox_node_service_stop |
Stop a service |
proxmox_node_service_restart |
Restart a service |
proxmox_node_journal |
Read systemd journal |
proxmox_node_dns |
Get DNS configuration |
proxmox_node_time |
Get system time and timezone |
proxmox_node_hardware |
List PCI or USB devices |
proxmox_node_network_list |
List network interfaces |
proxmox_node_execute |
Batch relative node API calls via /execute |
proxmox_node_reboot |
Reboot the node |
proxmox_node_stop |
Shut down (power off) the node |
proxmox_node_apt_update |
Refresh the APT package index |
proxmox_node_subscription |
Get subscription status |
Storage and pools
| Tool | Description |
|---|---|
proxmox_storage_list |
List storage backends on a node |
proxmox_storage_content |
List content on a storage backend |
proxmox_storage_create |
Create a storage backend |
proxmox_storage_detail |
Get storage details |
proxmox_storage_delete |
Delete a storage backend |
proxmox_storage_scan |
Scan for NFS, CIFS, iSCSI, LVM, LVM-thin, or ZFS storage |
proxmox_storage_upload |
Download from URL and upload to Proxmox storage |
proxmox_storage_remove_volume |
Remove a storage volume |
proxmox_pool_list |
List resource pools |
proxmox_pool_create |
Create a resource pool |
proxmox_pool_delete |
Delete a resource pool |
Cluster
| Tool | Description |
|---|---|
proxmox_cluster_status |
Get cluster quorum and status |
proxmox_cluster_resources |
List cluster resources |
proxmox_cluster_next_id |
Get the next available VM or CT ID |
proxmox_cluster_version |
Get Proxmox version information |
proxmox_cluster_log |
Get the cluster log |
proxmox_cluster_options |
Get cluster options |
proxmox_cluster_update_options |
Update cluster options |
proxmox_cluster_config |
Get cluster join information |
proxmox_check_permissions |
Probe current token permissions |
Backup
| Tool | Description |
|---|---|
proxmox_backup_list |
List backup jobs |
proxmox_backup_create |
Create a backup job |
proxmox_backup_delete |
Delete a backup job |
Firewall
| Tool | Description |
|---|---|
proxmox_firewall_rules |
List firewall rules |
proxmox_firewall_rule_add |
Add a firewall rule |
proxmox_firewall_rules_delete |
Delete a firewall rule |
proxmox_firewall_options |
Get firewall options |
proxmox_firewall_options_update |
Update firewall options |
proxmox_firewall_aliases |
List firewall aliases |
proxmox_firewall_alias_create |
Create a firewall alias |
proxmox_firewall_alias_delete |
Delete a firewall alias |
proxmox_firewall_ipset_list |
List IPSets |
proxmox_firewall_ipset_create |
Create an IPSet |
proxmox_firewall_ipset_delete |
Delete an IPSet |
Access control
| Tool | Description |
|---|---|
proxmox_user_list |
List users |
proxmox_user_create |
Create a user |
proxmox_user_detail |
Get user details |
proxmox_user_delete |
Delete a user |
proxmox_group_list |
List groups |
proxmox_group_create |
Create a group |
proxmox_group_delete |
Delete a group |
proxmox_role_list |
List roles |
proxmox_role_create |
Create a role |
proxmox_role_delete |
Delete a role |
proxmox_acl_list |
List ACL entries |
proxmox_acl_update |
Add or remove ACL entries |
proxmox_token_list |
List API tokens for a user |
proxmox_token_create |
Create an API token |
proxmox_token_delete |
Delete an API token |
proxmox_domain_list |
List authentication domains |
High availability
| Tool | Description |
|---|---|
proxmox_ha_status |
Get the current HA manager status |
proxmox_ha_resources_list |
List HA resources |
proxmox_ha_resource_create |
Add a resource to HA |
proxmox_ha_resource_delete |
Remove a resource from HA |
proxmox_ha_groups_list |
List HA groups |
proxmox_ha_group_create |
Create an HA group |
proxmox_ha_group_delete |
Delete an HA group |
Replication
| Tool | Description |
|---|---|
proxmox_replication_list |
List replication jobs |
proxmox_replication_create |
Create a replication job |
proxmox_replication_delete |
Delete a replication job |
proxmox_replication_run |
Schedule a replication job to run now |
proxmox_replication_log |
Get replication job log |
Tasks
| Tool | Description |
|---|---|
proxmox_task_list |
List recent tasks |
proxmox_task_status |
Get task status by UPID |
proxmox_task_log |
Get task log output |
Universal API coverage
| Tool | Description |
|---|---|
proxmox_api_call |
Call any official GET/POST/PUT/DELETE endpoint under /api2/json |
proxmox_api_upload_file |
Upload a local file to any multipart Proxmox upload endpoint |
Pagination notes
proxmox_task_list and proxmox_task_log accept optional start and limit parameters, which map directly to Proxmox pagination:
| Tool | Endpoint | start semantics |
|---|---|---|
proxmox_task_list |
/nodes/{node}/tasks |
integer offset |
proxmox_task_log |
/nodes/{node}/tasks/{upid}/log |
integer line offset |
proxmox_node_journal uses the journal's own windowing instead: since and until are Unix epoch timestamps, lastentries returns the last N entries, and startcursor/endcursor continue from journal cursors.
Repository layout
dist/ Runtime extension code committed directly to the repo
index.js Pi extension entrypoint
proxmox-client.js REST client and auth logic
tool-runtime.js Shared tool execution helpers
tools/ Domain tool definitions
docs/ Bundled Proxmox API reference material and operator docs
tests/ Live integration, smoke, endpoint-conformance, and runtime-behavior tests
fixtures/ Snapshot of the official API viewer schema used by the offline tests
scripts/ Audit and maintenance helpers
.github/ CI workflow, issue templates, and repo automation
README.md User-facing package documentation
AGENTS.md Agent/maintainer guidance
CONTRIBUTING.md Contributor workflow
SECURITY.md Security and disclosure policy
CHANGELOG.md Release history
Compatibility
Verified directly from this repository:
| Component | Verified value |
|---|---|
| Pi runtime | 0.79.6 |
| Proxmox VE release | 9.2 |
| Proxmox VE version | 9.2.3 |
| Node.js | >=22.19 |
See docs/COMPATIBILITY.md for the maintained compatibility notes.
Development
Offline checks (no Proxmox cluster needed; test:security and audit:official-api need network access to npm and the Proxmox API viewer):
npm ci
npm run test:smoke
npm run test:endpoints
npm run test:mcp
npm run test:package
npm run test:security
npm run audit:official-api
npm run test:ci # all of the above, as CI runs them
Live suites, which create and delete resources on a real Proxmox cluster configured in ~/.config/pi-proxmox/.env (use a lab cluster):
npm test # every suite, offline and live
npm run test:auth
npm run test:pagination
npm run test:vm-agent
npm run test:execute
npm run test:lxc
npm run test:vm
npm run test:upload
npm run test:runtime
npm run test:raw-api
Refresh the official API snapshot that test:endpoints checks against when Proxmox publishes API changes:
npm run update:api-snapshot
Test philosophy
This project prefers real integration coverage over mock-heavy tests.
- API/auth behavior is tested against a real Proxmox host
- VM and LXC lifecycle tests create resources and clean them up
- Runtime tests verify Pi-specific behavior such as progress streaming, thrown tool errors, and tool timeout handling
- Raw API tests verify the universal coverage tools against official GET/POST/PUT/DELETE and upload-style endpoints
- Endpoint conformance tests run every dedicated tool against a recording client and check each request's path, method, and parameters, and every endpoint named in the docs, against
tests/fixtures/pve-api-snapshot.json, a snapshot of the official API viewer schema - Package tests verify repository metadata and published-package structure
- The official API audit script fetches the Proxmox API viewer and reports the current upstream route and method counts
CI security gates
GitHub Actions uses immutable action SHAs, npm ci for reproducible installs, runs npm audit --audit-level=high as part of npm run test:ci, performs GitHub dependency review on pull requests, and runs scheduled CodeQL analysis for the JavaScript codebase.
Publishing
npm pack --dry-run
npm publish --ignore-scripts
Publishing guidance, versioning rules, and release discipline live in AGENTS.md.
Support and feedback
The repository includes issue templates for:
- bug reports
- feature requests
- compatibility reports
When reporting problems, include the package version, Pi version, Proxmox version, tool name, and auth mode if possible.
See also
- AGENTS.md — maintainer and agent instructions
- CHANGELOG.md — release history
- CONTRIBUTING.md — contributor workflow
- SECURITY.md — security policy and disclosure instructions
- docs/API_COVERAGE_AUDIT.md — official API audit and coverage approach
- docs/COMPATIBILITY.md — verified environment notes
- docs/EXAMPLES.md — copyable usage examples
- docs/PERMISSIONS.md — least-privilege token setup and the privileges each tool needs
- docs/TROUBLESHOOTING.md — common failure modes and fixes
- docs/ — bundled Proxmox reference material
License
MIT — see LICENSE.