diff --git a/mcp/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java b/mcp/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java index 1efa13de..90babfe6 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java +++ b/mcp/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java @@ -4,30 +4,10 @@ package io.modelcontextprotocol.server; -import java.time.Duration; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.function.BiFunction; - import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import io.modelcontextprotocol.spec.McpClientSession; -import io.modelcontextprotocol.spec.McpError; -import io.modelcontextprotocol.spec.McpSchema; -import io.modelcontextprotocol.spec.McpSchema.CallToolResult; -import io.modelcontextprotocol.spec.McpSchema.LoggingLevel; -import io.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification; -import io.modelcontextprotocol.spec.McpSchema.ResourceTemplate; -import io.modelcontextprotocol.spec.McpSchema.SetLevelRequest; -import io.modelcontextprotocol.spec.McpSchema.Tool; -import io.modelcontextprotocol.spec.McpServerSession; -import io.modelcontextprotocol.spec.McpServerTransportProvider; +import io.modelcontextprotocol.spec.*; +import io.modelcontextprotocol.spec.McpSchema.*; import io.modelcontextprotocol.util.DeafaultMcpUriTemplateManagerFactory; import io.modelcontextprotocol.util.McpUriTemplateManagerFactory; import io.modelcontextprotocol.util.Utils; @@ -36,6 +16,12 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +import java.time.Duration; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.function.BiFunction; + /** * The Model Context Protocol (MCP) server implementation that provides asynchronous * communication using Project Reactor's Mono and Flux types. @@ -620,22 +606,20 @@ public Mono loggingNotification(LoggingMessageNotification loggingMessageN } private McpServerSession.RequestHandler setLoggerRequestHandler() { - return (exchange, params) -> { - return Mono.defer(() -> { + return (exchange, params) -> Mono.defer(() -> { - SetLevelRequest newMinLoggingLevel = objectMapper.convertValue(params, - new TypeReference() { - }); + SetLevelRequest newMinLoggingLevel = objectMapper.convertValue(params, + new TypeReference() { + }); - exchange.setMinLoggingLevel(newMinLoggingLevel.level()); + exchange.setMinLoggingLevel(newMinLoggingLevel.level()); - // FIXME: this field is deprecated and should be removed together - // with the broadcasting loggingNotification. - this.minLoggingLevel = newMinLoggingLevel.level(); + // FIXME: this field is deprecated and should be removed together + // with the broadcasting loggingNotification. + this.minLoggingLevel = newMinLoggingLevel.level(); - return Mono.just(Map.of()); - }); - }; + return Mono.just(Map.of()); + }); } private McpServerSession.RequestHandler completionCompleteRequestHandler() { @@ -660,12 +644,10 @@ private McpServerSession.RequestHandler completionComp if (promptSpec == null) { return Mono.error(new McpError("Prompt not found: " + promptReference.name())); } - if (!promptSpec.prompt() + if (promptSpec.prompt() .arguments() .stream() - .filter(arg -> arg.name().equals(argumentName)) - .findFirst() - .isPresent()) { + .noneMatch(arg -> arg.name().equals(argumentName))) { return Mono.error(new McpError("Argument not found: " + argumentName)); } diff --git a/mcp/src/main/java/io/modelcontextprotocol/server/McpServer.java b/mcp/src/main/java/io/modelcontextprotocol/server/McpServer.java index d6ec2cc3..eb7b73ff 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/server/McpServer.java +++ b/mcp/src/main/java/io/modelcontextprotocol/server/McpServer.java @@ -4,15 +4,6 @@ package io.modelcontextprotocol.server; -import java.time.Duration; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.BiConsumer; -import java.util.function.BiFunction; - import com.fasterxml.jackson.databind.ObjectMapper; import io.modelcontextprotocol.spec.McpSchema; import io.modelcontextprotocol.spec.McpSchema.CallToolResult; @@ -23,6 +14,11 @@ import io.modelcontextprotocol.util.McpUriTemplateManagerFactory; import reactor.core.publisher.Mono; +import java.time.Duration; +import java.util.*; +import java.util.function.BiConsumer; +import java.util.function.BiFunction; + /** * Factory class for creating Model Context Protocol (MCP) servers. MCP servers expose * tools, resources, and prompts to AI models through a standardized interface. @@ -367,9 +363,7 @@ public AsyncSpecification tools(List t */ public AsyncSpecification tools(McpServerFeatures.AsyncToolSpecification... toolSpecifications) { Assert.notNull(toolSpecifications, "Tool handlers list must not be null"); - for (McpServerFeatures.AsyncToolSpecification tool : toolSpecifications) { - this.tools.add(tool); - } + this.tools.addAll(Arrays.asList(toolSpecifications)); return this; } @@ -465,9 +459,7 @@ public AsyncSpecification resourceTemplates(List resourceTempl */ public AsyncSpecification resourceTemplates(ResourceTemplate... resourceTemplates) { Assert.notNull(resourceTemplates, "Resource templates must not be null"); - for (ResourceTemplate resourceTemplate : resourceTemplates) { - this.resourceTemplates.add(resourceTemplate); - } + this.resourceTemplates.addAll(Arrays.asList(resourceTemplates)); return this; } @@ -858,9 +850,7 @@ public SyncSpecification tools(List too */ public SyncSpecification tools(McpServerFeatures.SyncToolSpecification... toolSpecifications) { Assert.notNull(toolSpecifications, "Tool handlers list must not be null"); - for (McpServerFeatures.SyncToolSpecification tool : toolSpecifications) { - this.tools.add(tool); - } + this.tools.addAll(Arrays.asList(toolSpecifications)); return this; } @@ -956,9 +946,7 @@ public SyncSpecification resourceTemplates(List resourceTempla */ public SyncSpecification resourceTemplates(ResourceTemplate... resourceTemplates) { Assert.notNull(resourceTemplates, "Resource templates must not be null"); - for (ResourceTemplate resourceTemplate : resourceTemplates) { - this.resourceTemplates.add(resourceTemplate); - } + this.resourceTemplates.addAll(Arrays.asList(resourceTemplates)); return this; }