Skip to main content
Glama

proxmox-ve-mcp

Сервер MCP, который предоставляет один или несколько хостов Proxmox VE в виде инструментов, которые может вызывать LLM-клиент: инвентаризация узлов, гостевых систем, хранилищ и сетевых мостов, чтение текущего состояния, а также создание, клонирование, запуск, остановка и удаление виртуальных машин и контейнеров.

Он использует MCP через Streamable HTTP, поэтому работает как собственный сервис в сети, а не как локальный подпроцесс одного клиента.

Создан для universal-network-director, чат-ориентированного мультивендорного сетевого менеджера с этапом одобрения человеком для каждой операции записи — но это самостоятельный MCP-сервер и работает с любым MCP-клиентом.

Не аффилирован, не одобрен и не поддерживается компанией Proxmox Server Solutions GmbH. «Proxmox» и «Proxmox VE» являются товарными знаками соответствующих владельцев и используются здесь только для описания того, с чем взаимодействует это программное обеспечение.


Прочтите это, прежде чем направлять его на продуктивную среду

Двенадцать из двадцати четырех инструментов изменяют состояние, и этот сервер не спрашивает перед их выполнением. Нет подтверждения и нет пробного запуска. Если модель решает вызвать один из них, это происходит.

Инструмент

Что делает

Риск

write_set_vm_description

Устанавливает поле заметок гостевой системы

Косметический. Обратимо.

write_start_vm

Включает гостевую систему

Низкий.

write_shutdown_vm

ACPI-выключение — гостевая ОС выключается сама

Выводит рабочую нагрузку из сети. Чисто.

write_reboot_vm

Чистая перезагрузка гостевой системы

Кратковременно выводит рабочую нагрузку из сети.

write_stop_vm

Немедленное отключение питания, как выдергивание шнура

Выводит рабочую нагрузку из сети, нечисто. Риск повреждения файловой системы.

write_clone_vm

Клонирует гостевую систему в новый vmid

Потребляет хранилище. Исходная система не затрагивается.

write_create_vm_from_image

Создает ВМ из подготовленного образа диска

Потребляет хранилище и vmid.

write_create_vm_from_iso

Создает ВМ с пустым диском, загружающим установочный ISO

Потребляет хранилище и vmid.

write_download_image

Загружает образ диска по URL в хранилище import

Потребляет хранилище и исходящий трафик.

write_delete_image

Удаляет подготовленный образ, ISO или шаблон

Разрушительно. Отказывает, если гостевая система все еще его использует.

write_set_vm_nic_bridge

Подключает гостевой сетевой интерфейс к мосту или отключает его

Может переместить работающую гостевую систему в неправильный сегмент — или отключить от сети.

write_delete_vm

Навсегда удаляет гостевую систему и ее диски

Разрушительно и необратимо. Нет снимка, нет отмены.

Три способа справиться с этим, в порядке их реальной полезности:

  1. Ограничьте API-токен Proxmox только чтением. Это реальный контроль, и он находится на Proxmox, а не в этом коде. Дайте токену встроенную роль PVEAuditor на пути /, и каждый инструмент записи будет терпеть неудачу на уровне API, независимо от того, что решит любая модель. Делайте так, если вы специально не хотите, чтобы операции записи работали.

  2. Используйте список запрещенных гостевых систем. config/protected-vms.json содержит гостевые системы, к которым инструменты записи отказываются прикасаться, проверка выполняется локально до любого вызова бэкенда — поэтому она действует, даже если человек случайно что-то одобрил. Отсутствующий или нечитаемый файл запрещает любую запись гостевой системы, а не молча ничего не защищает. См. ниже.

  3. Ограничьте операции записи в вашем клиенте. Каждый инструмент, изменяющий состояние, имеет префикс write_. Этот префикс является соглашением данной кодовой базы именно для того, чтобы клиент мог сопоставлять его и направлять такие вызовы через этап одобрения человеком перед выполнением. Этот сервер намеренно не делает этого сам — у него нет пользователя, которого можно спросить.

Related MCP server: proxmox-mcp

Конечная точка MCP не имеет аутентификации

Этот сервер предоставляет свои инструменты любому, кто может достичь его порта. Нет токена, нет аутентификации клиента, нет TLS на стороне MCP.

MCP_HOST по умолчанию равен 127.0.0.1 по этой причине. Образ контейнера устанавливает 0.0.0.0, потому что это необходимо, что означает, что публикация порта контейнера открывает неаутентифицированную панель управления для ваших гипервизоров на этом интерфейсе. Держите его во внутренней сети с клиентом или завершайте TLS и аутентификацию перед ним.


Многопоточность по дизайну

Кластеры Proxmox используют один API, но многие конфигурации используют несколько автономных хостов в разных подсетях без кластеризации между ними. Этот сервер хранит одно соединение на хост, привязанное к короткой произвольной метке, и каждый инструмент использует эту метку для выбора хоста, с которым нужно взаимодействовать.

Хост определяется парой переменных окружения:

PROXMOX_SERVER1_URL=https://pve1.example.com:8006
PROXMOX_SERVER1_TOKEN='automation@pve!mcp=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

<МЕТКА> в PROXMOX_<МЕТКА>_URL, приведенная к нижнему регистру, становится значением host, которое принимают инструменты (server1 выше). Добавьте третий хост, добавив третью пару — без изменения кода. Называйте их по сайту, чтобы модель и логи читались четко.

Токен — это вся строка user@realm!tokenid=secret, показанная один раз при создании в разделе Datacenter → Permissions → API Tokens. Аутентификация не имеет состояния: каждый запрос несет заголовок Authorization: PVEAPIToken=.... Нет вызова входа в систему и нет CSRF-токена — это путь сессии с именем пользователя/паролем, который намеренно не используется.

