Skip to content
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
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
/*
* Copyright 2025 - 2025 the original author or authors.
*/
package org.springaicommunity.mcp.annotation;
package org.springaicommunity.mcp.adapter;

import java.lang.reflect.Method;

import io.modelcontextprotocol.spec.McpSchema;
import io.modelcontextprotocol.util.Assert;
import org.springaicommunity.mcp.annotation.McpComplete;

/**
* Utility class for adapting between McpComplete annotations and
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* Copyright 2025 - 2025 the original author or authors.
*/
package org.springaicommunity.mcp.annotation;
package org.springaicommunity.mcp.adapter;

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
Expand All @@ -10,15 +10,17 @@

import io.modelcontextprotocol.spec.McpSchema;
import io.modelcontextprotocol.util.Assert;
import org.springaicommunity.mcp.annotation.McpArg;
import org.springaicommunity.mcp.annotation.McpPrompt;

/**
* Utility class for adapting between McpPrompt annotations and McpSchema.Prompt objects.
*
* @author Christian Tzolov
*/
public class PromptAdaptor {
public class PromptAdapter {

private PromptAdaptor() {
private PromptAdapter() {
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
/*
* Copyright 2025 - 2025 the original author or authors.
*/
package org.springaicommunity.mcp.annotation;
package org.springaicommunity.mcp.adapter;

import io.modelcontextprotocol.spec.McpSchema;
import org.springaicommunity.mcp.annotation.McpResource;

/**
* @author Christian Tzolov
*/
public class ResourceAdaptor {
public class ResourceAdapter {

private ResourceAdaptor() {
private ResourceAdapter() {
}

public static McpSchema.Resource asResource(McpResource mcpResource) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,17 @@
import java.util.ArrayList;
import java.util.List;

import org.springaicommunity.mcp.annotation.CompleteAdapter;
import org.springaicommunity.mcp.annotation.McpComplete;
import org.springaicommunity.mcp.annotation.McpMeta;
import org.springaicommunity.mcp.annotation.McpProgressToken;

import io.modelcontextprotocol.spec.McpSchema;
import io.modelcontextprotocol.spec.McpSchema.CompleteReference;
import io.modelcontextprotocol.spec.McpSchema.CompleteRequest;
import io.modelcontextprotocol.util.Assert;
import io.modelcontextprotocol.util.DeafaultMcpUriTemplateManagerFactory;
import io.modelcontextprotocol.util.McpUriTemplateManager;
import io.modelcontextprotocol.util.McpUriTemplateManagerFactory;
import org.springaicommunity.mcp.adapter.CompleteAdapter;
import org.springaicommunity.mcp.annotation.McpComplete;
import org.springaicommunity.mcp.annotation.McpMeta;
import org.springaicommunity.mcp.annotation.McpProgressToken;

/**
* Abstract base class for creating callbacks around complete methods.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,15 @@
import java.util.List;
import java.util.stream.Stream;

import io.modelcontextprotocol.server.McpAsyncServerExchange;
import io.modelcontextprotocol.server.McpServerFeatures.AsyncCompletionSpecification;
import io.modelcontextprotocol.util.Assert;
import org.reactivestreams.Publisher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springaicommunity.mcp.annotation.CompleteAdapter;
import org.springaicommunity.mcp.adapter.CompleteAdapter;
import org.springaicommunity.mcp.annotation.McpComplete;
import org.springaicommunity.mcp.method.complete.AsyncMcpCompleteMethodCallback;

import io.modelcontextprotocol.server.McpAsyncServerExchange;
import io.modelcontextprotocol.server.McpServerFeatures.AsyncCompletionSpecification;
import io.modelcontextprotocol.util.Assert;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,17 @@
import java.util.function.BiFunction;
import java.util.stream.Stream;

import org.reactivestreams.Publisher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springaicommunity.mcp.annotation.CompleteAdapter;
import org.springaicommunity.mcp.annotation.McpComplete;
import org.springaicommunity.mcp.method.complete.AsyncStatelessMcpCompleteMethodCallback;

import io.modelcontextprotocol.server.McpStatelessServerFeatures.AsyncCompletionSpecification;
import io.modelcontextprotocol.server.McpTransportContext;
import io.modelcontextprotocol.spec.McpSchema.CompleteRequest;
import io.modelcontextprotocol.spec.McpSchema.CompleteResult;
import io.modelcontextprotocol.util.Assert;
import org.reactivestreams.Publisher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springaicommunity.mcp.adapter.CompleteAdapter;
import org.springaicommunity.mcp.annotation.McpComplete;
import org.springaicommunity.mcp.method.complete.AsyncStatelessMcpCompleteMethodCallback;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,11 @@
import java.util.List;
import java.util.stream.Stream;

import org.springaicommunity.mcp.annotation.CompleteAdapter;
import org.springaicommunity.mcp.annotation.McpComplete;
import org.springaicommunity.mcp.method.complete.SyncMcpCompleteMethodCallback;

import io.modelcontextprotocol.server.McpServerFeatures.SyncCompletionSpecification;
import io.modelcontextprotocol.util.Assert;
import org.springaicommunity.mcp.adapter.CompleteAdapter;
import org.springaicommunity.mcp.annotation.McpComplete;
import org.springaicommunity.mcp.method.complete.SyncMcpCompleteMethodCallback;
import reactor.core.publisher.Mono;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,16 @@
import java.util.function.BiFunction;
import java.util.stream.Stream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springaicommunity.mcp.annotation.CompleteAdapter;
import org.springaicommunity.mcp.annotation.McpComplete;
import org.springaicommunity.mcp.method.complete.SyncStatelessMcpCompleteMethodCallback;

import io.modelcontextprotocol.server.McpStatelessServerFeatures.SyncCompletionSpecification;
import io.modelcontextprotocol.server.McpTransportContext;
import io.modelcontextprotocol.spec.McpSchema.CompleteRequest;
import io.modelcontextprotocol.spec.McpSchema.CompleteResult;
import io.modelcontextprotocol.util.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springaicommunity.mcp.adapter.CompleteAdapter;
import org.springaicommunity.mcp.annotation.McpComplete;
import org.springaicommunity.mcp.method.complete.SyncStatelessMcpCompleteMethodCallback;
import reactor.core.publisher.Mono;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,17 @@
import java.util.function.BiFunction;
import java.util.stream.Stream;

import org.reactivestreams.Publisher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springaicommunity.mcp.annotation.McpPrompt;
import org.springaicommunity.mcp.annotation.PromptAdaptor;
import org.springaicommunity.mcp.method.prompt.AsyncMcpPromptMethodCallback;

import io.modelcontextprotocol.server.McpAsyncServerExchange;
import io.modelcontextprotocol.server.McpServerFeatures.AsyncPromptSpecification;
import io.modelcontextprotocol.spec.McpSchema.GetPromptRequest;
import io.modelcontextprotocol.spec.McpSchema.GetPromptResult;
import io.modelcontextprotocol.util.Assert;
import org.reactivestreams.Publisher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springaicommunity.mcp.adapter.PromptAdapter;
import org.springaicommunity.mcp.annotation.McpPrompt;
import org.springaicommunity.mcp.method.prompt.AsyncMcpPromptMethodCallback;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

Expand Down Expand Up @@ -75,7 +74,7 @@ public List<AsyncPromptSpecification> getPromptSpecifications() {
|| Publisher.class.isAssignableFrom(method.getReturnType()))
.map(mcpPromptMethod -> {
var promptAnnotation = mcpPromptMethod.getAnnotation(McpPrompt.class);
var mcpPrompt = PromptAdaptor.asPrompt(promptAnnotation, mcpPromptMethod);
var mcpPrompt = PromptAdapter.asPrompt(promptAnnotation, mcpPromptMethod);

BiFunction<McpAsyncServerExchange, GetPromptRequest, Mono<GetPromptResult>> methodCallback = AsyncMcpPromptMethodCallback
.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,17 @@
import java.util.function.BiFunction;
import java.util.stream.Stream;

import org.reactivestreams.Publisher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springaicommunity.mcp.annotation.McpPrompt;
import org.springaicommunity.mcp.annotation.PromptAdaptor;
import org.springaicommunity.mcp.method.prompt.AsyncStatelessMcpPromptMethodCallback;

import io.modelcontextprotocol.server.McpStatelessServerFeatures.AsyncPromptSpecification;
import io.modelcontextprotocol.server.McpTransportContext;
import io.modelcontextprotocol.spec.McpSchema.GetPromptRequest;
import io.modelcontextprotocol.spec.McpSchema.GetPromptResult;
import io.modelcontextprotocol.util.Assert;
import org.reactivestreams.Publisher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springaicommunity.mcp.adapter.PromptAdapter;
import org.springaicommunity.mcp.annotation.McpPrompt;
import org.springaicommunity.mcp.method.prompt.AsyncStatelessMcpPromptMethodCallback;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

Expand Down Expand Up @@ -75,7 +74,7 @@ public List<AsyncPromptSpecification> getPromptSpecifications() {
|| Publisher.class.isAssignableFrom(method.getReturnType()))
.map(mcpPromptMethod -> {
var promptAnnotation = mcpPromptMethod.getAnnotation(McpPrompt.class);
var mcpPrompt = PromptAdaptor.asPrompt(promptAnnotation, mcpPromptMethod);
var mcpPrompt = PromptAdapter.asPrompt(promptAnnotation, mcpPromptMethod);

BiFunction<McpTransportContext, GetPromptRequest, Mono<GetPromptResult>> methodCallback = AsyncStatelessMcpPromptMethodCallback
.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,11 @@
import java.util.List;
import java.util.stream.Stream;

import org.springaicommunity.mcp.annotation.McpPrompt;
import org.springaicommunity.mcp.annotation.PromptAdaptor;
import org.springaicommunity.mcp.method.prompt.SyncMcpPromptMethodCallback;

import io.modelcontextprotocol.server.McpServerFeatures.SyncPromptSpecification;
import io.modelcontextprotocol.util.Assert;
import org.springaicommunity.mcp.adapter.PromptAdapter;
import org.springaicommunity.mcp.annotation.McpPrompt;
import org.springaicommunity.mcp.method.prompt.SyncMcpPromptMethodCallback;
import reactor.core.publisher.Mono;

/**
Expand All @@ -47,7 +46,7 @@ public List<SyncPromptSpecification> getPromptSpecifications() {
.filter(method -> !Mono.class.isAssignableFrom(method.getReturnType()))
.map(mcpPromptMethod -> {
var promptAnnotation = mcpPromptMethod.getAnnotation(McpPrompt.class);
var mcpPrompt = PromptAdaptor.asPrompt(promptAnnotation, mcpPromptMethod);
var mcpPrompt = PromptAdapter.asPrompt(promptAnnotation, mcpPromptMethod);

var methodCallback = SyncMcpPromptMethodCallback.builder()
.method(mcpPromptMethod)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,16 @@
import java.util.function.BiFunction;
import java.util.stream.Stream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springaicommunity.mcp.annotation.McpPrompt;
import org.springaicommunity.mcp.annotation.PromptAdaptor;
import org.springaicommunity.mcp.method.prompt.SyncStatelessMcpPromptMethodCallback;

import io.modelcontextprotocol.server.McpStatelessServerFeatures.SyncPromptSpecification;
import io.modelcontextprotocol.server.McpTransportContext;
import io.modelcontextprotocol.spec.McpSchema.GetPromptRequest;
import io.modelcontextprotocol.spec.McpSchema.GetPromptResult;
import io.modelcontextprotocol.util.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springaicommunity.mcp.adapter.PromptAdapter;
import org.springaicommunity.mcp.annotation.McpPrompt;
import org.springaicommunity.mcp.method.prompt.SyncStatelessMcpPromptMethodCallback;
import reactor.core.publisher.Mono;

/**
Expand Down Expand Up @@ -71,7 +70,7 @@ public List<SyncPromptSpecification> getPromptSpecifications() {
.filter(method -> !Mono.class.isAssignableFrom(method.getReturnType()))
.map(mcpPromptMethod -> {
var promptAnnotation = mcpPromptMethod.getAnnotation(McpPrompt.class);
var mcpPrompt = PromptAdaptor.asPrompt(promptAnnotation, mcpPromptMethod);
var mcpPrompt = PromptAdapter.asPrompt(promptAnnotation, mcpPromptMethod);

BiFunction<McpTransportContext, GetPromptRequest, GetPromptResult> methodCallback = SyncStatelessMcpPromptMethodCallback
.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,16 @@
import java.util.Map;
import java.util.function.BiFunction;

import org.springaicommunity.mcp.annotation.McpArg;
import org.springaicommunity.mcp.annotation.McpPrompt;
import org.springaicommunity.mcp.annotation.PromptAdaptor;
import org.springaicommunity.mcp.method.prompt.AsyncMcpPromptMethodCallback;

import io.modelcontextprotocol.server.McpAsyncServerExchange;
import io.modelcontextprotocol.spec.McpSchema.GetPromptRequest;
import io.modelcontextprotocol.spec.McpSchema.GetPromptResult;
import io.modelcontextprotocol.spec.McpSchema.Prompt;
import io.modelcontextprotocol.spec.McpSchema.PromptMessage;
import io.modelcontextprotocol.spec.McpSchema.Role;
import io.modelcontextprotocol.spec.McpSchema.TextContent;
import org.springaicommunity.mcp.adapter.PromptAdapter;
import org.springaicommunity.mcp.annotation.McpArg;
import org.springaicommunity.mcp.annotation.McpPrompt;
import reactor.core.publisher.Mono;

/**
Expand Down Expand Up @@ -191,7 +189,7 @@ private static void demonstrateAsyncGreetingPrompt(AsyncPromptProvider provider)
McpPrompt promptAnnotation = asyncGreetingMethod.getAnnotation(McpPrompt.class);

// Convert the annotation to a Prompt object with argument information
Prompt prompt = PromptAdaptor.asPrompt(promptAnnotation, asyncGreetingMethod);
Prompt prompt = PromptAdapter.asPrompt(promptAnnotation, asyncGreetingMethod);

// Create the callback
BiFunction<McpAsyncServerExchange, GetPromptRequest, Mono<GetPromptResult>> callback = AsyncMcpPromptMethodCallback
Expand Down Expand Up @@ -235,7 +233,7 @@ private static void demonstrateAsyncStringPrompt(AsyncPromptProvider provider) t
McpPrompt promptAnnotation = asyncStringMethod.getAnnotation(McpPrompt.class);

// Convert the annotation to a Prompt object with argument information
Prompt prompt = PromptAdaptor.asPrompt(promptAnnotation, asyncStringMethod);
Prompt prompt = PromptAdapter.asPrompt(promptAnnotation, asyncStringMethod);

// Create the callback
BiFunction<McpAsyncServerExchange, GetPromptRequest, Mono<GetPromptResult>> callback = AsyncMcpPromptMethodCallback
Expand Down Expand Up @@ -278,7 +276,7 @@ private static void demonstrateAsyncStringListPrompt(AsyncPromptProvider provide
McpPrompt promptAnnotation = asyncStringListMethod.getAnnotation(McpPrompt.class);

// Convert the annotation to a Prompt object with argument information
Prompt prompt = PromptAdaptor.asPrompt(promptAnnotation, asyncStringListMethod);
Prompt prompt = PromptAdapter.asPrompt(promptAnnotation, asyncStringListMethod);

// Create the callback
BiFunction<McpAsyncServerExchange, GetPromptRequest, Mono<GetPromptResult>> callback = AsyncMcpPromptMethodCallback
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,16 @@
import java.util.Map;
import java.util.function.BiFunction;

import org.springaicommunity.mcp.annotation.McpArg;
import org.springaicommunity.mcp.annotation.McpPrompt;
import org.springaicommunity.mcp.annotation.PromptAdaptor;
import org.springaicommunity.mcp.method.prompt.SyncMcpPromptMethodCallback;

import io.modelcontextprotocol.server.McpSyncServerExchange;
import io.modelcontextprotocol.spec.McpSchema.GetPromptRequest;
import io.modelcontextprotocol.spec.McpSchema.GetPromptResult;
import io.modelcontextprotocol.spec.McpSchema.Prompt;
import io.modelcontextprotocol.spec.McpSchema.PromptMessage;
import io.modelcontextprotocol.spec.McpSchema.Role;
import io.modelcontextprotocol.spec.McpSchema.TextContent;
import org.springaicommunity.mcp.adapter.PromptAdapter;
import org.springaicommunity.mcp.annotation.McpArg;
import org.springaicommunity.mcp.annotation.McpPrompt;

/**
* Example demonstrating how to use the SyncMcpPromptMethodCallback.
Expand Down Expand Up @@ -196,7 +194,7 @@ private static void demonstrateGreetingPrompt(PromptProvider provider) throws Ex
McpPrompt promptAnnotation = greetingMethod.getAnnotation(McpPrompt.class);

// Convert the annotation to a Prompt object with argument information
Prompt prompt = PromptAdaptor.asPrompt(promptAnnotation, greetingMethod);
Prompt prompt = PromptAdapter.asPrompt(promptAnnotation, greetingMethod);

// Create the callback
BiFunction<McpSyncServerExchange, GetPromptRequest, GetPromptResult> callback = SyncMcpPromptMethodCallback
Expand Down Expand Up @@ -235,7 +233,7 @@ private static void demonstrateSingleMessagePrompt(PromptProvider provider) thro
McpPrompt promptAnnotation = singleMessageMethod.getAnnotation(McpPrompt.class);

// Convert the annotation to a Prompt object with argument information
Prompt prompt = PromptAdaptor.asPrompt(promptAnnotation, singleMessageMethod);
Prompt prompt = PromptAdapter.asPrompt(promptAnnotation, singleMessageMethod);

// Create the callback
BiFunction<McpSyncServerExchange, GetPromptRequest, GetPromptResult> callback = SyncMcpPromptMethodCallback
Expand Down Expand Up @@ -273,7 +271,7 @@ private static void demonstrateStringListPrompt(PromptProvider provider) throws
McpPrompt promptAnnotation = stringListMethod.getAnnotation(McpPrompt.class);

// Convert the annotation to a Prompt object with argument information
Prompt prompt = PromptAdaptor.asPrompt(promptAnnotation, stringListMethod);
Prompt prompt = PromptAdapter.asPrompt(promptAnnotation, stringListMethod);

// Create the callback
BiFunction<McpSyncServerExchange, GetPromptRequest, GetPromptResult> callback = SyncMcpPromptMethodCallback
Expand Down
Loading