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