MCP & Agent SDK:今天构建 agent 的事实标准
AI 系列第 16 篇。上一篇我们看了 agent 范式。这一篇看构建 agent 的事实标准——MCP 和 Agent SDK。
0. 一个一直没解决的工程问题
在 MCP 之前,要让 LLM 调用一个新工具,每个团队都要重复造轮子:
A 公司用 GPT-4o: 写 OpenAI function calling schema
B 公司用 Claude: 写 Anthropic tool use schema
C 公司用 Gemini: 写 Google function schema
D 公司用 Llama: 自己整一套 prompt 协议
每换一个模型,工具适配层就要重写。每个工具又要适配 N 家模型。N × M 适配问题。
如果我们能搞一个标准协议,让"工具发布者"和"模型调用方"用同一种语言对话——这就是 MCP 想做的事。
1. MCP 是什么
MCP(Model Context Protocol) 是 Anthropic 在 2024 年 11 月 发布的开源协议。
简而言之:
MCP 给 LLM 应用和外部工具/数据源之间,定义了一套标准的通信协议。
类比理解:
- HTTP 之于 web:每个网页不用关心 server 用什么语言写的,浏览器都能渲染。
- MCP 之于 AI:每个 agent 不用关心工具是 Python / Go / Rust 写的,只要工具符合 MCP,agent 都能调。
MCP 的核心组件
┌──────────────────────────────────────────────────┐
│ MCP Host (Claude Desktop / IDE / Custom App) │
│ │
│ ┌──────────────────┐ │
│ │ MCP Client │ │
│ └──────────────────┘ │
│ │ │
│ │ JSON-RPC over stdio/SSE/HTTP │
│ ▼ │
└──────────────────────────────────────────────────┘
▼
┌────────────────┐ ┌────────────────┐ ┌────────────────┐
│ MCP Server │ │ MCP Server │ │ MCP Server │
│ (Filesystem) │ │ (GitHub) │ │ (Database) │
└────────────────┘ └────────────────┘ └────────────────┘
- Host:用户面对的 AI 应用(Claude Desktop、Cursor、自家产品)。
- Client:Host 内部的 MCP 客户端,负责和 Server 通信。
- Server:暴露具体能力的进程。可以是本地脚本、远程 HTTP 服务、甚至云函数。
MCP 暴露的三类能力
- Tools(函数):可执行的操作。和 OpenAI function calling 同概念。
- Resources(资源):可读的数据源。例如文件、数据库表。
- Prompts(提示模板):预定义的 prompt 模板。
2. 一个最小可运行的 MCP Server
写一个暴露"读文件"工具的 MCP server(Python 版):
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("my-fs-server")
@mcp.tool()
def read_file(path: str) -> str:
"""读取本地文件的内容。"""
return open(path).read()
@mcp.tool()
def list_dir(path: str) -> list[str]:
"""列出目录中的文件。"""
import os
return os.listdir(path)
if __name__ == "__main__":
mcp.run()
跑起来后,任何支持 MCP 的客户端(Claude Desktop / Cursor / ...)通过配置就能用:
{
"mcpServers": {
"my-fs": {
"command": "python",
"args": ["my_fs_server.py"]
}
}
}
重点:你写一次 server,所有支持 MCP 的客户端都能用。M×N → M+N 的复杂度坍塌。
3. MCP 现在有多火
发布一年多(2024.11 → 2026.05),MCP 生态:
- 官方实现:Python / TypeScript / Rust / Go / C# SDK
- 官方支持:Anthropic Claude Desktop、Claude Code、Claude API
- 第三方采用:Cursor、Zed、Windsurf、Continue、Cline、Sourcegraph、Bloop...
- MCP 服务器市场:mcp.so 上几千个开源 server,覆盖 GitHub / Slack / Jira / PostgreSQL / Notion / 文件系统 / shell / 浏览器自动化 / ...
2025 年 3 月,OpenAI 宣布 Agents SDK 支持 MCP。2025 年 5 月,Google 在 Gemini API 中支持 MCP。这一刻起,MCP 从"Anthropic 的协议"变成了事实标准。
MCP vs OpenAI Function Calling
很多人问:它们冲突吗?
答案:不冲突。它们在不同层:
- Function Calling:一次 LLM API 调用的协议。模型怎么"表达"它要调工具。
- MCP:工具如何被发现、连接、管理的协议。
实际工程中:
LLM (任何模型)
│
│ function calling API
▼
应用代码
│
│ MCP protocol
▼
MCP Server (工具实现)
LLM 还是用 function calling 返回 tool_call → 应用代码把这个 tool_call 翻译成 MCP 调用 → MCP Server 执行 → 结果回传。
一句你可以拿去吹的话: Function calling 是"模型 ↔ 应用"的协议;MCP 是"应用 ↔ 工具"的协议。两件事,互补。
4. Agent SDK:在 MCP 之上的高阶抽象
MCP 解决了"工具协议"。但还有更高层的问题——
- agent 循环怎么写?
- state 怎么管?
- 多 agent 协作怎么编排?
这就是 Agent SDK 的角色。
主流 Agent SDK
Anthropic Claude Agent SDK (2025)
Anthropic 官方。专门为 Claude 优化。
from claude_agent_sdk import Agent
agent = Agent(
model="claude-opus-4-7",
tools=[...],
mcp_servers=["./fs_server.py"],
max_iterations=50
)
result = agent.run("帮我重构 src/ 下所有 React 组件,把 class component 改成 hooks。")
特点:内建 MCP 支持、内建 thinking 模式、文件系统 sandboxing。
OpenAI Agents SDK (2025)
OpenAI 官方。原 Swarm 的进化版。
from openai.agents import Agent, Runner
triage = Agent(name="Triage", instructions="...", handoffs=[support, sales])
support = Agent(name="Support", instructions="...")
sales = Agent(name="Sales", instructions="...")
result = Runner.run(triage, "我想买你们的企业版")
# triage 自动 handoff 给 sales agent
特点:handoff 机制(agent 间转交)、guardrails(安全护栏)、tracing。
LangGraph (LangChain)
开源最流行的。Graph-based state machine。
from langgraph.graph import StateGraph
graph = StateGraph(MyState)
graph.add_node("plan", planner)
graph.add_node("execute", executor)
graph.add_node("check", checker)
graph.add_edge("plan", "execute")
graph.add_conditional_edges("check", lambda s: "execute" if s.failed else END)
app = graph.compile()
特点:可视化 graph、好做复杂分支、对接所有模型。
Pydantic AI / DSPy / CrewAI / AutoGen
各有侧重:
- Pydantic AI:类型安全 + 结构化输出
- DSPy:自动 prompt 优化
- CrewAI:multi-agent 协作
- AutoGen:Microsoft 的 multi-agent
怎么选?
| 场景 | 推荐 |
|---|---|
| 用 Claude,简单 agent | Claude Agent SDK |
| 用 OpenAI,多 agent handoff | OpenAI Agents SDK |
| 复杂 workflow,需要可视化 | LangGraph |
| 需要类型安全 | Pydantic AI |
| 跨模型,开源优先 | LangGraph 或 LlamaIndex |
5. MCP 的真实价值与挑战
真实价值
价值 1:可移植性
写一次 MCP Server,可以被 Claude / Cursor / Cline / 自家 app 复用。生态网络效应开始显现。
价值 2:本地工具的"App Store"
mcp.so 已经几千个 server。需要 GitHub 集成?装一个。需要 Slack?装一个。像装浏览器插件一样装 agent 能力。
价值 3:安全边界
每个 MCP Server 是独立进程。可以做细粒度权限控制:A server 只读,B server 能写但要确认。比"LLM 直接执行 shell"安全得多。
价值 4:组织内复用
公司 SRE 团队写一个 MCP Server 暴露内部 API → 全公司所有 AI 应用都能用。消除重复造轮子。
挑战
挑战 1:authentication 标准还不成熟
每个 MCP Server 自己处理 auth,没统一规范。今年(2026)OAuth 2.0 集成草案在推。
挑战 2:performance
MCP 是 JSON-RPC。每次调用都有序列化/反序列化开销。高频调用场景下不如 in-process function call。
挑战 3:版本管理
工具 schema 变了,所有客户端怎么知道?目前还靠人肉协调。
挑战 4:discovery
我有 100 个 MCP Server 装着,哪个工具该用?现在还是人配。未来需要 LLM 自动 discover。
6. 2026 的 Agent 技术栈长什么样
把这几篇串起来,看一个生产级 agent 的完整 stack:
┌────────────────────────────────────────────────────────────┐
│ 应用层 Claude Desktop / Custom UI │
├────────────────────────────────────────────────────────────┤
│ Agent SDK Claude Agent SDK / LangGraph / OpenAI Agents │
│ └─ 管理 loop, state, multi-agent, observability │
├────────────────────────────────────────────────────────────┤
│ Tool 协议层 MCP(Model Context Protocol) │
│ └─ 工具如何暴露、连接、管理 │
├────────────────────────────────────────────────────────────┤
│ LLM 接口层 OpenAI / Anthropic / Google / Local API │
│ └─ Function calling、Structured Outputs、Streaming │
├────────────────────────────────────────────────────────────┤
│ Model 层 Claude Opus 4.7 / GPT-5 / Gemini 2 / Llama 4 │
│ └─ 实际推理引擎 │
└────────────────────────────────────────────────────────────┘
每一层都有标准接口。每一层都可以独立换。这就是工程化的体现——从"炼丹"到"装配"的转变。
一句你可以拿去吹的话: 2024 之前的 AI 应用是 "ChatGPT wrapper"。2026 的 AI 应用是 "Agent + MCP + Tools" 的工程化系统。这之间的差距,和 1995 vs 2005 的 web 开发差距一样大。
7. 给你的小作业
- 写一个最简单的 MCP Server,暴露
get_current_time()工具。 - 解释 MCP 和 OpenAI function calling 是怎么共存的,而不是替代关系。
- 如果你公司 5 个产品都要接 AI,是各自实现 tool,还是统一搞一套 MCP Server?给三个理由。
下一篇钩子:到这里我们已经能做出能跑的 agent。 但怎么知道你的 agent 真的好?怎么衡量"GPT-5 比 GPT-4 强"这种说法? 下一篇我们讲 Evals——AI 工程里最被低估、又最难做对的一块。