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-whiteboard.git


The following commit(s) were added to refs/heads/master by this push:
     new ec6f17b3 chore(mcp): update McpServerContribution methods to return 
List instead of Optional
ec6f17b3 is described below

commit ec6f17b3faa633bcb3d33ad678ea9dd6bcee24a8
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
---
 .../impl/contribs/BundleResourceContribution.java  | 12 +++++------
 .../contribs/ComponentResourceContribution.java    |  9 ++++----
 .../server/impl/contribs/LogToolContribution.java  |  5 ++---
 .../contribs/OsgiBundleDiagnosticContribution.java |  5 ++---
 .../contribs/OsgiDiagnosticPromptContribution.java |  5 ++---
 .../impl/contribs/RecentRequestsContribution.java  |  5 ++---
 .../impl/contribs/RefreshPackagesContribution.java |  6 +++---
 .../impl/contribs/ServletPromptContribution.java   |  9 ++++----
 .../apache/sling/mcp/server/impl/McpServlet.java   | 11 +++++-----
 .../mcp/server/spi/McpServerContribution.java      | 25 ++++++++++++----------
 10 files changed, 44 insertions(+), 48 deletions(-)

diff --git 
a/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/BundleResourceContribution.java
 
b/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/BundleResourceContribution.java
index d54e5981..1d37db39 100644
--- 
a/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/BundleResourceContribution.java
+++ 
b/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/BundleResourceContribution.java
@@ -57,9 +57,9 @@ public class BundleResourceContribution implements 
McpServerContribution {
     }
 
     @Override
