Nice walkthrough on the SSE setup. One thing worth flagging for anyone wiring the client side with the new SDK 2.0.0: if the server speaks Streamable HTTP but your client uses the legacy SSE transport, listTools() just comes back empty with no error. Same trap if you call it before initialize(), since the handshake is what makes the server advertise its tools. I put together a wrong-vs-right breakdown (pure SDK, Spring AI and Quarkus) over on Meu Universo Nerd if anyone wants the full code.