|
此版本仍在开发中,尚未被视为稳定版。为了获取最新的快照版本,请使用Spring AI 1.1.3! |
模型上下文协议(MCP)
| 初次接触MCP? 请从我们的MCP入门指南开始,了解快速介绍和实战示例。 |
模型上下文协议(MCP)是一种标准化协议,使AI模型能够以结构化方式与外部工具和资源进行交互。 把它想象成连接AI模型与现实世界的桥梁——使它们能够通过一致的接口访问数据库、API、文件系统和其他外部服务。 它支持多种传输机制,以适应不同环境的灵活性。
MCP Java SDK(模型上下文协议的Java实现)提供了模型上下文协议的Java实现,通过同步和异步通信模式支持与AI模型及工具的标准交互。
Spring AI 通过专用的 Boot Starters 和 MCP Java 注解全面支持 MCP,使得构建能够无缝连接到外部系统的复杂人工智能应用程序变得前所未有的简单。 这意味着 Spring 开发者可以参与 MCP 生态系统的两端——创建使用 MCP 服务器的人工智能应用,以及构建向更广泛的人工智能社区暴露基于 Spring 服务的 MCP 服务器。 使用 Spring Initializer 初始化带有 MCP 支持的人工智能应用。
Java SDK架构
| 本节提供MCP Java SDK架构的概述。 关于Spring AI MCP集成,请参阅Spring AI MCP Boot Starters文档。 |
Java MCP 实现遵循三层架构,以分离关注点,确保可维护性和灵活性:
客户端/服务器层(顶层)
顶层负责主要的应用逻辑和协议操作:
-
McpClient - 管理客户端操作和服务器连接
-
Mcp服务器 - 处理服务器端协议操作和客户端请求
-
这两个组件都利用了下方的会话层来进行通信管理。
会话层(中层)
中间层负责管理通信模式并维护连接状态:
-
McpSession - 核心会话管理接口
-
McpClientSession - 针对客户端的会话实现
-
Mcp服务器会话 - 服务器特定的会话实现
传输层(底部)
最底层负责实际的消息传输和序列化处理:
-
McpTransport - 管理JSON-RPC消息的序列化与反序列化
-
支持多种传输实现(STDIO、HTTP/SSE、可流式处理的HTTP等)。
-
为所有高级通信提供基础支持
| MCP客户端 | |
|---|---|
MCP客户端是模型上下文协议(MCP)架构中的一个关键组件,负责与MCP服务器建立及管理连接。它实现了协议的客户端部分,处理包括:
|
![]() |
| MCP 服务器 | |
|---|---|
MCP 服务器是模型上下文协议(MCP)架构中的基础组件,为客户端提供工具、资源和功能。它实现了该协议的服务器端部分,负责:
|
![]() |
有关详细实施指导,使用低级MCP客户端/服务器API,请参阅MCP Java SDK文档。 对于使用Spring Boot进行的简化设置,请使用下文所述的MCPStarters。
Spring AI MCP 集成
Spring AI 通过以下 Spring Boot Starter 提供 MCP 集成:
客户端Starters
-
spring-ai-starter-mcp-client- 核心Starters,提供STDIO、基于 Servlet 的Streamable-HTTP、Stateless Streamable-HTTP和SSE支持 -
spring-ai-starter-mcp-client-webflux- 基于 WebFlux 的Streamable-HTTP、Stateless Streamable-HTTP和SSE传输实现
服务器Starters
标准输出
| 服务池类型设置 | 依赖 | 属性 |
|---|---|---|
|
|
Spring Boot
服务池类型设置 |
依赖 |
属性 |
|
|
|
|
|
|
|
|
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更改
The mcp-spring-webflux and mcp-spring-webmvc artifacts have moved from the io.modelcontextprotocol.sdk group to 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 starter 依赖(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;

