一、STDIO 与 SSE MCP 服务器
STDIO 和 SSE MCP 服务器支持多种传输机制,每种都有专门的启动器。
使用 STDIO 客户端或 SSE 客户端连接 STDIO 和 SSE 服务器。
1.1 STDIO MCP 服务器
支持完整 MCP 服务器功能,采用 STDIO 服务器传输。
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server</artifactId></dependency>适合命令行和桌面工具
无需额外 Web 依赖
基本服务器组件配置
处理工具、资源和提示规范
管理服务器能力和变更通知
支持同步和异步服务器实现
1.2 SSE WebMVC 服务器
支持完整 MCP 服务器功能,采用基于 Spring MVC 的 SSE(服务器发送事件)服务器传输,并可选 STDIO 传输。
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webmvc</artifactId></dependency>基于 HTTP 的传输,使用 Spring MVC(WebMvcSseServerTransportProvider)
自动配置的 SSE 端点
可选的 STDIO 传输(通过设置 spring.ai.mcp.server.stdio=true 启用)
包含 spring-boot-starter-web 和 mcp-spring-webmvc 依赖项
1.3 SSE WebFlux 服务器
支持完整 MCP 服务器功能,采用基于 Spring WebFlux 的 SSE(服务器发送事件)服务器传输,并可选 STDIO 传输。
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webflux</artifactId></dependency>此启动器激活 McpWebFluxServerAutoConfiguration 和 McpServerAutoConfiguration 自动配置,提供:
响应式传输,使用 Spring WebFlux(WebFluxSseServerTransportProvider)
自动配置的响应式 SSE 端点
可选的 STDIO 传输(通过设置 spring.ai.mcp.server.stdio=true 启用)
包含 spring-boot-starter-webflux 和 mcp-spring-webflux 依赖项
由于 Spring Boot 的默认行为,当类路径中同时存在 org.springframework.web.servlet.DispatcherServlet 和 org.springframework.web.reactive.DispatcherHandler 时,Spring Boot 将优先使用 DispatcherServlet。因此,如果您的项目使用 spring-boot-starter-web,建议使用 spring-ai-starter-mcp-server-webmvc 而非 spring-ai-starter-mcp-server-webflux。
二、配置属性
2.1 通用属性
所有通用属性前缀为 spring.ai.mcp.server:
2.2 MCP 注解属性
MCP 服务器注解提供了一种使用 Java 注解实现 MCP 服务器处理程序的声明式方法。
服务器 mcp 注解属性前缀为 spring.ai.mcp.server.annotation-scanner:
2.3 SSE 属性
所有 SSE 属性前缀为 spring.ai.mcp.server:
出于向后兼容性原因,SSE 属性没有额外的后缀(如 .sse)。
三、特性和能力
MCP 服务器启动器允许服务器向客户端公开工具、资源和提示。它会根据服务器类型自动将注册为 Spring Bean 的自定义能力处理程序转换为同步/异步规范:
3.1 工具
允许服务器公开语言模型可调用的工具。MCP 服务器启动器提供:
变更通知支持
Spring AI 工具根据服务器类型自动转换为同步/异步规范
通过 Spring Bean 自动生成工具规范:
@BeanpublicToolCallbackProvidermyTools(...){List<ToolCallback>tools=...returnToolCallbackProvider.from(tools);}或使用底层 API:
@BeanpublicList<McpServerFeatures.SyncToolSpecification>myTools(...){List<McpServerFeatures.SyncToolSpecification>tools=.