Skip to content
🔗 分享本题
查看我的学习进度 →

MCP与Function Calling分工对比图解

🧠 图解记忆: Function Calling 决定怎么叫函数,MCP 规定能力如何被发现、连接和调用。

💡 答案要点

核心区别:

维度MCPFunction Calling
定位标准化协议,连接整个工具生态模型能力,单次工具调用
范围协议层,跨模型/跨应用模型层,单模型内置能力
发现机制Server注册→Client发现Prompt描述→模型推断
安全协议级安全、权限控制应用层自行实现
状态管理支持有状态会话无状态每次调用
生态已有数千个Server需要每个工具单独实现

Function Calling工作原理:

传统Function Calling流程:
用户请求 → 模型识别需调用工具 → 生成函数名+参数 → 执行 → 返回结果 → 模型生成回复

# 模型输出(推断)
{
  "tool_calls": [{
    "name": "get_weather",
    "arguments": {"city": "北京"}
  }]
}
→ 开发者解析输出 → 调用实际函数 → 拼回上下文

问题:
- 每个工具需要单独开发适配代码
- 安全检查、权限控制由应用自行实现
- 切换模型需要改适配代码

MCP工作原理:

MCP流程:
用户请求 → MCP Client发现可用工具 → 模型选择工具 → MCP Server执行 → 返回结果

优势:
- 工具注册一次,任何兼容MCP的模型都能用
- 安全、权限、超时由协议统一管理
- 工具开发者只需实现一次MCP Server

架构对比图:

Function Calling(应用各自实现):
┌──────────┐     ┌──────────┐     ┌──────────┐
│  模型A   │────▶│ App代码  │────▶│  工具1   │  ← 每个模型+工具组合单独适配
│          │     │ 适配层   │     └──────────┘
└──────────┘     └──────────┘     ┌──────────┐
                                  │  工具2   │  ← 安全、权限、超时全在App层
                                  └──────────┘

MCP(标准化协议):
┌──────────┐     ┌──────────┐     ┌──────────┐
│  模型A   │────▶│ MCP      │────▶│ MCP      │  ← 工具只需实现一次MCP Server
│          │     │ Client   │     │ Server   │
└──────────┘     └──────────┘     └──────────┘
       │                                 ┌──────────┐
       │                                 │  工具1   │
       │                                 ├──────────┤
       │                                 │  工具2   │  ← 安全、权限、超时在协议层
       │                                 └──────────┘

┌──────────┐     ┌──────────┐
│  模型B   │────▶│ MCP      │  ← 切换模型不需要改工具代码
│          │     │ Client   │
└──────────┘     └──────────┘

选型决策:

场景推荐原因
单模型+少量工具Function Calling简单、直接
多模型共享工具MCP一次实现,多模型复用
工具生态集成MCP已有数千个现成Server
快速POCFunction Calling5分钟跑起来
企业生产MCP标准化、安全可控

面试话术:

"MCP和Function Calling是不同层次的东西:Function Calling是模型的能力(模型'知道'怎么调工具),MCP是工具的协议(工具'知道'怎么被调)。Function Calling简单直接,单模型少工具够用;MCP适合多模型共享工具生态,企业里Cursor/Claude Code/GitHub Copilot都能用同一套MCP Server,不需要重复开发。类比的话,Function Calling像是'每款手机自带USB口',MCP像是'统一USB协议,所有设备都能用'。"

📚 参考:MCP 官方 FAQ(与 Function Calling 的关系)