模型上下文协议(MCP)服务端是通过标准化协议接口向AI应用暴露特定能力的程序。每个服务端都为特定领域提供专属功能。
Spring AI MCP服务端启动器为Spring Boot应用提供MCP服务端的自动配置,实现MCP服务端能力与Spring Boot自动配置体系的无缝集成。
MCP服务端启动器提供以下能力:
自动配置MCP服务端组件,包含工具、资源和提示词
支持多种MCP协议版本,包括标准输入输出、服务器发送事件、可流式传输HTTP和无状态服务端
支持同步和异步运行模式
多种传输层选项
灵活的工具、资源和提示词定义
变更通知能力
基于注解的服务端开发,支持Bean自动扫描与注册
MCP 服务端启动器
MCP服务端支持多种协议和传输机制。使用专用启动器并配置正确的spring.ai.mcp.server.protocol属性即可完成服务端配置:
标准输入输出
服务端类型 依赖项 配置属性 标准输入输出(STDIO) spring-ai-starter-mcp-server spring.ai.mcp.server.stdio=true
WebMVC
服务端类型 依赖项 配置属性 服务器发送事件WebMVC spring-ai-starter-mcp-server-webmvc spring.ai.mcp.server.protocol=SSE 或留空 可流式传输HTTP WebMVC spring-ai-starter-mcp-server-webmvc spring.ai.mcp.server.protocol=STREAMABLE 无状态WebMVC spring-ai-starter-mcp-server-webmvc spring.ai.mcp.server.protocol=STATELESS
WebFlux(响应式)
服务端类型 依赖项 配置属性 服务器发送事件WebFlux spring-ai-starter-mcp-server-webflux spring.ai.mcp.server.protocol=SSE 或留空 可流式传输HTTP WebFlux spring-ai-starter-mcp-server-webflux spring.ai.mcp.server.protocol=STREAMABLE 无状态WebFlux spring-ai-starter-mcp-server-webflux spring.ai.mcp.server.protocol=STATELESS
服务端能力
根据服务端和传输类型,MCP服务端可支持多种能力,包括:
工具 - 允许服务端暴露可被大语言模型调用的工具。注意:应用上下文中所有可用工具都会作为MCP工具发布,包含从MCP客户端获取的工具
资源 - 为服务端向客户端暴露资源提供标准化方式
提示词 - 为服务端向客户端暴露提示词模板提供标准化方式
实用工具/补全 - 为服务端提供提示词和资源URI的参数自动补全建议提供标准化方式
实用工具/日志 - 为服务端向客户端发送结构化日志消息提供标准化方式
实用工具/进度 - 通过通知消息实现长时间运行操作的可选进度跟踪
实用工具/心跳 - 服务端上报状态的可选健康检查机制
所有能力默认启用。禁用某项能力会阻止服务端向客户端注册和暴露对应功能。
服务端协议
MCP提供多种协议类型:
STDIO - 进程内协议(如服务端运行在宿主应用内部),通过标准输入输出通信。启用STDIO需设置spring.ai.mcp.server.stdio=true
SSE - 用于实时更新的服务器发送事件协议。服务端作为独立进程运行,可处理多个客户端连接
Streamable-HTTP - 可流式传输HTTP传输协议允许MCP服务端作为独立进程,使用HTTP POST和GET请求处理多个客户端连接,支持可选的服务器发送事件(SSE)流传输多服务端消息,替代SSE传输。启用STREAMABLE协议需设置spring.ai.mcp.server.protocol=STREAMABLE
无状态 - 无状态MCP服务端专为简化部署设计,请求间不维护会话状态,适用于微服务架构和云原生部署。启用STATELESS协议需设置spring.ai.mcp.server.protocol=STATELESS
同步/异步服务端API选项
MCP服务端API支持命令式(同步)和响应式(异步)编程模型。
同步服务端 - 默认服务端类型,基于McpSyncServer实现,适用于应用中简单的请求响应模式。启用该类型需在配置中设置spring.ai.mcp.server.type=SYNC,激活后自动处理同步工具配置
注意:同步服务端仅注册同步MCP注解方法,异步方法会被忽略。
异步服务端 - 异步服务端实现基于McpAsyncServer,针对非阻塞操作优化。启用该类型需配置spring.ai.mcp.server.type=ASYNC,该服务端类型自动配置集成Project Reactor的异步工具规格
注意:异步服务端仅注册异步MCP注解方法,同步方法会被忽略。
MCP 服务端注解
MCP服务端启动器全面支持基于注解的服务端开发,允许你使用声明式Java注解创建MCP服务端,无需手动配置。
核心注解
@McpTool - 将方法标记为MCP工具,自动生成JSON模式
@McpResource - 通过URI模板提供资源访问能力
@McpPrompt - 为AI交互生成提示词消息
@McpComplete - 为提示词提供自动补全功能
特殊参数
注解系统支持提供额外上下文的特殊参数类型:
McpMeta - 访问MCP请求中的元数据
@McpProgressToken - 接收长时间运行操作的进度令牌
McpSyncServerExchange/McpAsyncServerExchange - 用于高级操作的完整服务端上下文
McpTransportContext - 用于无状态操作的轻量级上下文
CallToolRequest - 支持动态模式的灵活工具
简单示例
@Component
public class CalculatorTools {
@McpTool(name = "add", description = "两个数字相加")
public int add(
@McpToolParam(description = "第一个数字", required = true) int a,
@McpToolParam(description = "第二个数字", required = true) int b) {
return a + b;
}
@McpResource(uri = "config://{key}", name = "配置信息")
public String getConfig(String key) {
return configData.get(key);
}
}自动配置
借助Spring Boot自动配置,带注解的Bean会被自动检测并注册:
@SpringBootApplication
public class McpServerApplication {
public static void main(String[] args) {
SpringApplication.run(McpServerApplication.class, args);
}
}自动配置会执行以下操作:
扫描带有MCP注解的Bean
创建对应的规格定义
将其注册到MCP服务端
根据配置处理同步和异步实现
配置属性
配置服务端注解扫描器:
spring: ai: mcp: server: type: SYNC # 或 ASYNC annotation-scanner: enabled: true
附加资源
服务端注解参考 - 服务端注解完整指南
特殊参数 - 高级参数注入
示例 - 全面的示例和用例
示例应用
天气服务端(SSE WebFlux) - 集成WebFlux传输的Spring AI MCP服务端启动器
天气服务端(STDIO) - 集成STDIO传输的Spring AI MCP服务端启动器
天气服务端手动配置 - 不使用自动配置,通过Java SDK手动配置的Spring AI MCP服务端启动器
可流式传输HTTP WebFlux/WebMVC示例 - 待完善
无状态WebFlux/WebMVC示例 - 待完善