Skip to content

Commit 3daab08

Browse files
committed
refactor: replace ClientMcpTransport to McpClientTransport and DefaultMcpSession to McpClientSession
- Replace the ClientMcpTransport interface with McpClientTransport and deprecate former - Replace the DefaultMcpSession with McpClientSession and deprecate DefaultMcpSession - Change all client transport implementation to implement the McpClientTransport instead of ClientMcpTransport - The McpMockTransport implements McpClientTransport instead of ClientMcpTransport Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
1 parent 3e0d8c5 commit 3daab08

File tree

23 files changed

+419
-92
lines changed

23 files changed

+419
-92
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: 2 additions & 2 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

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

Lines changed: 2 additions & 2 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

mcp-test/src/main/java/io/modelcontextprotocol/MockMcpTransport.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,19 @@
1111

1212
import com.fasterxml.jackson.core.type.TypeReference;
1313
import com.fasterxml.jackson.databind.ObjectMapper;
14-
import io.modelcontextprotocol.spec.ClientMcpTransport;
14+
import io.modelcontextprotocol.spec.McpClientTransport;
1515
import io.modelcontextprotocol.spec.McpSchema;
16-
import io.modelcontextprotocol.spec.ServerMcpTransport;
1716
import io.modelcontextprotocol.spec.McpSchema.JSONRPCNotification;
1817
import io.modelcontextprotocol.spec.McpSchema.JSONRPCRequest;
18+
import io.modelcontextprotocol.spec.ServerMcpTransport;
1919
import reactor.core.publisher.Mono;
2020
import reactor.core.publisher.Sinks;
2121

