平安好医生走一走计步器
153.52MB · 2025-09-26
> 发布日期:2025年9月25日
> 作者:AI 助手
> 适用对象:Java 开发者、Spring Boot 工程师、AI 应用集成者
> 目标:使用 Spring Boot 3 与 Spring AI 快速搭建一个符合 Model Context Protocol (MCP) 规范的服务端,并通过 SSE (Server-Sent Events) 协议被 Cherry Studio 等 AI 客户端调用。
随着大语言模型(LLM)的发展,让 AI 能够安全、可靠地调用外部系统(如数据库、API、业务逻辑)成为关键需求。Model Context Protocol (MCP) 应运而生,它为 LLM 提供了一种标准化的方式与外部工具交互。
本文将指导你使用 Spring Boot 和 Spring AI 框架,搭建一个基于 SSE (Server-Sent Events) 传输的 MCP Server,使其能够被 Cherry Studio 等支持 MCP 的 AI 客户端发现和调用。
Model Context Protocol (MCP) 是由 Anthropic 推出的开放协议,旨在标准化 LLM 与外部工具、数据源之间的交互。其核心思想是:
MCP 通常通过 SSE (Server-Sent Events) 或 STDIO 进行通信。本文采用 SSE,因为它基于 HTTP,易于集成和调试。
Cherry Studio 是一款支持 MCP 协议的 AI 应用开发平台。它允许开发者连接 MCP Server,并在对话流程中自动调用你提供的工具,从而构建功能强大的 AI 助手。
确保你的开发环境满足以下要求:
使用 Spring Initializr 创建项目:
top.dreamcenter
(参考博客)mcp
生成并下载项目,解压后导入 IDE。
这是最关键的一步。在 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>
MCP Server 的核心是定义可被 AI 调用的“工具”。这些工具是普通的 Spring Service 类,使用 @Tool
注解标记。
创建 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 ? "是双数" : "不是双数");
}
}
为了让 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();
}
}
在 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
运行主类 McpApplication.java
,服务将启动在 http://localhost:23990
。
MCP Server 会自动暴露一个 SSE 端点。你可以通过浏览器或 curl
访问以下 URL 查看服务是否正常:
curl http://localhost:23990/sse
你将看到一个持续的 SSE 连接,MCP Server 会在此通道上与客户端(如 Cherry Studio)进行通信,包括发送工具列表和接收调用请求。
虽然 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 共存的优势。
http://localhost:23990/sse
。选择支持 MCP 的 LLM(如 qwen-max)。
在对话中提问,例如:“判断数字 7 是不是双数。”
Cherry Studio 会通过 MCP 协议调用你的 judgeIfOddJava
工具,并返回结果。
问题 | 解决方案 |
---|---|
@Tool 方法未被识别 | 检查 ToolCallbackProvider 是否正确注册了 Service Bean |
SSE 连接失败 | 检查端口是否正确,防火墙是否阻止,依赖版本是否匹配 |
LLM 未调用工具 | 检查工具描述 (description ) 是否清晰,LLM 是否支持 MCP |
依赖冲突 | 确保 Spring Boot 和 Spring AI 版本兼容,参考 Spring AI Reference |
通过本文,你已成功使用 Spring Boot 和 Spring AI 搭建了一个符合 Model Context Protocol (MCP) 规范的服务端。你定义的业务逻辑现在不仅可以作为传统的 REST API 被调用,更可以作为“工具”被大语言模型直接使用,极大地扩展了 AI 应用的能力边界。
这种架构让你的现有 CRUD 系统能够“秒变”为 AI 助手,是构建智能应用的强大模式。
文档版本:v2.0
最后更新:2025年9月25日
参考:Java springboot实现MCP Server SSE - CSDN博客