由于网上对MCP原理的解析五花八门,角色和整体的调用流程都比较乱,这里做一个整理。 MCP(Model Context Protocol,模型上下文协议)是由 Anthropic 于 2024 年 11 月推出的一种开放标准协议,旨在解决大语言模型(LLM)与外部数据源、工具和服务之间交互的碎片化问题。它常被比作“AI 领域的 USB-C 接口”,因为它提供了一种统一、标准化的方式,让不同的 AI 应用能够安全、便捷地连接各种外部资源。
以下是 MCP 的整体流程及其核心组件(Host, Client, Server, LLM)的详细介绍:
1. 核心组件定义
-
LLM (Large Language Model),大模型 :
- 角色:智能核心。
- 功能:负责理解用户意图、进行推理、决定需要调用哪些工具或访问哪些数据,并生成最终回复。LLM 本身不直接运行 MCP 协议,而是通过 Host 与其交互。
-
Host (主机) :
-
角色:应用程序或运行环境(例如:Claude Desktop、IDE 插件、自定义 AI 应用)。
-
功能:
- 承载 LLM。
- 管理 MCP 的连接生命周期。
- 包含 MCP Client。
- 接收用户的请求,将其传递给 LLM;当 LLM 决定使用工具时,Host 通过其内部的 Client 向 Server 发送请求。
-
-
Client (客户端) :
-
角色:协议发起方(通常嵌入在 Host 中)。
-
功能:
- 主动发起与 MCP Server 的连接。
- 向 Server 请求可用的工具列表(Tools)、资源(Resources)或提示词模板(Prompts)。
- 将 LLM 生成的工具调用请求发送给 Server。
- 接收 Server 返回的执行结果并传回给 Host/LLM。
-
-
Server (服务器) :
-
角色:能力提供方(例如:文件系统服务、数据库服务、GitHub 服务、搜索引擎服务)。
-
功能:
- 暴露特定的能力(工具、数据资源)。
- 监听来自 Client 的连接。
- 接收 Client 发来的工具调用请求,执行具体操作(如读取文件、查询数据库)。
- 将执行结果返回给 Client。
-
2. MCP 整体工作流程
一个典型的 MCP 交互流程如下:
-
初始化与连接:
- Host 启动时,会根据配置启动一个或多个 MCP Client。
- Client 主动连接到指定的 MCP Server(可以通过stdio、HTTP SSE等方式)。
- 连接建立后,Client 会询问 Server:“你提供哪些工具、资源和提示词?”
- Server 返回其能力列表(称为tools list,例如:“我可以读取文件”、“我可以搜索网络”)。
- Host 将这些能力信息告知 LLM,让 LLM 知道现在可以使用这些工具了。(这一步不一定,也有可能是在用户提问之后,才告知LLM,要看具体Host如何设计)
-
用户提问与意图识别:
- 用户在 Host 界面输入问题(例如:“帮我总结一下桌面上的最新文档”)。
- Host 将问题发送给 LLM。
- LLM 分析后认为需要访问文件系统,于是生成一个工具调用请求(例如:
call_tool("read_file", path="~/Desktop/latest.txt"))。
-
协议交互与工具执行:
- Host 接收到 LLM 的工具调用请求,将其交给内部的 MCP Client。
- MCP Client 按照 MCP 协议 格式,将请求发送给 MCP Server。
- MCP Server 收到请求,执行实际操作(读取文件内容)。
- Server 将执行结果(文件内容或错误信息)封装成标准格式,通过 MCP 协议 返回给 Client。
-
结果反馈与最终回答:
- Client 收到结果,将其传回给 Host。
- Host 将工具执行的结果作为上下文再次提供给 LLM。
- LLM 结合原始问题和工具返回的数据,生成最终的自然语言回答(例如:“桌面上的最新文档内容是……”)。
- Host 将最终回答展示给用户。
注意,LLM在获取到工具返回的数据之后,不一定立刻返回最终答案给用户,也可以循环调用MCP Client。
3. 哪两个部分交流时使用到了 MCP 协议?
这是最关键的一点:MCP 协议只用于 MCP Client 和 MCP Server 之间的通信。