From 789d87562c5108318f2628c7e7534fdc7ba517c7 Mon Sep 17 00:00:00 2001 From: Kevin Stanton Date: Sun, 10 Aug 2025 00:18:05 -0500 Subject: [PATCH 01/11] test transportContext present for both HttpServletSseServerTransportProvider and HttpServletStreamableServerTransportProvider --- ...stractMcpClientServerIntegrationTests.java | 62 +++++++++++++++++++ .../HttpServletSseIntegrationTests.java | 1 + ...HttpServletStreamableIntegrationTests.java | 1 + 3 files changed, 64 insertions(+) diff --git a/mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpClientServerIntegrationTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpClientServerIntegrationTests.java index e2adb340..cc580bdd 100644 --- a/mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpClientServerIntegrationTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpClientServerIntegrationTests.java @@ -10,6 +10,7 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.assertj.core.api.Assertions.assertWith; import static org.awaitility.Awaitility.await; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; import java.net.URI; @@ -28,6 +29,7 @@ import java.util.function.Function; import java.util.stream.Collectors; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -825,6 +827,61 @@ void testThrowingToolCallIsCaughtBeforeTimeout(String clientType) { mcpServer.close(); } + @ParameterizedTest(name = "{0} : {displayName} ") + @ValueSource(strings = { "httpclient" }) + void testToolCallSuccessWithTranportContextExtraction(String clientType) { + + var clientBuilder = clientBuilders.get(clientType); + + var expectedCallResponse = new McpSchema.CallToolResult( + List.of(new McpSchema.TextContent("CALL RESPONSE; ctx=value")), null); + McpServerFeatures.SyncToolSpecification tool1 = McpServerFeatures.SyncToolSpecification.builder() + .tool(Tool.builder().name("tool1").description("tool1 description").inputSchema(emptyJsonSchema).build()) + .callHandler((exchange, request) -> { + + McpTransportContext transportContext = exchange.transportContext(); + assertTrue(transportContext != null, "transportContext should not be null"); + assertTrue(!transportContext.equals(McpTransportContext.EMPTY), "transportContext should not be empty"); + String ctxValue = (String) transportContext.get("important"); + + try { + HttpResponse response = HttpClient.newHttpClient() + .send(HttpRequest.newBuilder() + .uri(URI.create( + "https://raw.githubusercontent.com/modelcontextprotocol/java-sdk/refs/heads/main/README.md")) + .GET() + .build(), HttpResponse.BodyHandlers.ofString()); + String responseBody = response.body(); + assertThat(responseBody).isNotBlank(); + } + catch (Exception e) { + e.printStackTrace(); + } + + return new McpSchema.CallToolResult( + List.of(new McpSchema.TextContent("CALL RESPONSE; ctx=" + ctxValue)), null); + }) + .build(); + + var mcpServer = prepareSyncServerBuilder().capabilities(ServerCapabilities.builder().tools(true).build()) + .tools(tool1) + .build(); + + try (var mcpClient = clientBuilder.build()) { + + InitializeResult initResult = mcpClient.initialize(); + assertThat(initResult).isNotNull(); + + assertThat(mcpClient.listTools().tools()).contains(tool1.tool()); + + CallToolResult response = mcpClient.callTool(new McpSchema.CallToolRequest("tool1", Map.of())); + + assertThat(response).isNotNull().isEqualTo(expectedCallResponse); + } + + mcpServer.close(); + } + @ParameterizedTest(name = "{0} : {displayName} ") @ValueSource(strings = { "httpclient" }) void testToolListChangeHandlingSuccess(String clientType) { @@ -1531,4 +1588,9 @@ private double evaluateExpression(String expression) { }; } + protected static McpTransportContextExtractor extractor = (r, tc) -> { + tc.put("important", "value"); + return tc; + }; + } diff --git a/mcp/src/test/java/io/modelcontextprotocol/server/HttpServletSseIntegrationTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/HttpServletSseIntegrationTests.java index 56e74218..4435b8b4 100644 --- a/mcp/src/test/java/io/modelcontextprotocol/server/HttpServletSseIntegrationTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/server/HttpServletSseIntegrationTests.java @@ -40,6 +40,7 @@ public void before() { // Create and configure the transport provider mcpServerTransportProvider = HttpServletSseServerTransportProvider.builder() .objectMapper(new ObjectMapper()) + .contextExtractor(extractor) .messageEndpoint(CUSTOM_MESSAGE_ENDPOINT) .sseEndpoint(CUSTOM_SSE_ENDPOINT) .build(); diff --git a/mcp/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableIntegrationTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableIntegrationTests.java index 6ac10014..0815556b 100644 --- a/mcp/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableIntegrationTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/server/HttpServletStreamableIntegrationTests.java @@ -38,6 +38,7 @@ public void before() { // Create and configure the transport provider mcpServerTransportProvider = HttpServletStreamableServerTransportProvider.builder() .objectMapper(new ObjectMapper()) + .contextExtractor(extractor) .mcpEndpoint(MESSAGE_ENDPOINT) .keepAliveInterval(Duration.ofSeconds(1)) .build(); From 7d5fcb3e76949b0c50b48c493d8fb1d63ce125b0 Mon Sep 17 00:00:00 2001 From: Kevin Stanton Date: Sat, 9 Aug 2025 18:22:25 -0500 Subject: [PATCH 02/11] add McpTransportContext capability to HttpServletSseServerTransportProvider --- .../server/DefaultMcpTransportContext.java | 10 ++++ ...HttpServletSseServerTransportProvider.java | 51 +++++++++++++++++-- .../spec/McpServerSession.java | 30 ++++++++--- 3 files changed, 80 insertions(+), 11 deletions(-) diff --git a/mcp/src/main/java/io/modelcontextprotocol/server/DefaultMcpTransportContext.java b/mcp/src/main/java/io/modelcontextprotocol/server/DefaultMcpTransportContext.java index 9e18e189..c6a556b6 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/server/DefaultMcpTransportContext.java +++ b/mcp/src/main/java/io/modelcontextprotocol/server/DefaultMcpTransportContext.java @@ -5,6 +5,7 @@ package io.modelcontextprotocol.server; import java.util.Map; +import java.util.StringJoiner; import java.util.concurrent.ConcurrentHashMap; /** @@ -46,4 +47,13 @@ public McpTransportContext copy() { return new DefaultMcpTransportContext(new ConcurrentHashMap<>(this.storage)); } + // TODO for debugging + + @Override + public String toString() { + return new StringJoiner(", ", DefaultMcpTransportContext.class.getSimpleName() + "[", "]") + .add("storage=" + storage) + .toString(); + } + } diff --git a/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java b/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java index ceeea31b..8c45b7cc 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java +++ b/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java @@ -16,6 +16,9 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import io.modelcontextprotocol.server.DefaultMcpTransportContext; +import io.modelcontextprotocol.server.McpTransportContext; +import io.modelcontextprotocol.server.McpTransportContextExtractor; import io.modelcontextprotocol.spec.McpError; import io.modelcontextprotocol.spec.McpSchema; import io.modelcontextprotocol.spec.McpServerSession; @@ -102,6 +105,8 @@ public class HttpServletSseServerTransportProvider extends HttpServlet implement /** Map of active client sessions, keyed by session ID */ private final Map sessions = new ConcurrentHashMap<>(); + private McpTransportContextExtractor contextExtractor; + /** Flag indicating if the transport is in the process of shutting down */ private final AtomicBoolean isClosing = new AtomicBoolean(false); @@ -144,7 +149,7 @@ public HttpServletSseServerTransportProvider(ObjectMapper objectMapper, String m @Deprecated public HttpServletSseServerTransportProvider(ObjectMapper objectMapper, String baseUrl, String messageEndpoint, String sseEndpoint) { - this(objectMapper, baseUrl, messageEndpoint, sseEndpoint, null); + this(objectMapper, baseUrl, messageEndpoint, sseEndpoint, null, null); } /** @@ -163,11 +168,33 @@ public HttpServletSseServerTransportProvider(ObjectMapper objectMapper, String b @Deprecated public HttpServletSseServerTransportProvider(ObjectMapper objectMapper, String baseUrl, String messageEndpoint, String sseEndpoint, Duration keepAliveInterval) { + this(objectMapper, baseUrl, messageEndpoint, sseEndpoint, keepAliveInterval, null); + } + + /** + * Creates a new HttpServletSseServerTransportProvider instance with a custom SSE + * endpoint. + * @param objectMapper The JSON object mapper to use for message + * serialization/deserialization + * @param baseUrl The base URL for the server transport + * @param messageEndpoint The endpoint path where clients will send their messages + * @param sseEndpoint The endpoint path where clients will establish SSE connections + * @param keepAliveInterval The interval for keep-alive pings, or null to disable + * @param contextExtractor The extractor for transport context from the request. + * keep-alive functionality + * @deprecated Use the builder {@link #builder()} instead for better configuration + * options. + */ + @Deprecated + public HttpServletSseServerTransportProvider(ObjectMapper objectMapper, String baseUrl, String messageEndpoint, + String sseEndpoint, Duration keepAliveInterval, + McpTransportContextExtractor contextExtractor) { this.objectMapper = objectMapper; this.baseUrl = baseUrl; this.messageEndpoint = messageEndpoint; this.sseEndpoint = sseEndpoint; + this.contextExtractor = contextExtractor; if (keepAliveInterval != null) { @@ -339,10 +366,13 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) body.append(line); } + final McpTransportContext transportContext = contextExtractor.extract(request, + new DefaultMcpTransportContext()); McpSchema.JSONRPCMessage message = McpSchema.deserializeJsonRpcMessage(objectMapper, body.toString()); // Process the message through the session's handle method - session.handle(message).block(); // Block for Servlet compatibility + // Block for Servlet compatibility + session.handle(message).contextWrite(ctx -> ctx.put(McpTransportContext.KEY, transportContext)).block(); response.setStatus(HttpServletResponse.SC_OK); } @@ -534,6 +564,8 @@ public static class Builder { private String sseEndpoint = DEFAULT_SSE_ENDPOINT; + private McpTransportContextExtractor contextExtractor = (serverRequest, context) -> context; + private Duration keepAliveInterval; /** @@ -583,6 +615,19 @@ public Builder sseEndpoint(String sseEndpoint) { return this; } + /** + * Sets the context extractor for extracting transport context from the request. + * @param contextExtractor The context extractor to use. Must not be null. + * @return this builder instance + * @throws IllegalArgumentException if contextExtractor is null + */ + public HttpServletSseServerTransportProvider.Builder contextExtractor( + McpTransportContextExtractor contextExtractor) { + Assert.notNull(contextExtractor, "Context extractor must not be null"); + this.contextExtractor = contextExtractor; + return this; + } + /** * Sets the interval for keep-alive pings. *

@@ -609,7 +654,7 @@ public HttpServletSseServerTransportProvider build() { throw new IllegalStateException("MessageEndpoint must be set"); } return new HttpServletSseServerTransportProvider(objectMapper, baseUrl, messageEndpoint, sseEndpoint, - keepAliveInterval); + keepAliveInterval, contextExtractor); } } diff --git a/mcp/src/main/java/io/modelcontextprotocol/spec/McpServerSession.java b/mcp/src/main/java/io/modelcontextprotocol/spec/McpServerSession.java index 62985dc1..669c10b8 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/spec/McpServerSession.java +++ b/mcp/src/main/java/io/modelcontextprotocol/spec/McpServerSession.java @@ -198,7 +198,9 @@ public Mono sendNotification(String method, Object params) { * @return a Mono that completes when the message is processed */ public Mono handle(McpSchema.JSONRPCMessage message) { - return Mono.defer(() -> { + return Mono.deferContextual(ctx -> { + McpTransportContext transportContext = ctx.getOrDefault(McpTransportContext.KEY, McpTransportContext.EMPTY); + // TODO handle errors for communication to without initialization happening // first if (message instanceof McpSchema.JSONRPCResponse response) { @@ -214,7 +216,7 @@ public Mono handle(McpSchema.JSONRPCMessage message) { } else if (message instanceof McpSchema.JSONRPCRequest request) { logger.debug("Received request: {}", request); - return handleIncomingRequest(request).onErrorResume(error -> { + return handleIncomingRequest(request, transportContext).onErrorResume(error -> { var errorResponse = new McpSchema.JSONRPCResponse(McpSchema.JSONRPC_VERSION, request.id(), null, new McpSchema.JSONRPCResponse.JSONRPCError(McpSchema.ErrorCodes.INTERNAL_ERROR, error.getMessage(), null)); @@ -227,7 +229,7 @@ else if (message instanceof McpSchema.JSONRPCNotification notification) { // happening first logger.debug("Received notification: {}", notification); // TODO: in case of error, should the POST request be signalled? - return handleIncomingNotification(notification) + return handleIncomingNotification(notification, transportContext) .doOnError(error -> logger.error("Error handling notification: {}", error.getMessage())); } else { @@ -240,9 +242,11 @@ else if (message instanceof McpSchema.JSONRPCNotification notification) { /** * Handles an incoming JSON-RPC request by routing it to the appropriate handler. * @param request The incoming JSON-RPC request + * @param transportContext * @return A Mono containing the JSON-RPC response */ - private Mono handleIncomingRequest(McpSchema.JSONRPCRequest request) { + private Mono handleIncomingRequest(McpSchema.JSONRPCRequest request, + McpTransportContext transportContext) { return Mono.defer(() -> { Mono resultMono; if (McpSchema.METHOD_INITIALIZE.equals(request.method())) { @@ -266,7 +270,11 @@ private Mono handleIncomingRequest(McpSchema.JSONRPCR error.message(), error.data()))); } - resultMono = this.exchangeSink.asMono().flatMap(exchange -> handler.handle(exchange, request.params())); + resultMono = this.exchangeSink.asMono().flatMap(exchange -> { + McpAsyncServerExchange newExchange = new McpAsyncServerExchange(exchange.sessionId(), this, + exchange.getClientCapabilities(), exchange.getClientInfo(), transportContext); + return handler.handle(newExchange, request.params()); + }); } return resultMono .map(result -> new McpSchema.JSONRPCResponse(McpSchema.JSONRPC_VERSION, request.id(), result, null)) @@ -280,16 +288,18 @@ private Mono handleIncomingRequest(McpSchema.JSONRPCR /** * Handles an incoming JSON-RPC notification by routing it to the appropriate handler. * @param notification The incoming JSON-RPC notification + * @param transportContext * @return A Mono that completes when the notification is processed */ - private Mono handleIncomingNotification(McpSchema.JSONRPCNotification notification) { + private Mono handleIncomingNotification(McpSchema.JSONRPCNotification notification, + McpTransportContext transportContext) { return Mono.defer(() -> { if (McpSchema.METHOD_NOTIFICATION_INITIALIZED.equals(notification.method())) { this.state.lazySet(STATE_INITIALIZED); // FIXME: The session ID passed here is not the same as the one in the // legacy SSE transport. exchangeSink.tryEmitValue(new McpAsyncServerExchange(this.id, this, clientCapabilities.get(), - clientInfo.get(), McpTransportContext.EMPTY)); + clientInfo.get(), transportContext)); } var handler = notificationHandlers.get(notification.method()); @@ -297,7 +307,11 @@ private Mono handleIncomingNotification(McpSchema.JSONRPCNotification noti logger.warn("No handler registered for notification method: {}", notification); return Mono.empty(); } - return this.exchangeSink.asMono().flatMap(exchange -> handler.handle(exchange, notification.params())); + return this.exchangeSink.asMono().flatMap(exchange -> { + McpAsyncServerExchange newExchange = new McpAsyncServerExchange(exchange.sessionId(), this, + exchange.getClientCapabilities(), exchange.getClientInfo(), transportContext); + return handler.handle(newExchange, notification.params()); + }); }); } From 04b562d0ee4fb120d1ed1089dc2482f01db901f5 Mon Sep 17 00:00:00 2001 From: Kevin Stanton Date: Sun, 10 Aug 2025 01:01:41 -0500 Subject: [PATCH 03/11] remove TODO/debug code --- .../server/DefaultMcpTransportContext.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/mcp/src/main/java/io/modelcontextprotocol/server/DefaultMcpTransportContext.java b/mcp/src/main/java/io/modelcontextprotocol/server/DefaultMcpTransportContext.java index c6a556b6..0222a188 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/server/DefaultMcpTransportContext.java +++ b/mcp/src/main/java/io/modelcontextprotocol/server/DefaultMcpTransportContext.java @@ -47,13 +47,4 @@ public McpTransportContext copy() { return new DefaultMcpTransportContext(new ConcurrentHashMap<>(this.storage)); } - // TODO for debugging - - @Override - public String toString() { - return new StringJoiner(", ", DefaultMcpTransportContext.class.getSimpleName() + "[", "]") - .add("storage=" + storage) - .toString(); - } - } From f2efd30e04538893ce5a1a9933555738779f561a Mon Sep 17 00:00:00 2001 From: Kevin Stanton Date: Sun, 10 Aug 2025 01:02:20 -0500 Subject: [PATCH 04/11] remove unused import --- .../modelcontextprotocol/server/DefaultMcpTransportContext.java | 1 - 1 file changed, 1 deletion(-) diff --git a/mcp/src/main/java/io/modelcontextprotocol/server/DefaultMcpTransportContext.java b/mcp/src/main/java/io/modelcontextprotocol/server/DefaultMcpTransportContext.java index 0222a188..9e18e189 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/server/DefaultMcpTransportContext.java +++ b/mcp/src/main/java/io/modelcontextprotocol/server/DefaultMcpTransportContext.java @@ -5,7 +5,6 @@ package io.modelcontextprotocol.server; import java.util.Map; -import java.util.StringJoiner; import java.util.concurrent.ConcurrentHashMap; /** From 991aa4a879c2f4f3bbb21f977abdcc06285a9c32 Mon Sep 17 00:00:00 2001 From: Kevin Stanton Date: Sun, 10 Aug 2025 15:00:38 -0500 Subject: [PATCH 05/11] fix comment --- .../server/transport/HttpServletSseServerTransportProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java b/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java index 8c45b7cc..d60e927f 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java +++ b/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java @@ -180,8 +180,8 @@ public HttpServletSseServerTransportProvider(ObjectMapper objectMapper, String b * @param messageEndpoint The endpoint path where clients will send their messages * @param sseEndpoint The endpoint path where clients will establish SSE connections * @param keepAliveInterval The interval for keep-alive pings, or null to disable + * keep-alive functionality * @param contextExtractor The extractor for transport context from the request. - * keep-alive functionality * @deprecated Use the builder {@link #builder()} instead for better configuration * options. */ From 90f6f7848e575eabab5261d208363ac59cf27381 Mon Sep 17 00:00:00 2001 From: Kevin Stanton Date: Tue, 12 Aug 2025 09:56:15 -0500 Subject: [PATCH 06/11] add npx installation, adjust stdio unittests that use npx to work; add Jenkinsfile for builds --- Jenkinsfile | 8 +++++++ .../client/StdioMcpAsyncClientTests.java | 22 ++++++++++++------- .../client/StdioMcpSyncClientTests.java | 18 ++++++++++----- pom.xml | 22 ++++++++++++++++++- 4 files changed, 55 insertions(+), 15 deletions(-) create mode 100644 Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 00000000..992143fc --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,8 @@ +sproutMultiModuleBuild { + moduleToBuild = 'mcp-parent' + nodeLabel = 'ephemeral' + tribes = ['global'] + notifySlackGroupsOnFailure = ['@kevin'] + jdk = 17 + deployRCBranches = true +} diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java index e9356d0c..944677f1 100644 --- a/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java @@ -23,15 +23,21 @@ class StdioMcpAsyncClientTests extends AbstractMcpAsyncClientTests { @Override protected McpClientTransport createMcpTransport() { ServerParameters stdioParams; - if (System.getProperty("os.name").toLowerCase().contains("win")) { - stdioParams = ServerParameters.builder("cmd.exe") - .args("/c", "npx.cmd", "-y", "@modelcontextprotocol/server-everything", "stdio") - .build(); - } + String currentPath = System.getenv("PATH"); + String nodePath = System.getProperty("user.dir") + "/node"; + String newPath = nodePath + (currentPath != null ? System.getProperty("path.separator") + currentPath : ""); + + if (System.getProperty("os.name").toLowerCase().contains("win")) { + stdioParams = ServerParameters.builder("./node/npx.cmd") + .args("-y", "@modelcontextprotocol/server-everything", "stdio") + .addEnvVar("PATH", newPath) + .build(); + } else { - stdioParams = ServerParameters.builder("npx") - .args("-y", "@modelcontextprotocol/server-everything", "stdio") - .build(); + stdioParams = ServerParameters.builder("./node/npx") + .args("-y", "@modelcontextprotocol/server-everything", "stdio") + .addEnvVar("PATH", newPath) + .build(); } return new StdioClientTransport(stdioParams); } diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java index 4b5f4f9c..1ba34e91 100644 --- a/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java @@ -31,15 +31,21 @@ class StdioMcpSyncClientTests extends AbstractMcpSyncClientTests { @Override protected McpClientTransport createMcpTransport() { ServerParameters stdioParams; - if (System.getProperty("os.name").toLowerCase().contains("win")) { - stdioParams = ServerParameters.builder("cmd.exe") - .args("/c", "npx.cmd", "-y", "@modelcontextprotocol/server-everything", "stdio") + String currentPath = System.getenv("PATH"); + String nodePath = System.getProperty("user.dir") + "/node"; + String newPath = nodePath + (currentPath != null ? System.getProperty("path.separator") + currentPath : ""); + + if (System.getProperty("os.name").toLowerCase().contains("win")) { + stdioParams = ServerParameters.builder("./node/npx.cmd") + .args("-y", "@modelcontextprotocol/server-everything", "stdio") + .addEnvVar("PATH", newPath) .build(); } else { - stdioParams = ServerParameters.builder("npx") - .args("-y", "@modelcontextprotocol/server-everything", "stdio") - .build(); + stdioParams = ServerParameters.builder("./node/npx") + .args("-y", "@modelcontextprotocol/server-everything", "stdio") + .addEnvVar("PATH", newPath) + .build(); } return new StdioClientTransport(stdioParams); } diff --git a/pom.xml b/pom.xml index c0b1f7a4..20ddf221 100644 --- a/pom.xml +++ b/pom.xml @@ -97,6 +97,7 @@ 7.1.0 4.1.0 1.5.7 + 1.15.1 @@ -259,7 +260,26 @@ maven-deploy-plugin ${maven-deploy-plugin.version} - + + com.github.eirslett + frontend-maven-plugin + ${frontend-maven-plugin.version} + + + install node and npm + + install-node-and-npm + + generate-test-resources + + v18.19.0 + 10.2.4 + + + + + + From 749d375b1a3729fe30e512e3e3cd20f907d8a1cb Mon Sep 17 00:00:00 2001 From: Kevin Stanton Date: Tue, 12 Aug 2025 09:57:23 -0500 Subject: [PATCH 07/11] nexus repo --- pom.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pom.xml b/pom.xml index 20ddf221..4172481c 100644 --- a/pom.xml +++ b/pom.xml @@ -390,4 +390,15 @@ + + + internal + https://nexus.int.sproutsocial.com/nexus/content/repositories/releases/ + + + snapshots + https://nexus.int.sproutsocial.com/nexus/content/repositories/snapshots/ + + + From 3510622c4689a1170492f36cdd10cc712edd42d9 Mon Sep 17 00:00:00 2001 From: Kevin Stanton Date: Tue, 12 Aug 2025 10:00:15 -0500 Subject: [PATCH 08/11] prefix groupId to avoid conflicts --- mcp-bom/pom.xml | 4 ++-- mcp-spring/mcp-spring-webflux/pom.xml | 2 +- mcp-spring/mcp-spring-webmvc/pom.xml | 2 +- mcp-test/pom.xml | 4 ++-- mcp/pom.xml | 4 ++-- pom.xml | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/mcp-bom/pom.xml b/mcp-bom/pom.xml index 83d8bc51..fd62e430 100644 --- a/mcp-bom/pom.xml +++ b/mcp-bom/pom.xml @@ -5,7 +5,7 @@ 4.0.0 - io.modelcontextprotocol.sdk + com.sproutsocial.io.modelcontextprotocol.sdk mcp-parent 0.12.0-SNAPSHOT @@ -95,4 +95,4 @@ - \ No newline at end of file + diff --git a/mcp-spring/mcp-spring-webflux/pom.xml b/mcp-spring/mcp-spring-webflux/pom.xml index 300d518e..92d7f8e1 100644 --- a/mcp-spring/mcp-spring-webflux/pom.xml +++ b/mcp-spring/mcp-spring-webflux/pom.xml @@ -4,7 +4,7 @@ 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 + com.sproutsocial.io.modelcontextprotocol.sdk mcp-parent 0.12.0-SNAPSHOT ../../pom.xml diff --git a/mcp-spring/mcp-spring-webmvc/pom.xml b/mcp-spring/mcp-spring-webmvc/pom.xml index ea262d3a..d9749436 100644 --- a/mcp-spring/mcp-spring-webmvc/pom.xml +++ b/mcp-spring/mcp-spring-webmvc/pom.xml @@ -4,7 +4,7 @@ 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 + com.sproutsocial.io.modelcontextprotocol.sdk mcp-parent 0.12.0-SNAPSHOT ../../pom.xml diff --git a/mcp-test/pom.xml b/mcp-test/pom.xml index 563f60de..35abf957 100644 --- a/mcp-test/pom.xml +++ b/mcp-test/pom.xml @@ -4,7 +4,7 @@ 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 + com.sproutsocial.io.modelcontextprotocol.sdk mcp-parent 0.12.0-SNAPSHOT @@ -101,4 +101,4 @@ - \ No newline at end of file + diff --git a/mcp/pom.xml b/mcp/pom.xml index 1cf61c48..4413e901 100644 --- a/mcp/pom.xml +++ b/mcp/pom.xml @@ -4,7 +4,7 @@ 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 + com.sproutsocial.io.modelcontextprotocol.sdk mcp-parent 0.12.0-SNAPSHOT @@ -220,4 +220,4 @@ - \ No newline at end of file + diff --git a/pom.xml b/pom.xml index 4172481c..bc4cdc4b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 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 + com.sproutsocial.io.modelcontextprotocol.sdk mcp-parent 0.12.0-SNAPSHOT From 3ed88d747a357cdd0e285194b83a92ce45ae5863 Mon Sep 17 00:00:00 2001 From: Kevin Stanton Date: Tue, 12 Aug 2025 10:01:02 -0500 Subject: [PATCH 09/11] set version to 0.12.0-sprout --- mcp-bom/pom.xml | 2 +- mcp-spring/mcp-spring-webflux/pom.xml | 2 +- mcp-spring/mcp-spring-webmvc/pom.xml | 2 +- mcp-test/pom.xml | 2 +- mcp/pom.xml | 2 +- pom.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mcp-bom/pom.xml b/mcp-bom/pom.xml index fd62e430..20edd2f7 100644 --- a/mcp-bom/pom.xml +++ b/mcp-bom/pom.xml @@ -7,7 +7,7 @@ com.sproutsocial.io.modelcontextprotocol.sdk mcp-parent - 0.12.0-SNAPSHOT + 0.12.0-sprout mcp-bom diff --git a/mcp-spring/mcp-spring-webflux/pom.xml b/mcp-spring/mcp-spring-webflux/pom.xml index 92d7f8e1..67d8ab52 100644 --- a/mcp-spring/mcp-spring-webflux/pom.xml +++ b/mcp-spring/mcp-spring-webflux/pom.xml @@ -6,7 +6,7 @@ com.sproutsocial.io.modelcontextprotocol.sdk mcp-parent - 0.12.0-SNAPSHOT + 0.12.0-sprout ../../pom.xml mcp-spring-webflux diff --git a/mcp-spring/mcp-spring-webmvc/pom.xml b/mcp-spring/mcp-spring-webmvc/pom.xml index d9749436..3d3dfccb 100644 --- a/mcp-spring/mcp-spring-webmvc/pom.xml +++ b/mcp-spring/mcp-spring-webmvc/pom.xml @@ -6,7 +6,7 @@ com.sproutsocial.io.modelcontextprotocol.sdk mcp-parent - 0.12.0-SNAPSHOT + 0.12.0-sprout ../../pom.xml mcp-spring-webmvc diff --git a/mcp-test/pom.xml b/mcp-test/pom.xml index 35abf957..ba6ab1f1 100644 --- a/mcp-test/pom.xml +++ b/mcp-test/pom.xml @@ -6,7 +6,7 @@ com.sproutsocial.io.modelcontextprotocol.sdk mcp-parent - 0.12.0-SNAPSHOT + 0.12.0-sprout mcp-test jar diff --git a/mcp/pom.xml b/mcp/pom.xml index 4413e901..a5a8721f 100644 --- a/mcp/pom.xml +++ b/mcp/pom.xml @@ -6,7 +6,7 @@ com.sproutsocial.io.modelcontextprotocol.sdk mcp-parent - 0.12.0-SNAPSHOT + 0.12.0-sprout mcp jar diff --git a/pom.xml b/pom.xml index bc4cdc4b..57a17985 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.sproutsocial.io.modelcontextprotocol.sdk mcp-parent - 0.12.0-SNAPSHOT + 0.12.0-sprout pom https://github.com/modelcontextprotocol/java-sdk From 5f6084a447fea23b3fcd36f86e62b5c84d6898ea Mon Sep 17 00:00:00 2001 From: Kevin Stanton Date: Tue, 12 Aug 2025 16:46:27 -0500 Subject: [PATCH 10/11] apply code format standards for project --- ...HttpServletSseServerTransportProvider.java | 2 +- .../client/StdioMcpAsyncClientTests.java | 28 +++++++++---------- .../client/StdioMcpSyncClientTests.java | 24 ++++++++-------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java b/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java index d60e927f..571cd1d0 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java +++ b/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java @@ -180,7 +180,7 @@ public HttpServletSseServerTransportProvider(ObjectMapper objectMapper, String b * @param messageEndpoint The endpoint path where clients will send their messages * @param sseEndpoint The endpoint path where clients will establish SSE connections * @param keepAliveInterval The interval for keep-alive pings, or null to disable - * keep-alive functionality + * keep-alive functionality * @param contextExtractor The extractor for transport context from the request. * @deprecated Use the builder {@link #builder()} instead for better configuration * options. diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java index 944677f1..6cf96c97 100644 --- a/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java @@ -23,21 +23,21 @@ class StdioMcpAsyncClientTests extends AbstractMcpAsyncClientTests { @Override protected McpClientTransport createMcpTransport() { ServerParameters stdioParams; - String currentPath = System.getenv("PATH"); - String nodePath = System.getProperty("user.dir") + "/node"; - String newPath = nodePath + (currentPath != null ? System.getProperty("path.separator") + currentPath : ""); - - if (System.getProperty("os.name").toLowerCase().contains("win")) { - stdioParams = ServerParameters.builder("./node/npx.cmd") - .args("-y", "@modelcontextprotocol/server-everything", "stdio") - .addEnvVar("PATH", newPath) - .build(); - } + String currentPath = System.getenv("PATH"); + String nodePath = System.getProperty("user.dir") + "/node"; + String newPath = nodePath + (currentPath != null ? System.getProperty("path.separator") + currentPath : ""); + + if (System.getProperty("os.name").toLowerCase().contains("win")) { + stdioParams = ServerParameters.builder("./node/npx.cmd") + .args("-y", "@modelcontextprotocol/server-everything", "stdio") + .addEnvVar("PATH", newPath) + .build(); + } else { - stdioParams = ServerParameters.builder("./node/npx") - .args("-y", "@modelcontextprotocol/server-everything", "stdio") - .addEnvVar("PATH", newPath) - .build(); + stdioParams = ServerParameters.builder("./node/npx") + .args("-y", "@modelcontextprotocol/server-everything", "stdio") + .addEnvVar("PATH", newPath) + .build(); } return new StdioClientTransport(stdioParams); } diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java index 1ba34e91..eac722c5 100644 --- a/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java @@ -31,21 +31,21 @@ class StdioMcpSyncClientTests extends AbstractMcpSyncClientTests { @Override protected McpClientTransport createMcpTransport() { ServerParameters stdioParams; - String currentPath = System.getenv("PATH"); - String nodePath = System.getProperty("user.dir") + "/node"; - String newPath = nodePath + (currentPath != null ? System.getProperty("path.separator") + currentPath : ""); - - if (System.getProperty("os.name").toLowerCase().contains("win")) { - stdioParams = ServerParameters.builder("./node/npx.cmd") - .args("-y", "@modelcontextprotocol/server-everything", "stdio") - .addEnvVar("PATH", newPath) + String currentPath = System.getenv("PATH"); + String nodePath = System.getProperty("user.dir") + "/node"; + String newPath = nodePath + (currentPath != null ? System.getProperty("path.separator") + currentPath : ""); + + if (System.getProperty("os.name").toLowerCase().contains("win")) { + stdioParams = ServerParameters.builder("./node/npx.cmd") + .args("-y", "@modelcontextprotocol/server-everything", "stdio") + .addEnvVar("PATH", newPath) .build(); } else { - stdioParams = ServerParameters.builder("./node/npx") - .args("-y", "@modelcontextprotocol/server-everything", "stdio") - .addEnvVar("PATH", newPath) - .build(); + stdioParams = ServerParameters.builder("./node/npx") + .args("-y", "@modelcontextprotocol/server-everything", "stdio") + .addEnvVar("PATH", newPath) + .build(); } return new StdioClientTransport(stdioParams); } From 7a4e9b9a78393d7996ab4f563fe211a355d1a293 Mon Sep 17 00:00:00 2001 From: Kevin Stanton Date: Tue, 12 Aug 2025 16:54:43 -0500 Subject: [PATCH 11/11] ecr pull through cache --- Jenkinsfile | 1 + mcp-bom/pom.xml | 10 +++++----- mcp-spring/mcp-spring-webflux/pom.xml | 8 ++++---- .../WebClientStreamableHttpAsyncClientTests.java | 3 ++- .../WebClientStreamableHttpSyncClientTests.java | 3 ++- .../client/WebFluxSseMcpAsyncClientTests.java | 3 ++- .../client/WebFluxSseMcpSyncClientTests.java | 3 ++- .../transport/WebFluxSseClientTransportTests.java | 3 ++- mcp-spring/mcp-spring-webmvc/pom.xml | 12 ++++++------ mcp-test/pom.xml | 4 ++-- .../AbstractMcpAsyncClientResiliencyTests.java | 3 ++- .../AbstractMcpAsyncClientResiliencyTests.java | 3 ++- .../HttpClientStreamableHttpAsyncClientTests.java | 3 ++- .../HttpClientStreamableHttpSyncClientTests.java | 3 ++- .../HttpSseMcpAsyncClientLostConnectionTests.java | 3 ++- .../client/HttpSseMcpAsyncClientTests.java | 3 ++- .../client/HttpSseMcpSyncClientTests.java | 3 ++- .../transport/HttpClientSseClientTransportTests.java | 3 ++- .../HttpClientStreamableHttpTransportTest.java | 3 ++- 19 files changed, 46 insertions(+), 31 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 992143fc..26801ce8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -3,6 +3,7 @@ sproutMultiModuleBuild { nodeLabel = 'ephemeral' tribes = ['global'] notifySlackGroupsOnFailure = ['@kevin'] + runECRLogin = 'true' jdk = 17 deployRCBranches = true } diff --git a/mcp-bom/pom.xml b/mcp-bom/pom.xml index 20edd2f7..393d5047 100644 --- a/mcp-bom/pom.xml +++ b/mcp-bom/pom.xml @@ -28,28 +28,28 @@ - io.modelcontextprotocol.sdk + com.sproutsocial.io.modelcontextprotocol.sdk mcp - ${project.version} + 0.12.0-sprout - io.modelcontextprotocol.sdk + com.sproutsocial.io.modelcontextprotocol.sdk mcp-test ${project.version} - io.modelcontextprotocol.sdk + com.sproutsocial.io.modelcontextprotocol.sdk mcp-spring-webflux ${project.version} - io.modelcontextprotocol.sdk + com.sproutsocial.io.modelcontextprotocol.sdk mcp-spring-webmvc ${project.version} diff --git a/mcp-spring/mcp-spring-webflux/pom.xml b/mcp-spring/mcp-spring-webflux/pom.xml index 67d8ab52..24bc0a37 100644 --- a/mcp-spring/mcp-spring-webflux/pom.xml +++ b/mcp-spring/mcp-spring-webflux/pom.xml @@ -23,15 +23,15 @@ - io.modelcontextprotocol.sdk + com.sproutsocial.io.modelcontextprotocol.sdk mcp - 0.12.0-SNAPSHOT + 0.12.0-sprout - io.modelcontextprotocol.sdk + com.sproutsocial.io.modelcontextprotocol.sdk mcp-test - 0.12.0-SNAPSHOT + 0.12.0-sprout test diff --git a/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebClientStreamableHttpAsyncClientTests.java b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebClientStreamableHttpAsyncClientTests.java index f8a16c15..77f6c9fb 100644 --- a/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebClientStreamableHttpAsyncClientTests.java +++ b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebClientStreamableHttpAsyncClientTests.java @@ -19,7 +19,8 @@ public class WebClientStreamableHttpAsyncClientTests extends AbstractMcpAsyncCli // Uses the https://github.com/tzolov/mcp-everything-server-docker-image @SuppressWarnings("resource") - GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v2") + GenericContainer container = new GenericContainer<>( + "412335208158.dkr.ecr.us-east-1.amazonaws.com/docker-hub/tzolov/mcp-everything-server:v2") .withCommand("node dist/index.js streamableHttp") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withExposedPorts(3001) diff --git a/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebClientStreamableHttpSyncClientTests.java b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebClientStreamableHttpSyncClientTests.java index 5e9960d0..edf291f4 100644 --- a/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebClientStreamableHttpSyncClientTests.java +++ b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebClientStreamableHttpSyncClientTests.java @@ -19,7 +19,8 @@ public class WebClientStreamableHttpSyncClientTests extends AbstractMcpSyncClien // Uses the https://github.com/tzolov/mcp-everything-server-docker-image @SuppressWarnings("resource") - GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v2") + GenericContainer container = new GenericContainer<>( + "412335208158.dkr.ecr.us-east-1.amazonaws.com/docker-hub/tzolov/mcp-everything-server:v2") .withCommand("node dist/index.js streamableHttp") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withExposedPorts(3001) diff --git a/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java index 0edf4cd5..dae93436 100644 --- a/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java +++ b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java @@ -26,7 +26,8 @@ class WebFluxSseMcpAsyncClientTests extends AbstractMcpAsyncClientTests { // Uses the https://github.com/tzolov/mcp-everything-server-docker-image @SuppressWarnings("resource") - GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v2") + GenericContainer container = new GenericContainer<>( + "412335208158.dkr.ecr.us-east-1.amazonaws.com/docker-hub/tzolov/mcp-everything-server:v2") .withCommand("node dist/index.js sse") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withExposedPorts(3001) diff --git a/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java index 9b0959a3..8d191e82 100644 --- a/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java +++ b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java @@ -26,7 +26,8 @@ class WebFluxSseMcpSyncClientTests extends AbstractMcpSyncClientTests { // Uses the https://github.com/tzolov/mcp-everything-server-docker-image @SuppressWarnings("resource") - GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v2") + GenericContainer container = new GenericContainer<>( + "412335208158.dkr.ecr.us-east-1.amazonaws.com/docker-hub/tzolov/mcp-everything-server:v2") .withCommand("node dist/index.js sse") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withExposedPorts(3001) diff --git a/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java index 1cf5dffe..9762e35d 100644 --- a/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java +++ b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java @@ -42,7 +42,8 @@ class WebFluxSseClientTransportTests { static String host = "http://localhost:3001"; @SuppressWarnings("resource") - GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v2") + GenericContainer container = new GenericContainer<>( + "412335208158.dkr.ecr.us-east-1.amazonaws.com/docker-hub/tzolov/mcp-everything-server:v2") .withCommand("node dist/index.js sse") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withExposedPorts(3001) diff --git a/mcp-spring/mcp-spring-webmvc/pom.xml b/mcp-spring/mcp-spring-webmvc/pom.xml index 3d3dfccb..3a6ffa61 100644 --- a/mcp-spring/mcp-spring-webmvc/pom.xml +++ b/mcp-spring/mcp-spring-webmvc/pom.xml @@ -23,9 +23,9 @@ - io.modelcontextprotocol.sdk + com.sproutsocial.io.modelcontextprotocol.sdk mcp - 0.12.0-SNAPSHOT + 0.12.0-sprout @@ -35,16 +35,16 @@ - io.modelcontextprotocol.sdk + com.sproutsocial.io.modelcontextprotocol.sdk mcp-test - 0.12.0-SNAPSHOT + 0.12.0-sprout test - io.modelcontextprotocol.sdk + com.sproutsocial.io.modelcontextprotocol.sdk mcp-spring-webflux - 0.12.0-SNAPSHOT + 0.12.0-sprout test diff --git a/mcp-test/pom.xml b/mcp-test/pom.xml index ba6ab1f1..09793dea 100644 --- a/mcp-test/pom.xml +++ b/mcp-test/pom.xml @@ -22,9 +22,9 @@ - io.modelcontextprotocol.sdk + com.sproutsocial.io.modelcontextprotocol.sdk mcp - 0.12.0-SNAPSHOT + 0.12.0-sprout diff --git a/mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientResiliencyTests.java b/mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientResiliencyTests.java index ed34ebff..bd644f3d 100644 --- a/mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientResiliencyTests.java +++ b/mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientResiliencyTests.java @@ -48,7 +48,8 @@ public abstract class AbstractMcpAsyncClientResiliencyTests { // Uses the https://github.com/tzolov/mcp-everything-server-docker-image @SuppressWarnings("resource") - static GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v2") + static GenericContainer container = new GenericContainer<>( + "412335208158.dkr.ecr.us-east-1.amazonaws.com/docker-hub/tzolov/mcp-everything-server:v2") .withCommand("node dist/index.js streamableHttp") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withNetwork(network) diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientResiliencyTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientResiliencyTests.java index ec23e21d..8d8edc18 100644 --- a/mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientResiliencyTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientResiliencyTests.java @@ -49,7 +49,8 @@ public abstract class AbstractMcpAsyncClientResiliencyTests { // Uses the https://github.com/tzolov/mcp-everything-server-docker-image @SuppressWarnings("resource") - static GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v2") + static GenericContainer container = new GenericContainer<>( + "412335208158.dkr.ecr.us-east-1.amazonaws.com/docker-hub/tzolov/mcp-everything-server:v2") .withCommand("node dist/index.js streamableHttp") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withNetwork(network) diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpAsyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpAsyncClientTests.java index aef2ab8d..18dc724b 100644 --- a/mcp/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpAsyncClientTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpAsyncClientTests.java @@ -18,7 +18,8 @@ public class HttpClientStreamableHttpAsyncClientTests extends AbstractMcpAsyncCl // Uses the https://github.com/tzolov/mcp-everything-server-docker-image @SuppressWarnings("resource") - GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v2") + GenericContainer container = new GenericContainer<>( + "412335208158.dkr.ecr.us-east-1.amazonaws.com/docker-hub/tzolov/mcp-everything-server:v2") .withCommand("node dist/index.js streamableHttp") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withExposedPorts(3001) diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpSyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpSyncClientTests.java index 7f00de60..b3a8e481 100644 --- a/mcp/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpSyncClientTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpSyncClientTests.java @@ -18,7 +18,8 @@ public class HttpClientStreamableHttpSyncClientTests extends AbstractMcpSyncClie // Uses the https://github.com/tzolov/mcp-everything-server-docker-image @SuppressWarnings("resource") - GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v2") + GenericContainer container = new GenericContainer<>( + "412335208158.dkr.ecr.us-east-1.amazonaws.com/docker-hub/tzolov/mcp-everything-server:v2") .withCommand("node dist/index.js streamableHttp") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withExposedPorts(3001) diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/HttpSseMcpAsyncClientLostConnectionTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/HttpSseMcpAsyncClientLostConnectionTests.java index 0a72b785..b81f26a5 100644 --- a/mcp/src/test/java/io/modelcontextprotocol/client/HttpSseMcpAsyncClientLostConnectionTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/HttpSseMcpAsyncClientLostConnectionTests.java @@ -38,7 +38,8 @@ public class HttpSseMcpAsyncClientLostConnectionTests { // Uses the https://github.com/tzolov/mcp-everything-server-docker-image @SuppressWarnings("resource") - static GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v2") + static GenericContainer container = new GenericContainer<>( + "412335208158.dkr.ecr.us-east-1.amazonaws.com/docker-hub/tzolov/mcp-everything-server:v2") .withCommand("node dist/index.js sse") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withNetwork(network) diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/HttpSseMcpAsyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/HttpSseMcpAsyncClientTests.java index 6cb3f7b6..909b87a5 100644 --- a/mcp/src/test/java/io/modelcontextprotocol/client/HttpSseMcpAsyncClientTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/HttpSseMcpAsyncClientTests.java @@ -23,7 +23,8 @@ class HttpSseMcpAsyncClientTests extends AbstractMcpAsyncClientTests { // Uses the https://github.com/tzolov/mcp-everything-server-docker-image @SuppressWarnings("resource") - GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v2") + GenericContainer container = new GenericContainer<>( + "412335208158.dkr.ecr.us-east-1.amazonaws.com/docker-hub/tzolov/mcp-everything-server:v2") .withCommand("node dist/index.js sse") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withExposedPorts(3001) diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/HttpSseMcpSyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/HttpSseMcpSyncClientTests.java index 8646c1b4..52354a42 100644 --- a/mcp/src/test/java/io/modelcontextprotocol/client/HttpSseMcpSyncClientTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/HttpSseMcpSyncClientTests.java @@ -22,7 +22,8 @@ class HttpSseMcpSyncClientTests extends AbstractMcpSyncClientTests { // Uses the https://github.com/tzolov/mcp-everything-server-docker-image @SuppressWarnings("resource") - GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v2") + GenericContainer container = new GenericContainer<>( + "412335208158.dkr.ecr.us-east-1.amazonaws.com/docker-hub/tzolov/mcp-everything-server:v2") .withCommand("node dist/index.js sse") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withExposedPorts(3001) diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java index 46b9207f..0d7a762e 100644 --- a/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java @@ -54,7 +54,8 @@ class HttpClientSseClientTransportTests { static String host = "http://localhost:3001"; @SuppressWarnings("resource") - static GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v2") + static GenericContainer container = new GenericContainer<>( + "412335208158.dkr.ecr.us-east-1.amazonaws.com/docker-hub/tzolov/mcp-everything-server:v2") .withCommand("node dist/index.js sse") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withExposedPorts(3001) diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransportTest.java b/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransportTest.java index d645bb0b..20137bb8 100644 --- a/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransportTest.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransportTest.java @@ -33,7 +33,8 @@ class HttpClientStreamableHttpTransportTest { static String host = "http://localhost:3001"; @SuppressWarnings("resource") - static GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v2") + static GenericContainer container = new GenericContainer<>( + "412335208158.dkr.ecr.us-east-1.amazonaws.com/docker-hub/tzolov/mcp-everything-server:v2") .withCommand("node dist/index.js streamableHttp") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withExposedPorts(3001)