使用 Spring Boot 搭建 MCP Server 实现 Cherry Studio-MCP 调用
> 发布日期:2025年9月25日
> 作者:AI 助手
> 适用对象:Java 开发者、Spring Boot 工程师、AI 应用集成者
> 目标:使用 Spring Boot 3 与 Spring AI 快速搭建一个符合 Model Context Protocol (MCP) 规范的服务端,并通过 SSE (Server-Sent Events) 协议被 Cherry Studio 等 AI 客户端调用。
目录
- 1. 背景介绍
- 2. 什么是 Model Context Protocol (MCP)
- 3. 什么是 Cherry Studio
- 4. 环境准备
- 5. 创建 Spring Boot 项目
- 6. 添加 Spring AI MCP Server 依赖
- 7. 实现 MCP Server 工具
- 8. 注册 ToolCallbackProvider
- 9. 配置应用属性
- 10. 启动并测试服务
- 11. 在 Cherry Studio 中配置 MCP 客户端
- 12. 常见问题
- 13. 结语
1. 背景介绍
随着大语言模型(LLM)的发展,让 AI 能够安全、可靠地调用外部系统(如数据库、API、业务逻辑)成为关键需求。Model Context Protocol (MCP) 应运而生,它为 LLM 提供了一种标准化的方式与外部工具交互。
本文将指导你使用 Spring Boot 和 Spring AI 框架,搭建一个基于 SSE (Server-Sent Events) 传输的 MCP Server,使其能够被 Cherry Studio 等支持 MCP 的 AI 客户端发现和调用。
2. 什么是 Model Context Protocol (MCP)
Model Context Protocol (MCP) 是由 Anthropic 推出的开放协议,旨在标准化 LLM 与外部工具、数据源之间的交互。其核心思想是:
- 工具发现:AI 客户端可以查询 MCP Server 提供了哪些可用的工具(Tools)。
- 工具调用:AI 模型在推理过程中,如果需要执行特定操作(如查询数据库、调用 API),可以调用 MCP Server 上注册的工具。
- 安全隔离:MCP Server 作为代理,执行具体的业务逻辑,确保 LLM 不直接访问敏感系统。
MCP 通常通过 SSE (Server-Sent Events) 或 STDIO 进行通信。本文采用 SSE,因为它基于 HTTP,易于集成和调试。
3. 什么是 Cherry Studio
Cherry Studio 是一款支持 MCP 协议的 AI 应用开发平台。它允许开发者连接 MCP Server,并在对话流程中自动调用你提供的工具,从而构建功能强大的 AI 助手。
4. 环境准备
确保你的开发环境满足以下要求:
- JDK 17 或以上版本
- Maven 3.6+
- Spring Boot 3.4.3 或以上(推荐 3.4+)
- Spring AI 1.0.0-M8(里程碑版本,支持 MCP)
- IDE:IntelliJ IDEA 或 VS Code
- Cherry Studio(用于测试)
5. 创建 Spring Boot 项目
使用 Spring Initializr 创建项目:
- Project: Maven
- Language: Java
- Spring Boot: 3.4.3
- Group:
top.dreamcenter(参考博客) - Artifact:
mcp - Dependencies:
- Spring Web
- Spring Boot Starter Test (可选)
生成并下载项目,解压后导入 IDE。
6. 添加 Spring AI MCP Server 依赖
这是最关键的一步。在 pom.xml 文件的 <dependencies> 标签中,添加 Spring AI 的 MCP Server 启动器依赖。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
<version>1.0.0</version>
</dependency>
📌 注意:
- 版本
1.0.0-M8是博客中使用的里程碑版本,请确保使用兼容的 Spring Boot 版本。- 该依赖会自动引入
spring-ai-mcp-server-spring-boot-starter,并基于 Spring WebMVC 实现 SSE 服务。
7. 实现 MCP Server 工具
MCP Server 的核心是定义可被 AI 调用的“工具”。这些工具是普通的 Spring Service 类,使用 @Tool 注解标记。
7.1 创建工具服务类
创建 NumService.java:
package top.dreamcenter.mcp.service;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Service;
@Service
public class NumService {
/**
* 判断一个数是否为双数(偶数)
* @param num 待判断的数字
* @return 判断结果描述
*/
@Tool(description = "判断是否是双数")
public String judgeIfOddJava(@ToolParam(description = "待判断的数") Integer num) {
return num + (num % 2 == 0 ? "是双数" : "不是双数");
}
}
🔑 关键注解说明:
@Service: 将类声明为 Spring Bean。@Tool: 标记该方法为一个可被 MCP 调用的工具,description会提供给 LLM 理解工具用途。@ToolParam: 描述工具方法的参数,帮助 LLM 正确传参。
8. 注册 ToolCallbackProvider
为了让 MCP Server 知道有哪些工具可用,需要将工具类注册到 ToolCallbackProvider。
创建 ToolCallbackProviderRegister.java:
package top.dreamcenter.mcp.config;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.tool.method.MethodToolCallbackProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import top.dreamcenter.mcp.service.NumService;
@Configuration
public class ToolCallbackProviderRegister {
@Bean
public ToolCallbackProvider numTools(NumService numService) {
return MethodToolCallbackProvider.builder()
.toolObjects(numService) // 注册工具类实例
.build();
}
}
✅ 说明:
MethodToolCallbackProvider会自动扫描@Tool注解的方法,并将其暴露为 MCP 工具。
9. 配置应用属性
在 src/main/resources/application.properties 或 application.yml 中配置服务器端口。
application.yml:
spring:
application:
name: mcp-server
ai:
mcp:
server:
name: mcp-server # mcp-server名称
sse-endpoint: sse # 启动sse协议,并指定端点路径为/sse
enabled: true # 组件启用
server:
port: 23990
🔔 注意:博客中示例使用了
23990端口,请确保该端口未被占用。
10. 启动并测试服务
10.1 启动应用
运行主类 McpApplication.java,服务将启动在 http://localhost:23990。
10.2 验证 MCP 服务
MCP Server 会自动暴露一个 SSE 端点。你可以通过浏览器或 curl 访问以下 URL 查看服务是否正常:
curl http://localhost:23990/sse
你将看到一个持续的 SSE 连接,MCP Server 会在此通道上与客户端(如 Cherry Studio)进行通信,包括发送工具列表和接收调用请求。
10.3 测试 RESTful 接口(可选)
虽然 MCP 使用 SSE,但你也可以为同一个业务逻辑提供传统的 REST API。
创建 NumController.java:
package top.dreamcenter.mcp.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.dreamcenter.mcp.service.NumService;
@RestController
@RequestMapping("/api/num")
public class NumController {
@Autowired
private NumService numService;
@GetMapping("/judge/{num}")
public String judgeIfOddJava(@PathVariable Integer num) {
return numService.judgeIfOddJava(num);
}
}
测试:
curl http://localhost:8000/api/num/judge/4
# 返回: 4是双数
这体现了 MCP 工具接口与传统 RESTful API 共存的优势。
11. 在 Cherry Studio 中配置 MCP 客户端
- 打开 Cherry Studio,进入项目。
- 添加 MCP 客户端组件。
- 配置服务地址:
http://localhost:23990/sse。
- 选择支持 MCP 的 LLM(如 qwen-max)。
-
在对话中提问,例如:“判断数字 7 是不是双数。”
-
Cherry Studio 会通过 MCP 协议调用你的工具,并返回结果
⚠️ 内网穿透:如果 Cherry Studio 无法访问你的本地服务,请使用
ngrok、localtunnel等工具将localhost:8000映射到公网地址。
12. 常见问题
| 问题 | 解决方案 |
|---|---|
@Tool 方法未被识别 | 检查 ToolCallbackProvider 是否正确注册了 Service Bean |
| SSE 连接失败 | 检查端口是否正确,防火墙是否阻止,依赖版本是否匹配 |
| LLM 未调用工具 | 检查工具描述 (description) 是否清晰,LLM 是否支持 MCP |
| 依赖冲突 | 确保 Spring Boot 和 Spring AI 版本兼容,参考 Spring AI Reference |
13. 结语
通过本文,你已成功使用 Spring Boot 和 Spring AI 搭建了一个符合 Model Context Protocol (MCP) 规范的服务端。你定义的业务逻辑现在不仅可以作为传统的 REST API 被调用,更可以作为“工具”被大语言模型直接使用,极大地扩展了 AI 应用的能力边界。
这种架构让你的现有 CRUD 系统能够“秒变”为 AI 助手,是构建智能应用的强大模式。
文档版本:v2.0
最后更新:2025年9月25日
参考:Java springboot实现MCP Server SSE - CSDN博客