diff --git a/mcp-core/pom.xml b/mcp-core/pom.xml
index e6eabff..6dab41a 100644
--- a/mcp-core/pom.xml
+++ b/mcp-core/pom.xml
@@ -93,43 +93,6 @@
provided
-
- org.springframework
- spring-webmvc
- ${springframework.version}
- test
-
-
-
- tools.jackson.core
- jackson-databind
- ${jackson3.version}
- test
-
-
-
- io.projectreactor.netty
- reactor-netty-http
- test
-
-
-
-
- org.springframework
- spring-context
- ${springframework.version}
- test
-
-
-
- org.springframework
- spring-test
- ${springframework.version}
- test
-
-
org.assertj
assertj-core
@@ -195,20 +158,6 @@
test
-
-
- org.apache.tomcat.embed
- tomcat-embed-core
- ${tomcat.version}
- test
-
-
- org.apache.tomcat.embed
- tomcat-embed-websocket
- ${tomcat.version}
- test
-
-
org.testcontainers
toxiproxy
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/MockMcpClientTransport.java b/mcp-core/src/test/java/io/modelcontextprotocol/MockMcpClientTransport.java
index 04b0589..f9fc41b 100644
--- a/mcp-core/src/test/java/io/modelcontextprotocol/MockMcpClientTransport.java
+++ b/mcp-core/src/test/java/io/modelcontextprotocol/MockMcpClientTransport.java
@@ -100,7 +100,7 @@ public class MockMcpClientTransport implements McpClientTransport {
@Override
public T unmarshalFrom(Object data, TypeRef typeRef) {
- return McpJsonDefaults.getDefaultMcpJsonMapper().convertValue(data, typeRef);
+ return (T) data;
}
}
diff --git a/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/security/WebFluxServerTransportSecurityIntegrationTests.java b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/security/WebFluxServerTransportSecurityIntegrationTests.java
index 06e1286..6e23192 100644
--- a/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/security/WebFluxServerTransportSecurityIntegrationTests.java
+++ b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/security/WebFluxServerTransportSecurityIntegrationTests.java
@@ -11,6 +11,7 @@ import io.modelcontextprotocol.client.McpClient;
import io.modelcontextprotocol.client.McpSyncClient;
import io.modelcontextprotocol.client.transport.WebClientStreamableHttpTransport;
import io.modelcontextprotocol.client.transport.WebFluxSseClientTransport;
+import io.modelcontextprotocol.json.McpJsonDefaults;
import io.modelcontextprotocol.json.McpJsonMapper;
import io.modelcontextprotocol.server.McpServer;
import io.modelcontextprotocol.server.TestUtil;
@@ -194,7 +195,7 @@ public class WebFluxServerTransportSecurityIntegrationTests {
TestOriginHeaderExchangeFilterFunction exchangeFilterFunction) {
var transport = WebFluxSseClientTransport
.builder(WebClient.builder().baseUrl(baseUrl).filter(exchangeFilterFunction))
- .jsonMapper(McpJsonMapper.getDefault())
+ .jsonMapper(McpJsonDefaults.getDefaultMcpJsonMapper())
.build();
return McpClient.sync(transport).initializationTimeout(Duration.ofMillis(500)).build();
}
@@ -226,7 +227,7 @@ public class WebFluxServerTransportSecurityIntegrationTests {
TestOriginHeaderExchangeFilterFunction exchangeFilterFunction) {
var transport = WebClientStreamableHttpTransport
.builder(WebClient.builder().baseUrl(baseUrl).filter(exchangeFilterFunction))
- .jsonMapper(McpJsonMapper.getDefault())
+ .jsonMapper(McpJsonDefaults.getDefaultMcpJsonMapper())
.openConnectionOnStartup(true)
.build();
return McpClient.sync(transport).initializationTimeout(Duration.ofMillis(500)).build();
@@ -259,7 +260,7 @@ public class WebFluxServerTransportSecurityIntegrationTests {
TestOriginHeaderExchangeFilterFunction exchangeFilterFunction) {
var transport = WebClientStreamableHttpTransport
.builder(WebClient.builder().baseUrl(baseUrl).filter(exchangeFilterFunction))
- .jsonMapper(McpJsonMapper.getDefault())
+ .jsonMapper(McpJsonDefaults.getDefaultMcpJsonMapper())
.openConnectionOnStartup(true)
.build();
return McpClient.sync(transport).initializationTimeout(Duration.ofMillis(500)).build();
diff --git a/mcp-spring/mcp-spring-webmvc/src/test/java/io/modelcontextprotocol/security/ServerTransportSecurityIntegrationTests.java b/mcp-spring/mcp-spring-webmvc/src/test/java/io/modelcontextprotocol/security/ServerTransportSecurityIntegrationTests.java
index 9615547..a5f3597 100644
--- a/mcp-spring/mcp-spring-webmvc/src/test/java/io/modelcontextprotocol/security/ServerTransportSecurityIntegrationTests.java
+++ b/mcp-spring/mcp-spring-webmvc/src/test/java/io/modelcontextprotocol/security/ServerTransportSecurityIntegrationTests.java
@@ -15,6 +15,7 @@ import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
import io.modelcontextprotocol.client.transport.HttpClientStreamableHttpTransport;
import io.modelcontextprotocol.client.transport.customizer.McpSyncHttpClientRequestCustomizer;
import io.modelcontextprotocol.common.McpTransportContext;
+import io.modelcontextprotocol.json.McpJsonDefaults;
import io.modelcontextprotocol.json.McpJsonMapper;
import io.modelcontextprotocol.server.McpServer;
import io.modelcontextprotocol.server.McpStatelessSyncServer;
@@ -209,7 +210,7 @@ public class ServerTransportSecurityIntegrationTests {
McpSyncClient createMcpClient(McpSyncHttpClientRequestCustomizer requestCustomizer) {
var transport = HttpClientSseClientTransport.builder(baseUrl)
.httpRequestCustomizer(requestCustomizer)
- .jsonMapper(McpJsonMapper.getDefault())
+ .jsonMapper(McpJsonDefaults.getDefaultMcpJsonMapper())
.build();
return McpClient.sync(transport).initializationTimeout(Duration.ofMillis(500)).build();
}
@@ -248,7 +249,7 @@ public class ServerTransportSecurityIntegrationTests {
McpSyncClient createMcpClient(McpSyncHttpClientRequestCustomizer requestCustomizer) {
var transport = HttpClientStreamableHttpTransport.builder(baseUrl)
.httpRequestCustomizer(requestCustomizer)
- .jsonMapper(McpJsonMapper.getDefault())
+ .jsonMapper(McpJsonDefaults.getDefaultMcpJsonMapper())
.openConnectionOnStartup(true)
.build();
return McpClient.sync(transport).initializationTimeout(Duration.ofMillis(500)).build();
@@ -286,7 +287,7 @@ public class ServerTransportSecurityIntegrationTests {
McpSyncClient createMcpClient(McpSyncHttpClientRequestCustomizer requestCustomizer) {
var transport = HttpClientStreamableHttpTransport.builder(baseUrl)
.httpRequestCustomizer(requestCustomizer)
- .jsonMapper(McpJsonMapper.getDefault())
+ .jsonMapper(McpJsonDefaults.getDefaultMcpJsonMapper())
.openConnectionOnStartup(true)
.build();
return McpClient.sync(transport).initializationTimeout(Duration.ofMillis(500)).build();
diff --git a/mcp-test/pom.xml b/mcp-test/pom.xml
index a6314e8..c77068f 100644
--- a/mcp-test/pom.xml
+++ b/mcp-test/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
io.modelcontextprotocol.sdk
@@ -33,12 +33,6 @@
${slf4j-api.version}
-
- tools.jackson.core
- jackson-databind
- ${jackson3.version}
-
-
io.projectreactor
reactor-core
@@ -97,8 +91,91 @@
${json-unit-assertj.version}
+
+
+ org.springframework
+ spring-webmvc
+ ${springframework.version}
+ test
+
+
+
+ org.springframework
+ spring-context
+ ${springframework.version}
+ test
+
+
+
+ org.springframework
+ spring-test
+ ${springframework.version}
+ test
+
+
+
+ io.projectreactor.netty
+ reactor-netty-http
+ test
+
+
+
+ org.apache.tomcat.embed
+ tomcat-embed-core
+ ${tomcat.version}
+ test
+
+
+
+ org.apache.tomcat.embed
+ tomcat-embed-websocket
+ ${tomcat.version}
+ test
+
+
+
+ net.bytebuddy
+ byte-buddy
+ ${byte-buddy.version}
+ test
+
+
+
+ jakarta.servlet
+ jakarta.servlet-api
+ ${jakarta.servlet.version}
+ test
+
+
+
+ jackson3
+
+ true
+
+
+
+ io.modelcontextprotocol.sdk
+ mcp-json-jackson3
+ 0.18.0-SNAPSHOT
+ test
+
+
+
+
+ jackson2
+
+
+ io.modelcontextprotocol.sdk
+ mcp-json-jackson2
+ 0.18.0-SNAPSHOT
+ test
+
+
+
+
+
\ No newline at end of file
diff --git a/mcp-test/src/main/java/io/modelcontextprotocol/MockMcpTransport.java b/mcp-test/src/test/java/io/modelcontextprotocol/MockMcpClientTransport.java
similarity index 79%
rename from mcp-test/src/main/java/io/modelcontextprotocol/MockMcpTransport.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/MockMcpClientTransport.java
index 7d71376..04b0589 100644
--- a/mcp-test/src/main/java/io/modelcontextprotocol/MockMcpTransport.java
+++ b/mcp-test/src/test/java/io/modelcontextprotocol/MockMcpClientTransport.java
@@ -15,34 +15,40 @@ import io.modelcontextprotocol.spec.McpClientTransport;
import io.modelcontextprotocol.spec.McpSchema;
import io.modelcontextprotocol.spec.McpSchema.JSONRPCNotification;
import io.modelcontextprotocol.spec.McpSchema.JSONRPCRequest;
-import io.modelcontextprotocol.spec.McpServerTransport;
import reactor.core.publisher.Mono;
import reactor.core.publisher.Sinks;
/**
- * A mock implementation of the {@link McpClientTransport} and {@link McpServerTransport}
- * interfaces.
- *
- * @deprecated not used. to be removed in the future.
+ * A mock implementation of the {@link McpClientTransport} interfaces.
*/
-@Deprecated
-public class MockMcpTransport implements McpClientTransport, McpServerTransport {
+public class MockMcpClientTransport implements McpClientTransport {
private final Sinks.Many inbound = Sinks.many().unicast().onBackpressureBuffer();
private final List sent = new ArrayList<>();
- private final BiConsumer interceptor;
+ private final BiConsumer interceptor;
- public MockMcpTransport() {
+ private String protocolVersion = McpSchema.LATEST_PROTOCOL_VERSION;
+
+ public MockMcpClientTransport() {
this((t, msg) -> {
});
}
- public MockMcpTransport(BiConsumer interceptor) {
+ public MockMcpClientTransport(BiConsumer interceptor) {
this.interceptor = interceptor;
}
+ public MockMcpClientTransport withProtocolVersion(String protocolVersion) {
+ return this;
+ }
+
+ @Override
+ public List protocolVersions() {
+ return List.of(protocolVersion);
+ }
+
public void simulateIncomingMessage(McpSchema.JSONRPCMessage message) {
if (inbound.tryEmitNext(message).isFailure()) {
throw new RuntimeException("Failed to process incoming message " + message);
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/MockMcpServerTransport.java b/mcp-test/src/test/java/io/modelcontextprotocol/MockMcpServerTransport.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/MockMcpServerTransport.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/MockMcpServerTransport.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/MockMcpServerTransportProvider.java b/mcp-test/src/test/java/io/modelcontextprotocol/MockMcpServerTransportProvider.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/MockMcpServerTransportProvider.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/MockMcpServerTransportProvider.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpAsyncClientResiliencyTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpAsyncClientResiliencyTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpAsyncClientResiliencyTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpAsyncClientResiliencyTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpAsyncClientTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpAsyncClientTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpAsyncClientTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpAsyncClientTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpSyncClientTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpSyncClientTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpSyncClientTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpSyncClientTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/client/HttpSseMcpAsyncClientLostConnectionTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/client/HttpSseMcpAsyncClientLostConnectionTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/client/HttpSseMcpAsyncClientLostConnectionTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/client/HttpSseMcpAsyncClientLostConnectionTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/client/HttpSseMcpAsyncClientTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/client/HttpSseMcpAsyncClientTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/client/HttpSseMcpAsyncClientTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/client/HttpSseMcpAsyncClientTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/client/HttpSseMcpSyncClientTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/client/HttpSseMcpSyncClientTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/client/HttpSseMcpSyncClientTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/client/HttpSseMcpSyncClientTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/client/McpAsyncClientTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/client/McpAsyncClientTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/client/McpAsyncClientTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/client/McpAsyncClientTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/client/McpClientProtocolVersionTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/client/McpClientProtocolVersionTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/client/McpClientProtocolVersionTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/client/McpClientProtocolVersionTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/client/ServerParameterUtils.java b/mcp-test/src/test/java/io/modelcontextprotocol/client/ServerParameterUtils.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/client/ServerParameterUtils.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/client/ServerParameterUtils.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransportEmptyJsonResponseTest.java b/mcp-test/src/test/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransportEmptyJsonResponseTest.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransportEmptyJsonResponseTest.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransportEmptyJsonResponseTest.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransportErrorHandlingTest.java b/mcp-test/src/test/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransportErrorHandlingTest.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransportErrorHandlingTest.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransportErrorHandlingTest.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransportTest.java b/mcp-test/src/test/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransportTest.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransportTest.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransportTest.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/common/AsyncServerMcpTransportContextIntegrationTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/common/AsyncServerMcpTransportContextIntegrationTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/common/AsyncServerMcpTransportContextIntegrationTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/common/AsyncServerMcpTransportContextIntegrationTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/common/HttpClientStreamableHttpVersionNegotiationIntegrationTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/common/HttpClientStreamableHttpVersionNegotiationIntegrationTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/common/HttpClientStreamableHttpVersionNegotiationIntegrationTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/common/HttpClientStreamableHttpVersionNegotiationIntegrationTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/common/SyncServerMcpTransportContextIntegrationTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/common/SyncServerMcpTransportContextIntegrationTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/common/SyncServerMcpTransportContextIntegrationTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/common/SyncServerMcpTransportContextIntegrationTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/HttpServletSseIntegrationTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/HttpServletSseIntegrationTests.java
similarity index 97%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/HttpServletSseIntegrationTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/HttpServletSseIntegrationTests.java
index d2b9d14..5841c13 100644
--- a/mcp-core/src/test/java/io/modelcontextprotocol/server/HttpServletSseIntegrationTests.java
+++ b/mcp-test/src/test/java/io/modelcontextprotocol/server/HttpServletSseIntegrationTests.java
@@ -8,6 +8,7 @@ import java.time.Duration;
import java.util.Map;
import java.util.stream.Stream;
+import io.modelcontextprotocol.AbstractMcpClientServerIntegrationTests;
import io.modelcontextprotocol.client.McpClient;
import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
import io.modelcontextprotocol.common.McpTransportContext;
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/HttpServletStatelessIntegrationTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/HttpServletStatelessIntegrationTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/HttpServletStatelessIntegrationTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/HttpServletStatelessIntegrationTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableAsyncServerTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableAsyncServerTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableAsyncServerTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableAsyncServerTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableIntegrationTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableIntegrationTests.java
similarity index 97%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableIntegrationTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableIntegrationTests.java
index 81423e0..5b934e4 100644
--- a/mcp-core/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableIntegrationTests.java
+++ b/mcp-test/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableIntegrationTests.java
@@ -8,6 +8,7 @@ import java.time.Duration;
import java.util.Map;
import java.util.stream.Stream;
+import io.modelcontextprotocol.AbstractMcpClientServerIntegrationTests;
import io.modelcontextprotocol.client.McpClient;
import io.modelcontextprotocol.client.transport.HttpClientStreamableHttpTransport;
import io.modelcontextprotocol.common.McpTransportContext;
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableSyncServerTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableSyncServerTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableSyncServerTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableSyncServerTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/McpCompletionTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/McpCompletionTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/McpCompletionTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/McpCompletionTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/McpServerProtocolVersionTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/McpServerProtocolVersionTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/McpServerProtocolVersionTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/McpServerProtocolVersionTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/ResourceTemplateManagementTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/ResourceTemplateManagementTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/ResourceTemplateManagementTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/ResourceTemplateManagementTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/StdioMcpAsyncServerTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/StdioMcpAsyncServerTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/StdioMcpAsyncServerTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/StdioMcpAsyncServerTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/StdioMcpSyncServerTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/StdioMcpSyncServerTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/StdioMcpSyncServerTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/StdioMcpSyncServerTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/transport/HttpServletSseServerCustomContextPathTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/transport/HttpServletSseServerCustomContextPathTests.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/transport/HttpServletSseServerCustomContextPathTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/transport/HttpServletSseServerCustomContextPathTests.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/transport/McpTestRequestRecordingServletFilter.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/transport/McpTestRequestRecordingServletFilter.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/transport/McpTestRequestRecordingServletFilter.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/transport/McpTestRequestRecordingServletFilter.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/transport/ServerTransportSecurityIntegrationTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/transport/ServerTransportSecurityIntegrationTests.java
similarity index 97%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/transport/ServerTransportSecurityIntegrationTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/transport/ServerTransportSecurityIntegrationTests.java
index e9e64c0..70df655 100644
--- a/mcp-core/src/test/java/io/modelcontextprotocol/server/transport/ServerTransportSecurityIntegrationTests.java
+++ b/mcp-test/src/test/java/io/modelcontextprotocol/server/transport/ServerTransportSecurityIntegrationTests.java
@@ -15,7 +15,7 @@ import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
import io.modelcontextprotocol.client.transport.HttpClientStreamableHttpTransport;
import io.modelcontextprotocol.client.transport.customizer.McpSyncHttpClientRequestCustomizer;
import io.modelcontextprotocol.common.McpTransportContext;
-import io.modelcontextprotocol.json.McpJsonMapper;
+import io.modelcontextprotocol.json.McpJsonDefaults;
import io.modelcontextprotocol.server.McpServer;
import io.modelcontextprotocol.spec.McpSchema;
import jakarta.servlet.http.HttpServlet;
@@ -195,7 +195,7 @@ class ServerTransportSecurityIntegrationTests {
public McpSyncClient createMcpClient(String baseUrl, TestRequestCustomizer requestCustomizer) {
var transport = HttpClientSseClientTransport.builder(baseUrl)
.httpRequestCustomizer(requestCustomizer)
- .jsonMapper(McpJsonMapper.getDefault())
+ .jsonMapper(McpJsonDefaults.getDefaultMcpJsonMapper())
.build();
return McpClient.sync(transport).initializationTimeout(Duration.ofMillis(500)).build();
}
@@ -226,7 +226,7 @@ class ServerTransportSecurityIntegrationTests {
public McpSyncClient createMcpClient(String baseUrl, TestRequestCustomizer requestCustomizer) {
var transport = HttpClientStreamableHttpTransport.builder(baseUrl)
.httpRequestCustomizer(requestCustomizer)
- .jsonMapper(McpJsonMapper.getDefault())
+ .jsonMapper(McpJsonDefaults.getDefaultMcpJsonMapper())
.openConnectionOnStartup(true)
.build();
return McpClient.sync(transport).initializationTimeout(Duration.ofMillis(500)).build();
@@ -258,7 +258,7 @@ class ServerTransportSecurityIntegrationTests {
public McpSyncClient createMcpClient(String baseUrl, TestRequestCustomizer requestCustomizer) {
var transport = HttpClientStreamableHttpTransport.builder(baseUrl)
.httpRequestCustomizer(requestCustomizer)
- .jsonMapper(McpJsonMapper.getDefault())
+ .jsonMapper(McpJsonDefaults.getDefaultMcpJsonMapper())
.openConnectionOnStartup(true)
.build();
return McpClient.sync(transport).initializationTimeout(Duration.ofMillis(500)).build();
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/transport/StdioServerTransportProviderTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/transport/StdioServerTransportProviderTests.java
similarity index 92%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/transport/StdioServerTransportProviderTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/transport/StdioServerTransportProviderTests.java
index 6a70af3..996166f 100644
--- a/mcp-core/src/test/java/io/modelcontextprotocol/server/transport/StdioServerTransportProviderTests.java
+++ b/mcp-test/src/test/java/io/modelcontextprotocol/server/transport/StdioServerTransportProviderTests.java
@@ -14,6 +14,7 @@ import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
+import io.modelcontextprotocol.json.McpJsonDefaults;
import io.modelcontextprotocol.spec.McpError;
import io.modelcontextprotocol.spec.McpSchema;
import io.modelcontextprotocol.spec.McpServerSession;
@@ -25,7 +26,6 @@ import org.junit.jupiter.api.Test;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
-import static io.modelcontextprotocol.util.McpJsonMapperUtils.JSON_MAPPER;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
@@ -37,7 +37,6 @@ import static org.mockito.Mockito.when;
*
* @author Christian Tzolov
*/
-@Disabled
class StdioServerTransportProviderTests {
private final PrintStream originalOut = System.out;
@@ -71,7 +70,8 @@ class StdioServerTransportProviderTests {
when(mockSession.closeGracefully()).thenReturn(Mono.empty());
when(mockSession.sendNotification(any(), any())).thenReturn(Mono.empty());
- transportProvider = new StdioServerTransportProvider(JSON_MAPPER, System.in, testOutPrintStream);
+ transportProvider = new StdioServerTransportProvider(McpJsonDefaults.getDefaultMcpJsonMapper(), System.in,
+ testOutPrintStream);
}
@AfterEach
@@ -101,7 +101,8 @@ class StdioServerTransportProviderTests {
String jsonMessage = "{\"jsonrpc\":\"2.0\",\"method\":\"test\",\"params\":{},\"id\":1}\n";
InputStream stream = new ByteArrayInputStream(jsonMessage.getBytes(StandardCharsets.UTF_8));
- transportProvider = new StdioServerTransportProvider(JSON_MAPPER, stream, System.out);
+ transportProvider = new StdioServerTransportProvider(McpJsonDefaults.getDefaultMcpJsonMapper(), stream,
+ System.out);
// Set up a real session to capture the message
AtomicReference capturedMessage = new AtomicReference<>();
CountDownLatch messageLatch = new CountDownLatch(1);
@@ -181,7 +182,7 @@ class StdioServerTransportProviderTests {
@Test
void shouldHandleNotificationBeforeSessionFactoryIsSet() {
- transportProvider = new StdioServerTransportProvider(JSON_MAPPER);
+ transportProvider = new StdioServerTransportProvider(McpJsonDefaults.getDefaultMcpJsonMapper());
// Send notification before setting session factory
StepVerifier.create(transportProvider.notifyClients("testNotification", Map.of("key", "value")))
.verifyErrorSatisfies(error -> {
@@ -196,7 +197,8 @@ class StdioServerTransportProviderTests {
String jsonMessage = "{invalid json}\n";
InputStream stream = new ByteArrayInputStream(jsonMessage.getBytes(StandardCharsets.UTF_8));
- transportProvider = new StdioServerTransportProvider(JSON_MAPPER, stream, testOutPrintStream);
+ transportProvider = new StdioServerTransportProvider(McpJsonDefaults.getDefaultMcpJsonMapper(), stream,
+ testOutPrintStream);
// Set up a session factory
transportProvider.setSessionFactory(sessionFactory);
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/transport/TomcatTestUtil.java b/mcp-test/src/test/java/io/modelcontextprotocol/server/transport/TomcatTestUtil.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/server/transport/TomcatTestUtil.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/server/transport/TomcatTestUtil.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/spec/CompleteCompletionSerializationTest.java b/mcp-test/src/test/java/io/modelcontextprotocol/spec/CompleteCompletionSerializationTest.java
similarity index 100%
rename from mcp-core/src/test/java/io/modelcontextprotocol/spec/CompleteCompletionSerializationTest.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/spec/CompleteCompletionSerializationTest.java
diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java b/mcp-test/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java
similarity index 99%
rename from mcp-core/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java
rename to mcp-test/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java
index 82ffe9e..c732b1c 100644
--- a/mcp-core/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java
+++ b/mcp-test/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java
@@ -17,10 +17,9 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.assertj.core.api.InstanceOfAssertFactories;
import org.junit.jupiter.api.Test;
-import tools.jackson.databind.exc.InvalidTypeIdException;
-
import io.modelcontextprotocol.spec.McpSchema.TextResourceContents;
import net.javacrumbs.jsonunit.core.Option;
@@ -56,15 +55,19 @@ public class McpSchemaTests {
}
@Test
- void testContentDeserializationWrongType() throws Exception {
-
+ void testContentDeserializationWrongType() {
assertThatThrownBy(() -> JSON_MAPPER.readValue("""
{"type":"WRONG","text":"XXX"}""", McpSchema.TextContent.class)).isInstanceOf(IOException.class)
- .hasMessage("Failed to read value")
- .cause()
- .isInstanceOf(InvalidTypeIdException.class)
+ // Jackson 2 throws the InvalidTypeException directly, but Jackson 3 wraps it.
+ // Try to unwrap in case it's Jackson 3.
+ .extracting(throwable -> throwable.getCause() != null ? throwable.getCause() : throwable)
+ .asInstanceOf(InstanceOfAssertFactories.THROWABLE)
.hasMessageContaining(
- "Could not resolve type id 'WRONG' as a subtype of `io.modelcontextprotocol.spec.McpSchema$TextContent`: known type ids = [audio, image, resource, resource_link, text]");
+ "Could not resolve type id 'WRONG' as a subtype of `io.modelcontextprotocol.spec.McpSchema$TextContent`: known type ids = [audio, image, resource, resource_link, text]")
+ .extracting(Object::getClass)
+ .extracting(Class::getSimpleName)
+ // Class name is the same for both Jackson 2 and 3, only the package differs.
+ .isEqualTo("InvalidTypeIdException");
}
@Test