diff --git a/README.md b/README.md index 612277a..80d8c7f 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,9 @@ The MCP Annotations project provides annotation-based method handling for [Model - [Building from Source](#building-from-source) - [Contributing](#contributing) -This project consists of two main modules: +This project consists of one module: 1. **mcp-annotations** - Core annotations and method handling for MCP operations. Depends only on MCP Java SDK. -2. **mcp-annotations-spring** - Spring AI integration for MCP annotations ## Overview @@ -36,23 +35,11 @@ To use the MCP Annotations core module in your project, add the following depend org.springaicommunity mcp-annotations - 0.2.0-SNAPSHOT + 0.2.0 ``` -### (DEPRECATED) Spring Integration Module - -This module is moved to Spring AI - -To use the Spring integration module, add the following dependency: - -```xml - - org.springaicommunity - mcp-annotations-spring - 0.2.0-SNAPSHOT - -``` +or version `0.3.0-SNAPSHOT` for current main branch. ### Snapshot repositories @@ -102,10 +89,6 @@ The core module provides a set of annotations and callback implementations for p Each operation type has both synchronous and asynchronous implementations, allowing for flexible integration with different application architectures. -### (DEPRECATED) Spring Integration Module (mcp-annotations-spring) - -The Spring integration module provides seamless integration with Spring AI and Spring Framework applications. It handles Spring-specific concerns such as AOP proxies and integrates with Spring AI's model abstractions. - ## Key Components ### Annotations @@ -235,15 +218,6 @@ The project includes provider classes that scan for annotated methods and create - `SyncStatelessMcpToolProvider` - Processes `@McpTool` annotations for synchronous stateless operations - `AsyncStatelessMcpToolProvider` - Processes `@McpTool` annotations for asynchronous stateless operations -### (DEPRECATED) Spring Integration - -Deprecated.The Spring integration module is moved to the Spring AI - -- `AsyncMcpAnnotationProviders` - Handles Spring-specific concerns when processing asynchronous MCP annotations -- `SyncMcpAnnotationProviders` - Handles Spring-specific concerns when processing synchronous MCP annotations -- Integration with Spring AOP proxies -- Support for Spring AI model abstractions - ## Usage Examples ### Prompt Example diff --git a/mcp-annotations-spring/pom.xml b/mcp-annotations-spring/pom.xml deleted file mode 100644 index 4fe4d05..0000000 --- a/mcp-annotations-spring/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - 4.0.0 - - - org.springaicommunity - mcp-annotations-parent - 0.3.0-SNAPSHOT - ../pom.xml - - - spring-ai-mcp-annotations - jar - Spring AI MCP Java SDK - Annotations - https://github.com/spring-ai-community/mcp-annotations - - - https://github.com/spring-ai-community/mcp-annotations - git://github.com/spring-ai-community/mcp-annotations.git - git@github.com/spring-ai-community/mcp-annotations.git - - - - - - org.springaicommunity - mcp-annotations - ${project.parent.version} - - - - io.modelcontextprotocol.sdk - mcp - ${mcp.java.sdk.version} - - - - org.springframework.ai - spring-ai-model - ${spring-ai.version} - - - - - - \ No newline at end of file diff --git a/mcp-annotations-spring/src/main/java/org/springaicommunity/mcp/spring/AnnotationProviderUtil.java b/mcp-annotations-spring/src/main/java/org/springaicommunity/mcp/spring/AnnotationProviderUtil.java deleted file mode 100644 index b6c86a8..0000000 --- a/mcp-annotations-spring/src/main/java/org/springaicommunity/mcp/spring/AnnotationProviderUtil.java +++ /dev/null @@ -1,48 +0,0 @@ -/* -* Copyright 2025 - 2025 the original author or authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* https://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package org.springaicommunity.mcp.spring; - -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.Comparator; - -import org.springframework.aop.support.AopUtils; -import org.springframework.util.ReflectionUtils; - -/** - * @author Christian Tzolov - */ -public class AnnotationProviderUtil { - - /** - * Returns the declared methods of the given bean, sorted by method name and parameter - * types. This is useful for consistent method ordering in annotation processing. - * @param bean The bean instance to inspect - * @return An array of sorted methods - */ - public static Method[] beanMethods(Object bean) { - - Method[] methods = ReflectionUtils - .getDeclaredMethods(AopUtils.isAopProxy(bean) ? AopUtils.getTargetClass(bean) : bean.getClass()); - - // Sort methods by name and parameter types for consistent ordering - Arrays.sort(methods, Comparator.comparing(Method::getName) - .thenComparing(method -> Arrays.toString(method.getParameterTypes()))); - - return methods; - } - -} diff --git a/mcp-annotations-spring/src/main/java/org/springaicommunity/mcp/spring/AsyncMcpAnnotationProviders.java b/mcp-annotations-spring/src/main/java/org/springaicommunity/mcp/spring/AsyncMcpAnnotationProviders.java deleted file mode 100644 index bed4d22..0000000 --- a/mcp-annotations-spring/src/main/java/org/springaicommunity/mcp/spring/AsyncMcpAnnotationProviders.java +++ /dev/null @@ -1,346 +0,0 @@ -/* -* Copyright 2025 - 2025 the original author or authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* https://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package org.springaicommunity.mcp.spring; - -import java.lang.reflect.Method; -import java.util.List; - -import org.springaicommunity.mcp.method.changed.prompt.AsyncPromptListChangedSpecification; -import org.springaicommunity.mcp.method.changed.resource.AsyncResourceListChangedSpecification; -import org.springaicommunity.mcp.method.changed.tool.AsyncToolListChangedSpecification; -import org.springaicommunity.mcp.method.elicitation.AsyncElicitationSpecification; -import org.springaicommunity.mcp.method.logging.AsyncLoggingSpecification; -import org.springaicommunity.mcp.method.progress.AsyncProgressSpecification; -import org.springaicommunity.mcp.method.sampling.AsyncSamplingSpecification; -import org.springaicommunity.mcp.provider.changed.prompt.AsyncMcpPromptListChangedProvider; -import org.springaicommunity.mcp.provider.changed.prompt.SyncMcpPromptListChangedProvider; -import org.springaicommunity.mcp.provider.changed.resource.AsyncMcpResourceListChangedProvider; -import org.springaicommunity.mcp.provider.changed.tool.AsyncMcpToolListChangedProvider; -import org.springaicommunity.mcp.provider.complete.AsyncMcpCompleteProvider; -import org.springaicommunity.mcp.provider.complete.AsyncStatelessMcpCompleteProvider; -import org.springaicommunity.mcp.provider.elicitation.AsyncMcpElicitationProvider; -import org.springaicommunity.mcp.provider.logging.AsyncMcpLoggingProvider; -import org.springaicommunity.mcp.provider.progress.AsyncMcpProgressProvider; -import org.springaicommunity.mcp.provider.prompt.AsyncMcpPromptProvider; -import org.springaicommunity.mcp.provider.prompt.AsyncStatelessMcpPromptProvider; -import org.springaicommunity.mcp.provider.resource.AsyncMcpResourceProvider; -import org.springaicommunity.mcp.provider.resource.AsyncStatelessMcpResourceProvider; -import org.springaicommunity.mcp.provider.sampling.AsyncMcpSamplingProvider; -import org.springaicommunity.mcp.provider.tool.AsyncMcpToolProvider; -import org.springaicommunity.mcp.provider.tool.AsyncStatelessMcpToolProvider; - -import io.modelcontextprotocol.server.McpServerFeatures.AsyncCompletionSpecification; -import io.modelcontextprotocol.server.McpServerFeatures.AsyncPromptSpecification; -import io.modelcontextprotocol.server.McpServerFeatures.AsyncResourceSpecification; -import io.modelcontextprotocol.server.McpServerFeatures.AsyncToolSpecification; -import io.modelcontextprotocol.server.McpStatelessServerFeatures; - -/** - * @author Christian Tzolov - */ -public class AsyncMcpAnnotationProviders { - - // LOGGING (CLIENT) - private static class SpringAiAsyncMcpLoggingProvider extends AsyncMcpLoggingProvider { - - public SpringAiAsyncMcpLoggingProvider(List loggingObjects) { - super(loggingObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // SAMPLING (CLIENT) - private static class SpringAiAsyncMcpSamplingProvider extends AsyncMcpSamplingProvider { - - public SpringAiAsyncMcpSamplingProvider(List samplingObjects) { - super(samplingObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // ELICITATION (CLIENT) - private static class SpringAiAsyncMcpElicitationProvider extends AsyncMcpElicitationProvider { - - public SpringAiAsyncMcpElicitationProvider(List elicitationObjects) { - super(elicitationObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // PROGRESS (CLIENT) - private static class SpringAiAsyncMcpProgressProvider extends AsyncMcpProgressProvider { - - public SpringAiAsyncMcpProgressProvider(List progressObjects) { - super(progressObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // TOOL - private static class SpringAiAsyncMcpToolProvider extends AsyncMcpToolProvider { - - public SpringAiAsyncMcpToolProvider(List toolObjects) { - super(toolObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - private static class SpringAiAsyncStatelessMcpToolProvider extends AsyncStatelessMcpToolProvider { - - public SpringAiAsyncStatelessMcpToolProvider(List toolObjects) { - super(toolObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // COMPLETE - private static class SpringAiAsyncMcpCompleteProvider extends AsyncMcpCompleteProvider { - - public SpringAiAsyncMcpCompleteProvider(List completeObjects) { - super(completeObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - }; - - private static class SpringAiAsyncStatelessMcpCompleteProvider extends AsyncStatelessMcpCompleteProvider { - - public SpringAiAsyncStatelessMcpCompleteProvider(List completeObjects) { - super(completeObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - }; - - // PROMPT - private static class SpringAiAsyncPromptProvider extends AsyncMcpPromptProvider { - - public SpringAiAsyncPromptProvider(List promptObjects) { - super(promptObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - private static class SpringAiAsyncStatelessPromptProvider extends AsyncStatelessMcpPromptProvider { - - public SpringAiAsyncStatelessPromptProvider(List promptObjects) { - super(promptObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // RESOURCE - private static class SpringAiAsyncResourceProvider extends AsyncMcpResourceProvider { - - public SpringAiAsyncResourceProvider(List resourceObjects) { - super(resourceObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - private static class SpringAiAsyncStatelessResourceProvider extends AsyncStatelessMcpResourceProvider { - - public SpringAiAsyncStatelessResourceProvider(List resourceObjects) { - super(resourceObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // TOOL LIST CHANGED - private static class SpringAiAsyncMcpToolListChangedProvider extends AsyncMcpToolListChangedProvider { - - public SpringAiAsyncMcpToolListChangedProvider(List toolListChangedObjects) { - super(toolListChangedObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // RESOURCE LIST CHANGED - private static class SpringAiAsyncMcpResourceListChangedProvider extends AsyncMcpResourceListChangedProvider { - - public SpringAiAsyncMcpResourceListChangedProvider(List resourceListChangedObjects) { - super(resourceListChangedObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // PROMPT LIST CHANGED - private static class SpringAiAsyncMcpPromptListChangedProvider extends AsyncMcpPromptListChangedProvider { - - public SpringAiAsyncMcpPromptListChangedProvider(List promptListChangedObjects) { - super(promptListChangedObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // - // UTILITIES - // - - // LOGGING (CLIENT) - public static List loggingSpecifications(List loggingObjects) { - return new SpringAiAsyncMcpLoggingProvider(loggingObjects).getLoggingSpecifications(); - } - - // SAMPLING (CLIENT) - public static List samplingSpecifications(List samplingObjects) { - return new SpringAiAsyncMcpSamplingProvider(samplingObjects).getSamplingSpecifictions(); - } - - // ELICITATION (CLIENT) - public static List elicitationSpecifications(List elicitationObjects) { - return new SpringAiAsyncMcpElicitationProvider(elicitationObjects).getElicitationSpecifications(); - } - - // PROGRESS (CLIENT) - public static List progressSpecifications(List progressObjects) { - return new SpringAiAsyncMcpProgressProvider(progressObjects).getProgressSpecifications(); - } - - // TOOL - public static List toolSpecifications(List toolObjects) { - return new SpringAiAsyncMcpToolProvider(toolObjects).getToolSpecifications(); - } - - public static List statelessToolSpecifications( - List toolObjects) { - return new SpringAiAsyncStatelessMcpToolProvider(toolObjects).getToolSpecifications(); - } - - // COMPLETE - public static List completeSpecifications(List completeObjects) { - return new SpringAiAsyncMcpCompleteProvider(completeObjects).getCompleteSpecifications(); - } - - public static List statelessCompleteSpecifications( - List completeObjects) { - return new SpringAiAsyncStatelessMcpCompleteProvider(completeObjects).getCompleteSpecifications(); - } - - // PROMPT - public static List promptSpecifications(List promptObjects) { - return new SpringAiAsyncPromptProvider(promptObjects).getPromptSpecifications(); - } - - public static List statelessPromptSpecifications( - List promptObjects) { - return new SpringAiAsyncStatelessPromptProvider(promptObjects).getPromptSpecifications(); - } - - // RESOURCE - public static List resourceSpecifications(List resourceObjects) { - return new SpringAiAsyncResourceProvider(resourceObjects).getResourceSpecifications(); - } - - public static List statelessResourceSpecifications( - List resourceObjects) { - return new SpringAiAsyncStatelessResourceProvider(resourceObjects).getResourceSpecifications(); - } - - // RESOURCE LIST CHANGED - public static List resourceListChangedSpecifications( - List resourceListChangedObjects) { - return new SpringAiAsyncMcpResourceListChangedProvider(resourceListChangedObjects) - .getResourceListChangedSpecifications(); - } - - // TOOL LIST CHANGED - public static List toolListChangedSpecifications( - List toolListChangedObjects) { - return new SpringAiAsyncMcpToolListChangedProvider(toolListChangedObjects).getToolListChangedSpecifications(); - } - - // PROMPT LIST CHANGED - public static List promptListChangedSpecifications( - List promptListChangedObjects) { - return new SpringAiAsyncMcpPromptListChangedProvider(promptListChangedObjects) - .getPromptListChangedSpecifications(); - } - -} diff --git a/mcp-annotations-spring/src/main/java/org/springaicommunity/mcp/spring/SyncMcpAnnotationProviders.java b/mcp-annotations-spring/src/main/java/org/springaicommunity/mcp/spring/SyncMcpAnnotationProviders.java deleted file mode 100644 index 0bb712c..0000000 --- a/mcp-annotations-spring/src/main/java/org/springaicommunity/mcp/spring/SyncMcpAnnotationProviders.java +++ /dev/null @@ -1,346 +0,0 @@ -/* -* Copyright 2025 - 2025 the original author or authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* https://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -package org.springaicommunity.mcp.spring; - -import java.lang.reflect.Method; -import java.util.List; - -import org.springaicommunity.mcp.method.changed.prompt.AsyncPromptListChangedSpecification; -import org.springaicommunity.mcp.method.changed.prompt.SyncPromptListChangedSpecification; -import org.springaicommunity.mcp.method.changed.resource.SyncResourceListChangedSpecification; -import org.springaicommunity.mcp.method.changed.tool.SyncToolListChangedSpecification; -import org.springaicommunity.mcp.method.elicitation.SyncElicitationSpecification; -import org.springaicommunity.mcp.method.logging.SyncLoggingSpecification; -import org.springaicommunity.mcp.method.progress.SyncProgressSpecification; -import org.springaicommunity.mcp.method.sampling.SyncSamplingSpecification; -import org.springaicommunity.mcp.provider.changed.prompt.SyncMcpPromptListChangedProvider; -import org.springaicommunity.mcp.provider.changed.resource.SyncMcpResourceListChangedProvider; -import org.springaicommunity.mcp.provider.changed.tool.SyncMcpToolListChangedProvider; -import org.springaicommunity.mcp.provider.complete.SyncMcpCompleteProvider; -import org.springaicommunity.mcp.provider.complete.SyncStatelessMcpCompleteProvider; -import org.springaicommunity.mcp.provider.elicitation.SyncMcpElicitationProvider; -import org.springaicommunity.mcp.provider.logging.SyncMcpLogginProvider; -import org.springaicommunity.mcp.provider.progress.SyncMcpProgressProvider; -import org.springaicommunity.mcp.provider.prompt.SyncMcpPromptProvider; -import org.springaicommunity.mcp.provider.prompt.SyncStatelessMcpPromptProvider; -import org.springaicommunity.mcp.provider.resource.SyncMcpResourceProvider; -import org.springaicommunity.mcp.provider.resource.SyncStatelessMcpResourceProvider; -import org.springaicommunity.mcp.provider.sampling.SyncMcpSamplingProvider; -import org.springaicommunity.mcp.provider.tool.SyncMcpToolProvider; -import org.springaicommunity.mcp.provider.tool.SyncStatelessMcpToolProvider; - -import io.modelcontextprotocol.server.McpServerFeatures.SyncCompletionSpecification; -import io.modelcontextprotocol.server.McpServerFeatures.SyncPromptSpecification; -import io.modelcontextprotocol.server.McpServerFeatures.SyncResourceSpecification; -import io.modelcontextprotocol.server.McpServerFeatures.SyncToolSpecification; -import io.modelcontextprotocol.server.McpStatelessServerFeatures; - -/** - * @author Christian Tzolov - */ -public class SyncMcpAnnotationProviders { - - // COMPLETE - private static class SpringAiSyncMcpCompleteProvider extends SyncMcpCompleteProvider { - - public SpringAiSyncMcpCompleteProvider(List completeObjects) { - super(completeObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - }; - - private static class SpringAiSyncStatelessMcpCompleteProvider extends SyncStatelessMcpCompleteProvider { - - public SpringAiSyncStatelessMcpCompleteProvider(List completeObjects) { - super(completeObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - }; - - // TOOL - private static class SpringAiSyncToolProvider extends SyncMcpToolProvider { - - public SpringAiSyncToolProvider(List toolObjects) { - super(toolObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - private static class SpringAiSyncStatelessToolProvider extends SyncStatelessMcpToolProvider { - - public SpringAiSyncStatelessToolProvider(List toolObjects) { - super(toolObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // PROMPT - private static class SpringAiSyncMcpPromptProvider extends SyncMcpPromptProvider { - - public SpringAiSyncMcpPromptProvider(List promptObjects) { - super(promptObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - }; - - private static class SpringAiSyncStatelessPromptProvider extends SyncStatelessMcpPromptProvider { - - public SpringAiSyncStatelessPromptProvider(List promptObjects) { - super(promptObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // RESOURCE - private static class SpringAiSyncMcpResourceProvider extends SyncMcpResourceProvider { - - public SpringAiSyncMcpResourceProvider(List resourceObjects) { - super(resourceObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - private static class SpringAiSyncStatelessResourceProvider extends SyncStatelessMcpResourceProvider { - - public SpringAiSyncStatelessResourceProvider(List resourceObjects) { - super(resourceObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // LOGGING (CLIENT) - private static class SpringAiSyncMcpLoggingProvider extends SyncMcpLogginProvider { - - public SpringAiSyncMcpLoggingProvider(List loggingObjects) { - super(loggingObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // SAMPLING (CLIENT) - private static class SpringAiSyncMcpSamplingProvider extends SyncMcpSamplingProvider { - - public SpringAiSyncMcpSamplingProvider(List samplingObjects) { - super(samplingObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // ELICITATION (CLIENT) - private static class SpringAiSyncMcpElicitationProvider extends SyncMcpElicitationProvider { - - public SpringAiSyncMcpElicitationProvider(List elicitationObjects) { - super(elicitationObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // PROGRESS (CLIENT) - private static class SpringAiSyncMcpProgressProvider extends SyncMcpProgressProvider { - - public SpringAiSyncMcpProgressProvider(List progressObjects) { - super(progressObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // TOOL LIST CHANGE - private static class SpringAiSyncMcpToolListChangedProvider extends SyncMcpToolListChangedProvider { - - public SpringAiSyncMcpToolListChangedProvider(List toolListChangedObjects) { - super(toolListChangedObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // RESOURCE LIST CHANGE - private static class SpringAiSyncMcpResourceListChangedProvider extends SyncMcpResourceListChangedProvider { - - public SpringAiSyncMcpResourceListChangedProvider(List resourceListChangedObjects) { - super(resourceListChangedObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // PROMPT LIST CHANGE - private static class SpringAiSyncMcpPromptListChangedProvider extends SyncMcpPromptListChangedProvider { - - public SpringAiSyncMcpPromptListChangedProvider(List promptListChangedObjects) { - super(promptListChangedObjects); - } - - @Override - protected Method[] doGetClassMethods(Object bean) { - return AnnotationProviderUtil.beanMethods(bean); - } - - } - - // - // UTILITIES - // - - // TOOLS - public static List toolSpecifications(List toolObjects) { - return new SpringAiSyncToolProvider(toolObjects).getToolSpecifications(); - } - - public static List statelessToolSpecifications( - List toolObjects) { - return new SpringAiSyncStatelessToolProvider(toolObjects).getToolSpecifications(); - } - - // COMPLETE - public static List completeSpecifications(List completeObjects) { - return new SpringAiSyncMcpCompleteProvider(completeObjects).getCompleteSpecifications(); - } - - public static List statelessCompleteSpecifications( - List completeObjects) { - return new SpringAiSyncStatelessMcpCompleteProvider(completeObjects).getCompleteSpecifications(); - } - - // PROMPT - public static List promptSpecifications(List promptObjects) { - return new SpringAiSyncMcpPromptProvider(promptObjects).getPromptSpecifications(); - } - - public static List statelessPromptSpecifications( - List promptObjects) { - return new SpringAiSyncStatelessPromptProvider(promptObjects).getPromptSpecifications(); - } - - // RESOURCE - public static List resourceSpecifications(List resourceObjects) { - return new SpringAiSyncMcpResourceProvider(resourceObjects).getResourceSpecifications(); - } - - public static List statelessResourceSpecifications( - List resourceObjects) { - return new SpringAiSyncStatelessResourceProvider(resourceObjects).getResourceSpecifications(); - } - - // LOGGING (CLIENT) - public static List loggingSpecifications(List loggingObjects) { - return new SpringAiSyncMcpLoggingProvider(loggingObjects).getLoggingSpecifications(); - } - - // SAMPLING (CLIENT) - public static List samplingSpecifications(List samplingObjects) { - return new SpringAiSyncMcpSamplingProvider(samplingObjects).getSamplingSpecifications(); - } - - // ELICITATION (CLIENT) - public static List elicitationSpecifications(List elicitationObjects) { - return new SpringAiSyncMcpElicitationProvider(elicitationObjects).getElicitationSpecifications(); - } - - // PROGRESS (CLIENT) - public static List progressSpecifications(List progressObjects) { - return new SpringAiSyncMcpProgressProvider(progressObjects).getProgressSpecifications(); - } - - // TOOL LIST CHANGED - public static List toolListChangedSpecifications( - List toolListChangedObjects) { - return new SpringAiSyncMcpToolListChangedProvider(toolListChangedObjects).getToolListChangedSpecifications(); - } - - // RESOURCE LIST CHANGED - public static List resourceListChangedSpecifications( - List resourceListChangedObjects) { - return new SpringAiSyncMcpResourceListChangedProvider(resourceListChangedObjects) - .getResourceListChangedSpecifications(); - } - - // PROMPT LIST CHANGED - public static List promptListChangedSpecifications( - List promptListChangedObjects) { - return new SpringAiSyncMcpPromptListChangedProvider(promptListChangedObjects) - .getPromptListChangedSpecifications(); - } - -} diff --git a/pom.xml b/pom.xml index 406457a..2dbe3eb 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,6 @@ 17 0.11.3 - 1.0.1 4.38.0 2.2.36 @@ -101,7 +100,6 @@ mcp-annotations - mcp-annotations-spring