MCP 全称是 Model Context Protocol(模型上下文协议),通过提供结构化的上下文管理来增强大模型与应用程序之间的交互。MCP 的核心目标很明确:让大模型安全、可控、结构化地访问外部信息和能力。
官方把 MCP 称为 AI 的 USB-C,可以把它理解为大模型的“通用接口”,也有点像 HTTP 协议。MCP 协议通过标准化模型与外部资源的交互方式,提升大模型应用的功能性、灵活性和可扩展性。

MCP 的核心是模型上下文,也就是大模型在运行过程中所需的所有外部信息和工具。MCP 通过定义标准化的接口和协议,使大模型能够动态访问和集成外部数据源、工具和服务、上下文管理。
架构
MCP 遵循 CS 架构:
宿主:期望从服务器获取数据的 AI 应用。服务器:提供外部数据和工具,通过工具、资源和提示模板为大模型提供额外的上下文和功能。客户端:与服务器保持一对一的连接,负责消息路由、能力管理、协议协商和订阅管理等。
传输
MCP 使用 JSON-RPC 2.0 传输格式。传输层负责将 MCP 协议消息转换为 JSON-RPC 格式进行传输,并将接收到的 JSON-RPC 消息转换回 MCP 协议消息。
{
jsonrpc: "2.0",
id: number | string,
method: string,
params?: object
}
MCP 包含两种标准传输实现:
- 标准输入/输出 (stdio):通过标准输入和输出流实现通信,如本地集成、命令行工具、脚本等。
- 服务器发送事件 (SSE) :支持服务器到客户端的流式传输,同时使用 POST 请求实现客户端到服务器的通信。
- 也可以自定义,只需要符合 Transport 接口即可。
客户端
客户端使用根(Roots)来告知服务器相关资源及位置。根定义了服务器操作边界,可以是任何有效的 URI。
{
"roots": [
{
"uri": "https://api.example.com/v1",
"name": "API 端点"
}
]
}
客户端向服务器提供采样(Sampling)能力,服务器可以通过客户端请求大模型补全,从而实现复杂的代理行为,同时保持安全性和隐私性。客户端审查并可以修改服务器发送的补全请求,然后提交给大模型处理,再审查补全结果,最后发送给服务器,实现了 human-in-the-loop 确保用户能够控制大模型看到和生成的内容。
{
messages: [
{
role: "user" | "assistant",
content: {
type: "text" | "image",
text?: string,
data?: string, //base64编码图片
mimeType?: string
}
}
],
modelPreferences?: {
hints?: [{
name?: string //建议的模型名称/系列
}],
......
},
systemPrompt?: string,
temperature?: number,
maxTokens: number,
......
}
服务器
服务器向客户端提供工具,客户端可以调用这些工具,使得大模型可以与外部系统交互、获取数据、执行计算、采取行动。客户端可以随时列出可用工具,服务器也可以向客户端发送工具变更通知。
{
name: string;
description?: string;
inputSchema: {
type: "object",
properties: { ... }
}
}
服务器向客户端提供资源,客户端可以读取数据或内容,然后给到大模型。资源可以是文件内容、数据库记录、图片或日志文件等,支持文本格式,二进制的资源使用 base64 进行编码。资源路径使用 URI 标识,格式为 [协议]://[主机]/[路径]。
{
uri: string;
name: string;
description?: string;
mimeType?: string;
}
服务器向客户端提供提示词,定义可重用的提示词模板和工作流。客户端可以获取提示词后给到用户和大模型。服务器的提示词模板可以接受动态参数。
{
name: string;
description?: string;
arguments?: [
{
name: string;
description?: string;
required?: boolean;
}
]
}
与 Function Calling 的区别
| 维度 | Function Calling | MCP |
|---|---|---|
| 标准化 | 各厂商私有实现 | 开放统一标准 |
| 集成 | m 个模型 × n 个工具 = m×n 次开发 | m 个模型 + n 个工具 = m+n 次实现 |
| 上下文 | 有限,依赖模型自身 | 支持动态上下文切换 |
| 传输协议 | 通常绑定 API | 支持 stdio、HTTP、WebSocket 等 |
| 安全控制 | 依赖平台 | 双向验证、权限隔离 |
| 跨平台 | 厂商锁定 | 模型/工具可自由组合 |
| 资源访问 | 主要是函数调用 | 工具 + 资源 + 提示词 |