function calling — функциональность модели, которая:
- позволяет клиенту вместе с промтом передать список тулзов, которые модель может "использовать"
- модель отвечает, какие тулзы и с какими параметрами нужно вызвать
- и далее клиент совершает вызовы и передает результаты обратно в модель
MCP server же в свою очередь выполняет две фукнции:
- говорит, какие тулзы вообще есть (и не только тулзы)
- позволяет через себя вызывать эти тулзы
Чуть строже: mcp — это протокол, который описывает, как должен выглядеть mcp client и mcp server: то есть буквально, какое API у mcp сервера, и как mcp клиент в это API должен долбиться
Такая стандартизация довольно удобна, тк позволяет наклепать mcp клиента на одном языке, mcp сервер на другом, и все будет работать, тк и тот и тот соблюдают протокол
Также это позволяет каждый раз не задавать вручную, какие тулзы есть у очередного ai-приложения, а просто один раз их описать в mcp сервере. Например, есть mcp сервер гитхаба, и к нему можно подключиться хоть из курсора, хоть из claude code, хоть из какого-то своего приложения
---
На практике — чтобы создать свой mcp сервер, берешь какую-то готовую либу, описываешь какие у тебя есть тулзы (человекочитаемое описание + спека параметров), описываешь как тул должен исполняться. Готово
Для клиента аналогично — берешь готовую либу, вставляешь урл mcp сервера, токен авторизации. Готово
---
И если суммаризировать — как связаны function calling и MCP:
app -> mcp: запрос на получение списка тулзов
app <- mcp: список тулзов
app -> llm: запрос со списком тулзов (function calling)
app <- llm: какие тулзы надо вызвать
app -> mcp: вызов тулзов
app <- mcp: результаты вызова
app -> llm: финальный запрос с результатами вызова
app <- llm: финальный ответ
👍 — если осознали