Spring AI 1.x 系列【45】无状态流式 HTTP 类型 MCP 服务端
2026/6/13 19:08:59 网站建设 项目流程

1. 概述

无状态(StatelessStreamable-HTTP MCP服务端专为简化部署而设计,请求之间不维护会话状态,非常适合微服务架构和云原生部署场景。

启用方式:设置spring.ai.mcp.server.protocol=STATELESS,并使用 Streamable-HTTP 客户端连接。

限制:无状态服务端不支持向 MCP 客户端发起的消息请求(如 elicitation、sampling、ping 等)。


2. 启动器类型

2.1 Stateless WebMVC Server

使用spring-ai-starter-mcp-server-webmvc依赖,并设置spring.ai.mcp.server.protocol=STATELESS

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webmvc</artifactId></dependency>

特点:

  • 基于Spring MVC传输的无状态运行模式
  • 无会话状态管理
  • 简化的部署模型
  • 针对云原生环境优化

2.2 Stateless WebFlux Server

使用spring-ai-starter-mcp-server-webflux依赖,并设置spring.ai.mcp.server.protocol=STATELESS

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webflux</artifactId></dependency>

特点:

  • 基于WebFlux传输的响应式无状态运行模式
  • 无会话状态管理
  • 非阻塞请求处理
  • 针对高吞吐场景优化

3. 配置项说明

3.1 通用配置

配置前缀:spring.ai.mcp.server

配置项说明默认值
enabled开启/关闭无状态 MCP 服务端true
protocolMCP 服务端协议,必须设为 STATELESS-
tool-callback-converter开启/关闭 Spring AI ToolCallback 到 MCP Tool 声明的自动转换true
name服务端标识名称mcp-server
version服务端版本1.0.0
instructions可选的客户端交互指引null
type服务端类型:SYNC(同步) / ASYNC(异步)SYNC
capabilities.resource开启/关闭资源能力true
capabilities.tool开启/关闭工具能力true
capabilities.prompt开启/关闭提示词能力true
capabilities.completion开启/关闭补全能力true
tool-response-mime-type按工具名配置响应 MIME 类型-
request-timeout请求超时时间20s

注意:无状态服务端不支持变更通知(resource-change-notification / tool-change-notification / prompt-change-notification),因此通用配置中不包含这些项。

3.2 MCP 注解配置

配置前缀:spring.ai.mcp.server.annotation-scanner

配置项说明默认值
enabled开启/关闭 MCP 服务端注解自动扫描true

3.3 Stateless 连接配置

配置前缀:spring.ai.mcp.server.stateless

配置项说明默认值
mcp-endpoint自定义 MCP 端点路径/mcp
disallow-delete禁止 DELETE 操作false

4. 功能与能力

MCP Server Boot Starter会自动将注册为Spring Bean的自定义能力处理器转换为对应的同步/异步声明。

与有状态服务端的关键区别:无状态服务端使用的 API 类为McpStatelessServerFeatures(非McpServerFeatures),且不支持McpSyncServerExchange/McpAsyncServerExchange上下文对象。

4.1 工具(Tools)

允许服务端暴露可供语言模型调用的工具。提供以下特性:

  • 变更通知支持
  • Spring AI工具根据服务端类型自动转换为同步/异步声明
  • 通过Spring Bean自动注册工具声明

高级 API 注册方式:

@BeanpublicToolCallbackProvidermyTools(...){List<ToolCallback>tools=...returnToolCallbackProvider.from(tools);}

底层 API 注册方式:

@BeanpublicList<McpStatelessServerFeatures.SyncToolSpecification>myTools(...){List<McpStatelessServerFeatures.SyncToolSpecification>tools=...returntools;}

自动配置会检测并注册以下来源的所有工具回调:

  • 单个ToolCallbackBean
  • ToolCallback列表Bean
  • ToolCallbackProviderBean

工具按名称去重,重名工具以首次出现的为准。设置tool-callback-converter=false可禁用自动检测与注册。

注意:工具上下文支持(Tool Context Support)不适用于无状态服务端

4.2 资源(Resources)

以标准化方式向客户端暴露资源。提供以下特性:

  • 静态和动态资源声明
  • 可选的变更通知
  • 资源模板支持
  • 同步/异步资源声明自动转换

注册方式:

@BeanpublicList<McpStatelessServerFeatures.SyncResourceSpecification>myResources(...){varsystemInfoResource=newMcpSchema.Resource(...);varresourceSpecification=newMcpStatelessServerFeatures.SyncResourceSpecification(systemInfoResource,(context,request)->{try{varsystemInfo=Map.of(...);StringjsonContent=newObjectMapper().writeValueAsString(systemInfo);returnnewMcpSchema.ReadResourceResult(List.of(newMcpSchema.TextResourceContents(request.uri(),"application/json",jsonContent)));}catch(Exceptione){thrownewRuntimeException("Failed to generate system info",e);}});returnList.of(resourceSpecification);}

4.3 提示词(Prompts)

以标准化方式向客户端暴露提示词模板。提供以下特性:

  • 变更通知支持
  • 模板版本管理
  • 同步/异步提示词声明自动转换

注册方式:

@BeanpublicList<McpStatelessServerFeatures.SyncPromptSpecification>myPrompts(){varprompt=newMcpSchema.Prompt("greeting","A friendly greeting prompt",List.of(newMcpSchema.PromptArgument("name","The name to greet",true)));varpromptSpecification=newMcpStatelessServerFeatures.SyncPromptSpecification(prompt,(context,getPromptRequest)->{StringnameArgument=(String)getPromptRequest.arguments().get("name");if(nameArgument==null){nameArgument="friend";}varuserMessage=newPromptMessage(Role.USER,newTextContent("Hello "+nameArgument+"! How can I assist you today?"));returnnewGetPromptResult("A personalized greeting message",List.of(userMessage));});returnList.of(promptSpecification);}

4.4 补全(Completions)

以标准化方式向客户端暴露自动补全能力。支持同步和异步补全声明。

@BeanpublicList<McpStatelessServerFeatures.SyncCompletionSpecification>myCompletions(){varcompletion=newMcpStatelessServerFeatures.SyncCompletionSpecification(newMcpSchema.PromptReference("ref/prompt","code-completion","Provides code completion suggestions"),(exchange,request)->{returnnewMcpSchema.CompleteResult(List.of("python","pytorch","pyside"),10,true);});returnList.of(completion);}

5. 使用示例

5.1 Stateless 服务端配置

spring:ai:mcp:server:protocol:STATELESSname:stateless-mcp-serverversion:1.0.0type:ASYNCinstructions:"This stateless server is optimized for cloud deployments"stateless:mcp-endpoint:/api/mcp

5.2 创建 MCP 服务端应用

@ServicepublicclassWeatherService{@Tool(description="根据城市名称获取天气信息")publicStringgetWeather(StringcityName){// 实现逻辑}}@SpringBootApplicationpublicclassMcpServerApplication{privatestaticfinalLoggerlogger=LoggerFactory.getLogger(McpServerApplication.class);publicstaticvoidmain(String[]args){SpringApplication.run(McpServerApplication.class,args);}@BeanpublicToolCallbackProviderweatherTools(WeatherServiceweatherService){returnMethodToolCallbackProvider.builder().toolObjects(weatherService).build();}}

自动配置会将工具回调自动注册为MCP工具。支持多个Bean分别生成ToolCallbacks,自动配置会自动合并它们。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询