王炸!SpringBoot+MCP 让你的系统秒变AI小助手

感觉本篇对你有帮助可以关注一下我的微信公众号(深入浅出谈java),会不定期更新知识和面试资料、技巧!!!

一、MCP 是什么?

MCP(Model Context Protocol) 官网:Introduction - Model Context Protocol

解释:Model Context Protocol(MCP)是由 Anthropic 推出的开放协议,旨在标准化大型语言模型(LLM)与外部数据源、工具的交互方式。它类似于“AI 领域的 USB-C 接口”,通过统一的通信规范(如 JSON-RPC 2.0)实现跨模型、跨工具的兼容性。

白话解释:MCP就像 AI 和工具之间的“翻译官”,它制定了一套标准对话规则,让不同 AI 模型(比如 ChatGPT、Claude)都能用同样的方式和你的系统“聊天”。比如以前每个 AI 都要学不同的方言才能操作你的数据库,现在它们只要会说 MCP 这个“普通话”就行!

举个栗子:。

你做了一个文件管理系统,用 MCP 改造后,不管是 ChatGPT 还是 Claude,都能用同一套指令帮你查文件、删文件,不用为每个 AI 单独开发接口。

二、MCP 的核心原理(一张图看懂)


解释:MCP 采用客户端-服务器(C/S)架构,包含以下组件:

  1. MCP Host:集成 AI 模型的应用(如 IDE、聊天界面),负责发起请求。

  2. MCP Client:协议客户端,管理 Host 与 Server 的通信(如发送请求、解析响应)。

  3. MCP Server:轻量级程序,提供特定功能(如文件读写、数据库查询)。

  4. 数据源/工具:本地文件、数据库、第三方 API 等

核心三兄弟

  1. MCP Client(传话筒):负责把 AI 的请求转发给工具,类似快递小哥。
  2. MCP Server(工具管家):管理你提供的工具(比如查数据库、读文件)。
  3. 工具:你现有的功能(比如 SpringBoot 里的订单查询接口)。

白话解释:

想象 MCP 是个“中间人”,负责协调 AI 和你的系统工具(可以理解为接口之类)之间的对话:

用户问AI:“帮我查昨天的订单”

AI 把问题翻译成 MCP 格式:“调用订单查询工具,时间=昨天”

MCP 中间人找到对应的工具执行

工具返回数据,MCP 翻译成自然语言给用户 --------------------------------------------------------------- 用户说话


AI 翻译成 MCP 格式


SpringBoot 收到请求


执行对应的Service方法(比如查订单)


返回结果给AI → AI 翻译成人话给用户

三、MCP 能干啥?


  1. 让AI操作你的系统

    • 比如用户对AI说:“把订单123退货”,AI自动调用你的退款接口。
  2. 无缝切换AI模型
    • 今天用 ChatGPT,明天换 Claude,系统接口不用改!
  3. 动态扩展功能
    • 新增一个工具(比如短信发送),所有支持的 AI 都能立刻用上。

实际场景

  • 客服机器人自动查订单、退换货
  • AI 助手自动写周报(读取你的会议记录和邮件)
  • 智能 IDE 自动调接口生成代码

四、传统方式与MCP 服务 对比图:

传统接口开发流程:
用户请求→ 前端 → 路由分发 → 控制器 → 服务层 → 数据库操作 → 返回DTO-》前端 MCP服务开发流程:
用户自然语言 → MCP协议转换 → 工具路由 → 领域服务 → 数据库操作 → 自然语言生成

流程步骤说明:

  1. 用户请求阶段

    • 用户向MCP Client发送自然语言指令:"帮我查昨天的订单"
    • MCP Client作用:用户交互终端,负责自然语言处理
  2. 指令翻译阶段

    • AI将指令转换为MCP标准格式:

      {
      "action": "order_query",
      "params": {"time": "yesterday"}
      }
    • 协议转换发生在MCP Client内部

  3. 请求路由阶段

    • MCP Client通过HTTPS将结构化数据发送至MCP Server
    • MCP Server作用:中央调度器,验证请求并匹配服务端点
  4. 服务执行阶段

    • MCP Server识别需调用"订单查询工具",通过RPC调用MCP Host
    • ⚙️ MCP Host作用:微服务执行环境,承载具体业务逻辑实现
  5. 数据处理阶段

    • 订单工具在MCP Host执行SQL查询:

      SELECT * FROM orders
      WHERE order_date = CURRENT_DATE - 1;
    • 查询结果经数据清洗后返回JSON格式

  6. 响应返回阶段

    • MCP Server接收Host返回的原始数据
    • MCP Client将结构化数据转换为自然语言:

      "您昨天共有5笔订单,总金额2380元,最新订单是XX商品..."

