Files
proxmox-mcp-setup/proxmox-mcp-open-webui-setup.md
T

7.2 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 с OpenAPI-интерфейсом для Open WebUI.

Архитектура

Узлы pve, kybinka и pve1 — независимые Proxmox-серверы. Для каждого узла запускается отдельный MCP-контейнер с отдельным портом.


Шаг 1. Создать API-токен на каждом Proxmox-узле

На каждом Proxmox-сервере отдельно открой Datacenter → Permissions → API Tokens и создай токен.

  • User: root@pam;
  • Token ID должен точно совпадать со значением auth.token_name;
  • сохрани Secret, который показывается только один раз.

Повтори операцию для kybinka и pve1.


Шаг 2. Подготовить конфиги на TrueNAS

Создай каталоги:

mkdir -p /mnt/ssd/apps/mcp/{pve,kybinka,pve1}

Для самоподписанных сертификатов Proxmox используй verify_ssl: false и security.dev_mode: true.

Конфигурация 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": "openwebui-token",
    "token_value": "СЕКРЕТНЫЙ_ТОКЕН_PVE"
  },
  "logging": {
    "level": "INFO"
  },
  "security": {
    "dev_mode": true
  }
}
EOF

Конфигурация kybinka

cat > /mnt/ssd/apps/mcp/kybinka/config.json << 'EOF'
{
  "proxmox": {
    "host": "192.168.1.10",
    "port": 8006,
    "verify_ssl": false
  },
  "auth": {
    "user": "root@pam",
    "token_name": "open-webui",
    "token_value": "СЕКРЕТНЫЙ_ТОКЕН_KYBINKA"
  },
  "logging": {
    "level": "INFO"
  },
  "security": {
    "dev_mode": true
  }
}
EOF

Конфигурация pve1

cat > /mnt/ssd/apps/mcp/pve1/config.json << 'EOF'
{
  "proxmox": {
    "host": "192.168.31.4",
    "port": 8006,
    "verify_ssl": false
  },
  "auth": {
    "user": "root@pam",
    "token_name": "open-webui",
    "token_value": "СЕКРЕТНЫЙ_ТОКЕН_PVE1"
  },
  "logging": {
    "level": "INFO"
  },
  "security": {
    "dev_mode": true
  }
}
EOF

Проверь JSON-файлы:

python3 -m json.tool /mnt/ssd/apps/mcp/pve/config.json
python3 -m json.tool /mnt/ssd/apps/mcp/kybinka/config.json
python3 -m json.tool /mnt/ssd/apps/mcp/pve1/config.json

Шаг 3. Запустить три контейнера через Dockge

В Dockge создай один Stack proxmox-mcp с рабочей директорией:

/mnt/ssd/apps/mcp

Используй один 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

Нажми Save, затем Down и Deploy/Up.


Шаг 4. Проверить контейнеры

curl -f http://192.168.31.100:8811/livez
curl -f http://192.168.31.100:8812/livez
curl -f http://192.168.31.100:8813/livez

Проверка авторизации OpenAPI:

curl -H "Authorization: Bearer ЗАМЕНИТЬ_КЛЮЧ_PVE" \
  http://192.168.31.100:8811/health

Шаг 5. Подключить к Open WebUI

В текущем интерфейсе Open WebUI добавление OpenAPI-серверов выполняется не через раздел Инструменты и не через кнопку Новый инструмент.

Используй следующий путь:

Настройки → Интеграции → External Tool Servers → «+»

В открывшейся форме добавь сервер pve:

Название: Proxmox pve
URL: http://192.168.31.100:8811/openapi.json
Авторизация: Bearer
Токен: значение PROXMOX_API_KEY для proxmox-mcp-pve

Нажми Сохранить.

Затем добавь два остальных сервера:

Название: Proxmox kybinka
URL: http://192.168.31.100:8812/openapi.json
Авторизация: Bearer
Токен: значение PROXMOX_API_KEY для proxmox-mcp-kybinka
Название: Proxmox pve1
URL: http://192.168.31.100:8813/openapi.json
Авторизация: Bearer
Токен: значение PROXMOX_API_KEY для proxmox-mcp-pve1

Важно:

  • нажимай «+» именно в строке External Tool Servers;
  • не используй «+» возле Open Terminal;
  • не используй Новый инструмент на странице пользовательских Tools;
  • для каждого сервера указывай отдельный Bearer-токен из compose-файла;
  • PROXMOX_API_KEY — это ключ OpenAPI-сервера, он отличается от auth.token_value в config.json.

После сохранения открой новый чат, нажми значок инструментов и включи нужный сервер, например Proxmox pve.


Диагностика

Если появляется ошибка Insecure TLS configuration blocked, проверь наличие блока:

"security": {
  "dev_mode": true
}

Если появляется McpError: Connection closed, сначала ищи выше в логе первичную ошибку конфигурации.

Проверка volume-маунта:

docker inspect proxmox-mcp-pve \
  --format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}'

Ожидаемый результат:

/mnt/ssd/apps/mcp/pve/config.json -> /app/proxmox-config/config.json

Не публикуй реальные значения PROXMOX_API_KEY и auth.token_value в чат или репозиторий. Если они были опубликованы, их следует заменить.