From 054e52498199ddaee6928345fdd7894741805cfc Mon Sep 17 00:00:00 2001 From: elvis Date: Wed, 12 Nov 2025 14:49:26 +1100 Subject: [PATCH 1/2] BE: Handle Flux response bodies in MCP tool call results --- .../kafbat/ui/service/mcp/McpSpecificationGenerator.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/io/kafbat/ui/service/mcp/McpSpecificationGenerator.java b/api/src/main/java/io/kafbat/ui/service/mcp/McpSpecificationGenerator.java index 699d20bdc..cce1fe1ae 100644 --- a/api/src/main/java/io/kafbat/ui/service/mcp/McpSpecificationGenerator.java +++ b/api/src/main/java/io/kafbat/ui/service/mcp/McpSpecificationGenerator.java @@ -93,7 +93,12 @@ private Mono toCallResult(Object result) { private Mono reponseToCallResult(ResponseEntity response) { HttpStatusCode statusCode = response.getStatusCode(); if (statusCode.is2xxSuccessful() || statusCode.is1xxInformational()) { - return Mono.just(this.callToolResult(response.getBody())); + Object body = response.getBody(); + // Handle Flux response bodies by collecting them into a list + if (body instanceof Flux flux) { + return flux.collectList().map(this::callToolResult); + } + return Mono.just(this.callToolResult(body)); } else { try { return Mono.just(toErrorResult(objectMapper.writeValueAsString(response.getBody()))); From 08ee527291ed0dd4ce773db5c59bf7798995ffc9 Mon Sep 17 00:00:00 2001 From: elvis Date: Thu, 13 Nov 2025 15:32:47 +1100 Subject: [PATCH 2/2] Refactor Flux response body handling in McpSpecificationGenerator --- .../kafbat/ui/service/mcp/McpSpecificationGenerator.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/api/src/main/java/io/kafbat/ui/service/mcp/McpSpecificationGenerator.java b/api/src/main/java/io/kafbat/ui/service/mcp/McpSpecificationGenerator.java index cce1fe1ae..d5d78e032 100644 --- a/api/src/main/java/io/kafbat/ui/service/mcp/McpSpecificationGenerator.java +++ b/api/src/main/java/io/kafbat/ui/service/mcp/McpSpecificationGenerator.java @@ -93,12 +93,7 @@ private Mono toCallResult(Object result) { private Mono reponseToCallResult(ResponseEntity response) { HttpStatusCode statusCode = response.getStatusCode(); if (statusCode.is2xxSuccessful() || statusCode.is1xxInformational()) { - Object body = response.getBody(); - // Handle Flux response bodies by collecting them into a list - if (body instanceof Flux flux) { - return flux.collectList().map(this::callToolResult); - } - return Mono.just(this.callToolResult(body)); + return toCallResult(response.getBody()); } else { try { return Mono.just(toErrorResult(objectMapper.writeValueAsString(response.getBody())));