概念 MCP(Model Context Protocol) 性质:是一种开放协议,用于规范
大模型 <-> 外部世界(tools/resource/application) 之间的信息传递与协作
组成则是由 协议层 与 接口 组成,好比于浏览器中的HTTP + API,其中HTTP定义了 规范 ,而API则是满足规范下的请求调用
概括来说,相比于原先的纯生成式的llm,被赋予了技能,可以上网搜索,可以查询路况,可以抢购疯狂星期四,可以查询数据库,等等一系列的行为
理解
MCP 将外部的world抽象为了三类资源
Tools :可执行动作 eg:发送邮件,文档查询,数据库CRUD…
Resources :知识库,数据库,文件结构…
Prompts :一套完善的提示词
统一调用
模型向MCP Server发送请求
listTools/callTool(列出可用工具列表|调用指定工具)
listResources/readResources
listPrompts/callPrompt
Client与Server解耦
上层 :MCP Client Claude,GPT,IDE插件,…
下层:MCP Server DB,API,本地项目资源,脚本 …
应用 MCP server可以组装成一个 能力立方体 可以通过大模型的灵活传参,将多个功能不一的MCP Server串联起来,即 workflow ,常见的单线flow示例如下
1 用户 -> 模型 -> MCP Client -> MCP Server -> 工具/资源 -> MCP Server -> MCP Client -> 模型 -> 用户
即llm先识别用户意图,分析是否需要调用工具,如果是,则输出指令传入MCP Client,在其中转化为 MCP标准格式传入Server,后逐层返回数据并交由llm输出。
在各路智能体框架中(LangGraph,CrewAI,Autogen)中,智能体其中的llm便是通过这种方式,遵循着这种协议规范(结构化Schema),去get相关的tools/resources/prompts等等,也正是这种解耦的架构设计,哪怕上端发生切换,MCP Server这端也无需做出较大的变动,即
工具开发做一遍,各路框架通吃
正是通过这套协议的规范,使得MCP Server变得复用性极强,可组装且易于维护拓展。
MCP与这些框架的关系
MCP:能力层(定义了标准对接范式)
Frame:编排层
图示(Mermaid)
1 2 3 4 5 6 7 8 9 10 flowchart LR %% 注释:这是MCP调用链路 User[用户] --> Model{大模型思考} Model -->|生成调用指令| Client[MCP Client] Client -->|协议转换| Server[MCP Server] Server -->|执行| Tool[工具/资源] Tool -->|返回结果| Server Server -->|封装结果| Client Client -->|格式转换| Model Model -->|生成回答| User
一次工具调用的完整时序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 sequenceDiagram participant User as 用户 participant Model as 大模型 participant MCPClient as MCP 客户端 participant MCPServer as MCP 服务器 participant Tool as 工具/资源 %% 用户提问 User->>Model: 自然语言问题(例:查一下最近的订单统计) %% 大模型思考 note over Model: 解析意图 + 规划是否需要调用工具 Model->>Model: 内部思考决策 %% 发起工具调用 Model->>MCPClient: 发起 MCP 工具调用请求<br/>(callTool: "get_orders_stats", args) %% MCP Client 与 Server 交互 note over MCPClient: 通过 JSON-RPC 协议请求 MCPClient->>MCPServer: JSON-RPC 请求 MCPServer->>Tool: 执行工具调用 Tool->>MCPServer: 返回工具结果 MCPServer->>MCPClient: JSON-RPC 响应 note over MCPClient: JSON-RPC 响应 %% 结果返回给模型 MCPClient->>Model: 将结果交回模型
MCP Server内部结构示意
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 flowchart TD Client[MCP 客户端] subgraph MCPServer[MCP 服务器] JSONRPC[JSON-RPC 处理层] ToolsDesc[Tools 描述: description + inputSchema] ResourcesDesc[Resources 描述: listResources / readResource] PromptsDesc[Prompts 描述: 可复用 Prompt 模板] ToolsImpl[工具实现层: API Client / 命令行等] ResourcesImpl[数据访问层: 文件系统 / 数据库 / 搜索引擎] PromptsImpl[Prompt 模板引擎] end Client -->|listTools / callTool / listResources 等| JSONRPC JSONRPC --> ToolsDesc JSONRPC --> ResourcesDesc JSONRPC --> PromptsDesc ToolsDesc --> ToolsImpl ResourcesDesc --> ResourcesImpl PromptsDesc --> PromptsImpl
代码实践 配置个简单的MCP-Server
init .py