Spring AI-63.MCP 客户端启动器文档总结

Spring AI-63.MCP 客户端启动器文档总结

Spring AI 的 MCP 客户端启动器(MCP Client Boot Starter) 提供了在 Spring Boot 应用中集成 Model Context Protocol (MCP) 客户端的自动配置能力,支持同步/异步通信和多种传输协议,适用于连接本地或远程 MCP 服务器。以下是核心内容总结:

一、启动器类型
  1. 标准 MCP 客户端(spring-ai-starter-mcp-client)

    • 支持通过 STDIO(进程内)SSE(HTTP) 传输协议连接 MCP 服务器。
    • 使用 Java HttpClient 实现 SSE 传输,适合传统同步应用。
  2. WebFlux 客户端(spring-ai-starter-mcp-client-webflux)

    • 基于 WebFlux 实现响应式 SSE 传输,适合 Reactive 应用场景。
二、核心配置属性

配置前缀为 spring.ai.mcp.client,关键

<think>我们正在讨论的是如何在Spring Boot项目中引入和使用`spring-ai-starter-mcp-client`这个starter。 根据引用[1]和[3],我们知道: - 这个starter底层基于MCP Java SDK。 - 它提供了自动配置,支持多client实例管理、自动初始化、定制化,并且与Spring AI Tools无缝集成。 - 通过自动配置类`McpClientAutoConfiguration`和`McpToolCallbackAutoConfiguration`来创建客户端和工具回调。 使用步骤: 1. 添加依赖:在项目的pom.xml(Maven)或build.gradle(Gradle)中添加对`spring-ai-starter-mcp-client`的依赖。 2. 配置属性:在application.properties或application.yml中配置MCP客户端的属性,例如服务端地址、传输协议等。 3. 使用自动配置的客户端Spring Boot会自动创建`McpSyncClient`和`McpAsyncClient`的bean,你可以通过注入来使用它们。 4.Spring AI Tools集成:如果需要使用工具回调(Tool Callback),则需确保相关配置启用,并注入`SyncMcpToolCallbackProvider`或`AsyncMcpToolCallbackProvider`。 详细步骤: 第一步:添加依赖 Maven: ```xml <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-client</artifactId> <version>0.8.1</version> <!-- 请使用与Spring AI版本一致的版本 --> </dependency> ``` Gradle: ```groovy implementation 'org.springframework.ai:spring-ai-starter-mcp-client:0.8.1' ``` 第二步:配置属性 在`application.properties`中配置,例如: ```properties # 启用MCP客户端 spring.ai.mcp.client.enabled=true # 配置一个名为default的客户端(可以配置多个,通过名称区分) spring.ai.mcp.client.default.transport=http spring.ai.mcp.client.default.base-url=http://127.0.0.1:8080 ``` 或者使用`application.yml`: ```yaml spring: ai: mcp: client: enabled: true default: # 客户端名称 transport: http base-url: http://127.0.0.1:8080 ``` 注意:可以配置多个客户端,只需要使用不同的名称(如client1, client2)并分别配置。 第三步:使用客户端 在代码中,可以直接注入`McpSyncClient`或`McpAsyncClient`。例如,注入同步客户端: ```java import org.springframework.ai.mcp.client.McpSyncClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class MyService { private final McpSyncClient mcpSyncClient; @Autowired public MyService(McpSyncClient mcpSyncClient) { // 默认情况下,会有一个名为'default'的客户端 this.mcpSyncClient = mcpSyncClient; } public void doSomething() { // 使用客户端进行调用 McpSchema.InitializeResult initializeResult = mcpSyncClient.initialize(); // ... 其他操作 } } ``` 如果有多个客户端,可以通过名称注入。例如,使用`@Qualifier`指定客户端名称: ```java @Service public class MyService { private final McpSyncClient mcpSyncClientClient1; private final McpSyncClient mcpSyncClientClient2; @Autowired public MyService(@Qualifier("client1") McpSyncClient client1, @Qualifier("client2") McpSyncClient client2) { this.mcpSyncClientClient1 = client1; this.mcpSyncClientClient2 = client2; } } ``` 配置多个客户端时,属性配置示例: ```yaml spring: ai: mcp: client: enabled: true client1: transport: http base-url: http://127.0.0.1:8081 client2: transport: http base-url: http://127.0.0.1:8082 ``` 第四步:与Spring AI Tools集成 如果要将MCP客户端用作Tool Callback(即模型调用外部工具),需要启用工具回调配置: ```properties spring.ai.mcp.client.toolcallback.enabled=true ``` 然后在需要使用的地方注入`SyncMcpToolCallbackProvider`(同步)或`AsyncMcpToolCallbackProvider`(异步): ```java @Service public class ToolService { private final SyncMcpToolCallbackProvider syncMcpToolCallbackProvider; @Autowired public ToolService(SyncMcpToolCallbackProvider syncMcpToolCallbackProvider) { this.syncMcpToolCallbackProvider = syncMcpToolCallbackProvider; } // 将这个callback provider设置给ChatClient,这样ChatClient在需要调用工具时会自动使用MCP客户端 } ``` 在配置聊天客户端时,可以添加这个回调提供者: ```java @Bean public ChatClient chatClient(ChatModel chatModel, SyncMcpToolCallbackProvider toolCallbackProvider) { return ChatClient.builder(chatModel) .defaultTools(toolCallbackProvider.getTools()) .build(); } ``` 注意:以上代码示例中,我们假设使用的是同步客户端。如果需要异步,可以类似地使用`McpAsyncClient`和`AsyncMcpToolCallbackProvider`。 总结: 通过添加starter依赖,配置属性,然后在代码中注入客户端即可使用。同时,通过启用工具回调,可以方便地将MCP客户端Spring AI的聊天客户端集成,实现模型调用外部工具的能力。 引用说明: - 引用[1]和[3]提到starter提供了自动配置和管理多个客户端实例的能力,并支持工具集成。 - 引用[2]提到了MCP客户端启动器支持同步/异步通信和多种传输协议。 因此,按照上述步骤即可使用`spring-ai-starter-mcp-client`。 生成相关问题: 1. 如何配置多个MCP客户端实例? 2. 如何在Spring AI中集成MCP客户端作为工具回调? 3. 使用`spring-ai-starter-mcp-client`时,如何选择同步或异步模式? 4. 如何设置MCP客户端的超时等高级配置? 5. 如何扩展MCP客户端以支持自定义传输协议? </think>以下是 `spring-ai-starter-mcp-client` 客户端的完整使用指南,基于 Spring Boot 的自动配置特性实现高效集成: --- ### 一、添加依赖 在 `pom.xml` 中添加 Starter 依赖(需与 Spring AI 版本一致): ```xml <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-client</artifactId> <version>0.8.1</version> <!-- 匹配您的Spring Boot版本 --> </dependency> ``` --- ### 二、基础配置 在 `application.yml` 中配置客户端: ```yaml spring: ai: mcp: client: enabled: true # 单实例配置 default: base-url: http://127.0.0.1:8080 transport: http # 支持 http/sse/websocket connection-timeout: 10s request-timeout: 30s # 多实例配置(可选) weather-service: base-url: http://weather-api:8081 ``` --- ### 三、核心用法 #### 1. 注入同步客户端 ```java @Service public class WeatherService { @Autowired private McpSyncClient mcpSyncClient; // 默认客户端 @Autowired @Qualifier("weather-service") // 指定多实例 private McpSyncClient weatherClient; public String getWeather(String city) { CallToolResponse response = weatherClient.callTool( CallToolRequest.create("getWeatherByCity", Map.of("city", city)) ); return response.getResult(); } } ``` #### 2. 异步客户端调用 ```java @Autowired private McpAsyncClient mcpAsyncClient; public CompletableFuture<String> asyncCall() { return mcpAsyncClient.callTool( CallToolRequest.create("asyncOperation", Map.of("param", "value")) ).thenApply(CallToolResponse::getResult); } ``` #### 3. AI 工具集成(自动回调) 启用工具回调配置: ```yaml spring: ai: mcp: client: toolcallback: enabled: true # 启用AI工具自动回调[^3] ``` 在聊天客户端中自动集成: ```java @Bean public ChatClient chatClient(ChatModel chatModel, SyncMcpToolCallbackProvider toolProvider) { return ChatClient.builder(chatModel) .defaultTools(toolProvider.getTools()) // 自动绑定MCP工具 .build(); } ``` --- ### 四、高级配置 #### 1. 自定义传输协议 ```java @Configuration public class McpConfig { @Bean NamedClientMcpTransport customTransport() { return NamedClientMcpTransport.builder() .name("custom-transport") .factory(params -> new WebSocketClientTransport(params.getBaseUrl())) .build(); } } ``` #### 2. 多实例管理 ```yaml spring: ai: mcp: client: clients: - name: serviceA base-url: http://service-a:8080 - name: serviceB base-url: http://service-b:8081 transport: sse ``` 注入指定实例: ```java @Autowired @Qualifier("serviceB") private McpSyncClient serviceBClient; ``` --- ### 五、执行流程解析 1. **自动配置阶段**: `McpClientAutoConfiguration` 根据属性创建客户端实例[^3] $$ \text{McpClientCommonProperties} \xrightarrow{\text{构建}} \text{List<McpSyncClient>} $$ 2. **工具回调集成**: `McpToolCallbackAutoConfiguration` 创建回调提供者 $$ \text{spring.ai.mcp.client.toolcallback.enabled=true} \Rightarrow \text{SyncMcpToolCallbackProvider} $$ 3. **运行时交互**: ```mermaid sequenceDiagram ChatClient->>+ MCP 服务: 调用指定工具 MCP 服务-->>- ChatClient: 返回结构化响应 ``` --- ### 常见问题解决 1. **连接失败**:检查 `base-url` 和网络策略 2. **工具未注册**:确认服务端已实现对应工具 3. **超时调整**:增大 `request-timeout` 值 4. **多实例冲突**:使用 `@Qualifier` 精确注入 > 最佳实践:生产环境建议启用 SSE 传输协议实现双向通信[^2] --- ### 相关问题 1. 如何为不同的 MCP 服务配置独立的超时设置? 2.Spring AI 中如何监控 MCP 客户端的调用性能? 3. 如何扩展 `McpToolCallbackProvider` 实现自定义工具路由逻辑? 4. MCP 客户端Spring Cloud LoadBalancer 如何集成实现负载均衡? 5. 如何为 MCP 通信添加 OAuth2 安全认证? [^1]: SpringAIMCP Client Boot Starter 提供多实例管理和自动初始化能力 [^2]: 支持同步/异步通信和多种传输协议配置 [^3]: 通过 `McpToolCallbackAutoConfiguration` 实现与 AI Tools 的无缝集成
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员勇哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值