^ 正の文、
Published on 2025-04-10 / 1 Visits
0
0

深入探究 MCP Spring Boot Server:构建强大的天气信息服务系统

深入探究 MCP Spring Boot Server:构建强大的天气信息服务系统

在数字化时代,高效、灵活且功能强大的服务端开发极为关键。Spring Boot 作为热门的 Java 开发框架,凭借快速开发、自动配置等特性备受开发者青睐。而 Model Context Protocol(MCP)为特定领域服务构建提供了便利的协议支持。本文将详细探讨如何运用 Spring Boot 构建基于 MCP 的天气信息服务系统。

一、项目概述

1.1 项目背景与目标

随着人们对实时天气信息的需求持续增长,开发稳定、高效且易于扩展的天气信息服务系统意义重大。本项目旨在借助 Spring Boot 和 MCP,打造能通过 MCP 接口提供准确天气信息服务的服务器。

1.2 项目亮点

  • 基于 MCP 的天气服务:通过 MCP 接口,实现灵活且标准化的天气信息获取方式。
  • RESTful API 端点:便于其他系统或客户端进行数据交互,提升系统可集成性。
  • Server - Sent Events(SSE)支持:为实时推送天气信息提供技术支撑,确保用户获取最新天气动态。
  • 自动工具注册:简化工具配置流程,提高开发效率。
  • Spring Boot 3.x 集成:充分利用 Spring Boot 3.x 新特性,增强系统性能和稳定性。

二、技术栈与环境要求

2.1 技术栈

  • JDK 17:提供稳定的 Java 运行环境,支持最新 Java 语言特性。
  • Maven 3.6.x 或更高版本:用于项目构建、依赖管理和生命周期管理。
  • Spring Boot 3.2.0 或更高版本:作为核心框架,负责项目快速搭建与运行。
  • Spring AI Core:为项目提供人工智能基础支持。
  • Spring AI Starter MCP Server WebMVC:实现 MCP 服务器的 WebMVC 支持。
  • MCP Facade Generator:生成 MCP 相关的 Facade 代码,简化开发流程。

2.2 环境要求

开发环境需安装 JDK 17 或更高版本、Maven 3.6.x 或更高版本。建议使用最新的 Spring Boot 3.2.0 或更高版本,以获取最佳性能和功能。

三、项目搭建与运行

3.1 克隆项目仓库

使用以下命令克隆项目仓库:

git clone https://github.com/yourusername/mcp-springboot-server.git
cd mcp-springboot-server

3.2 构建项目

使用 Maven 构建项目,执行命令:

mvn clean install

此命令会清理旧文件,下载项目依赖到本地仓库,然后进行编译和打包。

3.3 运行应用程序

构建完成后,使用以下命令启动应用程序:

mvn spring-boot:run

应用程序默认在端口 8080 启动,可在 application.properties 文件中修改端口。

四、项目配置详解

4.1 主配置文件

项目主要配置属性在 application.properties 文件中,常见配置如下:

server.port=8080
spring.application.name=mcp-demo
spring.ai.mcp.server.enabled=true

server.port 指定应用程序运行端口;spring.application.name 设置应用程序名称;spring.ai.mcp.server.enabled 启用 MCP 服务器。

4.2 MCP 服务器配置

application.properties 文件中包含 MCP 服务器详细配置:

# MCP服务器配置
spring.ai.mcp.server.enabled=true
spring.ai.mcp.server.resource-change-notification=true
spring.ai.mcp.server.prompt-change-notification=true
spring.ai.mcp.server.tool-change-notification=true
spring.ai.mcp.server.name=mcp-demo-service
spring.ai.mcp.server.version=1.0.0
spring.ai.mcp.server.type=SYNC
spring.ai.mcp.server.sse-message-endpoint=/mcp/messages

这些配置项控制 MCP 服务器的启用状态、资源/提示/工具变更通知、服务器名称、版本、类型以及 SSE 消息端点等。

4.3 MCP Tools 配置

通过 McpServerConfig 类配置 MCP Tools,示例代码如下:

@Configuration
public class McpServerConfig {
    @Bean
    public ToolCallbackProvider autoRegisterTools(ApplicationContext applicationContext) {
        // 获取所有带有@Component注解且类名以Facade结尾的bean
        String[] beanNames = applicationContext.getBeanNamesForAnnotation(Component.class);
        List facadeBeans = new ArrayList<>();
        for (String beanName : beanNames) {
            if (beanName.endsWith("Facade")) {
                facadeBeans.add(applicationContext.getBean(beanName));
            }
        }
        return MethodToolCallbackProvider.builder()
               .toolObjects(facadeBeans.toArray())
               .build();
    }
}

该配置类获取符合条件的 Facade bean 并注册为 MCP 工具,实现工具自动注册。

五、API 文档与业务服务开发

5.1 天气服务 API

天气服务提供以下 MCP 方法:

  • getWeather(String cityName):获取特定城市的天气信息。
  • getWeather1(String cityName):获取天气信息的另一种方法。

在测试客户端中,可使用以下代码调用:

var transport = new HttpClientSseClientTransport("http://localhost:8080");
var client = McpClient.sync(transport).build();

5.2 业务服务开发

创建服务类并添加 @MCPService 注解:

@MCPService
@Service
public class WeatherService {
    public String getWeather(String cityName) {
        // 实现业务逻辑
        return "Weather info for " + cityName;
    }
}

使用 @MCPMethod 注解标记需暴露的方法:

@MCPMethod(description = "获取天气信息")
public String getWeather(String cityName) {
    // 方法实现
}

通过这种方式,将业务逻辑封装在服务类中,并通过注解暴露为 MCP 方法,方便外部调用。

六、项目结构与代码组织

项目结构如下:

src/
├── main/
│ ├── java/
│ │ └── com/unionhole/mcpserver/
│ │ ├── config/
│ │ ├── service/
│ │ └── McpDemoApplication.java
│ └── resources/
│ └── application.properties
└── test/
└── java/
└── com/unionhole/mcpserver/
└── ClientSseTest.java

src/main/java 目录存放 Java 源代码,包括配置类、服务类和主应用程序类;src/main/resources 目录存放资源文件,如 application.propertiessrc/test/java 目录存放测试代码,如 ClientSseTest 类用于测试客户端功能。

七、项目贡献与注意事项

7.1 贡献指南

若想为项目贡献代码,可按以下步骤操作:

  1. Fork 项目仓库。
  2. 创建自己的功能分支(git checkout -b feature/amazing-feature)。
  3. 提交代码变更(git commit -m 'Add some amazing feature')。
  4. 将变更推送到分支(git push origin feature/amazing-feature)。
  5. 打开 Pull Request,等待项目维护者审核和合并。

7.2 注意事项

  • 确保正确配置 Spring AI 和 MCP 的版本,避免版本不兼容问题。
  • 所有 Facade 类都应使用 @Component 注解,以便自动注册为 MCP 工具。
  • 建议使用 @MCPMethod 注解为方法提供描述信息,提高代码可读性和可维护性。
  • 异常处理应在服务层统一进行,确保系统稳定性和可靠性。

八、常见问题解决

8.1 编译时出现 IllegalArgumentException

若编译过程中遇到 java: java.lang.IllegalArgumentException 错误,可按以下步骤解决:

  1. 打开 IntelliJ IDEA 的 Settings(Ctrl + Alt + S)。
  2. 导航到 Build, Execution, Deployment > Compiler。
  3. 在 “Build process VM options” 字段中添加:-Djps.track.ap.dependencies=false
  4. 点击 Apply 和 OK。
  5. 重新构建项目。

九、总结与展望

通过本文介绍,我们深入了解了如何使用 Spring Boot 和 MCP 构建强大的天气信息服务系统。从项目搭建、配置到业务服务开发,再到常见问题解决,为开发者提供了完整的技术实践指南。希望读者能基于此项目进一步探索拓展,开发出更多实用高效的应用程序。同时,随着技术发展,期待 Spring Boot 和 MCP 在更多领域发挥更大作用,为开发者带来更多便利和创新。

GitHub 地址:https://github.com/James-Zou/mcp-springboot-server


Comment