2222
/**
23-
* A mock implementation of the {@link ClientMcpTransport} and {@link ServerMcpTransport}
23+
* A mock implementation of the {@link McpClientTransport} and {@link ServerMcpTransport}
2424
* interfaces.
2525
*/
26-
public class MockMcpTransport implements ClientMcpTransport, ServerMcpTransport {
26+
public class MockMcpTransport implements McpClientTransport, ServerMcpTransport {
2727

2828
private final Sinks.Many<McpSchema.JSONRPCMessage> inbound = Sinks.many().unicast().onBackpressureBuffer();
2929

mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import java.util.function.Consumer;
1313
import java.util.function.Function;
1414

15-
import io.modelcontextprotocol.spec.ClientMcpTransport;
15+
import io.modelcontextprotocol.spec.McpClientTransport;
1616
import io.modelcontextprotocol.spec.McpError;
1717
import io.modelcontextprotocol.spec.McpSchema;
1818
import io.modelcontextprotocol.spec.McpSchema.CallToolRequest;
@@ -49,7 +49,7 @@ public abstract class AbstractMcpAsyncClientTests {
4949

5050
private static final String ECHO_TEST_MESSAGE = "Hello MCP Spring AI!";
5151

52-
abstract protected ClientMcpTransport createMcpTransport();
52+
abstract protected McpClientTransport createMcpTransport();
5353

5454
protected void onStart() {
5555
}
@@ -65,11 +65,11 @@ protected Duration getInitializationTimeout() {
6565
return Duration.ofSeconds(2);
6666
}
6767

68-
McpAsyncClient client(ClientMcpTransport transport) {
68+
McpAsyncClient client(McpClientTransport transport) {
6969
return client(transport, Function.identity());
7070
}
7171

72-
McpAsyncClient client(ClientMcpTransport transport, Function<McpClient.AsyncSpec, McpClient.AsyncSpec> customizer) {
72+
McpAsyncClient client(McpClientTransport transport, Function<McpClient.AsyncSpec, McpClient.AsyncSpec> customizer) {
7373
AtomicReference<McpAsyncClient> client = new AtomicReference<>();
7474

7575
assertThatCode(() -> {
@@ -84,11 +84,11 @@ McpAsyncClient client(ClientMcpTransport transport, Function<McpClient.AsyncSpec
8484
return client.get();
8585
}
8686

87-
void withClient(ClientMcpTransport transport, Consumer<McpAsyncClient> c) {
87+
void withClient(McpClientTransport transport, Consumer<McpAsyncClient> c) {
8888
withClient(transport, Function.identity(), c);
8989
}
9090

91-
void withClient(ClientMcpTransport transport, Function<McpClient.AsyncSpec, McpClient.AsyncSpec> customizer,
91+
void withClient(McpClientTransport transport, Function<McpClient.AsyncSpec, McpClient.AsyncSpec> customizer,
9292
Consumer<McpAsyncClient> c) {
9393
var client = client(transport, customizer);
9494
try {

mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpSyncClientTests.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import java.util.function.Consumer;
1212
import java.util.function.Function;
1313

14-
import io.modelcontextprotocol.spec.ClientMcpTransport;
14+
import io.modelcontextprotocol.spec.McpClientTransport;
1515
import io.modelcontextprotocol.spec.McpError;
1616
import io.modelcontextprotocol.spec.McpSchema;
1717
import io.modelcontextprotocol.spec.McpSchema.CallToolRequest;
@@ -49,7 +49,7 @@ public abstract class AbstractMcpSyncClientTests {
4949

5050
private static final String TEST_MESSAGE = "Hello MCP Spring AI!";
5151

52-
abstract protected ClientMcpTransport createMcpTransport();
52+
abstract protected McpClientTransport createMcpTransport();
5353

5454
protected void onStart() {
5555
}
@@ -65,11 +65,11 @@ protected Duration getInitializationTimeout() {
6565
return Duration.ofSeconds(2);
6666
}
6767

68-
McpSyncClient client(ClientMcpTransport transport) {
68+
McpSyncClient client(McpClientTransport transport) {
6969
return client(transport, Function.identity());
7070
}
7171

72-
McpSyncClient client(ClientMcpTransport transport, Function<McpClient.SyncSpec, McpClient.SyncSpec> customizer) {
72+
McpSyncClient client(McpClientTransport transport, Function<McpClient.SyncSpec, McpClient.SyncSpec> customizer) {
7373
AtomicReference<McpSyncClient> client = new AtomicReference<>();
7474

7575
assertThatCode(() -> {
@@ -84,11 +84,11 @@ McpSyncClient client(ClientMcpTransport transport, Function<McpClient.SyncSpec,
8484
return client.get();
8585
}
8686

87-
void withClient(ClientMcpTransport transport, Consumer<McpSyncClient> c) {
87+
void withClient(McpClientTransport transport, Consumer<McpSyncClient> c) {
8888
withClient(transport, Function.identity(), c);
8989
}
9090

91-
void withClient(ClientMcpTransport transport, Function<McpClient.SyncSpec, McpClient.SyncSpec> customizer,
91+
void withClient(McpClientTransport transport, Function<McpClient.SyncSpec, McpClient.SyncSpec> customizer,
9292
Consumer<McpSyncClient> c) {
9393
var client = client(transport, customizer);
9494
try {

mcp/src/main/java/io/modelcontextprotocol/client/McpAsyncClient.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515

1616
import com.fasterxml.jackson.core.type.TypeReference;
1717
import io.modelcontextprotocol.spec.ClientMcpTransport;
18-
import io.modelcontextprotocol.spec.DefaultMcpSession;
19-
import io.modelcontextprotocol.spec.DefaultMcpSession.NotificationHandler;
20-
import io.modelcontextprotocol.spec.DefaultMcpSession.RequestHandler;
18+
import io.modelcontextprotocol.spec.McpClientSession;
19+
import io.modelcontextprotocol.spec.McpClientSession.NotificationHandler;
20+
import io.modelcontextprotocol.spec.McpClientSession.RequestHandler;
2121
import io.modelcontextprotocol.spec.McpError;
2222
import io.modelcontextprotocol.spec.McpSchema;
2323
import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
@@ -73,7 +73,7 @@
7373
* @author Christian Tzolov
7474
* @see McpClient
7575
* @see McpSchema
76-
* @see DefaultMcpSession
76+
* @see McpClientSession
7777
*/
7878
public class McpAsyncClient {
7979

@@ -95,7 +95,7 @@ public class McpAsyncClient {
9595
* The MCP session implementation that manages bidirectional JSON-RPC communication
9696
* between clients and servers.
9797
*/
98-
private final DefaultMcpSession mcpSession;
98+
private final McpClientSession mcpSession;
9999

100100
/**
101101
* Client capabilities.
@@ -228,7 +228,7 @@ public class McpAsyncClient {
228228
notificationHandlers.put(McpSchema.METHOD_NOTIFICATION_MESSAGE,
229229
asyncLoggingNotificationHandler(loggingConsumersFinal));
230230

231-
this.mcpSession = new DefaultMcpSession(requestTimeout, transport, requestHandlers, notificationHandlers);
231+
this.mcpSession = new McpClientSession(requestTimeout, transport, requestHandlers, notificationHandlers);
232232

233233
}
234234

mcp/src/main/java/io/modelcontextprotocol/client/McpClient.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.util.function.Function;
1414

1515
import io.modelcontextprotocol.spec.ClientMcpTransport;
16+
import io.modelcontextprotocol.spec.McpClientTransport;
1617
import io.modelcontextprotocol.spec.McpSchema;
1718
import io.modelcontextprotocol.spec.McpTransport;
1819
import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
@@ -113,11 +114,31 @@ public interface McpClient {
113114
* and {@code SseClientTransport} for SSE-based communication.
114115
* @return A new builder instance for configuring the client
115116
* @throws IllegalArgumentException if transport is null
117+
* @deprecated This method will be removed in 0.9.0. Use
118+
* {@link #sync(McpClientTransport)}
116119
*/
120+
@Deprecated
117121
static SyncSpec sync(ClientMcpTransport transport) {
118122
return new SyncSpec(transport);
119123
}
120124

125+
/**
126+
* Start building a synchronous MCP client with the specified transport layer. The
127+
* synchronous MCP client provides blocking operations. Synchronous clients wait for
128+
* each operation to complete before returning, making them simpler to use but
129+
* potentially less performant for concurrent operations. The transport layer handles
130+
* the low-level communication between client and server using protocols like stdio or
131+
* Server-Sent Events (SSE).
132+
* @param transport The transport layer implementation for MCP communication. Common
133+
* implementations include {@code StdioClientTransport} for stdio-based communication
134+
* and {@code SseClientTransport} for SSE-based communication.
135+
* @return A new builder instance for configuring the client
136+
* @throws IllegalArgumentException if transport is null
137+
*/
138+
static SyncSpec sync(McpClientTransport transport) {
139+
return new SyncSpec(transport);
140+
}
141+
121142
/**
122143
* Start building an asynchronous MCP client with the specified transport layer. The
123144
* asynchronous MCP client provides non-blocking operations. Asynchronous clients
@@ -130,11 +151,31 @@ static SyncSpec sync(ClientMcpTransport transport) {
130151
* and {@code SseClientTransport} for SSE-based communication.
131152
* @return A new builder instance for configuring the client
132153
* @throws IllegalArgumentException if transport is null
154+
* @deprecated This method will be removed in 0.9.0. Use
155+
* {@link #async(McpClientTransport)}
133156
*/
157+
@Deprecated
134158
static AsyncSpec async(ClientMcpTransport transport) {
135159
return new AsyncSpec(transport);
136160
}
137161

162+
/**
163+
* Start building an asynchronous MCP client with the specified transport layer. The
164+
* asynchronous MCP client provides non-blocking operations. Asynchronous clients
165+
* return reactive primitives (Mono/Flux) immediately, allowing for concurrent
166+
* operations and reactive programming patterns. The transport layer handles the
167+
* low-level communication between client and server using protocols like stdio or
168+
* Server-Sent Events (SSE).
169+
* @param transport The transport layer implementation for MCP communication. Common
170+
* implementations include {@code StdioClientTransport} for stdio-based communication
171+
* and {@code SseClientTransport} for SSE-based communication.
172+
* @return A new builder instance for configuring the client
173+
* @throws IllegalArgumentException if transport is null
174+
*/
175+
static AsyncSpec async(McpClientTransport transport) {
176+
return new AsyncSpec(transport);
177+
}
178+
138179
/**
139180
* Synchronous client specification. This class follows the builder pattern to provide
140181
* a fluent API for setting up clients with custom configurations.

mcp/src/main/java/io/modelcontextprotocol/client/McpSyncClient.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import java.time.Duration;
88

9-
import io.modelcontextprotocol.spec.ClientMcpTransport;
9+
import io.modelcontextprotocol.spec.McpClientTransport;
1010
import io.modelcontextprotocol.spec.McpSchema;
1111
import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
1212
import io.modelcontextprotocol.spec.McpSchema.GetPromptRequest;
@@ -66,7 +66,8 @@ public class McpSyncClient implements AutoCloseable {
6666
* Create a new McpSyncClient with the given delegate.
6767
* @param delegate the asynchronous kernel on top of which this synchronous client
6868
* provides a blocking API.
69-
* @deprecated Use {@link McpClient#sync(ClientMcpTransport)} to obtain an instance.
69+
* @deprecated This method will be removed in 0.9.0. Use
70+
* {@link McpClient#sync(McpClientTransport)} to obtain an instance.
7071
*/
7172
@Deprecated
7273
// TODO make the constructor package private post-deprecation

mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import com.fasterxml.jackson.core.type.TypeReference;
1919
import com.fasterxml.jackson.databind.ObjectMapper;
2020
import io.modelcontextprotocol.client.transport.FlowSseClient.SseEvent;
21-
import io.modelcontextprotocol.spec.ClientMcpTransport;
21+
import io.modelcontextprotocol.spec.McpClientTransport;
2222
import io.modelcontextprotocol.spec.McpError;
2323
import io.modelcontextprotocol.spec.McpSchema;
2424
import io.modelcontextprotocol.spec.McpSchema.JSONRPCMessage;
@@ -52,9 +52,9 @@
5252
*
5353
* @author Christian Tzolov
5454
* @see io.modelcontextprotocol.spec.McpTransport
55-
* @see io.modelcontextprotocol.spec.ClientMcpTransport
55+
* @see io.modelcontextprotocol.spec.McpClientTransport
5656
*/
57-
public class HttpClientSseClientTransport implements ClientMcpTransport {
57+
public class HttpClientSseClientTransport implements McpClientTransport {
5858

5959
private static final Logger logger = LoggerFactory.getLogger(HttpClientSseClientTransport.class);
6060

0 commit comments

Comments
 (0)