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;
}
相关推荐
Bs_MoneyMagnet2 小时前
基于springboot+vue的心理咨询预约与随访平台的设计与实现 源码+文档
vue.js·spring boot·后端·spring·毕业设计·旅游·计算机毕业设计
IT_陈寒3 小时前
Vue的响应式更新把我坑惨了,原来问题出在这
前端·人工智能·后端
陌シ未央ゞ4 小时前
基于BM25算法和RRF实现的混合索引(java版)
人工智能·spring boot·后端·算法
第五页的你4 小时前
SpringBoot基础设施配置(Redis序列化,JJWT新版)
后端
吃饱了得干活4 小时前
RabbitMQ 原理解析(下):存储、集群与可靠投递
后端·rabbitmq
SelectDB4 小时前
某头部保险公司基于 SelectDB 的统一 OLAP 架构实践
后端
ServBay5 小时前
ServBay 1.33.0 来了:AI Gateway 一键接管主流 AI CLI 与多模型
后端·aigc·ai编程
行者全栈架构师5 小时前
Spring Boot 接入 MaxKey 单点登录:6 个内部系统,一次登录全通行
java·vue.js·后端
JuiceFS5 小时前
卓驭:百 PB 级智驾数据存储架构演进
后端·自动驾驶
鱼弦5 小时前
跨模态迁移的极限:语言模型的逻辑能力能否完全迁移到视觉?
后端