一、什么是 MCP 协议?
MCP,全称 Model Context Protocol,直译为“模型上下文协议”。你可以将它理解为一套专为大型语言模型与外部数据源/工具之间高效、安全地交换上下文信息而设计的标准化通信规则。
它并非要取代 HTTP 这样的通用网络协议,而是专注于解决一个特定痛点:如何让模型在推理时,能像人类一样“查阅”最新的、相关的背景资料。在 RAG 等场景下,我们需要把文档片段、知识库条目等“上下文”喂给模型。MCP 提供了一种结构化、可扩展的方式来封装、传输和解释这些上下文,让模型的“思考”过程有据可依。
二、为什么我们需要 MCP?
在没有类似协议的时候,给模型传递上下文往往是“简单粗暴”的:要么将大段文本直接拼接在提示词中,容易撑爆上下文窗口;要么通过插件、函数调用的方式,但接口千差万别,缺乏统一规范。这导致了几个问题:
- 格式混乱:不同数据源返回的数据结构五花八门,客户端需要编写大量适配代码。
- 资源浪费:可能将不相关的上下文一股脑塞给模型,占用宝贵的上下文空间,增加延迟和成本。
- 安全隐患:直接暴露原始数据源接口,存在数据泄露和注入攻击的风险。
MCP 的引入,旨在提供一个中间层。它对上下文的请求和响应进行了标准化封装,使得客户端(可以是应用或另一个模型)和数据源/工具服务都能基于同一套“语言”进行交流,从而提升了互操作性、效率和安全性。
三、MCP 的核心设计理念
MCP 协议的设计贯穿着几个核心思想,理解它们有助于更好地运用协议。
- 面向上下文(Context-Oriented):所有交互都围绕“上下文”展开。协议的核心是定义如何描述一个上下文请求(比如,我需要关于“X主题”的、与“当前对话Y”最相关的3段文本),以及如何返回一个上下文响应(包含文本内容、元数据、引用信息等)。
- 轻量与可扩展:协议本身力求简洁,通常基于
JSON-RPC或类似的轻量级远程过程调用框架传输。同时,它允许通过自定义字段和方法进行扩展,以适应不同领域(如代码、金融、医疗)的特殊需求。 - 关注点分离:客户端只管发起请求,服务端(上下文提供者)负责处理查询、检索、过滤等复杂逻辑。模型本身不关心数据从哪里来,只关心拿到的上下文质量。
个人理解:你可以把 MCP 想象成“模型的图书管理员”。你(客户端)告诉管理员(MCP服务)你需要哪方面的资料,管理员去书库(数据源)里精准地找到几本最相关的书,撕下关键章节(上下文片段)并附上书目索引(元数据),然后整理好交给你。整个过程高效且规范。
四、MCP 的核心消息类型
典型的 MCP 交互围绕几种核心的消息类型展开,它们构成了协议的基本骨架。