Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Beschreibung vom Entwickler (englisches Original)
Manage Proxmox VE via Cursor: QEMU, LXC, storage, HA, firewall, access.
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
PROXMOX_MCP_CONFIG, PROXMOX_TOKEN_VALUE, PROXMOX_MCP_VERBOSE, PROXMOX_MCP_LOG_LEVELAls geheim markierte Werte sind Schlüssel zu deinem Konto. Gib sie nie weiter und füge sie nie in einen Chat ein.
Du brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"cursor-proxmox": {
"command": "uvx",
"args": [
"cursor-proxmox-mcp"
],
"env": {
"PROXMOX_MCP_CONFIG": "your-value",
"PROXMOX_TOKEN_VALUE": "your-value",
"PROXMOX_MCP_VERBOSE": "your-value",
"PROXMOX_MCP_LOG_LEVEL": "your-value"
}
}
}
}Führe das in deinem Terminal aus
claude mcp add cursor-proxmox --env PROXMOX_MCP_CONFIG=your-value --env PROXMOX_TOKEN_VALUE=your-value --env PROXMOX_MCP_VERBOSE=your-value --env PROXMOX_MCP_LOG_LEVEL=your-value -- uvx cursor-proxmox-mcpTrag die leeren Werte ein, bevor du ihn startest.
In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"cursor-proxmox": {
"command": "uvx",
"args": [
"cursor-proxmox-mcp"
],
"env": {
"PROXMOX_MCP_CONFIG": "your-value",
"PROXMOX_TOKEN_VALUE": "your-value",
"PROXMOX_MCP_VERBOSE": "your-value",
"PROXMOX_MCP_LOG_LEVEL": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"cursor-proxmox": {
"type": "stdio",
"command": "uvx",
"args": [
"cursor-proxmox-mcp"
],
"env": {
"PROXMOX_MCP_CONFIG": "your-value",
"PROXMOX_TOKEN_VALUE": "your-value",
"PROXMOX_MCP_VERBOSE": "your-value",
"PROXMOX_MCP_LOG_LEVEL": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
PROXMOX_MCP_VERBOSE envPROXMOX_MCP_LOG_LEVEL envDiese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 6. Nov. 2026
Der Registry-Name wurde mit dem GitHub-Konto hackmods bestätigt, dem das Repo gehört
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Das musst du eintragen: PROXMOX_MCP_CONFIG, PROXMOX_TOKEN_VALUE
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (1.9.0) kam vor 3 Monaten in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Python (uv), Docker auf deinem Computer.
In derselben Kategorie: Spec Driven Development, Remote Desktop Commander, yontu
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Türkçe yazı denetimi: TDK kuralları, yapay zekâ izleri, metin türüne göre üslup.
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
Formal Cursor ↔ [Proxmox VE](https://www.proxmox.com/) MCP integration — 212 tools covering QEMU VMs (incl. guest-agent network/file/guest-info/fsfreeze + bootstrap_cloudinit_vm / provision_vm + qm_set_vm), LXC (incl. provision_lxc, bootstrap_docker_lxc, crun Path B, DNS/SSH helpers, deploy_node_app), unified guest power, storage admin (incl. PBS plugin + status), cluster/tasks (incl. join), snapshots, backups, migration, HA, firewall, access control, replication, SDN write + apply, ACME order/renew, Ceph status/pools + gated OSD create/destroy, node network CRUD, console tickets/get_console_connection, and host reboot/shutdown. v1.9.0 adds optional dual-credential elevated mode (auth_write, D31) + provision_vm + Cursor day-2 auto-approve docs.
Repo: hackmods/cursor-proxmox-mcp
Docs: Setup guide · Wiki (docs/wiki/) · Publishing · Security · Contributing · API coverage · Changelog
Registered via tools/register.py (called from ProxmoxMCPServer._setup_tools()) — inventory locked by tools/inventory.py / tests/expected_tools.py (CI fails on drift).
| Domain | Tools | ||
|---|---|---|---|
| Nodes | get_nodes, get_node_status, list_node_networks + create/update/delete + reload_node_network, get_node_subscription, list_node_certificates, get_node_report, list_node_services, get_node_time, wake_node, reboot_node / shutdown_node (confirm= ) | ||
| Cluster / tasks | get_cluster_status, get_next_vmid, get_task_status, list_tasks, wait_for_task, get_version, get_mcp_capabilities, get_cluster_resources, get_cluster_log, get_cluster_options, get_cluster_join_info, join_cluster (confirm=JOIN) | ||
| QEMU | lifecycle + config (ISO/cloud-init/net/onboot/tags/description; optional wait=true) + get_vm_network / get_vm_guest_info / fsfreeze_vm / fsthaw_vm / push_to_vm / pull_from_vm (guest agent) + bootstrap_cloudinit_vm / provision_vm (one-shot create or clone→CI→IP) + qm_set_vm + get_vm_status, get_vm_rrd_data, console tickets | ||
| LXC | lifecycle + config + suspend/resume (CRIU warn) + get_lxc_status / get_lxc_network / get_lxc_rrd_data + VNC/SPICE/termproxy; ssh_public_keys / docker_ready / nameserver / wait / onboot / description / tags on create; provision_lxc (one-shot create→start→IP→SSH) / bootstrap_docker_lxc / prepare_lxc_for_docker (`docker_mode=auto | keyctl | crun) / configure_lxc_dns / configure_lxc_ssh / get_docker_lxc_status / pct_set_lxc / push_to_lxc / pull_from_lxc / deploy_static_nginx / deploy_node_app via opt-in **host** SSH + pct ([setup](SETUP.md#ssh-for-lxc-exec-opt-in)); optional get_containers(probes=true)` |
| Guest (unified) | start/stop/shutdown/reboot/delete_guest, get_guest_status, get_guest_pending, move_guest_disk, get_console_connection (guest_type) | ||
| Snapshots / Backups | snapshot CRUD/rollback; one-shot backup CRUD; scheduled list/create/delete_backup_job | ||
| Storage | list, content, list_os_templates, list_isos, download-url, definition CRUD; PBS via create_storage(type=pbs) + get_pbs_storage_status | ||
| Migrate / HA | migrate_guest; HA groups + resources CRUD | ||
| Firewall | cluster + guest rules/options; aliases; IP sets + CIDR members; macros | ||
| Access | users, groups, roles, ACL, tokens, get_permissions, get_token_permissions | ||
| Replication | list/status/run/create/update/delete jobs | ||
| SDN | zones/vnets/subnets CRUD + list controllers/ipams/dns + apply_sdn | ||
| ACME | list + create account/plugin, delete plugin, order_acme_certificate / renew_acme_certificate | ||
| Ceph | status, list pools/OSDs/MONs/MGRs, pool CRUD; gated OSD: list_node_disks → propose_ceph_osd → create_ceph_osd/destroy_ceph_osd (typed confirm; create defaults dry_run=true) | ||
| Pools | list/get/create/update/delete |
get_next_vmid → list_os_templates / list_isos → list_node_networksprovision_lxc / provision_vm (preferred one-shot) or create_lxc / create_vm → wait_for_task → startcreate_snapshot before risky changes → update_*_config → get_guest_pending → reboot if neededmigrate_guest / HA / firewall / access / replication as neededGuest type unknown? Prefer unified tools (start_guest, stop_guest, shutdown_guest, reboot_guest, delete_guest, get_guest_status) with guest_type=qemu|lxc. Parallel *_vm / *_lxc names stay for existing prompts.
PyPI package name is `cursor-proxmox-mcp` (console scripts: cursor-proxmox-mcp, plus aliases proxmox-mcp-server / proxmox-mcp).
Note: The unrelated PyPI project
proxmox-mcp-serveris a different codebase. Always install `cursor-proxmox-mcp`.
# Install uv if needed: pip install uv OR winget install astral-sh.uv
uvx cursor-proxmox-mcp
uvx --from . cursor-proxmox-mcp
Cursor MCP (published package — no checkout):
{
"mcpServers": { "proxmox": { "command": "uvx", "args": ["cursor-proxmox-mcp"], "env": { "PROXMOX_MCP_CONFIG": "C:/Users/YOU/proxmox-config/config.json" } } } }
From a local checkout, use "args": ["--from", "C:/Users/YOU/Projects/cursor-proxmox-mcp", "cursor-proxmox-mcp"] instead.
Why uvx: it resolves dependencies into an isolated ephemeral env so Cursor does not depend on a hand-managed venv/PYTHONPATH.
git clone https://github.com/hackmods/cursor-proxmox-mcp.git
cd cursor-proxmox-mcp uv venv
uv pip install -e ".[dev]" cp proxmox-config/config.example.json proxmox-config/config.json
uv run cursor-proxmox-mcp
python -m venv .venv
pip install -e ".[dev]"
$env:PROXMOX_MCP_CONFIG="proxmox-config\config.json" # PowerShell python -m proxmox_mcp.server
Cursor MCP (direct Python — use absolute paths):
{
"mcpServers": { "proxmox": { "command": "python", "args": ["-m", "proxmox_mcp.server"], "cwd": "C:/Users/YOU/Projects/cursor-proxmox-mcp", "env": { "PROXMOX_MCP_CONFIG": "C:/Users/YOU/Projects/cursor-proxmox-mcp/proxmox-config/config.json", "PYTHONPATH": "C:/Users/YOU/Projects/cursor-proxmox-mcp/src" } } } }
Restart the proxmox MCP server in Cursor after pulling new tools. Manual launchers: start.bat (Windows) / start.sh (Unix) — prefer uvx cursor-proxmox-mcp in mcp.json.
.\scripts\ci-local.ps1
./scripts/ci-local.sh
Runs: editable install → entrypoint smoke → ruff → pytest → inventory floor (≥100 tools).
| Symptom | Fix |
|---|---|
spawn uvx ENOENT | Install uv (pip install uv or winget install astral-sh.uv), then restart Cursor |
ModuleNotFoundError: proxmox_mcp | Use uvx/uv run, or set PYTHONPATH=.../src for plain python |
ModuleNotFoundError: mcp.server.fastmcp | MCP SDK v2 dropped FastMCP — this server pins mcp<2. Reinstall from this checkout (pip install -e ".[dev]" / uvx --from .) so the cap applies |
PROXMOX_MCP_CONFIG ... must be set | Point env at proxmox-config/config.json (absolute path) |
| Auth OK but empty data / odd 403 | Privilege Separation Yes without token ACL — see SETUP.md |
403 on HA / firewall / keyctl | Token needs elevated role; prefer scoped mcp@pve over root@pam when possible |
| Tools missing in Cursor | Restart MCP server after git pull |
First-time cluster wiring (token, privsep, Cursor JSON, example prompts): [SETUP.md](SETUP.md). LXC shell / runtime IP needs opt-in host SSH (authorized_keys, optional host_overrides, reload MCP): [SETUP.md — SSH for LXC exec](SETUP.md#ssh-for-lxc-exec-opt-in).
Example proxmox-config/config.json:
{
"proxmox": { "host": "PROXMOX_HOST", "port": 8006, "verify_ssl": false, "service": "PVE" }, "auth": { "user": "USER@pve", "token_name": "TOKEN_NAME", "token_value": "TOKEN_VALUE" }, "logging": { "level": "INFO", "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s", "file": "proxmox_mcp.log", "verbose": false, "tool_calls": true } }
Tool invocations are audited to the log file as tool_call name=… ok=… duration_ms=… (secrets redacted). Set verbose: true or env PROXMOX_MCP_VERBOSE=1 for richer diagnostics without urllib3 spam. Details: proxmox-config/README.md — Logging.
Create the token in Proxmox UI: Datacenter → Permissions → API Tokens. See [SETUP.md — API token & Privilege Separation](SETUP.md#1-create-a-proxmox-api-token) for the full walkthrough.
Privilege Separation: leave Yes (default) and grant ACLs to the token (user@realm!tokenid). Setting it to No makes the token inherit the user’s full permissions (common lab shortcut; larger blast radius if leaked). Grant roles matching the tools you use (PVEAuditor, PVEVMAdmin, Datastore.*, Sys.Audit/Sys.Modify for HA/firewall/access).
Prefer "token_value": "${PROXMOX_TOKEN_VALUE}" in config and set the env var in Cursor MCP config so secrets stay out of the JSON file.
This server can create/delete guests, change firewall/ACL, and run guest commands. Treat the API token like production infra credentials. Full policy: [SECURITY.md](SECURITY.md).
${ENV} secret interpolation)tool_call audit logging (redacted) + verbose / env log overridesget_console_connection (VNC/SPICE/termproxy) — no websocket proxy (D6).[openapi] for mcporuff + pytest + coverage + inventory + design invariants)Do not treat these as planned gaps: long-lived VNC/SPICE websocket proxy (tickets only — D6), full PBS product admin, or ungated Ceph OSD/MON/MGR create/destroy. Gated OSD tools are shipped; MON/MGR lifecycle stays on Ceph/PVE tooling.
.\scripts\ci-local.ps1
After adding a tool: update definitions.py, R
Nur der Anfang wird gezeigt; den Rest findest du im Repo