Skip to content

Commit a3ca792

Browse files
authored
Merge pull request #185 from scottslewis/master
Added annotation and description classes. Feature version increment to 3.16.1
2 parents 2e7f649 + ff915c7 commit a3ca792

File tree

26 files changed

+205
-68
lines changed

26 files changed

+205
-68
lines changed

doc/bundles/org.eclipse.ecf.doc/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
<additionalArgument>-Xdoclint:none</additionalArgument>
3131
<additionalArgument>-splitindex</additionalArgument>
3232
<additionalArgument>-use</additionalArgument>
33-
<additionalArgument>-doctitle "Eclipse Communication Framework (ECF) 3.16.0 API"</additionalArgument>
34-
<additionalArgument>-windowtitle "Eclipse Communication Framework (ECF) 3.16.0 API"</additionalArgument>
33+
<additionalArgument>-doctitle "Eclipse Communication Framework (ECF) 3.16.1 API"</additionalArgument>
34+
<additionalArgument>-windowtitle "Eclipse Communication Framework (ECF) 3.16.1 API"</additionalArgument>
3535
<additionalArgument>-link https://docs.oracle.com/en/java/javase/11/docs/api/</additionalArgument>
3636
<additionalArgument>-link https://docs.osgi.org/javadoc/osgi.core/7.0.0/</additionalArgument>
3737
<additionalArgument>-tag 'noimplement:a:Restriction:'</additionalArgument>

framework/bundles/org.eclipse.ecf.ai.mcp.tools/META-INF/MANIFEST.MF

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@ Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-Name: %bundle.name
44
Bundle-SymbolicName: org.eclipse.ecf.ai.mcp.tools;singleton:=true
5-
Bundle-Version: 1.0.0.qualifier
6-
Export-Package: org.eclipse.ecf.ai.mcp.tools.annotation;version="1.0.0",
7-
org.eclipse.ecf.ai.mcp.tools.service;version="1.0.0"
5+
Bundle-Version: 1.1.0.qualifier
6+
Export-Package: org.eclipse.ecf.ai.mcp.tools.annotation;version="1.1.0",
7+
org.eclipse.ecf.ai.mcp.tools.service;version="1.1.0"
88
Bundle-Vendor: %bundle.provider
99
Automatic-Module-Name: org.eclipse.ecf.ai.mcp.tools
1010
Bundle-ActivationPolicy: lazy
1111
Bundle-RequiredExecutionEnvironment: JavaSE-17
1212
Bundle-Localization: plugin
13-
Bundle-Vendor: %plugin.provider

framework/bundles/org.eclipse.ecf.ai.mcp.tools/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
</parent>
1111

1212
<artifactId>org.eclipse.ecf.ai.mcp.tools</artifactId>
13-
<version>1.0.0-SNAPSHOT</version>
13+
<version>1.1.0-SNAPSHOT</version>
1414
<packaging>eclipse-plugin</packaging>
1515
</project>

framework/bundles/org.eclipse.ecf.ai.mcp.tools/src/org/eclipse/ecf/ai/mcp/tools/annotation/Tool.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,24 @@
2222

2323
String description() default "";
2424

25+
/**
26+
* Supports the addition of ToolAnnotations to Tool spec in the MCP schema
27+
* (draft as of 5/18/2025) located <a href=
28+
* "https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/schema/draft/schema.json#L2164">here</a>
29+
*/
30+
@Retention(RetentionPolicy.RUNTIME)
31+
@Target(ElementType.METHOD)
32+
public @interface ToolAnnotation {
33+
boolean destructiveHint() default false;
34+
35+
boolean idempotentHint() default false;
36+
37+
boolean openWorldHint() default false;
38+
39+
boolean readOnlyHint() default false;
40+
41+
String title() default "";
42+
}
43+
44+
ToolAnnotation[] annotations();
2545
}

