Skip to content

Commit 34a7335

Browse files
chemicLtzolov
andcommitted
refactor: introduce session-based architecture for MCP server (#31)
This commit introduces a major refactoring of the MCP Java SDK to implement a session-based architecture for server-side implementations. The changes improve the SDK's ability to handle multiple concurrent client connections and provide an API better aligned with the MCP specification. Key changes: - Introduce McpServerTransportProvider interface to manage client connections - Rename ClientMcpTransport to McpClientTransport and ServerMcpTransport to McpServerTransport - Add exchange objects (McpAsyncServerExchange, McpSyncServerExchange) for client interaction - Update handler signatures to include exchange parameter: (args) -> result to (exchange, args) -> result - Rename Registration classes to Specification classes - Update method names (e.g., rootsChangeConsumers to rootsChangeHandlers) - Deprecate old interfaces and classes for removal in 0.9.0 - Add migration guide (migration-0.8.0.md) Resolves #9, #15 Co-authored-by: Christian Tzolov <[email protected]> Signed-off-by: Christian Tzolov <[email protected]>
1 parent 9c2b836 commit 34a7335

File tree

76 files changed

+9969
-1127
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+9969
-1127
lines changed

Diff for: mcp-spring/mcp-spring-webflux/src/main/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import com.fasterxml.jackson.core.type.TypeReference;
1111
import com.fasterxml.jackson.databind.ObjectMapper;
12-
import io.modelcontextprotocol.spec.ClientMcpTransport;
12+
import io.modelcontextprotocol.spec.McpClientTransport;
1313
import io.modelcontextprotocol.spec.McpError;
1414
import io.modelcontextprotocol.spec.McpSchema;
1515
import io.modelcontextprotocol.spec.McpSchema.JSONRPCMessage;
@@ -58,7 +58,7 @@
5858
* "https://spec.modelcontextprotocol.io/specification/basic/transports/#http-with-sse">MCP
5959
* HTTP with SSE Transport Specification</a>
6060
*/
61-
public class WebFluxSseClientTransport implements ClientMcpTransport {
61+
public class WebFluxSseClientTransport implements McpClientTransport {
6262

6363
private static final Logger logger = LoggerFactory.getLogger(WebFluxSseClientTransport.class);
6464

Diff for: mcp-spring/mcp-spring-webflux/src/main/java/io/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java

+10-7
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,10 @@
6060
* @author Alexandros Pappas
6161
* @see ServerMcpTransport
6262
* @see ServerSentEvent
63+
* @deprecated This class will be removed in 0.9.0. Use
64+
* {@link WebFluxSseServerTransportProvider}.
6365
*/
66+
@Deprecated
6467
public class WebFluxSseServerTransport implements ServerMcpTransport {
6568

6669
private static final Logger logger = LoggerFactory.getLogger(WebFluxSseServerTransport.class);
@@ -182,16 +185,16 @@ public Mono<Void> sendMessage(McpSchema.JSONRPCMessage message) {
182185
try {// @formatter:off
183186
String jsonText = objectMapper.writeValueAsString(message);
184187
ServerSentEvent<Object> event = ServerSentEvent.builder()
185-
.event(MESSAGE_EVENT_TYPE)
186-
.data(jsonText)
187-
.build();
188+
.event(MESSAGE_EVENT_TYPE)
189+
.data(jsonText)
190+
.build();
188191

189192
logger.debug("Attempting to broadcast message to {} active sessions", sessions.size());
190193

191194
List<String> failedSessions = sessions.values().stream()
192-
.filter(session -> session.messageSink.tryEmitNext(event).isFailure())
193-
.map(session -> session.id)
194-
.toList();
195+
.filter(session -> session.messageSink.tryEmitNext(event).isFailure())
196+
.map(session -> session.id)
197+
.toList();
195198

196199
if (failedSessions.isEmpty()) {
197200
logger.debug("Successfully broadcast message to all sessions");
@@ -407,4 +410,4 @@ void close() {
407410

408411
}
409412

410-
}
413+
}

0 commit comments

Comments
 (0)