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博客

相关推荐
SimonKing2 小时前
跨域,总在发OPTIONS请求?这次终于搞懂CORS预检了
java·后端·程序员
这里有鱼汤2 小时前
如何用Python找到股票的支撑位和压力位?——均线簇
后端·python
考虑考虑2 小时前
dubbo3超时时间延长
java·后端·dubbo
刘立军2 小时前
本地大模型编程实战(36)使用知识图谱增强RAG(2)生成知识图谱
后端·架构
yk100103 小时前
Spring DefaultSingletonBeanRegistry
java·后端·spring
databook3 小时前
Manim实现涟漪扩散特效
后端·python·动效
间彧3 小时前
死锁(Deadlock)深入解析
后端
小信丶4 小时前
Spring Boot请求体缺失异常分析与解决方案
java·spring boot·后端
零千叶4 小时前
Spring / Spring Boot 常用注解
java·spring boot·后端