五、改造 SpringBoot 项目的步骤(保姆级教程)

核心步骤:

  • 添加MCP 的依赖包
  • 修改配置文件
  • 改造现有接口
  • 注册到MCP服务器

1、添加依赖


由于目前这些依赖还是预览版本,所以在Maven中央仓库中是找不到的,需要我们额外引入仓库地址。

  <!-- Spring AI 核心依赖 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-core</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency> <!-- Anthropic 模型支持 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-anthropic-spring-boot-starter</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency> <!-- MCP 服务器支持 - WebMVC版本 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>

其他仓库配置信息

<repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>spring-snapshots</id>
        <name>Spring Snapshots</name>
        <url>https://repo.spring.io/snapshot</url>
        <releases>
            <enabled>false</enabled>
        </releases>
    </repository>
    <repository>
        <name>Central Portal Snapshots</name>
        <id>central-portal-snapshots</id>
        <url>https://central.sonatype.com/repository/maven-snapshots/</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

2、项目配置


我们的目的是将一个Spring服务改造成MCP服务,所以这里不需要进行客户端的配置,同理,在引入依赖的时候也不用引入客户端的依赖。

Anthropic 旗下强大的 Claude 大语言模型 key 需要在官网申请 官网地址:https://console.anthropic.com

# Spring AI api-key
spring.ai.anthropic.api-key=这里换成你的api-key # MCP服务端开启
spring.ai.mcp.server.enabled=true # MCP服务端配置
spring.ai.mcp.server.name=book-management-server
spring.ai.mcp.server.version=1.0.0
spring.ai.mcp.server.type=SYNC
spring.ai.mcp.server.sse-message-endpoint=/mcp/message

3、改造原服务方法


改造方法有两种:

  1. 工具配置
  2. 函数Bean

方法一:工具配置

工具配置方式在需要改造的实现类对需要改造的方法加上@Tool@ToolParam注解分别标记方法和参数

@Service
@RequiredArgsConstructor
publicclass BookServiceImpl  implements BookService { @Resource
private BookRepository bookRepository; @Override
@Tool(name = "findBooksByTitle", description = "根据书名模糊查询图书,支持部分标题匹配")
public List<Book> findBooksByTitle(@ToolParam(description = "书名关键词") String title) {
    return bookRepository.findByTitleContaining(title);
  } @Override
@Tool(name = "findBooksByAuthor", description = "根据作者精确查询图书")
public List<Book> findBooksByAuthor(@ToolParam(description = "作者姓名") String author) {
    return bookRepository.findByAuthor(author);
  } @Override
@Tool(name = "findBooksByCategory", description = "根据图书分类精确查询图书")
public List<Book> findBooksByCategory(@ToolParam(description = "图书分类")String category) {
    return bookRepository.findByCategory(category);
  }
}

接着将这个 BookServiceImpl 实现类注册到MCP服务器配置上即可。

/**
 * MCP服务器配置类,负责注册MCP工具
 */
@Configuration
publicclass McpServerConfig { /**
   * 注册工具回调提供者,将BookQueryService中的@Tool方法暴露为MCP工具
   *
   * @param bookService 图书服务
   * @return 工具回调提供者
   */
@Bean
public ToolCallbackProvider bookToolCallbackProvider(BookService bookService) {
    return MethodToolCallbackProvider.builder()
            .toolObjects(bookService)
            .build();
  } }

聊天客户端配置引入注册工具

/**
 * 聊天客户端配置类
 */
@Configuration
publicclass ChatClientConfig { @Autowired
private ToolCallbackProvider toolCallbackProvider; /**
   * 配置ChatClient,注册系统指令和工具函数
   */
@Bean
public ChatClient chatClient(ChatClient.Builder builder) {
    return builder
            .defaultSystem("你是一个图书管理助手,可以帮助用户查询图书信息。" +
                    "你可以根据书名模糊查询、根据作者查询和根据分类查询图书。" +
                    "回复时,请使用简洁友好的语言,并将图书信息整理为易读的格式。")
            // 注册工具方法
            .defaultTools(toolCallbackProvider)
            .build();
  }
}

方法二:函数Bean


单独声明一个类将查询方法作为函数Bean导出

/**
 * 图书查询服务,将查询方法作为函数Bean导出
 */
