@@ -138,7 +138,10 @@ public Mono<Void> connect(Function<Mono<McpSchema.JSONRPCMessage>, Mono<McpSchem
138138 this .handler .set (handler );
139139 if (openConnectionOnStartup ) {
140140 logger .debug ("Eagerly opening connection on startup" );
141- return this .reconnect (null ).then ();
141+ return this .reconnect (null ).onErrorComplete (t -> {
142+ logger .warn ("Eager connect failed " , t );
143+ return true ;
144+ }).then ();
142145 }
143146 return Mono .empty ();
144147 });
@@ -151,26 +154,14 @@ private DefaultMcpTransportSession createTransportSession() {
151154 }
152155
153156 private Publisher <Void > createDelete (String sessionId ) {
154-
155- return Mono .defer (() -> { // Do we need to defer this?
156-
157- HttpRequest request = this .requestBuilder .copy ()
158- .uri (Utils .resolveUri (this .baseUri , this .endpoint ))
159- .header ("Cache-Control" , "no-cache" )
160- .header ("mcp-session-id" , sessionId )
161- .DELETE ()
162- .build ();
163-
164- return Mono .fromFuture (() -> this .httpClient .sendAsync (request , HttpResponse .BodyHandlers .ofString ())
165- .whenComplete ((response , throwable ) -> {
166- if (throwable != null ) {
167- logger .warn ("Error sending message" , throwable );
168- }
169- else {
170- logger .debug ("SSE connection established successfully" );
171- }
172- })).doOnError (e -> logger .warn ("Got error when closing transport" , e )).then ();
173- });
157+ HttpRequest request = this .requestBuilder .copy ()
158+ .uri (Utils .resolveUri (this .baseUri , this .endpoint ))
159+ .header ("Cache-Control" , "no-cache" )
160+ .header ("mcp-session-id" , sessionId )
161+ .DELETE ()
162+ .build ();
163+
164+ return Mono .fromFuture (() -> this .httpClient .sendAsync (request , HttpResponse .BodyHandlers .ofString ())).then ();
174165 }
175166
176167 @ Override
@@ -238,7 +229,6 @@ private Mono<Disposable> reconnect(McpTransportStream<Disposable> stream) {
238229 .sendAsync (request , responseInfo -> ResponseSubscribers .sseToBodySubscriber (responseInfo , sseSink ))
239230 .whenComplete ((response , throwable ) -> {
240231 if (throwable != null ) {
241- logger .warn ("Error sending message" , throwable );
242232 sseSink .error (throwable );
243233 }
244234 else {
@@ -378,13 +368,12 @@ public Mono<Void> sendMessage(McpSchema.JSONRPCMessage sendMessage) {
378368 Mono .fromFuture (this .httpClient .sendAsync (request , this .toSendMessageBodySubscriber (responseEventSink ))
379369 .whenComplete ((response , throwable ) -> {
380370 if (throwable != null ) {
381- logger .warn ("Error sending message" , throwable );
382371 responseEventSink .error (throwable );
383372 }
384373 else {
385374 logger .debug ("SSE connection established successfully" );
386375 }
387- })).subscribe ();
376+ })).onErrorComplete (). subscribe ();
388377
389378 }).flatMap (responseEvent -> {
390379 if (transportSession .markInitialized (
@@ -467,12 +456,12 @@ else if (statusCode == BAD_REQUEST) {
467456
468457 return Flux .<McpSchema .JSONRPCMessage >error (
469458 new RuntimeException ("Failed to send message: " + responseEvent ));
470- }).flatMap (jsonRpcMessage -> this .handler .get ().apply (Mono .just (jsonRpcMessage ))).onErrorResume (t -> {
459+ }).flatMap (jsonRpcMessage -> this .handler .get ().apply (Mono .just (jsonRpcMessage ))).onErrorComplete (t -> {
471460 // handle the error first
472461 this .handleException (t );
473462 // inform the caller of sendMessage
474463 messageSink .error (t );
475- return Flux . empty () ;
464+ return true ;
476465 }).doFinally (s -> {
477466 logger .debug ("SendMessage finally: {}" , s );
478467 Disposable ref = disposableRef .getAndSet (null );
0 commit comments