Model Context Protocol (MCP) 架构详解
简介
Model Context Protocol (MCP) 是一个开放协议,用于连接 AI 应用程序与外部数据源和工具。通过 MCP,AI 应用可以安全地访问各种上下文信息,执行操作,并与外部系统交互。
项目组成
MCP 包含以下项目组件:
| 组件 | 说明 |
|---|---|
| MCP 规范 | 定义 MCP 的实现规范,概述客户端和服务器的实现要求 |
| MCP SDK | 为不同编程语言提供的 MCP 实现 SDK |
| MCP 开发工具 | 用于开发 MCP 服务器和客户端的工具,包括 MCP Inspector |
| MCP 参考服务器实现 | MCP 服务器的参考实现 |
核心概念
参与者
MCP 采用客户端-服务器架构,其中 MCP 主机(如 Claude Code 或 Claude Desktop 等 AI 应用)与一个或多个 MCP 服务器建立连接。MCP 主机通过为每个 MCP 服务器创建一个 MCP 客户端来实现这一点。每个 MCP 客户端与其对应的 MCP 服务器维持专用连接。
┌─────────────────────────────────────────────────────────────────┐
│ MCP Host (AI 应用) │
│ (Claude Desktop / VSCode) │
├─────────────────────────────────────────────────────────────────┤
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ MCP Client │ │ MCP Client │ │ MCP Client │ ... │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
└─────────┼──────────────────┼──────────────────┼─────────────────┘
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ MCP Server │ │ MCP Server │ │ MCP Server │
│ (Filesystem)│ │ (Sentry) │ │ (Database) │
└──────────────┘ └──────────────┘ └──────────────┘MCP 架构中的关键角色
| 角色 | 说明 |
|---|---|
| MCP 主机 (Host) | 协调和管理的 AI 应用程序,管理一个或多个 MCP 客户端 |
| MCP 客户端 (Client) | 维护与 MCP 服务器连接的组件,从 MCP 服务器获取上下文供主机使用 |
| MCP 服务器 (Server) | 向 MCP 客户端提供上下文的程序 |
服务器类型
MCP 服务器可以本地运行或远程运行:
本地 MCP 服务器:使用 STDIO 传输层,通常在同一台机器上运行,服务单个 MCP 客户端
- 示例:Claude Desktop 启动的文件系统服务器
远程 MCP 服务器:使用 Streamable HTTP 传输层,通常运行在远程平台上,服务多个 MCP 客户端
- 示例:运行在 Sentry 平台上的官方 Sentry MCP 服务器
实例说明
以 Visual Studio Code 为例:
- VSCode 作为 MCP 主机
- 当 VSCode 连接到 Sentry MCP 服务器时,VSCode 运行时创建一个 MCP 客户端对象来维护连接
- 当 VSCode 再连接到本地文件系统服务器时,创建另一个 MCP 客户端对象来维护此连接
协议层级
MCP 由两个层级组成:
┌─────────────────────────────────────────────────────────────┐
│ Transport Layer (传输层) │
│ ┌──────────────────────┐ ┌──────────────────────────────┐ │
│ │ Stdio Transport │ │ Streamable HTTP Transport │ │
│ │ (标准输入/输出流) │ │ (HTTP POST + SSE) │ │
│ └──────────────────────┘ └──────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ Data Layer (数据层) │
│ 基于 JSON-RPC 2.0 的交换协议 │
├─────────────────────────────────────────────────────────────┤
│ Lifecycle │ Server │ Client │ Utility │ Primitives │
│ Management │ Features │ Features │ Features │ │
└─────────────────────────────────────────────────────────────┘数据层 (Data Layer)
数据层实现基于 JSON-RPC 2.0 的交换协议,定义消息结构和语义:
| 功能 | 说明 |
|---|---|
| 生命周期管理 | 处理客户端和服务器之间的连接初始化、能力协商和连接终止 |
| 服务器功能 | 服务器提供的核心功能:工具、资源、提示模板 |
| 客户端功能 | 客户端提供的功能:LLM 采样、用户输入请求、日志记录 |
| 实用功能 | 通知(实时更新)和进度跟踪(长时间运行操作) |
传输层 (Transport Layer)
传输层管理客户端和服务器之间的通信通道和身份验证:
| 传输机制 | 说明 |
|---|---|
| Stdio 传输 | 使用标准输入/输出流进行本地进程间通信,无网络开销,性能最优 |
| Streamable HTTP 传输 | 使用 HTTP POST 发送消息,支持 Server-Sent Events 流式传输,支持远程服务器通信,支持标准 HTTP 身份验证 |
数据层协议
原语 (Primitives)
MCP 原语是 MCP 中最重要的概念,定义了客户端和服务器可以相互提供的内容。
服务器原语
服务器可以暴露的三种核心原语:
| 原语 | 说明 | 示例 |
|---|---|---|
| 工具 (Tools) | AI 应用可调用的可执行函数 | 文件操作、API 调用、数据库查询 |
| 资源 (Resources) | 提供上下文信息的数据源 | 文件内容、数据库记录、API 响应 |
| 提示 (Prompts) | 构建语言模型交互的可重用模板 | 系统提示、少样本示例 |
每个原语类型都有相关方法用于发现(*/list)、检索(*/get),有些情况下还包括执行(tools/call)。
示例:数据库 MCP 服务器
一个提供数据库上下文的 MCP 服务器可以暴露:
- 工具:查询数据库
- 资源:数据库架构
- 提示:与工具交互的少样本示例
客户端原语
客户端可以暴露的原语,允许 MCP 服务器作者构建更丰富的交互:
| 原语 | 说明 | 方法 |
|---|---|---|
| 采样 (Sampling) | 服务器请求客户端 AI 应用提供语言模型补全 | sampling/complete |
| 引出 (Elicitation) | 服务器请求用户提供额外信息或确认操作 | elicitation/request |
| 日志 (Logging) | 服务器向客户端发送日志消息用于调试和监控 | 日志消息 |
实用原语
跨越服务器和客户端的实用原语:
| 原语 | 说明 |
|---|---|
| 任务 (Tasks) | 实验性功能:持久执行包装器,支持延迟结果检索和状态跟踪 |
通知 (Notifications)
协议支持实时通知,实现服务器和客户端之间的动态更新。
例如:
- 当服务器的可用工具发生变化时(新功能可用或现有工具被修改)
- 服务器可以发送工具更新通知,告知连接的客户端这些变化
通知作为 JSON-RPC 2.0 通知消息发送(不期望响应),使 MCP 服务器能够向连接的客户端提供实时更新。
工作流程示例
数据层交互流程
以下是 MCP 客户端-服务器交互的分步演示:
1. 初始化 (Initialize)
Client → Server: initialize
Server → Client: initialize response (capabilities)
2. 发现工具 (List Tools)
Client → Server: tools/list
Server → Client: tools/list response (available tools)
3. 调用工具 (Call Tool)
Client → Server: tools/call
Server → Client: tools/call response (result)
4. 接收通知 (Notification)
Server → Client: notification (tool list changed)这个流程展示了:
- 生命周期序列:连接初始化和能力协商
- 工具操作:发现和执行
- 通知:动态更新机制
总结
Model Context Protocol (MCP) 的架构设计具有以下特点:
| 特性 | 说明 |
|---|---|
| 模块化 | 数据层与传输层分离,支持多种传输机制 |
| 可扩展 | 通过原语机制,服务器可以灵活提供功能 |
| 标准化 | 基于 JSON-RPC 2.0,易于实现和互操作 |
| 实时性 | 支持通知机制,实现动态更新 |
| 安全 | 传输层支持多种身份验证机制 |
对于开发者来说,数据层协议(特别是原语机制)是最值得关注的部分,因为它定义了开发者可以从 MCP 服务器向 MCP 客户端共享上下文的方式。

评论功能
当前站点为 GitHub Pages 镜像版本,不支持评论功能。
如需发表评论,请访问主域名版本:
🚀 前往 主域名 版本评论