概念

MCP(Model Context Protocol) 性质:是一种开放协议,用于规范

大模型 <-> 外部世界(tools/resource/application) 之间的信息传递与协作

组成则是由 协议层接口 组成,好比于浏览器中的HTTP + API,其中HTTP定义了 规范 ,而API则是满足规范下的请求调用

概括来说,相比于原先的纯生成式的llm,被赋予了技能,可以上网搜索,可以查询路况,可以抢购疯狂星期四,可以查询数据库,等等一系列的行为

理解

  1. MCP将外部的world抽象为了三类资源

    • Tools:可执行动作 eg:发送邮件,文档查询,数据库CRUD…
    • Resources:知识库,数据库,文件结构…
    • Prompts:一套完善的提示词
  2. 统一调用

    模型向MCP Server发送请求

    • listTools/callTool(列出可用工具列表|调用指定工具)
    • listResources/readResources
    • listPrompts/callPrompt
  3. 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.png

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

一次工具调用的完整时序
2.png

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内部结构示意
3.png

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

  1. init.py
1
print("置空,后续同步更新")