🛡 Безопасность и лимиты
Что это. Чем 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-ФЗ), поэтому эти инструменты выключены, пока их не разрешит владелец проекта:
- Откройте Настройки → «MCP» → «Подключение», карточка «Доступ».
- Прочитайте предупреждение и включите «Разрешить инструменты с персональными данными».
- Подтвердите в окне «Разрешить персональные данные в ИИ-клиентах?» кнопкой «Разрешить».
Пока разрешения нет:
- инструментов нет в списке у клиента;
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, а «Максимальный риск» проекта — «Видимые клиентам действия», как по умолчанию. Убрать их у всех ключей проекта администратор может, опустив потолок до «Обратимые записи».
Как проходит подтверждение
- ИИ-клиент вызывает инструмент. Fixorix ничего не меняет: он читает текущее состояние объекта, строит карточку «было → стало» и отвечает ошибкой
approval_requiredсо ссылкой на неё. Модель просит вас открыть ссылку. - Откройте ссылку — страница «Подтверждение действия» в дашборде, адрес вида
https://dashboard.fixorix.ru/project/…/mcp/approvals/…. Отдельного списка запросов в настройках нет: запрос решают по ссылке, которую ИИ-клиент показал в своём чате. Если у вас не хватает роли, передайте ссылку коллеге — откроет её любой участник проекта. - Проверьте карточку. В ней инструмент, ключ API, ИИ-клиент (с пометкой «со слов клиента»), когда пришёл запрос, кто может решать и сколько осталось времени. Блок «Что изменится» — таблица «Поле», «Было», «Станет»: её строит Fixorix по текущим данным, а не по словам модели. Ниже — «Аргументы (секреты скрыты)».
- Нажмите «Разрешить» или «Отклонить». В окне «Разрешить действие?» или «Отклонить действие?» можно оставить необязательный комментарий. После разрешения появится сообщение «Действие разрешено — ИИ-клиент выполнит его при повторе».
- Попросите модель повторить вызов с теми же аргументами. 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 и MCP | rate_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. Поэтому для ИИ-клиента нужен отдельный ключ.
Если ключ утёк
- Отзовите ключ: Настройки → вкладка «API» → «Отозвать» в строке ключа. Вызовы инструментов по нему прекращаются сразу.
- Выпустите новый ключ и обновите переменную окружения у того, кому он нужен.
- Посмотрите, что успели сделать: Настройки → «MCP» → «История» — вызовы этим ключом; колонка «Использован» в списке ключей — когда ключ последний раз обращался к Fixorix.
- Не разрешайте запросы на подтверждение от этого ключа: если ссылка на такой запрос уже пришла, откройте её и нажмите «Отклонить». Отозванный ключ не выполнит действие, даже если его успели разрешить, а нерешённые запросы истекают через 15 минут.
- Если ключ мог менять данные, проверьте по журналу, что он менял: приоритеты и теги чатов, а если в проекте разрешены видимые клиентам действия, — статусы чатов, статьи базы знаний, ботов и сценарии.
Кто что может
| Действие | Минимальная роль |
|---|---|
| Видеть настройки MCP проекта | Редактор |
| «Разрешить Fixorix MCP», «Максимальный риск», «Тулсеты» | Администратор |
| «Разрешить инструменты с персональными данными» | Владелец |
| Открыть карточку запроса по ссылке | По умолчанию |
| Разрешать и отклонять действия ИИ-клиентов | По инструменту: статус чата — любой участник, база знаний и боты — Редактор, публикация сценария — Администратор |
| Смотреть «Историю»: вызовы и изменения | Администратор |
| Отозвать ключ | Администратор |
Fixorix MCP · Подключение · Ключи и права · Каталог инструментов · Решение проблем