MCP 模型上下文协议:AI Agent 与工具通信的统一标准
MCP(Model Context Protocol)是 Anthropic 于2024年提出的开放协议,旨在标准化大语言模型与外部工具、数据源之间的通信方式。本文深入讲解 MCP 的架构设计、核心概念(Tools/Resources/Prompts)、工作原理及实际代码示例,帮助开发者快速理解这一正在重塑 AI Agent 生态的关键技术。
理解 MCP 的设计动机和核心架构,掌握 Client-Server 模型在 AI Agent 场景下的应用,能够编写一个基本的 MCP Server 并与 LLM 客户端对接。
直觉模型
想象你去一家餐厅吃饭。你(LLM)只需要看菜单点菜,不需要知道厨房怎么炒菜。服务员(MCP Client)把你的订单传给厨房,厨房(MCP Server)做好菜后端上来。MCP 做的事情,就是定义「菜单格式」「点菜协议」和「上菜格式」——让任何餐厅都能服务任何顾客,而不需要逐一对接。
在 MCP 出现之前,每个 LLM 厂商都有自己的 function calling 格式。OpenAI 用 JSON Schema,Anthropic 用 XML,Google 用 protobuf。开发者要为每个平台写不同的工具集成代码,就像每去一家餐厅就要学一套新的点菜规矩。MCP 统一了这套规则。
核心要点
1. 架构设计
MCP 采用 Client-Server architecture,包含三个角色:
- MCP Host:运行 LLM 的应用程序(如 Claude Desktop、Cursor IDE),负责发起请求
- MCP Client:Host 内部的协议适配层,维护与 Server 的 1:1 连接
- MCP Server:暴露具体能力的轻量进程,每个 Server 负责一类工具或数据源
通信使用 JSON-RPC 2.0 协议,支持 stdio 和 SSE 两种传输方式。stdio 适合本地进程通信,SSE 适合远程服务。
2. 三大核心原语
MCP 定义了三种能力原语(primitives):
| 原语 | 方向 | 用途 | 示例 |
|---|---|---|---|
| Tools | Host → Server | 执行操作,有副作用 | 查询数据库、发送邮件 |
| Resources | Host → Server | 读取数据,无副作用 | 读取文件内容、获取配置 |
| Prompts | Server → Host | 提供预设提示词模板 | 代码审查模板、SQL 生成模板 |
3. 实战:编写一个 MCP Server
使用 Python SDK 创建一个简单的天气查询 Server:
from mcp.server import Server
from mcp.types import Tool, TextContent
import json
server = Server("weather-server")
@server.list_tools()
async def list_tools():
return [Tool(
name="get_weather",
description="查询指定城市的天气",
inputSchema={
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称"}
},
"required": ["city"]
}
)]
@server.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "get_weather":
city = arguments.get("city", "")
# 模拟天气查询
return [TextContent(
type="text",
text=json.dumps({"city": city, "temp": 25, "condition": "sunny"})
)]
if __name__ == "__main__":
import asyncio
from mcp.server.stdio import stdio_server
async def main():
async with stdio_server() as (read, write):
await server.run(read, write, server.create_initialization_options())
asyncio.run(main())
4. 生命周期与能力协商
MCP 连接建立时,Client 和 Server 会进行 capability negotiation:
- Client 发送
initialize请求,声明自身支持的协议版本和能力 - Server 响应自身能力和 server info
- Client 发送
initialized通知,握手完成 - 之后双方通过
tools/list、tools/call等方法交互
5. 为什么 MCP 重要
2026年,MCP 已被 ChatGPT、Claude、Gemini 等主流平台采纳。Manufact(YC S25)推出了 MCP Cloud 平台,让开发者一条命令部署 MCP Server。这意味着:
- 一次开发,多平台运行:写一个 MCP Server,ChatGPT、Claude、Cursor 都能用
- 标准化工具市场:类似 npm 生态,MCP Server 可以被复用和分享
- 降低 context engineering 复杂度:LLM 不再需要为每个工具学习不同的调用格式