{
  "markdown": "# ProxmoxMCP-Plus\n\n<!-- mcp-name: io.github.RekklesNA/proxmox-mcp-plus -->\n\n<div align=\"center\">\n  <img src=\"docs/assets/logo-proxmoxmcp-plus.png\" alt=\"ProxmoxMCP-Plus Logo\" width=\"160\"/>\n</div>\n\n<p align=\"center\"><strong>Operate Proxmox VE from MCP clients, AI agents, and OpenAPI tooling through one security-conscious control plane for VMs, LXCs, snapshots, backups, ISOs, container commands, and persistent long-running jobs.</strong></p>\n\n<p align=\"center\">\n  <a href=\"https://pypi.org/project/proxmox-mcp-plus/\"><img alt=\"PyPI\" src=\"https://img.shields.io/pypi/v/proxmox-mcp-plus\"></a>\n  <a href=\"https://github.com/RekklesNA/ProxmoxMCP-Plus/releases\"><img alt=\"GitHub Release\" src=\"https://img.shields.io/github/v/release/RekklesNA/ProxmoxMCP-Plus\"></a>\n  <a href=\"https://github.com/RekklesNA/ProxmoxMCP-Plus/actions/workflows/ci.yml\"><img alt=\"CI\" src=\"https://img.shields.io/github/actions/workflow/status/RekklesNA/ProxmoxMCP-Plus/ci.yml?branch=main\"></a>\n  <a href=\"https://github.com/RekklesNA/ProxmoxMCP-Plus/pkgs/container/ProxmoxMCP-Plus\"><img alt=\"GHCR\" src=\"https://img.shields.io/badge/GHCR-container-blue\"></a>\n  <a href=\"LICENSE\"><img alt=\"License\" src=\"https://img.shields.io/github/license/RekklesNA/ProxmoxMCP-Plus\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"#quick-start\">Quick Start</a> |\n  <a href=\"#client-install\">Client Install</a> |\n  <a href=\"#demo\">Demo</a> |\n  <a href=\"#choose-the-right-tool\">Tools</a> |\n  <a href=\"#safety-model\">Safety</a> |\n  <a href=\"#scenario-templates\">Scenarios</a> |\n  <a href=\"#documentation\">Docs</a> |\n  <a href=\"https://github.com/RekklesNA/ProxmoxMCP-Plus/wiki\">Wiki</a>\n</p>\n\n![ProxmoxMCP-Plus architecture](docs/assets/proxmoxmcp-nature-architecture.svg)\n\n## Why ProxmoxMCP-Plus\n\nProxmoxMCP-Plus sits between AI clients and Proxmox VE so operators do not have to stitch together raw API calls, one-off shell scripts, and custom job polling for every workflow.\n\nIt exposes the same operational surface in two ways:\n\n- `MCP` for Claude Desktop, Cursor, VS Code, Open WebUI, Codex, and other MCP-capable agents\n- `OpenAPI` for HTTP automation, dashboards, internal tools, and no-code workflows\n\nWhat you get:\n\n- VM and LXC lifecycle actions\n- snapshot create, rollback, and delete\n- backup and restore workflows\n- ISO download and cleanup\n- node, storage, and cluster inspection\n- SSH-backed container command execution with guardrails\n- persistent job tracking for async Proxmox tasks\n\n## What Makes It Different\n\n| Priority | How the project handles it |\n| --- | --- |\n| Dual access paths | Native MCP for agent workflows and OpenAPI for standard HTTP automation |\n| Proxmox-oriented workflows | Day-2 VM, LXC, snapshot, backup, ISO, storage, and cluster operations |\n| Long-running operations | Stable `job_id`s, Proxmox `UPID` tracking, polling, retry, cancel, and audit history |\n| Safer execution | Proxmox API tokens, OpenAPI bearer auth, command policy, approval tokens, TLS validation, and MCP HTTP Host/Origin controls |\n| Real validation | Unit, integration, Docker/OpenAPI, and live Proxmox e2e entry points are documented in the repo |\n\n## Quick Start\n\n### 1. Prepare Proxmox Credentials\n\nCreate a Proxmox API token with only the permissions your workflows need. Then create the local config file:\n\n```bash\ncp proxmox-config/config.example.json proxmox-config/config.json\n```\n\nThen edit `proxmox-config/config.json` with your environment. At minimum, it needs:\n\n- `proxmox.host`\n- `proxmox.port`\n- `auth.user`\n- `auth.token_name`\n- `auth.token_value`\n\nAdd an `ssh` section as well if you want container command execution.\nAdd a `jobs` section if you want job state persisted somewhere other than the default local SQLite file.\n\nFor real live verification, use a separate `proxmox-config/config.live.json` created from `proxmox-config/config.live.example.json`.\nDo not point live e2e at a placeholder or local-only `config.json` unless you intentionally run a local API tunnel there.\n\nOptional job persistence config:\n\n```json\n{\n  \"jobs\": {\n    \"sqlite_path\": \"proxmox-jobs.sqlite3\"\n  }\n}\n```\n\nOptional tool exposure filtering can reduce the schemas sent to MCP clients. It is\ndisabled by default, so existing configurations continue to expose every available\ntool. Configure exactly one mode under `mcp`:\n\n```json\n{\n  \"mcp\": {\n    \"tool_allowlist\": [\"get_nodes\", \"get_vms\", \"get_containers\", \"get_storage\"]\n  }\n}\n```\n\nAlternatively, use `tool_denylist`, or the comma-separated environment variables\n`MCP_TOOL_ALLOWLIST` and `MCP_TOOL_DENYLIST`. Do not configure both modes. Environment\nselection replaces the file-level filtering mode. An empty allowlist exposes no tools;\nan empty denylist hides none. Exact lowercase tool names are required, and unknown names\nfail startup so a typo cannot silently widen access. Restart or reconnect the MCP server\nafter changing the filter.\n\n### 2. Choose One Runtime Path\n\n| Path | Best for | Start command | Verify |\n| --- | --- | --- | --- |\n| MCP stdio from PyPI | Claude Desktop, Cursor, VS Code, Codex, local agents | `uvx proxmox-mcp-plus` | client lists `get_nodes`, `get_vms`, and job tools |\n| Native MCP HTTP from Docker | remote MCP clients that support Streamable HTTP | `docker compose --profile mcp-http up -d proxmox-mcp-http` | connect to `http://localhost:8000/mcp` |\n| OpenAPI bridge from Docker | HTTP clients, dashboards, scripts, no-code tools | `docker compose up -d` | `curl -f http://localhost:8811/livez` |\n\n#### MCP stdio with PyPI\n\n```bash\nuvx proxmox-mcp-plus\n```\n\nOr install it first:\n\n```bash\npip install proxmox-mcp-plus\nproxmox-mcp-plus\n```\n\nUse this path when the MCP client launches a local stdio server.\n\n#### Native MCP HTTP with Docker\n\nUse this path when a remote MCP client supports Streamable HTTP:\n\n```bash\nexport MCP_API_KEY=\"$(openssl rand -hex 32)\"\ndocker run --rm -p 8000:8000 \\\n  -e PROXMOX_MCP_MODE=mcp-http \\\n  -e MCP_HOST=0.0.0.0 \\\n  -e MCP_PORT=8000 \\\n  -e MCP_TRANSPORT=STREAMABLE_HTTP \\\n  -e MCP_API_KEY=\"$MCP_API_KEY\" \\\n  -v \"$(pwd)/proxmox-config/config.json:/app/proxmox-config/config.json:ro\" \\\n  ghcr.io/rekklesna/proxmoxmcp-plus:latest\n```\n\nPoint MCP clients at:\n\n```text\nhttp://<docker-host>:8000/mcp\n```\n\nSend `Authorization: Bearer <MCP_API_KEY>` with every MCP HTTP request. `MCP_API_KEY`\nis deliberately separate from the OpenAPI-only `PROXMOX_API_KEY`, so the two surfaces\ncan be rotated independently. If `MCP_API_KEY` is unset, Streamable HTTP remains\nunauthenticated for backward compatibility and logs a security warning at startup.\n\nWhen serving MCP HTTP behind a reverse proxy, keep DNS rebinding protection enabled and allow only the hostnames you expect:\n\n```bash\ndocker run --rm -p 8000:8000 \\\n  -e PROXMOX_MCP_MODE=mcp-http \\\n  -e MCP_HOST=0.0.0.0 \\\n  -e MCP_PORT=8000 \\\n  -e MCP_TRANSPORT=STREAMABLE_HTTP \\\n  -e MCP_API_KEY=\"$MCP_API_KEY\" \\\n  -e MCP_DNS_REBINDING_PROTECTION=true \\\n  -e MCP_ALLOWED_HOSTS=mcp.example.com:*,localhost:* \\\n  -e MCP_ALLOWED_ORIGINS=https://mcp.example.com \\\n  -v \"$(pwd)/proxmox-config/config.json:/app/proxmox-config/config.json:ro\" \\\n  ghcr.io/rekklesna/proxmoxmcp-plus:latest\n```\n\n#### OpenAPI bridge with Docker\n\nOpenAPI mode is the default Docker runtime and requires an API key:\n\n```bash\nexport PROXMOX_API_KEY=\"$(openssl rand -hex 32)\"\ndocker run --rm -p 8811:8811 \\\n  -e PROXMOX_API_KEY=\"$PROXMOX_API_KEY\" \\\n  -v \"$(pwd)/proxmox-config/config.json:/app/proxmox-config/config.json:ro\" \\\n  ghcr.io/rekklesna/proxmoxmcp-plus:latest\n```\n\nVerify the OpenAPI surface:\n\n```bash\ncurl -f http://localhost:8811/livez\ncurl -f -H \"Authorization: Bearer $PROXMOX_API_KEY\" http://localhost:8811/health\ncurl -H \"Authorization: Bearer $PROXMOX_API_KEY\" http://localhost:8811/openapi.json\n```\n\nFor local unauthenticated development only, set `PROXMOX_ALLOW_NO_AUTH=true`.\n\n#### Source checkout\n\n```bash\ngit clone https://github.com/RekklesNA/ProxmoxMCP-Plus.git\ncd ProxmoxMCP-Plus\nuv venv\nuv pip install -e \".[dev]\"\npython main.py\n```\n\nThe `8811` service is the OpenAPI/REST bridge. The `8000` service is the native MCP HTTP endpoint.\n\n## Client Install\n\nUse the one-click buttons when your client supports MCP install deeplinks, or copy the JSON config below.\n\n[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_Server-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=proxmox-mcp-plus&inputs=%5B%7B%22id%22%3A%22proxmox_host%22%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22Proxmox%20host%22%7D%2C%7B%22id%22%3A%22proxmox_user%22%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22Proxmox%20user%2C%20for%20example%20root%40pam%22%7D%2C%7B%22id%22%3A%22proxmox_token_name%22%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22Proxmox%20API%20token%20name%22%7D%2C%7B%22id%22%3A%22proxmox_token_value%22%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22Proxmox%20API%20token%20value%22%2C%22password%22%3Atrue%7D%5D&config=%7B%22command%22%3A%22uvx%22%2C%22args%22%3A%5B%22proxmox-mcp-plus%22%5D%2C%22env%22%3A%7B%22PROXMOX_HOST%22%3A%22%24%7Binput%3Aproxmox_host%7D%22%2C%22PROXMOX_USER%22%3A%22%24%7Binput%3Aproxmox_user%7D%22%2C%22PROXMOX_TOKEN_NAME%22%3A%22%24%7Binput%3Aproxmox_token_name%7D%22%2C%22PROXMOX_TOKEN_VALUE%22%3A%22%24%7Binput%3Aproxmox_token_value%7D%22%2C%22PROXMOX_VERIFY_SSL%22%3A%22true%22%7D%7D)\n[![Install in Cursor](https://img.shields.io/badge/Cursor-Install_Server-000000?style=flat-square)](https://cursor.com/en/install-mcp?name=proxmox-mcp-plus&config=eyJjb21tYW5kIjoidXZ4IHByb3htb3gtbWNwLXBsdXMiLCJlbnYiOnsiUFJPWE1PWF9IT1NUIjoieW91ci1wcm94bW94LWhvc3QiLCJQUk9YTU9YX1VTRVIiOiJyb290QHBhbSIsIlBST1hNT1hfVE9LRU5fTkFNRSI6Im1jcC10b2tlbiIsIlBST1hNT1hfVE9LRU5fVkFMVUUiOiJ5b3VyLXRva2VuLXNlY3JldCIsIlBST1hNT1hfVkVSSUZZX1NTTCI6InRydWUifX0=)\n\nRecommended stdio config:\n\n```json\n{\n  \"mcpServers\": {\n    \"proxmox-mcp-plus\": {\n      \"command\": \"uvx\",\n      \"args\": [\"proxmox-mcp-plus\"],\n      \"env\": {\n        \"PROXMOX_HOST\": \"your-proxmox-host\",\n        \"PROXMOX_USER\": \"root@pam\",\n        \"PROXMOX_TOKEN_NAME\": \"mcp-token\",\n        \"PROXMOX_TOKEN_VALUE\": \"your-token-secret\",\n        \"PROXMOX_PORT\": \"8006\",\n        \"PROXMOX_VERIFY_SSL\": \"true\"\n      }\n    }\n  }\n}\n```\n\nUse a local config file if you prefer not to keep credentials in the client config:\n\n```json\n{\n  \"mcpServers\": {\n    \"proxmox-mcp-plus\": {\n      \"command\": \"uvx\",\n      \"args\": [\"proxmox-mcp-plus\"],\n      \"env\": {\n        \"PROXMOX_MCP_CONFIG\": \"/path/to/ProxmoxMCP-Plus/proxmox-config/config.json\"\n      }\n    }\n  }\n}\n```\n\nClient-specific examples for Claude Desktop, Cursor, VS Code, Codex, OpenCode, Open WebUI, Streamable HTTP, and OpenAPI are in the [Client Setup Guide](docs/wiki/Client%20Setup.md) and [Integrations Guide](docs/wiki/Integrations%20Guide.md).\n\n## Demo\n\nThis demo is a direct terminal recording of `qwen/qwen3.6-plus` driving a live MCP session in English against a local Proxmox lab. It shows natural-language control flowing through MCP tools to create and start an LXC, execute a container command, and confirm the authenticated HTTP `/health` surface.\n\n![Recorded demo gif](docs/assets/proxmoxmcp-demo.gif)\n\n[Watch the MP4 version](docs/assets/proxmoxmcp-demo.mp4)\n\n## Choose The Right Tool\n\nStart with read-only discovery, then move to mutating tools only after the target node, storage, VMID, and permissions are clear.\n\n| Operator goal | Start with | Then use | Notes |\n| --- | --- | --- | --- |\n| Inspect the cluster | `get_nodes`, `get_cluster_status` | `get_storage`, `get_vms`, `get_containers` | Best first health check after client install |\n| Create or manage a VM | `get_nodes`, `get_storage` | `create_vm`, `start_vm`, `stop_vm`, `delete_vm` | Long-running mutations return `job_id` and Proxmox `task_id` |\n| Manage LXCs | `get_containers`, `get_storage` | `create_container`, `start_container`, `stop_container`, `delete_container` | SSH-backed command tools require the optional `ssh` config |\n| Roll back risky changes | `list_snapshots` with `vm_type=qemu` or `vm_type=lxc` | `create_snapshot`, `rollback_snapshot`, `delete_snapshot` | Create a snapshot before destructive workflow tests |\n| Run commands inside guests | VM or container status tools | `execute_vm_command`, `execute_container_command` | VM path needs QEMU Guest Agent; LXC path needs SSH to the Proxmox node |\n| Track async work | mutation response with `job_id` | `poll_job`, `get_job`, `list_jobs`, `retry_job`, `cancel_job` | Use `job_id` for agent/user conversations and `task_id` for raw Proxmox traceability |\n| Inspect logs | `get_node_syslog`, `get_cluster_log` | `get_task_log`, `get_node_firewall_log`, `get_guest_firewall_log` | All log tools are read-only; `get_task_log` accepts any Proxmox `UPID` |\n| Automate from HTTP tools | `/openapi.json` | `/jobs`, `/health`, generated tool routes | Use bearer auth and keep CORS restricted outside local development |\n\nFor the full tool map, see the [Tool Selection Guide](docs/wiki/Tool%20Selection%20Guide.md) and [API & Tool Reference](docs/wiki/API%20%26%20Tool%20Reference.md).\n\n## Safety Model\n\nProxmoxMCP-Plus is an access layer, not a replacement for Proxmox RBAC, network controls, or client-side MCP approval prompts.\n\nThe project gives operators several control points:\n\n- Proxmox API tokens decide what the backend can do.\n- `PROXMOX_API_KEY` protects the OpenAPI bridge by default.\n- `MCP_API_KEY` optionally protects the native Streamable HTTP `/mcp` endpoint with Bearer authentication.\n- TLS verification is enforced unless development mode is explicitly enabled.\n- `command_policy` controls command execution and high-risk operations.\n- `approval_token` can gate command execution and high-risk mutating actions.\n- MCP Streamable HTTP deployments can use DNS rebinding protection plus Host and Origin allowlists.\n- Optional MCP tool allowlists or denylists reduce the runtime tool surface; they do not replace Proxmox RBAC.\n- Logs are designed to avoid exposing command and credential material.\n\nRead the [Security Guide](docs/wiki/Security%20Guide.md) before exposing the server outside a trusted local environment.\n\n## Core Platform Capabilities\n\nProxmoxMCP-Plus provides a unified control surface for the operational tasks most teams actually need in Proxmox VE. The same server can expose these workflows to MCP clients for LLM and AI-agent use cases, and to HTTP consumers through the OpenAPI bridge.\n\nSupported workflow areas:\n\n| Capability Area | Availability |\n| --- | --- |\n| VM create / start / stop / delete | Available |\n| VM snapshot create / rollback / delete | Available |\n| Backup create / restore | Available |\n| ISO download / delete | Available |\n| LXC create / start / stop / delete | Available |\n| Container SSH-backed command execution | Available |\n| Container authorized_keys update | Available |\n| Persistent job store for long tasks | Available |\n| MCP job control tools (`list_jobs`, `get_job`, `poll_job`, `cancel_job`, `retry_job`) | Available |\n| OpenAPI `/jobs` endpoints with explicit status codes | Available |\n| Local OpenAPI `/livez`, `/readyz`, `/health`, and schema | Available |\n| Docker native MCP Streamable HTTP at `/mcp` | Available |\n| Docker image build and `/livez` | Available |\n\nValidation and contract entry points in this repository:\n\n- `pytest -q --cov=proxmox_mcp --cov-report=term-missing --cov-fail-under=75`\n- `ruff check .`\n- `mypy src --ignore-missing-imports`\n- `pip-audit -r requirements.txt`\n- `tests/integration/test_real_contract.py`\n- `tests/scripts/run_real_e2e.py`\n\n`tests/scripts/run_real_e2e.py` now prefers `proxmox-config/config.live.json` or `PROXMOX_MCP_E2E_CONFIG`.\nThis avoids accidentally running live checks against a machine-specific default `config.json`.\n\n## Long-Running Jobs\n\nMany Proxmox mutations are asynchronous. ProxmoxMCP-Plus now wraps those tasks in a persistent job layer so MCP and OpenAPI clients can track them through a stable `Job ID`.\n\nLong-running tools such as VM create/start/stop, container create/start/stop, snapshot changes, backup/restore, and ISO download/delete now return both:\n\n- `task_id`: the raw Proxmox `UPID`\n- `job_id`: the stable server-side job record\n\nThe job record stores:\n\n- current status and progress\n- retry count and prior `UPID`s\n- latest result payload or failure reason\n- audit history for create, poll, retry, and cancel actions\n\nBy default the job store persists to `proxmox-jobs.sqlite3`, so restart does not lose in-flight or completed job metadata.\n\n### MCP Job Tools\n\n- `list_jobs`\n- `get_job`\n- `poll_job`\n- `cancel_job`\n- `retry_job`\n\n### OpenAPI Job Routes\n\nWhen the OpenAPI proxy is enabled and a local `JobStore` is available, these routes are exposed directly:\n\n| Path | Method | Purpose | Success Codes |\n| --- | --- | --- | --- |\n| `/jobs` | `GET` | list persisted jobs | `200` |\n| `/jobs/{job_id}` | `GET` | fetch one job, optional `refresh=true` | `200` |\n| `/jobs/{job_id}/poll` | `POST` | refresh status from Proxmox | `200` |\n| `/jobs/{job_id}/cancel` | `POST` | request cancellation | `202` |\n| `/jobs/{job_id}/retry` | `POST` | replay a stored retry recipe | `202` |\n\nCommon error codes:\n\n- `404`: unknown `job_id`\n- `409`: the job exists but that operation is not valid now\n- `503`: the OpenAPI proxy was started without a local `JobStore`\n\n`tests/scripts/run_real_e2e.py` now prefers `proxmox-config/config.live.json` or `PROXMOX_MCP_E2E_CONFIG`.\nThis avoids accidentally running live checks against a machine-specific default `config.json`.\n\n## Positioning Against Common Approaches\n\n| Capability | Official Proxmox API | One-off scripts | ProxmoxMCP-Plus |\n| --- | --- | --- | --- |\n| MCP for LLM and AI agent workflows | No | No | Yes |\n| OpenAPI surface for standard HTTP tooling | No | Usually no | Yes |\n| VM and LXC operations in one interface | Low-level only | Depends | Yes |\n| Snapshot, backup, and restore workflows | Low-level only | Depends | Yes |\n| Persistent async job tracking and retry | No | Rare | Yes |\n| Container command execution with policy controls | No | Custom only | Yes |\n| Docker distribution path | No | Rare | Yes |\n| Repository-level live-environment verification | N/A | Rare | Yes |\n\n## Scenario Templates\n\nReady-to-copy examples live in [`docs/examples/`](docs/examples/README.md):\n\n- [Create a test VM](docs/examples/create-test-vm.md)\n- [Roll back a risky change with snapshots](docs/examples/rollback-snapshot.md)\n- [Download an ISO and create an LXC](docs/examples/download-iso-and-create-lxc.md)\n\nThese are written for both human operators and LLM-driven usage.\n\n## Documentation\n\nThe README is intentionally optimized for fast GitHub comprehension. Longer operational docs live in `docs/wiki/` and can also be published to the GitHub Wiki.\n\n| If you need to... | Start here |\n| --- | --- |\n| Understand the project and deployment flow | [Wiki Home](docs/wiki/Home.md) |\n| Configure and run against a Proxmox environment | [Operator Guide](docs/wiki/Operator%20Guide.md) |\n| Connect Claude Desktop, Cursor, VS Code, Codex, Open WebUI, or HTTP clients | [Client Setup Guide](docs/wiki/Client%20Setup.md) |\n| Choose the right tool for a workflow | [Tool Selection Guide](docs/wiki/Tool%20Selection%20Guide.md) |\n| Review docs quality goals, media plan, and publishing checklist | [Documentation Quality Plan](docs/wiki/Documentation%20Quality%20Plan.md) |\n| Review integration patterns and transport details | [Integrations Guide](docs/wiki/Integrations%20Guide.md) |\n| Install from MCP-aware IDEs and agents | [Agent Installation](docs/agent-installation.md) |\n| Enable LXC command execution over SSH | [Container Command Execution](docs/container-command-execution.md) |\n| Review security and command policy | [Security Guide](docs/wiki/Security%20Guide.md) |\n| Inspect tool parameters, prerequisites, and behavior | [API & Tool Reference](docs/wiki/API%20%26%20Tool%20Reference.md) |\n| Debug startup, auth, or health issues | [Troubleshooting](docs/wiki/Troubleshooting.md) |\n| Work on the codebase or release it | [Developer Guide](docs/wiki/Developer%20Guide.md) |\n| Review release and upgrade notes | [Release & Upgrade Notes](docs/wiki/Release%20%26%20Upgrade%20Notes.md) |\n\nPublished wiki:\n\n- [GitHub Wiki Home](https://github.com/RekklesNA/ProxmoxMCP-Plus/wiki/Home)\n\n## Repo Layout\n\n- `src/proxmox_mcp/`: MCP server, config loading, security, OpenAPI bridge\n- `main.py`: MCP entrypoint for local and client-driven usage\n- `docker-compose.yml`: HTTP/OpenAPI runtime\n- `requirements/`: auxiliary dependency sources and runtime install lists\n- `scripts/`: helper startup scripts for local workflows\n- `tests/scripts/run_real_e2e.py`: live Proxmox and Docker/OpenAPI path\n- `tests/`: unit and integration coverage\n- `docs/examples/`: scenario-driven prompts and HTTP examples\n- `docs/wiki/`: longer-form operator, integration, and reference docs\n\n## Development Checks\n\n```bash\npytest -q --cov=proxmox_mcp --cov-report=term-missing --cov-fail-under=75\nruff check .\nmypy src --ignore-missing-imports\npip-audit -r requirements.txt\npython -m build\n```\n\nParamiko 5.0.0 or newer is required so `pip-audit` can run without a `CVE-2026-44405` exception.\n\n## License\n\n[MIT](LICENSE)\n",
  "bytes": 21173,
  "sha": "bbc461fea131fe76ed4665bc1d4d55df5ebd39afce0375780b8ce8be3ee692be",
  "repo_slug": "rekklesna/proxmoxmcp-plus",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_rekklesna_proxmox_mcp_plus_bfc50422/readme"
}