@Service
publicclass BookQueryService { @Resource
private BookService bookService; /**
   * 根据书名查询图书的函数Bean
   */
@Bean
public Function<String, List<Book>> findBooksByTitle() {
    return title -> bookService.findBooksByTitle(title);
  } /**
   * 根据作者查询图书的函数Bean
   */
@Bean
public Function<String, List<Book>> findBooksByAuthor() {
    return author -> bookService.findBooksByAuthor(author);
  } /**
   * 根据分类查询图书的函数Bean
   */
@Bean
public Function<String, List<Book>> findBooksByCategory() {
    return category -> bookService.findBooksByCategory(category);
  } }

这种方式在定义AI聊天客户端的时候需要显式地声明。

/**
 * 聊天客户端配置类
 */
@Configuration
publicclass ChatClientConfig { /**
   * 配置ChatClient,注册系统指令和工具函数
   */
@Bean
public ChatClient chatClient(ChatClient.Builder builder) {
    return builder
            .defaultSystem("你是一个图书管理助手,可以帮助用户查询图书信息。" +
                    "你可以根据书名模糊查询、根据作者查询和根据分类查询图书。" +
                    "回复时,请使用简洁友好的语言,并将图书信息整理为易读的格式。")
            // 注册工具方法,这里使用方法名称来引用Spring上下文中的函数Bean
            .defaultTools(
                    "findBooksByTitle",
                    "findBooksByAuthor",
                    "findBooksByCategory"
            )
            .build();
  }
}

4、接口测试


服务开发后,声明一个控制器对外暴露进行调用。

@Resource
private ChatClient chatClient; /**
   * 处理聊天请求,使用AI和MCP工具进行响应
   *
   * @param request 聊天请求
   * @return 包含AI回复的响应
   */
@PostMapping
public ResponseEntity<ChatResponse> chat(@RequestBody ChatRequest request) {
    try {
      // 创建用户消息
      String userMessage = request.getMessage();       // 使用流式API调用聊天
      String content = chatClient.prompt()
              .user(userMessage)
              .call()
              .content();       return ResponseEntity.ok(new ChatResponse(content));
    } catch (Exception e) {
      e.printStackTrace();
      return ResponseEntity.ok(new ChatResponse("处理请求时出错: " + e.getMessage()));
    }
  } }

5、测试


通过测试工具进行接口请求

注意事项

  1. 权限控制:别让AI随便删数据!可以用 Spring Security 限制敏感操作。
  2. 错误处理:AI 不懂“系统异常”,记得把错误信息转成人话(比如“系统忙,稍后再试”)。
  3. 提示词优化:在 @Tool 的 description 里写清楚功能,AI 才知道什么时候该调用它。

总结

改造 MCP 就像给你的 SpringBoot 项目装了个“AI万能插座”:

  • 省时:一次开发,所有 AI 都能用
  • 灵活:加新功能只需暴露接口,不用改 AI 端
  • 智能:让用户用自然语言操作你的系统

赶紧试试,让你的项目秒变 AI 神器吧!

最后文章有啥不对,欢迎大佬在评论区指点!!!

如果感觉对你有帮助就点赞推荐或者关注一下吧!!!

