agentscope-ai/agentscope-java

[Bug] Failed to initialize MCP client: business-knowledge-query

Open

#885 opened on Mar 6, 2026

View on GitHub
 (0 comments) (0 reactions) (0 assignees)Java (3,253 stars) (693 forks)user submission
bughelp wanted

Description

Describe the bug sse

To Reproduce Steps to reproduce the behavior:

public class DirectMcpExample {

public static void main(String[] args) {
    try (McpClientWrapper client = createMcpClient()) {
        System.out.println("MCP客户端创建成功");

        // 注册MCP工具
        Toolkit toolkit = new Toolkit();
        toolkit.registerMcpClient(client)
                .doOnSuccess(c -> System.out.println("MCP工具注册成功: " + client.getName()))
                .block();

        // 获取并显示工具列表
        client.listTools()
                .doOnNext(tools -> {
                    System.out.println("可用工具数量: " + tools.size());
                    tools.forEach(tool ->
                            System.out.println("  - " + tool.name() + ": " + tool.description())
                    );
                })
                .block();

        System.out.println("测试完成");
    } catch (Exception e) {
        System.err.println("操作失败: " + e.getMessage());
    }
}

/**
 * 创建MCP客户端
 */
private static McpClientWrapper createMcpClient() {
    String clientName = "business-knowledge-query";
    String url = "http://xxxxx.com/mcp/abc/sse";

    return McpClientBuilder.create(clientName)
            .sseTransport(url)
            .initializationTimeout(Duration.ofSeconds(10))
            .buildSync();
}

}

Expected behavior A clear and concise description of what you expected to happen.

