Skip to content

Commit 3ef6884

Browse files
committed
feat: add WebMvcSseServerTransportProvider implementation
This commit introduces WebMvcSseServerTransportProvider as a replacement for the now-deprecated WebMvcSseServerTransport. The new provider-based implementation offers improved session management and better alignment with the MCP specification. Additional changes: - Deprecate WebMvcSseServerTransport and StdioServerTransport - Add corresponding deprecated test classes to maintain backward compatibility - Increase test timeouts from 300ms to 1000ms/2000ms for more reliable testing - Minor rename of ClientMcpTransport to McpClientTransport for naming consistency Signed-off-by: Christian Tzolov <[email protected]>
1 parent f50af4b commit 3ef6884

24 files changed

+1323
-152
lines changed

mcp-spring/mcp-spring-webflux/src/main/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import com.fasterxml.jackson.core.type.TypeReference;
1111
import com.fasterxml.jackson.databind.ObjectMapper;
12-
import io.modelcontextprotocol.spec.ClientMcpTransport;
12+
import io.modelcontextprotocol.spec.McpClientTransport;
1313
import io.modelcontextprotocol.spec.McpError;
1414
import io.modelcontextprotocol.spec.McpSchema;
1515
import io.modelcontextprotocol.spec.McpSchema.JSONRPCMessage;
@@ -58,7 +58,7 @@
5858
* "https://spec.modelcontextprotocol.io/specification/basic/transports/#http-with-sse">MCP
5959
* HTTP with SSE Transport Specification</a>
6060
*/
61-
public class WebFluxSseClientTransport implements ClientMcpTransport {
61+
public class WebFluxSseClientTransport implements McpClientTransport {
6262

6363
private static final Logger logger = LoggerFactory.getLogger(WebFluxSseClientTransport.class);
6464

mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import java.time.Duration;
88

99
import io.modelcontextprotocol.client.transport.WebFluxSseClientTransport;
10-
import io.modelcontextprotocol.spec.ClientMcpTransport;
10+
import io.modelcontextprotocol.spec.McpClientTransport;
1111
import org.junit.jupiter.api.Timeout;
1212
import org.testcontainers.containers.GenericContainer;
1313
import org.testcontainers.containers.wait.strategy.Wait;
@@ -32,7 +32,7 @@ class WebFluxSseMcpAsyncClientTests extends AbstractMcpAsyncClientTests {
3232
.waitingFor(Wait.forHttp("/").forStatusCode(404));
3333

3434
@Override
35-
protected ClientMcpTransport createMcpTransport() {
35+
protected McpClientTransport createMcpTransport() {
3636
return new WebFluxSseClientTransport(WebClient.builder().baseUrl(host));
3737
}
3838

@@ -50,7 +50,7 @@ public void onClose() {
5050

5151
@Override
5252
protected Duration getTimeoutDuration() {
53-
return Duration.ofMillis(300);
53+
return Duration.ofMillis(1000);
5454
}
5555

5656
}

mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import java.time.Duration;
88

99
import io.modelcontextprotocol.client.transport.WebFluxSseClientTransport;
10-
import io.modelcontextprotocol.spec.ClientMcpTransport;
10+
import io.modelcontextprotocol.spec.McpClientTransport;
1111
import org.junit.jupiter.api.Timeout;
1212
import org.testcontainers.containers.GenericContainer;
1313
import org.testcontainers.containers.wait.strategy.Wait;
@@ -32,7 +32,7 @@ class WebFluxSseMcpSyncClientTests extends AbstractMcpSyncClientTests {
3232
.waitingFor(Wait.forHttp("/").forStatusCode(404));
3333

3434
@Override
35-
protected ClientMcpTransport createMcpTransport() {
35+
protected McpClientTransport createMcpTransport() {
3636
return new WebFluxSseClientTransport(WebClient.builder().baseUrl(host));
3737
}
3838

@@ -50,7 +50,7 @@ protected void onClose() {
5050

5151
@Override
5252
protected Duration getTimeoutDuration() {
53-
return Duration.ofMillis(300);
53+
return Duration.ofMillis(1000);
5454
}
5555

5656
}

mcp-spring/mcp-spring-webmvc/src/main/java/io/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
* a bridge between synchronous WebMVC operations and reactive programming patterns to
3434
* maintain compatibility with the reactive transport interface.
3535
*
36+
* @deprecated This class will be removed in 0.9.0. Use
37+
* {@link WebMvcSseServerTransportProvider}.
38+
*
3639
* <p>
3740
* Key features:
3841
* <ul>
@@ -57,12 +60,12 @@
5760
* This implementation uses {@link ConcurrentHashMap} to safely manage multiple client
5861
* sessions in a thread-safe manner. Each client session is assigned a unique ID and
5962
* maintains its own SSE connection.
60-
*
6163
* @author Christian Tzolov
6264
* @author Alexandros Pappas
6365
* @see ServerMcpTransport
6466
* @see RouterFunction
6567
*/
68+
@Deprecated
6669
public class WebMvcSseServerTransport implements ServerMcpTransport {
6770

6871
private static final Logger logger = LoggerFactory.getLogger(WebMvcSseServerTransport.class);

0 commit comments

Comments
 (0)