Spring AI MCP Weather Server Sample with WebMVC Starter

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-webmcp-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();

该示例项目包括示例客户端实现:

为了获得更好的开发体验,请考虑使用 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 传输

  1. 创建一个包含以下内容的 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"
      ]
    }
  }
}
  1. 使用配置文件运行客户端:
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) 传输

  1. 启动 mcp-weather-starter-webmvc-server
java -jar mcp-weather-starter-webmvc-server-0.0.1-SNAPSHOT.jar

在端口 8080 上启动 MCP 服务器。

  1. 在另一个控制台中启动配置了 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

Crypto Price & Market Analysis MCP Server

一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。

精选
TypeScript
MCP PubMed Search

MCP PubMed Search

用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。

精选
Python
mixpanel

mixpanel

连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。

精选
TypeScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

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

精选
Python
Nefino MCP Server

Nefino MCP Server

为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。

官方
Python
Vectorize

Vectorize

将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。

官方
JavaScript
Mathematica Documentation MCP server

Mathematica Documentation MCP server

一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。

本地
Python
kb-mcp-server

kb-mcp-server

一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。

本地
Python
Research MCP Server

Research MCP Server

这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

本地
Python
Cryo MCP Server

Cryo MCP Server

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

本地
Python