Spring AI MCP Weather Server Sample with WebMVC Starter
alexandredavi
README
Spring AI MCP 天气服务器示例 (WebMVC Starter)
此示例项目演示了如何使用 Spring AI MCP Server Boot Starter 和 WebMVC 传输创建一个 MCP 服务器。它实现了一个天气服务,该服务公开了使用美国国家气象局 API 检索天气信息的工具。
更多信息,请参阅 MCP Server Boot Starter 参考文档。
概述
该示例展示了:
- 与
spring-ai-mcp-server-webmvc-spring-boot-starter
的集成 - 支持 SSE (服务器发送事件) 和 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 的基于 HTTP 的传输 (
WebMvcSseServerTransport
) - 自动配置的 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
配置服务器:
# 服务器标识
spring.ai.mcp.server.name=my-weather-server
spring.ai.mcp.server.version=0.0.1
# 服务器类型 (SYNC/ASYNC)
spring.ai.mcp.server.type=SYNC
# 传输配置
spring.ai.mcp.server.stdio=false
spring.ai.mcp.server.sse-message-endpoint=/mcp/message
# 更改通知
spring.ai.mcp.server.resource-change-notification=true
spring.ai.mcp.server.tool-change-notification=true
spring.ai.mcp.server.prompt-change-notification=true
# 日志 (STDIO 传输需要)
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。这些 starters 能够自动配置到 MCP 服务器的多个 STDIO 和/或 SSE 连接。 请参阅 starter-default-client 项目中的示例。
Boot Starter 客户端
让我们使用 starter-default-client 客户端连接到我们的天气 starter-webmvc-server
。
按照 starter-default-client
自述文件中的说明构建 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
附加资源
推荐服务器
Crypto Price & Market Analysis MCP Server
一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。
MCP PubMed Search
用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。
mixpanel
连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。

Sequential Thinking MCP Server
这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

Nefino MCP Server
为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。
Vectorize
将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。
Mathematica Documentation MCP server
一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。
kb-mcp-server
一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。
Research MCP Server
这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

Cryo MCP Server
一个API服务器,实现了模型补全协议(MCP),用于Cryo区块链数据提取,允许用户通过任何兼容MCP的客户端查询以太坊区块链数据。