pve-mcp@1.3.0
CAUTION· not startedPublisher claims: "Token-efficient MCP server for Proxmox VE (guests, snapshots, backups, storage, LVM/ZFS, guest/host exec, dry-run + tamper-evident audit)" Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Not started: dependency install failed; the server itself was not observed.- Tested
- the dependency install step · every file read, file written and host contacted by what ran
- Not tested
- server startup · the tool list · tool behavior
What this means for the label: Caution here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
PROXMOX_SSH_PASSWORDPROXMOX_TOKEN_NAMEPROXMOX_TOKEN_VALUEConfiguration, not credentials: PROXMOX_AUDIT_HMAC_KEY, PROXMOX_HOST, PROXMOX_PORT, PROXMOX_SSH_HOST, PROXMOX_SSH_KEY_PATH, PROXMOX_SSH_KNOWN_HOSTS, PROXMOX_SSH_PORT, PROXMOX_SSH_TIMEOUT, PROXMOX_SSH_USER, PROXMOX_TIMEOUT, PROXMOX_USER, PROXMOX_VERIFY_SSL- Where it talks to
- no vendor host named in the code
- What the honeypot saw
- no credential files read · no network
- What we could not test
- server startup · the tool list · tool behavior
Connect it with a scoped credential, under the guard. It asks for PROXMOX_SSH_PASSWORD, PROXMOX_TOKEN_NAME, PROXMOX_TOKEN_VALUE and talks to its vendor. Give the credential to the guard, not the server: the value never enters the server's environment and only travels to the host you bind. What the tools do with a real credential was not observed.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios; not started: dependency install failed; the server itself was not observed) on 2026-11-15 and scored it 70/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Access to sensitive file paths; Access to sensitive file paths; Destructive command against a filesystem root or device. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 2 scenarios · 0 deviationsStatic findings
"PROXMOX_SSH_HOST is not set in .env."Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.1. **Multi-host registry**. Hosts loaded from vm_ssh_hosts.json next to .env.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# /bin/sh -c 'rm -rf /'` should be flagged for the `rm -rf` part.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.the `pct exec` envelope - so `rm -rf /something` inside the CT isFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# Default registry location: next to .env (repo root)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# HTTP call; restore's probe is monkeypatched). Keep a real .env if present.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose._no("cat /etc/hosts; rm -rf /")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell._no("bash -c 'rm -rf /'")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell._ok("grep -n root /etc/passwd")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Connection details come from the existing PROXMOX_SSH_* env vars in .env.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose._no("pct exec 205 -- rm -rf /")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell._no("bash -c 'rm -rf /'")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.raise HostSshError("PROXMOX_SSH_HOST is not configured in .env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.obj["cmd"] = "rm -rf /"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# /bin/sh -c 'rm -rf /'` should be flagged for the `rm -rf` part.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.obj["cmd"] = "rm -rf /"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell._no("cat /etc/hosts; rm -rf /")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.Configuration is loaded from environment variables (typically via .env):Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# asyncssh default = use the user's ~/.ssh/known_hostsFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose._no("echo $(rm -rf /)")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell._no("rm -rf /")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.action="set", value="off; rm -rf /")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."(preferred) or PROXMOX_SSH_PASSWORD in .env."Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.shell text. The agent can't accidentally drop a `; rm -rf /` into aFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell._no("rm -rf /")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# Satisfy require_config() without a real .env (create/clone dry_run make noFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose._no("(rm -rf /tmp)")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# Satisfy require_config() without a real .env; no test here reaches a real POST.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…Create an LXC container from a template: rootfs, one NIC (dhcp or static CIDR), root access via `password` and/or `ssh_public_key`, unprivileged by default, optional `nest…Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.action="set", value="off; rm -rf /")Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.Cost to the agent
Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.
Known vulnerabilities
No advisories in OSV for pve-mcp@1.3.0 as of 46 min ago. This is the package itself, not its dependencies.
What would make this Verified
10 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Destructive command against a filesystem root or device≈ +9 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Unclaimed publisher≈ +8 on the totalClaim ahmetem: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Destructive file system command detected≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.