云计算百科
云计算领域专业知识百科平台

在 Java 中创建你的第一个Model Context Protocol (MCP) 服务器

你是否希望通过连接你自己的数据和服务,来扩展类似 Deepseek 这样的 AI 模型的能力?Model Context Protocol(MCP)提供了一种标准化方式来实现这一目标,而 Spring AI 则让实现你自己的 MCP 服务器变得很简单。在本教程中,我将带你从零开始,使用 Spring Boot 和 Spring AI 创建你的第一个 MCP 服务器。

什么是 Model Context Protocol(MCP)?

Model Context Protocol(MCP)是一种开放标准,用于定义 AI 模型如何与外部工具和数据源进行通信。它通过一个标准化接口,使得 AI 模型可以与自定义服务进行交互,从而实现以下功能:

  • 访问私有或专有数据
  • 执行特定的计算任务
  • 执行自定义的业务逻辑
  • 与外部系统交互

你可以将 MCP 理解为连接 AI 模型与更广泛生态系统之间的一座桥梁,它使得模型能够突破训练数据的限制,与实时信息进行互动。

为什么使用 Spring AI 构建 MCP 服务器?

如果你是一名熟悉 Spring 生态系统的 Java 开发者,使用 Spring AI 构建 MCP 服务器将带来以下下列优势:

  • 简化开发:Spring AI 对 MCP 规范中的复杂部分进行了封装,大大降低了实现难度
  • 熟悉的开发模型:可以使用标准的 Spring 功能,如依赖注入和组件扫描
  • 与 Spring Boot 无缝集成:充分利用 Spring Boot 生态系统的强大能力
  • 多种通信方式支持:支持 STDIO、HTTP、WebSocket 和 RSocket 等多种传输协议

项目概览

在本教程中,我们将构建一个简单的 MCP 服务器,用于提供有关Course的信息。我们的服务器将暴露两个工具:

  • 一个用于检索所有可用Course的工具
  • 一个用于根据Course标题查找特定课程的工具

这个简单的示例将展示 MCP 服务器开发的核心概念,并为你今后根据自身需求扩展功能打下基础。

前置条件

在开始之前,请确保你已经具备以下环境和知识:

  • Java 开发工具包(JDK)17 或更高版本
  • Maven 或 Gradle 用于依赖包管理
  • 对 Spring Boot 有基本的了解
  • 一个用于测试的 MCP 客户端(本教程将使用 Claude Desktop)

项目搭建

我们首先创建一个新的Spring Boot项目。最简单的方法是使用Spring Initializr。

按照以下配置设置你的项目:

  • 项目类型:Maven
  • 语言:Java
  • Spring Boot 版本:最新版本
  • 依赖项:添加 Spring AI MCP Server 依赖

这样就完成了项目的基础设置,接下来我们将开始编写MCP服务器的代码。

一旦你生成并下载了项目,就可以在 IDE 中打开它了。


理解项目结构

接下来我们来了解一下需要创建的关键组件:

  • Course.java:一个用于表示课程数据的简单 record 类
  • CourseService.java:一个服务类,通过 MCP 工具暴露课程数据
  • CoursesApplication.java:主应用类,用于注册 MCP 工具
  • application.properties:MCP 服务器的配置文件

这些组件将构成一个完整的 MCP 服务器示例,帮助我们演示其基本原理与用法。

第一步:创建数据模型

首先,我们来创建表示课程数据的 Course 类。由于我们使用的是 Java 17 及以上版本,可以使用 record 来定义一个简洁且不可变的数据结构:

public record Course(String title, String url) {
}

这条简单的记录将存储每门课程的标题和 URL。

步骤二:实现服务层

接下来,我们创建 CourseService 类。在这里,我们将使用 @Tool 注解来定义我们的 MCP 工具。

@Service
public class CourseService {
private static final Logger log = LoggerFactory.getLogger(CourseService.class);
private List<Course> courses = new ArrayList<>();
@Tool(name = "dv_get_courses", description = "Get a list of courses from Dan Vega")
public List<Course> getCourses() {
return courses;
}
@Tool(name = "dv_get_course", description = "Get a single course from Dan Vega by title")
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("Building Web Applications with Spring Boot (FreeCodeCamp)",
"https://youtu.be/31KTdfRH6nY"),
new Course("Spring Boot Tutorial for Beginners – 2023 Crash Course using Spring Boot 3",
"https://youtu.be/UgX5lgv4uVM")
));
}
}

这个服务类的关键点包括:

  • @Tool 注解:将普通方法转换为与 MCP 兼容的工具
  • 工具属性:每个工具都有唯一的名称和描述性文本,帮助 AI 模型理解其用途
  • 方法参数:参数变成工具的输入参数,可以由 AI 模型传递
  • 返回类型:返回的数据会自动序列化为 AI 模型能够理解的格式

在这个示例中,我们使用了一个内存中的列表来存储课程,数据在 @PostConstruct 方法中初始化。在实际应用中,你可能会连接数据库或调用外部 API。

步骤三:在 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 框架中。这正是 Spring 组件扫描功能的优势 —— 只需几行代码,我们就完成了工具的注册。

步骤四:配置 MCP 服务器

最后,让我们通过 application.properties 文件来配置 MCP 服务器:

spring.main.web-application-type=none
spring.ai.mcp.server.name=dan-vega-mcp
spring.ai.mcp.server.version=0.0.1
# NOTE: You must disable the banner and the console logging
# to allow the STDIO transport to work !!!
spring.main.banner-mode=off
logging.pattern.console=

这段配置实现了几个重要功能:

  • 禁用 Web 应用:由于我们使用的是 MCP 的 STDIO 传输方式,因此不需要启动 Web 服务器
  • 设置服务器名称和版本:用于向客户端标识我们的 MCP 服务器
  • 禁用横幅和控制台日志:确保 STDIO 传输能够正常工作

STDIO 传输机制使我们的 MCP 服务器能够通过标准输入输出流进行通信,这正是 Claude Desktop 在本地 MCP 服务器中使用的方式。

未完待续,下一节我们来运行和测试这个MCP。

我是一名有十年以上经验的Java老码农,曾经沉迷于代码的世界,也曾在传统业务系统中摸爬滚打。但时代在变,AI 正在重塑技术格局。我不想被浪潮甩在身后,所以选择重新出发,走上 AI 学习与转型的旅程。

这个公众号,记录的不是鸡汤,也不是“割韭菜”的教程,而是我一个程序员真实的思考、学习、实战经验,以及从困惑到突破的全过程。

如果你也是在技术瓶颈中思考转型、想了解 AI 如何与传统开发结合、又或仅仅想看一个普通工程师的进化之路,欢迎关注,一起探索,一起成长。

关注我 和我一起,紧跟着AI的步伐,不被时代抛弃。✨

赞(0)
未经允许不得转载:网硕互联帮助中心 » 在 Java 中创建你的第一个Model Context Protocol (MCP) 服务器
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!