LLM сама по себе не может позвонить в API, прочитать файл или выполнить код -- ей нужен механизм вызова внешних инструментов. Function Calling -- встроенный в каждого провайдера способ: ты описываешь функции в JSON-схеме, модель решает какую вызвать. Проблема: у OpenAI свой формат, у Anthropic свой, у Google свой. MCP (Model Context Protocol) -- открытый стандарт от Anthropic, который унифицирует подключение инструментов. Как USB-C для зарядки: один протокол вместо десяти проприетарных.
Function calling is a vendor-specific capability for invoking tools. MCP (Model Context Protocol) is an open standard that provides a universal way to connect AI models to external data sources and tools. MCP is to AI tools what USB-C is to hardware — a universal connector.
fromopenaiimportOpenAIclient=OpenAI()tools=[{"type":"function","function":{"name":"get_weather","description":"Get current weather","parameters":{"type":"object","properties":{"location":{"type":"string"}},"required":["location"]}}}]response=client.chat.completions.create(model="gpt-4o",messages=[{"role":"user","content":"What's the weather in SF?"}],tools=tools)# LLM returns tool calltool_call=response.choices[0].message.tool_calls[0]# Execute tool, return result...
frommcp.serverimportServerfrommcp.typesimportTool,TextContentserver=Server("example-server")@server.list_tools()asyncdeflist_tools():return[Tool(name="get_weather",description="Get current weather",inputSchema={"type":"object","properties":{"location":{"type":"string"}},"required":["location"]})]@server.call_tool()asyncdefcall_tool(name,arguments):ifname=="get_weather":location=arguments["location"]# Fetch weather...return[TextContent(type="text",text=f"Weather in {location}")]
# MCP provides automatic tool discovery# No need to manually define all tools upfront# List available tools from servertools=awaitsession.list_tools()# Tools are dynamically discoveredfortoolintools.tools:print(f"Tool: {tool.name}")print(f"Description: {tool.description}")
MCP и function calling работают на разных уровнях. Function calling -- механизм вызова инструмента внутри одного LLM-провайдера. MCP -- протокол подключения внешних серверов с инструментами. В production часто используют оба: MCP для внешних интеграций (GitHub, Slack, DB), function calling для внутренней логики приложения.
MCP -- не только для Claude
MCP -- открытый стандарт. Cursor IDE, Zed, Continue.dev, десятки open-source проектов -- все поддерживают MCP. Серверы MCP можно написать на Python, TypeScript, Go, Rust. Протокол не привязан к Anthropic API.
# Custom MCP server for your businessfrommcp.serverimportServerserver=Server("business-tools")@server.list_tools()asyncdeflist_tools():return[Tool(name="create_order",...),Tool(name="check_inventory",...),Tool(name="process_payment",...)]@server.call_tool()asyncdefcall_tool(name,arguments):# Route to business logic...
# Use MCP for external tools, function calling for internal# Best of both worlds# Internal: Direct function callsinternal_tools=get_internal_functions()# External: MCP serversexternal_tools=awaitmcp_client.list_tools()all_tools=internal_tools+external_tools
# Single MCP server that proxies to multiple backends# Unified interface for all toolsclassMCPGateway:def__init__(self):self.backends={"github":GitHubBackend(),"slack":SlackBackend(),"jira":JiraBackend()}asyncdefcall_tool(self,name,arguments):backend=self.route_to_backend(name)returnawaitbackend.execute(name,arguments)
# Good description{"name":"get_weather","description":"Get current weather conditions for a location. Returns temperature, humidity, and conditions.","parameters":{...}}# Bad description{"name":"get_weather","description":"Weather","parameters":{...}}
1. Когда использовать MCP, а когда function calling?¶
Red flag: "MCP всегда лучше, function calling устарел"
Strong answer: "Function calling -- когда один провайдер, простая интеграция, быстрый прототип. Нет overhead протокола, всё in-process. MCP -- когда нужна кросс-платформенность (менять провайдера без переписывания tools), динамическое обнаружение инструментов, доступ к ресурсам (не только вызовы функций). В production часто hybrid: MCP для внешних интеграций (DB, GitHub, Slack), function calling для внутренней бизнес-логики."
2. Какие компоненты есть у MCP и чем они отличаются от function calling?¶
Red flag: "MCP -- это просто стандартизированный function calling"
Strong answer: "MCP дает 4 capability поверх tool calling: (1) Tools -- аналог function calling, но стандартизированный. (2) Resources -- чтение данных из внешних источников (файлы, БД, API). Function calling не имеет аналога. (3) Prompts -- предопределённые шаблоны промптов от сервера. (4) Sampling -- сервер может запрашивать у модели завершения. Архитектура: Host (приложение) → Client (протокол) → Server (инструменты). Transport: stdio для локальных, HTTP/SSE для удалённых."
Strong answer: "При 30+ инструментах LLM теряет качество выбора -- слишком много опций. MCP решает через dynamic tool discovery: вместо передачи всех инструментов, host делает list_tools() у каждого сервера и передаёт только релевантные. Можно реализовать tool search -- двухэтапный процесс: сначала поиск подходящего инструмента, потом его вызов. Claude Code использует ToolSearch с lazy loading -- инструменты загружаются по запросу, а не все сразу."