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.yml 和 mcp-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 交互 :通过 stdio 或 SSE 建立连接,客户端请求工具列表并调用工具。比如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;
}
相关推荐
Joy T6 小时前
Spring AI 项目中的 pom.xml、application.yml 与 Nacos:从依赖管理到运行配置
spring·nacos·pom.xml·profile·参数配置·application.yml
刚子编程8 小时前
我用 ASP.NET Core 做了个水稻病虫害检查系统
后端·asp.net
谢亮_vipxieliang8 小时前
用 PHP 构建轻量级 REST API:从路由到鉴权的完整实践
开发语言·后端·php
码事漫谈10 小时前
三步改掉 AI 味,附可直接复制的去 AI 味提示词
后端
IT_陈寒11 小时前
Redis卡顿的锅,这次真不是大key的错
前端·人工智能·后端
可乐鸡翅yeah_11 小时前
video.js 集成 hls.js 开发 M3U8 播放器,新手高频踩坑
开发语言·前端·javascript·后端·ecmascript·m3u8·音视频在线播放
程序猿_极客11 小时前
【免费】分享一套优质的基于SpringBoot的服装商城管理系统的设计与实现(带可视化图表、协同过滤功能),源码+文档+视频详解(讲解)
java·spring boot·后端·服装商城管理系统
明月_清风11 小时前
面对陌生的 GitHub 项目无从下手?这 4 个网站帮你快速读懂源码
前端·后端·github
bug菌12 小时前
🤔同事突然问我:Spring的注解 @Component 和 @Service 有何不同?
java·spring boot·后端