§03 MCP 把"调工具"变成了插 USB-C

§03 MCP 把"调工具"变成了插 USB-C

本章目录

03.1 2024 年 11 月 25 日

Anthropic 发了篇文章。标题叫《Introducing the Model Context Protocol》。

这一天,被很多人当成 Agent 工程的转折点。

03.2 以前调工具有多乱

你想让 Agent 发邮件。你得为 Gmail 写一套适配。

换 Outlook,再写一套。

换 Claude 模型,又写一套。

一团乱麻。开发者苦不堪言。

03.3 Function Calling:Agent 的"伸手"

先说基础。开发者给模型列好"有哪些函数可用":

# 定义 Agent 能调用的工具
tools = [
  {
    "name": "send_email",      # 发邮件
    "params": {"to": "string", "body": "string"}
  },
  {
    "name": "query_db",        # 查数据库
    "params": {"sql": "string"}
  }
]
# 模型需要时自己选函数并填参数

这叫函数调用(Function Calling)。Agent 由此从"动嘴"变"动手"。

03.3.1 一个工程细节:让输出"有类型"

模型默认吐自然语言。你让"返回 JSON",它偶尔漏个逗号就崩。

专业做法叫类型化输出(Typed Outputs):先定义好返回结构(像表格的列),模型只能按列填。解析不再靠"猜文本",而是读确定字段。

# 类型化输出:先定结构,再让模型填
class EmailResult(BaseModel):
    ok: bool                 # 成功没
    error_code: str | None   # 失败原因
    message_id: str | None   # 发出去的邮件 ID
# 模型按这结构返回,解析零歧义

经验:凡是要让另一个程序读 Agent 的产出,就用类型化输出。少一处文本解析,少十个线上 bug。

03.4 MCP:AI 世界的 USB-C

MCP(Model Context Protocol,模型上下文协议)定了一套统一标准。

一句话:任何 Agent,都能"插上"任何工具或数据源。即插即用,可替换。

这就是经典的"USB-C 比喻"。

以前电脑接打印机、硬盘、显示器,各用各的口。乱。后来统一成 USB-C,一个口通吃。

MCP 就是 AI 的 USB-C。

示意图 4:MCP = AI 世界的 USB-C

flowchart LR
  A["任意 Agent"] -->|"MCP 协议"| H["MCP 中枢<br/>(AI 的 USB-C)"]
  H --> T1["发邮件"]
  H --> T2["查数据库"]
  H --> T3["读日历"]
  H --> T4["出图表"]
  style H fill:#0ea5a4,stroke:#0f766e,color:#fff
  style A fill:#e8f0fe,stroke:#2563eb

03.5 MCP 和 A2A 不是一回事

2026 年还有个协议叫 A2A(Agent2Agent,Google 推)。别混。

协议 解决啥 类比 标叔的结论
MCP Agent 调工具/数据 USB-C 接外设 接"物"用 MCP
A2A Agent 找 Agent 协作 微服务间通信 找"人"用 A2A

两者互补。一个 Agent 团队里,MCP 接工具,A2A 连同伴。

示意图 5:MCP 接‘物’,A2A 连‘人’

flowchart TD
  A["Agent A"] -->|"MCP 接工具/数据"| Tools["工具 · 数据源"]
  A -->|"A2A 找同伴"| B["Agent B"]
  style A fill:#e8f0fe,stroke:#2563eb
  style Tools fill:#f1f5f9,stroke:#94a3b8
  style B fill:#e8f0fe,stroke:#2563eb

03.6 对你意味着什么

以前 Agent 只能聊。现在它能:查你日历、拉销售数据、发邮件、出图表。

而且不用每个功能从零写。插上就行。

核心建议:选 Agent 工具时,看它支不支持 MCP。支持,等于它的"外设生态"是开放的。

§03 讲完"手"。下一章讲"组队"——多智能体系统,2026 年最热的方向。