跳到主要内容

MCP 服务器启动器

DeepSeek V3 中英对照 MCP Server Boot Starters MCP Server Boot Starter

Spring AI MCP(模型上下文协议)服务器启动器为在 Spring Boot 应用程序中设置 MCP 服务器提供了自动配置。它使 MCP 服务器功能能够与 Spring Boot 的自动配置系统无缝集成。

MCP Server Boot Starter 提供以下功能:

  • MCP 服务器组件的自动配置

  • 支持同步和异步操作模式

  • 多种传输层选项

  • 灵活的工具、资源和提示注册

  • 变更通知功能

入门指南

根据您的传输需求选择以下启动器之一:

标准 MCP 服务器

完整支持 MCP 服务器功能,使用 STDIO 服务器传输。

<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
</dependency>
xml
  • 适用于命令行和桌面工具

  • 无需额外的 web 依赖

启动器激活了负责以下内容的 McpServerAutoConfiguration 自动配置:

  • 配置基本服务器组件

  • 处理工具、资源和提示注册

  • 管理服务器功能和变更通知

  • 提供同步和异步服务器实现

WebMVC 服务器传输

完整的 MCP 服务器功能支持,基于 Spring MVC 的 SSE(服务器发送事件)服务器传输,以及可选的 STDIO 传输。

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

启动器激活 McpWebMvcServerAutoConfigurationMcpServerAutoConfiguration 自动配置以提供:

  • 基于 HTTP 的传输使用 Spring MVC (WebMvcSseServerTransport)

  • 自动配置的 SSE 端点

  • 可选的 STDIO 传输(通过设置 spring.ai.mcp.server.stdio=true 启用)

  • 包含 spring-boot-starter-webmcp-spring-webmvc 依赖项

WebFlux 服务器传输

完整的 MCP 服务器功能支持,基于 Spring WebFlux 的 SSE(Server-Sent Events)服务器传输,以及可选的 STDIO 传输。

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

启动器激活 McpWebFluxServerAutoConfigurationMcpServerAutoConfiguration 自动配置以提供:

  • 使用 Spring WebFlux 的响应式传输 (WebFluxSseServerTransport)

  • 自动配置的响应式 SSE 端点

  • 可选的 STDIO 传输(通过设置 spring.ai.mcp.server.stdio=true 启用)

  • 包含 spring-boot-starter-webfluxmcp-spring-webflux 依赖

配置属性

所有属性都以 spring.ai.mcp.server 为前缀:

属性描述默认值
enabled启用/禁用 MCP 服务器true
stdio启用/禁用 stdio 传输false
name服务器名称,用于标识mcp-server
version服务器版本1.0.0
type服务器类型(SYNC/ASYNC)SYNC
resource-change-notification启用资源变更通知true
tool-change-notification启用工具变更通知true
prompt-change-notification启用提示变更通知true
sse-message-endpoint用于 Web 传输的 SSE 端点路径/mcp/message

同步/异步服务器类型

  • 同步服务器 - 默认的服务器类型,使用 McpSyncServer 实现。它专为应用程序中的简单请求-响应模式设计。要启用此服务器类型,请在配置中设置 spring.ai.mcp.server.type=SYNC。启用后,它会自动处理同步工具注册的配置。

  • 异步服务器 - 异步服务器实现使用 McpAsyncServer,并针对非阻塞操作进行了优化。要启用此服务器类型,请在应用程序中配置 spring.ai.mcp.server.type=ASYNC。此服务器类型会自动设置异步工具注册,并内置 Project Reactor 支持。

传输选项

MCP 服务器支持三种传输机制,每种机制都有其专用的启动器:

  • 标准输入/输出 (STDIO) - spring-ai-mcp-server-spring-boot-starter

  • Spring MVC (服务器发送事件) - spring-ai-mcp-server-webmvc-spring-boot-starter

  • Spring WebFlux (响应式 SSE) - spring-ai-mcp-server-webflux-spring-boot-starter

功能与能力

MCP Server Boot Starter 允许服务器向客户端暴露工具、资源和提示。它会根据服务器类型自动将注册为 Spring bean 的自定义能力处理程序转换为同步/异步注册:

允许服务器暴露可以由语言模型调用的工具。MCP Server Boot Starter 提供:

  • 变更通知支持

  • 工具根据服务器类型自动转换为同步/异步注册

  • 通过 Spring bean 自动工具注册:

@Bean
public ToolCallbackProvider myTools(...) {
List<ToolCallback> tools = ...
return ToolCallbackProvider.from(tools);
}
java

或使用低级 API:

@Bean
public List<McpServerFeatures.SyncToolRegistration> myTools(...) {
List<McpServerFeatures.SyncToolRegistration> tools = ...
return tools;
}
java

为服务器提供了一种标准化的方式,将资源暴露给客户端。

  • 静态和动态资源注册

  • 可选的变更通知

  • 支持资源模板

  • 同步/异步资源注册之间的自动转换

  • 通过 Spring bean 自动注册资源:

@Bean
public List<McpServerFeatures.SyncResourceRegistration> myResources(...) {
var systemInfoResource = new McpSchema.Resource(...);
var resourceRegistration = new McpServerFeatures.SyncResourceRegistration(systemInfoResource, 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(resourceRegistration);
}
java

为服务器提供了一种标准化的方式,向客户端暴露提示模板。

  • 变更通知支持

  • 模板版本控制

  • 同步/异步提示注册之间的自动转换

  • 通过 Spring beans 自动注册提示:

@Bean
public List<McpServerFeatures.SyncPromptRegistration> myPrompts() {
var prompt = new McpSchema.Prompt("greeting", "A friendly greeting prompt",
List.of(new McpSchema.PromptArgument("name", "The name to greet", true)));

var promptRegistration = new McpServerFeatures.SyncPromptRegistration(prompt, 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(promptRegistration);
}
java

当根(roots)发生变化时,支持 listChanged 的客户端会发送根变更通知。

  • 支持监控根目录变更

  • 为响应式应用自动转换为异步消费者

  • 通过 Spring beans 进行可选注册

@Bean
public Consumer<List<McpSchema.Root>> rootsChangeConsumer() {
return roots -> {
logger.info("Registering root resources: {}", roots);
};
}
java

使用示例

标准 STDIO 服务器配置

# Using spring-ai-mcp-server-spring-boot-starter
spring:
ai:
mcp:
server:
name: stdio-mcp-server
version: 1.0.0
type: SYNC
yaml

WebMVC 服务器配置

# Using spring-ai-mcp-server-webmvc-spring-boot-starter
spring:
ai:
mcp:
server:
name: webmvc-mcp-server
version: 1.0.0
type: SYNC
sse-message-endpoint: /mcp/messages
yaml

WebFlux 服务器配置

# Using spring-ai-mcp-server-webflux-spring-boot-starter
spring:
ai:
mcp:
server:
name: webflux-mcp-server
version: 1.0.0
type: ASYNC # Recommended for reactive applications
sse-message-endpoint: /mcp/messages
yaml

使用 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();
}
}
java

自动配置将自动将工具回调注册为 MCP 工具。你可以有多个生成 ToolCallbacks 的 bean。自动配置会将它们合并。

示例应用

其他资源