王炸!SpringBoot+MCP 让你的系统秒变AI小助手的更多相关文章

  1. 基于nginx+xxl-job+springboot高可用分布式任务调度系统

    技术.原理讲解: <分布式任务调度平台XXL-JOB--源码解析一:项目介绍> <分布式任务调度平台XXL-JOB--源码解析二:基于docker搭建admin调度中心和execut ...

  2. Jeewx-Boot 1.1 版本发布,基于SpringBoot的开源微信管家系统

    项目介绍 JeewxBoot是一款基于SpringBoot的开源微信管家系统,采用SpringBoot2.1.3 + Mybatis + Velocity 框架技术.支持微信公众号.微信第三方平台(扫 ...

  3. 黄聪:win7 64位系统PS、AI、PSD缩略图预览补丁

    MysticThumbs支持Windows 7 / Vista / XP,32位和64位.除了预览PSD以外,还支持DDS.SGI缩略图显示. Mystic Thumbs是一款用来支持win7 64位 ...

  4. 物联网 软硬件系统 树莓派 单片机 esp32 小程序 网页 开发 欢迎相互交流学习~

    物联网软硬件开发 知识分享 多年学生项目开发经验 物联网 软硬件系统 树莓派 单片机 esp32 小程序 网页 开发 欢迎相互交流学习~ http://39.105.218.125:9000/

  5. SpringBoot实现电子文件签字+合同系统

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

  6. SpringBoot+MongoDB实现物流订单系统

    码字不易,点赞收藏,养成习惯!原创作者公众号:bigsai.更多精彩期待与您分享!项目收录在github的MongoDB案例中,文章收录在回车课堂中如果没基础请看看前两篇(墙裂推荐)MongoDB从立 ...

  7. SpringBoot + SpringSecurity + Quartz + Layui实现系统权限控制和定时任务

    1. 简介   Spring Security是一个功能强大且易于扩展的安全框架,主要用于为Java程序提供用户认证(Authentication)和用户授权(Authorization)功能.    ...

  8. springboot项目配置logback日志系统

    记录springboot项目配置logback日志文件管理: logback依赖jar包 SpringBoot项目配置logback理论上需要添加logback-classic依赖jar包: < ...

  9. springboot+ELK+logback日志分析系统demo

    之前写的有点乱,这篇整理了一下搭建了一个简单的ELK日志系统 借鉴此博客完成:https://blog.csdn.net/qq_22211217/article/details/80764568 设置 ...

  10. 使用winsw将springboot打包的jar注册系统本地服务

    1.下载winsw 下载地址:https://github.com/kohsuke/winsw/releases 我这里下载的是2.3.0版. 下载sample-minimal.xml和WinSW.N ...

随机推荐

  1. N-gram基本原理

    N-gram模型是一种语言模型(Language Model,LM),语言模型是一个基于概率的判别模型,它的输入是一句话(单词的顺序序列),输出是这句话的概率,即这些单词的联合概率(joint pro ...

  2. TV盒子常用的影视APP和直播软件分享合集

    最近自己也在倒腾机顶盒,少不了直播.影视APP,当然只会收集无广告和无会员的版本,文章介绍部分APP,链接里面我会放目前收集的合集,一直会更新. 本文资源下载: 2025.2.18号更新: 包含直播. ...

  3. Flink - [04] 窗口(Windows)

    题记部分 一.Flink中的窗口是什么 (1)一般真实的流都是无界的,怎样处理无界的数据? (2)可以把无限的数据流进行切分,得到有限的数据集进行处理 -- 也就是得到有界流 (3)窗口(Window ...

  4. 使用 kubeadm 创建高可用 Kubernetes 及外部 etcd 集群

    博客链接:使用 kubeadm 创建高可用 Kubernetes 及外部 etcd 集群 前言 Kubernetes 的官方中文文档内容全面,表达清晰,有大量示例和解析 无论任何情况下都推荐先花几个小 ...

  5. 分享一个裁剪图片Chrome 扩展 —— Crop Image

    1. 前言 在日常工作和设计过程中,我们常常需要对图片进行裁剪,以适配不同的使用场景.无论是社交媒体头像.网站图片优化,还是艺术设计,精确的图片裁剪都是必不可少的.然而,许多在线工具使用复杂,或者功能 ...

  6. asp.net core配置项示例代码

    1.IConfigurationSource:表示一个配置源,其Build方法生成的IConfigurationProvider用于从当前配置源中读取key-value值(TryGey读取.Set设置 ...

  7. 强!10.8K star!推荐一款用于威胁预防、安全检测的开源监控平台,功能非常强大!!

    在当今数字化时代,网络安全威胁日益严峻,企业和组织对于高效.强大的安全解决方案的需求也愈发迫切. 今天给大家分享一个专注于安全监控的开源项目:Wazuh,正是应对这一挑战的有力武器,专门用于帮助个人和 ...

  8. 地球OL攻略 —— 某应届生求职总结

    某应届生的苦逼求职总结 1.自我介绍,阐述一下自己过去的情况 2.目前的就业情况以及从事的就业方向 3.你在面试的时候遇到什么困难?是怎么帮忙解决的 4.当初为什么会选择选择这一行? 5.分享一下学习 ...

  9. NumPy学习7

    今天学习了: 13, NumPy字符串处理函数 14, NumPy数学函数 15, NumPy算术运算 numpy_test7.py : import numpy as np ''' 13, NumP ...

  10. C# 从零开始使用Layui.Wpf库开发WPF客户端

    一.简介 最近需要开发一个桌面版的工具软件,之前用得更多的是Winform,作为一个全干工程师,我们也要兼顾下WPF,趁此机会再研究下开源控件库. MaQaQ:Winform真好用(有个HZHCont ...