当前位置: 首页 > news >正文

Spring AI Alibaba - MCP连接 MySQL

先看效果

直接问他数据库有什么表。
在这里插入图片描述
大模型调用MySQL进行查询
在这里插入图片描述

搭建项目

添加依赖

创建项目后新添加Maven 依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId><version>1.0.0-M6</version>
</dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M6.1</version>
</dependency>

添加配置

spring:ai:dashscope:api-key: sk-*  # API Keymcp:client:stdio:servers-configuration: classpath:mcp-servers.json #mcp 配置的JSON

创建 mcp-servers.json

可以在: https://bailian.console.aliyun.com/?tab=mcp#/mcp-market 中找合适的MCP 使用,例如直接搜索 MySQL就能找到 MySQL 相关的 MCP:
在这里插入图片描述
点击进入,按照步骤进行本地安装,需要说明的是首先要安装 node 和 npx。
安装成功后直接复制:

{"mcpServers": {"mysql": {"command": "D:\\develop\\nodejs\\npx.cmd","args": ["mysql-mcp-server"],"env": {"MYSQL_HOST": "192.168.74.100","MYSQL_PORT": "3306","MYSQL_USER": "dev","MYSQL_PASSWORD": "Aa@123456","MYSQL_DATABASE": "history"}}}
}

这里和官方的有点不一样。JAVA代码一直报错找不到 npx 命令,所以直接改成了 npx 的绝对路径,然后删掉了 disabled 和 autoApprove。

开发接口

配置好的 MCP 实际上对应的是 ToolCallbackProvider 类。

