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;
}
相关推荐
I'm Jie4 分钟前
告别重复编码!SpringBoot 字段变更(新旧值)日志工具类的规范化设计与优雅实现
java·spring boot·后端
小马爱打代码15 分钟前
Spring AI:提示词工程 - Prompt 角色分类(系统角色与用户角色)
人工智能·spring·prompt
小马爱打代码16 分钟前
Spring AI:多模态 AI 大模型
java·人工智能·spring
开心猴爷20 分钟前
Bundle Id 创建与管理的工程化方法,一次团队多项目协作中的流程重构
后端
databook21 分钟前
用样本猜总体的秘密武器,4大抽样分布总结
后端·python·数据分析
sg_knight28 分钟前
SSE 技术实现前后端实时数据同步
java·前端·spring boot·spring·web·sse·数据同步
小坏讲微服务1 小时前
SpringBoot4.0整合Scala完整使用
java·开发语言·spring boot·后端·scala·mybatis
泉城老铁1 小时前
windows服务器mysql数据库备份脚本
java·后端·mysql
却尘1 小时前
用 25 个概念彻底看懂SQL多维分析的底层逻辑
后端·sql·mysql
白衣鸽子1 小时前
JsonUtils:打造企业级的序列化与反序列化瑞士军刀
后端·开源