РУКОВОДСТВО · ОБНОВЛЕНО 2026-10-04
MCP или function calling: как выбрать подключение инструментов
Сравниваем уровни интеграции: как модель запрашивает действие и как приложение подключается к внешнему серверу инструментов. Разбираем выбор и границы прав.
Function calling описывает запрос инструмента со стороны модели, а MCP задаёт протокол связи приложения с серверами возможностей. Они могут работать вместе. Для одной локальной функции достаточно адаптера в приложении; общий сервер для нескольких совместимых клиентов имеет смысл рассматривать отдельно.
1. Нарисуйте путь одного действия
Начните с примера: пользователь спрашивает статус своего заказа. Модель получает описание доступной функции и возвращает её имя с аргументами. Приложение проверяет данные, обращается к разрешённому сервису и передаёт результат обратно. Это цикл function calling. Если обращение к сервису идёт через MCP, у приложения появляется MCP-клиент, который взаимодействует с сервером инструментов. Не считайте два понятия взаимозаменяемыми: протокол подключения сервера не устраняет необходимость обработать вызов модели, ограничения доступа и результат в конкретном API.
2. Выберите границу повторного использования
Для небольшого приложения с несколькими внутренними функциями прямой адаптер может быть проще в обслуживании. Если один набор инструментов должны использовать разные совместимые приложения, рассмотрите отдельный MCP-сервер и его жизненный цикл. Сравните требования к обнаружению возможностей, транспорту, авторизации и обновлению схем. Само слово MCP не доказывает совместимость всех клиентов и версий. Зафиксируйте конкретный клиент и поддерживаемый протокол, а затем проверьте минимальный обмен. Выбор должен следовать требованиям интеграции, а не обещанию автоматически сделать любой инструмент доступным любой модели.
3. Сопоставьте схемы и результаты
Проверьте, как описания инструментов попадают в tools выбранного модельного API. Обработайте неизвестное имя, неверный JSON, пропущенные аргументы и несколько последовательных вызовов. Результат инструмента связывайте с исходным вызовом по правилам протокола модели; MCP transport не меняет этот контракт. Отдельно задайте, какой текст попадёт обратно в контекст и как ограничить его размер. Не отправляйте модели секреты подключения. Для нескольких клиентов сохраните одну бизнес-проверку прав в сервисе, чтобы различия адаптеров не открыли обход ограничений.
4. Разделите чтение и изменения
Доступ к серверу не равен разрешению выполнить любую его операцию. Привязывайте вызов к пользователю, проверяйте объект и действие, используйте минимальные полномочия. Для удаления, отправки сообщения или оплаты предусмотрите явное подтверждение согласно правилам вашего продукта. Ответы инструментов рассматривайте как данные: найденная инструкция не должна расширять права агента. Добавьте ограничения шагов, времени и допустимых инструментов. Повторы операций с побочными эффектами требуют идемпотентности. Наличие стандартного протокола помогает организовать взаимодействие, но не заменяет эти проверки бизнес-логики.
5. Проверьте интеграцию по слоям
Без платной генерации используйте fixture-вызов функции и тестовый сервер чтения. Проверьте обнаружение, валидные аргументы, отказ чужому пользователю, таймаут, отмену и возврат результата в правильный call_id. Отдельно проверьте поведение при отключённом сервере и несовместимой схеме. Только после этого планируйте ограниченный тест с реальной моделью. В Tokenmost поддержка пользовательских функций в API не обещает управляемый MCP-сервер или автоматическое подключение к любому внешнему источнику. Сверьте опубликованный метод и реализуйте нужный клиент на стороне приложения, если это предусмотрено вашей архитектурой.
Частые вопросы
MCP заменяет function calling?
Не в описанном пути. Приложение может использовать вызов функции модели, а исполнение направлять через MCP-клиент к серверу инструмента.
Можно ли обойтись без MCP?
Да, если прямой адаптер удовлетворяет требованиям приложения. Обоснуйте дополнительный протокол потребностью в общей интеграции и поддержке клиентов.
Может ли модель сама исполнять функцию?
В обычном цикле пользовательских функций приложение принимает запрос, проверяет права и выполняет действие. Текст аргументов не является выполненной операцией.
Достаточно ли разрешить подключение к серверу?
Нет. Проверяйте права на каждую операцию и объект, объём результата, таймауты и повторы. Учётная запись сервера не должна давать агенту лишние полномочия.