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 傳輸實現