什么是 MCP?
Model Context Protocol (MCP) 是一种标准化协议,使 AI 模型能够以结构化的方式与外部工具和资源进行交互。可以将其视为 AI 模型与现实世界之间的桥梁——允许它们通过一致的接口访问数据库、API、文件系统和其他外部服务。
MCP 架构概览
MCP 采用三层架构设计,实现了关注点分离,提高了可维护性和灵活性:
┌─────────────────────────────────────────┐
│ Client/Server Layer │
│ (McpClient / McpServer) │
├─────────────────────────────────────────┤
│ Session Layer │
│ (McpSession / McpClientSession / │
│ McpServerSession) │
├─────────────────────────────────────────┤
│ Transport Layer │
│ (McpTransport + 实现) │
└─────────────────────────────────────────┘1. Client/Server 层(顶层)
顶层处理主要的应用逻辑和协议操作:
McpClient - 管理客户端操作和服务器连接
McpServer - 处理服务器端协议操作和客户端请求
2. Session 层(中间层)
中间层管理通信模式并维护连接状态:
McpSession - 核心会话管理接口
McpClientSession - 客户端特定会话实现
McpServerSession - 服务器端会话实现
3. Transport 层(底层)
底层处理实际的消息传输和序列化:
McpTransport - 管理 JSON-RPC 消息的序列化和反序列化
支持多种传输实现:STDIO、HTTP/SSE、Streamable-HTTP 等
MCP 核心组件
MCP Client(客户端)
MCP Client 是架构中的关键组件,负责建立和管理与 MCP Server 的连接。主要功能包括:
// MCP Client 核心功能
- 协议版本协商(确保与服务器的兼容性)
- 能力协商(确定可用功能)
- 消息传输和 JSON-RPC 通信
- 工具发现和执行
- 资源访问和管理
- Prompt 系统交互
// 可选功能
- Roots 管理
- Sampling 支持
- 同步和异步操作支持的传输选项:
MCP Server(服务器端)
MCP Server 是为客户端提供工具、资源和能力的基础组件。主要功能包括:
// MCP Server 核心功能
- 服务器端协议操作实现
- 工具暴露和发现
- 基于 URI 访问的资源管理
- Prompt 模板提供和处理
- 与客户端的能力协商
- 结构化日志和通知
- 并发客户端连接管理
// API 支持
- 同步 API
- 异步 API
// 传输实现
- STDIO
- Streamable-HTTP
- Stateless Streamable-HTTP
- SSE服务器能力(Capabilities)
根据服务器和传输类型,MCP Server 可以支持以下能力:
传输协议类型
1. STDIO(标准输入输出)
# 配置示例
spring:
ai:
mcp:
server:
stdio: true特点:
进程内协议(服务器在宿主应用内运行)
通过标准输入和标准输出进行通信
适用于本地工具集成
2. SSE(Server-Sent Events)
# 配置示例
spring:
ai:
mcp:
server:
protocol: SSE # 或留空特点:
用于实时更新的服务器推送事件协议
服务器作为独立进程运行
可处理多个客户端连接
3. Streamable-HTTP
# 配置示例
spring:
ai:
mcp:
server:
protocol: STREAMABLE特点:
使用 HTTP POST 和 GET 请求
可选的 Server-Sent Events (SSE) 流用于多个服务器消息
替代 SSE 传输的现代方案
服务器作为独立进程运行
4. Stateless(无状态)
# 配置示例
spring:
ai:
mcp:
server:
protocol: STATELESS特点:
为简化部署而设计
请求之间不维护会话状态
适用于微服务架构和云原生部署
同步 vs 异步服务器类型
同步服务器 (SYNC)
spring:
ai:
mcp:
server:
type: SYNC使用
McpSyncServer实现适用于简单的请求-响应模式
仅注册同步 MCP 注解方法
异步服务器 (ASYNC)
spring:
ai:
mcp:
server:
type: ASYNC使用
McpAsyncServer实现针对非阻塞操作优化
内置 Project Reactor 支持
仅注册异步 MCP 注解方法
JSON-RPC 通信
MCP 基于 JSON-RPC 2.0 规范,所有消息都遵循以下格式:
请求格式
{
"jsonrpc": "2.0",
"id": "unique-id",
"method": "tools/call",
"params": {
"name": "tool-name",
"arguments": {
"arg1": "value1"
}
}
}响应格式
{
"jsonrpc": "2.0",
"id": "unique-id",
"result": {
"content": [
{
"type": "text",
"text": "result content"
}
]
}
}通知格式
{
"jsonrpc": "2.0",
"method": "notifications/progress",
"params": {
"progressToken": "token-123",
"progress": 0.5,
"message": "Processing..."
}
}MCP 与 Spring AI 的集成
Spring AI 提供了全面的 MCP 支持:
Client Starters
Server Starters
总结
MCP 协议为 AI 应用与外部系统交互提供了标准化接口,具有以下优势:
标准化:统一的协议规范,便于不同系统间的互操作
灵活性:支持多种传输协议,适应不同部署场景
可扩展:模块化设计,易于添加新功能
Spring 集成:Spring AI 提供完善的 Boot Starter,简化开发
在下一篇文章中,我们将详细介绍如何使用 Spring 框架开发 MCP Server。