写点什么

从零开始学 MCP(1)| MCP 协议核心原理解析

  • 2025-08-14
    黑龙江
  • 本文字数:1739 字

    阅读完需:约 6 分钟

以下是以 《MCP 协议核心原理解析》 为标题的技术教程,内容深入浅出,结合代码示例与架构图,帮助开发者系统理解 MCP(Model Context Protocol)的设计哲学与运行机制:


测试开发全景图:人工智能测试、智能驱动、自动化、测试开发、左移右移与DevOps的持续交付

一、MCP 解决了什么痛点?

在 MCP 出现之前,AI 应用调用外部工具(如数据库、API)存在三大问题:


  1. 碎片化:每个模型需单独适配工具(如 OpenAI Function Calling vs Claude Tool Use)

  2. 高耦合:工具逻辑与模型代码深度绑定,难以复用

  3. 上下文丢失:多轮调用时状态管理复杂


MCP 的核心目标


定义一套与模型无关的标准化协议,让任意 AI 模型通过统一接口调用任意工具。


二、协议架构:Client/Server 解耦设计



核心角色定义



三、协议通信流程拆解

步骤 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")def weather_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 OKContent-Type: text/event-stream
event: result_chunkdata: {"progress": 30, "text": "正在获取数据..."}
event: final_resultdata: {"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 集成)

在工具执行前进行权限校验:


def weather_api(city: str, context: dict):    user_token = context.get("user_token")    if not validate_token(user_token, scope="weather:read"):        raise MCPError(code=403, message="无权访问天气服务")
复制代码


五、对比传统方案:为什么选择 MCP?



六、实战:快速验证 MCP 流程

1. 启动 Mock 服务

pip install fast-mcpfast-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": "上海"}}
复制代码


七、协议演进方向(2025+)

  1. 多模态扩展:支持图像/音频作为工具输入输出

  2. 智能体协作:MCP Server 可嵌套调用其他 MCP Server

  3. 边缘计算:轻量化客户端运行在 IoT 设备


结语:MCP 不是简单的 RPC 协议,而是为 AI Agent 设计的 “工具协作语言”。其通过上下文传递、流式响应、动态注册等机制,为构建复杂智能应用提供了基础设施。


测试开发全景图:人工智能测试、智能驱动、自动化、测试开发、左移右移与DevOps的持续交付


下一篇预告:《零基础 MCP 开发环境配置》


将手把手配置 Python/Node.js 双环境,集成 Claude 与 Cursor 实战演示!


用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
从零开始学MCP(1)| MCP 协议核心原理解析_人工智能_测吧(北京)科技有限公司_InfoQ写作社区