MCP vs Function Calling
Function Calling 解决模型如何表达一次结构化工具调用;MCP 解决工具、资源和提示如何以统一协议被 AI Host/Client 发现、连接和使用,两者位于不同抽象层并可组合。
#synthesis
#growing
#ai
#mcp
#function-calling
[!info] related notes
- 所属 MOC: mcp-moc、tool-calling-engineering-moc
- 相关概念:
- 易混淆概念:
- 相关资源:
MCP vs Function Calling
范围
本文只比较:
二者经常一起出现,但并不处在同一抽象层。
一句话关系
Function Calling 更关心“模型怎样表达这次工具调用”;MCP 更关心“外部能力怎样以统一协议接进 AI 客户端”。
Function Calling 解决什么
模型得到一组工具定义后,可以输出结构化调用意图:
Model
↓
tool name + arguments
↓
Host / Backend 真正执行
重点是:
- 选择哪个工具;
- 生成哪些参数;
- 把工具结果重新交给模型。
它不要求这些工具必须来自 MCP。
MCP 解决什么
MCP 关注的是能力接入协议:
Host
↓
MCP Client
↓
MCP Server
├─ tools
├─ resources
└─ prompts
它定义了客户端如何发现和调用 Server 暴露的能力,而不是规定模型内部必须用哪一种推理或调用 API。
两者可以怎样组合
一个常见路径是:
MCP Server 暴露 tool
↓
Host 发现 tool schema
↓
把可用工具交给模型
↓
模型产生结构化 tool call
↓
Host 通过 MCP Client 调用 Server
↓
结果回到模型
因此 MCP 与 Function Calling 更像:
能力接入层 + 模型调用表达层。
不要把两者混成替代关系
错误问题:
“有 MCP 以后还需不需要 Function Calling?”
更准确地问:
- 工具从哪里发现和连接?
- 模型怎样表达使用哪个工具?
- 谁执行工具?
- 谁负责参数校验、权限、超时和错误恢复?
这些职责可能跨 MCP、模型 API 和 Agent Runtime 多层完成。
最小例子
假设一个 MCP Server 暴露:
search_repo(query)
MCP 负责让 Host 获得这个工具及 schema。
当用户问“代码里哪里实现了鉴权”时,模型可以通过 Function Calling / Tool Calling 机制生成:
{
"name": "search_repo",
"arguments": {
"query": "authentication"
}
}
真正的搜索由外部 Server 执行。
学习检查
- Function Calling 与 MCP 分别主要解决哪一层问题?
- 模型返回 tool name + arguments 后,谁真正执行工具?
- 一个工具不是 MCP 提供的,还能不能使用 Function Calling?
- MCP Server 暴露 tool 后,模型是否一定自动理解何时调用它?
- 画出“模型通过 MCP 工具搜索代码”的最小端到端链路。