关于 Spring AI MCP Weather Server Sample with WebMVC Starter
这是使用 WebMVC Starter 构建 MCP 天气服务的 Spring AI 示例,面向开发者。它提供天气预报和美国州级警报工具,并支持 SSE 与 STDIO 传输。
主要功能
- 01按经纬度获取天气预报
- 02获取美国州级警报
- 03通过 Spring AI 注解注册工具
- 04支持 SSE 和 STDIO 传输
适用场景
- 01查询指定地点的天气预报
- 02查看美国某州的警报
- 03了解 Spring AI MCP 服务配置
MCP 相关
向 MCP 客户端提供天气预报和警报工具,客户端可通过 SSE 或 STDIO 传输连接。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Spring AI MCP Weather Server Sample with WebMVC Starter
此示例项目演示如何使用 Spring AI MCP Server Boot Starter 和 WebMVC 传输创建 MCP 服务。它实现了一个天气服务,通过 National Weather Service API 提供用于获取天气信息的工具。
如需了解详情,请参阅 MCP Server Boot Starter 参考文档。
概述
此示例展示了:
- 与
spring-ai-mcp-server-webmvc-spring-boot-starter集成 - 同时支持 SSE(Server-Sent Events)和 STDIO 传输
- 使用 Spring AI 的
@Tool注解自动注册工具 - 两个天气相关工具:
- 根据位置(纬度/经度)获取天气预报
- 根据美国州份获取天气预警
依赖项
此项目需要 Spring AI MCP Server WebMVC Boot Starter:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
</dependency>
此 Starter 提供:
- 使用 Spring MVC(
WebMvcSseServerTransport)的基于 HTTP 的传输 - 自动配置的 SSE 端点
- 可选的 STDIO 传输
- 内含
spring-boot-starter-web和mcp-spring-webmvc依赖项
构建项目
使用 Maven 构建项目:
./mvnw clean install -DskipTests
运行服务
此服务支持两种传输模式:
WebMVC SSE 模式(默认)
java -jar target/mcp-weather-starter-webmvc-server-0.0.1-SNAPSHOT.jar
STDIO 模式
要启用 STDIO 传输,请设置相应的属性:
java -Dspring.ai.mcp.server.stdio=true -Dspring.main.web-application-type=none -jar target/mcp-weather-starter-webmvc-server-0.0.1-SNAPSHOT.jar
配置
通过 application.properties 配置服务:
# Server identification
spring.ai.mcp.server.name=my-weather-server
spring.ai.mcp.server.version=0.0.1
# Server type (SYNC/ASYNC)
spring.ai.mcp.server.type=SYNC
# Transport configuration
spring.ai.mcp.server.stdio=false
spring.ai.mcp.server.sse-message-endpoint=/mcp/message
# Change notifications
spring.ai.mcp.server.resource-change-notification=true
spring.ai.mcp.server.tool-change-notification=true
spring.ai.mcp.server.prompt-change-notification=true
# Logging (required for STDIO transport)
spring.main.banner-mode=off
logging.file.name=./target/starter-webmvc-server.log
可用工具
天气预报工具
- 名称:
getWeatherForecastByLocation - 描述:获取指定纬度/经度的天气预报
- 参数:
latitude:double - 纬度坐标longitude:double - 经度坐标
天气预警工具
- 名称:
getAlerts - 描述:获取美国某州的天气预警
- 参数:
state:String - 两字母的美国州代码(例如,CA、NY)
服务实现
此服务使用 Spring Boot 和 Spring AI 的工具注解自动注册工具:
@SpringBootApplication
public class McpServerApplication {
public static void main(String[] args) {
SpringApplication.run(McpServerApplication.class, args);
}
@Bean
public ToolCallbackProvider weatherTools(WeatherService weatherService){
return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();
}
}
WeatherService 使用 @Tool 注解实现天气工具:
@Service
public class WeatherService {
@Tool(description = "Get weather forecast for a specific latitude/longitude")
public String getWeatherForecastByLocation(double latitude, double longitude) {
// Implementation using weather.gov API
}
@Tool(description = "Get weather alerts for a US state. Input is Two-letter US state code (e.g., CA, NY)")
public String getAlerts(String state) {
// Implementation using weather.gov API
}
}
MCP 客户端
你可以使用 STDIO 或 SSE 传输连接天气服务:
手动客户端
WebMVC SSE 客户端
适用于使用 SSE 传输的服务:
var transport = new HttpClientSseClientTransport("http://localhost:8080");
var client = McpClient.sync(transport).build();
STDIO 客户端
适用于使用 STDIO 传输的服务:
var stdioParams = ServerParameters.builder("java")
.args("-Dspring.ai.mcp.server.stdio=true",
"-Dspring.main.web-application-type=none",
"-Dspring.main.banner-mode=off",
"-Dlogging.pattern.console=",
"-jar",
"target/mcp-weather-starter-webmvc-server-0.0.1-SNAPSHOT.jar")
.build();
var transport = new StdioClientTransport(stdioParams);
var client = McpClient.sync(transport).build();
示例项目包含客户端实现示例:
- SampleClient.java:手动实现的 MCP 客户端
- ClientStdio.java:STDIO 传输连接
- ClientSse.java:SSE 传输连接
为获得更好的开发体验,可以考虑使用 MCP Client Boot Starters。这些 Starter 支持自动配置与 MCP 服务的多个 STDIO 和/或 SSE 连接。示例请参阅 starter-default-client 项目。
Boot Starter 客户端
下面使用 starter-default-client 客户端连接到天气 starter-webmvc-server。
按照 starter-default-client readme 中的说明,构建 mcp-starter-default-client-0.0.1-SNAPSHOT.jar 客户端应用程序。
STDIO 传输
- 创建一个
mcp-servers-config.json配置文件,内容如下:
{
"mcpServers": {
"weather-starter-webmvc-server": {
"command": "java",
"args": [
"-Dspring.ai.mcp.server.stdio=true",
"-Dspring.main.web-application-type=none",
"-Dlogging.pattern.console=",
"-jar",
"/absolute/path/to/mcp-weather-starter-webmvc-server-0.0.1-SNAPSHOT.jar"
]
}
}
}
- 使用该配置文件运行客户端:
java -Dspring.ai.mcp.client.stdio.servers-configuration=file:mcp-servers-config.json \
-Dai.user.input='What is the weather in NY?' \
-Dlogging.pattern.console= \
-jar mcp-starter-default-client-0.0.1-SNAPSHOT.jar
SSE(WebMVC)传输
- 启动
mcp-weather-starter-webmvc-server:
java -jar mcp-weather-starter-webmvc-server-0.0.1-SNAPSHOT.jar
这将在端口 8080 上启动 MCP 服务。
- 在另一个控制台中,启动配置为使用 SSE 传输的客户端:
java -Dspring.ai.mcp.client.sse.connections.weather-server.url=http://localhost:8080 \
-Dlogging.pattern.console= \
-Dai.user.input='What is the weather in NY?' \
-jar mcp-starter-default-client-0.0.1-SNAPSHOT.jar
其他资源
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。