package cn.salim.ai.controller;import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;@RestController
@RequestMapping("ai")
public class AiController {private ChatClient chatClient;public AiController(ChatClient.Builder builder, ToolCallbackProvider toolCallbackProvider) {// 大模型使用 MCPchatClient = builder.defaultTools(toolCallbackProvider).build();}@GetMappingpublic Flux<String> ai(String param) {return chatClient.prompt(param).stream().content();}}

启动项目可以看到:
在这里插入图片描述

意味着 MCP 已经被识别到了。
测试一下

最终大模型生成的SQL是:

相关文章:

Spring AI Alibaba - MCP连接 MySQL

先看效果 直接问他数据库有什么表。 大模型调用MySQL进行查询 搭建项目 添加依赖 创建项目后新添加Maven 依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> …...

Spring Cloud Stream喂饭级教程【搜集全网资料整理】

文章较长&#xff0c;建议收藏关注&#xff0c;随时查看 Spring Cloud Stream 简介 Spring Cloud Stream 是 Spring 提供的一个框架&#xff0c;用于构建与共享消息系统相连接的高度可伸缩的事件驱动微服务&#xff0c;它建立在 Spring 已有的成熟组件和最佳实践之上&#xff…...

prometheus手动添加k8s集群外的node-exporter监控

1、部署node-exporter 1&#xff09;helm方式部署 rootiZj6c72dzbei17o2cuksmeZ:~# helm repo add prometheus-community https://prometheus-community.github.io/helm-charts "prometheus-community" has been added to your repositories rootiZj6c72dzbei17o2cu…...

Linux(Centos版本)中安装Docker

文章目录 Linux&#xff08;Centos版本&#xff09;中安装Docker整体流程 Linux&#xff08;Centos版本&#xff09;中安装Docker整体流程 进入root权限进行安装&#xff1a; 下面开始安装Docker: 1、安装docker的yum管理工具&#xff1a;记得将yum仓库更改为国内的镜像源&…...

C语言-- 深入理解指针(4)

C语言-- 深入理解指针&#xff08;4&#xff09; 一、回调函数二、冒泡排序三、qsort函数3.1 使用qsort函数排序整型数据3.2 使用qsort函数排序double数据3.3 使用qsort来排序结构体数据 四、模仿qsort库函数实现通用的冒泡排序4.1 通用冒泡排序函数排序整型数据4.2 通用冒泡排…...

牟乃夏《ArcGIS Engine地理信息系统开发教程》学习笔记3-地图基本操作与实战案例

目录 一、开发环境与框架搭建 二、地图数据加载与文档管理 1. 加载地图文档&#xff08;MXD&#xff09; 2. 动态添加数据源 三、地图浏览与交互操作 1. 基础导航功能 2. 书签管理 3. 量测功能 四、要素选择与属性查询 1. 属性查询 2. 空间查询 五、视图同步与鹰眼…...

Spark Streaming实时数据处理实战:从DStream基础到自定义数据源集成

park-Streaming概述 Spark-Streaming是什么 Spark Streaming 用于流式数据的处理。Spark Streaming 支持的数据输入源很多&#xff0c;例如&#xff1a;Kafka、Flume、Twitter等&#xff0c;以及和简单的 TCP 套接字等等。数据输入后可以用 Spark 的高度抽象原语如&#xff1a;…...

微软GraphRAG的安装和在RAG中的使用体会

文章目录 0. 简介&#xff08;1&#xff09;**技术原理**&#xff08;2&#xff09;**优势**&#xff08;3&#xff09;**开源与演进** 1. 下载graphrag.git2.安装 poetry3.初始化项目&#xff1a;建立cases目录4. 修改.env5.修改settings.yaml,将两处 api_base改成中转站地址:…...

Python学习记录7——集合set()的使用指南

文章目录 引言一、集合特性二、创建方式三、元素操作1、添加元素&#xff08;1&#xff09;add(element)&#xff08;2&#xff09;update(iterables) 2、删除元素&#xff08;1&#xff09;remove(element)&#xff08;2&#xff09;discard(element)&#xff08;3&#xff09…...

apkpure 谷歌插件 下载的apk包

谷歌插件市场搜索 apkpure 然后直接搜索下载就行了 想看apk包中的静态资源&#xff0c;直接改apk 为zip后缀解压就行了 apple的ipa包也是相同的道理...

Android四大核心组件

目录 一、为什么需要四大组件&#xff1f; 二、Activity&#xff1a;看得见的界面 核心功能 生命周期图解 代码示例 三、Service&#xff1a;看不见的劳动者 两大类型 生命周期对比 注意陷阱 四、BroadcastReceiver&#xff1a;消息传递专员 两种注册方式 广播类型 …...

WSL2里手动安装Docker 遇坑

在 WSL2 里手动安装 Docker Engine 时遇坑&#xff1a;systemctl 和 service 命令在默认的 WSL2 Ubuntu 中 无法使用&#xff0c;因为 WSL2 没有 systemd。怎么办&#xff1f; 自己操作让 Docker Engine&#xff08;dockerd&#xff09;直接跑起来&#xff0c;挂到 /var/run/do…...

【ROS2】ROS开发环境配置——vscode和git

古月21讲-ROS2/1.系统架构/1.5_ROS2开发环境配置/ ROS机器人开发肯定离不开代码编写&#xff0c;课程中会给大家提供大量示例源码&#xff0c;这些代码如何查看、编写、编译 安Linux中安装装git sudo apt install git下载教程源码 《ROS2入门21讲》课程源码的下载方式&#x…...

django.db.models.query_utils.DeferredAttribute object

在 Django 中&#xff0c;当你看到 django.db.models.query_utils.DeferredAttribute 对象时&#xff0c;通常是因为你在查询时使用了 only() 或 defer() 方法来延迟加载某些字段。这两个方法允许你控制数据库查询中的字段加载方式&#xff0c;从而优化查询性能。 only() 方法…...

Linux内核中的编译时安全防护:以网络协议栈控制块校验为例

引言:内存安全的无声守卫者 在操作系统内核开发中,内存溢出引发的错误往往具有极高的隐蔽性和破坏性。Linux内核作为承载全球数十亿设备的基石,其网络协议栈的设计尤其注重内存安全性。本文通过分析一段看似简单的内核代码,揭示Linux如何通过编译时静态检查(Compile-Time…...

第11章 安全网络架构和组件(一)

11.1 OSI 模型 协议可通过网络在计算机之间进行通信。 协议是一组规则和限制&#xff0c;用于定义数据如何通过网络介质&#xff08;如双绞线、无线传输等&#xff09;进行传输。 国际标准化组织(ISO)在20世纪70年代晚期开发了开放系统互连(OSI)参考模型。 11.1.1 OSI模型的…...

Git常用命令简明教程

本教程整合并优化了Git核心命令&#xff0c;涵盖初始化、配置、文件操作、分支管理、远程仓库操作及常见场景&#xff0c;适合快速入门和日常参考。命令按使用流程分组&#xff0c;简洁明了&#xff0c;包含注意事项和最佳实践。 1. 初始化与配置 初始化Git仓库并设置基本配置…...

在 Ubuntu 24.04 系统上安装和管理 Nginx

1、安装Nginx 在Ubuntu 24.04系统上安装Nginx&#xff0c;可以按照下面的步骤进行&#xff1a; 1.1、 更新系统软件包列表 在安装新软件之前&#xff0c;需要先更新系统的软件包列表&#xff0c;确保获取到最新的软件包信息。打开终端&#xff0c;执行以下命令&#xff1a; …...

数据结构——二叉树和堆(万字,最详细)

目录 1.树 1.1 树的概念与结构 1.2 树相关的术语 1.3 树的表示法 2.二叉树 2.1 概念与结构 2.2 特殊的二叉树 2.2.1 满二叉树 2.2.2 完全二叉树 2.3 二叉树存储结构 2.3.1 顺序结构 2.3.2 实现顺序结构二叉树 2.3.2.1 堆的概念与结构 2.3.2. 2 堆的插入与删除数据…...

IdeaVim 配置与使用指南

一、什么是 IdeaVim&#xff1f; IdeaVim 是 JetBrains 系列 IDE&#xff08;如 IntelliJ IDEA, WebStorm, PyCharm 等&#xff09;中的一个插件&#xff0c;让你在 IDE 里使用 Vim 的按键习惯&#xff0c;大大提升效率。 安装方法&#xff1a; 在 IDE 中打开 设置(Settings) →…...

前端浏览器窗口交互完全指南:从基础操作到高级控制

浏览器窗口交互是前端开发中构建复杂Web应用的核心能力&#xff0c;本文深入探讨23种关键交互技术&#xff0c;涵盖从传统API到最新的W3C提案&#xff0c;助您掌握跨窗口、跨标签页的完整控制方案。 一、基础窗口操作体系 1.1 窗口创建与控制 // 新窗口创建&#xff08;现代浏…...

考研系列-计算机组成原理第五章、中央处理器

一、CPU的功能及结构 1.运算器的基本结构 2.控制器结构...

python+flask+flask-sockerio,部署后sockerio通信异常

前言 用python开发了一个flask web服务&#xff0c;前端用html&#xff0c;前后端通过socketio通信&#xff0c;开发环境&#xff0c;windowsminicondavscode&#xff0c;开发完成后本地运行没有问题&#xff0c;然后就开始部署&#xff0c;噩梦就开始了。 问题描述 程序是部…...

深度解析:TextRenderManager——Cocos Creator艺术字体渲染核心类

一、类概述 TextRenderManager 是 Cocos Creator 中实现动态艺术字体渲染的核心单例类。它通过整合资源加载、缓存管理、异步队列和自动布局等功能&#xff0c;支持普通字符模式和图集模式两种渲染方案&#xff0c;适用于游戏中的动态文本&#xff08;如聊天内容、排行榜&…...

同样开源的自动化工作流工具n8n和Dify对比

n8n和Dify作为两大主流工具&#xff0c;分别专注于通用自动化和AI应用开发领域&#xff0c;选择哪个更“好用”需结合具体需求、团队能力及业务场景综合判断。以下是核心维度的对比分析&#xff1a; 一、核心定位与适用场景 维度n8nDify核心定位开源全场景自动化工具&#xff…...

设计模式每日硬核训练 Day 16:责任链模式(Chain of Responsibility Pattern)完整讲解与实战应用

&#x1f504; 回顾 Day 15&#xff1a;享元模式小结 在 Day 15 中&#xff0c;我们学习了享元模式&#xff08;Flyweight Pattern&#xff09;&#xff1a; 通过共享对象&#xff0c;分离内部状态与外部状态&#xff0c;大量减少内存开销。适用于字符渲染、游戏场景、图标缓…...

基于边缘人工智能的AI无人机-更高效更安全的飞行任务执行

基于边缘人工智能的AI无人机-更高效更安全的飞行任务执行 人工智能有可能改变人们的生活和工作方式。人工智能和无人机是近年来发展迅速的两项技术。当这两种技术结合在一起时&#xff0c;它们会创造出许多以前不可能的应用。基于人工智能的无人机旨在独立执行任务&#xff0c;…...

30、不是说字符串是不可变的吗,string s=“abc“;s=“123“不就是变了吗?

一、核心概念澄清&#xff1a;不可变性的真实含义 1、不可变性的定义 字符串不可变性指对象内容不可修改&#xff0c;而非变量不可修改。 类比&#xff1a; 不可变字符串 装在密封信封里的信纸&#xff08;内容不可更改&#xff09;变量赋值 更换信封的指向&#xff08;从…...

线上查询车辆出险记录:快速掌握事故情况!

在如今汽车成为人们日常不可或缺的交通工具之际&#xff0c;车辆出险记录成为了许多车主关注的焦点之一。为了帮助车主们快速了解车辆出险、理赔、事故记录&#xff0c;现在有了一种便捷的方式&#xff0c;那就是通过API接口在线查询。本文将介绍如何利用API接口&#xff0c;通…...

Python爬虫课程实验指导书

1.1Requests类库的认知 1.1.1 认识请求类库 Requests是用Python语言编写&#xff0c;基于&#xff0c;采用Apache2 Licensed开源协议的。它比urllib更加方便&#xff0c;可以节约我们大量的工作&#xff0c;完全满足HTTP测试需求。urllibHTTP库 Requests官网地址&#xff1a;ht…...

streamlit实现非原生的按钮触发效果 + flask实现带信息的按钮触发

目录 简介不携带信息的触发隐藏指定st.button(label, key)触发button的html代码汇总 携带信息的触发为什么需要携带信息前端JavaScript修改flask处理总代码 简介 由于streamlit可以同时在实现前后端结合&#xff0c;非常方便&#xff0c;但是这也造成了user难以方便的对页面的…...

机器学习基础——Seaborn使用

1.使用tips数据集,创建一个展示不同时间段(午餐/晚餐)账单总额分布的箱线图 import matplotlib.pyplot as plt import numpy as np import pandas as pd import seaborn as snstips pd.read_csv(./tips.csv)sns.boxplot(data tips,x time,y total_bill, )plt.show() 2.使用…...

Godot开发2D冒险游戏——第三节:游戏地图绘制

一、初步构建游戏地图 在游戏场景当中添加一个新的子节点&#xff1a;TileMapLayer 这一层称为瓦片地图层 根据提示&#xff0c;下一步显然是添加资源 为TileMapLayer节点添加一个TileSet 将地板添加进来&#xff0c;然后选择自动分割图集 自定义时要确保大小合适 让Godot自…...

Spark Mllib 机器学习

概述 机器学习是什么 根据百度百科的定义&#xff1a; 机器学习是一种通过算法和模型使计算机从数据中自动学习并进行预测或决策的技术。 定义比较抽象&#xff0c;根据常见的机器学习可以总结出三个关键字&#xff1a; 算法、经验、性能。 机器学习的过程可以抽象成一个pipel…...

在windows使用docker打包springboot项目镜像并上传到阿里云

1、前提&#xff1a;已有spring项目 2、在项目根目录下创建Dockerfile文件 FROM openjdk:11 WORKDIR /ruoyi-admin COPY ruoyi-admin/build/libs/lifecolor-web.jar lifecolor-web.jar CMD ["java", "-jar", "lifecolor-web.jar"] 3、选…...

前端高频面试题day3

JavaScript作用域理解 核心概念 作用域&#xff1a;定义变量/函数的可见范围及生命周期&#xff0c;分为 全局作用域、函数作用域、块级作用域。作用域链&#xff1a;变量查找从当前作用域逐级向上直至全局&#xff0c;遵循词法作用域&#xff08;静态作用域&#xff09;。闭…...

时空特征如何融合?LSTM+Resnet有奇效,SOTA方案预测准确率超91%

LSTM有着不错的时序信息提取能力&#xff0c;ResNet有着不错的空间特征信息提取能力。如果现在有时空特征融合的创新需求&#xff0c;我们是否能将LSTM和ResNet两者的优点融合起来呢&#xff1f; 随着这个思路下去&#xff0c;LSTM ResNet混合模型横空出世&#xff0c;在各个…...

蓝桥杯Java全攻略:从零到一掌握竞赛与企业开发实战

蓝桥杯Java软件开发竞赛已成为全国高校学生展示编程能力的重要舞台,本指南将带您从零开始构建完整的Java知识体系,不仅覆盖蓝桥杯高频考点,还延伸至企业级开发实战,助您在竞赛中脱颖而出并为未来职业发展奠定坚实基础。 一、Java基础语法与数据结构 竞赛解题流程图设计 蓝…...

【Nginx】负载均衡配置详解

Nginx作为高性能的HTTP服务器和反向代理服务器&#xff0c;提供了强大的负载均衡功能。本文将详细介绍Nginx负载均衡的配置方法和相关策略。 一、基础负载均衡配置 1.单服务示例配置 配置nginx.conf模块 在Nginx配置文件中定义upstream模块&#xff1a; worker_processes a…...

打造企业级AI文案助手:GPT-J+Flask全栈开发实战

一、智能文案革命的序幕&#xff1a;为什么需要AI文案助手&#xff1f; 在数字化营销时代&#xff0c;内容生产效率成为企业核心竞争力。据统计&#xff0c;营销人员平均每天需要撰写3.2篇文案&#xff0c;而传统人工创作存在三大痛点&#xff1a; 效率瓶颈&#xff1a;创意构…...

【文献速递】snoRNA-SNORD113-3/ADAR2通过对PHKA2的A-to-I编辑影响胶质母细胞瘤糖脂代谢

Cui等人于2025年在Cellular & Molecular Biology Letters上的发表一篇研究论文&#xff0c;题目为“Effect of SNORD113-3/ADAR2 on glycolipid metabolism in glioblastoma via A-to-I editing of PHKA2”。这篇文章的核心内容是研究胶质母细胞瘤&#xff08;GBM&#xff…...

视频HLS分片与关键帧优化深度解析

视频HLS分片与关键帧优化深度解析 &#x1f310; HLS基础架构 #mermaid-svg-OQmrXfradiCv3EGC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OQmrXfradiCv3EGC .error-icon{fill:#552222;}#mermaid-svg-OQmrXfrad…...

再谈从视频中学习:从给视频打字幕的Humanoid-X、UH-1到首个人形VLA Humanoid-VLA:迈向整合第一人称视角的通用人形控制

前言 本博客内&#xff0c;之前写了比较多的大脑相关的&#xff0c;或者上肢操作&#xff0c;而解读运动控制、规划的虽也有&#xff0c;但相对少 故近期 准备多写写双足人形的运动控制相关 一方面&#xff0c;我们有些客户订单涉及这块二方面&#xff0c;想让双足人形干好活…...

Ubuntu下MySQL的安装

Ubuntu下MySQL的安装 1. 查看当前操作系统版本2. 添加MySQL APT源2.1 访问下载页面&#xff0c;并下载发布包2.2 执行安装指令2.3 安装MySQL 3. 查看MySQL状态4. 设置开机自启动 1. 查看当前操作系统版本 通过命令lsb_release -a查看&#xff1a; 2. 添加MySQL APT源 2.1 访问下…...

DataStreamAPI实践原理——快速上手

引入 通过编程模型&#xff0c;我们知道Flink的编程模型提供了多层级的抽象&#xff0c;越上层的API&#xff0c;其描述性和可阅读性越强&#xff0c;越下层API&#xff0c;其灵活度高、表达力越强&#xff0c;多数时候上层API能做到的事情&#xff0c;下层API也能做到&#x…...

《数据结构初阶》【顺序表 + 单链表 + 双向链表】

《数据结构初阶》【顺序表 单链表 顺序表】 前言&#xff1a;先聊些其他的东西&#xff01;&#xff01;&#xff01;什么是线性表&#xff1f;什么是顺序表&#xff1f;顺序表的种类有哪些&#xff1f; 什么是链表&#xff1f;链表的种类有哪些&#xff1f; ---------------…...

【JS-Leetcode】2621睡眠函数|2629复合函数|2665计数器||

文章目录 2621睡眠函数2629复合函数2665计数器|| 这三个题目涉及setTimeout、promise、数组reduce方法&#xff0c;闭包。 2621睡眠函数 请你编写一个异步函数&#xff0c;它接收一个正整数参数 millis &#xff0c;并休眠 millis 毫秒。要求此函数可以解析任何值。 原理&am…...

全国各地级城市月度平均房价统计数据2009-2021年

全国各地级城市月度平均房价统计数据2009-2021年.ziphttps://download.csdn.net/download/2401_84585615/90259770 https://download.csdn.net/download/2401_84585615/90259770 来源&#xff1a;安居客&#xff0c;本数据以excel格式展示&#xff0c;列举2.5万多条样本数据。总…...

ElasticSearch从入门到精通-覆盖DSL操作和Java实战

一、ElasticSearch基础概念 1.1 认识elasticSearch ElasticSearch&#xff08;简称ES&#xff09;是一款开源的、分布式的搜索引擎&#xff0c;它建立在Apache Lucene之上。简单来说&#xff0c;ElasticSearch就是一个能让你以极快速度进行数据搜索、存储和分析的系统。它不仅…...

SHCTF-REVERSE

前言 之前写的&#xff0c;一直没发&#xff0c;留个记录吧&#xff0c;万一哪天记录掉了起码在csdn有个念想 1.ezapk 反编译 快速定位关键函数 package com.mycheck.ezjv;import adrt.ADRTLogCatReader; import android.app.Activity; import android.content.Context; impo…...