@@ -185,7 +185,7 @@ public Mono<Void> connect(final Function<Mono<McpSchema.JSONRPCMessage>, Mono<Mc
185
185
fallbackToSse .set (true );
186
186
return sseClientTransport .connect (handler );
187
187
}
188
- return handleStreamingResponse (handler , response );
188
+ return handleStreamingResponse (response , handler );
189
189
})
190
190
.retryWhen (Retry .backoff (3 , Duration .ofSeconds (3 )).filter (err -> err instanceof IllegalStateException ))
191
191
.doOnSuccess (v -> state .set (TransportState .CONNECTED ))
@@ -198,6 +198,11 @@ public Mono<Void> connect(final Function<Mono<McpSchema.JSONRPCMessage>, Mono<Mc
198
198
199
199
@ Override
200
200
public Mono <Void > sendMessage (final McpSchema .JSONRPCMessage message ) {
201
+ return sendMessage (message , msg -> msg );
202
+ }
203
+
204
+ public Mono <Void > sendMessage (final McpSchema .JSONRPCMessage message ,
205
+ final Function <Mono <McpSchema .JSONRPCMessage >, Mono <McpSchema .JSONRPCMessage >> handler ) {
201
206
if (fallbackToSse .get ()) {
202
207
return sseClientTransport .sendMessage (message );
203
208
}
@@ -206,7 +211,7 @@ public Mono<Void> sendMessage(final McpSchema.JSONRPCMessage message) {
206
211
return Mono .empty ();
207
212
}
208
213
209
- return sentPost (message ).onErrorResume (e -> {
214
+ return sentPost (message , handler ).onErrorResume (e -> {
210
215
LOGGER .error ("Streamable transport sendMessage error" , e );
211
216
return Mono .error (e );
212
217
});
@@ -217,7 +222,8 @@ public Mono<Void> sendMessage(final McpSchema.JSONRPCMessage message) {
217
222
* @param messages the list of messages to send
218
223
* @return a Mono that completes when all messages have been sent
219
224
*/
220
- public Mono <Void > sendMessages (final List <McpSchema .JSONRPCMessage > messages ) {
225
+ public Mono <Void > sendMessages (final List <McpSchema .JSONRPCMessage > messages ,
226
+ final Function <Mono <McpSchema .JSONRPCMessage >, Mono <McpSchema .JSONRPCMessage >> handler ) {
221
227
if (fallbackToSse .get ()) {
222
228
return Flux .fromIterable (messages ).flatMap (this ::sendMessage ).then ();
223
229
}
@@ -226,13 +232,14 @@ public Mono<Void> sendMessages(final List<McpSchema.JSONRPCMessage> messages) {
226
232
return Mono .empty ();
227
233
}
228
234
229
- return sentPost (messages ).onErrorResume (e -> {
235
+ return sentPost (messages , handler ).onErrorResume (e -> {
230
236
LOGGER .error ("Streamable transport sendMessages error" , e );
231
237
return Mono .error (e );
232
238
});
233
239
}
234
240
235
- private Mono <Void > sentPost (final Object msg ) {
241
+ private Mono <Void > sentPost (final Object msg ,
242
+ final Function <Mono <McpSchema .JSONRPCMessage >, Mono <McpSchema .JSONRPCMessage >> handler ) {
236
243
return serializeJson (msg ).flatMap (json -> {
237
244
final HttpRequest request = requestBuilder .copy ()
238
245
.POST (HttpRequest .BodyPublishers .ofString (json ))
@@ -265,7 +272,7 @@ private Mono<Void> sentPost(final Object msg) {
265
272
.error (new IllegalArgumentException ("Unexpected status code: " + response .statusCode ()));
266
273
}
267
274
268
- return handleStreamingResponse (it -> it , response );
275
+ return handleStreamingResponse (response , handler );
269
276
});
270
277
});
271
278
@@ -286,9 +293,8 @@ private Mono<String> serializeJson(final Object input) {
286
293
}
287
294
}
288
295
289
- private Mono <Void > handleStreamingResponse (
290
- final Function <Mono <McpSchema .JSONRPCMessage >, Mono <McpSchema .JSONRPCMessage >> handler ,
291
- final HttpResponse <InputStream > response ) {
296
+ private Mono <Void > handleStreamingResponse (final HttpResponse <InputStream > response ,
297
+ final Function <Mono <McpSchema .JSONRPCMessage >, Mono <McpSchema .JSONRPCMessage >> handler ) {
292
298
final String contentType = response .headers ().firstValue ("Content-Type" ).orElse ("" );
293
299
if (contentType .contains ("application/json-seq" )) {
294
300
return handleJsonStream (response , handler );
@@ -386,6 +392,9 @@ else if (node.isObject()) {
386
392
@ Override
387
393
public Mono <Void > closeGracefully () {
388
394
state .set (TransportState .CLOSED );
395
+ if (fallbackToSse .get ()) {
396
+ return sseClientTransport .closeGracefully ();
397
+ }
389
398
return Mono .empty ();
390
399
}
391
400
0 commit comments