Оформление
Инструменты MCP: обзор
Что такое MCP в EVA, как инструменты подключаются, как платформа передаёт им доступ к файлам чата и почему они не входят в ядро платформы.
Что такое MCP
MCP это протокол, по которому языковая модель получает доступ к внешним инструментам. Инструмент это отдельный сервис со своим списком функций. Модель видит эти функции и может их вызывать.
Инструменты не входят в ядро
Ни один сервис MCP не является частью платформы и не обязателен для установки. EVA без них работает как обычный чат с моделью. Каждый инструмент подключается отдельно и может быть выключен в любой момент.
Что подключено
На стенде подключены пять источников, все по транспорту Streamable HTTP.
| Название в платформе | Что делает | Репозиторий |
|---|---|---|
| Doc Worker | Чтение офисных документов | document-worker-mcp |
| Knowledge Base | Поиск ответов по внутренним документам | Исходный код не передан |
| OCR | Распознавание сканов и фотографий | paleograph |
| Searcher | Поиск в интернете и загрузка страниц | searcher |
| Transcript | Расшифровка аудио и видео | scriber |
Расхождение имён
Имя папки не всегда совпадает с именем сервиса. Репозиторий paleograph внутри называет себя ocr-mcp, а заголовок его файла README (hippocampus) устарел и в коде нигде не встречается. Так же в коде нет ни компонента Preprocessor, ни обращений к Milvus, ни встроенных векторных вычислений, ни интеграции с Confluence, хотя на архитектурной схеме продукта они есть.
Как модель видит инструменты
Платформа переименовывает инструменты перед тем, как показать их модели. Правило такое:
mcp_<имя источника>_<имя инструмента>Например инструмент transcribe_audio источника Transcript модель видит как mcp_transcript_transcribe_audio. Имя источника приводится к нижнему регистру, недопустимые символы заменяются, длина обрезается до 40 символов.
Переименование источника меняет имена инструментов
Если администратор переименует источник в разделе MCP, изменятся имена всех его инструментов для модели. Это может сломать запреты на инструменты, настроенные у агентов по старому имени.
Два вида инструментов
У каждого сервиса, кроме searcher, инструменты делятся на два вида.
Скрытые от модели. Это init_eva_session, привязка сессии. Его вызывает только Runtime. Модель этот инструмент не видит и вызвать не может. Внутри него передаются временные ключи доступа к файлам чата.
Видимые модели. Рабочие инструменты: проверить схему, прочитать документ, распознать скан и так далее. У них в параметрах никогда нет ни адреса хранилища, ни ключа доступа, ни идентификатора чата. Модель передаёт только имя файла и настройки работы.
Как инструмент получает файл
Схема одинаковая у всех сервисов, кроме searcher.
Привязка сессии выполняется заново перед каждым вызовом инструмента. Это же и есть механизм обновления ключа доступа: повторный вызов просто перезаписывает сохранённые данные.
Правило про результат
Все сервисы, работающие с файлами, возвращают модели ссылку на файл, а не текст. Сделано это специально: если вернуть текст, модель напечатает весь документ в переписку. Когда модель получает ссылку, печатать нечего, и пользователь получает аккуратную карточку файла.
Отсюда следует важное для документации: результат распознавания, расшифровки или чтения документа всегда появляется как новый файл в чате.
Ограничение по времени вызова
Платформа обрывает вызов инструмента через 30 секунд. Значение меняется переменной MCP_TOOL_CALL_TIMEOUT_MS.
Поэтому длинные операции построены как фоновые задачи: инструмент сразу возвращает номер задачи, а модель потом опрашивает состояние.
| Инструмент | Как работает |
|---|---|
| Чтение документа | Сразу, ждём результат |
| Распознавание сканов | Фоновая задача с опросом |
| Расшифровка аудио и видео | Фоновая задача с опросом |
| Поиск в интернете | Сразу, ждём результат |
Риск обрыва на долгих операциях
Чтение очень большого документа и преобразование крупной схемы в Visio выполняются без фоновой задачи и могут не успеть за 30 секунд. Пользователь увидит ошибку, хотя работа продолжится и файл в итоге запишется.
Проверка источников на подозрительные описания
Платформа проверяет описание инструментов на попытки подмены поведения модели. Проверяются общие указания сервиса, описания всех инструментов и все строки внутри схем параметров.
Если источник получил состояние «заблокирован», он исключается из всех обращений модели.
Общее устройство сервисов
Все сервисы, кроме searcher, написаны по одному внутреннему регламенту. Он описан в разделе Свой MCP-сервер.
Searcher устроен иначе
searcher не реализует контракт EVA: у него нет привязки сессии, нет доступа к файлам чата, нет единого формата ответа и нет устойчивых кодов ошибок. Загруженные страницы он сохраняет на свой диск, а не в чат. Подробности на его странице.