MCPMCPfunction callingинженерия

MCP против function calling: когда переходить, а когда не стоит

Function calling - это приём внутри одного приложения: инструменты объявляются прямо в разговоре через SDK с языковой моделью. MCP (Model Context Protocol) - это межприложенческий приём: инструменты живут отдельным сервисом по JSON-RPC, и любой совместимый клиент (Claude Desktop, Claude Code, SDK-приложения, агенты) сам их находит и вызывает.

inite2 мин чтения

Берите function calling, если у вас одно приложение на SDK, инструменты простые и вы держите в руках и клиента, и сервер. Берите MCP, если хотите, чтобы один и тот же набор инструментов работал в Claude Desktop, Claude Code, у агентов и в непрерывной интеграции без переписывания интеграции; если у инструментов есть побочные эффекты, которые проще держать в одном месте; или если вы делаете продукт, который пользователи будут подключать к собственному клиенту языковой модели. Дерево решения на 90% сводится к числу клиентов: один клиент - function calling, два и больше - MCP.

Ключевые факты

  • Function calling появился в API OpenAI в июне 2023 года; Anthropic добавил его в мае 2024.
  • MCP вышел в общую доступность в Claude Desktop в ноябре 2024 года.
  • Готовые MCP-серверы есть для файловой системы, GitHub, Slack, Postgres и ещё 50+ интерфейсов на апрель 2026 года.
  • Перенос приложения с SDK на MCP - в среднем 80-200 строк кода на пять инструментов (по реальным портированиям, которые мы замеряли).

Function calling и MCP решают одну и ту же корневую задачу - дать языковой модели вызывать ваш код - но в разном масштабе. Выбор не того стоит вам недели; выбор правильного - в основном вопрос подсчёта клиентов.

Простое правило

Один клиент языковой модели → function calling. Два и больше → MCP.

Это 90% решения. Остальные 10% - пограничные случаи.

Где function calling всё ещё выигрывает

Три сценария:

  1. Сборка одного SDK-приложения. Вы выпускаете чат-бот внутри Next.js-приложения. Инструменты лежат рядом с обработчиками маршрутов. Пользователь с языковой моделью напрямую не разговаривает - он работает с вашим интерфейсом. MCP добавит возни без отдачи.
  2. Инструменты с требованием к задержке в доли миллисекунды. Function calling работает внутри процесса. MCP добавляет накладные расходы JSON-RPC - обычно незаметные, но если вы оптимизируете хвостовую задержку на потоковой выдаче токенов, внутрипроцессный вызов выигрывает.
  3. Инструменты, плотно сцеплённые с вашей авторизацией и сессией. Если инструменту нужна авторизованная сессия пользователя, MCP делает передачу авторизации неудобной. Function calling остаётся внутри контекста запроса.

Где выигрывает MCP

Пять сценариев в порядке возрастания выгоды от MCP:

  1. Один и тот же инструмент нужен из разных клиентов. Claude Desktop, Claude Code, SDK, скрипт непрерывной интеграции, агент коллеги - все ходят к одному MCP-серверу. Написали один раз, подключили везде.
  2. Клиента языковой модели выбирает пользователь. Вы выпускаете продукт (как ideaudit). У пользователей либо Claude Desktop, либо Claude Code, либо другой совместимый клиент. MCP - это как достать всех разом.
  3. Нужна централизованная запись вызовов инструментов. MCP-серверы пишут каждый вызов в одно место. Function calling рассыпает журналы по каждому приложению-потребителю.
  4. У инструментов есть побочные эффекты на общую инфраструктуру. Записи в базу, лимиты вызовов API, счётчики тарификации. Завести их в MCP-сервере - значит иметь одно горло вместо N.
  5. Хочется готовых инструментов. Файловая система, GitHub, Slack, Postgres - в экосистеме MCP уже десятки. Function calling значит переписывать каждую интеграцию под каждое приложение.

Шаблон переноса

Если у вас уже есть SDK-приложение и хочется выставить его инструменты ещё и в Claude Desktop:

  1. Вынесите определения инструментов из вызова SDK в отдельный модуль.
  2. Оберните этот модуль в MCP-сервер (на TypeScript или Python - шаблонный код около 50 строк).
  3. Оставьте SDK-приложение, которое вызывает тот же модуль локально для своих внутренних инструментов.
  4. Зарегистрируйте MCP-сервер в конфиге Claude Desktop.

Тот же код теперь обслуживает обоих клиентов. Стоимость переноса по реальным портам, которые мы замеряли: 80-200 строк кода на пять инструментов.

Что выбрал ideaudit

MCP, насквозь. Причина: у пользователей есть Claude Desktop, Claude Code и SDK-приложения. Нам нужен был один сервер, одна модель авторизации, один ограничитель вызовов. Function calling в каждом клиенте означал бы три реализации одних и тех же 103 инструментов и молитву, чтобы они оставались в синхроне.

curl -fsSL https://inite.studio/install.sh | sh

Те же 103 инструментов одинаковы независимо от того, разговариваете вы с ideaudit из Claude Desktop, Claude Code или SDK. Вот вся выгода MCP в одном предложении.

FAQ

Частые вопросы

  1. Можно использовать оба сразу?

    Да, и многие приложения так и делают. Function calling - для внутренних инструментов, которые пользователь никогда не видит (авторизация, внутренние выборки). MCP - для инструментов, к которым пользователь захочет дотянуться из других клиентов. Оба прекрасно живут в одной сессии Claude.
  2. MCP медленнее function calling?

    Чуть-чуть. Function calling работает внутри процесса; MCP - это JSON-RPC поверх stdio или HTTP-SSE. Дополнительная задержка - единицы миллисекунд для stdio и 50-100 мс для HTTP. Для процессов, упирающихся в работу языковой модели, эта стоимость незаметна - модель всё равно отвечает 2-30 секунд.
  3. Работает ли MCP с моделями не от Anthropic?

    Работает. MCP не привязан к модели - протоколу всё равно, какую языковую модель вы используете. Goose, Continue и совместимая прослойка от OpenAI спокойно гонят MCP-серверы против моделей не от Claude. Anthropic выпустил MCP первым, потому что вложился рано; сам протокол открытый.
  4. Стоит ли переводить уже работающее function-calling-приложение на MCP?

    Только если хотите, чтобы инструменты стали доступны и вне приложения - конвейеру непрерывной интеграции, Claude Desktop, агенту коллеги. Если инструменты навсегда останутся только внутри приложения - function calling вас устраивает.

Читать дальше