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

简介: MCP客户端是MCP架构的关键组件,负责与服务器建立连接并通信,支持协议版本自动匹配、功能确认、数据传输及JSON-RPC交互,还具备工具发现、资源管理与提示系统交互能力。

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配置
<dependency>
    <groupId>org.springframework.ai</groupId>        
    <artifactId>spring-ai-starter-mcp-server</artifactId>
</dependency>

添加yml配置文件配置

spring:
  ai:
   mcp:
     server:
       name: super-sql-mcp-server
       version: 1.0.0
       type: SYNC

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

##服务端口
server:
  port: 8088
spring:
  application:
    ###应用名
    name: super-sql-mcp-server
  main:
    banner-mode: off
    web-application-type: none

开始实现mcp的接口

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
<dependency>
  <groupId>org.springframework.ai</groupId>
  <artifactId>spring-ai-starter-mcp-client</artifactId>
</dependency>
  1. 配置文件配置
  2. 配置mcp-sercers.json
{
  "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依赖和配置不同,其他不需要修改,所以这里不过赘述

<dependency>
  <groupId>org.springframework.ai</groupId>
  <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
</dependency>

配置文件配置

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广场

相关文章
|
2月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
2192 63
|
2月前
|
SQL 人工智能 机器人
AI Agent新范式:FastGPT+MCP协议实现工具增强型智能体构建
FastGPT 与 MCP 协议结合,打造工具增强型智能体新范式。MCP 如同 AI 领域的“USB-C 接口”,实现数据与工具的标准化接入。FastGPT 可调用 MCP 工具集,动态执行复杂任务,亦可作为 MCP 服务器共享能力。二者融合推动 AI 应用向协作式、高复用、易集成的下一代智能体演进。
385 0
|
2月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
3904 56
|
3月前
|
人工智能 Java 数据库
Spring AI
Spring AI 为 Java 生态注入智能,提供统一抽象接口,简化大模型集成,助力开发者高效构建 AI 应用,推动企业智能化转型。
676 147
|
3月前
|
人工智能 JavaScript 算法
Playwright携手MCP:AI智能体实现自主化UI回归测试
MCP 协议使得 AI 能够通过 Playwright 操作浏览器,其中快照生成技术将页面状态转化为 LLM 可理解的文本,成为驱动自动化测试的关键。该方式适用于探索性测试和快速验证,但目前仍面临快照信息缺失、元素定位不稳定、成本高、复杂场景适应性差以及结果确定性不足等挑战。人机协同被认为是未来更可行的方向,AI 负责执行固定流程,人类则专注策略与验证。
|
3月前
|
人工智能 Java API
构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用
当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。
1847 58
|
2月前
|
人工智能 监控 Java
零代码改造 + 全链路追踪!Spring AI 最新可观测性详细解读
Spring AI Alibaba 通过集成 OpenTelemetry 实现可观测性,支持框架原生和无侵入探针两种方式。原生方案依赖 Micrometer 自动埋点,适用于快速接入;无侵入探针基于 LoongSuite 商业版,无需修改代码即可采集标准 OTLP 数据,解决了原生方案扩展性差、调用链易断链等问题。未来将开源无侵入探针方案,整合至 AgentScope Studio,并进一步增强多 Agent 场景下的观测能力。
1624 36
|
3月前
|
机器学习/深度学习 人工智能 机器人
AI Compass前沿速览:Nano Bananary、MCP Registry、通义DeepResearch 、VoxCPM、InternVLA·M1具身机器人
AI Compass前沿速览:Nano Bananary、MCP Registry、通义DeepResearch 、VoxCPM、InternVLA·M1具身机器人
|
3月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
2847 1
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API