You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MCP客户端McpAsyncClient依赖缺失,无法初始化问题求助

Spring MCP客户端McpAsyncClient Bean缺失问题排查与修复

问题背景

我正在尝试使用Spring MCP功能,本地8080端口已启动带有两个基础工具的MCP服务器。现在想搭建简单MCP客户端与服务器连接,不使用ChatClient,手动探索CallToolRequest/Response方法,但配置好属性后,McpAsyncClient未被初始化,出现Bean依赖缺失错误。

现有代码与配置

启动类代码

package com.saurabh.learn;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MCPClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(MCPClientApplication.class, args);
    }
}

MCP控制器代码

package com.saurabh.learn.controllers;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import io.modelcontextprotocol.client.McpAsyncClient;
import io.modelcontextprotocol.spec.McpSchema.CallToolRequest;
import io.modelcontextprotocol.spec.McpSchema.CallToolResult;
import jakarta.annotation.PostConstruct;
import reactor.core.publisher.Mono;;

@Component
public class MCPController {

    @Autowired
    McpAsyncClient mcpClient;

    public MCPController(McpAsyncClient mcpClient) {
        this.mcpClient = mcpClient;
        System.out.println("Async MCP client: " + this.mcpClient);
    }

    public void callToolDirectly() {
        CallToolRequest toolCallRequest = new CallToolRequest("getPersonById", Map.of("id", 3146644));
        Mono<CallToolResult> toolCallResponse = mcpClient.callTool(toolCallRequest);

        System.out.println("Tool call response: " + toolCallResponse.block());
    }
}

配置文件

spring.application.name=learn
server.port= 8090
spring.ai.mcp.client.name=learn-mcp-client
spring.ai.mcp.client.version=1.0.0
spring.ai.mcp.client.initialized=true
spring.ai.mcp.client.sse.connections.mcp-server.url=http://localhost:8080
spring.ai.mcp.client.sse.connections.mcp-server.sse-endpoint=/sse

# tried below way as well
# spring.ai.mcp.client.sse.connections.[mcp-server].url=http://localhost:8080
# spring.ai.mcp.client.sse.connections.[mcp-server].sse-endpoint=/sse

spring.ai.mcp.client.enabled=true
spring.ai.mcp.client.type=ASYNC

问题排查与修复步骤

1. 确认依赖是否正确引入

Spring AI MCP Client的自动配置依赖对应的starter包,需确保构建文件中包含该依赖:

Maven(pom.xml)

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-mcp-client</artifactId>
    <!-- 使用与你的Spring Boot版本匹配的Spring AI版本 -->
    <version>1.0.0-M1</version>
</dependency>

Gradle(build.gradle)

implementation 'org.springframework.ai:spring-ai-mcp-client:1.0.0-M1'

2. 修复Bean注入方式

你的MCPController同时使用了构造函数注入和字段@Autowired,这种冗余写法会导致Spring无法正确解析依赖注入逻辑。只需保留构造函数注入即可:

修改后的MCPController代码:

package com.saurabh.learn.controllers;

import java.util.Map;

import org.springframework.stereotype.Component;
import io.modelcontextprotocol.client.McpAsyncClient;
import io.modelcontextprotocol.spec.McpSchema.CallToolRequest;
import io.modelcontextprotocol.spec.McpSchema.CallToolResult;
import jakarta.annotation.PostConstruct;
import reactor.core.publisher.Mono;;

@Component
public class MCPController {

    private final McpAsyncClient mcpClient;

    // 仅保留构造函数注入,移除字段上的@Autowired
    public MCPController(McpAsyncClient mcpClient) {
        this.mcpClient = mcpClient;
        System.out.println("Async MCP client: " + this.mcpClient);
    }

    public void callToolDirectly() {
        CallToolRequest toolCallRequest = new CallToolRequest("getPersonById", Map.of("id", 3146644));
        Mono<CallToolResult> toolCallResponse = mcpClient.callTool(toolCallRequest);

        System.out.println("Tool call response: " + toolCallResponse.block());
    }

    // 可选:添加PostConstruct触发调用,验证连接
    @PostConstruct
    public void init() {
        callToolDirectly();
    }
}

3. 简化配置文件

配置中的部分属性为默认值,可简化以避免冲突:

spring.application.name=learn
server.port=8090
spring.ai.mcp.client.name=learn-mcp-client
spring.ai.mcp.client.version=1.0.0
spring.ai.mcp.client.sse.connections.mcp-server.url=http://localhost:8080
spring.ai.mcp.client.sse.connections.mcp-server.sse-endpoint=/sse
spring.ai.mcp.client.enabled=true
spring.ai.mcp.client.type=ASYNC

注:spring.ai.mcp.client.initialized默认值为true,无需显式配置。

4. 验证自动配置是否生效

确保@SpringBootApplication注解的扫描范围包含org.springframework.ai.mcp包,默认情况下@SpringBootApplication会自动扫描所有自动配置类,只要依赖正确,McpAsyncClientAutoConfiguration会自动创建McpAsyncClient Bean。

内容的提问来源于stack exchange,提问作者Saurabh Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 07:43:20