Skip to content

引言

1996 年之前,电脑的外设世界是一团混乱:键盘用 PS/2 接口,打印机用并口,鼠标用串口,调制解调器用另一个串口……每个设备都需要自己专用的连接器和驱动程序。如果你想连 5 种设备,你需要 5 种不同的接口和 5 套驱动。

然后 USB 出现了。一个接口,统一所有。键盘、鼠标、打印机、U 盘——全插同一种口。

2024 年的 AI 工具世界,正处于 USB 出现前的混乱状态。你有 N 个工具和 M 个模型,就需要 N × M 个集成适配器。Anthropic 提出的 MCP(Model Context Protocol),就是要成为 AI 工具世界的 USB。

2023.6OpenAI 发布 Function Calling,GPT-4 首次支持
2023.11支持并行工具调用和 tool_choice 控制
2024.1Claude 支持 tool_use,与 OpenAI 格式略有不同
2024.6Gemini 支持 Function Calling
2024.11Anthropic 发布 MCP 协议,开源
2025MCP 生态快速发展,社区贡献数百个 MCP Server

N × M 问题

没有统一标准时的困境

工具 × 模型的集成矩阵:

           GPT-4    Claude    Gemini    DeepSeek
文件读取    适配器₁   适配器₂   适配器₃   适配器₄
数据库查询  适配器₅   适配器₆   适配器₇   适配器₈
搜索引擎    适配器₉   适配器₁₀  适配器₁₁  适配器₁₂
代码执行    适配器₁₃  适配器₁₄  适配器₁₅  适配器₁₆

N 个工具 × M 个模型 = N × M 个集成
每增加一个新工具或新模型,需要写新的适配器

各家的工具调用格式差异

python
# OpenAI 的格式
tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "获取天气",
        "parameters": {"type": "object", "properties": {"city": {"type": "string"}}}
    }
}]

# Claude 的格式(相似但不同)
tools = [{
    "name": "get_weather",              # 没有 "function" 嵌套层
    "description": "获取天气",
    "input_schema": {                   # 不叫 "parameters" 叫 "input_schema"
        "type": "object",
        "properties": {"city": {"type": "string"}}
    }
}]

# Gemini 的格式
tools = [{
    "function_declarations": [{          # 又一层嵌套
        "name": "get_weather",
        "description": "获取天气",
        "parameters": {...}
    }]
}]

核心概念相同(JSON Schema 定义工具),但实现细节不同。这就像每个国家用不同的电源插头——功能一样,但互不兼容。

MCP:Model Context Protocol

什么是 MCP?

MCP 是 Anthropic 在 2024 年 11 月开源的一个协议,目标是标准化 AI 模型与外部工具/数据的连接方式

MCP 的核心类比:

  USB 统一了硬件接口
  MCP 统一了 AI 工具接口

  USB 之前:
    每个设备需要自己的接口和驱动
  USB 之后:
    所有设备用同一个标准

  MCP 之前:
    每个工具需要针对每个模型写适配器
  MCP 之后(愿景):
    所有工具用同一个协议,所有模型都支持

MCP 架构

MCP 架构:

  ┌─────────────┐
  │   AI 应用    │  ← Host(如 Claude Desktop, Cursor, VS Code)
  │             │
  │  MCP Client │  ← 管理与 Server 的连接
  └──────┬──────┘
         │ MCP 协议(JSON-RPC)

  ┌──────┴──────┐
  │  MCP Server │  ← 提供具体工具能力的进程
  │             │
  │  工具:      │
  │  - 文件读写  │
  │  - 数据库查询│
  │  - API 调用  │
  └─────────────┘

关键:
  Host 运行 MCP Client,Client 通过标准协议连接 MCP Server
  MCP Server 封装了具体的工具实现
  任何 AI 应用都能通过 MCP 协议使用同一个 Server

MCP 的三种能力

能力说明例子
Tools模型可以调用的函数文件操作、API 调用、代码执行
Resources模型可以读取的数据文件内容、数据库记录、API 响应
Prompts预定义的提示词模板常用任务的标准提示词

一个简单的 MCP Server 示例

python
# 使用 Python MCP SDK
from mcp.server import Server

server = Server("weather-server")

@server.tool()
async def get_weather(city: str) -> str:
    """获取指定城市的天气信息"""
    # 实际实现:调用天气 API
    return f"{city}: 晴天, 28°C"

@server.resource("weather://forecast/{city}")
async def weather_forecast(city: str) -> str:
    """获取城市天气预报"""
    return f"{city} 未来三天: 晴、多云、晴"

# 启动 Server
# 任何支持 MCP 的 AI 应用都可以使用这个 Server 的工具

MCP 的生态

MCP 的生态现状(2025 年初):

  官方 Server:
  ├── filesystem — 文件系统操作
  ├── postgres — PostgreSQL 数据库
  ├── github — GitHub API
  ├── puppeteer — 浏览器自动化
  └── brave-search — 网页搜索

  社区 Server(数百个):
  ├── 数据库:MySQL, MongoDB, Redis...
  ├── API:Slack, Notion, Jira...
  ├── 开发工具:Git, Docker, Kubernetes...
  └── 各种垂直领域工具

  Host 支持:
  ├── Claude Desktop — 原生支持
  ├── Cursor — 集成 MCP
  ├── VS Code (Copilot) — 支持 MCP
  └── 其他 IDE 和工具陆续接入

超越 OpenAI:各家如何处理 Tool Calling

对比表

维度OpenAIClaudeGemini
工具定义tools.function.parameterstools.input_schemafunction_declarations
并行调用支持支持支持
工具选择auto/none/required/指定auto/any/指定auto/none/指定
流式支持支持支持
MCP通过社区实现原生支持实验性

抽象层:跨模型统一接口

python
# 使用 LiteLLM 等统一 SDK
from litellm import completion

# 同一份代码,切换不同模型
# OpenAI
response = completion(model="gpt-4o", messages=messages, tools=tools)

# Claude
response = completion(model="claude-sonnet-4-20250514", messages=messages, tools=tools)

# Gemini
response = completion(model="gemini/gemini-2.5-pro", messages=messages, tools=tools)

# LiteLLM 自动处理格式差异

本节小结

概念要点
N × M 问题N 个工具 × M 个模型 = N × M 个集成适配器
MCPAnthropic 2024.11 开源的统一协议,AI 工具的 USB
MCP 架构Host → MCP Client → MCP Server,标准化的工具连接
格式差异各家 API 格式略有不同,但核心概念一致(JSON Schema)
趋势MCP 生态快速发展,跨模型统一接口正在形成

思考题

  1. MCP 能否真正成为所有 AI 模型的统一标准?有哪些阻力?
  2. MCP 和传统软件中的 API 网关有什么异同?
  3. 如果你是一个 SaaS 产品的开发者,你会为你的产品开发 MCP Server 吗?为什么?