VOID_TYPE_REFERENCE = new TypeReference<>() {
};
@@ -86,6 +90,11 @@ public class McpAsyncClient extends DefaultMcpSession {
});
return result.flatMap(initializeResult -> {
+
+ logger.info("Server response with Protocol: {}, Capabilities: {}, Info: {} and Instructions {}",
+ initializeResult.protocolVersion(), initializeResult.capabilities(), initializeResult.serverInfo(),
+ initializeResult.instructions());
+
if (!McpSchema.LATEST_PROTOCOL_VERSION.equals(initializeResult.protocolVersion())) {
return Mono.error(new McpError(
"Unsupported protocol version from the server: " + initializeResult.protocolVersion()));
diff --git a/spring-ai-mcp-core/src/main/java/org/springframework/ai/mcp/spec/DefaultMcpSession.java b/spring-ai-mcp-core/src/main/java/org/springframework/ai/mcp/spec/DefaultMcpSession.java
index 6efb23c..fdbadc0 100644
--- a/spring-ai-mcp-core/src/main/java/org/springframework/ai/mcp/spec/DefaultMcpSession.java
+++ b/spring-ai-mcp-core/src/main/java/org/springframework/ai/mcp/spec/DefaultMcpSession.java
@@ -20,6 +20,7 @@ import java.time.Duration;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicLong;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -31,44 +32,117 @@ import reactor.core.publisher.MonoSink;
import org.springframework.ai.mcp.client.util.Assert;
/**
- * Implementation of the MCP client session.
+ * Default implementation of the MCP (Model Context Protocol) session that manages
+ * bidirectional JSON-RPC communication between clients and servers. This implementation
+ * follows the MCP specification for message exchange and transport handling.
+ *
+ *
+ * The session manages:
+ *
+ * - Request/response handling with unique message IDs
+ * - Notification processing
+ * - Message timeout management
+ * - Transport layer abstraction
+ *
*
* @author Christian Tzolov
* @author Dariusz Jędrzejczyk
*/
public class DefaultMcpSession implements McpSession {
+ /** Logger for this class */
private static final Logger logger = LoggerFactory.getLogger(DefaultMcpSession.class);
- private final ConcurrentHashMap