This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-mcp-server.git
commit ccefd17931ce40f909841b88d540fca7e2bacd1f Author: Robert Munteanu <[email protected]> AuthorDate: Tue Jan 13 15:58:35 2026 +0100 chore(mcp): update McpServerContribution methods to return List instead of Optional This makes the implementations much more flexible --- .../apache/sling/mcp/server/impl/McpServlet.java | 11 +++++----- .../mcp/server/spi/McpServerContribution.java | 25 ++++++++++++---------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/apache/sling/mcp/server/impl/McpServlet.java b/src/main/java/org/apache/sling/mcp/server/impl/McpServlet.java index 316b8a0..a7ae71b 100644 --- a/src/main/java/org/apache/sling/mcp/server/impl/McpServlet.java +++ b/src/main/java/org/apache/sling/mcp/server/impl/McpServlet.java @@ -23,7 +23,6 @@ import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.util.List; import java.util.Map; -import java.util.Optional; import io.modelcontextprotocol.common.McpTransportContext; import io.modelcontextprotocol.json.McpJsonMapper; @@ -122,7 +121,7 @@ public class McpServlet extends SlingJakartaAllMethodsServlet { var completions = contributions.stream() .map(McpServerContribution::getSyncCompletionSpecification) - .flatMap(Optional::stream) + .flatMap(List::stream) .toList(); syncServer = McpServer.sync(transportProvider) @@ -141,22 +140,22 @@ public class McpServlet extends SlingJakartaAllMethodsServlet { contributions.stream() .map(McpServerContribution::getSyncToolSpecification) - .flatMap(Optional::stream) + .flatMap(List::stream) .forEach(syncTool -> syncServer.addTool(syncTool)); contributions.stream() .map(McpServerContribution::getSyncResourceSpecification) - .flatMap(Optional::stream) + .flatMap(List::stream) .forEach(syncResource -> syncServer.addResource(syncResource)); contributions.stream() .map(McpServerContribution::getSyncResourceTemplateSpecification) - .flatMap(Optional::stream) + .flatMap(List::stream) .forEach(syncResource -> syncServer.addResourceTemplate(syncResource)); contributions.stream() .map(McpServerContribution::getSyncPromptSpecification) - .flatMap(Optional::stream) + .flatMap(List::stream) .forEach(syncPrompt -> syncServer.addPrompt(syncPrompt)); } diff --git a/src/main/java/org/apache/sling/mcp/server/spi/McpServerContribution.java b/src/main/java/org/apache/sling/mcp/server/spi/McpServerContribution.java index 58a5d42..70ada37 100644 --- a/src/main/java/org/apache/sling/mcp/server/spi/McpServerContribution.java +++ b/src/main/java/org/apache/sling/mcp/server/spi/McpServerContribution.java @@ -18,7 +18,7 @@ */ package org.apache.sling.mcp.server.spi; -import java.util.Optional; +import java.util.List; import io.modelcontextprotocol.server.McpStatelessServerFeatures.SyncCompletionSpecification; import io.modelcontextprotocol.server.McpStatelessServerFeatures.SyncPromptSpecification; @@ -37,26 +37,29 @@ import io.modelcontextprotocol.server.McpStatelessServerFeatures.SyncToolSpecifi * * <p>This abstraction is needed because the contributions themselves are Java records and cannot * be registered as OSGi services directly.</p> + * + * <p><strong>Note:</strong> This API can change in incompatible ways while the bundle version is < 1.0 . The exported package + * version will remain 1.0.0 and will be changed to 1.1.0 once the bundle version becomes 1.0 .</p> */ public interface McpServerContribution { - default Optional<SyncToolSpecification> getSyncToolSpecification() { - return Optional.empty(); + default List<SyncToolSpecification> getSyncToolSpecification() { + return List.of(); } - default Optional<SyncResourceSpecification> getSyncResourceSpecification() { - return Optional.empty(); + default List<SyncResourceSpecification> getSyncResourceSpecification() { + return List.of(); } - default Optional<SyncResourceTemplateSpecification> getSyncResourceTemplateSpecification() { - return Optional.empty(); + default List<SyncResourceTemplateSpecification> getSyncResourceTemplateSpecification() { + return List.of(); } - default Optional<SyncPromptSpecification> getSyncPromptSpecification() { - return Optional.empty(); + default List<SyncPromptSpecification> getSyncPromptSpecification() { + return List.of(); } - default Optional<SyncCompletionSpecification> getSyncCompletionSpecification() { - return Optional.empty(); + default List<SyncCompletionSpecification> getSyncCompletionSpecification() { + return List.of(); } }
