使用 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. 背景介绍](#1. 背景介绍 "#1-%E8%83%8C%E6%99%AF%E4%BB%8B%E7%BB%8D")
- [2. 什么是 Model Context Protocol (MCP)](#2. 什么是 Model Context Protocol (MCP) "#2-%E4%BB%80%E4%B9%88%E6%98%AF-model-context-protocol-mcp")
- [3. 什么是 Cherry Studio](#3. 什么是 Cherry Studio "#3-%E4%BB%80%E4%B9%88%E6%98%AF-cherry-studio")
- [4. 环境准备](#4. 环境准备 "#4-%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87")
- [5. 创建 Spring Boot 项目](#5. 创建 Spring Boot 项目 "#5-%E5%88%9B%E5%BB%BA-spring-boot-%E9%A1%B9%E7%9B%AE")
- [6. 添加 Spring AI MCP Server 依赖](#6. 添加 Spring AI MCP Server 依赖 "#6-%E6%B7%BB%E5%8A%A0-spring-ai-mcp-server-%E4%BE%9D%E8%B5%96")
- [7. 实现 MCP Server 工具](#7. 实现 MCP Server 工具 "#7-%E5%AE%9E%E7%8E%B0-mcp-server-%E5%B7%A5%E5%85%B7")
- [8. 注册 ToolCallbackProvider](#8. 注册 ToolCallbackProvider "#8-%E6%B3%A8%E5%86%8C-toolcallbackprovider")
- [9. 配置应用属性](#9. 配置应用属性 "#9-%E9%85%8D%E7%BD%AE%E5%BA%94%E7%94%A8%E5%B1%9E%E6%80%A7")
- [10. 启动并测试服务](#10. 启动并测试服务 "#10-%E5%90%AF%E5%8A%A8%E5%B9%B6%E6%B5%8B%E8%AF%95%E6%9C%8D%E5%8A%A1")
- [11. 在 Cherry Studio 中配置 MCP 客户端](#11. 在 Cherry Studio 中配置 MCP 客户端 "#11-%E5%9C%A8-cherry-studio-%E4%B8%AD%E9%85%8D%E7%BD%AE-mcp-%E5%AE%A2%E6%88%B7%E7%AB%AF")
- [12. 常见问题](#12. 常见问题 "#12-%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98")
- [13. 结语](#13. 结语 "#13-%E7%BB%93%E8%AF%AD")
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 启动器依赖。
xml
<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
:
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
:
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
:
yaml
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 查看服务是否正常:
bash
curl http://localhost:23990/sse
你将看到一个持续的 SSE 连接,MCP Server 会在此通道上与客户端(如 Cherry Studio)进行通信,包括发送工具列表和接收调用请求。
10.3 测试 RESTful 接口(可选)
虽然 MCP 使用 SSE,但你也可以为同一个业务逻辑提供传统的 REST API。
创建 NumController.java
:
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);
}
}
测试:
bash
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 协议调用你的
judgeIfOddJava
工具,并返回结果。
⚠️ 内网穿透 :如果 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博客