-    public Optional<SyncResourceSpecification> getSyncResourceSpecification() {
+    public List<SyncResourceSpecification> getSyncResourceSpecification() {
 
-        return Optional.of(new 
McpStatelessServerFeatures.SyncResourceSpecification(
+        return List.of(new 
McpStatelessServerFeatures.SyncResourceSpecification(
                 new Resource.Builder()
                         .name("bundles")
                         .uri(URI_BUNDLES_ALL)
@@ -78,8 +78,8 @@ public class BundleResourceContribution implements 
McpServerContribution {
     }
 
     @Override
-    public Optional<SyncResourceTemplateSpecification> 
getSyncResourceTemplateSpecification() {
-        return Optional.of(new 
McpStatelessServerFeatures.SyncResourceTemplateSpecification(
+    public List<SyncResourceTemplateSpecification> 
getSyncResourceTemplateSpecification() {
+        return List.of(new 
McpStatelessServerFeatures.SyncResourceTemplateSpecification(
                 new ResourceTemplate.Builder()
                         .uriTemplate(RESOURCE_TEMPLATE_BUNDLES_STATE_PATTERN)
                         .name("bundles")
@@ -108,9 +108,9 @@ public class BundleResourceContribution implements 
McpServerContribution {
     }
 
     @Override
-    public Optional<SyncCompletionSpecification> 
getSyncCompletionSpecification() {
+    public List<SyncCompletionSpecification> getSyncCompletionSpecification() {
 
-        return Optional.of(new 
McpStatelessServerFeatures.SyncCompletionSpecification(
+        return List.of(new 
McpStatelessServerFeatures.SyncCompletionSpecification(
                 new McpSchema.ResourceReference("ref/resource", 
RESOURCE_TEMPLATE_BUNDLES_STATE_PATTERN),
                 (context, request) -> {
 
diff --git 
a/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/ComponentResourceContribution.java
 
b/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/ComponentResourceContribution.java
index 937ad9dd..e0c18bce 100644
--- 
a/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/ComponentResourceContribution.java
+++ 
b/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/ComponentResourceContribution.java
@@ -21,7 +21,6 @@ package org.apache.sling.mcp.server.impl.contribs;
 import java.util.Collection;
 import java.util.List;
 import java.util.Locale;
-import java.util.Optional;
 import java.util.stream.Collectors;
 
 import io.modelcontextprotocol.server.McpStatelessServerFeatures;
@@ -65,9 +64,9 @@ public class ComponentResourceContribution implements 
McpServerContribution {
     public ComponentResourceContribution() {}
 
     @Override
-    public Optional<SyncResourceSpecification> getSyncResourceSpecification() {
+    public List<SyncResourceSpecification> getSyncResourceSpecification() {
 
-        return Optional.of(new 
McpStatelessServerFeatures.SyncResourceSpecification(
+        return List.of(new 
McpStatelessServerFeatures.SyncResourceSpecification(
                 new Resource.Builder()
                         .name("component")
                         .uri("component://")
@@ -93,8 +92,8 @@ public class ComponentResourceContribution implements 
McpServerContribution {
     }
 
     @Override
-    public Optional<SyncResourceTemplateSpecification> 
getSyncResourceTemplateSpecification() {
-        return Optional.of(new 
McpStatelessServerFeatures.SyncResourceTemplateSpecification(
+    public List<SyncResourceTemplateSpecification> 
getSyncResourceTemplateSpecification() {
+        return List.of(new 
McpStatelessServerFeatures.SyncResourceTemplateSpecification(
                 new ResourceTemplate.Builder()
                         .uriTemplate("components://state/{state}")
                         .name("components")
diff --git 
a/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/LogToolContribution.java
 
b/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/LogToolContribution.java
index 8e611473..b08ff8dc 100644
--- 
a/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/LogToolContribution.java
+++ 
b/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/LogToolContribution.java
@@ -25,7 +25,6 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.Enumeration;
 import java.util.List;
-import java.util.Optional;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
@@ -60,7 +59,7 @@ public class LogToolContribution implements 
McpServerContribution {
     private static final SimpleDateFormat DATE_FORMAT = new 
SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
 
     @Override
-    public Optional<SyncToolSpecification> getSyncToolSpecification() {
+    public List<SyncToolSpecification> getSyncToolSpecification() {
 
         var schema = """
                 {
@@ -86,7 +85,7 @@ public class LogToolContribution implements 
McpServerContribution {
                 }
                 """;
 
-        return Optional.of(new SyncToolSpecification(
+        return List.of(new SyncToolSpecification(
                 Tool.builder()
                         .name("aem-logs")
                         .description("Retrieve AEM/OSGi logs with optional 
filtering. "
diff --git 
a/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/OsgiBundleDiagnosticContribution.java
 
b/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/OsgiBundleDiagnosticContribution.java
index fdc3be7f..35157466 100644
--- 
a/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/OsgiBundleDiagnosticContribution.java
+++ 
b/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/OsgiBundleDiagnosticContribution.java
@@ -22,7 +22,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
-import java.util.Optional;
 import java.util.stream.Collectors;
 
 import io.modelcontextprotocol.json.McpJsonMapper;
@@ -69,7 +68,7 @@ public class OsgiBundleDiagnosticContribution implements 
McpServerContribution {
     }
 
     @Override
-    public Optional<SyncToolSpecification> getSyncToolSpecification() {
+    public List<SyncToolSpecification> getSyncToolSpecification() {
 
         var schema = """
                 {
@@ -84,7 +83,7 @@ public class OsgiBundleDiagnosticContribution implements 
McpServerContribution {
                 }
                 """;
 
-        return Optional.of(new SyncToolSpecification(
+        return List.of(new SyncToolSpecification(
                 Tool.builder()
                         .name("diagnose-osgi-bundle")
                         .description(
diff --git 
a/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/OsgiDiagnosticPromptContribution.java
 
b/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/OsgiDiagnosticPromptContribution.java
index 21876ace..da68fc4f 100644
--- 
a/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/OsgiDiagnosticPromptContribution.java
+++ 
b/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/OsgiDiagnosticPromptContribution.java
@@ -19,7 +19,6 @@
 package org.apache.sling.mcp.server.impl.contribs;
 
 import java.util.List;
-import java.util.Optional;
 
 import 
io.modelcontextprotocol.server.McpStatelessServerFeatures.SyncPromptSpecification;
 import io.modelcontextprotocol.spec.McpSchema;
@@ -42,8 +41,8 @@ import org.osgi.service.component.annotations.Component;
 public class OsgiDiagnosticPromptContribution implements McpServerContribution 
{
 
     @Override
-    public Optional<SyncPromptSpecification> getSyncPromptSpecification() {
-        return Optional.of(new SyncPromptSpecification(
+    public List<SyncPromptSpecification> getSyncPromptSpecification() {
+        return List.of(new SyncPromptSpecification(
                 new Prompt(
                         "diagnose-osgi-issue",
                         "Diagnose OSGi Bundle Issues",
diff --git 
a/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/RecentRequestsContribution.java
 
b/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/RecentRequestsContribution.java
index d4149b2f..290c5446 100644
--- 
a/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/RecentRequestsContribution.java
+++ 
b/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/RecentRequestsContribution.java
@@ -19,7 +19,6 @@
 package org.apache.sling.mcp.server.impl.contribs;
 
 import java.util.List;
-import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.StreamSupport;
 
@@ -51,8 +50,8 @@ public class RecentRequestsContribution implements 
McpServerContribution {
     }
 
     @Override
-    public Optional<SyncResourceSpecification> getSyncResourceSpecification() {
-        return Optional.of(new SyncResourceSpecification(
+    public List<SyncResourceSpecification> getSyncResourceSpecification() {
+        return List.of(new SyncResourceSpecification(
                 new Resource.Builder()
                         .uri("recent-requests://all")
                         .description(
diff --git 
a/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/RefreshPackagesContribution.java
 
b/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/RefreshPackagesContribution.java
index 1e0b9ae5..84da5027 100644
--- 
a/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/RefreshPackagesContribution.java
+++ 
b/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/RefreshPackagesContribution.java
@@ -18,7 +18,7 @@
  */
 package org.apache.sling.mcp.server.impl.contribs;
 
-import java.util.Optional;
+import java.util.List;
 
 import io.modelcontextprotocol.json.McpJsonMapper;
 import 
io.modelcontextprotocol.server.McpStatelessServerFeatures.SyncToolSpecification;
@@ -45,7 +45,7 @@ public class RefreshPackagesContribution implements 
McpServerContribution {
     }
 
     @Override
-    public Optional<SyncToolSpecification> getSyncToolSpecification() {
+    public List<SyncToolSpecification> getSyncToolSpecification() {
 
         var schema = """
                 {
@@ -55,7 +55,7 @@ public class RefreshPackagesContribution implements 
McpServerContribution {
                 }
                 """;
 
-        return Optional.of(new SyncToolSpecification(
+        return List.of(new SyncToolSpecification(
                 Tool.builder()
                         .name("refresh-packages")
                         .description("Refresh Packages")
diff --git 
a/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/ServletPromptContribution.java
 
b/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/ServletPromptContribution.java
index cb2f181b..d0354dc4 100644
--- 
a/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/ServletPromptContribution.java
+++ 
b/mcp-server-contributions/src/main/java/org/apache/sling/mcp/server/impl/contribs/ServletPromptContribution.java
@@ -19,7 +19,6 @@
 package org.apache.sling.mcp.server.impl.contribs;
 
 import java.util.List;
-import java.util.Optional;
 
 import io.modelcontextprotocol.server.McpStatelessServerFeatures;
 import 
io.modelcontextprotocol.server.McpStatelessServerFeatures.SyncCompletionSpecification;
@@ -37,8 +36,8 @@ import org.osgi.service.component.annotations.Component;
 public class ServletPromptContribution implements McpServerContribution {
 
     @Override
-    public Optional<SyncPromptSpecification> getSyncPromptSpecification() {
-        return Optional.of(new SyncPromptSpecification(
+    public List<SyncPromptSpecification> getSyncPromptSpecification() {
+        return List.of(new SyncPromptSpecification(
                 new Prompt(
                         "new-sling-servlet",
                         "Create new Sling Servlet",
@@ -61,9 +60,9 @@ public class ServletPromptContribution implements 
McpServerContribution {
     }
 
     @Override
-    public Optional<SyncCompletionSpecification> 
getSyncCompletionSpecification() {
+    public List<SyncCompletionSpecification> getSyncCompletionSpecification() {
         // supply no completions for various resource types because it's 
supposed to be specified by the user
-        return Optional.of(new 
McpStatelessServerFeatures.SyncCompletionSpecification(
+        return List.of(new 
McpStatelessServerFeatures.SyncCompletionSpecification(
                 new McpSchema.PromptReference("ref/prompt", 
"new-sling-servlet"), (context, request) -> {
                     return new McpSchema.CompleteResult(new 
CompleteCompletion(List.of(), 0, false));
                 }));
diff --git 
a/mcp-server/src/main/java/org/apache/sling/mcp/server/impl/McpServlet.java 
b/mcp-server/src/main/java/org/apache/sling/mcp/server/impl/McpServlet.java
index 316b8a0d..a7ae71bc 100644
--- a/mcp-server/src/main/java/org/apache/sling/mcp/server/impl/McpServlet.java
+++ b/mcp-server/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/mcp-server/src/main/java/org/apache/sling/mcp/server/spi/McpServerContribution.java
 
b/mcp-server/src/main/java/org/apache/sling/mcp/server/spi/McpServerContribution.java
index 58a5d42e..70ada37f 100644
--- 
a/mcp-server/src/main/java/org/apache/sling/mcp/server/spi/McpServerContribution.java
+++ 
b/mcp-server/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 &lt; 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();
     }
 }

Reply via email to