cv4pve-api-powershell skill

A PowerShell module and skill for Claude Code and Codex: the agent finds, starts and snapshots Proxmox VE VMs via the API.

  • 95 ★ on the repository
  • Last commit
  • MIT
Skill

Broad access

Why this level

  • Cmdlets start, stop, clone and delete virtual machines with the token privileges.
  • A Proxmox VE API token opens cluster control and is kept in an environment variable.
All reasons and checks

corsinvest/cv4pve-api-powershell

Install

In your terminal, with SkillFoxx CLI

npx skillfoxx add skills/cv4pve-api-powershell

Detects the agents on your machine, shows the access level and pins the version.

Other ways to install

Access and checks

How we review

Broad accessThe tool can change data, run commands or handle secrets.

  • Cmdlets start, stop, clone and delete virtual machines with the token privileges.
  • A Proxmox VE API token opens cluster control and is kept in an environment variable.

This is third-party code. Review the repository files before installing.

What it does

Corsinvest.ProxmoxVE.Api is a PowerShell 7 module with one cmdlet per Proxmox VE API method. It runs on your machine and talks only to the API, with no SSH and nothing installed on the nodes. Next to it sits the `cv4pve-api-powershell` skill for agents. The skill teaches the agent to connect with a token, find a cmdlet by API path (`GET /nodes/{node}/qemu/{vmid}/config` becomes `Get-PveNodesQemuConfig`) and read the responses. Before any change the agent runs the command with `-WhatIf`, shows the result and acts only after you agree. `Invoke-PveRestApi` calls any path.

Who it is for. Proxmox VE administrators who want to hand cluster inventory, snapshots and bulk virtual machine operations to an agent.

Good fit when

  • Forty machines should be snapshotted by tag before an update.
  • An audit needs a list of every VM with its disks exported to CSV.
  • A template has to be cloned ten times under different names.
  • A lab stand is shut down each evening and the action is worth automating.

Not a fit when

  • You need actions on the nodes over SSH: the module works through the API only.
  • PowerShell 7 is unavailable: the module is not meant for Windows PowerShell 5.
  • You need an MCP server: this repository holds a module and a skill.

Example request

List all virtual machines tagged test and, if that looks right, snapshot them with -WhatIf first and then for real on my command.

Limitations

PowerShell 7 (`pwsh`) and a Proxmox VE API token are required; the key reaches the agent through the `PVE_API_TOKEN` variable and must not be printed. Every change goes to the cluster at once with the token privileges. `Invoke-PveRestApi` has no `-WhatIf`, so the agent shows method, path and parameters before calling. A failed call does not throw: the result is checked via `IsSuccessStatusCode`. The skill can be newer than the installed module: check the version with `(Get-Module Corsinvest.ProxmoxVE.Api -ListAvailable).Version`.

How to disable. Remove the skill from the agent directory and the module with `Uninstall-Module Corsinvest.ProxmoxVE.Api`. Revoke the token in the Proxmox VE interface.

FAQ

How do I install the module?

In `pwsh` run `Install-Module -Name Corsinvest.ProxmoxVE.Api -Scope CurrentUser`. It talks only to the Proxmox VE API.

Does the agent confirm changes?

Yes. The skill requires running a changing command with `-WhatIf`, showing the `What if:` lines and executing the call after the user agrees.

How does the agent connect to the cluster?

Every command starts with `Connect-PveCluster -HostsAndPorts <host> -ApiToken $env:PVE_API_TOKEN`: the agent shell keeps no connection between calls.

How do I find the cmdlet for an API path?

Run `Get-Command -Module Corsinvest.ProxmoxVE.Api -Name *Qemu*Snapshot*`, then `Get-Help <cmdlet> -Full`.

What if the cluster uses a self-signed certificate?

Add `-SkipCertificateCheck` to `Connect-PveCluster`. The skill reminds the agent about it.

Discussion

No questions or reviews yet.

Skills

MCP server for Proxmox VE: manage VMs, LXC, snapshots and backups from an agent with permission control and command approval

MCP serverBroad access649Repository stars

A Proxmox VE MCP server with 341 tools: virtual machines, containers, storage, cluster and backups, with a read-only mode.

MCP serverBroad access81Repository stars

