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(); /**