初探模型上下文协议

初探模型上下文协议

May 5, 2025

MCP 自 2024 年 11 月由 Anthropic 首次提出并开源以来 ,迅速获得了业界的广泛关注和积极采用 。它被形象地比喻为「AI 应用的 USB 端口」,旨在解决 AI 模型与外部世界(数据源、工具、服务)连接时长期存在的碎片化和定制化集成问题。

MCP 是一个旨在实现LLM应用与外部世界全面、安全、高效交互的标准化上下文协议。MCP 不仅仅是一个简单的「代理协议」,它定义了一个包含主机 (Host)、客户端 (Client) 和服务器 (Server) 的三层架构 。这个架构支持状态连接、能力协商、多种传输机制(如 stdio, SSE) 以及日志、错误报告、进度跟踪等辅助功能 。

设计目标与核心价值

MCP 的核心设计目标是实现LLM应用与外部数据源和工具之间的无缝、标准化集成。它致力于通过提供一个通用的、开放的标准来取代当前AI生态中普遍存在的、碎片化的、需要为每个数据源或工具进行定制化开发的集成方式 。Anthropic 将其比作「AI 应用的 USB 端口」 ,形象地说明了其目标:提供一种统一的连接方式,让 AI 模型能够便捷地接入不同的数据源和工具,从而提升模型的响应质量和相关性。

核心机制与工作原理

架构:主机、客户端与服务器

MCP采用经典的客户端-服务器 (Client-Server) 架构,但其特殊之处在于引入了「主机」这一概念,形成了事实上的三层模型 。这三个核心组件的职责和关系如下:

  • 主机: 主机是用户直接与之交互的 LLM 应用程序,例如 AI 助手(如 Claude Desktop)、集成开发环境(IDE,如 Cursor 或 Warp AI)、或自定义的 AI 代理(Agent) 。主机负责发起与 MCP 服务器的连接,并管理用户界面和整体交互逻辑。
  • 客户端: MCP 客户端是嵌入在主机应用程序内部的协议客户端 。每个客户端与一个特定的 MCP 服务器建立并维护一对一的持久连接 。客户端负责处理与该服务器之间的所有 MCP 协议层面的通信,包括消息的发送与接收、协议版本协商、能力协商等 。
  • 服务器: MCP 服务器是独立的、轻量级的程序,它们通过标准化的 MCP 协议向客户端暴露特定的能力,如工具、资源或提示 。这些服务器可以连接到本地数据源(如文件系统 、数据库 )或远程服务(如 Web API )。

这种架构的精妙之处在于其解耦性和可组合性。主机应用无需了解每个外部工具或数据源的具体实现细节,只需通过 MCP 客户端与遵循 MCP 规范的服务器交互即可。这使得添加新的工具或数据源变得简单——只需开发一个新的 MCP 服务器并将其注册到主机应用中。同样,不同的主机应用也可以复用相同的 MCP 服务器,极大地提高了开发效率和系统的灵活性 。

通信协议与传输机制

MCP 的核心通信机制基于 JSON-RPC 2.0 协议。JSON-RPC 是一种轻量级的远程过程调用 (RPC) 协议,使用 JSON 作为数据格式。同时,MCP 支持多种传输机制,以适应不同的部署环境和通信需求:

  • stdio (Standard Input/Output): 基于标准输入/输出流进行通信。这种方式非常适合客户端和服务器运行在同一台机器上的本地集成场景,例如 Warp AI或 Cursor 中的 CLI Server 。其优点是简单高效,无需网络配置。
  • HTTP + SSE (Server-Sent Events): 对于需要网络通信的远程集成场景,MCP 支持通过 HTTP POST 发送客户端到服务器的消息,并通过 Server-Sent Events (SSE) 实现服务器到客户端的实时消息推送 。SSE 是一种基于HTTP的单向通信技术,允许服务器向客户端流式传输事件数据,非常适合 MCP 中服务器向客户端发送通知(如资源更新、日志等)的需求。相比 WebSocket,SSE 在某些场景下更简单,且能更好地利用现有 HTTP 基础设施和防火墙策略 。

这种对多种传输机制的支持,使得 MCP 既能满足本地工具集成的便捷性,也能适应分布式、网络化的服务架构,进一步增强了其灵活性和适用范围。

核心能力:工具、资源与提示

MCP 服务器可以向客户端(即 LLM 应用)提供三种核心类型的能力,这些能力共同构成了 LLM 与外部世界交互的完整图景 。这超越了用户最初仅关注「工具」的理解,揭示了 MCP 作为一个全面上下文协调层的本质。

  • 工具是模型可控制和调用的功能,用于执行具体的操作或与外部 API 交互 。这与常见的「函数调用」概念类似,例如调用天气 API 获取天气信息,或调用数据库 API 执行写操作。工具通常具有明确的输入参数和输出结果,并且可能产生副作用(如修改数据、发送消息等)。
  • 资源是应用控制的数据源,为模型提供执行任务所需的上下文信息 。这些资源通常是只读的,例如文件内容、数据库查询结果、API 的 GET 请求响应、系统日志等。它们为模型提供事实依据和背景知识,帮助模型做出更准确、更相关的判断和响应。
  • 提示是用户控制的、预定义的、可复用的消息模板和交互工作流 。它们可以包含占位符,用于动态插入信息,旨在优化特定工具或资源的使用方式,或引导用户完成复杂的多步骤交互。

这三种能力的组合,使得 MCP 能够为 LLM 应用提供一个远比简单工具调用更丰富的交互环境。LLM 不仅能「做事」,还能「知事」,并且能以更结构化、更高效的方式与用户沟通。这种设计体现了 MCP 作为一个全面的上下文协调与管理协议的定位,而不仅仅是一个工具执行框架。这种全面的上下文管理对于实现复杂的、多轮的、真正智能的AI交互至关重要,因为它确保了模型在执行任务时拥有所有必要的信息和交互路径

工具、资源与提示的协同

工具、资源与提示这三者的协同作用体现在一个典型的交互闭环中:

  1. 用户通过一个提示(或自然语言)发起请求。
  2. LLM(在主机应用中)理解请求意图,并可能查阅相关的资源(如用户偏好、历史数据、外部知识库)来获取更多上下文。
  3. 基于对请求和上下文的理解,LLM 选择一个或多个合适的工具
  4. 在获得用户同意后,通过 MCP 客户端调用这些工具
  5. 工具执行结果返回后,可能更新相关的资源(如对话状态),并最终形成对用户请求的响应,这个响应本身也可能遵循某个提示的格式。

这种设计使得 MCP 远不止是一个简单的工具调用协议。它是一个全面的上下文编排层 (Context Orchestration Layer)。它认识到,智能行为不仅仅是执行动作(工具),还需要对环境的感知(资源)和有效的沟通策略(提示)。正是这种对上下文多维度、结构化管理的能力,使得 MCP 能够支持更复杂、更鲁棒、更自然的 AI 交互,特别是在需要进行多轮对话、处理不完整信息、以及整合来自多个来源的数据和功能的场景中。这种全面的上下文管理是构建高级 AI 智能体的关键,因为智能体需要理解其环境、记住过去的交互、并有策略地使用其能力来达成目标。

小结

模型上下文协议远不止「让大模型自行决定使用何种工具的框架」。它是一个精心设计的、开放的、标准化的上下文情境协议,旨在通过统一的接口,使 LLM 应用能够安全、高效地与外部世界(包括工具、数据资源和预设提示)进行交互。