此仓库包含一个 Spring Boot 应用程序,该应用程序实现了提供课程信息的模型控制协议(MCP)服务器。该应用程序创建了一个轻量级服务器,可以通过 Spring AI MCP 框架暴露课程数据,使 AI 模型能够使用标准化工具与您的自定义数据服务进行交互。
服务器暴露了两个主要工具:
此实现是创建您自己的模型控制协议服务器或通过 Spring AI 将外部数据源与 AI 模型集成的良好起点。
该项目依赖于以下关键依赖项:
Spring AI MCP Server:提供创建兼容 MCP 的服务器的基础
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
</dependency>
Spring Boot Test:用于测试应用程序
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
在运行应用程序之前,请确保您已经:
查看项目结构以了解组件:
Course.java:表示课程数据的简单记录CourseService.java:带有 MCP 工具注解的服务CoursesApplication.java:带有工具注册的主要应用类application.properties:MCP 服务器的配置应用程序配置为使用 STDIO 传输作为非 Web 应用程序运行 MCP 通信:
spring.main.web-application-type=none
spring.ai.mcp.server.name=dan-vega-mcp
spring.ai.mcp.server.version=0.0.1
# 这些设置对于 STDIO 传输至关重要
spring.main.banner-mode=off
logging.pattern.console=
使用 Maven 运行应用程序非常简单:
mvn spring-boot:run
应用程序将以模型控制协议服务器的形式启动,可通过标准输入/输出访问。它不会打开任何网络端口或提供 Web 接口,如 spring.main.web-application-type=none 配置所示。
运行时,服务器会向 MCP 注册两个工具:
dv_get_courses:返回所有可用课程dv_get_course:根据标题返回特定课程应用程序使用简单的记录来表示课程数据:
public record Course(String title, String url) {
}
这种不可变的数据结构提供了一种干净的方式来表示具有标题和 URL 属性的课程信息。
CourseService 类展示了如何使用 @Tool 注解创建 MCP 工具:
@Service
public class CourseService {
private List<Course> courses = new ArrayList<>();
@Tool(name = "dv_get_courses", description = "从 Dan Vega 获取课程列表")
public List<Course> getCourses() {
return courses;
}
@Tool(name = "dv_get_course", description = "根据标题从 Dan Vega 获取单个课程")
public Course getCourse(String title) {
return courses.stream()
.filter(course -> course.title().equals(title))
.findFirst()
.orElse(null);
}
@PostConstruct
public void init() {
courses.addAll(List.of(
new Course("使用 Spring Boot 构建 Web 应用程序(FreeCodeCamp)",
"https://youtu.be/31KTdfRH6nY"),
new Course("Spring Boot 初学者教程 - 2023 快速入门使用 Spring Boot 3",
"https://youtu.be/UgX5lgv4uVM")
));
}
}
@Tool 注解将普通方法转换为具有以下特性的 MCP 兼容工具:
在主应用类中,工具被注册到 MCP 框架:
@SpringBootApplication
public class CoursesApplication {
public static void main(String[] args) {
SpringApplication.run(CoursesApplication.class, args);
}
@Bean
public List<ToolCallback> danTools(CourseService courseService) {
return List.of(ToolCallbacks.from(courseService));
}
}
ToolCallbacks.from() 方法扫描服务类中的 @Tool 注解并将其注册到 MCP 框架。
您可以按多种方式扩展此项目:
CourseService 中的 init() 方法以包含额外的课程。@Tool 注解的方法以暴露附加功能。例如添加搜索功能:
@Tool(name = "dv_search_courses", description = "搜索包含关键字的课程")
public List<Course> searchCourses(String keyword) {
return courses.stream()
.filter(course -> course.title().toLowerCase().contains(keyword.toLowerCase()))
.collect(Collectors.toList());
}
要利用此 MCP 服务器与 AI 模型:
这允许 AI 模型访问实时课程信息,并在响应用户查询时提供这些信息。
要使用此 MCP 服务器与 Claude Desktop 客户端,需要添加配置以告诉 Claude 在何处找到服务器。在您的 Claude Desktop 设置中添加以下配置:
{
"dan-vega-mcp": {
"command": "/Users/vega/.sdkman/candidates/java/current/bin/java",
"args": [
"-jar",
"/Users/vega/Downloads/courses/target/courses-0.0.1-SNAPSHOT.jar"
]
}
}
此配置:
确保调整路径以匹配您的特定环境:
此 Spring AI MCP Server 提供了一个干净且可扩展的框架,通过模型控制协议暴露课程数据。通过遵循 Spring AI 规范并利用工具注解系统,您可以创建强大的 AI 模型与数据服务之间的集成。
该项目演示了如何为 MCP 兼容性构建代码,同时保持良好的软件设计实践。有了这个基础,您可以构建更复杂的提供者,增强 AI 功能,使其能够访问定制的领域特定信息。
有关 Spring AI 和模型控制协议的更多信息,请参阅官方文档。