MCP原理详解

4 阅读3分钟

由于网上对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 交互流程如下:

  1. 初始化与连接

    • Host 启动时,会根据配置启动一个或多个 MCP Client
    • Client 主动连接到指定的 MCP Server(可以通过stdio、HTTP SSE等方式)。
    • 连接建立后,Client 会询问 Server:“你提供哪些工具、资源和提示词?”
    • Server 返回其能力列表(称为tools list,例如:“我可以读取文件”、“我可以搜索网络”)。
    • Host 将这些能力信息告知 LLM,让 LLM 知道现在可以使用这些工具了。(这一步不一定,也有可能是在用户提问之后,才告知LLM,要看具体Host如何设计)
  2. 用户提问与意图识别

    • 用户在 Host 界面输入问题(例如:“帮我总结一下桌面上的最新文档”)。
    • Host 将问题发送给 LLM
    • LLM 分析后认为需要访问文件系统,于是生成一个工具调用请求(例如:call_tool("read_file", path="~/Desktop/latest.txt"))。
  3. 协议交互与工具执行

    • Host 接收到 LLM 的工具调用请求,将其交给内部的 MCP Client
    • MCP Client 按照 MCP 协议 格式,将请求发送给 MCP Server
    • MCP Server 收到请求,执行实际操作(读取文件内容)。
    • Server 将执行结果(文件内容或错误信息)封装成标准格式,通过 MCP 协议 返回给 Client
  4. 结果反馈与最终回答

    • Client 收到结果,将其传回给 Host
    • Host 将工具执行的结果作为上下文再次提供给 LLM
    • LLM 结合原始问题和工具返回的数据,生成最终的自然语言回答(例如:“桌面上的最新文档内容是……”)。
    • Host 将最终回答展示给用户。

注意,LLM在获取到工具返回的数据之后,不一定立刻返回最终答案给用户,也可以循环调用MCP Client。

3. 哪两个部分交流时使用到了 MCP 协议?

这是最关键的一点:MCP 协议只用于 MCP Client 和 MCP Server 之间的通信。