diff --git a/mcp/mcp-server/src/main/java/software/amazon/smithy/java/mcp/server/McpService.java b/mcp/mcp-server/src/main/java/software/amazon/smithy/java/mcp/server/McpService.java index 2d436a39d..f3ed24dc4 100644 --- a/mcp/mcp-server/src/main/java/software/amazon/smithy/java/mcp/server/McpService.java +++ b/mcp/mcp-server/src/main/java/software/amazon/smithy/java/mcp/server/McpService.java @@ -21,7 +21,9 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.CompletionException; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; import java.util.stream.Collectors; @@ -333,17 +335,13 @@ public void initializeProxies(Consumer responseWriter) { } for (McpServerProxy proxy : proxies.values()) { - try { - if (initRequest != null) { - proxy.initialize(responseWriter, initRequest, protocolVersion); - } + if (initRequest != null) { + proxy.initialize(responseWriter, initRequest, protocolVersion); + } - List proxyTools = proxy.listTools(); - for (var toolInfo : proxyTools) { - tools.put(toolInfo.getName(), new Tool(toolInfo, proxy.name(), proxy)); - } - } catch (Exception e) { - LOG.error("Failed to initialize proxy: " + proxy.name(), e); + List proxyTools = proxy.listTools(); + for (var toolInfo : proxyTools) { + tools.put(toolInfo.getName(), new Tool(toolInfo, proxy.name(), proxy)); } } } @@ -457,8 +455,9 @@ private JsonRpcResponse createErrorResponse(JsonRpcRequest req, Exception except return createErrorResponse(req, exception, true); //TODO change the default to false. } - private JsonRpcResponse createErrorResponse(JsonRpcRequest req, Exception exception, boolean sendStackTrace) { + private JsonRpcResponse createErrorResponse(JsonRpcRequest req, Throwable exception, boolean sendStackTrace) { String s; + exception = unwrapException(exception); if (sendStackTrace) { try (var sw = new StringWriter(); var pw = new PrintWriter(sw)) { @@ -474,6 +473,14 @@ private JsonRpcResponse createErrorResponse(JsonRpcRequest req, Exception except return createErrorResponse(req, s); } + private Throwable unwrapException(Throwable exception) { + return switch (exception) { + case CompletionException ce when ce.getCause() != null -> ce.getCause(); + case ExecutionException ee when ee.getCause() != null -> ee.getCause(); + default -> exception; + }; + } + private JsonRpcResponse createErrorResponse(JsonRpcRequest req, String s) { var error = JsonRpcErrorResponse.builder() .code(500)