Установите PROXMOX_VERIFY_TLS=false для хостов с самоподписанными сертификатами. По умолчанию включено.

Список запрещенных гостевых систем

config/protected-vms.json монтируется только для чтения в контейнер и содержит гостевые системы, к которым инструменты записи никогда не должны прикасаться:

{
  "protected_vms": [
    {
      "host": "server1",
      "vmid": 100,
      "name": "example-mcp-host",
      "reason": "EXAMPLE -- the VM this MCP server itself runs in"
    }
  ]
}

host — это метка из list_hosts, а не имя узла Proxmox. reason показывается дословно в отказе, поэтому пишите его для того, кто с ним столкнется.

Этот файл предназначен для отслеживания в git. Изначально он был переменной окружения в неотслеживаемом .env, что означало, что защита не сохранялась после свежего клонирования, а пустой список выглядел точно так же, как заполненный. Теперь отсутствующий или нечитаемый файл запрещает любую запись гостевой системы; пустой список разрешен, но выводит громкое предупреждение при запуске.

Записи, поставляемые здесь, являются примерами. Замените их, прежде чем направлять это на что-то, что вам дорого.


Запуск

docker build -t proxmox-ve-mcp .
docker run --rm \
  -e PROXMOX_SERVER1_URL=https://pve1.example.com:8006 \
  -e PROXMOX_SERVER1_TOKEN='automation@pve!mcp=...' \
  -e PROXMOX_VERIFY_TLS=false \
  -v "$PWD/config/protected-vms.json:/app/config/protected-vms.json:ro" \
  -p 127.0.0.1:8002:8002 \
  proxmox-ve-mcp

Или укажите pip install -r requirements.txt в virtualenv и запустите python server.py напрямую.

Переменная

Значение по умолчанию

Значение

PROXMOX_<МЕТКА>_URL

—

Корень API хоста, например https://pve1.example.com:8006

PROXMOX_<МЕТКА>_TOKEN

—

Полная строка user@realm!tokenid=secret

PROXMOX_VERIFY_TLS

true

Установите false для самоподписанных сертификатов (только лаборатория)

PROXMOX_PROTECTED_VMS

не установлено

Запасной вариант (метка:vmid,...), который добавляет к JSON-списку запрещенных

PROXMOX_PROTECTED_VMS_FILE

/app/config/protected-vms.json

Путь к файлу списка запрещенных

MCP_HOST

127.0.0.1

Адрес привязки (образ устанавливает 0.0.0.0)

MCP_PORT

8002

Порт привязки

Тесты

Автономные скрипты, без pytest. Запускайте их в контейнере, чтобы они имели окружение PROXMOX_*, необходимое клиенту:

docker run --rm proxmox-ve-mcp python test_network_bridges.py
docker run --rm proxmox-ve-mcp python test_media_in_use.py
docker run --rm proxmox-ve-mcp python test_client.py

Автономные разделы используют вымышленные списки интерфейсов и гостевых систем и проходят без настроенных хостов. Разделы реального времени читают то, на что указывают ваши переменные PROXMOX_*, и чисто пропускаются, когда ничего не настроено — укажите их на реальный хост, чтобы проверить единственное различие, которое нельзя подделать: подключен ли мост к внешней сети или изолирован.

Заметки по дизайну

  • /cluster/resources — основа инвентаризации. Один вызов возвращает каждую ВМ, контейнер, узел и хранилище, уже помеченные своим узлом, vmid и типом. Это работает и на автономном хосте (он сообщает об этом одном узле), поэтому используется вместо обхода /nodes → /nodes/{node}/qemu на каждый узел.

  • list_network_bridges существует, потому что сетевой интерфейс не на том мосту — это гостевая система, до которой вы не можете добраться. Он сообщает, для каждого моста, есть ли у него порт-член (способ покинуть коробку) или это изолированный сегмент — различие, которое решает, будет ли новая ВМ доступна.

  • Теги VLAN закрываются с ошибкой. tag= на мосту, который не является bridge_vlan_aware, принимается Proxmox, а затем молча не переносится — немаркированный трафик там, где требовалась изоляция. Пути записи отказывают в этом, а не предупреждают, и отказывают, если не могут прочитать список мостов для проверки.

  • Операции записи асинхронны. Большинство возвращает UPID Proxmox; опрашивайте его с помощью get_task_status, а не предполагайте завершение.

  • Операции записи гостевых систем выполняются за одной защитой. Один обертка выполняет проверку защищенной ВМ и разрешение vmid→узел/тип, поэтому отдельный инструмент не может забыть защиту и не может достичь бэкенда для защищенной гостевой системы.

Лицензия

Apache-2.0. См. LICENSE.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    An open-source MCP server for managing Proxmox environments, including nodes, virtual machines, and containers. It enables users to perform inventory checks, status monitoring, and control operations directly through MCP-compatible tools.
    87 npm
    1
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    An MCP server that exposes Proxmox VE node/cluster as tools for MCP clients, enabling management of VMs and containers including power control, resource reconfiguration, snapshots, and backups.
    20
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for Proxmox VE and Proxmox Datacenter Manager, covering every API endpoint via six consolidated tools for list, describe, and call operations with a read-only safety gate.
    6
    27 npm
    2
    AGPL 3.0
  • F
    license
    Not graded
    quality
    B
    maintenance
    Policy-aware MCP server for Proxmox VE that maps the official API schema to MCP tools, enabling node health, disk, network, journal, updates, guest configuration, snapshots, backups, consoles, task lifecycle, service, command, and file-transfer operations with role-based access control.
    1
    -