从零开始学MCP(1)| MCP 协议核心原理解析
统一 AI 工具调用的“通信语言”
关键词:工具调用标准化、Client/Server 架构、上下文传递、SSE 流式响应
一、MCP 解决了什么痛点?
在 MCP 出现之前,AI 应用调用外部工具(如数据库、API)存在三大问题:
-
碎片化:每个模型需单独适配工具(如 OpenAI Function Calling vs Claude Tool Use)
-
高耦合:工具逻辑与模型代码深度绑定,难以复用
-
上下文丢失:多轮调用时状态管理复杂
MCP 的核心目标:
定义一套与模型无关的标准化协议,让任意 AI 模型通过统一接口调用任意工具。
二、协议架构:Client/Server 解耦设计

核心角色定义
|
组件 |
职责 |
示例实体 |
|---|---|---|
| Client |
发起工具调用请求 |
Claude/ChatGPT/Cursor |
| Server |
路由请求到工具并返回结果 |
本地 FastMCP 服务 |
| Tool |
执行具体操作 |
天气查询/数据库连接器 |
三、协议通信流程拆解
步骤 1:Client 发起请求(Request)
Client 发送 结构化 JSON 到 MCP Server,包含:
-
**
context**:历史对话/当前状态(协议核心!) -
**
tool_name**:目标工具标识符 -
**
parameters**:工具调用参数
{
"context": {
"user_id": "u123",
"session_id": "s456",
"history": [{"role": "user", "content": "查询北京天气"}]
},
"tool_name": "get_weather",
"parameters": {"city": "北京", "unit": "celsius"}
}
步骤 2:Server 调用工具(Execution)
Server 根据 tool_name 路由到注册的工具函数,注入上下文并执行:
# MCP 工具注册示例(Python)
@mcp_tool(name="get_weather")
defweather_api(city: str, unit: str, context: dict) -> dict:
# 可访问 context["user_id"] 做权限校验
return fetch_weather(city, unit) # 调用真实 API
步骤 3:流式返回结果(Response)
通过 Server-Sent Events(SSE) 流式返回,支持大结果分块传输:
HTTP/1.1 200 OK
Content-Type: text/event-stream
event: result_chunk
data: {"progress": 30, "text": "正在获取数据..."}
event: final_result
data: {"temp": 25, "humidity": 60}
四、关键技术特性解析
1. 上下文传递(Context Propagation)
核心价值:在多轮交互中保持状态连续性
-
客户端在每次请求中携带完整上下文(如用户 ID、对话历史)
-
服务端可在响应中修改上下文(实现状态机)
// Server 可返回新上下文
{"result": "...", "updated_context": {"selected_city": "北京"}}
2. 工具动态发现(Tool Discovery)
Client 启动时通过 /registry 接口拉取 Server 的工具清单:
// GET http://mcp-server/registry
{
"tools": [
{
"name": "get_weather",
"description": "查询城市天气",
"parameters": {
"city": {"type": "string", "required": true},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
}
}
]
}
3. 安全控制(OAuth2 集成)
在工具执行前进行权限校验:
defweather_api(city: str, context: dict):
user_token = context.get("user_token")
ifnot validate_token(user_token, scope="weather:read"):
raise MCPError(code=403, message="无权访问天气服务")
五、对比传统方案:为什么选择 MCP?
|
能力 |
MCP 方案 |
传统 Function Calling |
|---|---|---|
| 跨模型兼容 |
✅ 统一接口 |
❌ 每个模型需独立适配 |
| 工具热插拔 |
✅ 服务端动态注册 |
❌ 需重新部署模型 |
| 上下文管理 |
✅ 显式状态传递 |
❌ 依赖模型记忆,不可靠 |
| 调试支持 |
✅ 内置 Trace Viewer |
❌ 自行搭建日志系统 |
六、实战:快速验证 MCP 流程
1. 启动 Mock 服务
pip install fast-mcp
fast-mcp --tools demo_tools.py
2. 发起请求(cURL 示例)
curl -X POST http://localhost:8000/execute \
-H "Content-Type: application/json" \
-d '{
"tool_name": "get_weather",
"parameters": {"city": "上海"},
"context": {"user_id": "test"}
}'
3. 观察响应
{
"result": {"temp": 28, "condition": "sunny"},
"updated_context": {"last_city": "上海"}
}
推荐阅读
精选技术干货
精选文章
Docker
Selenium
学社精选
- 测试开发之路 大厂面试总结 - 霍格沃兹测试开发学社 - 爱测-测试人社区
- 【面试】分享一个面试题总结,来置个顶 - 霍格沃兹测试学院校内交流 - 爱测-测试人社区
- 测试人生 | 从外包菜鸟到测试开发,薪资一年翻三倍,连自己都不敢信!(附面试真题与答案) - 测试开发 - 爱测-测试人社区
- 人工智能与自动化测试结合实战-探索人工智能在测试领域中的应用
- 爱测智能化测试平台
- 自动化测试平台
- 精准测试平台
- AI测试开发企业技术咨询服务
技术成长路线
系统化进阶路径与学习方案
- 人工智能测试开发路径
- 名企定向就业路径
- 测试开发进阶路线
- 测试开发高阶路线
- 性能测试进阶路径
- 测试管理专项提升路径
- 私教一对一技术指导
- 全日制 / 周末学习计划
- 公众号:霍格沃兹测试学院
- 视频号:霍格沃兹软件测试
- ChatGPT体验地址:霍格沃兹测试开发学社
- 霍格沃兹测试开发学社
企业级解决方案
测试体系建设与项目落地
- 全流程质量保障方案
- 按需定制化测试团队
- 自动化测试框架构建
- AI驱动的测试平台实施
- 车载测试专项方案
- 测吧(北京)科技有限公司
技术平台与工具
自研工具与开放资源
- 爱测智能化测试平台 - 测吧(北京)科技有限公司
- ceshiren.com 技术社区
- 开源工具 AppCrawler
- AI测试助手霍格沃兹测试开发学社
- 开源工具Hogwarts-Browser-Use
人工智能测试开发学习专区
更多推荐

所有评论(0)