1. 工具发现(Tool Discovery)
-
客户端行为 :
用户输入问题后,客户端(如Claude Desktop)向已配置的MCP服务器(如高德地图MCP服务)发送请求,获取可用的工具列表。
-
请求示例(HTTP GET):
arduinohttp复制GET https://mcp.amap.com/tools/list
-
响应示例(JSON):
jsonjson复制{ "tools": [ { "name": "maps_weather", "description": "查询指定城市的实时天气数据", "parameters": { "city": "string" } } ] }
-
-
LLM决策 :
LLM(如Claude)解析用户问题,匹配工具描述,发现
maps_weather
工具适合回答天气查询,并提取参数city: "北京"
。
2. 工具调用(Tool Execution)
-
客户端发起调用 :
客户端根据LLM生成的参数,向MCP服务器发送工具调用请求。
-
请求示例(HTTP POST):
csshttp复制POST https://mcp.amap.com/tools/call Headers: {"Content-Type": "application/json"} Body: { "tool": "maps_weather", "parameters": {"city": "北京"} }
-
-
MCP服务器执行 :
高德地图MCP服务收到请求后:
-
验证API权限和参数有效性。
-
调用内部天气API(如高德开放平台)获取实时数据。
-
返回结构化结果。
-
响应示例:
jsonjson复制{ "result": { "city": "北京", "weather": "晴天", "temperature": "22℃", "humidity": "45%" } }
-
3. 结果整合(Response Generation)
-
LLM生成自然语言回复 :
LLM接收MCP返回的JSON数据,转换为用户友好的自然语言:
arduinoplaintext复制"北京今天晴天,22℃,湿度45%。"
- 关键动作 :
- 提取
weather
和temperature
字段。 - 忽略冗余数据(如湿度,除非用户明确询问)。
- 补充上下文(如"今天")。
- 提取
- 关键动作 :
4. 协议交互流程图

关键设计特点
- 解耦LLM与工具 :
- LLM无需预置工具代码,通过动态发现和调用扩展能力。
- 标准化接口 :
- 所有工具遵循相同的
/tools/list
和/tools/call
端点。
- 所有工具遵循相同的
- 安全控制 :
- MCP服务器可限制敏感工具(如数据库写入)的访问权限。
对比其他协议(如OpenAI Function Calling)
特性
MCP协议
OpenAI Function Calling
工具发现
动态获取(需主动请求/tools/list
)
静态预定义(在API请求中传递工具描述)
执行方式
客户端直接调用MCP服务器
由OpenAI后端代理调用工具
适用场景
私有化部署、复杂工具链
快速集成OpenAI生态工具
通过这一流程,MCP协议实现了自然语言→工具调用→自然语言的闭环,同时保持灵活性和安全性。开发者可通过扩展MCP服务器支持更多工具(如股票查询、航班预订),而无需修改LLM核心逻辑。