Skip to content

Added annotation and description classes. Feature version increment to 3.16.1 #185

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
May 19, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions doc/bundles/org.eclipse.ecf.doc/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@
<additionalArgument>-Xdoclint:none</additionalArgument>
<additionalArgument>-splitindex</additionalArgument>
<additionalArgument>-use</additionalArgument>
<additionalArgument>-doctitle "Eclipse Communication Framework (ECF) 3.16.0 API"</additionalArgument>
<additionalArgument>-windowtitle "Eclipse Communication Framework (ECF) 3.16.0 API"</additionalArgument>
<additionalArgument>-doctitle "Eclipse Communication Framework (ECF) 3.16.1 API"</additionalArgument>
<additionalArgument>-windowtitle "Eclipse Communication Framework (ECF) 3.16.1 API"</additionalArgument>
<additionalArgument>-link https://docs.oracle.com/en/java/javase/11/docs/api/</additionalArgument>
<additionalArgument>-link https://docs.osgi.org/javadoc/osgi.core/7.0.0/</additionalArgument>
<additionalArgument>-tag 'noimplement:a:Restriction:'</additionalArgument>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %bundle.name
Bundle-SymbolicName: org.eclipse.ecf.ai.mcp.tools;singleton:=true
Bundle-Version: 1.0.0.qualifier
Export-Package: org.eclipse.ecf.ai.mcp.tools.annotation;version="1.0.0",
org.eclipse.ecf.ai.mcp.tools.service;version="1.0.0"
Bundle-Version: 1.1.0.qualifier
Export-Package: org.eclipse.ecf.ai.mcp.tools.annotation;version="1.1.0",
org.eclipse.ecf.ai.mcp.tools.service;version="1.1.0"
Bundle-Vendor: %bundle.provider
Automatic-Module-Name: org.eclipse.ecf.ai.mcp.tools
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-17
Bundle-Localization: plugin
Bundle-Vendor: %plugin.provider
2 changes: 1 addition & 1 deletion framework/bundles/org.eclipse.ecf.ai.mcp.tools/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@
</parent>

<artifactId>org.eclipse.ecf.ai.mcp.tools</artifactId>
<version>1.0.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,24 @@

String description() default "";

/**
* Supports the addition of ToolAnnotations to Tool spec in the MCP schema
* (draft as of 5/18/2025) located <a href=
* "https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/schema/draft/schema.json#L2164">here</a>
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ToolAnnotation {
boolean destructiveHint() default false;

boolean idempotentHint() default false;

boolean openWorldHint() default false;

boolean readOnlyHint() default false;

String title() default "";
}

ToolAnnotation[] annotations();
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@
@Target(ElementType.PARAMETER)
public @interface ToolParam {

boolean required() default true;
String name() default "";

String description() default "";

}
boolean required() default true;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/****************************************************************************
* Copyright (c) 2025 Composent, Inc.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*****************************************************************************/
package org.eclipse.ecf.ai.mcp.tools.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ToolResult {

String description() default "";

}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package org.eclipse.ecf.ai.mcp.tools.annotation;
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/****************************************************************************
* Copyright (c) 2025 Composent, Inc.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*****************************************************************************/
package org.eclipse.ecf.ai.mcp.tools.service;

import java.util.List;

