首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何用Spring AI开发一个支持Text-To-SQL的MCP

如何用Spring AI开发一个支持Text-To-SQL的MCP

原创
作者头像
HELLO程序员
发布2025-10-15 09:40:34
发布2025-10-15 09:40:34
1000
代码可运行
举报
运行总次数:0
代码可运行

MCP 客户端是 MCP 架构中的关键组件,主要负责和 MCP 服务器建立连接并进行通信。它能自动匹配服务器的协议版本,确认可用功能,并负责数据传输和 JSON-RPC 交互。此外,它还能发现和使用各种工具、管理资源,并与提示系统进行交互。

除了这些核心功能,MCP 客户端还支持一些额外特性,比如根管理、采样控制,以及同步或异步操作。为了适应不同场景,它提供了多种数据传输方式,包括标准输入/输出、基于 Java HttpClient 和 WebFlux 的 SSE 传输。

MCP 服务端

MCP 服务器是整个 MCP 架构的核心部分,主要用来为客户端提供各种工具、资源和功能支持。它负责处理客户端的请求,包括解析协议、提供工具、管理资源以及处理各种交互信息。同时,它还能记录日志、发送通知,并且支持多个客户端同时连接,保证高效的通信和协作。它可以通过多种方式进行数据传输,比如标准输入/输出、Servlet、WebFlux 和 WebMVC,满足不同应用场景的需求。

Spring AI 集成 MCP

可以通过引入一些依赖,直接让 Spring AI 和 MCP 进行集成,在 Spring Boot 项目中轻松使用。

比如客户端启动器:

  • spring-ai-starter-mcp-client:核心启动器,提供 STDIO 和基于 HTTP 的 SSE 支持
  • spring-ai-starter-mcp-client-webflux:基于 WebFlux 的 SSE 流式传输实现

服务器启动器:

  • spring-ai-starter-mcp-server:核心服务器,具有 STDIO 传输支持
  • spring-ai-starter-mcp-server-webmvc:基于 Spring MVC 的 SSE 流式传输实现
  • spring-ai-starter-mcp-server-webflux:基于 WebFlux 的 SSE 流式传输实现

MCP开发实践

  1. 新增mcpserver工程
  2. 添加maven配置
代码语言:javascript
代码运行次数:0
运行
复制
<dependency>
    <groupId>org.springframework.ai</groupId>        
    <artifactId>spring-ai-starter-mcp-server</artifactId>
</dependency>

添加yml配置文件配置

代码语言:javascript
代码运行次数:0
运行
复制
spring:
  ai:
   mcp:
     server:
       name: super-sql-mcp-server
       version: 1.0.0
       type: SYNC

注意点需要关闭springboot的banner输出

代码语言:javascript
代码运行次数:0
运行
复制
##服务端口
server:
  port: 8088
spring:
  application:
    ###应用名
    name: super-sql-mcp-server
  main:
    banner-mode: off
    web-application-type: none

开始实现mcp的接口

代码语言:javascript
代码运行次数:0
运行
复制
public interface ISQLEngineService {
    String genSQL(String question);
    List<Map<String,Object>> getNl2SQLData(String question);
}

实现接口代码

实现 MCP 工具

@Tool 是 Spring AI MCP 框架中用于快速暴露业务能力为 AI 工具的核心注解,该注解实现 Java 方法与 MCP 协议工具的自动映射,并且可以通过注解的属性 description,帮助人工智能模型根据用户输入的信息决定是否调用这些工具,并返回相应的结果。

  1. 注册MCP工具

到这里为止MCP的服务端就开发完成了,接下来我们要实现的是mcp的client端

  1. 引入mcp client的pom
代码语言:javascript
代码运行次数:0
运行
复制
<dependency>
  <groupId>org.springframework.ai</groupId>
  <artifactId>spring-ai-starter-mcp-client</artifactId>
</dependency>
  1. 配置文件配置
  2. 配置mcp-sercers.json
代码语言:javascript
代码运行次数:0
运行
复制
{
  "mcpServers": {
    "super-sql-mcp-server": {
      "command": "java",
      "args": [
        "-jar",
        "-Dspring.ai.mcp.server.stdio=true",
        "-Dspring.main.web-application-type=none",
        "-Dlogging.pattern.console=",
        "-Dspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver",
        "-Dspring.datasource.url=jdbc:mysql://localhost:3306/supersql?characterEncoding=utf8&useSSL=false",
        "-Dspring.datasource.username=root",
        "-Dspring.datasource.password=123456",
        "-Dspring.ai.azure.openai.api-key=your_openai_api_key",
        "-Dspring.ai.azure.openai.chat.options.deployment-name=your_chat_model_deployment_name",
        "-Dspring.ai.azure.openai.endpoint=your_openai_endpoint",
        "-Dspring.ai.azure.openai.embedding.options.deployment-name=your_embedding_model_deployment_name",
        "-Dspring.ai.vectorstore.chroma.client.host=http://127.0.0.1",
        "-Dspring.ai.vectorstore.chroma.client.port=8000",
        "-Dspring.ai.vectorstore.chroma.collection-name=super-sql",
        "-Dspring.ai.vectorstore.chroma.initialize-schema=true",
        "D:\\your_jar_file_path\\super-sql-mcp-stdio-1.0.0-M1.jar"
      ],
      "env": {}
    }
  }
}

开发对应的接口

最后测试一下

结果显示已经调用了MCP工具,并且数据来源于数据库中

基于SSE的服务端

除了基于 stdio 的实现外,Spring AI 还提供了基于 Server-Sent Events (SSE) 的 MCP 客户端方案。相较于 stdio 方式,SSE 更适用于远程部署的 MCP 服务器,客户端可以通过标准 HTTP 协议与服务器建立连接,实现单向的实时数据推送。基于 SSE 的 MCP 服务器支持被多个客户端远程调用。

由于sse与stdio除了maven依赖和配置不同,其他不需要修改,所以这里不过赘述

代码语言:javascript
代码运行次数:0
运行
复制
<dependency>
  <groupId>org.springframework.ai</groupId>
  <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
</dependency>

配置文件配置

代码语言:javascript
代码运行次数:0
运行
复制
 spring:
    ai:
     mcp:
      server:
        name: webmvc-super-sql-mcp-server
        version: 1.0.0
        stdio: false
        type: ASYNC
        sse-message-endpoint: /mcp/messages
        sse-endpoint: /sse
        capabilities:
          tool: true
          resource: true
          prompt: true
          completion: true

开发完成的mcp你可以上传到modelscope的MCP广场,让更多的人关注到你的mcp或者higress的MCP广场

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档