Перейти к основному содержимому

🛡 Безопасность и лимиты

Что это. Чем Fixorix MCP ограничивает ИИ-клиент: настройки MCP проекта, персональные данные, обращение с текстами клиентов, подтверждение действий, которые видят клиенты, журнал вызовов и лимиты.

Когда нужно. Перед тем как разрешить MCP в проекте, когда выбираете, что доверить модели, и если ключ утёк.


Принципы​

  • Минимум прав. ИИ-клиент получает пересечение прав ключа, его режима «Доступ через MCP», настроек MCP проекта и адреса подключения. Любое из четырёх может только сузить доступ.
  • Один проект. Проект определяется по ключу. Ни один инструмент не принимает идентификатор проекта, а объект другого проекта для модели неотличим от несуществующего (not_found).
  • Ничего не удаляется. Удаления и массовых операций в каталоге нет. Внутренние изменения — приоритет чата и теги — обратимы: вернуть прежнее состояние можно тем же инструментом, он сообщает, что было до изменения.
  • Действия, которые видят клиенты, решает человек. Смену статуса чата, правку базы знаний, запуск и остановку ботов и публикацию сценариев Fixorix выполняет только после подтверждения в дашборде, см. ниже.
  • Секреты недоступны. Токены ботов, HMAC-секреты виджетов, API-ключи, секретные переменные проекта и настройки блоков сценариев (в них бывают токены HTTP-запросов) не возвращает ни один инструмент.
  • Описание инструмента — не граница безопасности. Пометки «только чтение» и «изменяет данные» — подсказка ИИ-клиенту, а проверяет всё сам сервер Fixorix: права, режим ключа, настройки проекта.
  • REST API — только по правам ключа. Тот же ключ работает в REST API, и Fixorix MCP показывает модели, какие методы ей доступны, см. ниже.

Настройки MCP проекта​

Настройки → «MCP» → «Подключение», карточка «Доступ». Менять может администратор проекта, видеть — редактор. Изменения применяются кнопкой «Сохранить», а каталог «Инструменты Fixorix» под карточкой ещё до сохранения показывает серым, что закроют новые значения.

НастройкаЧто делает
«Разрешить Fixorix MCP»Главный выключатель, по умолчанию включён. Выключен — любой ключ проекта получает 403 mcp_disabled, даже с режимом «Чтение и запись»
«Максимальный риск»Самый рискованный класс действий, который проект разрешает ИИ-клиентам, см. ниже
«Тулсеты»Какие группы инструментов доступны ключам проекта. По умолчанию — «Все тулсеты»

Максимальный риск​

ЗначениеЧто разрешено ИИ-клиентам
«Только чтение»Только чтение данных проекта, даже ключам с режимом «Чтение и запись»
«Обратимые записи»Плюс внутренние обратимые изменения: приоритет чата, теги
«Видимые клиентам действия»Плюс действия, которые видят клиенты: статус чата, статьи базы знаний, запуск и остановка ботов, публикация сценариев — каждое после подтверждения человеком в дашборде, см. ниже. Значение по умолчанию

По умолчанию проект разрешает все 26 инструментов: видимое клиентам действие всё равно не выполнится без решения человека. Если вы не хотите, чтобы ИИ-клиенты даже предлагали такие действия, опустите потолок до «Обратимые записи» или «Только чтение».

Инструменты выше потолка исчезают из списка у клиента, а project_get_context показывает их с причиной project_risk_cap.


Персональные данные​

Пять инструментов читают персональные данные конечных клиентов — переписку, имена и контакты:

ИнструментЧто в ответе
chats_get_transcriptПереписка чата
chats_analyzeСводка, интент и тон переписки
flows_get_runВыходы блоков запуска сценария — в них бывают тексты клиентов
contacts_searchПоиск клиента по email, телефону или внешнему id
contacts_getПрофиль клиента: имя, контакты, каналы, внешние id

