Spring Boot搭建MCP-SERVER,实现Cherry StudioMCP调用

使用 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 BootSpring 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.propertiesapplication.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 客户端

  1. 打开 Cherry Studio,进入项目。
  2. 添加 MCP 客户端组件。
  3. 配置服务地址:http://localhost:23990/sse
  1. 选择支持 MCP 的 LLM(如 qwen-max)。

  2. 在对话中提问,例如:"判断数字 7 是不是双数。"

  3. Cherry Studio 会通过 MCP 协议调用你的 judgeIfOddJava 工具,并返回结果。

⚠️ 内网穿透 :如果 Cherry Studio 无法访问你的本地服务,请使用 ngroklocaltunnel 等工具将 localhost:8000 映射到公网地址。


12. 常见问题

问题 解决方案
@Tool 方法未被识别 检查 ToolCallbackProvider 是否正确注册了 Service Bean
SSE 连接失败 检查端口是否正确,防火墙是否阻止,依赖版本是否匹配
LLM 未调用工具 检查工具描述 (description) 是否清晰,LLM 是否支持 MCP
依赖冲突 确保 Spring Boot 和 Spring AI 版本兼容,参考 Spring AI Reference

13. 结语

通过本文,你已成功使用 Spring BootSpring AI 搭建了一个符合 Model Context Protocol (MCP) 规范的服务端。你定义的业务逻辑现在不仅可以作为传统的 REST API 被调用,更可以作为"工具"被大语言模型直接使用,极大地扩展了 AI 应用的能力边界。

这种架构让你的现有 CRUD 系统能够"秒变"为 AI 助手,是构建智能应用的强大模式。


文档版本 :v2.0
最后更新 :2025年9月25日
参考Java springboot实现MCP Server SSE - CSDN博客

相关推荐
渣哥26 分钟前
从 READ_UNCOMMITTED 到 SERIALIZABLE:Spring 事务隔离级别全解析
javascript·后端·面试
Codelinghu41 分钟前
【bug】大模型微调bug:OSError: Failed to load tokenizer.| Lora
后端
Frank_zhou43 分钟前
虚拟线程池
后端
aiopencode44 分钟前
iOS混淆与IPA加固实战手记,如何构建苹果应用防反编译体系
后端
cxyxiaokui0011 小时前
JDK 动态代理 vs CGLIB:原理、区别与 Spring AOP 底层揭秘
java·后端·spring
中等生1 小时前
深入理解 MCP 的三种传输方式
aigc·mcp
00后程序员张1 小时前
Swoole HTTPS 实战,在生产环境部署、性能权衡与排查流程
后端·ios·小程序·https·uni-app·iphone·swoole
我命由我123451 小时前
PDFBox - PDDocument 与 byte 数组、PDF 加密
java·服务器·前端·后端·学习·java-ee·pdf
考虑考虑1 小时前
go格式化时间
后端·go
星球奋斗者2 小时前
计算机方向如何才能更好的找到工作?(成长心得)
java·后端·考研·软件工程·改行学it