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

7.8 KiB
Raw Permalink Blame History

Установка 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 соответствующего config.json;
  • сохрани Secret, который показывается только один раз.

Шаг 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

Важно:

  • auth.token_value — Secret API-токена Proxmox из config.json;
  • PROXMOX_API_KEY — отдельный ключ OpenAPI из compose/Dockge, который используется в Open WebUI как Bearer-токен.

Шаг 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

Для каждого сервиса используй отдельный ключ. Ключ можно сгенерировать командой:

openssl rand -hex 32

В Dockge нажми 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 для pve:

curl -H "Authorization: Bearer КЛЮЧ_ИЗ_PROXMOX_API_KEY_PVE" \
  http://192.168.31.100:8811/health

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

В Open WebUI перейди:

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

Важно: в основном поле URL указывается только базовый адрес сервера. Не добавляй к нему /openapi.json, потому что Open WebUI добавляет путь спецификации отдельно.

Сервер pve

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

Итоговый адрес спецификации должен быть:

http://192.168.31.100:8811/openapi.json

Сервер kybinka

Название: Proxmox kybinka
URL: http://192.168.31.100:8812
Авторизация: Bearer
Токен: значение PROXMOX_API_KEY из сервиса proxmox-mcp-kybinka в Dockge
Спецификация OpenAPI: openapi.json

Итоговый адрес:

http://192.168.31.100:8812/openapi.json

Сервер pve1

Название: Proxmox pve1
URL: http://192.168.31.100:8813
Авторизация: Bearer
Токен: значение PROXMOX_API_KEY из сервиса proxmox-mcp-pve1 в Dockge
Спецификация OpenAPI: openapi.json

Итоговый адрес:

http://192.168.31.100:8813/openapi.json

Не используй для авторизации значение auth.token_value из config.json. Это секрет подключения MCP-сервера к Proxmox, а не ключ OpenAPI.

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


Диагностика

Если Open WebUI формирует адрес вида:

http://192.168.31.100:8811/openapi.json/openapi.json

замени URL сервера на базовый:

http://192.168.31.100:8811

а в поле спецификации оставь только:

openapi.json

Если появляется Invalid API key, Bearer-токен Open WebUI не совпадает с PROXMOX_API_KEY соответствующего контейнера Dockge.

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

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