framework/bundles/org.eclipse.ecf.ai.mcp.tools/src/org/eclipse/ecf/ai/mcp/tools/annotation/ToolParam.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@
1818
@Target(ElementType.PARAMETER)
1919
public @interface ToolParam {
2020

21-
boolean required() default true;
21+
String name() default "";
2222

2323
String description() default "";
2424

25-
}
25+
boolean required() default true;
26+
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/****************************************************************************
2+
* Copyright (c) 2025 Composent, Inc.
3+
*
4+
* This program and the accompanying materials are made
5+
* available under the terms of the Eclipse Public License 2.0
6+
* which is available at https://www.eclipse.org/legal/epl-2.0/
7+
*
8+
* SPDX-License-Identifier: EPL-2.0
9+
*****************************************************************************/
10+
package org.eclipse.ecf.ai.mcp.tools.annotation;
11+
12+
import java.lang.annotation.ElementType;
13+
import java.lang.annotation.Retention;
14+
import java.lang.annotation.RetentionPolicy;
15+
import java.lang.annotation.Target;
16+
17+
@Retention(RetentionPolicy.RUNTIME)
18+
@Target(ElementType.METHOD)
19+
public @interface ToolResult {
20+
21+
String description() default "";
22+
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package org.eclipse.ecf.ai.mcp.tools.annotation;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/****************************************************************************
2+
* Copyright (c) 2025 Composent, Inc.
3+
*
4+
* This program and the accompanying materials are made
5+
* available under the terms of the Eclipse Public License 2.0
6+
* which is available at https://www.eclipse.org/legal/epl-2.0/
7+
*
8+
* SPDX-License-Identifier: EPL-2.0
9+
*****************************************************************************/
10+
package org.eclipse.ecf.ai.mcp.tools.service;
11+
12+
import java.util.List;
13+
14+
public class AbstractToolGroup implements ToolGroup {
15+
16+
@Override
17+
public List<ToolDescription> getToolDescriptions(String interfaceClassName) {
18+
return ToolDescription.fromService(this, interfaceClassName);
19+
}
20+
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/****************************************************************************
2+
* Copyright (c) 2025 Composent, Inc.
3+
*
4+
* This program and the accompanying materials are made
5+
* available under the terms of the Eclipse Public License 2.0
6+
* which is available at https://www.eclipse.org/legal/epl-2.0/
7+
*
8+
* SPDX-License-Identifier: EPL-2.0
9+
*****************************************************************************/
10+
package org.eclipse.ecf.ai.mcp.tools.service;
11+
12+
import java.util.Arrays;
13+
import java.util.Collections;
14+
import java.util.List;
15+
import java.util.stream.Collectors;
16+
17+
import org.eclipse.ecf.ai.mcp.tools.annotation.Tool;
18+
19+
/**
20+
* Describes the ToolAnnotation type in the MCP schema (draft as of 5/18/2025)
21+
* located <a href=
22+
* "https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/schema/draft/schema.json#L2164">here</a>
23+
*/
24+
public record ToolAnnotationDescription(boolean destructiveHint, boolean idempotentHint, boolean openWorldHint,
25+
boolean readOnlyHint, String title) {
26+
27+
public static List<ToolAnnotationDescription> fromAnnotations(Tool.ToolAnnotation[] annotations) {
28+
return (annotations != null) ? Arrays.asList(annotations).stream().map(a -> {
29+
return new ToolAnnotationDescription(a.destructiveHint(), a.idempotentHint(), a.openWorldHint(),
30+
a.readOnlyHint(), a.title());
31+
}).collect(Collectors.toList()) : Collections.emptyList();
32+
33+
}
34+
}

framework/bundles/org.eclipse.ecf.ai.mcp.tools/src/org/eclipse/ecf/ai/mcp/tools/service/ToolDescription.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,17 @@
1818

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

21-
public record ToolDescription(String name, String description, List<ToolParamDescription> toolParamDescriptions) {
21+
public record ToolDescription(String name, String description, List<ToolParamDescription> toolParamDescriptions,
22+
ToolResultDescription resultDesc, List<ToolAnnotationDescription> annotations) {
2223

2324
public static List<ToolDescription> fromClass(Class<?> clazz) {
2425
return Arrays.asList(clazz.getMethods()).stream().map(m -> {
2526
Tool ma = m.getAnnotation(Tool.class);
2627
return (ma != null)
2728
? new ToolDescription(m.getName(), ma.description(),
28-
ToolParamDescription.fromParameters(m.getParameters()))
29+
ToolParamDescription.fromParameters(m.getParameters()),
30+
ToolResultDescription.fromMethod(m),
31+
ToolAnnotationDescription.fromAnnotations(ma.annotations()))
2932
: null;
3033
}).filter(Objects::nonNull).collect(Collectors.toList());
3134

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

framework/bundles/org.eclipse.ecf.ai.mcp.tools/src/org/eclipse/ecf/ai/mcp/tools/service/ToolParamDescription.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,27 @@
1111

1212
import java.lang.reflect.Parameter;
1313
import java.util.Arrays;
14+
import java.util.Collections;
1415
import java.util.List;
1516
import java.util.Objects;
1617
import java.util.stream.Collectors;
1718

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

20-
public record ToolParamDescription(String description, boolean required) {
21+
public record ToolParamDescription(String name, String description, boolean required) {
2122

2223
public static List<ToolParamDescription> fromParameters(Parameter[] parameters) {
23-
return Arrays.asList(parameters).stream().map(p -> {
24+
return parameters != null ? Arrays.asList(parameters).stream().map(p -> {
2425
ToolParam tp = p.getAnnotation(ToolParam.class);
25-
return (tp != null) ? new ToolParamDescription(tp.description(), tp.required()) : null;
26-
}).filter(Objects::nonNull).collect(Collectors.toList());
26+
if (tp != null) {
27+
String name = tp.name();
28+
if ("".equals(name)) {
29+
name = p.getName();
30+
}
31+
return new ToolParamDescription(name, tp.description(), tp.required());
32+
}
33+
return null;
34+
}).filter(Objects::nonNull).collect(Collectors.toList()) : Collections.emptyList();
2735
}
36+
2837
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/****************************************************************************
2+
* Copyright (c) 2025 Composent, Inc.
3+
*
4+
* This program and the accompanying materials are made
5+
* available under the terms of the Eclipse Public License 2.0
6+
* which is available at https://www.eclipse.org/legal/epl-2.0/
7+
*
8+
* SPDX-License-Identifier: EPL-2.0
9+
*****************************************************************************/
10+
package org.eclipse.ecf.ai.mcp.tools.service;
11+
12+
import java.lang.reflect.Method;
13+
14+
import org.eclipse.ecf.ai.mcp.tools.annotation.ToolResult;
15+
16+
public record ToolResultDescription(String description, Class<?> returnType) {
17+
18+
public static ToolResultDescription fromMethod(Method method) {
19+
ToolResult tr = method.getAnnotation(ToolResult.class);
20+
return tr != null ? new ToolResultDescription(tr.description(), method.getReturnType())
21+
: new ToolResultDescription("", method.getReturnType());
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package org.eclipse.ecf.ai.mcp.tools.service;

releng/features/org.eclipse.ecf.ai.mcp.tools.feature/feature.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
<feature
33
id="org.eclipse.ecf.ai.mcp.tools.feature"
44
label="ECF AI Model Context Protocol Tool Support Feature"
5-
version="1.0.0.qualifier"
5+
version="1.1.0.qualifier"
66
provider-name="Eclipse.org - ECF"
77
license-feature="org.eclipse.license"
88
license-feature-version="0.0.0">
9-
9+
1010
<description url="http://www.eclipse.org/ecf">
1111
This feature provides the ECF AI Model Context Protocol Tools Support
1212
</description>

releng/features/org.eclipse.ecf.ai.mcp.tools.feature/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
</parent>
1111

1212
<artifactId>org.eclipse.ecf.ai.mcp.tools.feature</artifactId>
13-
<version>1.0.0-SNAPSHOT</version>
13+
<version>1.1.0-SNAPSHOT</version>
1414
<packaging>eclipse-feature</packaging>
1515
</project>

releng/features/org.eclipse.ecf.core/feature.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<feature
33
id="org.eclipse.ecf.core"
44
label="ECF SDK for Eclipse"
5-
version="3.16.0.qualifier"
5+
version="3.16.1.qualifier"
66
provider-name="%providerName"
77
plugin="org.eclipse.ecf"
88
license-feature="org.eclipse.license"

releng/features/org.eclipse.ecf.core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
</parent>
1111
<groupId>org.eclipse.ecf</groupId>
1212
<artifactId>org.eclipse.ecf.core</artifactId>
13-
<version>3.16.0-SNAPSHOT</version>
13+
<version>3.16.1-SNAPSHOT</version>
1414
<packaging>eclipse-feature</packaging>
1515
</project>

releng/features/org.eclipse.ecf.remoteservice.sdk.bndtools.feature/feature.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<feature
33
id="org.eclipse.ecf.remoteservice.sdk.bndtools.feature"
44
label="ECF Remote Services SDK for Bndtools"
5-
version="3.16.0.qualifier"
5+
version="3.16.1.qualifier"
66
provider-name="%providerName"
77
license-feature="org.eclipse.license"
88
license-feature-version="0.0.0">

releng/features/org.eclipse.ecf.remoteservice.sdk.bndtools.feature/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@
99
<relativePath>../../../</relativePath>
1010
</parent>
1111
<artifactId>org.eclipse.ecf.remoteservice.sdk.bndtools.feature</artifactId>
12-
<version>3.16.0-SNAPSHOT</version>
12+
<version>3.16.1-SNAPSHOT</version>
1313
<packaging>eclipse-feature</packaging>
1414
</project>

releng/features/org.eclipse.ecf.remoteservice.sdk.eclipse.feature/feature.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<feature
33
id="org.eclipse.ecf.remoteservice.sdk.eclipse.feature"
44
label="ECF Remote Services SDK for Eclipse"
5-
version="3.16.0.qualifier"
5+
version="3.16.1.qualifier"
66
provider-name="%providerName"
77
license-feature="org.eclipse.license"
88
license-feature-version="0.0.0">

releng/features/org.eclipse.ecf.remoteservice.sdk.eclipse.feature/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@
99
<relativePath>../../../</relativePath>
1010
</parent>
1111
<artifactId>org.eclipse.ecf.remoteservice.sdk.eclipse.feature</artifactId>
12-
<version>3.16.0-SNAPSHOT</version>
12+
<version>3.16.1-SNAPSHOT</version>
1313
<packaging>eclipse-feature</packaging>
1414
</project>

releng/features/org.eclipse.ecf.remoteservice.sdk.feature/feature.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<feature
33
id="org.eclipse.ecf.remoteservice.sdk.feature"
44
label="ECF Remote Services SDK for OSGi clients and servers"
5-
version="3.16.0.qualifier"
5+
version="3.16.1.qualifier"
66
provider-name="%providerName"
77
license-feature="org.eclipse.license"
88
license-feature-version="0.0.0">

releng/features/org.eclipse.ecf.remoteservice.sdk.feature/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
</parent>
1111
<groupId>org.eclipse.ecf</groupId>
1212
<artifactId>org.eclipse.ecf.remoteservice.sdk.feature</artifactId>
13-
<version>3.16.0-SNAPSHOT</version>
13+
<version>3.16.1-SNAPSHOT</version>
1414
<packaging>eclipse-feature</packaging>
1515
</project>

releng/features/org.eclipse.ecf.sdk/feature.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<feature
33
id="org.eclipse.ecf.sdk"
44
label="%featureName"
5-
version="3.16.0.qualifier"
5+
version="3.16.1.qualifier"
66
provider-name="%providerName"
77
license-feature="org.eclipse.license"
88
license-feature-version="0.0.0">

0 commit comments

Comments
 (0)