Skip to content

Commit 7163ec6

Browse files
committed
chore: Extract DefaultMcpServerSessionFactory from McpAsyncServer.
Signed-off-by: He-Pin <[email protected]>
1 parent 3f70afd commit 7163ec6

File tree

2 files changed

+62
-35
lines changed

2 files changed

+62
-35
lines changed

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

Lines changed: 12 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,47 +4,25 @@
44

55
package io.modelcontextprotocol.server;
66

7-
import java.time.Duration;
8-
import java.util.ArrayList;
9-
import java.util.HashMap;
10-
import java.util.List;
11-
import java.util.Map;
12-
import java.util.Optional;
13-
import java.util.UUID;
14-
import java.util.concurrent.ConcurrentHashMap;
15-
import java.util.concurrent.CopyOnWriteArrayList;
16-
import java.util.function.BiFunction;
17-
18-
import io.modelcontextprotocol.spec.DefaultMcpStreamableServerSessionFactory;
19-
import io.modelcontextprotocol.spec.McpServerTransportProviderBase;
20-
import io.modelcontextprotocol.spec.McpStreamableServerTransportProvider;
21-
import org.slf4j.Logger;
22-
import org.slf4j.LoggerFactory;
23-
247
import com.fasterxml.jackson.core.type.TypeReference;
258
import com.fasterxml.jackson.databind.ObjectMapper;
26-
27-
import io.modelcontextprotocol.spec.JsonSchemaValidator;
28-
import io.modelcontextprotocol.spec.McpClientSession;
29-
import io.modelcontextprotocol.spec.McpError;
30-
import io.modelcontextprotocol.spec.McpSchema;
31-
import io.modelcontextprotocol.spec.McpSchema.CallToolResult;
32-
import io.modelcontextprotocol.spec.McpSchema.JSONRPCResponse;
33-
import io.modelcontextprotocol.spec.McpSchema.LoggingLevel;
34-
import io.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification;
35-
import io.modelcontextprotocol.spec.McpSchema.ResourceTemplate;
36-
import io.modelcontextprotocol.spec.McpSchema.SetLevelRequest;
37-
import io.modelcontextprotocol.spec.McpSchema.TextContent;
38-
import io.modelcontextprotocol.spec.McpSchema.Tool;
39-
import io.modelcontextprotocol.spec.McpServerSession;
40-
import io.modelcontextprotocol.spec.McpServerTransportProvider;
9+
import io.modelcontextprotocol.spec.*;
10+
import io.modelcontextprotocol.spec.McpSchema.*;
4111
import io.modelcontextprotocol.util.Assert;
4212
import io.modelcontextprotocol.util.DeafaultMcpUriTemplateManagerFactory;
4313
import io.modelcontextprotocol.util.McpUriTemplateManagerFactory;
4414
import io.modelcontextprotocol.util.Utils;
15+
import org.slf4j.Logger;
16+
import org.slf4j.LoggerFactory;
4517
import reactor.core.publisher.Flux;
4618
import reactor.core.publisher.Mono;
4719

20+
import java.time.Duration;
21+
import java.util.*;
22+
import java.util.concurrent.ConcurrentHashMap;
23+
import java.util.concurrent.CopyOnWriteArrayList;
24+
import java.util.function.BiFunction;
25+
4826
/**
4927
* The Model Context Protocol (MCP) server implementation that provides asynchronous
5028
* communication using Project Reactor's Mono and Flux types.
@@ -148,9 +126,8 @@ public class McpAsyncServer {
148126
Map<String, McpNotificationHandler> notificationHandlers = prepareNotificationHandlers(features);
149127

150128
this.protocolVersions = mcpTransportProvider.protocolVersions();
151-
152-
mcpTransportProvider.setSessionFactory(transport -> new McpServerSession(UUID.randomUUID().toString(),
153-
requestTimeout, transport, this::asyncInitializeRequestHandler, requestHandlers, notificationHandlers));
129+
mcpTransportProvider.setSessionFactory(new DefaultMcpServerSessionFactory(requestTimeout,
130+
this::asyncInitializeRequestHandler, requestHandlers, notificationHandlers));
154131
}
155132

156133
McpAsyncServer(McpStreamableServerTransportProvider mcpTransportProvider, ObjectMapper objectMapper,
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package io.modelcontextprotocol.spec;
2+
3+
import io.modelcontextprotocol.server.McpInitRequestHandler;
4+
import io.modelcontextprotocol.server.McpNotificationHandler;
5+
import io.modelcontextprotocol.server.McpRequestHandler;
6+
7+
import java.time.Duration;
8+
import java.util.Map;
9+
10+
/**
11+
* The default implementation of {@link McpServerSession.Factory}.
12+
*
13+
* @author He-Pin
14+
*/
15+
public class DefaultMcpServerSessionFactory implements McpServerSession.Factory {
16+
17+
Duration requestTimeout;
18+
19+
McpInitRequestHandler initHandler;
20+
21+
Map<String, McpRequestHandler<?>> requestHandlers;
22+
23+
Map<String, McpNotificationHandler> notificationHandlers;
24+
25+
public DefaultMcpServerSessionFactory(final Duration requestTimeout, final McpInitRequestHandler initHandler,
26+
final Map<String, McpRequestHandler<?>> requestHandlers,
27+
final Map<String, McpNotificationHandler> notificationHandlers) {
28+
this.requestTimeout = requestTimeout;
29+
this.initHandler = initHandler;
30+
this.requestHandlers = requestHandlers;
31+
this.notificationHandlers = notificationHandlers;
32+
}
33+
34+
@Override
35+
public McpServerSession create(final McpServerTransport sessionTransport) {
36+
final String sessionId = generateSessionId(sessionTransport);
37+
return new McpServerSession(sessionId, requestTimeout, sessionTransport, initHandler, requestHandlers,
38+
notificationHandlers);
39+
}
40+
41+
/**
42+
* Generate a unique session ID for the given transport.
43+
* @param sessionTransport the transport
44+
* @return unique session ID
45+
*/
46+
protected String generateSessionId(final McpServerTransport sessionTransport) {
47+
return java.util.UUID.randomUUID().toString();
48+
}
49+
50+
}

0 commit comments

Comments
 (0)