Spring AI使用MCP的简单流程

  1. 引入依赖 :Spring 项目添加 MCP 客户端依赖(如 spring-ai-mcp-client-spring-boot-starter)。
xml 复制代码
<!-- Spring AI MCP 客户端 -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId>
    <version>1.0.0-M6</version>
</dependency>
  1. 配置 Server 信息 :在 application.ymlmcp-servers-config.json 中定义 Server 的启动命令、参数和环境变量。可选stdio/SSE两种模
yaml 复制代码
spring:
  ai:
    mcp:
      client:
        # 1. STDIO本地配置:用于和一个本地MCP服务进程交互
        stdio:
          # 指定MCP服务器配置文件路径(推荐)
          servers-configuration: classpath:/mcp-servers-config.json
        # 2. SSE用于和远程的MCP服务器交互
        sse:
          connections:
            # 需要配置远程服务器地址
            server1:
              # 在本机的另一个8127端口启动MCP Server代码模拟远程MCP服务
              url: http://localhost:8127
json 复制代码
{
  "mcpServers": {
    "amap-maps": {
      "command": "npx.cmd",
      "args": [
        "-y",
        "@amap/amap-maps-mcp-server"
      ],
      "env": {
        "AMAP_MAPS_API_KEY": "用户在高德开放平台申请的api-key"
      }
    }
  }
}
  1. 启动时拉取并启动 Server :Spring 通过 npx 调用本地或远程的 MCP Server 包,npx 会自动下载并启动服务端进程。
  2. 客户端与 Server 交互 :通过 stdioSSE 建立连接,客户端请求工具列表并调用工具。比如McpSyncClient源码中有listTools()方法可以从Mcp Server中获取注册的工具列表
java 复制代码
/**
 * Retrieves the list of all tools provided by the server.
 * @return The list of tools result containing: - tools: List of available tools, each
 * with a name, description, and input schema 
 */
public McpSchema.ListToolsResult listTools() {
    return this.delegate.listTools().block();
}
  1. 工具注入与调用MCP的本质就是工具调用 , 通过 ToolCallbackProvider 将 Server 的工具注册为 Spring Bean。在代码中向AI发送请求时候在chatClient绑定tools参数传入toolCallbackProvider实例即可使用。
java 复制代码
@Resource
private ToolCallbackProvider toolCallbackProvider;

public String doChatWithMcp(String message, String chatId) {
    ChatResponse response = chatClient.prompt().user(message).
            // 使用方式和工具调用几乎一致,只需要修改tools传入参数即可
            .tools(toolCallbackProvider).call().chatResponse();
    String content = response.getResult().getOutput().getText();
    return content;
}
相关推荐
程序员爱钓鱼1 小时前
Go语言实战案例 — 工具开发篇:实现一个图片批量压缩工具
后端·google·go
ChinaRainbowSea3 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程
舒一笑3 小时前
同步框架与底层消费机制解决方案梳理
后端·程序员
minh_coo3 小时前
Spring框架事件驱动架构核心注解之@EventListener
java·后端·spring·架构·intellij-idea
sanggou3 小时前
License 集成 Spring Gateway:解决 WebFlux 非阻塞与 Spring MVC Servlet 阻塞兼容问题
spring·gateway·mvc
白初&4 小时前
SpringBoot后端基础案例
java·spring boot·后端
再睡亿分钟!5 小时前
Spring MVC 的常用注解
java·开发语言·spring boot·spring
计算机学姐6 小时前
基于Python的旅游数据分析可视化系统【2026最新】
vue.js·后端·python·数据分析·django·flask·旅游
该用户已不存在7 小时前
你没有听说过的7个Windows开发必备工具
前端·windows·后端
霸道流氓气质7 小时前
Java开发中常用CollectionUtils方式,以及Spring中CollectionUtils常用方法示例
java·spring