在当今数字化时代,高效、灵活且功能强大的服务端开发至关重要。Spring Boot 作为一款流行的 Java 开发框架,以其快速开发、自动配置等特性深受开发者喜爱。而 Model Context Protocol(MCP)则为构建特定领域的服务提供了便利的协议支持。本文将深入探讨如何使用 Spring Boot 构建基于 MCP 的天气信息服务系统,为读者呈现一个完整的技术实践案例。
随着人们对实时天气信息需求的不断增长,开发一个稳定、高效且易于扩展的天气信息服务系统具有重要意义。本项目旨在利用 Spring Boot 和 MCP,打造一个能够通过 MCP 接口提供准确天气信息服务的服务器。
确保开发环境中安装了 JDK 17 或更高版本、Maven 3.6.x 或更高版本。同时,建议使用最新版本的 Spring Boot 3.2.0 或更高版本,以获取最佳的性能和功能支持。
首先,通过以下命令克隆项目仓库:
git clone https://github.com/yourusername/mcp-springboot-server.git
cd mcp-springboot-server
使用 Maven 构建项目,执行以下命令:
mvn clean install
该命令会清理项目中的旧文件,并将项目依赖下载到本地仓库,然后进行编译和打包。
构建完成后,使用以下命令启动应用程序:
mvn spring-boot:run
应用程序默认会在端口 8080 启动。如果需要修改端口,可以在application.properties文件中进行配置。
项目的主要配置属性位于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 服务器。
在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 消息端点等。
通过McpServerConfig类来配置 MCP Tools,示例代码如下:
@Configuration
public class McpServerConfig {
@Bean
public ToolCallbackProvider autoRegisterTools(ApplicationContext applicationContext) {
// 获取所有带有@Component注解且类名以Facade结尾的bean
String[] beanNames = applicationContext.getBeanNamesForAnnotation(Component.class);
List
for (String beanName : beanNames) {
if (beanName.endsWith("Facade")) {
facadeBeans.add(applicationContext.getBean(beanName));
}
}
return MethodToolCallbackProvider.builder()
.toolObjects(facadeBeans.toArray())
.build();
}
}
该配置类通过获取所有符合条件的 Facade bean,并将其注册为 MCP 工具,实现了工具的自动注册。
天气服务提供了以下 MCP 方法:
在测试客户端中,可以使用以下代码进行调用:
var transport = new HttpClientSseClientTransport("http://localhost:8080");
var client = McpClient.sync(transport).build();
@MCPService
@Service
public class WeatherService {
public String getWeather(String cityName) {
// 实现业务逻辑
return "Weather info for " + cityName;
}
}
@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.properties;src/test/java目录存放测试代码,如ClientSseTest类用于测试客户端功能。
如果想为项目贡献代码,可以按照以下步骤进行:
如果在编译过程中遇到java: java.lang.IllegalArgumentException错误,可以按照以下步骤解决:
-Djps.track.ap.dependencies=false
通过本文的介绍,我们深入了解了如何使用 Spring Boot 和 MCP 构建一个功能强大的天气信息服务系统。从项目的搭建、配置到业务服务的开发,再到常见问题的解决,为开发者提供了一个完整的技术实践指南。希望读者能够基于此项目,进一步探索和拓展,开发出更多实用、高效的应用程序。同时,随着技术的不断发展,我们也期待 Spring Boot 和 MCP 能够在更多领域发挥更大的作用,为开发者带来更多便利和创新。
github地址:https://github.com/James-Zou/mcp-springboot-server