Skip to content

Commit 84b2e00

Browse files
committed
feat(configuration): Add streamable configuration support
1 parent 614ccb8 commit 84b2e00

File tree

8 files changed

+33
-13
lines changed

8 files changed

+33
-13
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@ public record McpServerConfiguration(
1515
@JsonProperty("request-timeout") long requestTimeout,
1616
@JsonProperty("capabilities") McpServerCapabilities capabilities,
1717
@JsonProperty("change-notification") McpServerChangeNotification changeNotification,
18-
@JsonProperty("sse") McpServerSSE sse) {}
18+
@JsonProperty("sse") McpServerSSE sse,
19+
@JsonProperty("streamable") McpServerStreamable streamable) {}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.github.codeboyzhou.mcp.declarative.configuration;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
5+
public record McpServerStreamable(
6+
@JsonProperty("mcp-endpoint") String mcpEndpoint,
7+
@JsonProperty("disallow-delete") boolean disallowDelete,
8+
@JsonProperty("keep-alive-interval") long keepAliveInterval,
9+
@JsonProperty("port") int port) {}

src/main/java/com/github/codeboyzhou/mcp/declarative/server/factory/McpSseServerFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ public McpServer.SyncSpecification<?> sync(McpSseServerInfo info) {
1313
.sseEndpoint(info.sseEndpoint())
1414
.messageEndpoint(info.messageEndpoint())
1515
.build();
16-
threadPool.execute(() -> new McpHttpServer().use(transportProvider).bind(info.port()).start());
16+
McpHttpServer httpserver = new McpHttpServer();
17+
threadPool.execute(() -> httpserver.use(transportProvider).bind(info.port()).start());
1718
return McpServer.sync(transportProvider);
1819
}
1920
}

src/main/java/com/github/codeboyzhou/mcp/declarative/server/factory/McpStreamableServerFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ public McpServer.SyncSpecification<?> sync(McpStreamableServerInfo info) {
1616
.contextExtractor(info.contextExtractor())
1717
.keepAliveInterval(info.keepAliveInterval())
1818
.build();
19-
threadPool.execute(() -> new McpHttpServer().use(transportProvider).bind(info.port()).start());
19+
McpHttpServer httpserver = new McpHttpServer();
20+
threadPool.execute(() -> httpserver.use(transportProvider).bind(info.port()).start());
2021
return McpServer.sync(transportProvider);
2122
}
2223
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ public McpServer.SyncSpecification<?> specification() {
2121
.sseEndpoint(sse.endpoint())
2222
.messageEndpoint(sse.messageEndpoint())
2323
.build();
24-
threadPool.execute(() -> new McpHttpServer().use(transportProvider).bind(sse.port()).start());
24+
McpHttpServer httpserver = new McpHttpServer();
25+
threadPool.execute(() -> httpserver.use(transportProvider).bind(sse.port()).start());
2526
return McpServer.sync(transportProvider);
2627
}
2728
}

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package com.github.codeboyzhou.mcp.declarative.server.factory.configurable;
22

33
import com.github.codeboyzhou.mcp.declarative.configuration.McpServerConfiguration;
4+
import com.github.codeboyzhou.mcp.declarative.configuration.McpServerStreamable;
45
import com.github.codeboyzhou.mcp.declarative.server.McpHttpServer;
56
import com.github.codeboyzhou.mcp.declarative.util.ObjectMappers;
67
import io.modelcontextprotocol.server.McpServer;
78
import io.modelcontextprotocol.server.transport.HttpServletStreamableServerTransportProvider;
9+
import java.time.Duration;
810

911
public class ConfigurableMcpStreamableServerFactory extends AbstractConfigurableMcpServerFactory {
1012

@@ -14,11 +16,16 @@ public ConfigurableMcpStreamableServerFactory(McpServerConfiguration configurati
1416

1517
@Override
1618
public McpServer.SyncSpecification<?> specification() {
19+
McpServerStreamable streamable = configuration.streamable();
1720
HttpServletStreamableServerTransportProvider transportProvider =
1821
HttpServletStreamableServerTransportProvider.builder()
1922
.objectMapper(ObjectMappers.JSON_MAPPER)
23+
.mcpEndpoint(streamable.mcpEndpoint())
24+
.disallowDelete(streamable.disallowDelete())
25+
.keepAliveInterval(Duration.ofMillis(streamable.keepAliveInterval()))
2026
.build();
21-
threadPool.execute(() -> new McpHttpServer().use(transportProvider).bind(8080).start());
27+
McpHttpServer httpserver = new McpHttpServer();
28+
threadPool.execute(() -> httpserver.use(transportProvider).bind(streamable.port()).start());
2229
return McpServer.sync(transportProvider);
2330
}
2431
}

src/test/resources/mcp-server.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ change-notification:
1212
resource: true
1313
prompt: true
1414
tool: true
15-
sse:
16-
message-endpoint: /mcp/message
17-
endpoint: /sse
18-
base-url: http://localhost:8080
15+
streamable:
16+
mcp-endpoint: /mcp/message
17+
disallow-delete: true
18+
keep-alive-interval: 30000
1919
port: 8080

src/test/resources/test-mcp-server-enable-streamable-http-mode.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ change-notification:
1212
resource: true
1313
prompt: true
1414
tool: true
15-
sse:
16-
message-endpoint: /mcp/message
17-
endpoint: /sse
18-
base-url: http://localhost:8080
15+
streamable:
16+
mcp-endpoint: /mcp/message
17+
disallow-delete: true
18+
keep-alive-interval: 30000
1919
port: 8080

0 commit comments

Comments
 (0)