public class AbstractToolGroup implements ToolGroup {

@Override
public List<ToolDescription> getToolDescriptions(String interfaceClassName) {
return ToolDescription.fromService(this, interfaceClassName);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/****************************************************************************
* Copyright (c) 2025 Composent, Inc.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*****************************************************************************/
package org.eclipse.ecf.ai.mcp.tools.service;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

import org.eclipse.ecf.ai.mcp.tools.annotation.Tool;

/**
* Describes the ToolAnnotation type in the MCP schema (draft as of 5/18/2025)
* located <a href=
* "https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/schema/draft/schema.json#L2164">here</a>
*/
public record ToolAnnotationDescription(boolean destructiveHint, boolean idempotentHint, boolean openWorldHint,
boolean readOnlyHint, String title) {

public static List<ToolAnnotationDescription> fromAnnotations(Tool.ToolAnnotation[] annotations) {
return (annotations != null) ? Arrays.asList(annotations).stream().map(a -> {
return new ToolAnnotationDescription(a.destructiveHint(), a.idempotentHint(), a.openWorldHint(),
a.readOnlyHint(), a.title());
}).collect(Collectors.toList()) : Collections.emptyList();

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,17 @@

import org.eclipse.ecf.ai.mcp.tools.annotation.Tool;

public record ToolDescription(String name, String description, List<ToolParamDescription> toolParamDescriptions) {
public record ToolDescription(String name, String description, List<ToolParamDescription> toolParamDescriptions,
ToolResultDescription resultDesc, List<ToolAnnotationDescription> annotations) {

public static List<ToolDescription> fromClass(Class<?> clazz) {
return Arrays.asList(clazz.getMethods()).stream().map(m -> {
Tool ma = m.getAnnotation(Tool.class);
return (ma != null)
? new ToolDescription(m.getName(), ma.description(),
ToolParamDescription.fromParameters(m.getParameters()))
ToolParamDescription.fromParameters(m.getParameters()),
ToolResultDescription.fromMethod(m),
ToolAnnotationDescription.fromAnnotations(ma.annotations()))
: null;
}).filter(Objects::nonNull).collect(Collectors.toList());

Expand All @@ -37,4 +40,5 @@ public static List<ToolDescription> fromService(Object svc, String serviceClass)
}).findFirst();
return optClass.isPresent() ? ToolDescription.fromClass(optClass.get()) : Collections.emptyList();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,27 @@

import java.lang.reflect.Parameter;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

import org.eclipse.ecf.ai.mcp.tools.annotation.ToolParam;

public record ToolParamDescription(String description, boolean required) {
public record ToolParamDescription(String name, String description, boolean required) {

public static List<ToolParamDescription> fromParameters(Parameter[] parameters) {
return Arrays.asList(parameters).stream().map(p -> {
return parameters != null ? Arrays.asList(parameters).stream().map(p -> {
ToolParam tp = p.getAnnotation(ToolParam.class);
return (tp != null) ? new ToolParamDescription(tp.description(), tp.required()) : null;
}).filter(Objects::nonNull).collect(Collectors.toList());
if (tp != null) {
String name = tp.name();
if ("".equals(name)) {
name = p.getName();
}
return new ToolParamDescription(name, tp.description(), tp.required());
}
return null;
}).filter(Objects::nonNull).collect(Collectors.toList()) : Collections.emptyList();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/****************************************************************************
* Copyright (c) 2025 Composent, Inc.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*****************************************************************************/
package org.eclipse.ecf.ai.mcp.tools.service;

import java.lang.reflect.Method;

import org.eclipse.ecf.ai.mcp.tools.annotation.ToolResult;

public record ToolResultDescription(String description, Class<?> returnType) {

public static ToolResultDescription fromMethod(Method method) {
ToolResult tr = method.getAnnotation(ToolResult.class);
return tr != null ? new ToolResultDescription(tr.description(), method.getReturnType())
: new ToolResultDescription("", method.getReturnType());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package org.eclipse.ecf.ai.mcp.tools.service;
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
<feature
id="org.eclipse.ecf.ai.mcp.tools.feature"
label="ECF AI Model Context Protocol Tool Support Feature"
version="1.0.0.qualifier"
version="1.1.0.qualifier"
provider-name="Eclipse.org - ECF"
license-feature="org.eclipse.license"
license-feature-version="0.0.0">

<description url="http://www.eclipse.org/ecf">
This feature provides the ECF AI Model Context Protocol Tools Support
</description>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@
</parent>

<artifactId>org.eclipse.ecf.ai.mcp.tools.feature</artifactId>
<version>1.0.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
2 changes: 1 addition & 1 deletion releng/features/org.eclipse.ecf.core/feature.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<feature
id="org.eclipse.ecf.core"
label="ECF SDK for Eclipse"
version="3.16.0.qualifier"
version="3.16.1.qualifier"
provider-name="%providerName"
plugin="org.eclipse.ecf"
license-feature="org.eclipse.license"
Expand Down
2 changes: 1 addition & 1 deletion releng/features/org.eclipse.ecf.core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@
</parent>
<groupId>org.eclipse.ecf</groupId>
<artifactId>org.eclipse.ecf.core</artifactId>
<version>3.16.0-SNAPSHOT</version>
<version>3.16.1-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<feature
id="org.eclipse.ecf.remoteservice.sdk.bndtools.feature"
label="ECF Remote Services SDK for Bndtools"
version="3.16.0.qualifier"
version="3.16.1.qualifier"
provider-name="%providerName"
license-feature="org.eclipse.license"
license-feature-version="0.0.0">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.eclipse.ecf.remoteservice.sdk.bndtools.feature</artifactId>
<version>3.16.0-SNAPSHOT</version>
<version>3.16.1-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<feature
id="org.eclipse.ecf.remoteservice.sdk.eclipse.feature"
label="ECF Remote Services SDK for Eclipse"
version="3.16.0.qualifier"
version="3.16.1.qualifier"
provider-name="%providerName"
license-feature="org.eclipse.license"
license-feature-version="0.0.0">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.eclipse.ecf.remoteservice.sdk.eclipse.feature</artifactId>
<version>3.16.0-SNAPSHOT</version>
<version>3.16.1-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<feature
id="org.eclipse.ecf.remoteservice.sdk.feature"
label="ECF Remote Services SDK for OSGi clients and servers"
version="3.16.0.qualifier"
version="3.16.1.qualifier"
provider-name="%providerName"
license-feature="org.eclipse.license"
license-feature-version="0.0.0">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@
</parent>
<groupId>org.eclipse.ecf</groupId>
<artifactId>org.eclipse.ecf.remoteservice.sdk.feature</artifactId>
<version>3.16.0-SNAPSHOT</version>
<version>3.16.1-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
</project>
2 changes: 1 addition & 1 deletion releng/features/org.eclipse.ecf.sdk/feature.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<feature
id="org.eclipse.ecf.sdk"
label="%featureName"
version="3.16.0.qualifier"
version="3.16.1.qualifier"
provider-name="%providerName"
license-feature="org.eclipse.license"
license-feature-version="0.0.0">
Expand Down
Loading