Skip to content

Commit 2bf156c

Browse files
committed
feat(server): Introduce HttpMode enum and update server configuration for HTTP mode support
1 parent e449bd1 commit 2bf156c

File tree

5 files changed

+27
-8
lines changed

5 files changed

+27
-8
lines changed

src/main/java/com/github/codeboyzhou/mcp/declarative/McpServers.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
import com.github.codeboyzhou.mcp.declarative.common.GuiceInjectorModule;
44
import com.github.codeboyzhou.mcp.declarative.configuration.McpServerConfiguration;
55
import com.github.codeboyzhou.mcp.declarative.configuration.YAMLConfigurationLoader;
6+
import com.github.codeboyzhou.mcp.declarative.enums.HttpMode;
67
import com.github.codeboyzhou.mcp.declarative.server.McpHttpServer;
78
import com.github.codeboyzhou.mcp.declarative.server.component.McpServerPromptFactory;
89
import com.github.codeboyzhou.mcp.declarative.server.component.McpServerResourceFactory;
910
import com.github.codeboyzhou.mcp.declarative.server.component.McpServerToolFactory;
1011
import com.github.codeboyzhou.mcp.declarative.server.configurable.ConfigurableMcpHttpSseServerFactory;
12+
import com.github.codeboyzhou.mcp.declarative.server.configurable.ConfigurableMcpHttpStreamableServerFactory;
1113
import com.github.codeboyzhou.mcp.declarative.server.configurable.ConfigurableMcpServerFactory;
1214
import com.github.codeboyzhou.mcp.declarative.server.configurable.ConfigurableMcpStdioServerFactory;
1315
import com.github.codeboyzhou.mcp.declarative.server.simple.SimpleMcpHttpSseServerFactory;
@@ -19,7 +21,7 @@
1921
import com.google.inject.Guice;
2022
import com.google.inject.Injector;
2123
import io.modelcontextprotocol.server.McpAsyncServer;
22-
import io.modelcontextprotocol.spec.McpServerTransportProvider;
24+
import io.modelcontextprotocol.spec.McpServerTransportProviderBase;
2325
import io.modelcontextprotocol.util.Assert;
2426
import org.slf4j.Logger;
2527
import org.slf4j.LoggerFactory;
@@ -44,23 +46,23 @@ public static McpServers run(Class<?> applicationMainClass, String[] args) {
4446
public void startStdioServer(SimpleMcpServerBaseInfo serverInfo) {
4547
SimpleMcpStdioServerFactory factory = new SimpleMcpStdioServerFactory();
4648
McpAsyncServer server = factory.create(serverInfo);
47-
registerComponents(server);
49+
registerComponentsTo(server);
4850
}
4951

5052
public void startSseServer(SimpleMcpHttpSseServerInfo serverInfo) {
5153
SimpleMcpHttpSseServerFactory factory = new SimpleMcpHttpSseServerFactory();
5254
McpAsyncServer server = factory.create(serverInfo);
5355
McpHttpServer httpserver = new McpHttpServer();
5456
httpserver.use(factory.transportProvider(serverInfo)).bind(serverInfo.port()).start();
55-
registerComponents(server);
57+
registerComponentsTo(server);
5658
}
5759

5860
public void startStreamableServer(SimpleMcpHttpStreamableServerInfo serverInfo) {
5961
SimpleMcpHttpStreamableServerFactory factory = new SimpleMcpHttpStreamableServerFactory();
6062
McpAsyncServer server = factory.create(serverInfo);
6163
McpHttpServer httpserver = new McpHttpServer();
6264
httpserver.use(factory.transportProvider(serverInfo)).bind(serverInfo.port()).start();
63-
registerComponents(server);
65+
registerComponentsTo(server);
6466
}
6567

6668
public void startServer(String configFileName) {
@@ -80,17 +82,24 @@ private void doStartServer(McpServerConfiguration configuration) {
8082
return;
8183
}
8284

83-
ConfigurableMcpServerFactory<? extends McpServerTransportProvider> factory;
85+
ConfigurableMcpServerFactory<? extends McpServerTransportProviderBase> factory;
8486
if (configuration.stdio()) {
8587
factory = new ConfigurableMcpStdioServerFactory(configuration);
8688
} else {
87-
factory = new ConfigurableMcpHttpSseServerFactory(configuration);
89+
final String httpMode = configuration.httpMode().name();
90+
if (HttpMode.SSE.name().equalsIgnoreCase(httpMode)) {
91+
factory = new ConfigurableMcpHttpSseServerFactory(configuration);
92+
} else if (HttpMode.STREAMABLE.name().equalsIgnoreCase(httpMode)) {
93+
factory = new ConfigurableMcpHttpStreamableServerFactory(configuration);
94+
} else {
95+
throw new NullPointerException("factory is null, please check your configuration");
96+
}
8897
}
8998
McpAsyncServer server = factory.create();
90-
registerComponents(server);
99+
registerComponentsTo(server);
91100
}
92101

93-
private void registerComponents(McpAsyncServer server) {
102+
private void registerComponentsTo(McpAsyncServer server) {
94103
injector.getInstance(McpServerResourceFactory.class).registerTo(server);
95104
injector.getInstance(McpServerPromptFactory.class).registerTo(server);
96105
injector.getInstance(McpServerToolFactory.class).registerTo(server);

src/main/java/com/github/codeboyzhou/mcp/declarative/configuration/McpServerConfiguration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.github.codeboyzhou.mcp.declarative.configuration;
22

33
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import com.github.codeboyzhou.mcp.declarative.enums.HttpMode;
45
import com.github.codeboyzhou.mcp.declarative.enums.ServerType;
56

67
public record McpServerConfiguration(
78
@JsonProperty("enabled") boolean enabled,
89
@JsonProperty("stdio") boolean stdio,
10+
@JsonProperty("http-mode") HttpMode httpMode,
911
@JsonProperty("name") String name,
1012
@JsonProperty("version") String version,
1113
@JsonProperty("type") ServerType type,
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.github.codeboyzhou.mcp.declarative.enums;
2+
3+
public enum HttpMode {
4+
SSE,
5+
STREAMABLE
6+
}

src/test/resources/mcp-server-sse-mode.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
enabled: true
22
stdio: false
3+
http-mode: sse
34
name: mcp-server
45
version: 1.0.0
56
type: SYNC

src/test/resources/mcp-server.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
enabled: true
22
stdio: false
3+
http-mode: sse
34
name: mcp-server-test
45
version: 1.0.0
56
type: ASYNC

0 commit comments

Comments
 (0)