什么是 MCP?
MCP 是 AI 时代的“USB‑C”,让模型安全高效地连接万千工具与数据,重塑智能应用生态。
定义
Model Context Protocol (MCP) 是一种开放标准,用于规范 AI 模型与外部工具或数据资源之间的通信。它复用开发者熟悉的 JSON‑RPC 协议,并提供两种传输方式:标准输入/输出 (stdio) 和 HTTP 服务器 + SSE。MCP 目标是为 AI 系统提供统一接口,允许模型安全地执行函数、访问文件及管理上下文,无需为每个组合编写专用适配器。
架构和角色
MCP 架构分为三类角色:
| 角色 | 描述 | 工作职责 |
|---|---|---|
| 主机(Host) | 运行模型的环境,如桌面应用或 IDE。 | 启动模型并通过客户端与外部服务器通信。 |
| 客户端(Client) | 为模型提供访问服务器的代理。 | 转发消息、维护会话状态、缓存工具资源元数据。 |
| 服务器(Server) | 提供具体功能服务,如日历、文件系统等。 | 实现 MCP 接口,暴露工具、资源和提示模板。 |
当模型需要执行任务时,它会通过客户端向服务器查询可用的工具及资源,并发送调用请求。服务器执行后将结果返回,客户端再将响应转交给模型。这样的模式确保了统一交互和权限控制,也使得服务器的开发工作可以由社区分担。
核心原语
MCP 规范中定义了三个核心原语:
- 工具(Tools):模型可调用的函数,如"创建事件"“发送邮件"“查询数据库”。每个工具带有描述、参数类型和权限信息。模型通过调用工具来完成具体任务。
- 资源(Resources):模型可访问的数据,如文件、文档、数据库表。资源描述包括数据类型、可执行操作及权限设置。
- 提示模板(Prompts):开发者编写的文本模板,用于定义模型调用工具时的提示方式。例如针对不同任务配置不同的系统提示,从而控制模型行为。
使用这些原语,开发者可以将任意外部系统封装为 MCP 服务器,而模型可以通过统一接口了解可用功能、资源和提示,从而做到动态发现与安全调用。
背景与动机
随着 AI 助手逐渐普及,一个核心挑战是大语言模型(LLM)往往无法直接访问最新的数据和外部工具。即使最先进的模型也常被困在“信息孤岛”中,无法连接业务数据库、文件系统或 Web 服务。过去每接入一个新数据源都需要定制集成,难以大规模扩展。为了解决这一瓶颈,Anthropic 公司在 2024 年提出了 模型上下文协议(Model Context Protocol, MCP)。它旨在提供一个开放标准,让 AI 模型可以像使用统一接口一样,方便、安全地访问各种外部数据源和工具。正如官方所说,可以把 MCP 想象成 AI 应用的“USB‑C 接口”——以前每种外部工具要对应特定转换器,现在通过 MCP 这一标准接口即可对接各种资源。
协议核心机制(摘要)
MCP 协议本质上基于 JSON‑RPC 2.0 定义了一套双向通信机制。建立连接后,客户端和服务器之间会通过 JSON 消息互相发送请求和响应,实现功能调用和数据传输。整个通信包含数据层和传输层两个部分。其中数据层定义了 JSON‑RPC 的消息格式、方法名称和语义,而传输层则负责具体通讯方式(例如本地标准 IO 或远程 HTTP/SSE 流)以及身份认证等。当客户端首次连接服务器时,会进行初始化握手:包括协议版本协商(确保双方遵循相同版本的规范)、能力声明(双方各自表明支持哪些功能类型,如工具、资源、通知等)以及身份信息交换等。这一握手叫做 initialize 请求/响应。如果双方无法在版本或功能上达成一致,连接将中止。
在初始化完成后,客户端通常会调用服务器提供的 */list 方法来发现可用资源。MCP 定义了服务器可以提供三大类“原语”(primitive):工具(Tools)、资源(Resources)和提示模板(Prompts)。客户端可以通过如 tools/list、resources/list 方法获取服务器当前提供的工具和资源目录,然后针对某个需要的项调用 tools/call 或 resources/get 获取结果。这种设计允许服务器的提供内容是动态的:比如某数据库服务器可以根据当前用户权限动态暴露不同的查询工具。而当服务器端功能发生变化时,还可以通过**通知(Notifications)**机制实时告知客户端,例如服务器加载了新的工具或资源就发送通知,客户端据此刷新可用列表。
客户端向服务器暴露的能力
除了服务器向客户端提供的原语,MCP 也规定了客户端暴露给服务器的原语,以支持更丰富的双向互动:
- 采样(Sampling):允许服务器请求客户端调用其内部的语言模型进行补全。这使得服务器在需要生成文本、代码时,不必内置 LLM,仅通过 MCP 请求 Host 的 LLM 完成即可。方法如
sampling/complete。 - 引出(Elicitation):允许服务器向终端用户提问或获取额外输入。服务器可以通过
elicitation/request要求客户端 UI 弹出提示,询问用户确认或额外信息,然后将用户反馈发送回服务器。 - 日志(Logging):服务器可以向客户端发送日志消息,供调试或记录之用。
这些原语和方法的存在,使得 MCP 成为一种通用的上下文交换和工具调用协议。它并不规定具体的 AI 应用如何利用这些上下文,只是提供了获取和操作上下文的标准接口。通过 MCP,一个 AI 助手可以按需拉取所需信息,而不必在提示中预先塞入所有可能的上下文。正如有的专家比喻的:过去我们可能需要把大量背景资料一次性交给模型(占用上下文窗口),但使用 MCP 后,模型就像有了随叫随到的资料库,可以在需要时查询所需信息。
传输层与安全性
MCP 使用 JSON‑RPC 消息格式,支持 stdio 与 HTTP+SSE 两种模式。标准输入/输出模式适合桌面应用(如 Claude Desktop 或 IDE 插件),提供低延迟与本地执行安全;HTTP 模式则适用于跨网络的服务,支持流式响应和身份验证。
安全方面,MCP 强调最小权限和用户授权。服务器需细粒度描述资源和工具,客户端可限制模型访问范围。安全措施包括:限制可调用工具集合、敏感操作二次确认、认证和权限检查、本地部署保护数据。
主要优势
- 降低集成复杂度:标准化协议解决"模型 × 系统"集成问题。
- 跨平台与模型可替换性:支持多种模型和语言 SDK。
- 开放与生态繁荣:社区贡献大量开源服务器与客户端。
- 安全可控:细粒度权限管理、提示模板、本地部署选项。