12 KiB
Установка Proxmox MCP-сервера и подключение к Open WebUI
Инструкция под твою инфраструктуру: pve (192.168.31.2), kybinka (192.168.1.10), pve1 (192.168.31.4), TrueNAS (192.168.31.100, там же крутится Open WebUI).
Используем проект ProxmoxMCP-Plus — он умеет работать сразу в двух режимах:
- родной MCP (для Claude Desktop, Cursor и т.д.)
- OpenAPI-мост — именно он нужен для Open WebUI, потому что Open WebUI не умеет подключаться к MCP напрямую, а понимает только обычный HTTP/OpenAPI.
⚠️ Важный момент про архитектуру
Твои три Proxmox-узла (pve, kybinka, pve1) — это не один кластер, а три независимых сервера в разных подсетях. Один MCP-контейнер умеет говорить только с одним Proxmox API за раз. Значит, чтобы управлять всеми тремя из чата, нужно поднять три отдельных контейнера (по одному на узел), каждый на своём порту, и подключить их к Open WebUI как три отдельных инструмента.
TrueNAS отдельно — это не Proxmox, и ProxmoxMCP-Plus с ним не работает. Управлять TrueNAS через тот же чат — отдельная задача (нужен другой MCP-сервер, для TrueNAS API). Ниже — только про Proxmox-узлы, но покажу, где ты потом можешь добавить TrueNAS-инструмент рядом.
Разворачивать контейнеры удобнее всего на TrueNAS — там уже крутится Open WebUI, сервер работает постоянно, и можно поднимать Docker-контейнеры через Dockge.
Шаг 1. Создать API-токен на каждом Proxmox-узле
Токен создаётся отдельно на каждом из трёх узлов (pve, kybinka, pve1), заходишь в веб-интерфейс каждого по отдельности.
- Открой веб-интерфейс узла, например
https://192.168.31.2:8006. - Слева: Datacenter → Permissions → API Tokens.
- Нажми Add:
- User:
root@pam(для учёбы ок, в проде лучше завести отдельного пользователя с ограниченными правами) - Token ID:
mcp-token - сними галку "Privilege Separation" (иначе токену нужно отдельно назначать права)
- User:
- Нажми Add, скопируй Token ID и Secret — секрет показывается один раз, сохрани его сразу в текстовый файл.
Повтори для kybinka и pve1. В итоге у тебя будет 3 пары user@realm!token-name + secret.
Шаг 2. Подготовить конфиги на TrueNAS
Зайди на TrueNAS по SSH (или через Shell в веб-интерфейсе), создай папку для конфигов:
mkdir -p /mnt/ssd/apps/mcp/{pve,kybinka,pve1}
(используется пул ssd; если у тебя он смонтирован по другому пути или ты хочешь другой пул — замени /mnt/ssd на свой).
Создай конфиг для узла pve:
cat > /mnt/ssd/apps/mcp/pve/config.json << 'EOF'
{
"proxmox": {
"host": "192.168.31.2",
"port": 8006,
"verify_ssl": false
},
"auth": {
"user": "root@pam",
"token_name": "mcp-token",
"token_value": "СЮДА_СЕКРЕТ_ТОКЕНА_PVE"
}
}
EOF
Аналогично создай config.json в папках kybinka (host 192.168.1.10) и pve1 (host 192.168.31.4), с соответствующими токенами.
verify_ssl: false— потому что у Proxmox самоподписанный сертификат по умолчанию. Для учебного стенда это нормально.
Шаг 3. Запустить три контейнера через Dockge
Вместо запуска через Shell создай один Stack (стек) в веб-интерфейсе Dockge. Все три контейнера будут управляться из одного стека.
-
Открой Dockge в браузере.
-
Нажми Create Stack (или +).
-
Введи имя стека, например
proxmox-mcp. -
В качестве рабочей директории стека укажи:
/mnt/ssd/apps/mcpЕсли Dockge уже использует собственную корневую директорию для стеков, выбери или создай каталог, соответствующий этому пути. Важно, чтобы каталоги
pve,kybinkaиpve1с файламиconfig.jsonнаходились внутри рабочей директории стека. -
В редакторе compose-файла вставь следующий конфиг:
services:
proxmox-mcp-pve:
image: ghcr.io/rekklesna/proxmoxmcp-plus:latest
container_name: proxmox-mcp-pve
restart: unless-stopped
ports:
- "8811:8811"
environment:
PROXMOX_API_KEY: ключ-для-pve-придумай-любой-длинный
volumes:
- /mnt/ssd/apps/mcp/pve/config.json:/app/proxmox-config/config.json:ro
proxmox-mcp-kybinka:
image: ghcr.io/rekklesna/proxmoxmcp-plus:latest
container_name: proxmox-mcp-kybinka
restart: unless-stopped
ports:
- "8812:8811"
environment:
PROXMOX_API_KEY: ключ-для-kybinka-придумай-любой-длинный
volumes:
- /mnt/ssd/apps/mcp/kybinka/config.json:/app/proxmox-config/config.json:ro
proxmox-mcp-pve1:
image: ghcr.io/rekklesna/proxmoxmcp-plus:latest
container_name: proxmox-mcp-pve1
restart: unless-stopped
ports:
- "8813:8811"
environment:
PROXMOX_API_KEY: ключ-для-pve1-придумай-любой-длинный
volumes:
- /mnt/ssd/apps/mcp/pve1/config.json:/app/proxmox-config/config.json:ro
- Замени значения
ключ-для-*на собственные длинные ключи. Ключи можно сгенерировать заранее командой:
openssl rand -hex 32
Команду можно выполнить на любом компьютере, где установлен OpenSSL. Для каждого контейнера используй отдельный ключ. 7. Нажми Save. 8. Нажми Deploy / Up / Start — название кнопки зависит от версии Dockge.
После запуска в Dockge должны появиться три контейнера:
proxmox-mcp-pve— порт8811;proxmox-mcp-kybinka— порт8812;proxmox-mcp-pve1— порт8813.
Если Dockge не может найти
config.json, проверь, что рабочая директория стека действительно/mnt/ssd/apps/mcp, а файлы находятся по адресам/mnt/ssd/apps/mcp/pve/config.json,/mnt/ssd/apps/mcp/kybinka/config.jsonи/mnt/ssd/apps/mcp/pve1/config.json.
Шаг 4. Проверить, что контейнеры работают
Проверку можно выполнить через встроенный Terminal/Shell TrueNAS или другим компьютером в сети:
curl -f http://192.168.31.100:8811/livez # pve
curl -f http://192.168.31.100:8812/livez # kybinka
curl -f http://192.168.31.100:8813/livez # pve1
Каждый должен ответить 200 OK. Дальше проверь авторизованный доступ (подставь свой ключ и порт):
curl -H "Authorization: Bearer ключ-для-pve" http://192.168.31.100:8811/health
Если видишь {"status":"ok"} (или похожее) — контейнер видит Proxmox API.
Шаг 5. Подключить к Open WebUI
Раз Open WebUI и MCP-контейнеры теперь на одной машине (TrueNAS), обращаться можно либо по localhost, либо по IP TrueNAS — зависит от того, в одной ли они Docker-сети. Проще всего указывать IP: 192.168.31.100.
- Зайди в Open WebUI → Settings (шестерёнка) → Admin Settings → Tools (в некоторых версиях — Workspace → Tools, а сами инструменты подключаются как "OpenAPI Tool Server").
- Нажми Add Tool Server (или "+"):
- URL:
http://192.168.31.100:8811/openapi.json - Auth: Bearer, вставь ключ
ключ-для-pve - Имя — например
Proxmox pve
- URL:
- Повтори для kybinka (
http://192.168.31.100:8812/openapi.json) и pve1 (http://192.168.31.100:8813/openapi.json), каждый со своим ключом и понятным именем. - Сохрани. В списке моделей/чата должна появиться возможность включить эти инструменты (обычно — иконка инструментов рядом с полем ввода сообщения, там выбираешь, какие серверы разрешить в конкретном чате).
Шаг 6. Проверка в чате
Открой новый чат в Open WebUI, включи инструмент Proxmox pve, и напиши что-то вроде:
Покажи список нод и виртуальных машин на pve
Если всё настроено верно, модель вызовет get_nodes / get_vms и покажет актуальные данные (например, VM haos-16.1 и LXC mariadb, Panel — как в твоей инвентаризации).
Частые проблемы
| Симптом | Причина |
|---|---|
| Инструмент не появляется в Open WebUI | Проверь, что URL заканчивается на /openapi.json, а не просто на /docs |
| 401 Unauthorized | Ключ Bearer в Open WebUI не совпадает с PROXMOX_API_KEY в compose-файле Dockge |
| Контейнер падает при старте | Опечатка в config.json (проверь логи контейнера в Dockge) |
| Модель "не видит" VM | Токен Proxmox создан с "Privilege Separation" — права токена ограничены, пересоздай без этой галки или явно выдай права в Datacenter → Permissions |
Что дальше
- Если захочешь и изменять серверы (создавать/удалять VM), а не только смотреть — это уже доступно из коробки, но советую сначала потренироваться на
pve1(он у тебя простаивает и ничего важного там нет). - Для управления TrueNAS из того же чата понадобится отдельный MCP/OpenAPI-сервер под TrueNAS API — если нужно, могу подобрать и расписать так же подробно.