@@ -296,7 +296,7 @@ private McpNotificationHandler asyncRootsListChangedNotificationHandler(
296
296
List <BiFunction <McpAsyncServerExchange , List <McpSchema .Root >, Mono <Void >>> rootsChangeConsumers ) {
297
297
return (exchange , params ) -> exchange .listRoots ()
298
298
.flatMap (listRootsResult -> Flux .fromIterable (rootsChangeConsumers )
299
- .flatMap (consumer -> consumer .apply (exchange , listRootsResult .roots ()))
299
+ .flatMap (consumer -> Mono . defer (() -> consumer .apply (exchange , listRootsResult .roots () )))
300
300
.onErrorResume (error -> {
301
301
logger .error ("Error handling roots list change notification" , error );
302
302
return Mono .empty ();
@@ -506,7 +506,7 @@ private McpRequestHandler<CallToolResult> toolsCallRequestHandler() {
506
506
return Mono .error (new McpError ("Tool not found: " + callToolRequest .name ()));
507
507
}
508
508
509
- return toolSpecification .map (tool -> tool .callHandler ().apply (exchange , callToolRequest ))
509
+ return toolSpecification .map (tool -> Mono . defer (() -> tool .callHandler ().apply (exchange , callToolRequest ) ))
510
510
.orElse (Mono .error (new McpError ("Tool not found: " + callToolRequest .name ())));
511
511
};
512
512
}
@@ -634,7 +634,7 @@ private McpRequestHandler<McpSchema.ReadResourceResult> resourcesReadRequestHand
634
634
.findFirst ()
635
635
.orElseThrow (() -> new McpError ("Resource not found: " + resourceUri ));
636
636
637
- return specification .readHandler ().apply (exchange , resourceRequest );
637
+ return Mono . defer (() -> specification .readHandler ().apply (exchange , resourceRequest ) );
638
638
};
639
639
}
640
640
@@ -740,7 +740,7 @@ private McpRequestHandler<McpSchema.GetPromptResult> promptsGetRequestHandler()
740
740
return Mono .error (new McpError ("Prompt not found: " + promptRequest .name ()));
741
741
}
742
742
743
- return specification .promptHandler ().apply (exchange , promptRequest );
743
+ return Mono . defer (() -> specification .promptHandler ().apply (exchange , promptRequest ) );
744
744
};
745
745
}
746
746
@@ -845,7 +845,7 @@ private McpRequestHandler<McpSchema.CompleteResult> completionCompleteRequestHan
845
845
return Mono .error (new McpError ("AsyncCompletionSpecification not found: " + request .ref ()));
846
846
}
847
847
848
- return specification .completionHandler ().apply (exchange , request );
848
+ return Mono . defer (() -> specification .completionHandler ().apply (exchange , request ) );
849
849
};
850
850
}
851
851
0 commit comments