2.MCP核心架构
# 2.1 整体架构
MCP 采用客户端-服务器架构,通过标准化的协议实现 AI 应用与外部资源的通信。

# 2.2 核心组件
# Host(主机)
Host 是运行 MCP Client 的应用程序,负责:
- 管理多个 MCP Client 实例
- 协调 AI 模型与 MCP Server 之间的交互
- 处理用户授权和安全策略
常见的 Host 应用:
- Claude Desktop
- Cursor IDE
- VS Code + Cline 插件
- 自定义 AI 应用
# Client(客户端)
Client 是 Host 内部的组件,负责:
- 与单个 MCP Server 建立连接
- 维护与 Server 的通信会话
- 处理协议层的消息收发
特点:
- 一个 Host 可以包含多个 Client
- 每个 Client 连接一个 Server
- Client 与 Server 保持 1:1 的关系
# Server(服务器)
Server 是提供具体功能的服务端程序,负责:
- 暴露 Resources(资源)
- 提供 Tools(工具)
- 定义 Prompts(提示词模板)
Server 的运行方式:
- 本地进程(通过 stdio 通信)
- 远程服务(通过 Streamable HTTP 通信)
# 2.3 协议原语(Primitives)
MCP 定义了四种核心原语,用于描述 Server 提供的能力:
# Resources(资源)
Resources 是 Server 暴露给 Client 的数据内容,类似于文件或数据库记录。
{
"uri": "file:///path/to/document.txt",
"name": "项目文档",
"description": "项目的主要文档",
"mimeType": "text/plain"
}
1
2
3
4
5
6
2
3
4
5
6
特点:
- 由 URI 唯一标识
- 可以是文本或二进制数据
- 支持订阅变更通知
- 由 应用程序控制(Application-controlled)
常见用途:
- 文件内容
- 数据库查询结果
- API 响应数据
- 实时数据流
# Tools(工具)
Tools 是 Server 提供的可执行功能,允许 AI 模型执行特定操作。
{
"name": "search_files",
"description": "在指定目录中搜索文件",
"inputSchema": {
"type": "object",
"properties": {
"directory": {
"type": "string",
"description": "搜索目录路径"
},
"pattern": {
"type": "string",
"description": "文件名匹配模式"
}
},
"required": ["directory", "pattern"]
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
特点:
- 由 模型控制(Model-controlled)
- 需要用户确认后执行
- 支持复杂的输入参数
- 可以产生副作用(如修改文件)
常见用途:
- 文件操作(创建、修改、删除)
- 数据库操作(查询、更新)
- API 调用
- 系统命令执行
# Prompts(提示词模板)
Prompts 是预定义的提示词模板,帮助用户更好地与 AI 交互。
{
"name": "code_review",
"description": "代码审查提示词模板",
"arguments": [
{
"name": "code",
"description": "需要审查的代码",
"required": true
},
{
"name": "language",
"description": "编程语言",
"required": false
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
特点:
- 由 用户控制(User-controlled)
- 支持参数化
- 可以包含动态内容
- 提供标准化的交互模式
# Sampling(采样)
Sampling 允许 Server 请求 AI 模型生成内容,实现更复杂的交互模式。
{
"messages": [
{
"role": "user",
"content": "请分析以下代码的性能问题..."
}
],
"maxTokens": 1000
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
特点:
- Server 可以主动请求 AI 生成
- 支持多轮对话
- 需要 Host 授权
# 原语对比
| 原语 | 控制方 | 主要用途 | 是否有副作用 |
|---|---|---|---|
| Resources | 应用程序 | 提供数据 | 否 |
| Tools | AI 模型 | 执行操作 | 可能有 |
| Prompts | 用户 | 交互模板 | 否 |
| Sampling | Server | 请求生成 | 否 |
# 2.4 传输机制
MCP 支持两种传输机制,适用于不同的部署场景:
# stdio 传输
通过标准输入/输出进行通信,适用于本地进程。

特点:
- 简单直接,无需网络配置
- 适合本地工具和脚本
- Server 作为子进程运行
- 通信延迟低
适用场景:
- 本地文件系统访问
- 本地数据库连接
- 命令行工具封装
# Streamable HTTP 传输
通过 HTTP 进行双向流式通信,适用于远程服务。这是 MCP 最新的传输标准,取代了之前的 HTTP+SSE 方案。

特点:
- 支持真正的双向流式通信
- 单一 HTTP 端点,简化部署
- 支持远程部署和负载均衡
- 更好的连接管理和错误处理
- 兼容现代 HTTP 基础设施
适用场景:
- 云端 API 服务
- 共享的 MCP Server
- 需要认证的服务
- 微服务架构集成
# 2.5 消息格式
MCP 使用 JSON-RPC 2.0 作为消息格式,所有通信都遵循这一标准。
# 请求消息
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_files",
"arguments": {
"directory": "/home/user/projects",
"pattern": "*.py"
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 响应消息
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "找到 5 个匹配的文件..."
}
]
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 通知消息
{
"jsonrpc": "2.0",
"method": "notifications/resources/updated",
"params": {
"uri": "file:///path/to/file.txt"
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# 错误响应
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32600,
"message": "Invalid Request",
"data": {
"details": "Missing required parameter: directory"
}
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 2.6 连接生命周期
MCP 连接遵循以下生命周期:

# Server 组件与生命周期
MCP Server 由五个核心组件构成,并在整个生命周期中面临不同的安全挑战:
Server 核心组件:
| 组件 | 内容 |
|---|---|
| Metadata | 名称、描述、版本信息 |
| Configuration | 源代码、配置文件、清单文件 |
| Tool List | 工具名称、描述、权限定义 |
| Resources List | 数据源、端点、权限 |
| Prompts | 模板、工作流、元数据 |
生命周期阶段及安全风险:
Creation(创建阶段)
- Server 注册 → 名称冲突
- 安装部署 → 安装器欺骗
- 代码完整性验证 → 后门植入
Operation(运行阶段)
- 工具执行 → 工具名冲突
- 斜杠命令 → 命令重叠
- 沙箱机制 → 沙箱逃逸
Update(更新阶段)
- 授权管理 → 权限持久化
- 版本控制 → 漏洞版本引入
- 旧版本处理 → 配置漂移
# 能力协商
在初始化阶段,Client 和 Server 会交换各自支持的能力:
Client 能力:
roots- 支持根目录列表sampling- 支持采样请求
Server 能力:
resources- 提供资源tools- 提供工具prompts- 提供提示词模板
# 2.7 小结
MCP 的核心架构设计简洁而强大:
- 三层结构:Host → Client → Server,职责清晰
- 四种原语:Resources、Tools、Prompts、Sampling,覆盖各种交互场景
- 双传输机制:stdio 和 Streamable HTTP,适应本地和远程部署
- 标准消息格式:JSON-RPC 2.0,易于实现和调试
下一节我们将进入实践环节,学习如何配置和开发 MCP Server。
编辑 (opens new window)
上次更新: 2025/12/19, 15:17:48