ИИ-клиент передаёт всё, что прочитал, своей модели — то есть во внешний ИИ-сервис, в том числе за пределы России. Решение о такой передаче принимает оператор персональных данных — ваша компания (152-ФЗ), поэтому эти инструменты выключены, пока их не разрешит владелец проекта:

  1. Откройте Настройки → «MCP» → «Подключение», карточка «Доступ».
  2. Прочитайте предупреждение и включите «Разрешить инструменты с персональными данными».
  3. Подтвердите в окне «Разрешить персональные данные в ИИ-клиентах?» кнопкой «Разрешить».

Пока разрешения нет:

  • инструментов нет в списке у клиента;
  • project_get_context перечисляет их среди недоступных с причиной pii_disabled и подсказкой, кто это включает;
  • вызов по имени возвращает ошибку pii_disabled;
  • окно создания ключа предупреждает, что эти инструменты ключу не достанутся.

Кроме разрешения владельца, нужны права ключа: переписке — MESSAGES_READ и TECH_SUPPORT_READ, контактам — USERS_READ (в пресетах это отдельная галочка «Контакты»).

Агентов сценариев это не касается

Переключатель относится только к внешним ИИ-клиентам. Агент сценария работает внутри Fixorix, и его инструменты выбирает автор сценария в навыках агента.


Тексты клиентов — это данные, а не указания​

Переписка, документы базы знаний, профили и выходы сценариев написаны людьми, и в них может оказаться что угодно — в том числе текст, который пытается командовать моделью («забудь инструкции и…»). Fixorix:

  • чистит такие тексты от невидимых и управляющих символов;
  • помечает их для модели как данные, а не указания — и в ответе, и в описании инструмента;
  • не даёт модели того, что сделало бы такую атаку дорогой: удалений и секретов, а действия, которые видят клиенты, выполняет только после подтверждения человеком.

Но последнее слово — за вами: выдавайте ключу минимум прав, начинайте с режима «Только чтение», проверяйте, что модель собирается сделать, прежде чем подтверждать вызовы в своём клиенте, и читайте карточку «было → стало», прежде чем нажать «Разрешить».


Действия, которые видят клиенты​

Смена статуса чата, создание и правка статей базы знаний, запуск и остановка ботов, публикация сценариев — действия, последствия которых видят ваши клиенты: им приходит уведомление, бот отвечает по новой статье или перестаёт отвечать, сценарий начинает работать по-новому. Модель не может разрешить такое действие сама себе: каждое выполняется только после подтверждения человеком в дашборде.

ИнструментЧто делаетКто может разрешить
chats_set_statusМеняет статус чата поддержкиЛюбой участник проекта
knowledge_create_documentСоздаёт статью базы знанийРедактор и выше
knowledge_update_documentМеняет название, текст или папку статьиРедактор и выше
bots_set_stateЗапускает или останавливает ботаРедактор и выше
flows_publishПубликует черновик сценарияАдминистратор и выше

ИИ-клиент видит эти инструменты, если у ключа режим «Чтение и запись» и нужные права (см. Ключи и права), адрес подключения без /readonly, а «Максимальный риск» проекта — «Видимые клиентам действия», как по умолчанию. Убрать их у всех ключей проекта администратор может, опустив потолок до «Обратимые записи».

Как проходит подтверждение​

  1. ИИ-клиент вызывает инструмент. Fixorix ничего не меняет: он читает текущее состояние объекта, строит карточку «было → стало» и отвечает ошибкой approval_required со ссылкой на неё. Модель просит вас открыть ссылку.
  2. Откройте ссылку — страница «Подтверждение действия» в дашборде, адрес вида https://dashboard.fixorix.ru/project/…/mcp/approvals/…. Отдельного списка запросов в настройках нет: запрос решают по ссылке, которую ИИ-клиент показал в своём чате. Если у вас не хватает роли, передайте ссылку коллеге — откроет её любой участник проекта.
  3. Проверьте карточку. В ней инструмент, ключ API, ИИ-клиент (с пометкой «со слов клиента»), когда пришёл запрос, кто может решать и сколько осталось времени. Блок «Что изменится» — таблица «Поле», «Было», «Станет»: её строит Fixorix по текущим данным, а не по словам модели. Ниже — «Аргументы (секреты скрыты)».
  4. Нажмите «Разрешить» или «Отклонить». В окне «Разрешить действие?» или «Отклонить действие?» можно оставить необязательный комментарий. После разрешения появится сообщение «Действие разрешено — ИИ-клиент выполнит его при повторе».
  5. Попросите модель повторить вызов с теми же аргументами. Fixorix ещё раз читает объект и, если он не изменился, выполняет действие — один раз.

