Please do a quick search on GitHub issues first, there might be already a duplicate issue for the one you are about to create. If the bug is trivial, just go ahead and create the issue. Otherwise, please take a few moments and fill in the following sections:

Bug description When using return direct = true with multiple tools . For ex: date tool and time tool. The simple logger prints 2 results: one for date , other for time. But at the end only top one is being returned to client.

Environment Spring AI 1.0.3

Steps to reproduce Make two return direct tools .And ask question to get both.

@Tool(name = "timeTool", description = "This tool returns the current time", returnDirect = true)
    public String timeTool() {
        return "The current time is: " + java.time.LocalTime.now();
    }

    @Tool(name = "dateTool", description = "This tool returns today's date." , returnDirect =true)
    public String dateTool() {
        return "Today's date is: " + java.time.LocalDate.now();
    }

Expected behavior Both result should be sent back, time is --- and date is ---. Instead of just "Today's date is: 2025-10-17"

** Given logger Output **


  "results" : [ {
    "output" : {
      "messageType" : "ASSISTANT",
      "metadata" : {
        "messageType" : "ASSISTANT"
      },
      "toolCalls" : [ ],
      "media" : [ ],
      "text" : "\"Today's date is: 2025-10-17\""
    },
    "metadata" : {
      "finishReason" : "returnDirect",
      "contentFilters" : [ ],
      "empty" : false
    }
  }, {
    "output" : {
      "messageType" : "ASSISTANT",
      "metadata" : {
        "messageType" : "ASSISTANT"
      },
      "toolCalls" : [ ],
      "media" : [ ],
      "text" : "\"The current time is: 08:35:07.786375\""
    },
    "metadata" : {
      "finishReason" : "returnDirect",
      "contentFilters" : [ ],
      "empty" : false
    }


2025-10-17T08:35:07.788-04:00  INFO 19548 --- [toolservice] [nio-8090-exec-5] c.a.c.o.s.g.basic.ToolsServ     : "Today's date is: 2025-10-17"

Comment From: leelance

I tried to reproduce the issue based on your configuration, but I couldn’t replicate it. The sample code is as follows:

Client .e.g.

@Slf4j
@Service
public class ChatClientService {
  private final ChatClient chatClient;

  public ChatClientService(ChatClient.Builder chatClientBuilder, List<McpSyncClient> mcpSyncClients) {
    this.chatClient = chatClientBuilder
        .defaultToolCallbacks(new SyncMcpToolCallbackProvider(mcpSyncClients))
        .build();
  }

  public String ask(String question) {
    return chatClient.prompt(question).call().content();
  }
}
@Slf4j
@SpringBootTest
class ChatClientServiceTests {
  @Autowired
  private ChatClientService chatClientService;

  @Test
  void ask() {
    String question = "What is today's date and current time?";
    String result = chatClientService.ask(question);
    log.info("==>ask time result: {}", result);
  }
}

Result (data, time):

2025-10-18 13:42:47.533 DEBUG 9380 --- [           main][] o.s.a.m.tool.DefaultToolCallingManager  ---[ 188] : Executing tool call: mcp_client_server1_dateTool
2025-10-18 13:42:47.584 DEBUG 9380 --- [           main][] o.s.a.m.tool.DefaultToolCallingManager  ---[ 188] : Executing tool call: mcp_client_server1_timeTool
2025-10-18 13:43:01.327  INFO 9380 --- [           main][] c.o.a.s.mcp.ChatClientServiceTests      ---[  24] : ==>ask time result: <think>
Okay, the user asked for today's date and current time. I used the dateTool and timeTool functions. The dateTool returned "2025-10-18" and the timeTool gave "13:42:47". I need to present these details clearly. Let me check if the dates and times make sense. The current year is 2025, so October 18th seems correct. The time is 1:42 PM, which is reasonable. I'll format the answer to include both the date and time in a friendly manner.
</think>

Today's date is **2025-10-18** and the current time is **13:42:47**. Let me know if you need further details!