Skip to content

Commit a89eadb

Browse files
committed
feat(server): Enhance server factory interfaces with async specification and streamline server creation
1 parent 7eaf74e commit a89eadb

File tree

5 files changed

+23
-53
lines changed

5 files changed

+23
-53
lines changed

src/main/java/com/github/codeboyzhou/mcp/declarative/server/configurable/AbstractConfigurableMcpServerFactory.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
import com.github.codeboyzhou.mcp.declarative.configuration.McpServerCapabilities;
44
import com.github.codeboyzhou.mcp.declarative.configuration.McpServerChangeNotification;
55
import com.github.codeboyzhou.mcp.declarative.configuration.McpServerConfiguration;
6+
import io.modelcontextprotocol.server.McpAsyncServer;
67
import io.modelcontextprotocol.spec.McpSchema;
78
import io.modelcontextprotocol.spec.McpServerTransportProviderBase;
9+
import java.time.Duration;
810

911
public abstract class AbstractConfigurableMcpServerFactory<T extends McpServerTransportProviderBase>
1012
implements ConfigurableMcpServerFactory<T> {
@@ -31,4 +33,14 @@ public McpSchema.ServerCapabilities serverCapabilities() {
3133
}
3234
return capabilities.build();
3335
}
36+
37+
@Override
38+
public McpAsyncServer create() {
39+
return specification()
40+
.serverInfo(configuration.name(), configuration.version())
41+
.capabilities(serverCapabilities())
42+
.instructions(configuration.instructions())
43+
.requestTimeout(Duration.ofMillis(configuration.requestTimeout()))
44+
.build();
45+
}
3446
}
Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
11
package com.github.codeboyzhou.mcp.declarative.server.configurable;
22

3-
import com.github.codeboyzhou.mcp.declarative.common.NamedThreadFactory;
43
import com.github.codeboyzhou.mcp.declarative.configuration.McpServerConfiguration;
5-
import com.github.codeboyzhou.mcp.declarative.server.McpHttpServer;
6-
import io.modelcontextprotocol.server.McpAsyncServer;
74
import io.modelcontextprotocol.server.McpServer;
85
import io.modelcontextprotocol.server.transport.HttpServletSseServerTransportProvider;
9-
import java.time.Duration;
10-
import java.util.concurrent.ExecutorService;
11-
import java.util.concurrent.Executors;
126

137
public class ConfigurableMcpHttpSseServerFactory
148
extends AbstractConfigurableMcpServerFactory<HttpServletSseServerTransportProvider> {
@@ -27,20 +21,7 @@ public HttpServletSseServerTransportProvider transportProvider() {
2721
}
2822

2923
@Override
30-
public McpAsyncServer create() {
31-
HttpServletSseServerTransportProvider transportProvider = transportProvider();
32-
McpAsyncServer server =
33-
McpServer.async(transportProvider)
34-
.serverInfo(configuration.name(), configuration.version())
35-
.capabilities(serverCapabilities())
36-
.instructions(configuration.instructions())
37-
.requestTimeout(Duration.ofMillis(configuration.requestTimeout()))
38-
.build();
39-
McpHttpServer httpServer = new McpHttpServer();
40-
NamedThreadFactory threadFactory = new NamedThreadFactory(McpHttpServer.class.getSimpleName());
41-
ExecutorService executor = Executors.newSingleThreadExecutor(threadFactory);
42-
executor.execute(
43-
() -> httpServer.use(transportProvider).bind(configuration.sse().port()).start());
44-
return server;
24+
public McpServer.AsyncSpecification<?> specification() {
25+
return McpServer.async(transportProvider());
4526
}
4627
}
Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
11
package com.github.codeboyzhou.mcp.declarative.server.configurable;
22

3-
import com.github.codeboyzhou.mcp.declarative.common.NamedThreadFactory;
43
import com.github.codeboyzhou.mcp.declarative.configuration.McpServerConfiguration;
5-
import com.github.codeboyzhou.mcp.declarative.server.McpHttpServer;
6-
import io.modelcontextprotocol.server.McpAsyncServer;
74
import io.modelcontextprotocol.server.McpServer;
85
import io.modelcontextprotocol.server.transport.HttpServletStreamableServerTransportProvider;
9-
import java.time.Duration;
10-
import java.util.concurrent.ExecutorService;
11-
import java.util.concurrent.Executors;
126

137
public class ConfigurableMcpHttpStreamableServerFactory
148
extends AbstractConfigurableMcpServerFactory<HttpServletStreamableServerTransportProvider> {
@@ -23,20 +17,7 @@ public HttpServletStreamableServerTransportProvider transportProvider() {
2317
}
2418

2519
@Override
26-
public McpAsyncServer create() {
27-
HttpServletStreamableServerTransportProvider transportProvider = transportProvider();
28-
McpAsyncServer server =
29-
McpServer.async(transportProvider)
30-
.serverInfo(configuration.name(), configuration.version())
31-
.capabilities(serverCapabilities())
32-
.instructions(configuration.instructions())
33-
.requestTimeout(Duration.ofMillis(configuration.requestTimeout()))
34-
.build();
35-
McpHttpServer httpServer = new McpHttpServer();
36-
NamedThreadFactory threadFactory = new NamedThreadFactory(McpHttpServer.class.getSimpleName());
37-
ExecutorService executor = Executors.newSingleThreadExecutor(threadFactory);
38-
executor.execute(
39-
() -> httpServer.use(transportProvider).bind(configuration.sse().port()).start());
40-
return server;
20+
public McpServer.AsyncSpecification<?> specification() {
21+
return McpServer.async(transportProvider());
4122
}
4223
}
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package com.github.codeboyzhou.mcp.declarative.server.configurable;
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

78
public interface ConfigurableMcpServerFactory<T extends McpServerTransportProviderBase> {
89

9-
McpSchema.ServerCapabilities serverCapabilities();
10-
1110
T transportProvider();
1211

12+
McpServer.AsyncSpecification<?> specification();
13+
14+
McpSchema.ServerCapabilities serverCapabilities();
15+
1316
McpAsyncServer create();
1417
}
Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package com.github.codeboyzhou.mcp.declarative.server.configurable;
22

33
import com.github.codeboyzhou.mcp.declarative.configuration.McpServerConfiguration;
4-
import io.modelcontextprotocol.server.McpAsyncServer;
54
import io.modelcontextprotocol.server.McpServer;
65
import io.modelcontextprotocol.server.transport.StdioServerTransportProvider;
7-
import java.time.Duration;
86

97
public class ConfigurableMcpStdioServerFactory
108
extends AbstractConfigurableMcpServerFactory<StdioServerTransportProvider> {
@@ -19,12 +17,7 @@ public StdioServerTransportProvider transportProvider() {
1917
}
2018

2119
@Override
22-
public McpAsyncServer create() {
23-
return McpServer.async(transportProvider())
24-
.serverInfo(configuration.name(), configuration.version())
25-
.capabilities(serverCapabilities())
26-
.instructions(configuration.instructions())
27-
.requestTimeout(Duration.ofMillis(configuration.requestTimeout()))
28-
.build();
20+
public McpServer.AsyncSpecification<?> specification() {
21+
return McpServer.async(transportProvider());
2922
}
3023
}

0 commit comments

Comments
 (0)