MCP server giving an agent a PowerShell 7 console shared with the user: commands appear live, passwords and MFA codes stay manual.

MCP serverBroad access110Repository stars

devvm gives each project its own virtual machine with the right toolchains, where Claude Code and Codex cannot see your secrets

CLIBroad access620Repository stars

A WebSSH console for VPS with an MCP server: the agent works across several servers while ACL tokens limit tools and hosts.

MCP serverBroad access133Repository stars

Comparison with similar tools

Cards that share the main search query, and how they differ.

ToolOfficialAuthenticationRepository starsMain difference
cv4pve-api-powershell (this card)no95
Proxmox MCP ServernoAPI key81an MCP server for Proxmox; this is a PowerShell module and a skill that work from an ordinary shell
ProxmoxMCP-Plusnokey is optional649an MCP server with extended operations; here there are cmdlets for every API method

README in short

The idea is PowerCLI for Proxmox VE: the whole API as cmdlets, objects in the pipeline, `-WhatIf` and `-Confirm` on changing commands. The docs have a separate page for agents covering Claude Code and Codex.

README badge

Original SKILL.md

---
name: cv4pve-api-powershell
description: "Read and operate a Proxmox VE cluster from PowerShell 7 with the Corsinvest.ProxmoxVE.Api module: list and find VMs, containers and nodes, read configurations, start, stop, snapshot, and call any API endpoint. Use it when the user works in PowerShell or asks for a PowerShell script for Proxmox VE."
---

# cv4pve-api-powershell

The PowerShell module `Corsinvest.ProxmoxVE.Api` has one cmdlet per Proxmox VE API endpoint plus a few
functions for guests and tasks. It needs PowerShell 7 (`pwsh`). Every change goes to the cluster at once,
with the privileges of the token.

## Rules

- Your shell does not keep the connection between commands: start every command with
  `Connect-PveCluster -HostsAndPorts <host> -ApiToken $env:PVE_API_TOKEN`, adding `-SkipCertificateCheck`
  if the nodes have a self-signed certificate. Ask the user for the host; never print the variable.
- Never call `Connect-PveCluster` without `-ApiToken` or `-Credentials`: it waits for `Get-Credential`.
  Do not use `Out-GridView` or `.ToGridView()` either.
- Reads need no agreement. Before any `New-`, `Set-`, `Remove-` cmdlet or guest function that changes
  something (`Start-`, `Stop-`, `Restart-`, `Reset-`, `Suspend-`, `Resume-PveGuest`, `New-`, `Remove-`,
  `Undo-PveGuestSnapshot`, `Unlock-PveGuest`): run the same command with `-WhatIf`, show the user its
  `What if:` lines, and run it for real only after the user agrees.
- `Invoke-PveRestApi` has no `-WhatIf`: before a call with `-Method Set`, `Create` or `Delete`, show the
  method, the path and the parameters and wait for agreement.
- A failed call does not throw: check `IsSuccessStatusCode` of every response; `StatusCode` and
  `ReasonPhrase` say why (400 parameter, 401 token, 403 privilege, 500 server, -1 no answer).
- If a parameter is refused, read `Get-Help <cmdlet> -Full`: this skill can be newer than the module
  (`(Get-Module Corsinvest.ProxmoxVE.Api -ListAvailable).Version`).

## Find the cmdlet

Generated cmdlets follow the API path: `GET /nodes/{node}/qemu/{vmid}/config` is `Get-PveNodesQemuConfig`,
`POST /nodes/{node}/qemu/{vmid}/snapshot` is `New-PveNodesQemuSnapshot`, `PUT` is `Set-`, `DELETE` is
`Remove-`.

```powershell
Get-Command -Module Corsinvest.ProxmoxVE.Api -Name *Qemu*Snapshot*   # cmdlets about QEMU snapshots
Get-Help New-PveNodesQemuSnapshot -Full                              # parameters
```

## Read

```powershell
Get-PveGuest | Select-Object vmid, name, node, type, status          # every VM and container
Get-PveGuest -VmIdOrName '@tag-prod,-@node-pve03'                    # a selection, as in the other cv4pve tools
Get-PveNode
(Get-PveGuest -VmIdOrName 100 | Get-PveNodesQemuConfig).Response.data
```

Report a problem