|
此版本仍在开发中,尚未被视为稳定版。如需最新的快照版本,请使用 Spring AI 1.1.3! |
模型上下文协议 (MCP)
| 初次接触 MCP? 从我们的 MCP 入门指南 开始,快速了解并上手实践示例。 |
模型上下文协议(MCP)是一种标准化协议,使 AI 模型能够以结构化的方式与外部工具和资源进行交互。 您可以将其视为连接 AI 模型与现实世界的桥梁——允许它们通过一致的接口访问数据库、API、文件系统和其他外部服务。 它支持多种传输机制,以便在不同环境中提供灵活性。
MCP Java SDK 提供了模型上下文协议(Model Context Protocol)的 Java 实现,支持通过同步和异步通信模式与 AI 模型及工具进行标准化交互。
Spring AI 通过专用的 Boot Starters 和 MCP Java 注解提供全面的支持,从而拥抱 MCP,让构建能够无缝连接外部系统的复杂 AI 驱动应用变得前所未有的简单。 这意味着 Spring 开发者可以参与 MCP 生态系统的两端——既构建消费 MCP 服务器的 AI 应用,也创建将基于 Spring 的服务暴露给更广泛 AI 社区的 MCP 服务器。 使用 Spring Initializer 快速启动带有 MCP 支持的 AI 应用。
MCP Java SDK 架构
| 本部分提供了 MCP Java SDK 架构 的概述。 有关 Spring AI MCP 集成,请参阅 Spring AI MCP Boot Starters 文档。 |
Java MCP 实现遵循三层架构,将关注点分离以提高可维护性和灵活性:
客户端/服务器层(顶部)
顶层处理主要的应用逻辑和协议操作:
-
McpClient - 管理客户端操作和服务器连接
-
McpServer - 处理服务器端协议操作和客户端请求
-
两个组件都利用下方的会话层进行通信管理
会话层(中间)
中间层管理通信模式并维护连接状态:
-
McpSession - 核心会话管理接口
-
McpClientSession - 针对客户端的会话实现
-
McpServerSession - 特定于服务器的会话实现
传输层(底部)
底层负责实际的消息传输和序列化:
-
McpTransport - 管理 JSON-RPC 消息的序列化与反序列化
-
支持多种传输实现(STDIO、HTTP/SSE、可流式 HTTP 等)
-
为所有更高级别的通信提供基础
| MCP 客户端 | |
|---|---|
MCP 客户端是模型上下文协议(MCP)架构中的关键组件,负责建立和管理与 MCP 服务器的连接。它实现了协议的客户端部分,处理:
|
|
| MCP 服务器 | |
|---|---|
MCP 服务器是模型上下文协议 (MCP) 架构中的基础组件,为客户端提供工具、资源和能力。它实现了协议的服务器端,负责:
|
|
有关使用低级 MCP 客户端/服务器 API 的详细实施指南,请参阅 MCP Java SDK 文档。 若要使用 Spring Boot 进行简化设置,请使用下文介绍的 MCP Boot Starters。
Spring AI MCP 集成
Spring AI 通过以下 Spring Boot Starters提供 MCP 集成:
客户端Starters
-
spring-ai-starter-mcp-client- 提供STDIO、基于 Servlet 的Streamable-HTTP、Stateless Streamable-HTTP和SSE支持的核心Starters -
spring-ai-starter-mcp-client-webflux- 基于 WebFlux 的Streamable-HTTP、Stateless Streamable-HTTP和SSE传输实现
服务器Starters
Web MVC
服务器类型 |
依赖 |
<property> </property> |
|
|
|
|
|
|
|
|
Spring AI MCP 注解
除了程序化的 MCP 客户端和服务器配置外,Spring AI 还通过 MCP 注解模块为 MCP 服务器和客户端提供基于注解的方法处理。 这种方法利用清晰的声明式编程模型和 Java 注解,简化了 MCP 操作的创建和注册。
MCP 注解模块使开发人员能够:
-
使用简单的注解创建 MCP 工具、资源和提示
-
以声明式方式处理客户端通知和请求
-
减少样板代码并提高可维护性
-
自动生成工具参数的 JSON 模式
-
访问特殊参数和上下文信息
主要特性包括:
升级至 Spring AI 2.0
从 Spring AI 2.0 开始,特定于 Spring 的 MCP 传输实现(mcp-spring-webflux 和 mcp-spring-webmvc)不再由 MCP Java SDK 提供。它们已被移至 Spring AI 项目本身。这是一个破坏性变更,需要直接引用这些传输构件或类的应用程序更新依赖项和导入语句。
Maven 依赖组 ID 变更
mcp-spring-webflux 和 mcp-spring-webmvc 构件已从 io.modelcontextprotocol.sdk 组迁移至 org.springframework.ai。
<dependency>
<groupId>io.modelcontextprotocol.sdk</groupId>
<artifactId>mcp-spring-webflux</artifactId>
</dependency>
<dependency>
<groupId>io.modelcontextprotocol.sdk</groupId>
<artifactId>mcp-spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>mcp-spring-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>mcp-spring-webmvc</artifactId>
</dependency>
当使用 spring-ai-bom 或 Spring AI Starters依赖项(spring-ai-starter-mcp-server-webflux、spring-ai-starter-mcp-server-webmvc、spring-ai-starter-mcp-client-webflux)时,无需显式指定版本——BOM 会自动管理它。 |
Java 包重定位
所有传输类已重新定位到 org.springframework.ai 个包中。
| 类 | 旧版软件包(MCP SDK) | 新包(Spring AI) |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 类 | 旧版软件包(MCP SDK) | 新包(Spring AI) |
|---|---|---|
|
|
|
|
|
|
// Before
import io.modelcontextprotocol.server.transport.WebFluxSseServerTransportProvider;
import io.modelcontextprotocol.server.transport.WebMvcSseServerTransportProvider;
import io.modelcontextprotocol.client.transport.WebFluxSseClientTransport;
import io.modelcontextprotocol.client.transport.WebClientStreamableHttpTransport;
// After
import org.springframework.ai.mcp.server.webflux.transport.WebFluxSseServerTransportProvider;
import org.springframework.ai.mcp.server.webmvc.transport.WebMvcSseServerTransportProvider;
import org.springframework.ai.mcp.client.webflux.transport.WebFluxSseClientTransport;
import org.springframework.ai.mcp.client.webflux.transport.WebClientStreamableHttpTransport;