Spring AI系列——开发MCP Server和MCP Client(SSE方式)

Spring AI系列——开发MCP Server和MCP Client(SSE方式)

文章目录


一、概述

MCP架构图

在这里插入图片描述

MCP生命周期

在这里插入图片描述

二、创建MCP SERVER的java工程

生成初始化工程代码

访问网址:https://start.spring.io/
填写基本信息→添加依赖项

在这里插入图片描述


选择Server

在这里插入图片描述


点击生成

在这里插入图片描述
在这里插入图片描述


解压后用IDEA打开

修改pom.xml文件

把spring-ai-starter-mcp-server依赖改为spring-ai-starter-mcp-server-webmvc

在这里插入图片描述


完整pom.xml内容

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.8</version><relativePath/><!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>test-mcp-server</artifactId><version>0.0.1-SNAPSHOT</version><name>test-mcp-server</name><description>Demo project for Spring Boot</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version><spring-ai.version>1.1.2</spring-ai.version></properties><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webmvc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

定义服务类MathTool

在这里插入图片描述
packagecom.example.tool;importorg.springframework.ai.tool.annotation.Tool;publicclassMathTool{@Tool(description ="两个数字相加")publicstaticintaddNumbers(int a,int b){return a + b;}@Tool(description ="两个数字相减")publicstaticintsubtractNumbers(int a,int b){return a - b;}}

通过配置类的方式把MathTool注入到Spring容器中

创建config包,在下面创建McpConfig类

在这里插入图片描述
packagecom.example.test_mcp_server.config;importcom.example.tool.MathTool;importorg.springframework.ai.tool.ToolCallbackProvider;importorg.springframework.ai.tool.method.MethodToolCallbackProvider;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;@ConfigurationpublicclassMcpConfig{@BeanpublicToolCallbackProvidermathTool(){returnMethodToolCallbackProvider.builder().toolObjects(newMathTool()).build();}}

修改配置文件application.yaml

配置内容为:

server:port:8080spring:application:name: math_mcp_server ai:mcp:server:enabled:truename: test_mcp_server version: 1.0.0 sse-endpoint: /api/v1/sse sse-message-endpoint: /api/v1/mcp capabilities:tool:truelogging:level:# 查看MCP详细日志io.modelcontextprotocol: TRACE org.springframework.ai.mcp: TRACE 

启动服务

在这里插入图片描述


启动成功,并提示注册了两个Tool

在这里插入图片描述

三、如何使用MCP Server

方式一:使用Chatbox连接MCP Server

设置AI模型提供方

在这里插入图片描述


我这里选择智谱的ChatGLM6B, API密钥去智谱官网申请,点击检查

在这里插入图片描述


在这里插入图片描述


点确认

在这里插入图片描述


在这里插入图片描述

配置MCP服务器

点击左侧的MCP

在这里插入图片描述


添加服务器

在这里插入图片描述


在这里插入图片描述


配置信息后点击测试

在这里插入图片描述


编写的两个工具成功显示

在这里插入图片描述


**PS:必须点测试,这样才能完成服务端的初始化连接**
服务端日志:

在这里插入图片描述

点击保存

在这里插入图片描述

使用MCP Server

按ECS键退出设置,点击新对话,可以看到刚才添加的MCP服务

在这里插入图片描述

输入“运维小兵的计算服务有哪些功能”
AI给的回复很好的总结了工具的功能

在这里插入图片描述

问:8加7等于几
工具成功调用

在这里插入图片描述


服务端日志内容

在这里插入图片描述


测试完毕,符合预期

方式二:开发一个Client来连接Server

创建java工程

跟创建MCP Server类似,改下Artifact名字

在这里插入图片描述


添加Client的依赖

在这里插入图片描述


在这里插入图片描述


保存工程文件,解压后用IDEA打开

修改pom.xml,添加核心依赖

<properties><java.version>17</java.version><spring-ai.version>1.1.2</spring-ai.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--调用智谱系列大模型的依赖--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-zhipuai</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-client-webflux</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

配置application.yaml

server:port:8081spring:application:name: test-mcp-client ai:zhipuai:# 智谱官网创建API Key,配置到机器的环境变量ZHIPU_KEYapi-key: ${ZHIPU_KEY}base-url:"https://open.bigmodel.cn/api/paas"# 配置模型地址chat:options:model: glm-4-flash mcp:client:sse:connections:server1:# 填写MCP Server的地址url: http://localhost:8080sse-endpoint: /api/v1/sse 

创建Controller

在这里插入图片描述

ConnectMcpServer.java

