diff --git a/mcp/src/main/java/io/modelcontextprotocol/client/LifecycleInitializer.java b/mcp/src/main/java/io/modelcontextprotocol/client/LifecycleInitializer.java
index e33fafa6a..0407a2923 100644
--- a/mcp/src/main/java/io/modelcontextprotocol/client/LifecycleInitializer.java
+++ b/mcp/src/main/java/io/modelcontextprotocol/client/LifecycleInitializer.java
@@ -72,7 +72,7 @@
* the initialized notification
*
*/
-class LifecycleInitializer {
+class LifecycleInitializer implements AutoCloseable {
private static final Logger logger = LoggerFactory.getLogger(LifecycleInitializer.class);
@@ -326,6 +326,7 @@ private Mono doInitialize(DefaultInitialization init
/**
* Closes the current initialization if it exists.
*/
+ @Override
public void close() {
DefaultInitialization current = this.initializationRef.getAndSet(null);
if (current != null) {
diff --git a/mcp/src/main/java/io/modelcontextprotocol/client/McpAsyncClient.java b/mcp/src/main/java/io/modelcontextprotocol/client/McpAsyncClient.java
index cf8142c68..bff73ee3b 100644
--- a/mcp/src/main/java/io/modelcontextprotocol/client/McpAsyncClient.java
+++ b/mcp/src/main/java/io/modelcontextprotocol/client/McpAsyncClient.java
@@ -78,7 +78,7 @@
* @see McpClientSession
* @see McpClientTransport
*/
-public class McpAsyncClient {
+public class McpAsyncClient implements AutoCloseable {
private static final Logger logger = LoggerFactory.getLogger(McpAsyncClient.class);
@@ -315,6 +315,7 @@ public McpSchema.Implementation getClientInfo() {
/**
* Closes the client connection immediately.
*/
+ @Override
public void close() {
this.initializer.close();
this.transport.close();
diff --git a/mcp/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java b/mcp/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java
index d873a7fde..a9d70794a 100644
--- a/mcp/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java
+++ b/mcp/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java
@@ -82,7 +82,7 @@
* @see McpSchema
* @see McpClientSession
*/
-public class McpAsyncServer {
+public class McpAsyncServer implements AutoCloseable {
private static final Logger logger = LoggerFactory.getLogger(McpAsyncServer.class);
@@ -254,6 +254,7 @@ public Mono closeGracefully() {
/**
* Close the server immediately.
*/
+ @Override
public void close() {
this.mcpTransportProvider.close();
}
diff --git a/mcp/src/main/java/io/modelcontextprotocol/server/McpSyncServer.java b/mcp/src/main/java/io/modelcontextprotocol/server/McpSyncServer.java
index 38f5128e4..e8a004fd4 100644
--- a/mcp/src/main/java/io/modelcontextprotocol/server/McpSyncServer.java
+++ b/mcp/src/main/java/io/modelcontextprotocol/server/McpSyncServer.java
@@ -48,7 +48,7 @@
* @see McpAsyncServer
* @see McpSchema
*/
-public class McpSyncServer {
+public class McpSyncServer implements AutoCloseable {
/**
* The async server to wrap.
@@ -203,6 +203,7 @@ public void closeGracefully() {
/**
* Close the server immediately.
*/
+ @Override
public void close() {
this.asyncServer.close();
}
diff --git a/mcp/src/main/java/io/modelcontextprotocol/spec/McpServerTransportProvider.java b/mcp/src/main/java/io/modelcontextprotocol/spec/McpServerTransportProvider.java
index 5fdbd7ab6..ecfb8a7b7 100644
--- a/mcp/src/main/java/io/modelcontextprotocol/spec/McpServerTransportProvider.java
+++ b/mcp/src/main/java/io/modelcontextprotocol/spec/McpServerTransportProvider.java
@@ -29,7 +29,7 @@
*
* @author Dariusz Jędrzejczyk
*/
-public interface McpServerTransportProvider {
+public interface McpServerTransportProvider extends AutoCloseable {
/**
* Sets the session factory that will be used to create sessions for new clients. An
@@ -52,6 +52,7 @@ public interface McpServerTransportProvider {
* Immediately closes all the transports with connected clients and releases any
* associated resources.
*/
+ @Override
default void close() {
this.closeGracefully().subscribe();
}
diff --git a/mcp/src/main/java/io/modelcontextprotocol/spec/McpSession.java b/mcp/src/main/java/io/modelcontextprotocol/spec/McpSession.java
index 42d170db5..edb196184 100644
--- a/mcp/src/main/java/io/modelcontextprotocol/spec/McpSession.java
+++ b/mcp/src/main/java/io/modelcontextprotocol/spec/McpSession.java
@@ -21,7 +21,7 @@
* @author Christian Tzolov
* @author Dariusz Jędrzejczyk
*/
-public interface McpSession {
+public interface McpSession extends AutoCloseable {
/**
* Sends a request to the model counterparty and expects a response of type T.
@@ -75,6 +75,7 @@ default Mono sendNotification(String method) {
/**
* Closes the session and releases any associated resources.
*/
+ @Override
void close();
}
diff --git a/mcp/src/main/java/io/modelcontextprotocol/spec/McpTransport.java b/mcp/src/main/java/io/modelcontextprotocol/spec/McpTransport.java
index 40d9ba7ac..036779fe0 100644
--- a/mcp/src/main/java/io/modelcontextprotocol/spec/McpTransport.java
+++ b/mcp/src/main/java/io/modelcontextprotocol/spec/McpTransport.java
@@ -35,7 +35,7 @@
* @author Christian Tzolov
* @author Dariusz Jędrzejczyk
*/
-public interface McpTransport {
+public interface McpTransport extends AutoCloseable {
/**
* Closes the transport connection and releases any associated resources.
@@ -45,6 +45,7 @@ public interface McpTransport {
* needed. It should handle the graceful shutdown of any active connections.
*
*/
+ @Override
default void close() {
this.closeGracefully().subscribe();
}
diff --git a/mcp/src/main/java/io/modelcontextprotocol/spec/McpTransportSession.java b/mcp/src/main/java/io/modelcontextprotocol/spec/McpTransportSession.java
index 555f018f8..273cbf461 100644
--- a/mcp/src/main/java/io/modelcontextprotocol/spec/McpTransportSession.java
+++ b/mcp/src/main/java/io/modelcontextprotocol/spec/McpTransportSession.java
@@ -14,7 +14,7 @@
* manages.
* @author Dariusz Jędrzejczyk
*/
-public interface McpTransportSession {
+public interface McpTransportSession extends AutoCloseable {
/**
* In case of stateful MCP servers, the value is present and contains the String
@@ -49,6 +49,7 @@ public interface McpTransportSession {
/**
* Close and clear the monitored resources. Potentially asynchronous.
*/
+ @Override
void close();
/**