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 Key
    mcp:
      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) {
    	// 大模型使用 MCP
        chatClient = builder.defaultTools(toolCallbackProvider).build();
    }

    @GetMapping
    public Flux<String> ai(String param) {
        return chatClient.prompt(param).stream().content();
    }

}

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

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

最终大模型生成的SQL是:

### 使用 MCP 连接 MySQL 数据库的方法 为了建立与 MySQL 数据库的连接,可以采用类似于 Chat2DB 的实现方式。具体来说,通过 `McpSyncClient` 来构建并初始化到目标数据库的链接。 ```java @Bean(destroyMethod = "close") public McpSyncClient mcpClient() { var stdioParams = ServerParameters.builder("npx") .args("-y", "@modelcontextprotocol/server-mysql", "mysql://username:password@host:port/databaseName") .build(); var mcpClient = McpClient.using(new StdioClientTransport(stdioParams)) .requestTimeout(Duration.ofSeconds(10)) .sync(); var init = mcpClient.initialize(); System.out.println("MCP Initialized with MySQL Database."); return mcpClient; } ``` 上述代码展示了如何创建一个名为 `mcpClient()` 的 Bean 函数来配置和启动 MCP 客户端实例[^1]。此函数中定义了针对 MySQL 数据库的具体连接字符串以及请求超时时间设置,并最终打印出初始化成功的消息。 对于具体的参数替换: - **username**: 替换为实际使用的用户名。 - **password**: 更改为对应的密码。 - **host**: 设置为目标主机地址,默认情况下本地环境可设为 localhost 或 127.0.0.1。 - **port**: 指定 MySQL 默认监听端口(通常是3306)。 - **databaseName**: 输入想要连接的目标数据库名称。 值得注意的是,在 Spring 应用程序上下文中注册该 Bean 后,每当应用程序启动时都会自动调用这个方法完成客户端初始化工作。当应用关闭时,则会触发 destroyMethod 属性指定的操作——即关闭 MCP 客户端连接以释放资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值