Skip to content

Commit ec8afe6

Browse files
committed
refactor(server): Implement async specification method in server factories and streamline server creation process
1 parent a89eadb commit ec8afe6

File tree

4 files changed

+27
-56
lines changed

4 files changed

+27
-56
lines changed
Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package com.github.codeboyzhou.mcp.declarative.server.simple;
22

3-
import com.github.codeboyzhou.mcp.declarative.common.NamedThreadFactory;
4-
import com.github.codeboyzhou.mcp.declarative.server.McpHttpServer;
5-
import io.modelcontextprotocol.server.McpAsyncServer;
63
import io.modelcontextprotocol.server.McpServer;
74
import io.modelcontextprotocol.server.transport.HttpServletSseServerTransportProvider;
8-
import java.util.concurrent.ExecutorService;
9-
import java.util.concurrent.Executors;
105

116
public class SimpleMcpHttpSseServerFactory
127
implements SimpleMcpServerFactory<
138
HttpServletSseServerTransportProvider, SimpleMcpHttpSseServerInfo> {
149

10+
@Override
11+
public McpServer.AsyncSpecification<?> specification(SimpleMcpHttpSseServerInfo serverInfo) {
12+
return McpServer.async(transportProvider(serverInfo));
13+
}
14+
1515
@Override
1616
public HttpServletSseServerTransportProvider transportProvider(SimpleMcpHttpSseServerInfo info) {
1717
return HttpServletSseServerTransportProvider.builder()
@@ -20,21 +20,4 @@ public HttpServletSseServerTransportProvider transportProvider(SimpleMcpHttpSseS
2020
.messageEndpoint(info.messageEndpoint())
2121
.build();
2222
}
23-
24-
@Override
25-
public McpAsyncServer create(SimpleMcpHttpSseServerInfo info) {
26-
HttpServletSseServerTransportProvider transportProvider = transportProvider(info);
27-
McpAsyncServer server =
28-
McpServer.async(transportProvider)
29-
.serverInfo(info.name(), info.version())
30-
.capabilities(serverCapabilities())
31-
.instructions(info.instructions())
32-
.requestTimeout(info.requestTimeout())
33-
.build();
34-
McpHttpServer httpServer = new McpHttpServer();
35-
NamedThreadFactory threadFactory = new NamedThreadFactory(McpHttpServer.class.getSimpleName());
36-
ExecutorService executor = Executors.newSingleThreadExecutor(threadFactory);
37-
executor.execute(() -> httpServer.use(transportProvider).bind(info.port()).start());
38-
return server;
39-
}
4023
}
Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
package com.github.codeboyzhou.mcp.declarative.server.simple;
22

3-
import com.github.codeboyzhou.mcp.declarative.common.NamedThreadFactory;
4-
import com.github.codeboyzhou.mcp.declarative.server.McpHttpServer;
53
import com.github.codeboyzhou.mcp.declarative.util.ObjectMappers;
6-
import io.modelcontextprotocol.server.McpAsyncServer;
74
import io.modelcontextprotocol.server.McpServer;
85
import io.modelcontextprotocol.server.transport.HttpServletStreamableServerTransportProvider;
9-
import java.util.concurrent.ExecutorService;
10-
import java.util.concurrent.Executors;
116

127
public class SimpleMcpHttpStreamableServerFactory
138
implements SimpleMcpServerFactory<
149
HttpServletStreamableServerTransportProvider, SimpleMcpHttpStreamableServerInfo> {
1510

11+
@Override
12+
public McpServer.AsyncSpecification<?> specification(
13+
SimpleMcpHttpStreamableServerInfo serverInfo) {
14+
return McpServer.async(transportProvider(serverInfo));
15+
}
16+
1617
@Override
1718
public HttpServletStreamableServerTransportProvider transportProvider(
1819
SimpleMcpHttpStreamableServerInfo info) {
@@ -24,21 +25,4 @@ public HttpServletStreamableServerTransportProvider transportProvider(
2425
.keepAliveInterval(info.keepAliveInterval())
2526
.build();
2627
}
27-
28-
@Override
29-
public McpAsyncServer create(SimpleMcpHttpStreamableServerInfo info) {
30-
HttpServletStreamableServerTransportProvider transportProvider = transportProvider(info);
31-
McpAsyncServer server =
32-
McpServer.async(transportProvider)
33-
.serverInfo(info.name(), info.version())
34-
.capabilities(serverCapabilities())
35-
.instructions(info.instructions())
36-
.requestTimeout(info.requestTimeout())
37-
.build();
38-
McpHttpServer httpServer = new McpHttpServer();
39-
NamedThreadFactory threadFactory = new NamedThreadFactory(McpHttpServer.class.getSimpleName());
40-
ExecutorService executor = Executors.newSingleThreadExecutor(threadFactory);
41-
executor.execute(() -> httpServer.use(transportProvider).bind(info.port()).start());
42-
return server;
43-
}
4428
}

src/main/java/com/github/codeboyzhou/mcp/declarative/server/simple/SimpleMcpServerFactory.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.codeboyzhou.mcp.declarative.server.simple;
22

33
import io.modelcontextprotocol.server.McpAsyncServer;
4+
import io.modelcontextprotocol.server.McpServer;
45
import io.modelcontextprotocol.spec.McpSchema;
56
import io.modelcontextprotocol.spec.McpServerTransportProviderBase;
67

@@ -15,7 +16,16 @@ default McpSchema.ServerCapabilities serverCapabilities() {
1516
.build();
1617
}
1718

18-
T transportProvider(S serverInfo);
19+
default McpAsyncServer create(S serverInfo) {
20+
return specification(serverInfo)
21+
.serverInfo(serverInfo.name(), serverInfo.version())
22+
.capabilities(serverCapabilities())
23+
.instructions(serverInfo.instructions())
24+
.requestTimeout(serverInfo.requestTimeout())
25+
.build();
26+
}
1927

20-
McpAsyncServer create(S serverInfo);
28+
McpServer.AsyncSpecification<?> specification(S serverInfo);
29+
30+
T transportProvider(S serverInfo);
2131
}
Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,18 @@
11
package com.github.codeboyzhou.mcp.declarative.server.simple;
22

3-
import io.modelcontextprotocol.server.McpAsyncServer;
43
import io.modelcontextprotocol.server.McpServer;
54
import io.modelcontextprotocol.server.transport.StdioServerTransportProvider;
65

76
public class SimpleMcpStdioServerFactory
87
implements SimpleMcpServerFactory<StdioServerTransportProvider, SimpleMcpServerBaseInfo> {
98

109
@Override
11-
public StdioServerTransportProvider transportProvider(SimpleMcpServerBaseInfo serverInfo) {
12-
return new StdioServerTransportProvider();
10+
public McpServer.AsyncSpecification<?> specification(SimpleMcpServerBaseInfo serverInfo) {
11+
return McpServer.async(transportProvider(serverInfo));
1312
}
1413

1514
@Override
16-
public McpAsyncServer create(SimpleMcpServerBaseInfo serverInfo) {
17-
return McpServer.async(transportProvider(serverInfo))
18-
.serverInfo(serverInfo.name(), serverInfo.version())
19-
.capabilities(serverCapabilities())
20-
.instructions(serverInfo.instructions())
21-
.requestTimeout(serverInfo.requestTimeout())
22-
.build();
15+
public StdioServerTransportProvider transportProvider(SimpleMcpServerBaseInfo serverInfo) {
16+
return new StdioServerTransportProvider();
2317
}
2418
}

0 commit comments

Comments
 (0)