packagecom.example.test_mcp_client.controller;importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.ai.tool.ToolCallbackProvider;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/mcp")publicclassConnectMcpServer{privatefinalChatClient chatClient;publicConnectMcpServer(ChatClient.Builder builder,ToolCallbackProvider toolCallbackProvider){this.chatClient = builder .defaultToolCallbacks(toolCallbackProvider.getToolCallbacks()).build();}@GetMapping("/test")publicStringtest(@RequestParam(name ="query")String query){return chatClient.prompt().system("你是一个有用的AI助手").user(query).call().content();}}

启动Client服务

服务启动成功

在这里插入图片描述


SERVER端完成初始化

在这里插入图片描述

访问接口进行测试

GET http://localhost:8081/mcp/test?query=8加6等于几

在这里插入图片描述


查看SERVER日志


完美。

四、资料

Spring AI官网:https://docs.spring.io/spring-ai/reference/index.html
视频:https://www.bilibili.com/video/BV1yT8qzMEbd/?spm_id_from=333.337.search-card.all.click&vd_source=0467ab39cc5ec5940fee22a0e7797575

Read more

【数据结构与算法】汉诺塔问题(C++)

【数据结构与算法】汉诺塔问题(C++)

目录 一、汉诺塔问题基础定义 1. 问题描述 2. 核心规律 3. 问题分解思想(递归核心) 二、递归实现汉诺塔(简洁优雅,易理解) 1. 递归思路 2. 完整递归代码(带步骤打印 ) 三、非递归实现汉诺塔 非递归思路: 1. 非递归思路 2.代码实现: 四、写在最后 汉诺塔(Hanoi Tower)是经典的递归算法入门问题,源于古印度的数学传说,其核心是通过有限次移动,将一根柱子上的所有圆盘按 “小圆盘在上、大圆盘在下” 的规则移到另一根柱子,且移动过程中始终遵守 “一次仅移一个圆盘、大圆盘不能压小圆盘” 的规则。本文将从问题原理出发,详细讲解汉诺塔的递归实现(核心思路,简洁优雅)和非递归实现(基于栈模拟,深入理解递归本质),并提供完整可运行的

By Ne0inhk
备战蓝桥杯----C/C++组 (一)所需C++基础知识(上)

备战蓝桥杯----C/C++组 (一)所需C++基础知识(上)

个人主页: wengqidaifeng ✨永远在路上,永远向前走 个人专栏: 数据结构 C语言 嵌入式小白启动! 重要OJ算法题详解 文章目录 * 前言 * 一. 分析大纲,了解所需 * 1. 大纲显示内容 * 2、组别划分与难度关系 * 3、知识点结构分析(按组别) * 3.1 大学C组:基础入门阶段 * 3.2 大学B组:中级提高阶段 * 3.3 大学A组 / 研究生组:高级挑战阶段 * 4.难度系数说明 * 二. C++基础语法(上):从零开始的编程基石 * 1.前言 * 2.开发环境搭建 - DevC++的安装与使用 * 2.1

By Ne0inhk

初识c++;format函数;cout输出

一.程序 在c语言中输入和输出的头文件是#include <stdio.h>,而在c++中标准输入输出头文件则是#include <iostream>,它的作用和stdio类似,不过更为强大 #include <iostream> int main(){ std::cout<<"Hello World!"<<std::endl; } 1.cout   这是iostream文件里的内容 2.std::  c++中有个命名空间的概念,在这里std::cout的作用是在告诉程序我们在使用标准库里的cout 3.cout  代表标准输出流对象,作用是将数据以字符的形式打印到终端 4.<<

By Ne0inhk
用飞算JavaAI轻松完成高校宿舍管理系统

用飞算JavaAI轻松完成高校宿舍管理系统

今天我们使用飞算来完成高校宿舍管理系统。 一、需求分析与规划 1.1 功能需求与核心模块 高校宿舍管理系统主要服务于宿舍管理员、学生和学校管理部门,实现宿舍资源的数字化管理。系统核心功能包括:用户管理(登录认证、角色权限分配)、宿舍管理(楼栋房间信息、床位分配状态)、学生住宿管理(入住登记、宿舍分配调换、退宿处理)、日常管理(考勤记录、访客登记、违纪管理、卫生检查)、维修管理(故障申报、工单派发、进度跟踪)以及统计报表(入住率、费用统计、数据分析)等功能模块。 系统采用分层架构设计,包含八个核心模块:用户认证授权模块负责JWT令牌管理和权限控制;用户管理模块处理用户CRUD和角色分配;宿舍管理模块管理楼栋房间和床位状态;学生住宿模块处理入住分配和调宿业务;日常管理模块记录考勤访客和违纪信息;维修管理模块处理维修申请和工单流转;统计报表模块提供数据分析和图表展示;系统管理模块负责配置管理和日志监控。 1.2 技术选型 后端采用Spring Boot 2.

By Ne0inhk