MCP 教程(上):原理、架构与协议基础
MCP(Model Context Protocol)是一种标准化的AI交互协议,旨在实现跨工具、跨服务的可组合集成。文章介绍了MCP的定位、分层架构、核心基元、消息结构和传输方式。MCP包含服务器侧的工具、资源和提示词三类基元,以及客户端侧的根目录、采样和补充信息请求能力。协议采用JSON-RPC消息格式,通过stdio或HTTP传输,并包含初始化、运行和关闭三个阶段。HTTP传输需要严格的安全
MCP 教程(上):原理、架构与协议基础
0. 版本说明(阅读前的预期管理)
本文以 MCP 2025-06-18 规范为主线。需要注意的是,客户端能力中的 roots、sampling、elicitation 在规范页面中仍标注为 draft,细节可能继续演进。
通俗解释:
把它当作“标准化的交通规则”,主干规则很稳定,但部分新车道还在试运行,之后可能会更新标志线。
1. MCP 的定位与目标
MCP(Model Context Protocol)是一个“上下文与能力交换协议”,目标是把应用可提供的数据和可执行能力以统一、可发现的方式暴露给 AI 应用,从而实现跨工具、跨服务的可组合集成。它专注于协议层,不规定应用如何组织 LLM 或如何使用上下文。
MCP 的核心组成包括:基础协议(JSON-RPC 消息)、生命周期管理(初始化与能力协商)、传输与授权,以及服务器特性(Resources/Prompts/Tools)与客户端特性(Sampling/Roots/Elicitation)等。
通俗解释:
MCP 就像“AI 的 USB 接口标准”。它不关心你接的是哪种硬盘(模型),而是规定设备怎么插、怎么通电、怎么对话。
2. 角色与分层架构
参与者
- Host:AI 应用本体(例如 IDE、桌面客户端)。
- Client:由 Host 创建并维护,与具体 MCP Server 建立连接。
- Server:提供上下文或执行能力的服务端程序。
一个 Host 会为每个 Server 创建一个 Client 连接;本地 stdio 服务通常对应单一客户端,远程 Streamable HTTP 服务可支持多客户端并发。
两层结构
- 数据层:定义 JSON-RPC 交互语义、生命周期、以及工具/资源/提示词等原语。
- 传输层:定义通信方式与安全/认证细节(stdio 或 Streamable HTTP)。
通俗解释:
Host 像“总控台”,Client 像“电话线”,Server 像“专业外包团队”。数据层是“对话规范”,传输层是“电话还是视频”。
3. 数据层核心基元(Primitives)
服务器侧三类基元
- Tools:模型可主动调用的“可执行能力”,通过
tools/list发现、tools/call调用;工具用 JSON Schema 描述输入,结果可返回结构化内容。 - Resources:以 URI 标识的只读上下文数据,客户端可
resources/list发现、resources/read读取,并可订阅更新。 - Prompts:用户可显式触发的提示模板,通过
prompts/list发现、prompts/get获取内容并传参定制。
客户端侧能力
- Roots:客户端向服务器提供“文件系统边界”,服务器可
roots/list获取,并接收roots/list_changed通知。 - Sampling:服务器可向客户端请求 LLM 采样,客户端掌控模型选择与权限,建议保持人工审批。
- Elicitation:服务器向用户请求补充信息,支持表单与 URL 两种模式,敏感信息应使用 URL 模式。
通俗解释:
- Tools 像“按钮”,按下会发生动作。
- Resources 像“资料库”,只读不改。
- Prompts 像“流程模板”,用户一键启动。
- Roots 像“允许进入的文件夹清单”。
- Sampling 像“服务器借你的模型做一次推理”。
- Elicitation 像“服务器向用户补问关键字段”。
4. 消息结构与生命周期
消息结构
MCP 的消息遵循 JSON-RPC 2.0。请求包含 id,响应返回相同 id 且要么有 result、要么有 error,通知没有 id。
生命周期阶段
初始化阶段必须先由客户端发送 initialize,协商协议版本与能力;服务器回应其能力与信息;随后客户端发送 notifications/initialized 表示就绪。运行阶段双方仅使用已协商能力;关闭阶段由传输层结束连接。超时应触发取消通知或中止等待。
通俗解释:
这像“先握手再开工”。先确认版本与权限,再进入正常沟通,最后礼貌结束通话。
5. 传输与授权(原理层概览)
传输方式
- stdio:客户端以子进程方式启动服务器,消息走 stdin/stdout,按换行分隔,stdout 只能输出 MCP 消息。
- Streamable HTTP:服务器独立运行,通过 HTTP POST 发送消息,必要时用 SSE 流返回或推送通知;同时要求更严格的连接管理。
安全与授权
Streamable HTTP 需要做 Origin 校验、尽量绑定 localhost、并实现认证,防止 DNS rebinding 等风险。
授权是可选的:HTTP 传输建议遵循 OAuth 2.1 子集,而 stdio 传输应通过环境变量获取凭证。
通俗解释:
stdio 像“本机内线电话”,HTTP 像“公网电话”。公网电话要验证身份、防骚扰。
更多推荐


所有评论(0)