Skip to content

Commit b9e7d95

Browse files
committed
Fix transport session id mismatch with sessionId
Signed-off-by: JermaineHua <crazyhzm@apache.org>
1 parent 41c6bd9 commit b9e7d95

File tree

8 files changed

+18
-12
lines changed

8 files changed

+18
-12
lines changed

mcp-spring/mcp-spring-webflux/src/main/java/io/modelcontextprotocol/server/transport/WebFluxSseServerTransportProvider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.io.IOException;
44
import java.util.Map;
5+
import java.util.UUID;
56
import java.util.concurrent.ConcurrentHashMap;
67

78
import com.fasterxml.jackson.core.type.TypeReference;
@@ -261,8 +262,8 @@ private Mono<ServerResponse> handleSseConnection(ServerRequest request) {
261262
.body(Flux.<ServerSentEvent<?>>create(sink -> {
262263
WebFluxMcpSessionTransport sessionTransport = new WebFluxMcpSessionTransport(sink);
263264

264-
McpServerSession session = sessionFactory.create(sessionTransport);
265-
String sessionId = session.getId();
265+
String sessionId = UUID.randomUUID().toString();
266+
McpServerSession session = sessionFactory.create(sessionId, sessionTransport);
266267

267268
logger.debug("Created new SSE connection for session: {}", sessionId);
268269
sessions.put(sessionId, session);

mcp-spring/mcp-spring-webmvc/src/main/java/io/modelcontextprotocol/server/transport/WebMvcSseServerTransportProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ private ServerResponse handleSseConnection(ServerRequest request) {
263263
});
264264

265265
WebMvcMcpSessionTransport sessionTransport = new WebMvcMcpSessionTransport(sessionId, sseBuilder);
266-
McpServerSession session = sessionFactory.create(sessionTransport);
266+
McpServerSession session = sessionFactory.create(sessionId, sessionTransport);
267267
this.sessions.put(sessionId, session);
268268

269269
try {

mcp/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -340,9 +340,9 @@ private static class AsyncServerImpl extends McpAsyncServer {
340340
notificationHandlers.put(McpSchema.METHOD_NOTIFICATION_ROOTS_LIST_CHANGED,
341341
asyncRootsListChangedNotificationHandler(rootsChangeConsumers));
342342

343-
mcpTransportProvider.setSessionFactory(
344-
transport -> new McpServerSession(UUID.randomUUID().toString(), requestTimeout, transport,
345-
this::asyncInitializeRequestHandler, Mono::empty, requestHandlers, notificationHandlers));
343+
mcpTransportProvider
344+
.setSessionFactory((id, transport) -> new McpServerSession(id, requestTimeout, transport,
345+
this::asyncInitializeRequestHandler, Mono::empty, requestHandlers, notificationHandlers));
346346
}
347347

348348
// ---------------------------------------

mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
219219
writer);
220220

221221
// Create a new session using the session factory
222-
McpServerSession session = sessionFactory.create(sessionTransport);
222+
McpServerSession session = sessionFactory.create(sessionId, sessionTransport);
223223
this.sessions.put(sessionId, session);
224224

225225
// Send initial endpoint event

mcp/src/main/java/io/modelcontextprotocol/server/transport/StdioServerTransportProvider.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.io.Reader;
1313
import java.nio.charset.StandardCharsets;
1414
import java.util.Map;
15+
import java.util.UUID;
1516
import java.util.concurrent.Executors;
1617
import java.util.concurrent.atomic.AtomicBoolean;
1718
import java.util.function.Function;
@@ -94,7 +95,8 @@ public StdioServerTransportProvider(ObjectMapper objectMapper, InputStream input
9495
public void setSessionFactory(McpServerSession.Factory sessionFactory) {
9596
// Create a single session for the stdio connection
9697
var transport = new StdioMcpSessionTransport();
97-
this.session = sessionFactory.create(transport);
98+
String sessionId = UUID.randomUUID().toString();
99+
this.session = sessionFactory.create(sessionId, transport);
98100
transport.initProcessing();
99101
}
100102

mcp/src/main/java/io/modelcontextprotocol/spec/McpServerSession.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,10 +342,11 @@ public interface Factory {
342342

343343
/**
344344
* Creates a new 1:1 representation of the client-server interaction.
345+
* @param sessionId the id of the session.
345346
* @param sessionTransport the transport to use for communication with the client.
346347
* @return a new server session.
347348
*/
348-
McpServerSession create(McpServerTransport sessionTransport);
349+
McpServerSession create(String sessionId, McpServerTransport sessionTransport);
349350

350351
}
351352

mcp/src/test/java/io/modelcontextprotocol/MockMcpServerTransportProvider.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package io.modelcontextprotocol;
1717

1818
import java.util.Map;
19+
import java.util.UUID;
1920

2021
import io.modelcontextprotocol.spec.McpSchema;
2122
import io.modelcontextprotocol.spec.McpServerSession;
@@ -43,7 +44,8 @@ public MockMcpServerTransport getTransport() {
4344
@Override
4445
public void setSessionFactory(Factory sessionFactory) {
4546

46-
session = sessionFactory.create(transport);
47+
String sessionId = UUID.randomUUID().toString();
48+
session = sessionFactory.create(sessionId, transport);
4749
}
4850

4951
@Override

mcp/src/test/java/io/modelcontextprotocol/server/transport/StdioServerTransportProviderTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ void setUp() {
7171
sessionFactory = mock(McpServerSession.Factory.class);
7272

7373
// Configure mock behavior
74-
when(sessionFactory.create(any(McpServerTransport.class))).thenReturn(mockSession);
74+
when(sessionFactory.create(any(), any(McpServerTransport.class))).thenReturn(mockSession);
7575
when(mockSession.closeGracefully()).thenReturn(Mono.empty());
7676
when(mockSession.sendNotification(any(), any())).thenReturn(Mono.empty());
7777

@@ -110,7 +110,7 @@ void shouldHandleIncomingMessages() throws Exception {
110110
AtomicReference<McpSchema.JSONRPCMessage> capturedMessage = new AtomicReference<>();
111111
CountDownLatch messageLatch = new CountDownLatch(1);
112112

113-
McpServerSession.Factory realSessionFactory = transport -> {
113+
McpServerSession.Factory realSessionFactory = (id, transport) -> {
114114
McpServerSession session = mock(McpServerSession.class);
115115
when(session.handle(any())).thenAnswer(invocation -> {
116116
capturedMessage.set(invocation.getArgument(0));

0 commit comments

Comments
 (0)