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 37d7e8f76..ca7c10ccf 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 @@ -220,8 +220,19 @@ private JsonRpcResponse handleInitialize(JsonRpcRequest req) { } private JsonRpcResponse handlePromptsList(JsonRpcRequest req) { + var allPrompts = new ArrayList<>(prompts.values().stream().map(Prompt::promptInfo).toList()); + + // Add prompts from proxy servers + for (McpServerProxy proxy : proxies.values()) { + var response = proxy.rpc(req).join(); + if (response.getError() == null) { + var proxyPrompts = response.getResult().asShape(ListPromptsResult.builder()).getPrompts(); + allPrompts.addAll(proxyPrompts); + } + } + var result = ListPromptsResult.builder() - .prompts(prompts.values().stream().map(Prompt::promptInfo).toList()) + .prompts(allPrompts) .build(); return createSuccessResponse(req.getId(), result); } @@ -232,12 +243,12 @@ private JsonRpcResponse handlePromptsGet(JsonRpcRequest req) { var prompt = prompts.get(normalize(promptName)); - if (prompt == null) { - throw new RuntimeException("Prompt not found: " + promptName); + if (prompt != null) { + var result = promptProcessor.buildPromptResult(prompt, promptArguments); + return createSuccessResponse(req.getId(), result); } - var result = promptProcessor.buildPromptResult(prompt, promptArguments); - return createSuccessResponse(req.getId(), result); + throw new RuntimeException("Prompt not found: " + promptName); } private JsonRpcResponse handleToolsList(JsonRpcRequest req, ProtocolVersion protocolVersion) {