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 < 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();
}
}