Документация/Интеграции и безопасность
ТЕХНИЧЕСКИЙ СПРАВОЧНИК

Интеграции и безопасность

Технический справочник: настройка AI и безопасный доступ к MCP.

Граница безопасности

Справочник описывает версию исходников, а не настройки безопасности публичного ERP. Не предполагается, что MCP доступен публично. Исходная реализация использует общую сервисную учётную запись без аутентификации отдельных операторов и фильтрации по их ролям. Оставляйте MCP в закрытом контуре; для публикации нужен слой аутентификации и проверки прав. Режим чтения не делает доступ безопасным для всего интернета.

Настройка встроенного ассистента

Встроенному ассистенту нужен OPENAI_API_KEY на сервере ERP. Не размещайте ключ на сайте-визитке, в браузерном коде или переменной VITE_. Встроенный ассистент проверяет права оператора и требует подтверждения изменений. Это отдельный от MCP механизм.

Что это и для чего

Отдельный от основного API endpoint /mcp на бэкенде — это Streamable HTTP MCP-сервер, который отдаёт внешним ИИ-клиентам (в первую очередь ChatGPT в режиме разработчика/коннектора) только чтение данных Vyrab, без входа под учётной записью оператора и без применения ролей/прав из RBAC: запрос к platform-core выполняется от имени общего сервисного API-ключа приложения, а не конкретного человека. Предназначение — дать внешнему ИИ (например, ChatGPT, куда сотрудник обращается за пределами самого Vyrab) возможность быстро посмотреть номенклатуру, производственные заказы и остатки, не заходя в приложение.

Доступные инструменты

Инструмент Что делает
search Полнотекстовый поиск по номенклатуре, производственным заказам и договорам (platform-core)
fetch Получить один объект по идентификатору вида part:<uuid>, production_order:<uuid> или contract:<uuid>, возвращённому search
list_production_orders Список производственных заказов, опционально с фильтром по статусу (draft/planning/in_production/done/canceled)
get_inventory Номенклатура и текущие материализованные остатки склада по названию/артикулу, включая остаток за вычетом минимального резерва

Все четыре инструмента помечены как read-only (readOnlyHint, destructiveHint: false) на уровне MCP-протокола — ChatGPT видит их как безопасные для вызова без явного подтверждения человеком. Ссылки в ответах ведут на карточку объекта в веб-интерфейсе Vyrab (адрес собирается из MCP_UI_BASE_URL).

Как включить и проверить

  1. Backend по умолчанию уже публикует /mcp — отдельно включать нечего, MCP-сервер поднимается вместе с обычным API.
  2. Локально/для проверки: npx @modelcontextprotocol/inspector, в Inspector выбрать транспорт Streamable HTTP и указать http://localhost:8000/mcp. Список инструментов и их схемы можно вызвать прямо в Inspector, не подключая ChatGPT.
  3. Подключение из ChatGPT — как коннектор/developer mode на тот же URL (http(s)://<хост backend>/mcp).

Настройка (переменные окружения)

Переменная Назначение Значение по умолчанию
MCP_UI_BASE_URL Публичный адрес веб-интерфейса Vyrab, на который ведут ссылки в ответах search/fetch/list_production_orders/get_inventory. При развёртывании — реальный адрес фронтенда, не localhost http://localhost:5174
MCP_ALLOWED_HOSTS Список хостов (с портом), которым разрешён доступ к /mcp — защита от DNS rebinding для Streamable HTTP-транспорта. При развёртывании добавить hostname MCP-сервера, например ["vyrab.example.com"] ["127.0.0.1:*", "localhost:*", "[::1]:*"]
MCP_ALLOWED_ORIGINS Разрешённые browser-origin для того же транспорта, при необходимости ["http://127.0.0.1:*", "http://localhost:*", "http://[::1]:*"]

Особенности и ограничения

  • /mcp не защищён логином и не фильтрует данные по ролям — это read-only, но полный доступ ко всем данным, которые видны service account'у, без разграничения по операторам. Именно поэтому текущая версия рассчитана на локальный ChatGPT developer mode или доступ через защищённый туннель, а не на публикацию в открытый интернет.
  • Docker Compose умышленно публикует backend только на 127.0.0.1:8000 (не на всех интерфейсах) — это единственная реальная граница защиты /mcp "из коробки". Открывать порт наружу без OAuth 2.1 и проверки прав пользователя перед /mcp нельзя.
  • Инструменты MCP не пересекаются с инструментами AI-ассистента: это два независимых набора (MCP всегда read-only и без авторизации оператора, ассистент — с RBAC и возможностью записи через подтверждение), даже там, где они читают одни и те же данные через общий механизм запросов.

Связанные разделы

  • Начало работы — роли и права (ai-chat.use, разграничение по инструментам), инспектор объектов (куда ведут ссылки на объекты из ответов ассистента).
  • Номенклатура и заказы — Заказы клиентов, Заказы (объекты, которые ассистент умеет создавать и на которые чаще всего ссылается).
  • Склад и снабжение — Обеспеченность, Склад (источник данных для инструментов дефицита материалов и остатков).
  • Себестоимость и цены — Себестоимость (источник данных для get_part_cost).