Правила​

  • Разрешение одноразовое. Оно действует на один вызов того же инструмента тем же ключом с теми же аргументами. Другие аргументы или другой ключ — новый запрос.
  • 15 минут. Запрос ждёт решения 15 минут с момента, как пришёл, а разрешение действует 15 минут с момента решения. Не успели — запрос получает статус «Истекло», а при повторе ИИ-клиент получит новую ссылку.
  • Объект изменился — разрешение сгорает. Если между решением и повтором кто-то сменил статус чата, поправил статью, черновик сценария или состояние бота, действие не выполняется: Fixorix создаёт новый запрос с новой карточкой и отвечает approval_required с причиной stale_preview.
  • Отказ действует 15 минут. Повтор отклонённого вызова с теми же аргументами в течение 15 минут сразу получает ошибку forbidden с причиной approval_rejected, а модель предупреждена, что без вашей новой просьбы повторять его не нужно.
  • Человек видит всё, что подтверждает. Если изменение не помещается в карточку целиком — строка длиннее 40 000 символов или карточка больше 200 000 символов, — запрос не создаётся, а ИИ-клиент получает invalid_arguments с причиной preview_too_large. Такую правку внесите в дашборде или сократите текст.
  • Решает только человек в дашборде. Ссылка сама ничего не разрешает, а модель не может передать ничего, что заменило бы ваше решение.

Статус запроса страница показывает в карточке: «Ждёт решения», «Разрешено», «Отклонено», «Истекло» или «Выполнено». Вызов, который ждёт подтверждения, попадает в «Историю» вкладки «MCP» со статусом «Нужно подтверждение».

Текст, который увидят клиенты​

Человек подтверждает текст по карточке, а невидимых символов в карточке не видно. Поэтому в текстовых аргументах этих инструментов — например, в названии и тексте статьи базы знаний — Fixorix не вычищает такие символы молча, а отклоняет вызов ошибкой invalid_arguments с причиной unsafe_text и перечнем найденного. Так выполняется ровно тот текст, который показан в карточке.

