Spring AI MCP 架构详解
1.什么是MCP?
MCP 是一种开放协议,它对应用程序向大语言模型(LLMs)提供上下文信息的方式进行了标准化。可以把 MCP 想象成人工智能应用程序的 USB-C 接口。就像 USB-C 为将设备连接到各种外围设备和配件提供了一种标准化方式一样,MCP 将人工智能模型连接到不同的数据源和工具提供了一种标准化方式。
MCP 可帮助你在 LLM 之上构建智能体和复杂的工作流。LLM 通常需要与数据和工具集成,而 MCP 可提供:
- 在 LLM 提供商和供应商之间切换的灵活性。
- 不断扩充的预构建集成列表,你的大语言模型可以直接接入其中;
- 保护基础设施内数据的最佳实践
MCP协议官网 https://modelcontextprotocol.io/
2.整体架构
MCP 的核心是客户端-服务器架构,其中主机应用程序可以连接到多个服务器:
MCP Hosts:想要通过 MCP 访问数据的程序(例如 Claude Desktop、IDE 或 AI 工具)
**MCP Clients:**与服务器保持 1:1 连接的协议客户端
**MCP Servers:**每个轻量级程序都通过标准化模型上下文协议公开提供特定功能
**Local Data Sources:**MCP 服务器可以安全访问您的计算机的文件、数据库和服务
**Remote Services:**MCP 服务器可以连接到互联网上的外部系统(例如通过 API)
Spring AI MCP
MCP Java SDK 提供了模型上下文协议的 Java 实现,支持通过同步和异步通信模式与 AI 模型和工具进行标准化交互。
Spring AI MCP 通过 Spring Boot 集成扩展了 MCP Java SDK,提供客户端和服务器启动器。使用 Spring Initializer 通过 MCP 支持引导您的 AI 应用程序。
MCP Java SDK Architecture
Java MCP 实现遵循三层架构:
客户端 / 服务器层:McpClient 处理客户端操作,而 McpServer 管理服务器端的协议操作。两者都使用 McpSession 来进行通信管理。
会话层(McpSession):通过 DefaultMcpSession 实现来管理通信模式和状态。
传输层(McpTransport):处理 JSON-RPC 消息的序列化和反序列化,支持多种传输实现方式。
MCP Client
MCP 客户端是模型上下文协议 (MCP) 架构中的关键组件,负责建立和管理与 MCP 服务器的连接。它实现了协议的客户端:
-
协议版本协商,确保与服务器的兼容性
-
能力协商以确定可用功能
-
消息传输和 JSON-RPC 通信
-
工具发现和执行
-
资源访问和管理
-
Prompt系统交互
-
可选特性:Roots管理,采样支持
-
同步和异步操作
-
传输可选项:
基于标准输入输出(Stdio)的传输,用于基于进程的通信基于 Java HttpClient 的 SSE 客户端传输反应式 HTTP 流的 WebFlux SSE 客户端传输
MCP Server
MCP 服务端是模型上下文协议 (MCP) 架构中的基础组件,为客户端提供工具、资源和功能。它实现协议的服务端,负责:
- 服务端协议操作实现
- 工具暴露与发现
- 基于统一资源标识符(URI)访问的资源管理
- 提示词模板的提供与处理
- 与客户端进行能力协商
- 结构化日志记录与通知
- 客户端并发连接管理
- 同步和异步 API 支持
- 传输实现方式:
- 基于标准输入输出(Stdio)的传输,用于基于进程的通信
- 基于 Servlet 的服务器发送事件(SSE)服务器传输
- 响应式 HTTP 流的基于 WebFlux 的服务器发送事件(SSE)服务器传输
- Servlet 的 HTTP 流基于 WebMVC 的服务器发送事件(SSE)服务器传输
Spring AI MCP 集成
Spring AI 通过以下 Spring Boot Starters提供 MCP 集成:
Client Starters
spring-ai-starter-mcp-client
- 核心starter,提供基于标准输入输出(STDIO)和基于HTTP的服务器发送事件(SSE)spring-ai-starter-mcp-client-webflux
- 基于 WebFlux 的服务器发送事件(SSE)传输实现
Server Starters
spring-ai-starter-mcp-server
- 核心server,基于标准输入输出(STDIO)传输支持spring-ai-starter-mcp-server-webmvc
- 基于Spring MVC的 SSE 传输实现spring-ai-starter-mcp-server-webflux
- 基于WebFlux SSE 传输实现