Интеграции и безопасность
Технический справочник: настройка 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).
Как включить и проверить
- Backend по умолчанию уже публикует
/mcp— отдельно включать нечего, MCP-сервер поднимается вместе с обычным API. - Локально/для проверки:
npx @modelcontextprotocol/inspector, в Inspector выбрать транспорт Streamable HTTP и указатьhttp://localhost:8000/mcp. Список инструментов и их схемы можно вызвать прямо в Inspector, не подключая ChatGPT. - Подключение из 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).