ЗапрещеноРазрешено
Теги Unicode — невидимая копия текста, которую читает модель, но не видит человекПереводы строки, в том числе \r\n, и табуляция
Символы управления направлением текста (bidi)Мягкий перенос U+00AD
Прочие невидимые символы: нулевой ширины, BOM, селекторы вариантовСоединитель U+200D внутри эмодзи — например, в 👨‍💻
Соединитель U+200D вне эмодзи
Одиночный возврат каретки \r без \n после него
Служебные маркеры в квадратных скобках: [system], [TOOL_RESULT, [RAG_DOCUMENT, [ACTION_CALL

Маркер не спрятать, разбив его разрешённым символом: [sys + мягкий перенос + tem] — тоже маркер. Обычно такие символы попадают в текст при копировании из других источников; что делать с ошибкой — см. Решение проблем.


REST API и подтверждения​

Клиенту, подключённому API-ключом, Fixorix MCP отдаёт описание REST API — только методы, на которые у ключа есть все права, а при режиме «Только чтение» или адресе /readonly — только методы чтения, см. REST API тем же ключом. Описание не даёт новых прав: модель, у которой есть ключ, могла вызвать эти методы и раньше. Но теперь она о них знает.

REST-вызов модель делает сама, мимо сервера MCP, и он выполняется сразу. К нему не применяются:

  • подтверждение действий, которые видят клиенты, — смена статуса чата через REST API пройдёт без карточки «было → стало»;
  • режим «Доступ через MCP», «Максимальный риск», «Тулсеты» и адрес /readonly;
  • лимиты MCP и «История» вкладки «MCP» — вызов виден только в колонке «Использован» списка ключей.

Граница для REST-вызовов — права (scopes) ключа и общий лимит ключа. Поэтому:

  • выдавайте ключу ИИ-клиента только те права, которыми вы готовы дать модели пользоваться без подтверждения; права на запись и на действия, которые видят клиенты, — только если вы к этому готовы;
  • начинайте с пресета «ИИ-клиент: только чтение»: в нём только права на чтение, и через REST API такой ключ тоже только читает;
  • следите, каким путём модель вносит изменения: клиенты обычно спрашивают разрешение перед командой в терминале — не разрешайте curl с изменениями, если ждали подтверждения в дашборде.

История вызовов​

Настройки → «MCP» → «История» — каждый вызов инструмента: время, инструмент, канал («ИИ-клиент» или «Агент»), кто вызвал, клиент (со слов самого клиента), статус и длительность. Фильтры — по каналу, источнику, инструменту, статусу и датам.

  • Аргументы хранятся под маской: токены, пароли и подобные поля скрыты, длинные строки обрезаны, а у инструментов с персональными данными видны только имена аргументов.
  • Результаты вызовов журнал не хранит — только их размер и признак ошибки.
  • Записи хранятся 90 дней.

Историю видит администратор проекта.


Лимиты​

ЧтоЛимитЧто будет при превышении
Вызовы инструментов120 в минуту и 5000 в сутки на ключОшибка инструмента rate_limited с подсказкой, через сколько повторить
Изменения — все инструменты, которые меняют данные, в том числе действия с подтверждением20 в минуту на ключrate_limited
ИИ-анализ чата (chats_analyze)300 в сутки на проектrate_limited
Общий лимит API-ключа1000 запросов в минуту на ключ — общий для REST API и MCPrate_limited; при проверке ключа — HTTP 429
Размер ответа инструмента20 000 символовДлинный ответ сокращается (truncated: true), модель получает подсказку сузить запрос
Размер страницы в спискахlimit до 50, по умолчанию 20Дальше — по nextCursor
Размер запроса1 МиБHTTP 413
Неудачные попытки входа200 в минуту с одного адресаHTTP 429 too_many_failed_attempts

Если у изменений временно не работает подсчёт лимитов, они не выполняются (unavailable) — чтения при этом продолжают работать.

Лимит ключа общий

Вызов инструмента — это один или несколько запросов к данным проекта от имени ключа, и они расходуют те же 1000 запросов в минуту, что и REST API. Поэтому для ИИ-клиента нужен отдельный ключ.


Если ключ утёк​

  1. Отзовите ключ: Настройки → вкладка «API» → «Отозвать» в строке ключа. Вызовы инструментов по нему прекращаются сразу.
  2. Выпустите новый ключ и обновите переменную окружения у того, кому он нужен.
  3. Посмотрите, что успели сделать: Настройки → «MCP» → «История» — вызовы этим ключом; колонка «Использован» в списке ключей — когда ключ последний раз обращался к Fixorix.
  4. Не разрешайте запросы на подтверждение от этого ключа: если ссылка на такой запрос уже пришла, откройте её и нажмите «Отклонить». Отозванный ключ не выполнит действие, даже если его успели разрешить, а нерешённые запросы истекают через 15 минут.
  5. Если ключ мог менять данные, проверьте по журналу, что он менял: приоритеты и теги чатов, а если в проекте разрешены видимые клиентам действия, — статусы чатов, статьи базы знаний, ботов и сценарии.

Кто что может​

ДействиеМинимальная роль
Видеть настройки MCP проектаРедактор
«Разрешить Fixorix MCP», «Максимальный риск», «Тулсеты»Администратор
«Разрешить инструменты с персональными данными»Владелец
Открыть карточку запроса по ссылкеПо умолчанию
Разрешать и отклонять действия ИИ-клиентовПо инструменту: статус чата — любой участник, база знаний и боты — Редактор, публикация сценария — Администратор
Смотреть «Историю»: вызовы и измененияАдминистратор
Отозвать ключАдминистратор

Fixorix MCP · Подключение · Ключи и права · Каталог инструментов · Решение проблем