MCP vs Function Calling vs Plugins:三者定位对比
High Contrast
Dark Mode
Light Mode
Sepia
Forest
4 min read768 words

MCP vs Function Calling vs Plugins:三者定位对比

很多人在接触 MCP 时的第一个问题是:"这和 OpenAI 的 Function Calling 有什么区别?和 ChatGPT Plugins 又是什么关系?" 本节做清晰的三方对比,帮你在不同场景选择合适的方案。

三者核心定位

graph TD subgraph "工具调用技术家族" A["Function Calling
(OpenAI 标准)"] B["ChatGPT Plugins
(已停用)"] C["MCP
(Anthropic 开源标准)"] end A --> D["调用方式:API 参数传递
作用域:单次 API 调用
实现方:应用开发者"] B --> E["调用方式:HTTP REST
作用域:ChatGPT.com 平台
实现方:第三方开发者"] C --> F["调用方式:JSON-RPC 进程间通信
作用域:任意 MCP 兼容客户端
实现方:工具开发者,一次实现多处复用"] style A fill:#4A90D9,color:#fff style B fill:#999,color:#fff style C fill:#27AE60,color:#fff

详细对比表

维度 Function Calling ChatGPT Plugins MCP
创建者 OpenAI OpenAI(已于2024年停用) Anthropic(开源)
协议标准 私有(OpenAI API 格式) 私有(OpenAPI YAML) 开放标准(JSON-RPC 2.0)
工具运行位置 由应用开发者自己调用 第三方服务器(HTTP) 本地进程或远程服务
客户端绑定 绑定到 OpenAI API 绑定到 ChatGPT.com 任意 MCP Host
工具发现 每次请求手动传入 Plugin Store Server 启动时自动注册
多工具编排 需要应用层实现 平台内置 MCP Client 自动路由
状态保持 无状态(每次 API 调用) 无状态 Server 进程持续运行,可有状态
本地资源访问 ❌ 需要开发者代理 ✅ 直接访问本地文件/DB
开源生态 有第三方封装 已停止维护 活跃(官方 + 社区 Server 库)

什么时候选 Function Calling

适合 Function Calling 的场景:

# Function Calling 典型用法
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "查询订单 #12345 的状态"}],
tools=[{
"type": "function",
"function": {
"name": "get_order_status",
"description": "查询订单状态",
"parameters": {
"type": "object",
"properties": {
"order_id": {"type": "string"}
}
}
}
}]
)

什么时候选 MCP

适合 MCP 的场景:

// MCP Server 工具定义(一次,所有 Host 都能用)
{
"name": "query_database",
"description": "查询 SQLite 数据库",
"inputSchema": {
"type": "object",
"properties": {
"sql": { "type": "string", "description": "SQL 查询语句" }
},
"required": ["sql"]
}
}

能否混合使用?

可以,两者不互斥:

graph LR subgraph "同一个 AI 应用" A[LLM 推理层] B["MCP Tools
(本地工具:文件、浏览器)"] C["Function Calling
(后端业务逻辑:订单、支付)"] end A --> B A --> C

典型的混合架构:使用 MCP 访问本地开发环境(读代码、运行测试),用 Function Calling 处理业务系统调用(查库存、创建工单)。

关于 ChatGPT Plugins

ChatGPT Plugins 已于 2024 年初正式停用,OpenAI 的方向转向了 GPT Actions(本质是 Function Calling + OpenAPI 规范)。如果你还有 Plugin 的历史代码,可以考虑:

  1. 将 Plugin 的 HTTP 接口包装成 MCP Server(适合本地使用)
  2. 将 Plugin 逻辑移植为 OpenAI Function Calling(适合 API 应用)

本节执行清单


下一节:MCP 生态地图与工具选型思路