Error messages Detailed error messages. MCP客户端创建成功 16:48:32.298 [main] INFO io.agentscope.core.tool.McpClientManager -- Registering MCP client: business-knowledge-query 16:48:32.299 [main] INFO io.agentscope.core.tool.mcp.McpSyncClientWrapper -- Initializing MCP sync client: business-knowledge-query 16:48:32.467 [HttpClient-1-Worker-0] ERROR io.modelcontextprotocol.client.transport.HttpClientSseClientTransport -- Error sending message: Absolute endpoint URL does not match the base URL. 16:48:32.468 [boundedElastic-1] ERROR io.agentscope.core.tool.mcp.McpSyncClientWrapper -- Failed to initialize MCP client: business-knowledge-query java.lang.RuntimeException: Client failed to initialize by explicit API call at io.modelcontextprotocol.client.LifecycleInitializer.lambda$withInitialization$2(LifecycleInitializer.java:288) at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94) at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124) at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.onError(FluxTimeout.java:220) at reactor.core.publisher.FluxMap$MapSubscriber.onError(FluxMap.java:134) at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106) at reactor.core.publisher.Operators.error(Operators.java:198) at reactor.core.publisher.MonoError.subscribe(MonoError.java:53) at reactor.core.publisher.Mono.subscribe(Mono.java:4512) at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103) at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onError(FluxPeekFuseable.java:234) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:180) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:180) at reactor.core.publisher.FluxHandle$HandleSubscriber.onError(FluxHandle.java:213) at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124) at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.onError(FluxTimeout.java:220) at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:205) at io.modelcontextprotocol.spec.McpClientSession.lambda$sendRequest$9(McpClientSession.java:274) at reactor.core.publisher.LambdaMonoSubscriber.doError(LambdaMonoSubscriber.java:155) at reactor.core.publisher.LambdaMonoSubscriber.onError(LambdaMonoSubscriber.java:150) at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121) at reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onError(MonoIgnoreElements.java:84) at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241) at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onError(MonoPeekTerminal.java:258) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:136) at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2571) at reactor.core.publisher.MonoFlatMap$FlatMapMain.request(MonoFlatMap.java:194) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.request(MonoPeekTerminal.java:139) at reactor.core.publisher.MonoFlatMap$FlatMapInner.onSubscribe(MonoFlatMap.java:291) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onSubscribe(MonoPeekTerminal.java:152) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onSubscribe(MonoFlatMap.java:117) at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:165) at reactor.core.publisher.Operators$MonoInnerProducerBase.complete(Operators.java:2812) at reactor.core.publisher.SinkOneMulticast.tryEmitValue(SinkOneMulticast.java:66) at reactor.core.publisher.SinkOneSerialized.tryEmitValue(SinkOneSerialized.java:38) at io.modelcontextprotocol.client.transport.HttpClientSseClientTransport.lambda$connect$5(HttpClientSseClientTransport.java:368) at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:388) at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) at reactor.core.publisher.FluxCreate$BufferAsyncSink.drain(FluxCreate.java:880) at reactor.core.publisher.FluxCreate$BufferAsyncSink.next(FluxCreate.java:805) at reactor.core.publisher.FluxCreate$SerializedFluxSink.next(FluxCreate.java:163) at io.modelcontextprotocol.client.transport.ResponseSubscribers$SseLineSubscriber.hookOnNext(ResponseSubscribers.java:150) at io.modelcontextprotocol.client.transport.ResponseSubscribers$SseLineSubscriber.hookOnNext(ResponseSubscribers.java:72) at reactor.core.publisher.BaseSubscriber.onNext(BaseSubscriber.java:160) at org.reactivestreams.FlowAdapters$FlowToReactiveSubscriber.onNext(FlowAdapters.java:211) at java.net.http/jdk.internal.net.http.LineSubscriberAdapter$LineSubscription.loop(LineSubscriberAdapter.java:447) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:205) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:230) at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:303) at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:256) at java.net.http/jdk.internal.net.http.LineSubscriberAdapter$LineSubscription.submit(LineSubscriberAdapter.java:188) at java.net.http/jdk.internal.net.http.LineSubscriberAdapter.onNext(LineSubscriberAdapter.java:95) at java.net.http/jdk.internal.net.http.LineSubscriberAdapter.onNext(LineSubscriberAdapter.java:53) at java.net.http/jdk.internal.net.http.Http1Response$Http1BodySubscriber.onNext(Http1Response.java:382) at java.net.http/jdk.internal.net.http.Http1Response$Http1BodySubscriber.onNext(Http1Response.java:297) at java.net.http/jdk.internal.net.http.ResponseContent$ChunkedBodyParser.accept(ResponseContent.java:229) at java.net.http/jdk.internal.net.http.ResponseContent$ChunkedBodyParser.accept(ResponseContent.java:129) at java.net.http/jdk.internal.net.http.Http1Response$BodyReader.handle(Http1Response.java:790) at java.net.http/jdk.internal.net.http.Http1Response$BodyReader.handle(Http1Response.java:720) at java.net.http/jdk.internal.net.http.Http1Response$Receiver.accept(Http1Response.java:612) at java.net.http/jdk.internal.net.http.Http1Response$BodyReader.tryAsyncReceive(Http1Response.java:750) at java.net.http/jdk.internal.net.http.Http1AsyncReceiver.flush(Http1AsyncReceiver.java:233) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:205) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$TryEndDeferredCompleter.complete(SequentialScheduler.java:347) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:151) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:230) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833) Suppressed: java.lang.Exception: #block terminated with an error at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:103) at reactor.core.publisher.Mono.block(Mono.java:1728) at io.modelcontextprotocol.client.McpSyncClient.initialize(McpSyncClient.java:189) at io.agentscope.core.tool.mcp.McpSyncClientWrapper.lambda$initialize$1(McpSyncClientWrapper.java:78) at reactor.core.publisher.MonoCallable.call(MonoCallable.java:72) at reactor.core.publisher.FluxSubscribeOnCallable$CallableSubscribeOnSubscription.run(FluxSubscribeOnCallable.java:228) at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ... 3 common frames omitted Caused by: java.lang.IllegalArgumentException: Absolute endpoint URL does not match the base URL. at io.modelcontextprotocol.util.Utils.resolveUri(Utils.java:77) at io.modelcontextprotocol.client.transport.HttpClientSseClientTransport.sendHttpPost(HttpClientSseClientTransport.java:467) at io.modelcontextprotocol.client.transport.HttpClientSseClientTransport.lambda$sendMessage$12(HttpClientSseClientTransport.java:435) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:132) ... 49 common frames omitted 16:48:32.470 [boundedElastic-1] ERROR io.agentscope.core.tool.McpClientManager -- Failed to register MCP client: business-knowledge-query java.lang.RuntimeException: Client failed to initialize by explicit API call at io.modelcontextprotocol.client.LifecycleInitializer.lambda$withInitialization$2(LifecycleInitializer.java:288) at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94) at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124) at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.onError(FluxTimeout.java:220) at reactor.core.publisher.FluxMap$MapSubscriber.onError(FluxMap.java:134) at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106) at reactor.core.publisher.Operators.error(Operators.java:198) at reactor.core.publisher.MonoError.subscribe(MonoError.java:53) at reactor.core.publisher.Mono.subscribe(Mono.java:4512) at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103) at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onError(FluxPeekFuseable.java:234) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:180) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:180) at reactor.core.publisher.FluxHandle$HandleSubscriber.onError(FluxHandle.java:213) at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124) at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.onError(FluxTimeout.java:220) at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:205) at io.modelcontextprotocol.spec.McpClientSession.lambda$sendRequest$9(McpClientSession.java:274) at reactor.core.publisher.LambdaMonoSubscriber.doError(LambdaMonoSubscriber.java:155) at reactor.core.publisher.LambdaMonoSubscriber.onError(LambdaMonoSubscriber.java:150) at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121) at reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onError(MonoIgnoreElements.java:84) at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241) at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onError(MonoPeekTerminal.java:258) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:136) at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2571) at reactor.core.publisher.MonoFlatMap$FlatMapMain.request(MonoFlatMap.java:194) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.request(MonoPeekTerminal.java:139) at reactor.core.publisher.MonoFlatMap$FlatMapInner.onSubscribe(MonoFlatMap.java:291) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onSubscribe(MonoPeekTerminal.java:152) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onSubscribe(MonoFlatMap.java:117) at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:165) at reactor.core.publisher.Operators$MonoInnerProducerBase.complete(Operators.java:2812) at reactor.core.publisher.SinkOneMulticast.tryEmitValue(SinkOneMulticast.java:66) at reactor.core.publisher.SinkOneSerialized.tryEmitValue(SinkOneSerialized.java:38) at io.modelcontextprotocol.client.transport.HttpClientSseClientTransport.lambda$connect$5(HttpClientSseClientTransport.java:368) at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:388) at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) at reactor.core.publisher.FluxCreate$BufferAsyncSink.drain(FluxCreate.java:880) at reactor.core.publisher.FluxCreate$BufferAsyncSink.next(FluxCreate.java:805) at reactor.core.publisher.FluxCreate$SerializedFluxSink.next(FluxCreate.java:163) at io.modelcontextprotocol.client.transport.ResponseSubscribers$SseLineSubscriber.hookOnNext(ResponseSubscribers.java:150) at io.modelcontextprotocol.client.transport.ResponseSubscribers$SseLineSubscriber.hookOnNext(ResponseSubscribers.java:72) at reactor.core.publisher.BaseSubscriber.onNext(BaseSubscriber.java:160) at org.reactivestreams.FlowAdapters$FlowToReactiveSubscriber.onNext(FlowAdapters.java:211) at java.net.http/jdk.internal.net.http.LineSubscriberAdapter$LineSubscription.loop(LineSubscriberAdapter.java:447) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:205) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:230) at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:303) at java.net.http/jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(SequentialScheduler.java:256) at java.net.http/jdk.internal.net.http.LineSubscriberAdapter$LineSubscription.submit(LineSubscriberAdapter.java:188) at java.net.http/jdk.internal.net.http.LineSubscriberAdapter.onNext(LineSubscriberAdapter.java:95) at java.net.http/jdk.internal.net.http.LineSubscriberAdapter.onNext(LineSubscriberAdapter.java:53) at java.net.http/jdk.internal.net.http.Http1Response$Http1BodySubscriber.onNext(Http1Response.java:382) at java.net.http/jdk.internal.net.http.Http1Response$Http1BodySubscriber.onNext(Http1Response.java:297) at java.net.http/jdk.internal.net.http.ResponseContent$ChunkedBodyParser.accept(ResponseContent.java:229) at java.net.http/jdk.internal.net.http.ResponseContent$ChunkedBodyParser.accept(ResponseContent.java:129) at java.net.http/jdk.internal.net.http.Http1Response$BodyReader.handle(Http1Response.java:790) at java.net.http/jdk.internal.net.http.Http1Response$BodyReader.handle(Http1Response.java:720) at java.net.http/jdk.internal.net.http.Http1Response$Receiver.accept(Http1Response.java:612) at java.net.http/jdk.internal.net.http.Http1Response$BodyReader.tryAsyncReceive(Http1Response.java:750) at java.net.http/jdk.internal.net.http.Http1AsyncReceiver.flush(Http1AsyncReceiver.java:233) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:205) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$TryEndDeferredCompleter.complete(SequentialScheduler.java:347) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:151) at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:230) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833) Suppressed: java.lang.Exception: #block terminated with an error at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:103) at reactor.core.publisher.Mono.block(Mono.java:1728) at io.modelcontextprotocol.client.McpSyncClient.initialize(McpSyncClient.java:189) at io.agentscope.core.tool.mcp.McpSyncClientWrapper.lambda$initialize$1(McpSyncClientWrapper.java:78) at reactor.core.publisher.MonoCallable.call(MonoCallable.java:72) at reactor.core.publisher.FluxSubscribeOnCallable$CallableSubscribeOnSubscription.run(FluxSubscribeOnCallable.java:228) at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ... 3 common frames omitted Caused by: java.lang.IllegalArgumentException: Absolute endpoint URL does not match the base URL. at io.modelcontextprotocol.util.Utils.resolveUri(Utils.java:77) at io.modelcontextprotocol.client.transport.HttpClientSseClientTransport.sendHttpPost(HttpClientSseClientTransport.java:467) at io.modelcontextprotocol.client.transport.HttpClientSseClientTransport.lambda$sendMessage$12(HttpClientSseClientTransport.java:435) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:132) ... 49 common frames omitted 16:48:32.470 [main] INFO io.agentscope.core.tool.mcp.McpSyncClientWrapper -- Closing MCP sync client: business-knowledge-query 操作失败: Client failed to initialize by explicit API call

Environment (please complete the following information):

AgentScope-Java Version: [e.g. 1.0.9,

  • Java Version: [e.g. 17]
  • OS: [e.g. macos]

Additional context curl -v http://xxxxx.com/mcp/abc/sse

GET /mcp/abc/sse HTTP/1.1 Host: xxxxx.com User-Agent: curl/8.7.1 Accept: /

Contributor guide