|
如需最新的快照版本,请使用 Spring AI 1.1.3! |
MCP Server Boot Starters
The Spring AI MCP (Model Context Protocol) Server Boot Starter 为在 Spring Boot 应用程序中设置 MCP 服务器提供自动配置。它实现了 MCP 服务器功能与 Spring Boot 自动配置系统的无缝集成。
The MCP Server Boot Starter 提供以下功能:
-
MCP 服务器组件的自动配置
-
支持同步和异步操作模式
-
多种传输层选项
-
灵活的工具、资源和提示规范
-
更改通知功能
Starters
|
Spring AI自动配置和starter模块的artifact名称有了重大变化。 请参阅升级说明获取更多信息。 |
根据您的传输需求,选择以下Starters之一:
标准 MCP 服务器
完全支持 MCP Server 功能,使用 STDIO 服务器传输。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server</artifactId>
</dependency>
-
适用于命令行和桌面工具
-
无需额外的 Web 依赖
Starters激活了负责以下内容的 McpServerAutoConfiguration 自动配置:
-
配置基本服务器组件
-
处理工具、资源和提示规范
-
管理服务器功能和更改通知
-
提供同步和异步服务器实现
WebMVC 服务器传输
基于 Spring MVC 的 SSE(服务器发送事件)服务器传输提供完整的 MCP 服务器功能支持,以及可选的 STDIO 传输。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
</dependency>
该Starters激活 McpWebMvcServerAutoConfiguration 和 McpServerAutoConfiguration 自动配置,以提供:
-
使用 Spring MVC 的基于 HTTP 的传输(
WebMvcSseServerTransportProvider) -
自动配置的 SSE 端点
-
可选的
STDIO传输(通过设置spring.ai.mcp.server.stdio=true启用) -
包含
spring-boot-starter-web和mcp-spring-webmvc依赖
WebFlux 服务器传输
完全支持 MCP 服务器功能,基于 Spring WebFlux 的 SSE (Server-Sent Events) 服务器传输以及可选的 STDIO 传输。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
</dependency>
该Starters激活 McpWebFluxServerAutoConfiguration 和 McpServerAutoConfiguration 自动配置,以提供:
-
使用 Spring WebFlux 进行响应式传输(
WebFluxSseServerTransportProvider) -
自动配置的响应式 SSE 端点
-
可选的
STDIO传输(通过设置spring.ai.mcp.server.stdio=true启用) -
包含
spring-boot-starter-webflux和mcp-spring-webflux依赖
|
由于 Spring Boot 的默认行为,当类路径中同时存在 |
配置属性
所有属性都以 spring.ai.mcp.server 为前缀:
| <property> </property> | <description> </description> | 默认 |
|---|---|---|
|
启用/禁用 MCP 服务器 |
|
|
启用/禁用标准输入输出传输 |
|
|
用于识别的服务器名称 |
|
|
服务器版本 |
|
|
提供指导客户端如何与此服务器交互的可选说明 |
|
|
服务器类型(同步/异步) |
|
|
启用/禁用资源功能 |
|
|
启用/禁用工具功能 |
|
|
启用/禁用提示功能 |
|
|
启用/禁用代码补全功能 |
|
|
启用资源变更通知 |
|
|
启用提示更改通知 |
|
|
启用工具变更通知 |
|
|
(可选)按工具名称指定响应的 MIME 类型。例如 |
|
|
用于 Web 传输的自定义 SSE 消息端点路径,供客户端发送消息使用 |
|
|
用于 Web 传输的自定义 SSE 端点路径 |
|
|
可选的 URL 前缀。例如 |
- |
|
在请求超时前等待服务器响应的持续时间。适用于通过客户端发出的所有请求,包括工具调用、资源访问和提示操作。 |
|
同步/异步服务器类型
-
同步服务器 - 使用
McpSyncServer实现的默认服务器类型。 它专为应用程序中简单的请求 - 响应模式而设计。 要启用此服务器类型,请在配置中设置spring.ai.mcp.server.type=SYNC。 激活后,它将自动处理同步工具规范的配置。 -
异步服务器 - 异步服务器实现使用
McpAsyncServer并针对非阻塞操作进行了优化。 要启用此服务器类型,请使用spring.ai.mcp.server.type=ASYNC配置您的应用程序。 此服务器类型会自动设置带有内置 Project Reactor 支持的异步工具规范。
服务器能力
MCP 服务器支持四种主要的能力类型,可以单独启用或禁用:
-
工具 - 使用
spring.ai.mcp.server.capabilities.tool=true|false启用/禁用工具功能 -
资源 - 使用
spring.ai.mcp.server.capabilities.resource=true|false启用/禁用资源功能 -
提示词 - 使用
spring.ai.mcp.server.capabilities.prompt=true|false启用/禁用提示词功能 -
补全 - 使用
spring.ai.mcp.server.capabilities.completion=true|false启用/禁用补全功能
所有功能默认启用。禁用某项功能将阻止服务器向客户端注册和暴露相应的特性。
传输选项
MCP 服务器支持三种传输机制,每种机制都有其专用的Starters:
-
标准输入/输出 (STDIO) -
spring-ai-starter-mcp-server -
Spring MVC (服务器发送事件) -
spring-ai-starter-mcp-server-webmvc -
Spring WebFlux (Reactive SSE) -
spring-ai-starter-mcp-server-webflux
功能与能力
MCP Server Boot Starter 允许服务器向客户端暴露工具、资源和提示。 它会自动将注册为 Spring Bean 的自定义功能处理器根据服务器类型转换为同步/异步规范:
工具
允许服务器暴露可由语言模型调用的工具。MCP Server Boot Starter 提供:
-
变更通知支持
-
Spring AI 工具 根据服务器类型自动转换为同步/异步规范
-
通过 Spring Bean 自动指定工具:
@Bean
public ToolCallbackProvider myTools(...) {
List<ToolCallback> tools = ...
return ToolCallbackProvider.from(tools);
}
或使用低级 API:
@Bean
public List<McpServerFeatures.SyncToolSpecification> myTools(...) {
List<McpServerFeatures.SyncToolSpecification> tools = ...
return tools;
}
自动配置将自动检测并注册以下所有工具回调:
* 单独的 ToolCallback beans
* ToolCallback beans 的列表
* ToolCallbackProvider beans
工具按名称去重,使用每个工具名称首次出现的实例。
工具上下文支持
支持 ToolContext,允许将上下文信息传递给工具调用。它在 exchange 键下包含一个 McpSyncServerExchange 实例,可通过 McpToolUtils.getMcpExchange(toolContext) 访问。请参阅此 示例,其中演示了 exchange.loggingNotification(…) 和 exchange.createMessage(…)。
资源管理
为服务器向客户端暴露资源提供了一种标准化的方式。
-
静态和动态资源规范
-
可选的变更通知
-
支持资源模板
-
同步/异步资源规范之间的自动转换
-
通过 Spring Bean 自动进行资源规范:
@Bean
public List<McpServerFeatures.SyncResourceSpecification> myResources(...) {
var systemInfoResource = new McpSchema.Resource(...);
var resourceSpecification = new McpServerFeatures.SyncResourceSpecification(systemInfoResource, (exchange, request) -> {
try {
var systemInfo = Map.of(...);
String jsonContent = new ObjectMapper().writeValueAsString(systemInfo);
return new McpSchema.ReadResourceResult(
List.of(new McpSchema.TextResourceContents(request.uri(), "application/json", jsonContent)));
}
catch (Exception e) {
throw new RuntimeException("Failed to generate system info", e);
}
});
return List.of(resourceSpecification);
}
提示词管理
为服务器向客户端公开提示模板提供了一种标准化方式。
-
变更通知支持
-
模板版本控制
-
同步/异步提示规范之间的自动转换
-
通过 Spring Bean 自动提示规范:
@Bean
public List<McpServerFeatures.SyncPromptSpecification> myPrompts() {
var prompt = new McpSchema.Prompt("greeting", "A friendly greeting prompt",
List.of(new McpSchema.PromptArgument("name", "The name to greet", true)));
var promptSpecification = new McpServerFeatures.SyncPromptSpecification(prompt, (exchange, getPromptRequest) -> {
String nameArgument = (String) getPromptRequest.arguments().get("name");
if (nameArgument == null) { nameArgument = "friend"; }
var userMessage = new PromptMessage(Role.USER, new TextContent("Hello " + nameArgument + "! How can I assist you today?"));
return new GetPromptResult("A personalized greeting message", List.of(userMessage));
});
return List.of(promptSpecification);
}
完成管理
为服务器向客户端暴露完成能力提供了一种标准化的方式。
-
支持同步和异步完成规范
-
通过 Spring Bean 自动注册:
@Bean
public List<McpServerFeatures.SyncCompletionSpecification> myCompletions() {
var completion = new McpServerFeatures.SyncCompletionSpecification(
"code-completion",
"Provides code completion suggestions",
(exchange, request) -> {
// Implementation that returns completion suggestions
return new McpSchema.CompletionResult(List.of(
new McpSchema.Completion("suggestion1", "First suggestion"),
new McpSchema.Completion("suggestion2", "Second suggestion")
));
}
);
return List.of(completion);
}
根变更消费者
当根节点发生变化时,支持 listChanged 的客户端会发送根节点变更通知。
-
支持监控根目录变更
-
为响应式应用自动转换为异步消费者
-
通过 Spring Bean 进行可选注册
@Bean
public BiConsumer<McpSyncServerExchange, List<McpSchema.Root>> rootsChangeHandler() {
return (exchange, roots) -> {
logger.info("Registering root resources: {}", roots);
};
}
使用示例
标准 STDIO 服务器配置
# Using spring-ai-starter-mcp-server
spring:
ai:
mcp:
server:
name: stdio-mcp-server
version: 1.0.0
type: SYNC
WebMVC 服务器配置
# Using spring-ai-starter-mcp-server-webmvc
spring:
ai:
mcp:
server:
name: webmvc-mcp-server
version: 1.0.0
type: SYNC
instructions: "This server provides weather information tools and resources"
sse-message-endpoint: /mcp/messages
capabilities:
tool: true
resource: true
prompt: true
completion: true
WebFlux 服务器配置
# Using spring-ai-starter-mcp-server-webflux
spring:
ai:
mcp:
server:
name: webflux-mcp-server
version: 1.0.0
type: ASYNC # Recommended for reactive applications
instructions: "This reactive server provides weather information tools and resources"
sse-message-endpoint: /mcp/messages
capabilities:
tool: true
resource: true
prompt: true
completion: true
使用 MCP 服务器创建 Spring Boot 应用程序
@Service
public class WeatherService {
@Tool(description = "Get weather information by city name")
public String getWeather(String cityName) {
// Implementation
}
}
@SpringBootApplication
public class McpServerApplication {
private static final Logger logger = LoggerFactory.getLogger(McpServerApplication.class);
public static void main(String[] args) {
SpringApplication.run(McpServerApplication.class, args);
}
@Bean
public ToolCallbackProvider weatherTools(WeatherService weatherService) {
return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();
}
}
自动配置会自动将工具回调注册为 MCP 工具。 您可以有多个生成 ToolCallbacks 的 Bean。自动配置会将它们合并。
示例应用
-
天气服务器 - 带有 WebFlux 传输的 Spring AI MCP Server Boot Starter。
-
天气服务器 (STDIO) - Spring AI MCP Server Boot Starter,支持 STDIO 传输。
-
天气服务器手动配置 - 不使用自动配置但使用 Java SDK 手动配置服务器的 Spring AI MCP Server Boot Starter。