From dd64cd88c23c0210b939db2f180476ec54ae1715 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Fri, 24 Jan 2025 18:40:03 +0100 Subject: [PATCH 001/426] Next development version --- mcp-bom/pom.xml | 2 +- mcp-docs/pom.xml | 2 +- mcp-test/pom.xml | 4 ++-- mcp-transport/mcp-webflux-sse-transport/pom.xml | 6 +++--- mcp-transport/mcp-webmvc-sse-transport/pom.xml | 6 +++--- mcp/pom.xml | 2 +- pom.xml | 2 +- spring-ai-mcp/pom.xml | 2 +- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/mcp-bom/pom.xml b/mcp-bom/pom.xml index 9abd5eb..23e86ad 100644 --- a/mcp-bom/pom.xml +++ b/mcp-bom/pom.xml @@ -7,7 +7,7 @@ org.springframework.experimental mcp-parent - 0.6.0 + 0.7.0-SNAPSHOT mcp-bom diff --git a/mcp-docs/pom.xml b/mcp-docs/pom.xml index 9f0d61b..c1a7de1 100644 --- a/mcp-docs/pom.xml +++ b/mcp-docs/pom.xml @@ -20,7 +20,7 @@ org.springframework.experimental mcp-parent - 0.6.0 + 0.7.0-SNAPSHOT mcp-docs Spring AI MCP Docs diff --git a/mcp-test/pom.xml b/mcp-test/pom.xml index 212003a..802ace2 100644 --- a/mcp-test/pom.xml +++ b/mcp-test/pom.xml @@ -6,7 +6,7 @@ org.springframework.experimental mcp-parent - 0.6.0 + 0.7.0-SNAPSHOT mcp-test jar @@ -24,7 +24,7 @@ org.springframework.experimental mcp - 0.6.0 + 0.7.0-SNAPSHOT diff --git a/mcp-transport/mcp-webflux-sse-transport/pom.xml b/mcp-transport/mcp-webflux-sse-transport/pom.xml index df23747..54c73fd 100644 --- a/mcp-transport/mcp-webflux-sse-transport/pom.xml +++ b/mcp-transport/mcp-webflux-sse-transport/pom.xml @@ -6,7 +6,7 @@ org.springframework.experimental mcp-parent - 0.6.0 + 0.7.0-SNAPSHOT ../../pom.xml mcp-webflux-sse-transport @@ -25,13 +25,13 @@ org.springframework.experimental mcp - 0.6.0 + 0.7.0-SNAPSHOT org.springframework.experimental mcp-test - 0.6.0 + 0.7.0-SNAPSHOT test diff --git a/mcp-transport/mcp-webmvc-sse-transport/pom.xml b/mcp-transport/mcp-webmvc-sse-transport/pom.xml index 95c7df1..7957e60 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/pom.xml +++ b/mcp-transport/mcp-webmvc-sse-transport/pom.xml @@ -6,7 +6,7 @@ org.springframework.experimental mcp-parent - 0.6.0 + 0.7.0-SNAPSHOT ../../pom.xml mcp-webmvc-sse-transport @@ -25,13 +25,13 @@ org.springframework.experimental mcp - 0.6.0 + 0.7.0-SNAPSHOT org.springframework.experimental mcp-test - 0.6.0 + 0.7.0-SNAPSHOT test diff --git a/mcp/pom.xml b/mcp/pom.xml index 3febfbf..6a81ca3 100644 --- a/mcp/pom.xml +++ b/mcp/pom.xml @@ -6,7 +6,7 @@ org.springframework.experimental mcp-parent - 0.6.0 + 0.7.0-SNAPSHOT mcp jar diff --git a/pom.xml b/pom.xml index d750215..68ba29c 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.springframework.experimental mcp-parent - 0.6.0 + 0.7.0-SNAPSHOT pom https://github.com/spring-projects-experimental/spring-ai-mcp diff --git a/spring-ai-mcp/pom.xml b/spring-ai-mcp/pom.xml index ab74c04..fd2e156 100644 --- a/spring-ai-mcp/pom.xml +++ b/spring-ai-mcp/pom.xml @@ -6,7 +6,7 @@ org.springframework.experimental mcp-parent - 0.6.0 + 0.7.0-SNAPSHOT spring-ai-mcp Spring AI MCP From 25ad5ed052847f0543070a99c256f6bd7a085b4f Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Fri, 24 Jan 2025 20:24:08 +0100 Subject: [PATCH 002/426] Remove the spring-ai-mcp module from the MCP Java SDK Signed-off-by: Christian Tzolov --- mcp-bom/pom.xml | 6 - pom.xml | 1 - spring-ai-mcp/README.md | 5 - spring-ai-mcp/pom.xml | 53 ----- .../ai/mcp/spring/McpFunctionCallback.java | 68 ------ .../ai/mcp/spring/ToolHelper.java | 218 ------------------ 6 files changed, 351 deletions(-) delete mode 100644 spring-ai-mcp/README.md delete mode 100644 spring-ai-mcp/pom.xml delete mode 100644 spring-ai-mcp/src/main/java/org/springframework/ai/mcp/spring/McpFunctionCallback.java delete mode 100644 spring-ai-mcp/src/main/java/org/springframework/ai/mcp/spring/ToolHelper.java diff --git a/mcp-bom/pom.xml b/mcp-bom/pom.xml index 23e86ad..eb73bc8 100644 --- a/mcp-bom/pom.xml +++ b/mcp-bom/pom.xml @@ -54,12 +54,6 @@ ${project.version} - - - org.springframework.experimental - spring-ai-mcp - ${project.version} - diff --git a/pom.xml b/pom.xml index 68ba29c..2092d7d 100644 --- a/pom.xml +++ b/pom.xml @@ -107,7 +107,6 @@ mcp mcp-transport/mcp-webflux-sse-transport mcp-transport/mcp-webmvc-sse-transport - spring-ai-mcp mcp-docs mcp-test diff --git a/spring-ai-mcp/README.md b/spring-ai-mcp/README.md deleted file mode 100644 index 8ba646f..0000000 --- a/spring-ai-mcp/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Spring AI MCP Spring - -Spring Integration module for Model Control Protocol (MCP) that provides Spring-specific functionality for working with MCP clients. - -Find more at [Java MCP SDK](https://docs.spring.io/spring-ai-mcp/reference/spring-mcp.html) \ No newline at end of file diff --git a/spring-ai-mcp/pom.xml b/spring-ai-mcp/pom.xml deleted file mode 100644 index fd2e156..0000000 --- a/spring-ai-mcp/pom.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - 4.0.0 - - org.springframework.experimental - mcp-parent - 0.7.0-SNAPSHOT - - spring-ai-mcp - Spring AI MCP - Spring Framework integration for Model Context Protocol (MCP), providing Spring AI function calling capabilities and Spring-friendly abstractions for MCP clients and MCP servers - https://github.com/spring-projects-experimental/spring-ai-mcp - - - https://github.com/spring-projects-experimental/spring-ai-mcp - git://github.com/spring-projects-experimental/spring-ai-mcp.git - git@github.com:spring-projects-experimental/spring-ai-mcp.git - - - - - org.springframework.ai - spring-ai-core - ${spring-ai.version} - - - org.springframework - spring-context - - - org.springframework - spring-messaging - - - - - - org.springframework.experimental - mcp - ${project.version} - - - - org.springframework - spring-core - ${springframework.version} - - - - - diff --git a/spring-ai-mcp/src/main/java/org/springframework/ai/mcp/spring/McpFunctionCallback.java b/spring-ai-mcp/src/main/java/org/springframework/ai/mcp/spring/McpFunctionCallback.java deleted file mode 100644 index e06b026..0000000 --- a/spring-ai-mcp/src/main/java/org/springframework/ai/mcp/spring/McpFunctionCallback.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2024-2024 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.springframework.ai.mcp.spring; - -import java.util.Map; - -import org.springframework.ai.mcp.client.McpSyncClient; -import org.springframework.ai.mcp.spec.McpSchema.CallToolRequest; -import org.springframework.ai.mcp.spec.McpSchema.CallToolResult; -import org.springframework.ai.mcp.spec.McpSchema.Tool; - -import org.springframework.ai.model.ModelOptionsUtils; -import org.springframework.ai.model.function.FunctionCallback; - -/** - * @author Christian Tzolov - */ - -public class McpFunctionCallback implements FunctionCallback { - - // TODO: revisit function calling as well to handle the async case - private final McpSyncClient mcpClient; - - private final Tool tool; - - public McpFunctionCallback(McpSyncClient clientSession, Tool tool) { - this.mcpClient = clientSession; - this.tool = tool; - } - - @Override - public String getName() { - return this.tool.name(); - } - - @Override - public String getDescription() { - return this.tool.description(); - } - - @Override - public String getInputTypeSchema() { - return ModelOptionsUtils.toJsonString(this.tool.inputSchema()); - } - - @Override - public String call(String functionInput) { - Map arguments = ModelOptionsUtils.jsonToMap(functionInput); - CallToolResult response = this.mcpClient.callTool(new CallToolRequest(this.getName(), arguments)); - // Todo handle errors - return ModelOptionsUtils.toJsonString(response.content()); - } - -} diff --git a/spring-ai-mcp/src/main/java/org/springframework/ai/mcp/spring/ToolHelper.java b/spring-ai-mcp/src/main/java/org/springframework/ai/mcp/spring/ToolHelper.java deleted file mode 100644 index a3c5e44..0000000 --- a/spring-ai-mcp/src/main/java/org/springframework/ai/mcp/spring/ToolHelper.java +++ /dev/null @@ -1,218 +0,0 @@ -/* -* Copyright 2024 - 2024 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.springframework.ai.mcp.spring; - -import java.util.List; -import java.util.Map; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.fasterxml.jackson.module.jsonSchema.JsonSchema; -import com.fasterxml.jackson.module.jsonSchema.JsonSchemaGenerator; - -import org.springframework.ai.chat.model.ToolContext; -import org.springframework.ai.mcp.server.McpServer; -import org.springframework.ai.mcp.server.McpServerFeatures; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.model.ModelOptionsUtils; -import org.springframework.ai.model.function.FunctionCallback; -import org.springframework.util.ClassUtils; - -/** - * Utility class that provides helper methods for working with Model Context Protocol - * (MCP) tools in a Spring AI environment. This class facilitates the integration between - * Spring AI's function callbacks and MCP's tool system. - * - *

- * The MCP tool system enables servers to expose executable functionality to language - * models, allowing them to interact with external systems, perform computations, and take - * actions in the real world. Each tool is uniquely identified by a name and includes - * metadata describing its schema. - * - *

- * This helper class provides methods to: - *

- * - * @author Christian Tzolov - * @see org.springframework.ai.model.function.FunctionCallback - * @see org.springframework.ai.mcp.server.McpServer.ToolRegistration - * @see org.springframework.ai.mcp.spec.McpSchema.Tool - */ -public final class ToolHelper { - - private ToolHelper() { - } - - public static List toSyncToolRegistration( - List functionCallbacks) { - return functionCallbacks.stream().map(ToolHelper::toSyncToolRegistration).toList(); - } - - @Deprecated - public static List toToolRegistration(List functionCallbacks) { - return functionCallbacks.stream().map(ToolHelper::toToolRegistration).toList(); - } - - public static List toSyncToolRegistration( - FunctionCallback... functionCallbacks) { - return toSyncToolRegistration(List.of(functionCallbacks)); - } - - @Deprecated - public static List toToolRegistration(FunctionCallback... functionCallbacks) { - return toToolRegistration(List.of(functionCallbacks)); - } - - /** - * Converts a Spring AI FunctionCallback to an MCP SyncToolRegistration. This enables - * Spring AI functions to be exposed as MCP tools that can be discovered and invoked - * by language models. - * - *

- * The conversion process: - *

    - *
  • Creates an MCP Tool with the function's name and input schema
  • - *
  • Wraps the function's execution in a SyncToolRegistration that handles the MCP - * protocol
  • - *
  • Provides error handling and result formatting according to MCP - * specifications
  • - *
- * - * You can use the FunctionCallback builder to create a new instance of - * FunctionCallback using either java.util.function.Function or Method reference. - * @param functionCallback the Spring AI function callback to convert - * @return an MCP SyncToolRegistration that wraps the function callback - * @throws RuntimeException if there's an error during the function execution - */ - public static McpServerFeatures.SyncToolRegistration toSyncToolRegistration(FunctionCallback functionCallback) { - var tool = new McpSchema.Tool(functionCallback.getName(), functionCallback.getName(), - functionCallback.getInputTypeSchema()); - - return new McpServerFeatures.SyncToolRegistration(tool, request -> { - try { - String callResult = functionCallback.call(ModelOptionsUtils.toJsonString(request)); - return new McpSchema.CallToolResult(List.of(new McpSchema.TextContent(callResult)), false); - } - catch (Exception e) { - return new McpSchema.CallToolResult(List.of(new McpSchema.TextContent(e.getMessage())), true); - } - }); - } - - /** - * Converts a Spring AI FunctionCallback to an MCP ToolRegistration. This enables - * Spring AI functions to be exposed as MCP tools that can be discovered and invoked - * by language models. - * - *

- * The conversion process: - *

    - *
  • Creates an MCP Tool with the function's name and input schema
  • - *
  • Wraps the function's execution in a ToolRegistration that handles the MCP - * protocol
  • - *
  • Provides error handling and result formatting according to MCP - * specifications
  • - *
- * - * You can use the FunctionCallback builder to create a new instance of - * FunctionCallback using either java.util.function.Function or Method reference. - * @param functionCallback the Spring AI function callback to convert - * @return an MCP ToolRegistration that wraps the function callback - * @throws RuntimeException if there's an error during the function execution - * @deprecated Use {@link #toSyncToolRegistration(FunctionCallback)}. - */ - @Deprecated - public static McpServer.ToolRegistration toToolRegistration(FunctionCallback functionCallback) { - - var tool = new McpSchema.Tool(functionCallback.getName(), functionCallback.getName(), - functionCallback.getInputTypeSchema()); - - return new McpServer.ToolRegistration(tool, request -> { - try { - String callResult = functionCallback.call(ModelOptionsUtils.toJsonString(request)); - return new McpSchema.CallToolResult(List.of(new McpSchema.TextContent(callResult)), false); - } - catch (Exception e) { - return new McpSchema.CallToolResult(List.of(new McpSchema.TextContent(e.getMessage())), true); - } - }); - } - - /** - * Generates a JSON schema for a map of named classes using the default ObjectMapper. - * This schema can be used to validate tool inputs according to the MCP specification. - * @param namedClasses a map of class names to their corresponding Class objects - * @return a JSON schema string that describes the structure of the named classes - * @throws RuntimeException if schema generation fails - * @see #generateJsonSchema(Map, ObjectMapper) - */ - public static String generateJsonSchema(Map> namedClasses) { - return generateJsonSchema(namedClasses, new ObjectMapper()); - } - - /** - * Generates a JSON schema for a map of named classes using a custom ObjectMapper. The - * generated schema follows the JSON Schema Draft 2020-12 specification and describes - * the structure of the provided classes. - * - *

- * This method: - *

    - *
  • Creates a schema that validates the structure of tool inputs
  • - *
  • Excludes ToolContext class from schema generation
  • - *
  • Uses Jackson's JsonSchemaGenerator for accurate type representation
  • - *
- * @param namedClasses a map of class names to their corresponding Class objects - * @param mapper the ObjectMapper to use for JSON processing - * @return a JSON schema string that describes the structure of the named classes - * @throws RuntimeException if schema generation fails - */ - public static String generateJsonSchema(Map> namedClasses, ObjectMapper mapper) { - try { - JsonSchemaGenerator schemaGen = new JsonSchemaGenerator(mapper); - - ObjectNode rootNode = mapper.createObjectNode(); - rootNode.put("$schema", "https://json-schema.org/draft/2020-12/schema"); - rootNode.put("type", "object"); - ObjectNode propertiesNode = rootNode.putObject("properties"); - - for (Map.Entry> entry : namedClasses.entrySet()) { - String className = entry.getKey(); - Class clazz = entry.getValue(); - - if (ClassUtils.isAssignable(clazz, ToolContext.class)) { - // Skip the ToolContext class from the schema generation. - continue; - } - - JsonSchema schema = schemaGen.generateSchema(clazz); - JsonNode schemaNode = mapper.valueToTree(schema); - propertiesNode.set(className, schemaNode); - } - - return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode); - } - catch (Exception e) { - throw new RuntimeException(e); - } - } - -} From 3112e5ede7f7bfe905b16fc25d3c5258a582dd17 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Fri, 24 Jan 2025 22:08:16 +0100 Subject: [PATCH 003/426] Refactor package structure and dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Updated package prefix: `org.springframework.ai.mcp` → `org.modelcontextprotocol` - Changed POM groupId: `org.springframework.experimental` → `org.modelcontextprotocol.sdk` - Update all dependecies and BOM - Updated documentation references accordingly Signed-off-by: Christian Tzolov --- .github/ISSUE_TEMPLATE/miscellaneous.md | 5 +- README.md | 27 +- mcp-bom/pom.xml | 22 +- mcp-docs/0.5.0-BREAKING-CHANGES.md | 105 -------- mcp-docs/0.6.0-MIGRATION-GUIDE.md | 239 ------------------ mcp-docs/pom.xml | 2 +- .../src/main/antora/modules/ROOT/nav.adoc | 1 - .../ROOT/pages/dependency-management.adoc | 13 +- .../main/antora/modules/ROOT/pages/mcp.adoc | 14 +- .../antora/modules/ROOT/pages/overview.adoc | 32 +-- .../antora/modules/ROOT/pages/spring-mcp.adoc | 162 ------------ mcp-test/pom.xml | 12 +- .../MockMcpTransport.java | 13 +- .../client/AbstractMcpAsyncClientTests.java | 31 ++- .../client/AbstractMcpSyncClientTests.java | 33 ++- .../server/AbstractMcpAsyncServerTests.java | 27 +- .../server/AbstractMcpSyncServerTests.java | 27 +- .../mcp-webflux-sse-transport/README.md | 2 +- .../mcp-webflux-sse-transport/pom.xml | 14 +- .../transport/WebFluxSseClientTransport.java | 14 +- .../transport/WebFluxSseServerTransport.java | 10 +- .../WebFluxSseIntegrationTests.java | 42 +-- .../client/WebFluxSseMcpAsyncClientTests.java | 6 +- .../client/WebFluxSseMcpSyncClientTests.java | 6 +- .../WebFluxSseClientTransportTests.java | 6 +- .../server/WebFluxSseMcpAsyncServerTests.java | 6 +- .../server/WebFluxSseMcpSyncServerTests.java | 6 +- .../server/transport/BlockingInputStream.java | 2 +- .../transport/_SseServerTransportTests.java_ | 0 .../mcp-webmvc-sse-transport/README.md | 2 +- .../mcp-webmvc-sse-transport/pom.xml | 14 +- .../transport/WebMvcSseServerTransport.java | 11 +- .../WebMvcSseAsyncServerTransportTests.java | 6 +- .../server/WebMvcSseIntegrationTests.java | 40 ++- .../WebMvcSseSyncServerTransportTests.java | 6 +- .../src/test/resources/logback.xml | 8 +- mcp/pom.xml | 12 +- .../client/McpAsyncClient.java | 48 ++-- .../client/McpClient.java | 21 +- .../client/McpClientFeatures.java | 9 +- .../client/McpSyncClient.java | 17 +- .../client/transport/FlowSseClient.java | 2 +- .../HttpClientSseClientTransport.java | 22 +- .../client/transport/ServerParameters.java | 5 +- .../transport/StdioClientTransport.java | 11 +- .../server/McpAsyncServer.java | 31 ++- .../server/McpServer.java | 18 +- .../server/McpServerFeatures.java | 9 +- .../server/McpSyncServer.java | 18 +- .../HttpServletSseServerTransport.java | 9 +- .../transport/StdioServerTransport.java | 11 +- .../spec/ClientMcpTransport.java | 2 +- .../spec/DefaultMcpSession.java | 5 +- .../spec/McpError.java | 4 +- .../spec/McpSchema.java | 2 +- .../spec/McpSession.java | 2 +- .../spec/McpTransport.java | 5 +- .../spec/ServerMcpTransport.java | 2 +- .../util/Assert.java | 2 +- .../util/Utils.java | 2 +- .../MockMcpTransport.java | 13 +- .../client/AbstractMcpAsyncClientTests.java | 31 ++- .../client/AbstractMcpSyncClientTests.java | 33 ++- .../McpAsyncClientResponseHandlerTests.java | 13 +- .../client/McpClientProtocolVersionTests.java | 11 +- .../client/ServletSseMcpAsyncClientTests.java | 7 +- .../client/ServletSseMcpSyncClientTests.java | 7 +- .../client/StdioMcpAsyncClientTests.java | 9 +- .../client/StdioMcpSyncClientTests.java | 9 +- .../HttpClientSseClientTransportTests.java | 6 +- .../server/AbstractMcpAsyncServerTests.java | 27 +- .../server/AbstractMcpSyncServerTests.java | 27 +- .../server/McpServerProtocolVersionTests.java | 7 +- .../server/ServletSseMcpAsyncServerTests.java | 7 +- .../server/ServletSseMcpSyncServerTests.java | 7 +- .../server/StdioMcpAsyncServerTests.java | 7 +- .../server/StdioMcpSyncServerTests.java | 7 +- .../server/transport/BlockingInputStream.java | 2 +- ...letSseServerTransportIntegrationTests.java | 42 ++- .../transport/StdioServerTransportTests.java | 7 +- .../spec/DefaultMcpSessionTests.java | 5 +- .../ai/mcp/attic/ClientSessionTests2.java | 79 ------ .../ai/mcp/attic/ClientSessionTests3.java | 74 ------ .../ai/mcp/attic/SSEClient.java | 183 -------------- .../ai/mcp/attic/ServerParametersParser.java | 90 ------- .../ai/mcp/attic/_DemoServer.java_ | 61 ----- .../ai/mcp/attic/_MainSSE.java_ | 81 ------ pom.xml | 20 +- 88 files changed, 483 insertions(+), 1624 deletions(-) delete mode 100644 mcp-docs/0.5.0-BREAKING-CHANGES.md delete mode 100644 mcp-docs/0.6.0-MIGRATION-GUIDE.md delete mode 100644 mcp-docs/src/main/antora/modules/ROOT/pages/spring-mcp.adoc rename mcp-test/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/MockMcpTransport.java (90%) rename mcp-test/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/AbstractMcpAsyncClientTests.java (92%) rename mcp-test/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/AbstractMcpSyncClientTests.java (89%) rename mcp-test/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/AbstractMcpAsyncServerTests.java (95%) rename mcp-test/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/AbstractMcpSyncServerTests.java (95%) rename mcp-transport/mcp-webflux-sse-transport/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/transport/WebFluxSseClientTransport.java (96%) rename mcp-transport/mcp-webflux-sse-transport/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/transport/WebFluxSseServerTransport.java (98%) rename mcp-transport/mcp-webflux-sse-transport/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/WebFluxSseIntegrationTests.java (91%) rename mcp-transport/mcp-webflux-sse-transport/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/WebFluxSseMcpAsyncClientTests.java (91%) rename mcp-transport/mcp-webflux-sse-transport/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/WebFluxSseMcpSyncClientTests.java (91%) rename mcp-transport/mcp-webflux-sse-transport/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/transport/WebFluxSseClientTransportTests.java (98%) rename mcp-transport/mcp-webflux-sse-transport/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/WebFluxSseMcpAsyncServerTests.java (91%) rename mcp-transport/mcp-webflux-sse-transport/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/WebFluxSseMcpSyncServerTests.java (91%) rename {mcp/src/test/java/org/springframework/ai/mcp => mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol}/server/transport/BlockingInputStream.java (97%) rename mcp-transport/mcp-webflux-sse-transport/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/transport/_SseServerTransportTests.java_ (100%) rename mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/transport/WebMvcSseServerTransport.java (98%) rename mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/WebMvcSseAsyncServerTransportTests.java (95%) rename mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/WebMvcSseIntegrationTests.java (92%) rename mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/WebMvcSseSyncServerTransportTests.java (95%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/McpAsyncClient.java (96%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/McpClient.java (98%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/McpClientFeatures.java (98%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/McpSyncClient.java (96%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/transport/FlowSseClient.java (99%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/transport/HttpClientSseClientTransport.java (93%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/transport/ServerParameters.java (97%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/transport/StdioClientTransport.java (97%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/McpAsyncServer.java (97%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/McpServer.java (99%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/McpServerFeatures.java (98%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/McpSyncServer.java (94%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/transport/HttpServletSseServerTransport.java (98%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/transport/StdioServerTransport.java (96%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/spec/ClientMcpTransport.java (94%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/spec/DefaultMcpSession.java (99%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/spec/McpError.java (88%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/spec/McpSchema.java (99%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/spec/McpSession.java (98%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/spec/McpTransport.java (96%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/spec/ServerMcpTransport.java (94%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/util/Assert.java (98%) rename mcp/src/main/java/org/{springframework/ai/mcp => modelcontextprotocol}/util/Utils.java (98%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/MockMcpTransport.java (90%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/AbstractMcpAsyncClientTests.java (92%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/AbstractMcpSyncClientTests.java (89%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/McpAsyncClientResponseHandlerTests.java (97%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/McpClientProtocolVersionTests.java (95%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/ServletSseMcpAsyncClientTests.java (90%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/ServletSseMcpSyncClientTests.java (90%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/StdioMcpAsyncClientTests.java (83%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/StdioMcpSyncClientTests.java (88%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/client/transport/HttpClientSseClientTransportTests.java (97%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/AbstractMcpAsyncServerTests.java (95%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/AbstractMcpSyncServerTests.java (95%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/McpServerProtocolVersionTests.java (97%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/ServletSseMcpAsyncServerTests.java (85%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/ServletSseMcpSyncServerTests.java (85%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/StdioMcpAsyncServerTests.java (85%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/StdioMcpSyncServerTests.java (85%) rename {mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp => mcp/src/test/java/org/modelcontextprotocol}/server/transport/BlockingInputStream.java (97%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/transport/HttpServletSseServerTransportIntegrationTests.java (88%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/server/transport/StdioServerTransportTests.java (96%) rename mcp/src/test/java/org/{springframework/ai/mcp => modelcontextprotocol}/spec/DefaultMcpSessionTests.java (98%) delete mode 100644 mcp/src/test/java/org/springframework/ai/mcp/attic/ClientSessionTests2.java delete mode 100644 mcp/src/test/java/org/springframework/ai/mcp/attic/ClientSessionTests3.java delete mode 100644 mcp/src/test/java/org/springframework/ai/mcp/attic/SSEClient.java delete mode 100644 mcp/src/test/java/org/springframework/ai/mcp/attic/ServerParametersParser.java delete mode 100644 mcp/src/test/java/org/springframework/ai/mcp/attic/_DemoServer.java_ delete mode 100644 mcp/src/test/java/org/springframework/ai/mcp/attic/_MainSSE.java_ diff --git a/.github/ISSUE_TEMPLATE/miscellaneous.md b/.github/ISSUE_TEMPLATE/miscellaneous.md index 80ee92a..d77c625 100644 --- a/.github/ISSUE_TEMPLATE/miscellaneous.md +++ b/.github/ISSUE_TEMPLATE/miscellaneous.md @@ -10,8 +10,7 @@ assignees: '' For anything other than bug reports and feature requests (performance, refactoring, etc), just go ahead and file the issue. Please provide as many details as possible. -If you have a question or a support request, please open a new discussion on [GitHub Discussions](https://github.com/spring-projects-experimental/spring-ai-mcp/discussions) -or ask a question on [StackOverflow](https://stackoverflow.com/questions/tagged/spring-ai-mcp). +If you have a question or a support request, please open a new discussion on [GitHub Discussions](https://github.com/modelcontextprotocol/java-sdk/discussions) -Please do **not** create issues on the [Issue Tracker](https://github.com/spring-projects-experimental/spring-ai-mcp/issues) for questions or support requests. +Please do **not** create issues on the [Issue Tracker](https://github.com/modelcontextprotocol/java-sdk/issues) for questions or support requests. We would like to keep the issue tracker **exclusively** for bug reports and feature requests. diff --git a/README.md b/README.md index f6116ae..6982146 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Java & Spring MCP -[![Build Status](https://github.com/spring-projects-experimental/spring-ai-mcp/actions/workflows/continuous-integration.yml/badge.svg)](https://github.com/spring-projects-experimental/spring-ai-mcp/actions/workflows/continuous-integration.yml) +[![Build Status](https://github.com/modelcontextprotocol/java-sdk/actions/workflows/continuous-integration.yml/badge.svg)](https://github.com/modelcontextprotocol/java-sdk/actions/workflows/continuous-integration.yml) Set of projects that provide Java SDK and Spring Framework integration for the [Model Context Protocol](https://modelcontextprotocol.org/docs/concepts/architecture). It enables Java applications to interact with AI models and tools through a standardized interface, supporting both synchronous and asynchronous communication patterns. @@ -28,8 +28,8 @@ Java implementation of the Model Context Protocol specification. It includes: - Servlet-based SSE server (`HttpServletSseServerTransport`) for HTTP SSE Server streaming using traditional Servlet API #### Optional SSE Transports -- [WebFlux SSE Transport](https://github.com/spring-projects-experimental/spring-ai-mcp/tree/main/mcp-transport/mcp-webflux-sse-transport) - Reactive HTTP streaming with Spring WebFlux (Client & Server) -- [WebMvc SSE Transport](https://github.com/spring-projects-experimental/spring-ai-mcp/tree/main/mcp-transport/mcp-webmvc-sse-transport) - Spring MVC based HTTP SSE transport (Server only). +- [WebFlux SSE Transport](https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-transport/mcp-webflux-sse-transport) - Reactive HTTP streaming with Spring WebFlux (Client & Server) +- [WebMvc SSE Transport](https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-transport/mcp-webmvc-sse-transport) - Spring MVC based HTTP SSE transport (Server only). You can use the core `HttpClientSseClientTransport` transport as a SSE client. ### [Spring AI MCP](https://docs.spring.io/spring-ai-mcp/reference/spring-mcp.html) @@ -47,27 +47,21 @@ Add the following dependencies to your Maven project: ```xml - org.springframework.experimental + org.modelcontextprotocol.sdk mcp - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-webflux-sse-transport - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-webmvc-sse-transport - - - - org.springframework.experimental - spring-ai-mcp - ``` This is a milestone release, not available on Maven Central. @@ -105,7 +99,6 @@ Explore these MCP examples in the [spring-ai-examples/model-context-protocol](ht - [Java MCP SDK documentation](mcp/README.md) - [Reference documentation](docs/ref-index.md) -- [Spring Integration documentation](spring-ai-mcp/README.md) ## Development @@ -125,7 +118,7 @@ mvn test ## Contributing -This is an experimental Spring project. Contributions are welcome! Please: +Contributions are welcome! Please: 1. Fork the repository 2. Create a feature branch @@ -138,9 +131,9 @@ This is an experimental Spring project. Contributions are welcome! Please: ## Links -- [GitHub Repository](https://github.com/spring-projects-experimental/spring-ai-mcp) -- [Issue Tracker](https://github.com/spring-projects-experimental/spring-ai-mcp/issues) -- [CI/CD](https://github.com/spring-projects-experimental/spring-ai-mcp/actions) +- [GitHub Repository](https://github.com/modelcontextprotocol/java-sdk) +- [Issue Tracker](https://github.com/modelcontextprotocol/java-sdk/issues) +- [CI/CD](https://github.com/modelcontextprotocol/java-sdk/actions) ## License diff --git a/mcp-bom/pom.xml b/mcp-bom/pom.xml index eb73bc8..a1b5164 100644 --- a/mcp-bom/pom.xml +++ b/mcp-bom/pom.xml @@ -5,7 +5,7 @@ 4.0.0 - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-parent 0.7.0-SNAPSHOT @@ -16,40 +16,40 @@ Spring AI MCP BOM Spring AI MCP Bill of Materials - https://github.com/spring-projects-experimental/spring-ai-mcp + https://github.com/modelcontextprotocol/java-sdk - - https://github.com/spring-projects-experimental/spring-ai-mcp - git://github.com/spring-projects-experimental/spring-ai-mcp.git - git@github.com/spring-projects-experimental/spring-ai-mcp.git - + + https://github.com/modelcontextprotocol/java-sdk + git://github.com/modelcontextprotocol/java-sdk.git + git@github.com/modelcontextprotocol/java-sdk.git + - org.springframework.experimental + org.modelcontextprotocol.sdk mcp ${project.version} - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-test ${project.version} - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-webflux-sse-transport ${project.version} - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-webmvc-sse-transport ${project.version} diff --git a/mcp-docs/0.5.0-BREAKING-CHANGES.md b/mcp-docs/0.5.0-BREAKING-CHANGES.md deleted file mode 100644 index 298c917..0000000 --- a/mcp-docs/0.5.0-BREAKING-CHANGES.md +++ /dev/null @@ -1,105 +0,0 @@ -# Breaking Changes for Spring AI MCP 0.5.0-SNAPSHOT - -## Major Changes - -1. Transport Implementation Modularization - - SSE transport implementations have been moved to dedicated modules: - - `mcp-webflux-sse-transport`: WebFlux-based SSE transport - - `mcp-webmvc-sse-transport`: WebMVC-based SSE transport - - Base MCP module no longer includes transport implementations - -2. Class Renames - - `SseClientTransport` → `WebFluxSseClientTransport` - - `SseServerTransport` → `WebFluxSseServerTransport` - -3. Project Structure - - Test utilities moved to new `mcp-test` module - - All samples moved to the the https://github.com/spring-projects/spring-ai-examples/tree/main/model-context-protocol - -## Migration Guide - -### 1. Update Dependencies - -If using SSE transport, add the appropriate transport module to your pom.xml: - -For WebFlux SSE transport: -```xml - - org.springframework.experimental - mcp-webflux-sse-transport - 0.5.0-SNAPSHOT - -``` - -For WebMVC SSE transport: -```xml - - org.springframework.experimental - mcp-webmvc-sse-transport - 0.5.0-SNAPSHOT - -``` - -### 2. Update Transport Class References - -Replace: -```java -import org.springframework.ai.mcp.client.transport.SseClientTransport; -import org.springframework.ai.mcp.server.transport.SseServerTransport; -``` - -With: -```java -// For WebFlux -import org.springframework.ai.mcp.client.transport.WebFluxSseClientTransport; -import org.springframework.ai.mcp.server.transport.WebFluxSseServerTransport; - -// Or for WebMVC -import org.springframework.ai.mcp.server.transport.WebMvcSseServerTransport; -``` - -### 3. Update Transport Instantiation - -Replace: -```java -var transport = new SseClientTransport(webClientBuilder); -``` - -With: -```java -var transport = new WebFluxSseClientTransport(webClientBuilder); -``` - -Replace: -```java -var serverTransport = new SseServerTransport(objectMapper, messageEndpoint); -``` - -With: -```java -// For WebFlux -var serverTransport = new WebFluxSseServerTransport(objectMapper, messageEndpoint); - -// Or for WebMVC -var serverTransport = new WebMvcSseServerTransport(objectMapper, messageEndpoint); -``` - -### 4. Test Dependencies - -If you're using MCP test utilities, add the test module dependency: - -```xml - - org.springframework.experimental - mcp-test - 0.5.0-SNAPSHOT - test - -``` - -## Other Changes - -- Spring AI dependency updated to 1.0.0-M5 -- Improved dependency management and reduced transitive dependencies -- Sample application restructured under samples/ directory -- New test utilities and base test classes in mcp-test module diff --git a/mcp-docs/0.6.0-MIGRATION-GUIDE.md b/mcp-docs/0.6.0-MIGRATION-GUIDE.md deleted file mode 100644 index 8f3b157..0000000 --- a/mcp-docs/0.6.0-MIGRATION-GUIDE.md +++ /dev/null @@ -1,239 +0,0 @@ -# Spring AI MCP 0.6.0 Migration Guide - -This guide outlines the steps required to migrate your code to Spring AI MCP 0.6.0. - -## Key Changes - -- New builder patterns for `McpClient` and `McpServer` -- Introduction of dedicated feature classes for sync/async operations -- Enhanced type safety and reactive support -- Deprecated methods and classes marked for removal - -## Client Migration - -### Creating Clients - -Before: -```java -// Sync client -McpClient.using(transport) - .requestTimeout(Duration.ofSeconds(5)) - .sync(); - -// Async client -McpClient.using(transport) - .requestTimeout(Duration.ofSeconds(5)) - .async(); -``` - -After: -```java -// Sync client -McpClient.sync(transport) - .requestTimeout(Duration.ofSeconds(5)) - .build(); - -// Async client -McpClient.async(transport) - .requestTimeout(Duration.ofSeconds(5)) - .build(); -``` - -### Change Consumers - -Before: -```java -// Sync client -McpClient.using(transport) - .toolsChangeConsumer(tools -> handleTools(tools)) - .resourcesChangeConsumer(resources -> handleResources(resources)) - .promptsChangeConsumer(prompts -> handlePrompts(prompts)) - .sync(); - -// Async client -McpClient.using(transport) - .toolsChangeConsumer(tools -> handleTools(tools)) - .resourcesChangeConsumer(resources -> handleResources(resources)) - .promptsChangeConsumer(prompts -> handlePrompts(prompts)) - .async(); -``` - -After: -```java -// Sync client -McpClient.sync(transport) - .toolsChangeConsumer(tools -> handleTools(tools)) - .resourcesChangeConsumer(resources -> handleResources(resources)) - .promptsChangeConsumer(prompts -> handlePrompts(prompts)) - .build(); - -// Async client -McpClient.async(transport) - .toolsChangeConsumer(tools -> Mono.fromRunnable(() -> handleTools(tools))) - .resourcesChangeConsumer(resources -> Mono.fromRunnable(() -> handleResources(resources))) - .promptsChangeConsumer(prompts -> Mono.fromRunnable(() -> handlePrompts(prompts))) - .build(); -``` - -### Sampling Handlers - -Before: -```java -// Sync client -McpClient.using(transport) - .sampling(request -> new CreateMessageResult("response")) - .sync(); - -// Async client -McpClient.using(transport) - .sampling(request -> new CreateMessageResult("response")) - .async(); -``` - -After: -```java -// Sync client -McpClient.sync(transport) - .sampling(request -> new CreateMessageResult("response")) - .build(); - -// Async client -McpClient.async(transport) - .sampling(request -> Mono.just(new CreateMessageResult("response"))) - .build(); -``` - -## Server Migration - -### Creating Servers - -Before: -```java -// Sync server -McpServer.using(transport) - .serverInfo("test-server", "1.0.0") - .sync(); - -// Async server -McpServer.using(transport) - .serverInfo("test-server", "1.0.0") - .async(); -``` - -After: -```java -// Sync server -McpServer.sync(transport) - .serverInfo("test-server", "1.0.0") - .build(); - -// Async server -McpServer.async(transport) - .serverInfo("test-server", "1.0.0") - .build(); -``` - -### Tool Registration - -Before: -```java -// Using ToolRegistration record -new ToolRegistration( - new Tool("calculator", "Performs calculations", schema), - args -> new CallToolResult("result") -); -``` - -After: -```java -// Sync server -new McpServerFeatures.SyncToolRegistration( - new Tool("calculator", "Performs calculations", schema), - args -> new CallToolResult("result") -); - -// Async server -new McpServerFeatures.AsyncToolRegistration( - new Tool("calculator", "Performs calculations", schema), - args -> Mono.just(new CallToolResult("result")) -); -``` - -### Resource Registration - -Before: -```java -// Using ResourceRegistration record -new ResourceRegistration( - new Resource("docs", "Documentation", "text/markdown"), - request -> new ReadResourceResult(content) -); -``` - -After: -```java -// Sync server -new McpServerFeatures.SyncResourceRegistration( - new Resource("docs", "Documentation", "text/markdown"), - request -> new ReadResourceResult(content) -); - -// Async server -new McpServerFeatures.AsyncResourceRegistration( - new Resource("docs", "Documentation", "text/markdown"), - request -> Mono.just(new ReadResourceResult(content)) -); -``` - -### Prompt Registration - -Before: -```java -// Using PromptRegistration record -new PromptRegistration( - new Prompt("analyze", "Code analysis"), - request -> new GetPromptResult("result") -); -``` - -After: -```java -// Sync server -new McpServerFeatures.SyncPromptRegistration( - new Prompt("analyze", "Code analysis"), - request -> new GetPromptResult("result") -); - -// Async server -new McpServerFeatures.AsyncPromptRegistration( - new Prompt("analyze", "Code analysis"), - request -> Mono.just(new GetPromptResult("result")) -); -``` - -## Spring Integration Changes - -### Tool Helper Changes - -Before: -```java -ToolHelper.toToolRegistration(functionCallback); -ToolHelper.toToolRegistration(functionCallbacks); -``` - -After: -```java -ToolHelper.toSyncToolRegistration(functionCallback); -ToolHelper.toSyncToolRegistration(functionCallbacks); -``` - -## Deprecated APIs - -The following APIs are deprecated and will be removed in a future release: - -- `McpClient.using()` - Use `McpClient.sync()` or `McpClient.async()` instead -- `McpServer.using()` - Use `McpServer.sync()` or `McpServer.async()` instead -- `McpServer.ToolRegistration` - Use `McpServerFeatures.SyncToolRegistration` or `McpServerFeatures.AsyncToolRegistration` instead -- `McpServer.ResourceRegistration` - Use `McpServerFeatures.SyncResourceRegistration` or `McpServerFeatures.AsyncResourceRegistration` instead -- `McpServer.PromptRegistration` - Use `McpServerFeatures.SyncPromptRegistration` or `McpServerFeatures.AsyncPromptRegistration` instead -- `ToolHelper.toToolRegistration()` - Use `ToolHelper.toSyncToolRegistration()` instead diff --git a/mcp-docs/pom.xml b/mcp-docs/pom.xml index c1a7de1..43e4404 100644 --- a/mcp-docs/pom.xml +++ b/mcp-docs/pom.xml @@ -18,7 +18,7 @@ 4.0.0 - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-parent 0.7.0-SNAPSHOT diff --git a/mcp-docs/src/main/antora/modules/ROOT/nav.adoc b/mcp-docs/src/main/antora/modules/ROOT/nav.adoc index 115ff34..5edc6ee 100644 --- a/mcp-docs/src/main/antora/modules/ROOT/nav.adoc +++ b/mcp-docs/src/main/antora/modules/ROOT/nav.adoc @@ -1,4 +1,3 @@ * xref:overview.adoc[Overview] ** xref:dependency-management.adoc[Dependency Management] * xref:mcp.adoc[MCP Java SDK] -* xref:spring-mcp.adoc[Spring AI MCP] diff --git a/mcp-docs/src/main/antora/modules/ROOT/pages/dependency-management.adoc b/mcp-docs/src/main/antora/modules/ROOT/pages/dependency-management.adoc index 0f01bc4..3aaf09e 100644 --- a/mcp-docs/src/main/antora/modules/ROOT/pages/dependency-management.adoc +++ b/mcp-docs/src/main/antora/modules/ROOT/pages/dependency-management.adoc @@ -20,7 +20,7 @@ Maven:: - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-bom 0.6.0-SNAPSHOT pom @@ -35,7 +35,7 @@ Gradle:: [source,groovy,indent=0,subs="verbatim,quotes"] ---- dependencies { - implementation platform("org.springframework.experimental:mcp-bom:0.6.0-SNAPSHOT") + implementation platform("org.modelcontextprotocol.sdk:mcp-bom:0.6.0-SNAPSHOT") //... } ---- @@ -53,17 +53,16 @@ The following dependencies are available and managed by the BOM: === Core Dependencies -* `org.springframework.experimental:mcp` - Core MCP library providing the base functionality and APIs for Model Context Protocol implementation. -* `org.springframework.experimental:spring-ai-mcp` - Spring AI integration with MCP, providing Spring-specific features and utilities. +* `org.modelcontextprotocol.sdk:mcp` - Core MCP library providing the base functionality and APIs for Model Context Protocol implementation. === Transport Dependencies -* `org.springframework.experimental:mcp-webflux-sse-transport` - WebFlux-based Server-Sent Events (SSE) transport implementation for reactive applications. -* `org.springframework.experimental:mcp-webmvc-sse-transport` - WebMVC-based Server-Sent Events (SSE) transport implementation for servlet-based applications. +* `org.modelcontextprotocol.sdk:mcp-webflux-sse-transport` - WebFlux-based Server-Sent Events (SSE) transport implementation for reactive applications. +* `org.modelcontextprotocol.sdk:mcp-webmvc-sse-transport` - WebMVC-based Server-Sent Events (SSE) transport implementation for servlet-based applications. === Testing Dependencies -* `org.springframework.experimental:mcp-test` - Testing utilities and support for MCP-based applications. +* `org.modelcontextprotocol.sdk:mcp-test` - Testing utilities and support for MCP-based applications. [[repositories]] === Milestone and Snapshot Repositories diff --git a/mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc b/mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc index dd3ed6f..86ca519 100644 --- a/mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc +++ b/mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc @@ -34,7 +34,7 @@ The core MCP functionality: [source,xml] ---- - org.springframework.experimental + org.modelcontextprotocol.sdk mcp ---- @@ -46,13 +46,13 @@ For HTTP SSE transport implementations, add one of the following dependencies ---- - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-webflux-sse-transport - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-webmvc-sse-transport ---- @@ -64,7 +64,7 @@ The core MCP functionality: [source,groovy] ---- dependencies { - implementation 'org.springframework.experimental:mcp' + implementation 'org.modelcontextprotocol.sdk:mcp' } ---- + @@ -74,10 +74,10 @@ For HTTP SSE transport implementations, add one of the following dependencies [source,groovy] ---- // Spring WebFlux-based SSE client and server transport -implementation 'org.springframework.experimental:mcp-webflux-sse-transport' +implementation 'org.modelcontextprotocol.sdk:mcp-webflux-sse-transport' // Spring WebMVC-based SSE server transport -implementation 'org.springframework.experimental:mcp-webmvc-sse-transport' +implementation 'org.modelcontextprotocol.sdk:mcp-webmvc-sse-transport' ---- ====== @@ -543,7 +543,7 @@ public class McpServerConfig implements WebMvcConfigurer { } ---- + -(You can implment non Spring web container as well link:https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/mcp/src/test/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransportIntegrationTests.java[HttpServletSseServerTransportIntegrationTests]) +(You can implment non Spring web container as well link:https://github.com/modelcontextprotocol/java-sdk/blob/main/mcp/src/test/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransportIntegrationTests.java[HttpServletSseServerTransportIntegrationTests]) + Implements the MCP HTTP with SSE transport specification using the traditional Servlet API, providing: + diff --git a/mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc b/mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc index 8e6dbac..d428584 100644 --- a/mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc +++ b/mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc @@ -25,20 +25,10 @@ Core implementation of the Model Context Protocol specification, providing: ** Servlet-based SSE server (`HttpServletSseServerTransport`) for HTTP SSE Server streaming using traditional Servlet API * *Optional SSE Transports* -** link:https://github.com/spring-projects-experimental/spring-ai-mcp/tree/main/mcp-transport/mcp-webflux-sse-transport[WebFlux SSE Transport] - Reactive HTTP streaming with Spring WebFlux (Client & Server) -** link:https://github.com/spring-projects-experimental/spring-ai-mcp/tree/main/mcp-transport/mcp-webmvc-sse-transport[WebMvc SSE Transport] - Spring MVC based SSE transport (Server only). +** link:https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-transport/mcp-webflux-sse-transport[WebFlux SSE Transport] - Reactive HTTP streaming with Spring WebFlux (Client & Server) +** link:https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-transport/mcp-webmvc-sse-transport[WebMvc SSE Transport] - Spring MVC based SSE transport (Server only). You can use the core `HttpClientSseClientTransport` transport as a SSE client. -=== xref:spring-mcp.adoc[Spring AI MCP] -Spring integration features: - -* Spring AI tool/function calling system integration -* Bidirectional conversion between Spring AI function callbacks and MCP tools -* JSON schema generation for tool input validation -* Automatic type conversion and error handling -* Spring-friendly MCP client abstractions -* Auto-configurations (WIP) - == Getting Started [tabs] @@ -49,27 +39,22 @@ Maven:: ---- - org.springframework.experimental + org.modelcontextprotocol.sdk mcp - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-webflux-sse-transport - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-webmvc-sse-transport - - - org.springframework.experimental - spring-ai-mcp - ---- + Add Spring milestone repository: @@ -93,10 +78,9 @@ Gradle:: [source,groovy] ---- dependencies { - implementation 'org.springframework.experimental:mcp' // Core - implementation 'org.springframework.experimental:mcp-webflux-sse-transport' // Optional - implementation 'org.springframework.experimental:mcp-webmvc-sse-transport' // Optional - implementation 'org.springframework.experimental:spring-ai-mcp' // Optional + implementation 'org.modelcontextprotocol.sdk:mcp' // Core + implementation 'org.modelcontextprotocol.sdk:mcp-webflux-sse-transport' // Optional + implementation 'org.modelcontextprotocol.sdk:mcp-webmvc-sse-transport' // Optional } repositories { diff --git a/mcp-docs/src/main/antora/modules/ROOT/pages/spring-mcp.adoc b/mcp-docs/src/main/antora/modules/ROOT/pages/spring-mcp.adoc deleted file mode 100644 index fd28fa9..0000000 --- a/mcp-docs/src/main/antora/modules/ROOT/pages/spring-mcp.adoc +++ /dev/null @@ -1,162 +0,0 @@ -= Spring AI MCP Spring -:page-title: Spring AI MCP Spring -:doctype: book -:icons: font -:source-highlighter: highlight.js -:toc: left - -Spring Integration module for Model Control Protocol (MCP) that provides Spring-specific functionality for working with MCP clients. - -== Overview - -The `spring-ai-mcp` module is part of the https://github.com/spring-projects-experimental/spring-ai-mcp[Spring AI MCP] project. It provides Spring Framework integration for the Model Control Protocol (MCP), enabling seamless integration of MCP functionality within Spring applications. - -== Features - -* Spring integration for MCP clients -* Bidirectional conversion between Spring AI function callbacks and MCP tools -* JSON schema generation for tool input validation -* Automatic type conversion and error handling -* Integration with Spring AI's function calling capabilities - -== Main Components - -=== McpFunctionCallback - -The `McpFunctionCallback` class implements Spring AI's `FunctionCallback` interface and provides integration between Spring AI's function calling system and MCP tools. Key features include: - -* Automatic conversion between JSON and Java objects for tool arguments -* Synchronous tool execution support -* Error handling and result formatting -* Integration with Spring AI's function calling system - -Example usage: - -[source,java] ----- -// Create an MCP client -McpSyncClient mcpClient = McpClient.using(transport) - .sync(); - -// Create a function callback for an MCP tool -Tool calculatorTool = new Tool("calculator", "Basic calculator", - Map.of("operation", "string", "a", "number", "b", "number")); -FunctionCallback callback = new McpFunctionCallback(mcpClient, calculatorTool); - -// Use the callback with Spring AI -String result = callback.call("{\"operation\": \"add\", \"a\": 2, \"b\": 3}"); ----- - -=== ToolHelper - -The `ToolHelper` utility class facilitates the integration between Spring AI's function callbacks and MCP's tool system. It provides methods for: - -* Converting Spring AI's `FunctionCallback` instances to MCP tool registrations -* Generating JSON schemas for tool input validation -* Handling error cases and result formatting - -Example usage: - -[source,java] ----- -// Convert Spring AI function callbacks to MCP tool registrations -List callbacks = List.of( - new CalculatorFunction(), - new WeatherFunction() -); -List tools = ToolHelper.toToolRegistration(callbacks); - -// Generate JSON schema for tool inputs -Map> inputTypes = Map.of( - "calculator", CalculatorInput.class, - "weather", WeatherInput.class -); -String schema = ToolHelper.generateJsonSchema(inputTypes); ----- - -==== Converting Function Callbacks to Tools - -The `ToolHelper` provides several methods to convert Spring AI function callbacks to MCP tools: - -[source,java] ----- -// Convert a single function callback -ToolRegistration tool = ToolHelper.toToolRegistration(myCallback); - -// Convert multiple callbacks -List tools = ToolHelper.toToolRegistration(callback1, callback2); - -// Convert a list of callbacks -List tools = ToolHelper.toToolRegistration(callbackList); ----- - -==== JSON Schema Generation - -The `ToolHelper` can generate JSON schemas for tool input validation: - -[source,java] ----- -// Using default ObjectMapper -String schema = ToolHelper.generateJsonSchema(inputTypes); - -// Using custom ObjectMapper -ObjectMapper mapper = new ObjectMapper(); -String schema = ToolHelper.generateJsonSchema(inputTypes, mapper); ----- - -The generated schema follows the JSON Schema Draft 2020-12 specification and: -* Validates the structure of tool inputs -* Excludes ToolContext class from schema generation -* Uses Jackson's JsonSchemaGenerator for accurate type representation - -== Usage - -To use this module, add the following dependency to your Maven project: - -[source,xml] ----- - - org.springframework.experimental - spring-ai-mcp - ----- - -Reffer to the xref:dependency-management.adoc[Dependency Management] page for more information. - -=== Example: Creating an MCP Tool Server with Spring AI Functions - -[source,java] ----- -@Configuration -class McpConfig { - - @Bean - McpServer mcpServer(List callbacks) { - // Convert Spring AI callbacks to MCP tools - List tools = ToolHelper.toToolRegistration(callbacks); - - return McpServer.using(transport) - .info("spring-ai-server", "1.0.0") - .tools(tools) - .sync(); - } - - @Bean - FunctionCallback calculatorFunction() { - return FunctionCallback.builder() - .name("calculator") - .description("Basic calculator") - .function(input -> { - // Function implementation - return result; - }) - .build(); - } -} ----- - -This configuration: -1. Creates Spring AI function callbacks -2. Converts them to MCP tools using ToolHelper -3. Registers the tools with an MCP server -4. Makes the tools available for discovery and execution by MCP clients diff --git a/mcp-test/pom.xml b/mcp-test/pom.xml index 802ace2..e1edaf2 100644 --- a/mcp-test/pom.xml +++ b/mcp-test/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-parent 0.7.0-SNAPSHOT @@ -12,17 +12,17 @@ jar Tests for the Java MCP SDK Provides some shared test fasilities for the MCP Java SDK - https://github.com/spring-projects-experimental/spring-ai-mcp + https://github.com/modelcontextprotocol/java-sdk - https://github.com/spring-projects-experimental/spring-ai-mcp - git://github.com/spring-projects-experimental/spring-ai-mcp.git - git@github.com:spring-projects-experimental/spring-ai-mcp.git + https://github.com/modelcontextprotocol/java-sdk + git://github.com/modelcontextprotocol/java-sdk.git + git@github.com/modelcontextprotocol/java-sdk.git - org.springframework.experimental + org.modelcontextprotocol.sdk mcp 0.7.0-SNAPSHOT diff --git a/mcp-test/src/main/java/org/springframework/ai/mcp/MockMcpTransport.java b/mcp-test/src/main/java/org/modelcontextprotocol/MockMcpTransport.java similarity index 90% rename from mcp-test/src/main/java/org/springframework/ai/mcp/MockMcpTransport.java rename to mcp-test/src/main/java/org/modelcontextprotocol/MockMcpTransport.java index 20736b1..c15d922 100644 --- a/mcp-test/src/main/java/org/springframework/ai/mcp/MockMcpTransport.java +++ b/mcp-test/src/main/java/org/modelcontextprotocol/MockMcpTransport.java @@ -14,24 +14,23 @@ * limitations under the License. */ -package org.springframework.ai.mcp; +package org.modelcontextprotocol; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import org.modelcontextprotocol.spec.ClientMcpTransport; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.ServerMcpTransport; +import org.modelcontextprotocol.spec.McpSchema.JSONRPCNotification; +import org.modelcontextprotocol.spec.McpSchema.JSONRPCRequest; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.publisher.Sinks; import reactor.core.scheduler.Schedulers; -import org.springframework.ai.mcp.spec.ClientMcpTransport; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.JSONRPCNotification; -import org.springframework.ai.mcp.spec.McpSchema.JSONRPCRequest; -import org.springframework.ai.mcp.spec.ServerMcpTransport; - @SuppressWarnings("unused") public class MockMcpTransport implements ClientMcpTransport, ServerMcpTransport { diff --git a/mcp-test/src/main/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java b/mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java similarity index 92% rename from mcp-test/src/main/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java rename to mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java index 2579f57..ccc84cc 100644 --- a/mcp-test/src/main/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java +++ b/mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client; +package org.modelcontextprotocol.client; import java.time.Duration; import java.util.Map; @@ -25,24 +25,23 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.modelcontextprotocol.spec.ClientMcpTransport; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.CallToolRequest; +import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; +import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult; +import org.modelcontextprotocol.spec.McpSchema.GetPromptRequest; +import org.modelcontextprotocol.spec.McpSchema.Prompt; +import org.modelcontextprotocol.spec.McpSchema.Resource; +import org.modelcontextprotocol.spec.McpSchema.Root; +import org.modelcontextprotocol.spec.McpSchema.SubscribeRequest; +import org.modelcontextprotocol.spec.McpSchema.Tool; +import org.modelcontextprotocol.spec.McpSchema.UnsubscribeRequest; +import org.modelcontextprotocol.spec.McpTransport; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; -import org.springframework.ai.mcp.spec.ClientMcpTransport; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.CallToolRequest; -import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.CreateMessageRequest; -import org.springframework.ai.mcp.spec.McpSchema.CreateMessageResult; -import org.springframework.ai.mcp.spec.McpSchema.GetPromptRequest; -import org.springframework.ai.mcp.spec.McpSchema.Prompt; -import org.springframework.ai.mcp.spec.McpSchema.Resource; -import org.springframework.ai.mcp.spec.McpSchema.Root; -import org.springframework.ai.mcp.spec.McpSchema.SubscribeRequest; -import org.springframework.ai.mcp.spec.McpSchema.Tool; -import org.springframework.ai.mcp.spec.McpSchema.UnsubscribeRequest; -import org.springframework.ai.mcp.spec.McpTransport; - import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; diff --git a/mcp-test/src/main/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java b/mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java similarity index 89% rename from mcp-test/src/main/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java rename to mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java index c012612..7f02fa2 100644 --- a/mcp-test/src/main/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java +++ b/mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client; +package org.modelcontextprotocol.client; import java.time.Duration; import java.util.Map; @@ -23,22 +23,21 @@ import java.util.concurrent.atomic.AtomicBoolean; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; - -import org.springframework.ai.mcp.spec.ClientMcpTransport; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.CallToolRequest; -import org.springframework.ai.mcp.spec.McpSchema.CallToolResult; -import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.ListResourceTemplatesResult; -import org.springframework.ai.mcp.spec.McpSchema.ListResourcesResult; -import org.springframework.ai.mcp.spec.McpSchema.ListToolsResult; -import org.springframework.ai.mcp.spec.McpSchema.ReadResourceResult; -import org.springframework.ai.mcp.spec.McpSchema.Resource; -import org.springframework.ai.mcp.spec.McpSchema.Root; -import org.springframework.ai.mcp.spec.McpSchema.SubscribeRequest; -import org.springframework.ai.mcp.spec.McpSchema.TextContent; -import org.springframework.ai.mcp.spec.McpSchema.Tool; -import org.springframework.ai.mcp.spec.McpSchema.UnsubscribeRequest; +import org.modelcontextprotocol.spec.ClientMcpTransport; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.CallToolRequest; +import org.modelcontextprotocol.spec.McpSchema.CallToolResult; +import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import org.modelcontextprotocol.spec.McpSchema.ListResourceTemplatesResult; +import org.modelcontextprotocol.spec.McpSchema.ListResourcesResult; +import org.modelcontextprotocol.spec.McpSchema.ListToolsResult; +import org.modelcontextprotocol.spec.McpSchema.ReadResourceResult; +import org.modelcontextprotocol.spec.McpSchema.Resource; +import org.modelcontextprotocol.spec.McpSchema.Root; +import org.modelcontextprotocol.spec.McpSchema.SubscribeRequest; +import org.modelcontextprotocol.spec.McpSchema.TextContent; +import org.modelcontextprotocol.spec.McpSchema.Tool; +import org.modelcontextprotocol.spec.McpSchema.UnsubscribeRequest; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; diff --git a/mcp-test/src/main/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java b/mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java similarity index 95% rename from mcp-test/src/main/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java rename to mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java index 0c7c1aa..a9360cb 100644 --- a/mcp-test/src/main/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java +++ b/mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import java.time.Duration; import java.util.List; @@ -22,22 +22,21 @@ import java.util.List; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.CallToolResult; +import org.modelcontextprotocol.spec.McpSchema.GetPromptResult; +import org.modelcontextprotocol.spec.McpSchema.Prompt; +import org.modelcontextprotocol.spec.McpSchema.PromptMessage; +import org.modelcontextprotocol.spec.McpSchema.ReadResourceResult; +import org.modelcontextprotocol.spec.McpSchema.Resource; +import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities; +import org.modelcontextprotocol.spec.McpSchema.Tool; +import org.modelcontextprotocol.spec.McpTransport; +import org.modelcontextprotocol.spec.ServerMcpTransport; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.CallToolResult; -import org.springframework.ai.mcp.spec.McpSchema.GetPromptResult; -import org.springframework.ai.mcp.spec.McpSchema.Prompt; -import org.springframework.ai.mcp.spec.McpSchema.PromptMessage; -import org.springframework.ai.mcp.spec.McpSchema.ReadResourceResult; -import org.springframework.ai.mcp.spec.McpSchema.Resource; -import org.springframework.ai.mcp.spec.McpSchema.ServerCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.Tool; -import org.springframework.ai.mcp.spec.McpTransport; -import org.springframework.ai.mcp.spec.ServerMcpTransport; - import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; diff --git a/mcp-test/src/main/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java b/mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java similarity index 95% rename from mcp-test/src/main/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java rename to mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java index ddb827a..83fae26 100644 --- a/mcp-test/src/main/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java +++ b/mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java @@ -14,26 +14,25 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import java.util.List; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; - -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.CallToolResult; -import org.springframework.ai.mcp.spec.McpSchema.GetPromptResult; -import org.springframework.ai.mcp.spec.McpSchema.Prompt; -import org.springframework.ai.mcp.spec.McpSchema.PromptMessage; -import org.springframework.ai.mcp.spec.McpSchema.ReadResourceResult; -import org.springframework.ai.mcp.spec.McpSchema.Resource; -import org.springframework.ai.mcp.spec.McpSchema.ServerCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.Tool; -import org.springframework.ai.mcp.spec.McpTransport; -import org.springframework.ai.mcp.spec.ServerMcpTransport; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.CallToolResult; +import org.modelcontextprotocol.spec.McpSchema.GetPromptResult; +import org.modelcontextprotocol.spec.McpSchema.Prompt; +import org.modelcontextprotocol.spec.McpSchema.PromptMessage; +import org.modelcontextprotocol.spec.McpSchema.ReadResourceResult; +import org.modelcontextprotocol.spec.McpSchema.Resource; +import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities; +import org.modelcontextprotocol.spec.McpSchema.Tool; +import org.modelcontextprotocol.spec.McpTransport; +import org.modelcontextprotocol.spec.ServerMcpTransport; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; diff --git a/mcp-transport/mcp-webflux-sse-transport/README.md b/mcp-transport/mcp-webflux-sse-transport/README.md index 57e4d11..a38741f 100644 --- a/mcp-transport/mcp-webflux-sse-transport/README.md +++ b/mcp-transport/mcp-webflux-sse-transport/README.md @@ -2,7 +2,7 @@ ```xml - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-webflux-sse-transport ``` diff --git a/mcp-transport/mcp-webflux-sse-transport/pom.xml b/mcp-transport/mcp-webflux-sse-transport/pom.xml index 54c73fd..fb65db4 100644 --- a/mcp-transport/mcp-webflux-sse-transport/pom.xml +++ b/mcp-transport/mcp-webflux-sse-transport/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-parent 0.7.0-SNAPSHOT ../../pom.xml @@ -13,23 +13,23 @@ jar WebFlux implementation of the Java MCP SSE transport - https://github.com/spring-projects-experimental/spring-ai-mcp + https://github.com/modelcontextprotocol/java-sdk - https://github.com/spring-projects-experimental/spring-ai-mcp - git://github.com/spring-projects-experimental/spring-ai-mcp.git - git@github.com:spring-projects-experimental/spring-ai-mcp.git + https://github.com/modelcontextprotocol/java-sdk + git://github.com/modelcontextprotocol/java-sdk.git + git@github.com/modelcontextprotocol/java-sdk.git - org.springframework.experimental + org.modelcontextprotocol.sdk mcp 0.7.0-SNAPSHOT - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-test 0.7.0-SNAPSHOT test diff --git a/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/springframework/ai/mcp/client/transport/WebFluxSseClientTransport.java b/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java similarity index 96% rename from mcp-transport/mcp-webflux-sse-transport/src/main/java/org/springframework/ai/mcp/client/transport/WebFluxSseClientTransport.java rename to mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java index a4605c6..78a4291 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/springframework/ai/mcp/client/transport/WebFluxSseClientTransport.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ai.mcp.client.transport; +package org.modelcontextprotocol.client.transport; import java.io.IOException; import java.util.function.BiConsumer; @@ -21,6 +21,11 @@ import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import org.modelcontextprotocol.spec.ClientMcpTransport; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.JSONRPCMessage; +import org.modelcontextprotocol.util.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.Disposable; @@ -32,11 +37,6 @@ import reactor.core.scheduler.Schedulers; import reactor.util.retry.Retry; import reactor.util.retry.Retry.RetrySignal; -import org.springframework.ai.mcp.spec.ClientMcpTransport; -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.JSONRPCMessage; -import org.springframework.ai.mcp.util.Assert; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.MediaType; import org.springframework.http.codec.ServerSentEvent; @@ -44,7 +44,7 @@ import org.springframework.web.reactive.function.client.WebClient; /** * Server-Sent Events (SSE) implementation of the - * {@link org.springframework.ai.mcp.spec.McpTransport} that follows the MCP HTTP with SSE + * {@link org.modelcontextprotocol.spec.McpTransport} that follows the MCP HTTP with SSE * transport specification. * *

diff --git a/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/springframework/ai/mcp/server/transport/WebFluxSseServerTransport.java b/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java similarity index 98% rename from mcp-transport/mcp-webflux-sse-transport/src/main/java/org/springframework/ai/mcp/server/transport/WebFluxSseServerTransport.java rename to mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java index 6126eba..8baf696 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/springframework/ai/mcp/server/transport/WebFluxSseServerTransport.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java @@ -1,4 +1,4 @@ -package org.springframework.ai.mcp.server.transport; +package org.modelcontextprotocol.server.transport; import java.io.IOException; import java.time.Duration; @@ -9,16 +9,16 @@ import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.ServerMcpTransport; +import org.modelcontextprotocol.util.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.publisher.Sinks; -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.ServerMcpTransport; -import org.springframework.ai.mcp.util.Assert; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.codec.ServerSentEvent; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/WebFluxSseIntegrationTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/WebFluxSseIntegrationTests.java similarity index 91% rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/WebFluxSseIntegrationTests.java rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/WebFluxSseIntegrationTests.java index ca968cf..9ac21b1 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/WebFluxSseIntegrationTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/WebFluxSseIntegrationTests.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ai.mcp; +package org.modelcontextprotocol; import java.time.Duration; import java.util.List; @@ -28,27 +28,27 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import org.modelcontextprotocol.client.McpClient; +import org.modelcontextprotocol.client.transport.HttpClientSseClientTransport; +import org.modelcontextprotocol.client.transport.WebFluxSseClientTransport; +import org.modelcontextprotocol.server.McpServer; +import org.modelcontextprotocol.server.McpServerFeatures; +import org.modelcontextprotocol.server.transport.WebFluxSseServerTransport; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.CallToolResult; +import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; +import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult; +import org.modelcontextprotocol.spec.McpSchema.InitializeResult; +import org.modelcontextprotocol.spec.McpSchema.Role; +import org.modelcontextprotocol.spec.McpSchema.Root; +import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities; +import org.modelcontextprotocol.spec.McpSchema.Tool; import reactor.netty.DisposableServer; import reactor.netty.http.server.HttpServer; import reactor.test.StepVerifier; -import org.springframework.ai.mcp.client.McpClient; -import org.springframework.ai.mcp.client.transport.HttpClientSseClientTransport; -import org.springframework.ai.mcp.client.transport.WebFluxSseClientTransport; -import org.springframework.ai.mcp.server.McpServer; -import org.springframework.ai.mcp.server.McpServerFeatures; -import org.springframework.ai.mcp.server.transport.WebFluxSseServerTransport; -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.CallToolResult; -import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.CreateMessageRequest; -import org.springframework.ai.mcp.spec.McpSchema.CreateMessageResult; -import org.springframework.ai.mcp.spec.McpSchema.InitializeResult; -import org.springframework.ai.mcp.spec.McpSchema.Role; -import org.springframework.ai.mcp.spec.McpSchema.Root; -import org.springframework.ai.mcp.spec.McpSchema.ServerCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.Tool; import org.springframework.http.server.reactive.HttpHandler; import org.springframework.http.server.reactive.ReactorHttpHandlerAdapter; import org.springframework.web.client.RestClient; @@ -373,7 +373,7 @@ public class WebFluxSseIntegrationTests { // perform a blocking call to a remote service String response = RestClient.create() .get() - .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); @@ -413,7 +413,7 @@ public class WebFluxSseIntegrationTests { // perform a blocking call to a remote service String response = RestClient.create() .get() - .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); @@ -430,7 +430,7 @@ public class WebFluxSseIntegrationTests { // perform a blocking call to a remote service String response = RestClient.create() .get() - .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/WebFluxSseMcpAsyncClientTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java similarity index 91% rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/WebFluxSseMcpAsyncClientTests.java rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java index 761dd6a..9f726c4 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/WebFluxSseMcpAsyncClientTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java @@ -14,14 +14,14 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client; +package org.modelcontextprotocol.client; import org.junit.jupiter.api.Timeout; +import org.modelcontextprotocol.client.transport.WebFluxSseClientTransport; +import org.modelcontextprotocol.spec.ClientMcpTransport; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; -import org.springframework.ai.mcp.client.transport.WebFluxSseClientTransport; -import org.springframework.ai.mcp.spec.ClientMcpTransport; import org.springframework.web.reactive.function.client.WebClient; /** diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/WebFluxSseMcpSyncClientTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java similarity index 91% rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/WebFluxSseMcpSyncClientTests.java rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java index 41153af..4371bff 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/WebFluxSseMcpSyncClientTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java @@ -14,14 +14,14 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client; +package org.modelcontextprotocol.client; import org.junit.jupiter.api.Timeout; +import org.modelcontextprotocol.client.transport.WebFluxSseClientTransport; +import org.modelcontextprotocol.spec.ClientMcpTransport; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; -import org.springframework.ai.mcp.client.transport.WebFluxSseClientTransport; -import org.springframework.ai.mcp.spec.ClientMcpTransport; import org.springframework.web.reactive.function.client.WebClient; /** diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/transport/WebFluxSseClientTransportTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java similarity index 98% rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/transport/WebFluxSseClientTransportTests.java rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java index a75f851..ec47529 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/transport/WebFluxSseClientTransportTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client.transport; +package org.modelcontextprotocol.client.transport; import java.time.Duration; import java.util.Map; @@ -26,6 +26,8 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.JSONRPCRequest; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; import reactor.core.publisher.Flux; @@ -33,8 +35,6 @@ import reactor.core.publisher.Mono; import reactor.core.publisher.Sinks; import reactor.test.StepVerifier; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.JSONRPCRequest; import org.springframework.http.codec.ServerSentEvent; import org.springframework.web.reactive.function.client.WebClient; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebFluxSseMcpAsyncServerTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java similarity index 91% rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebFluxSseMcpAsyncServerTests.java rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java index b90c9a5..b149fa0 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebFluxSseMcpAsyncServerTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java @@ -14,15 +14,15 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Timeout; +import org.modelcontextprotocol.server.transport.WebFluxSseServerTransport; +import org.modelcontextprotocol.spec.ServerMcpTransport; import reactor.netty.DisposableServer; import reactor.netty.http.server.HttpServer; -import org.springframework.ai.mcp.server.transport.WebFluxSseServerTransport; -import org.springframework.ai.mcp.spec.ServerMcpTransport; import org.springframework.http.server.reactive.HttpHandler; import org.springframework.http.server.reactive.ReactorHttpHandlerAdapter; import org.springframework.web.reactive.function.server.RouterFunctions; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebFluxSseMcpSyncServerTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java similarity index 91% rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebFluxSseMcpSyncServerTests.java rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java index 048d639..6d00edc 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebFluxSseMcpSyncServerTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java @@ -14,15 +14,15 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Timeout; +import org.modelcontextprotocol.server.transport.WebFluxSseServerTransport; +import org.modelcontextprotocol.spec.ServerMcpTransport; import reactor.netty.DisposableServer; import reactor.netty.http.server.HttpServer; -import org.springframework.ai.mcp.server.transport.WebFluxSseServerTransport; -import org.springframework.ai.mcp.spec.ServerMcpTransport; import org.springframework.http.server.reactive.HttpHandler; import org.springframework.http.server.reactive.ReactorHttpHandlerAdapter; import org.springframework.web.reactive.function.server.RouterFunctions; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/transport/BlockingInputStream.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java similarity index 97% rename from mcp/src/test/java/org/springframework/ai/mcp/server/transport/BlockingInputStream.java rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java index 96690db..b7de2b9 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/server/transport/BlockingInputStream.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ai.mcp.server.transport; +package org.modelcontextprotocol.server.transport; import java.io.IOException; import java.io.InputStream; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/transport/_SseServerTransportTests.java_ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/_SseServerTransportTests.java_ similarity index 100% rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/transport/_SseServerTransportTests.java_ rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/_SseServerTransportTests.java_ diff --git a/mcp-transport/mcp-webmvc-sse-transport/README.md b/mcp-transport/mcp-webmvc-sse-transport/README.md index 0b73e73..22ed7e4 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/README.md +++ b/mcp-transport/mcp-webmvc-sse-transport/README.md @@ -2,7 +2,7 @@ ```xml - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-webmvc-sse-transport ``` diff --git a/mcp-transport/mcp-webmvc-sse-transport/pom.xml b/mcp-transport/mcp-webmvc-sse-transport/pom.xml index 7957e60..7dcb169 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/pom.xml +++ b/mcp-transport/mcp-webmvc-sse-transport/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-parent 0.7.0-SNAPSHOT ../../pom.xml @@ -13,23 +13,23 @@ jar Spring Web MVC implementation of the Java MCP SSE transport - https://github.com/spring-projects-experimental/spring-ai-mcp + https://github.com/modelcontextprotocol/java-sdk - https://github.com/spring-projects-experimental/spring-ai-mcp - git://github.com/spring-projects-experimental/spring-ai-mcp.git - git@github.com:spring-projects-experimental/spring-ai-mcp.git + https://github.com/modelcontextprotocol/java-sdk + git://github.com/modelcontextprotocol/java-sdk.git + git@github.com/modelcontextprotocol/java-sdk.git - org.springframework.experimental + org.modelcontextprotocol.sdk mcp 0.7.0-SNAPSHOT - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-test 0.7.0-SNAPSHOT test diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/springframework/ai/mcp/server/transport/WebMvcSseServerTransport.java b/mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java similarity index 98% rename from mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/springframework/ai/mcp/server/transport/WebMvcSseServerTransport.java rename to mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java index cee0b48..cfbc467 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/springframework/ai/mcp/server/transport/WebMvcSseServerTransport.java +++ b/mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server.transport; +package org.modelcontextprotocol.server.transport; import java.io.IOException; import java.util.UUID; @@ -23,14 +23,14 @@ import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.ServerMcpTransport; +import org.modelcontextprotocol.util.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Mono; -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.ServerMcpTransport; -import org.springframework.ai.mcp.util.Assert; import org.springframework.http.HttpStatus; import org.springframework.web.servlet.function.RouterFunction; import org.springframework.web.servlet.function.RouterFunctions; @@ -271,6 +271,7 @@ public class WebMvcSseServerTransport implements ServerMcpTransport { // Convert the message to a Mono, apply the handler, and block for the // response + @SuppressWarnings("unused") McpSchema.JSONRPCMessage response = Mono.just(message).transform(connectHandler).block(); return ServerResponse.ok().build(); diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseAsyncServerTransportTests.java b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java similarity index 95% rename from mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseAsyncServerTransportTests.java rename to mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java index 374a5c5..aad11c5 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseAsyncServerTransportTests.java +++ b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java @@ -14,16 +14,16 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.startup.Tomcat; import org.junit.jupiter.api.Timeout; +import org.modelcontextprotocol.server.transport.WebMvcSseServerTransport; +import org.modelcontextprotocol.spec.ServerMcpTransport; -import org.springframework.ai.mcp.server.transport.WebMvcSseServerTransport; -import org.springframework.ai.mcp.spec.ServerMcpTransport; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseIntegrationTests.java b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseIntegrationTests.java similarity index 92% rename from mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseIntegrationTests.java rename to mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseIntegrationTests.java index 308be78..0c9f629 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseIntegrationTests.java +++ b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseIntegrationTests.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import java.time.Duration; import java.util.List; @@ -29,24 +29,22 @@ import org.apache.catalina.startup.Tomcat; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.modelcontextprotocol.client.McpClient; +import org.modelcontextprotocol.client.transport.HttpClientSseClientTransport; +import org.modelcontextprotocol.server.transport.WebMvcSseServerTransport; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.CallToolResult; +import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; +import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult; +import org.modelcontextprotocol.spec.McpSchema.InitializeResult; +import org.modelcontextprotocol.spec.McpSchema.Role; +import org.modelcontextprotocol.spec.McpSchema.Root; +import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities; +import org.modelcontextprotocol.spec.McpSchema.Tool; import reactor.test.StepVerifier; -import org.springframework.ai.mcp.client.McpClient; -import org.springframework.ai.mcp.client.transport.HttpClientSseClientTransport; -import org.springframework.ai.mcp.server.transport.WebMvcSseServerTransport; -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.CallToolResult; -import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.CreateMessageRequest; -import org.springframework.ai.mcp.spec.McpSchema.CreateMessageResult; -import org.springframework.ai.mcp.spec.McpSchema.InitializeResult; -import org.springframework.ai.mcp.spec.McpSchema.Role; -import org.springframework.ai.mcp.spec.McpSchema.Root; -import org.springframework.ai.mcp.spec.McpSchema.ServerCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.Tool; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestClient; @@ -62,8 +60,6 @@ import static org.awaitility.Awaitility.await; public class WebMvcSseIntegrationTests { - private static final Logger logger = LoggerFactory.getLogger(WebMvcSseIntegrationTests.class); - private static final int PORT = 8183; private static final String MESSAGE_ENDPOINT = "/mcp/message"; @@ -411,7 +407,7 @@ public class WebMvcSseIntegrationTests { // perform a blocking call to a remote service String response = RestClient.create() .get() - .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); @@ -448,7 +444,7 @@ public class WebMvcSseIntegrationTests { // perform a blocking call to a remote service String response = RestClient.create() .get() - .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); @@ -465,7 +461,7 @@ public class WebMvcSseIntegrationTests { // perform a blocking call to a remote service String response = RestClient.create() .get() - .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseSyncServerTransportTests.java b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java similarity index 95% rename from mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseSyncServerTransportTests.java rename to mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java index 2c44c57..545ec01 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseSyncServerTransportTests.java +++ b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java @@ -14,16 +14,16 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.startup.Tomcat; import org.junit.jupiter.api.Timeout; +import org.modelcontextprotocol.server.transport.WebMvcSseServerTransport; +import org.modelcontextprotocol.spec.ServerMcpTransport; -import org.springframework.ai.mcp.server.transport.WebMvcSseServerTransport; -import org.springframework.ai.mcp.spec.ServerMcpTransport; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/resources/logback.xml b/mcp-transport/mcp-webmvc-sse-transport/src/test/resources/logback.xml index 517af52..e300a15 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/src/test/resources/logback.xml +++ b/mcp-transport/mcp-webmvc-sse-transport/src/test/resources/logback.xml @@ -9,16 +9,16 @@ - + - + - + - + diff --git a/mcp/pom.xml b/mcp/pom.xml index 6a81ca3..d727c55 100644 --- a/mcp/pom.xml +++ b/mcp/pom.xml @@ -4,20 +4,20 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-parent 0.7.0-SNAPSHOT mcp jar Java MCP SDK - Java SDK implementation of the Model Context Protocol, enabling seamless integration with language models and AI tools - https://github.com/spring-projects-experimental/spring-ai-mcp + Java SDK implementation of the Model Context Protocol, enabling seamless integration with language models and AI tools + https://github.com/modelcontextprotocol/java-sdk - https://github.com/spring-projects-experimental/spring-ai-mcp - git://github.com/spring-projects-experimental/spring-ai-mcp.git - git@github.com:spring-projects-experimental/spring-ai-mcp.git + https://github.com/modelcontextprotocol/java-sdk + git://github.com/modelcontextprotocol/java-sdk.git + git@github.com/modelcontextprotocol/java-sdk.git diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java b/mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java similarity index 96% rename from mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java rename to mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java index 7f6ccc1..8ec3f9c 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ai.mcp.client; +package org.modelcontextprotocol.client; import java.time.Duration; import java.util.ArrayList; @@ -25,35 +25,34 @@ import java.util.function.Consumer; import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; +import org.modelcontextprotocol.spec.ClientMcpTransport; +import org.modelcontextprotocol.spec.DefaultMcpSession; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpTransport; +import org.modelcontextprotocol.spec.DefaultMcpSession.NotificationHandler; +import org.modelcontextprotocol.spec.DefaultMcpSession.RequestHandler; +import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; +import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult; +import org.modelcontextprotocol.spec.McpSchema.GetPromptRequest; +import org.modelcontextprotocol.spec.McpSchema.GetPromptResult; +import org.modelcontextprotocol.spec.McpSchema.Implementation; +import org.modelcontextprotocol.spec.McpSchema.ListPromptsResult; +import org.modelcontextprotocol.spec.McpSchema.LoggingLevel; +import org.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification; +import org.modelcontextprotocol.spec.McpSchema.PaginatedRequest; +import org.modelcontextprotocol.spec.McpSchema.Root; +import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities.RootCapabilities; +import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities.Sampling; +import org.modelcontextprotocol.util.Assert; +import org.modelcontextprotocol.util.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; -import org.springframework.ai.mcp.spec.ClientMcpTransport; -import org.springframework.ai.mcp.spec.DefaultMcpSession; -import org.springframework.ai.mcp.spec.DefaultMcpSession.NotificationHandler; -import org.springframework.ai.mcp.spec.DefaultMcpSession.RequestHandler; -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities.RootCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities.Sampling; -import org.springframework.ai.mcp.spec.McpSchema.CreateMessageRequest; -import org.springframework.ai.mcp.spec.McpSchema.CreateMessageResult; -import org.springframework.ai.mcp.spec.McpSchema.GetPromptRequest; -import org.springframework.ai.mcp.spec.McpSchema.GetPromptResult; -import org.springframework.ai.mcp.spec.McpSchema.Implementation; -import org.springframework.ai.mcp.spec.McpSchema.ListPromptsResult; -import org.springframework.ai.mcp.spec.McpSchema.LoggingLevel; -import org.springframework.ai.mcp.spec.McpSchema.LoggingMessageNotification; -import org.springframework.ai.mcp.spec.McpSchema.PaginatedRequest; -import org.springframework.ai.mcp.spec.McpSchema.Root; -import org.springframework.ai.mcp.spec.McpTransport; -import org.springframework.ai.mcp.util.Assert; -import org.springframework.ai.mcp.util.Utils; - /** * The Model Context Protocol (MCP) client implementation that provides asynchronous * communication with MCP servers using Project Reactor's Mono and Flux types. @@ -529,6 +528,7 @@ public class McpAsyncClient { private RequestHandler rootsListRequestHandler() { return params -> { + @SuppressWarnings("unused") McpSchema.PaginatedRequest request = transport.unmarshalFrom(params, new TypeReference() { }); diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClient.java b/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java similarity index 98% rename from mcp/src/main/java/org/springframework/ai/mcp/client/McpClient.java rename to mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java index e11a9a7..83801c9 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClient.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client; +package org.modelcontextprotocol.client; import java.time.Duration; import java.util.ArrayList; @@ -24,18 +24,17 @@ import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; +import org.modelcontextprotocol.spec.ClientMcpTransport; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpTransport; +import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; +import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult; +import org.modelcontextprotocol.spec.McpSchema.Implementation; +import org.modelcontextprotocol.spec.McpSchema.Root; +import org.modelcontextprotocol.util.Assert; import reactor.core.publisher.Mono; -import org.springframework.ai.mcp.spec.ClientMcpTransport; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.CreateMessageRequest; -import org.springframework.ai.mcp.spec.McpSchema.CreateMessageResult; -import org.springframework.ai.mcp.spec.McpSchema.Implementation; -import org.springframework.ai.mcp.spec.McpSchema.Root; -import org.springframework.ai.mcp.spec.McpTransport; -import org.springframework.ai.mcp.util.Assert; - /** * Factory class for creating Model Context Protocol (MCP) clients. MCP is a protocol that * enables AI models to interact with external tools and resources through a standardized diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java b/mcp/src/main/java/org/modelcontextprotocol/client/McpClientFeatures.java similarity index 98% rename from mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java rename to mcp/src/main/java/org/modelcontextprotocol/client/McpClientFeatures.java index 05be98d..9733b86 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/McpClientFeatures.java @@ -1,4 +1,4 @@ -package org.springframework.ai.mcp.client; +package org.modelcontextprotocol.client; import java.util.ArrayList; import java.util.HashMap; @@ -8,13 +8,12 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; import java.util.function.Function; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.util.Assert; +import org.modelcontextprotocol.util.Utils; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.util.Assert; -import org.springframework.ai.mcp.util.Utils; - /** * Representation of features and capabilities for Model Context Protocol (MCP) clients. * This class provides two record types for managing client features: diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpSyncClient.java b/mcp/src/main/java/org/modelcontextprotocol/client/McpSyncClient.java similarity index 96% rename from mcp/src/main/java/org/springframework/ai/mcp/client/McpSyncClient.java rename to mcp/src/main/java/org/modelcontextprotocol/client/McpSyncClient.java index 1d008ab..fa464a7 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpSyncClient.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/McpSyncClient.java @@ -14,21 +14,20 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client; +package org.modelcontextprotocol.client; import java.time.Duration; +import org.modelcontextprotocol.spec.ClientMcpTransport; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import org.modelcontextprotocol.spec.McpSchema.GetPromptRequest; +import org.modelcontextprotocol.spec.McpSchema.GetPromptResult; +import org.modelcontextprotocol.spec.McpSchema.ListPromptsResult; +import org.modelcontextprotocol.util.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.ai.mcp.spec.ClientMcpTransport; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.GetPromptRequest; -import org.springframework.ai.mcp.spec.McpSchema.GetPromptResult; -import org.springframework.ai.mcp.spec.McpSchema.ListPromptsResult; -import org.springframework.ai.mcp.util.Assert; - /** * A synchronous client implementation for the Model Context Protocol (MCP) that wraps an * {@link McpAsyncClient} to provide blocking operations. diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/FlowSseClient.java b/mcp/src/main/java/org/modelcontextprotocol/client/transport/FlowSseClient.java similarity index 99% rename from mcp/src/main/java/org/springframework/ai/mcp/client/transport/FlowSseClient.java rename to mcp/src/main/java/org/modelcontextprotocol/client/transport/FlowSseClient.java index 4b6191d..2f6d798 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/FlowSseClient.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/transport/FlowSseClient.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ai.mcp.client.transport; +package org.modelcontextprotocol.client.transport; import java.net.URI; import java.net.http.HttpClient; diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/HttpClientSseClientTransport.java b/mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java similarity index 93% rename from mcp/src/main/java/org/springframework/ai/mcp/client/transport/HttpClientSseClientTransport.java rename to mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java index 68f1032..4a48d7c 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/HttpClientSseClientTransport.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java @@ -13,20 +13,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ai.mcp.client.transport; +package org.modelcontextprotocol.client.transport; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import org.modelcontextprotocol.client.transport.FlowSseClient.SseEvent; +import org.modelcontextprotocol.spec.ClientMcpTransport; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.JSONRPCMessage; +import org.modelcontextprotocol.util.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - -import org.springframework.ai.mcp.client.transport.FlowSseClient.SseEvent; -import org.springframework.ai.mcp.spec.ClientMcpTransport; -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.JSONRPCMessage; -import org.springframework.ai.mcp.util.Assert; - import reactor.core.publisher.Mono; import java.io.IOException; @@ -43,7 +41,7 @@ import java.util.function.Function; /** * Server-Sent Events (SSE) implementation of the - * {@link org.springframework.ai.mcp.spec.McpTransport} that follows the MCP HTTP with SSE + * {@link org.modelcontextprotocol.spec.McpTransport} that follows the MCP HTTP with SSE * transport specification, using Java's HttpClient. * *

@@ -65,8 +63,8 @@ import java.util.function.Function; * * * @author Christian Tzolov - * @see org.springframework.ai.mcp.spec.McpTransport - * @see org.springframework.ai.mcp.spec.ClientMcpTransport + * @see org.modelcontextprotocol.spec.McpTransport + * @see org.modelcontextprotocol.spec.ClientMcpTransport */ public class HttpClientSseClientTransport implements ClientMcpTransport { diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/ServerParameters.java b/mcp/src/main/java/org/modelcontextprotocol/client/transport/ServerParameters.java similarity index 97% rename from mcp/src/main/java/org/springframework/ai/mcp/client/transport/ServerParameters.java rename to mcp/src/main/java/org/modelcontextprotocol/client/transport/ServerParameters.java index a5c6858..9a0e574 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/ServerParameters.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/transport/ServerParameters.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client.transport; +package org.modelcontextprotocol.client.transport; import java.util.ArrayList; import java.util.Arrays; @@ -25,8 +25,7 @@ import java.util.stream.Collectors; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; - -import org.springframework.ai.mcp.util.Assert; +import org.modelcontextprotocol.util.Assert; /** * Server parameters for stdio client. diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/StdioClientTransport.java b/mcp/src/main/java/org/modelcontextprotocol/client/transport/StdioClientTransport.java similarity index 97% rename from mcp/src/main/java/org/springframework/ai/mcp/client/transport/StdioClientTransport.java rename to mcp/src/main/java/org/modelcontextprotocol/client/transport/StdioClientTransport.java index 74d001a..b30eb59 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/StdioClientTransport.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/transport/StdioClientTransport.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client.transport; +package org.modelcontextprotocol.client.transport; import java.io.BufferedReader; import java.io.IOException; @@ -30,6 +30,10 @@ import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import org.modelcontextprotocol.spec.ClientMcpTransport; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.JSONRPCMessage; +import org.modelcontextprotocol.util.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Flux; @@ -38,11 +42,6 @@ import reactor.core.publisher.Sinks; import reactor.core.scheduler.Scheduler; import reactor.core.scheduler.Schedulers; -import org.springframework.ai.mcp.spec.ClientMcpTransport; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.JSONRPCMessage; -import org.springframework.ai.mcp.util.Assert; - /** * Implementation of the MCP Stdio transport that communicates with a server process using * standard input/output streams. Messages are exchanged as newline-delimited JSON-RPC diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java b/mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java similarity index 97% rename from mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java rename to mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java index 00971b7..131d42a 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java +++ b/mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import java.time.Duration; import java.util.HashMap; @@ -27,27 +27,26 @@ import java.util.function.Consumer; import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; +import org.modelcontextprotocol.server.McpServer.PromptRegistration; +import org.modelcontextprotocol.server.McpServer.ResourceRegistration; +import org.modelcontextprotocol.server.McpServer.ToolRegistration; +import org.modelcontextprotocol.spec.DefaultMcpSession; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.ServerMcpTransport; +import org.modelcontextprotocol.spec.DefaultMcpSession.NotificationHandler; +import org.modelcontextprotocol.spec.McpSchema.CallToolResult; +import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import org.modelcontextprotocol.spec.McpSchema.LoggingLevel; +import org.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification; +import org.modelcontextprotocol.spec.McpSchema.Tool; +import org.modelcontextprotocol.util.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; -import org.springframework.ai.mcp.server.McpServer.PromptRegistration; -import org.springframework.ai.mcp.server.McpServer.ResourceRegistration; -import org.springframework.ai.mcp.server.McpServer.ToolRegistration; -import org.springframework.ai.mcp.spec.DefaultMcpSession; -import org.springframework.ai.mcp.spec.DefaultMcpSession.NotificationHandler; -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.CallToolResult; -import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.LoggingLevel; -import org.springframework.ai.mcp.spec.McpSchema.LoggingMessageNotification; -import org.springframework.ai.mcp.spec.McpSchema.Tool; -import org.springframework.ai.mcp.spec.ServerMcpTransport; -import org.springframework.ai.mcp.util.Utils; - /** * The Model Context Protocol (MCP) server implementation that provides asynchronous * communication using Project Reactor's Mono and Flux types. diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java b/mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java similarity index 99% rename from mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java rename to mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java index 615fd51..3e28c3c 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java +++ b/mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import java.util.ArrayList; import java.util.HashMap; @@ -24,16 +24,15 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpTransport; +import org.modelcontextprotocol.spec.ServerMcpTransport; +import org.modelcontextprotocol.spec.McpSchema.CallToolResult; +import org.modelcontextprotocol.spec.McpSchema.ResourceTemplate; +import org.modelcontextprotocol.util.Assert; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.CallToolResult; -import org.springframework.ai.mcp.spec.McpSchema.ResourceTemplate; -import org.springframework.ai.mcp.spec.McpTransport; -import org.springframework.ai.mcp.spec.ServerMcpTransport; -import org.springframework.ai.mcp.util.Assert; - /** * Factory class for creating Model Context Protocol (MCP) servers. MCP servers expose * tools, resources, and prompts to AI models through a standardized interface. @@ -520,7 +519,8 @@ public interface McpServer { * @return This builder instance for method chaining * @throws IllegalArgumentException if consumers is null */ - public AsyncSpec rootsChangeConsumers(Function, Mono>... consumers) { + public AsyncSpec rootsChangeConsumers( + @SuppressWarnings("unchecked") Function, Mono>... consumers) { for (Function, Mono> consumer : consumers) { this.rootsChangeConsumers.add(consumer); } diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpServerFeatures.java b/mcp/src/main/java/org/modelcontextprotocol/server/McpServerFeatures.java similarity index 98% rename from mcp/src/main/java/org/springframework/ai/mcp/server/McpServerFeatures.java rename to mcp/src/main/java/org/modelcontextprotocol/server/McpServerFeatures.java index 2dd4e66..b97794d 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpServerFeatures.java +++ b/mcp/src/main/java/org/modelcontextprotocol/server/McpServerFeatures.java @@ -1,4 +1,4 @@ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import java.util.ArrayList; import java.util.HashMap; @@ -7,13 +7,12 @@ import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.util.Assert; +import org.modelcontextprotocol.util.Utils; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.util.Assert; -import org.springframework.ai.mcp.util.Utils; - /** * MCP server features specification that a particular server can choose to support. * diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpSyncServer.java b/mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java similarity index 94% rename from mcp/src/main/java/org/springframework/ai/mcp/server/McpSyncServer.java rename to mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java index 004f7a3..1233f3a 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpSyncServer.java +++ b/mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java @@ -14,16 +14,16 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; -import org.springframework.ai.mcp.server.McpServer.PromptRegistration; -import org.springframework.ai.mcp.server.McpServer.ResourceRegistration; -import org.springframework.ai.mcp.server.McpServer.ToolRegistration; -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.LoggingMessageNotification; -import org.springframework.ai.mcp.util.Assert; +import org.modelcontextprotocol.server.McpServer.PromptRegistration; +import org.modelcontextprotocol.server.McpServer.ResourceRegistration; +import org.modelcontextprotocol.server.McpServer.ToolRegistration; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import org.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification; +import org.modelcontextprotocol.util.Assert; /** * A synchronous implementation of the Model Context Protocol (MCP) server that wraps diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransport.java b/mcp/src/main/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java similarity index 98% rename from mcp/src/main/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransport.java rename to mcp/src/main/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java index d5ae27b..37529d8 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransport.java +++ b/mcp/src/main/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ai.mcp.server.transport; +package org.modelcontextprotocol.server.transport; import java.io.BufferedReader; import java.io.IOException; @@ -32,14 +32,13 @@ import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.ServerMcpTransport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Mono; -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.ServerMcpTransport; - /** * A Servlet-based implementation of the MCP HTTP with Server-Sent Events (SSE) transport * specification. This implementation provides similar functionality to diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/transport/StdioServerTransport.java b/mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java similarity index 96% rename from mcp/src/main/java/org/springframework/ai/mcp/server/transport/StdioServerTransport.java rename to mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java index e9b88d2..cf54cb0 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/transport/StdioServerTransport.java +++ b/mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server.transport; +package org.modelcontextprotocol.server.transport; import java.io.BufferedReader; import java.io.IOException; @@ -28,6 +28,10 @@ import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.ServerMcpTransport; +import org.modelcontextprotocol.spec.McpSchema.JSONRPCMessage; +import org.modelcontextprotocol.util.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Flux; @@ -36,11 +40,6 @@ import reactor.core.publisher.Sinks; import reactor.core.scheduler.Scheduler; import reactor.core.scheduler.Schedulers; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.JSONRPCMessage; -import org.springframework.ai.mcp.spec.ServerMcpTransport; -import org.springframework.ai.mcp.util.Assert; - /** * Implementation of the MCP Stdio transport for servers that communicates using standard * input/output streams. Messages are exchanged as newline-delimited JSON-RPC messages diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/ClientMcpTransport.java b/mcp/src/main/java/org/modelcontextprotocol/spec/ClientMcpTransport.java similarity index 94% rename from mcp/src/main/java/org/springframework/ai/mcp/spec/ClientMcpTransport.java rename to mcp/src/main/java/org/modelcontextprotocol/spec/ClientMcpTransport.java index 4b5af3b..92c0973 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/spec/ClientMcpTransport.java +++ b/mcp/src/main/java/org/modelcontextprotocol/spec/ClientMcpTransport.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ai.mcp.spec; +package org.modelcontextprotocol.spec; /** * Marker interface for the client-side MCP transport. diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/DefaultMcpSession.java b/mcp/src/main/java/org/modelcontextprotocol/spec/DefaultMcpSession.java similarity index 99% rename from mcp/src/main/java/org/springframework/ai/mcp/spec/DefaultMcpSession.java rename to mcp/src/main/java/org/modelcontextprotocol/spec/DefaultMcpSession.java index fffd710..efddf80 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/spec/DefaultMcpSession.java +++ b/mcp/src/main/java/org/modelcontextprotocol/spec/DefaultMcpSession.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.spec; +package org.modelcontextprotocol.spec; import java.time.Duration; import java.util.Map; @@ -23,14 +23,13 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; import com.fasterxml.jackson.core.type.TypeReference; +import org.modelcontextprotocol.util.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.Disposable; import reactor.core.publisher.Mono; import reactor.core.publisher.MonoSink; -import org.springframework.ai.mcp.util.Assert; - /** * Default implementation of the MCP (Model Context Protocol) session that manages * bidirectional JSON-RPC communication between clients and servers. This implementation diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpError.java b/mcp/src/main/java/org/modelcontextprotocol/spec/McpError.java similarity index 88% rename from mcp/src/main/java/org/springframework/ai/mcp/spec/McpError.java rename to mcp/src/main/java/org/modelcontextprotocol/spec/McpError.java index 94170ff..d12c87e 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpError.java +++ b/mcp/src/main/java/org/modelcontextprotocol/spec/McpError.java @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ai.mcp.spec; +package org.modelcontextprotocol.spec; -import org.springframework.ai.mcp.spec.McpSchema.JSONRPCResponse.JSONRPCError; +import org.modelcontextprotocol.spec.McpSchema.JSONRPCResponse.JSONRPCError; public class McpError extends RuntimeException { diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java b/mcp/src/main/java/org/modelcontextprotocol/spec/McpSchema.java similarity index 99% rename from mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java rename to mcp/src/main/java/org/modelcontextprotocol/spec/McpSchema.java index e107fb6..e2d49c3 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java +++ b/mcp/src/main/java/org/modelcontextprotocol/spec/McpSchema.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.spec; +package org.modelcontextprotocol.spec; import java.io.IOException; import java.util.HashMap; diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSession.java b/mcp/src/main/java/org/modelcontextprotocol/spec/McpSession.java similarity index 98% rename from mcp/src/main/java/org/springframework/ai/mcp/spec/McpSession.java rename to mcp/src/main/java/org/modelcontextprotocol/spec/McpSession.java index 533baa8..e53f7c8 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSession.java +++ b/mcp/src/main/java/org/modelcontextprotocol/spec/McpSession.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.spec; +package org.modelcontextprotocol.spec; import java.util.Map; diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpTransport.java b/mcp/src/main/java/org/modelcontextprotocol/spec/McpTransport.java similarity index 96% rename from mcp/src/main/java/org/springframework/ai/mcp/spec/McpTransport.java rename to mcp/src/main/java/org/modelcontextprotocol/spec/McpTransport.java index 48c6965..7d9e30c 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpTransport.java +++ b/mcp/src/main/java/org/modelcontextprotocol/spec/McpTransport.java @@ -14,15 +14,14 @@ * limitations under the License. */ -package org.springframework.ai.mcp.spec; +package org.modelcontextprotocol.spec; import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; +import org.modelcontextprotocol.spec.McpSchema.JSONRPCMessage; import reactor.core.publisher.Mono; -import org.springframework.ai.mcp.spec.McpSchema.JSONRPCMessage; - /** * Defines the asynchronous transport layer for the Model Context Protocol (MCP). * diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/ServerMcpTransport.java b/mcp/src/main/java/org/modelcontextprotocol/spec/ServerMcpTransport.java similarity index 94% rename from mcp/src/main/java/org/springframework/ai/mcp/spec/ServerMcpTransport.java rename to mcp/src/main/java/org/modelcontextprotocol/spec/ServerMcpTransport.java index bb3d829..2b7f584 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/spec/ServerMcpTransport.java +++ b/mcp/src/main/java/org/modelcontextprotocol/spec/ServerMcpTransport.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ai.mcp.spec; +package org.modelcontextprotocol.spec; /** * Marker interface for the server-side MCP transport. diff --git a/mcp/src/main/java/org/springframework/ai/mcp/util/Assert.java b/mcp/src/main/java/org/modelcontextprotocol/util/Assert.java similarity index 98% rename from mcp/src/main/java/org/springframework/ai/mcp/util/Assert.java rename to mcp/src/main/java/org/modelcontextprotocol/util/Assert.java index 0dc1fc1..90e6b61 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/util/Assert.java +++ b/mcp/src/main/java/org/modelcontextprotocol/util/Assert.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.util; +package org.modelcontextprotocol.util; import java.util.Collection; diff --git a/mcp/src/main/java/org/springframework/ai/mcp/util/Utils.java b/mcp/src/main/java/org/modelcontextprotocol/util/Utils.java similarity index 98% rename from mcp/src/main/java/org/springframework/ai/mcp/util/Utils.java rename to mcp/src/main/java/org/modelcontextprotocol/util/Utils.java index 622ad26..9ba3ac1 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/util/Utils.java +++ b/mcp/src/main/java/org/modelcontextprotocol/util/Utils.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.util; +package org.modelcontextprotocol.util; import java.util.Collection; import java.util.Map; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/MockMcpTransport.java b/mcp/src/test/java/org/modelcontextprotocol/MockMcpTransport.java similarity index 90% rename from mcp/src/test/java/org/springframework/ai/mcp/MockMcpTransport.java rename to mcp/src/test/java/org/modelcontextprotocol/MockMcpTransport.java index 1622418..ccbc228 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/MockMcpTransport.java +++ b/mcp/src/test/java/org/modelcontextprotocol/MockMcpTransport.java @@ -14,24 +14,23 @@ * limitations under the License. */ -package org.springframework.ai.mcp; +package org.modelcontextprotocol; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import org.modelcontextprotocol.spec.ClientMcpTransport; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.ServerMcpTransport; +import org.modelcontextprotocol.spec.McpSchema.JSONRPCNotification; +import org.modelcontextprotocol.spec.McpSchema.JSONRPCRequest; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.publisher.Sinks; import reactor.core.scheduler.Schedulers; -import org.springframework.ai.mcp.spec.ClientMcpTransport; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.JSONRPCNotification; -import org.springframework.ai.mcp.spec.McpSchema.JSONRPCRequest; -import org.springframework.ai.mcp.spec.ServerMcpTransport; - /** * A mock implementation of the {@link ClientMcpTransport} and {@link ServerMcpTransport} * interfaces. diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java similarity index 92% rename from mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java rename to mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java index 0d7fd0b..8deb544 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client; +package org.modelcontextprotocol.client; import java.time.Duration; import java.util.Map; @@ -25,24 +25,23 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.modelcontextprotocol.spec.ClientMcpTransport; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.CallToolRequest; +import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; +import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult; +import org.modelcontextprotocol.spec.McpSchema.GetPromptRequest; +import org.modelcontextprotocol.spec.McpSchema.Prompt; +import org.modelcontextprotocol.spec.McpSchema.Resource; +import org.modelcontextprotocol.spec.McpSchema.Root; +import org.modelcontextprotocol.spec.McpSchema.SubscribeRequest; +import org.modelcontextprotocol.spec.McpSchema.Tool; +import org.modelcontextprotocol.spec.McpSchema.UnsubscribeRequest; +import org.modelcontextprotocol.spec.McpTransport; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; -import org.springframework.ai.mcp.spec.ClientMcpTransport; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.CallToolRequest; -import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.CreateMessageRequest; -import org.springframework.ai.mcp.spec.McpSchema.CreateMessageResult; -import org.springframework.ai.mcp.spec.McpSchema.GetPromptRequest; -import org.springframework.ai.mcp.spec.McpSchema.Prompt; -import org.springframework.ai.mcp.spec.McpSchema.Resource; -import org.springframework.ai.mcp.spec.McpSchema.Root; -import org.springframework.ai.mcp.spec.McpSchema.SubscribeRequest; -import org.springframework.ai.mcp.spec.McpSchema.Tool; -import org.springframework.ai.mcp.spec.McpSchema.UnsubscribeRequest; -import org.springframework.ai.mcp.spec.McpTransport; - import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java similarity index 89% rename from mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java rename to mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java index c046b9e..6dd181c 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client; +package org.modelcontextprotocol.client; import java.time.Duration; import java.util.Map; @@ -23,22 +23,21 @@ import java.util.concurrent.atomic.AtomicBoolean; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; - -import org.springframework.ai.mcp.spec.ClientMcpTransport; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.CallToolRequest; -import org.springframework.ai.mcp.spec.McpSchema.CallToolResult; -import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.ListResourceTemplatesResult; -import org.springframework.ai.mcp.spec.McpSchema.ListResourcesResult; -import org.springframework.ai.mcp.spec.McpSchema.ListToolsResult; -import org.springframework.ai.mcp.spec.McpSchema.ReadResourceResult; -import org.springframework.ai.mcp.spec.McpSchema.Resource; -import org.springframework.ai.mcp.spec.McpSchema.Root; -import org.springframework.ai.mcp.spec.McpSchema.SubscribeRequest; -import org.springframework.ai.mcp.spec.McpSchema.TextContent; -import org.springframework.ai.mcp.spec.McpSchema.Tool; -import org.springframework.ai.mcp.spec.McpSchema.UnsubscribeRequest; +import org.modelcontextprotocol.spec.ClientMcpTransport; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.CallToolRequest; +import org.modelcontextprotocol.spec.McpSchema.CallToolResult; +import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import org.modelcontextprotocol.spec.McpSchema.ListResourceTemplatesResult; +import org.modelcontextprotocol.spec.McpSchema.ListResourcesResult; +import org.modelcontextprotocol.spec.McpSchema.ListToolsResult; +import org.modelcontextprotocol.spec.McpSchema.ReadResourceResult; +import org.modelcontextprotocol.spec.McpSchema.Resource; +import org.modelcontextprotocol.spec.McpSchema.Root; +import org.modelcontextprotocol.spec.McpSchema.SubscribeRequest; +import org.modelcontextprotocol.spec.McpSchema.TextContent; +import org.modelcontextprotocol.spec.McpSchema.Tool; +import org.modelcontextprotocol.spec.McpSchema.UnsubscribeRequest; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/McpAsyncClientResponseHandlerTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java similarity index 97% rename from mcp/src/test/java/org/springframework/ai/mcp/client/McpAsyncClientResponseHandlerTests.java rename to mcp/src/test/java/org/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java index c5b0ec8..59eb632 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/client/McpAsyncClientResponseHandlerTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client; +package org.modelcontextprotocol.client; import java.time.Duration; import java.util.ArrayList; @@ -26,14 +26,13 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; +import org.modelcontextprotocol.MockMcpTransport; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import org.modelcontextprotocol.spec.McpSchema.Root; import reactor.core.publisher.Mono; -import org.springframework.ai.mcp.MockMcpTransport; -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.Root; - import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.awaitility.Awaitility.await; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/McpClientProtocolVersionTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/McpClientProtocolVersionTests.java similarity index 95% rename from mcp/src/test/java/org/springframework/ai/mcp/client/McpClientProtocolVersionTests.java rename to mcp/src/test/java/org/modelcontextprotocol/client/McpClientProtocolVersionTests.java index 7a0be90..f67a375 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/client/McpClientProtocolVersionTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/McpClientProtocolVersionTests.java @@ -14,20 +14,19 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client; +package org.modelcontextprotocol.client; import java.time.Duration; import java.util.List; import org.junit.jupiter.api.Test; +import org.modelcontextprotocol.MockMcpTransport; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.InitializeResult; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; -import org.springframework.ai.mcp.MockMcpTransport; -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.InitializeResult; - import static org.assertj.core.api.Assertions.assertThat; /** diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/ServletSseMcpAsyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java similarity index 90% rename from mcp/src/test/java/org/springframework/ai/mcp/client/ServletSseMcpAsyncClientTests.java rename to mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java index 86e6976..1e9000e 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/client/ServletSseMcpAsyncClientTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java @@ -14,15 +14,14 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client; +package org.modelcontextprotocol.client; import org.junit.jupiter.api.Timeout; +import org.modelcontextprotocol.client.transport.HttpClientSseClientTransport; +import org.modelcontextprotocol.spec.ClientMcpTransport; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; -import org.springframework.ai.mcp.client.transport.HttpClientSseClientTransport; -import org.springframework.ai.mcp.spec.ClientMcpTransport; - /** * Tests for the {@link McpSyncClient} with {@link HttpClientSseClientTransport}. * diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/ServletSseMcpSyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java similarity index 90% rename from mcp/src/test/java/org/springframework/ai/mcp/client/ServletSseMcpSyncClientTests.java rename to mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java index f33bc97..428df4b 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/client/ServletSseMcpSyncClientTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java @@ -14,15 +14,14 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client; +package org.modelcontextprotocol.client; import org.junit.jupiter.api.Timeout; +import org.modelcontextprotocol.client.transport.HttpClientSseClientTransport; +import org.modelcontextprotocol.spec.ClientMcpTransport; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; -import org.springframework.ai.mcp.client.transport.HttpClientSseClientTransport; -import org.springframework.ai.mcp.spec.ClientMcpTransport; - /** * Tests for the {@link McpSyncClient} with {@link HttpClientSseClientTransport}. * diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/StdioMcpAsyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpAsyncClientTests.java similarity index 83% rename from mcp/src/test/java/org/springframework/ai/mcp/client/StdioMcpAsyncClientTests.java rename to mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpAsyncClientTests.java index 94c9b41..0ff41ed 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/client/StdioMcpAsyncClientTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpAsyncClientTests.java @@ -14,13 +14,12 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client; +package org.modelcontextprotocol.client; import org.junit.jupiter.api.Timeout; - -import org.springframework.ai.mcp.client.transport.ServerParameters; -import org.springframework.ai.mcp.client.transport.StdioClientTransport; -import org.springframework.ai.mcp.spec.ClientMcpTransport; +import org.modelcontextprotocol.client.transport.ServerParameters; +import org.modelcontextprotocol.client.transport.StdioClientTransport; +import org.modelcontextprotocol.spec.ClientMcpTransport; /** * Tests for the {@link McpAsyncClient} with {@link StdioClientTransport}. diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/StdioMcpSyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpSyncClientTests.java similarity index 88% rename from mcp/src/test/java/org/springframework/ai/mcp/client/StdioMcpSyncClientTests.java rename to mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpSyncClientTests.java index 962bc2a..9b80223 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/client/StdioMcpSyncClientTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpSyncClientTests.java @@ -14,16 +14,15 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client; +package org.modelcontextprotocol.client; import java.util.concurrent.atomic.AtomicReference; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; - -import org.springframework.ai.mcp.client.transport.ServerParameters; -import org.springframework.ai.mcp.client.transport.StdioClientTransport; -import org.springframework.ai.mcp.spec.ClientMcpTransport; +import org.modelcontextprotocol.client.transport.ServerParameters; +import org.modelcontextprotocol.client.transport.StdioClientTransport; +import org.modelcontextprotocol.spec.ClientMcpTransport; import static org.assertj.core.api.Assertions.assertThat; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/transport/HttpClientSseClientTransportTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java similarity index 97% rename from mcp/src/test/java/org/springframework/ai/mcp/client/transport/HttpClientSseClientTransportTests.java rename to mcp/src/test/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java index f50aeb3..fa99b4a 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/client/transport/HttpClientSseClientTransportTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.client.transport; +package org.modelcontextprotocol.client.transport; import java.time.Duration; import java.util.Map; @@ -25,14 +25,14 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.JSONRPCRequest; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; import reactor.core.publisher.Mono; import reactor.core.publisher.Sinks; import reactor.test.StepVerifier; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.JSONRPCRequest; import org.springframework.http.codec.ServerSentEvent; import static org.assertj.core.api.Assertions.assertThat; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java similarity index 95% rename from mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java rename to mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java index 869d34a..7c26278 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import java.time.Duration; import java.util.List; @@ -22,22 +22,21 @@ import java.util.List; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.CallToolResult; +import org.modelcontextprotocol.spec.McpSchema.GetPromptResult; +import org.modelcontextprotocol.spec.McpSchema.Prompt; +import org.modelcontextprotocol.spec.McpSchema.PromptMessage; +import org.modelcontextprotocol.spec.McpSchema.ReadResourceResult; +import org.modelcontextprotocol.spec.McpSchema.Resource; +import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities; +import org.modelcontextprotocol.spec.McpSchema.Tool; +import org.modelcontextprotocol.spec.McpTransport; +import org.modelcontextprotocol.spec.ServerMcpTransport; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.CallToolResult; -import org.springframework.ai.mcp.spec.McpSchema.GetPromptResult; -import org.springframework.ai.mcp.spec.McpSchema.Prompt; -import org.springframework.ai.mcp.spec.McpSchema.PromptMessage; -import org.springframework.ai.mcp.spec.McpSchema.ReadResourceResult; -import org.springframework.ai.mcp.spec.McpSchema.Resource; -import org.springframework.ai.mcp.spec.McpSchema.ServerCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.Tool; -import org.springframework.ai.mcp.spec.McpTransport; -import org.springframework.ai.mcp.spec.ServerMcpTransport; - import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java similarity index 95% rename from mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java rename to mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java index f627bdc..2d3b163 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java @@ -14,26 +14,25 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import java.util.List; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; - -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.CallToolResult; -import org.springframework.ai.mcp.spec.McpSchema.GetPromptResult; -import org.springframework.ai.mcp.spec.McpSchema.Prompt; -import org.springframework.ai.mcp.spec.McpSchema.PromptMessage; -import org.springframework.ai.mcp.spec.McpSchema.ReadResourceResult; -import org.springframework.ai.mcp.spec.McpSchema.Resource; -import org.springframework.ai.mcp.spec.McpSchema.ServerCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.Tool; -import org.springframework.ai.mcp.spec.McpTransport; -import org.springframework.ai.mcp.spec.ServerMcpTransport; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.CallToolResult; +import org.modelcontextprotocol.spec.McpSchema.GetPromptResult; +import org.modelcontextprotocol.spec.McpSchema.Prompt; +import org.modelcontextprotocol.spec.McpSchema.PromptMessage; +import org.modelcontextprotocol.spec.McpSchema.ReadResourceResult; +import org.modelcontextprotocol.spec.McpSchema.Resource; +import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities; +import org.modelcontextprotocol.spec.McpSchema.Tool; +import org.modelcontextprotocol.spec.McpTransport; +import org.modelcontextprotocol.spec.ServerMcpTransport; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/McpServerProtocolVersionTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/McpServerProtocolVersionTests.java similarity index 97% rename from mcp/src/test/java/org/springframework/ai/mcp/server/McpServerProtocolVersionTests.java rename to mcp/src/test/java/org/modelcontextprotocol/server/McpServerProtocolVersionTests.java index f557921..7e0f63d 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/server/McpServerProtocolVersionTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/McpServerProtocolVersionTests.java @@ -14,15 +14,14 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import java.util.List; import java.util.UUID; import org.junit.jupiter.api.Test; - -import org.springframework.ai.mcp.MockMcpTransport; -import org.springframework.ai.mcp.spec.McpSchema; +import org.modelcontextprotocol.MockMcpTransport; +import org.modelcontextprotocol.spec.McpSchema; import static org.assertj.core.api.Assertions.assertThat; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/ServletSseMcpAsyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java similarity index 85% rename from mcp/src/test/java/org/springframework/ai/mcp/server/ServletSseMcpAsyncServerTests.java rename to mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java index 584938b..3a29dbf 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/server/ServletSseMcpAsyncServerTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java @@ -14,13 +14,12 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Timeout; - -import org.springframework.ai.mcp.server.transport.HttpServletSseServerTransport; -import org.springframework.ai.mcp.spec.ServerMcpTransport; +import org.modelcontextprotocol.server.transport.HttpServletSseServerTransport; +import org.modelcontextprotocol.spec.ServerMcpTransport; /** * Tests for {@link McpAsyncServer} using {@link HttpServletSseServerTransport}. diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/ServletSseMcpSyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java similarity index 85% rename from mcp/src/test/java/org/springframework/ai/mcp/server/ServletSseMcpSyncServerTests.java rename to mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java index 2d3390d..7f0d1c6 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/server/ServletSseMcpSyncServerTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java @@ -14,13 +14,12 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Timeout; - -import org.springframework.ai.mcp.server.transport.HttpServletSseServerTransport; -import org.springframework.ai.mcp.spec.ServerMcpTransport; +import org.modelcontextprotocol.server.transport.HttpServletSseServerTransport; +import org.modelcontextprotocol.spec.ServerMcpTransport; /** * Tests for {@link McpSyncServer} using {@link HttpServletSseServerTransport}. diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/StdioMcpAsyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpAsyncServerTests.java similarity index 85% rename from mcp/src/test/java/org/springframework/ai/mcp/server/StdioMcpAsyncServerTests.java rename to mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpAsyncServerTests.java index 9f15658..9ad20eb 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/server/StdioMcpAsyncServerTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpAsyncServerTests.java @@ -14,12 +14,11 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import org.junit.jupiter.api.Timeout; - -import org.springframework.ai.mcp.server.transport.StdioServerTransport; -import org.springframework.ai.mcp.spec.ServerMcpTransport; +import org.modelcontextprotocol.server.transport.StdioServerTransport; +import org.modelcontextprotocol.spec.ServerMcpTransport; /** * Tests for {@link McpAsyncServer} using {@link StdioServerTransport}. diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/StdioMcpSyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpSyncServerTests.java similarity index 85% rename from mcp/src/test/java/org/springframework/ai/mcp/server/StdioMcpSyncServerTests.java rename to mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpSyncServerTests.java index 6bcc4be..26fbaaf 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/server/StdioMcpSyncServerTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpSyncServerTests.java @@ -14,12 +14,11 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server; +package org.modelcontextprotocol.server; import org.junit.jupiter.api.Timeout; - -import org.springframework.ai.mcp.server.transport.StdioServerTransport; -import org.springframework.ai.mcp.spec.ServerMcpTransport; +import org.modelcontextprotocol.server.transport.StdioServerTransport; +import org.modelcontextprotocol.spec.ServerMcpTransport; /** * Tests for {@link McpSyncServer} using {@link StdioServerTransport}. diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/transport/BlockingInputStream.java b/mcp/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java similarity index 97% rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/transport/BlockingInputStream.java rename to mcp/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java index 96690db..b7de2b9 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/transport/BlockingInputStream.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ai.mcp.server.transport; +package org.modelcontextprotocol.server.transport; import java.io.IOException; import java.io.InputStream; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransportIntegrationTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java similarity index 88% rename from mcp/src/test/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransportIntegrationTests.java rename to mcp/src/test/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java index bc6bc06..3ebf857 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransportIntegrationTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.ai.mcp.server.transport; +package org.modelcontextprotocol.server.transport; import java.time.Duration; import java.util.List; @@ -29,25 +29,23 @@ import org.apache.catalina.startup.Tomcat; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.modelcontextprotocol.client.McpClient; +import org.modelcontextprotocol.client.transport.HttpClientSseClientTransport; +import org.modelcontextprotocol.server.McpServer; +import org.modelcontextprotocol.server.McpServerFeatures; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.CallToolResult; +import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; +import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult; +import org.modelcontextprotocol.spec.McpSchema.InitializeResult; +import org.modelcontextprotocol.spec.McpSchema.Role; +import org.modelcontextprotocol.spec.McpSchema.Root; +import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities; +import org.modelcontextprotocol.spec.McpSchema.Tool; import reactor.test.StepVerifier; -import org.springframework.ai.mcp.client.McpClient; -import org.springframework.ai.mcp.client.transport.HttpClientSseClientTransport; -import org.springframework.ai.mcp.server.McpServer; -import org.springframework.ai.mcp.server.McpServerFeatures; -import org.springframework.ai.mcp.spec.McpError; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.CallToolResult; -import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.CreateMessageRequest; -import org.springframework.ai.mcp.spec.McpSchema.CreateMessageResult; -import org.springframework.ai.mcp.spec.McpSchema.InitializeResult; -import org.springframework.ai.mcp.spec.McpSchema.Role; -import org.springframework.ai.mcp.spec.McpSchema.Root; -import org.springframework.ai.mcp.spec.McpSchema.ServerCapabilities; -import org.springframework.ai.mcp.spec.McpSchema.Tool; import org.springframework.web.client.RestClient; import static org.assertj.core.api.Assertions.assertThat; @@ -55,8 +53,6 @@ import static org.awaitility.Awaitility.await; public class HttpServletSseServerTransportIntegrationTests { - private static final Logger logger = LoggerFactory.getLogger(HttpServletSseServerTransportIntegrationTests.class); - private static final int PORT = 8184; private static final String MESSAGE_ENDPOINT = "/mcp/message"; @@ -239,7 +235,7 @@ public class HttpServletSseServerTransportIntegrationTests { new McpSchema.Tool("tool1", "tool1 description", emptyJsonSchema), request -> { String response = RestClient.create() .get() - .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); @@ -274,7 +270,7 @@ public class HttpServletSseServerTransportIntegrationTests { new McpSchema.Tool("tool1", "tool1 description", emptyJsonSchema), request -> { String response = RestClient.create() .get() - .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); @@ -290,7 +286,7 @@ public class HttpServletSseServerTransportIntegrationTests { var mcpClient = clientBuilder.toolsChangeConsumer(toolsUpdate -> { String response = RestClient.create() .get() - .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/transport/StdioServerTransportTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/transport/StdioServerTransportTests.java similarity index 96% rename from mcp/src/test/java/org/springframework/ai/mcp/server/transport/StdioServerTransportTests.java rename to mcp/src/test/java/org/modelcontextprotocol/server/transport/StdioServerTransportTests.java index c6ce443..0dd790b 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/server/transport/StdioServerTransportTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/transport/StdioServerTransportTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.server.transport; +package org.modelcontextprotocol.server.transport; import java.io.ByteArrayOutputStream; import java.io.InputStream; @@ -27,12 +27,11 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.modelcontextprotocol.spec.McpSchema; +import org.modelcontextprotocol.spec.McpSchema.JSONRPCRequest; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.JSONRPCRequest; - import static org.assertj.core.api.Assertions.assertThat; /** diff --git a/mcp/src/test/java/org/springframework/ai/mcp/spec/DefaultMcpSessionTests.java b/mcp/src/test/java/org/modelcontextprotocol/spec/DefaultMcpSessionTests.java similarity index 98% rename from mcp/src/test/java/org/springframework/ai/mcp/spec/DefaultMcpSessionTests.java rename to mcp/src/test/java/org/modelcontextprotocol/spec/DefaultMcpSessionTests.java index 9af6513..0dcd1d4 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/spec/DefaultMcpSessionTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/spec/DefaultMcpSessionTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ai.mcp.spec; +package org.modelcontextprotocol.spec; import java.time.Duration; import java.util.Map; @@ -23,14 +23,13 @@ import com.fasterxml.jackson.core.type.TypeReference; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.modelcontextprotocol.MockMcpTransport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Mono; import reactor.core.publisher.Sinks; import reactor.test.StepVerifier; -import org.springframework.ai.mcp.MockMcpTransport; - import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/attic/ClientSessionTests2.java b/mcp/src/test/java/org/springframework/ai/mcp/attic/ClientSessionTests2.java deleted file mode 100644 index 47e6e73..0000000 --- a/mcp/src/test/java/org/springframework/ai/mcp/attic/ClientSessionTests2.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2024-2024 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.springframework.ai.mcp.attic; - -import java.time.Duration; - -import org.springframework.ai.mcp.client.McpClient; -import org.springframework.ai.mcp.client.McpSyncClient; -import org.springframework.ai.mcp.client.transport.ServerParameters; -import org.springframework.ai.mcp.client.transport.StdioClientTransport; -import org.springframework.ai.mcp.spec.McpSchema.ListResourcesResult; -import org.springframework.ai.mcp.spec.McpSchema.ListToolsResult; -import org.springframework.ai.mcp.spec.McpSchema.Resource; - -/** - * @author Christian Tzolov - * @since 1.0.0 - */ -public class ClientSessionTests2 { - - public static void main(String[] args) { - - var stdioParams = ServerParameters.builder("uv") - .args("--directory", "dir", "run", "mcp-server-sqlite", "--db-path", "~/test.db") - .build(); - - try (McpSyncClient clientSession = McpClient.using(new StdioClientTransport(stdioParams)) - .requestTimeout(Duration.ofSeconds(10)) - .sync()) { - - clientSession.initialize(); - - ListToolsResult tools = clientSession.listTools(null); - System.out.println("Tools: " + tools); - - clientSession.ping(); - - // CallToolRequest callToolRequest = new CallToolRequest("echo", - // Map.of("message", "Hello MCP Spring AI!")); - // CallToolResult callToolResult = - // clientSession.callTool(callToolRequest); - // System.out.println("Call Tool Result: " + callToolResult); - // // - // clientSession.sendRootsListChanged(); - - // Resources - ListResourcesResult resources = clientSession.listResources(null); - System.out.println("Resources Size: " + resources.resources().size()); - System.out.println("Resources: " + resources); - for (Resource resource : resources.resources()) { - System.out.println(clientSession.readResource(resource)); - - } - - // var resourceTemplate = clientSession.listResourceTemplates(null); - // System.out.println("Resource Templates: " + resourceTemplate); - - // stdioClient.awaitForExit(); - } - catch (Exception e) { - e.printStackTrace(); - } - } - -} diff --git a/mcp/src/test/java/org/springframework/ai/mcp/attic/ClientSessionTests3.java b/mcp/src/test/java/org/springframework/ai/mcp/attic/ClientSessionTests3.java deleted file mode 100644 index f147aa5..0000000 --- a/mcp/src/test/java/org/springframework/ai/mcp/attic/ClientSessionTests3.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2024-2024 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.springframework.ai.mcp.attic; - -import java.time.Duration; - -import org.springframework.ai.mcp.client.McpClient; -import org.springframework.ai.mcp.client.McpSyncClient; -import org.springframework.ai.mcp.client.transport.ServerParameters; -import org.springframework.ai.mcp.client.transport.StdioClientTransport; -import org.springframework.ai.mcp.spec.McpSchema.ListResourcesResult; -import org.springframework.ai.mcp.spec.McpSchema.ListToolsResult; -import org.springframework.ai.mcp.spec.McpSchema.Resource; - -/** - * @author Christian Tzolov - * @since 1.0.0 - */ -public class ClientSessionTests3 { - - public static void main(String[] args) { - - var stdioParams = ServerParameters.builder("uv") - .args("--directory", "dir", "run", "mcp-server-sqlite", "--db-path", "~/test.db") - .build(); - - McpSyncClient clientSession = null; - try { - - clientSession = McpClient.using(new StdioClientTransport(stdioParams)) - .requestTimeout(Duration.ofSeconds(10)) - .sync(); - - clientSession.initialize(); - - ListToolsResult tools = clientSession.listTools(null); - System.out.println("Tools: " + tools); - - clientSession.ping(); - - // Resources - ListResourcesResult resources = clientSession.listResources(null); - System.out.println("Resources Size: " + resources.resources().size()); - System.out.println("Resources: " + resources); - for (Resource resource : resources.resources()) { - System.out.println(clientSession.readResource(resource)); - - } - } - catch (Exception e) { - e.printStackTrace(); - } - finally { - if (clientSession != null) { - clientSession.close(); - } - } - } - -} diff --git a/mcp/src/test/java/org/springframework/ai/mcp/attic/SSEClient.java b/mcp/src/test/java/org/springframework/ai/mcp/attic/SSEClient.java deleted file mode 100644 index 3b75999..0000000 --- a/mcp/src/test/java/org/springframework/ai/mcp/attic/SSEClient.java +++ /dev/null @@ -1,183 +0,0 @@ -/* -* Copyright 2024 - 2024 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.springframework.ai.mcp.attic; - -/** - * @author Christian Tzolov - * @since 1.0.0 - */ - -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; -import java.time.Duration; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.atomic.AtomicReference; -import java.util.regex.Pattern; -import java.util.stream.Stream; - -public class SSEClient { - - private final HttpClient httpClient; - - private static final Pattern EVENT_DATA_PATTERN = Pattern.compile("^data:(.+)$", Pattern.MULTILINE); - - private static final Pattern EVENT_ID_PATTERN = Pattern.compile("^id:(.+)$", Pattern.MULTILINE); - - private static final Pattern EVENT_TYPE_PATTERN = Pattern.compile("^event:(.+)$", Pattern.MULTILINE); - - public SSEClient() { - this.httpClient = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(10)).build(); - } - - public void subscribe(String url, SSEEventHandler eventHandler) { - HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create(url)) - .header("Accept", "text/event-stream") - .header("Cache-Control", "no-cache") - .GET() - .build(); - - CompletableFuture future = httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofLines()) - .thenAccept(response -> { - if (response.statusCode() == 200) { - processSSEStream(response, eventHandler); - } - else { - throw new RuntimeException("Failed to connect to SSE stream: " + response.statusCode()); - } - }); - - // Handle errors - future.exceptionally(throwable -> { - eventHandler.onError(throwable); - return null; - }); - } - - private void processSSEStream(HttpResponse> response, SSEEventHandler eventHandler) { - StringBuilder eventBuilder = new StringBuilder(); - AtomicReference currentEventId = new AtomicReference<>(); - AtomicReference currentEventType = new AtomicReference<>("message"); // default - // event - // type - - response.body().forEach(line -> { - if (line.isEmpty()) { - // Empty line means end of event - if (eventBuilder.length() > 0) { - String eventData = eventBuilder.toString(); - SSEEvent event = parseEvent(eventData, currentEventId.get(), currentEventType.get()); - eventHandler.onEvent(event); - eventBuilder.setLength(0); - } - } - else { - if (line.startsWith("data:")) { - var matcher = EVENT_DATA_PATTERN.matcher(line); - if (matcher.find()) { - eventBuilder.append(matcher.group(1).trim()).append("\n"); - } - } - else if (line.startsWith("id:")) { - var matcher = EVENT_ID_PATTERN.matcher(line); - if (matcher.find()) { - currentEventId.set(matcher.group(1).trim()); - } - } - else if (line.startsWith("event:")) { - var matcher = EVENT_TYPE_PATTERN.matcher(line); - if (matcher.find()) { - currentEventType.set(matcher.group(1).trim()); - } - } - } - }); - } - - private SSEEvent parseEvent(String eventData, String eventId, String eventType) { - return new SSEEvent(eventId, eventType, eventData.trim()); - } - - // Event handler interface - public interface SSEEventHandler { - - void onEvent(SSEEvent event); - - void onError(Throwable error); - - } - - // SSE Event class - public static class SSEEvent { - - private final String id; - - private final String type; - - private final String data; - - public SSEEvent(String id, String type, String data) { - this.id = id; - this.type = type; - this.data = data; - } - - public String getId() { - return id; - } - - public String getType() { - return type; - } - - public String getData() { - return data; - } - - @Override - public String toString() { - return "SSEEvent{" + "id='" + id + '\'' + ", type='" + type + '\'' + ", data='" + data + '\'' + '}'; - } - - } - - public static void main(String[] args) { - SSEClient sseClient = new SSEClient(); - - var eventHandler = new SSEEventHandler() { - @Override - public void onEvent(SSEEvent event) { - System.out.println("Received event: " + event); - } - - @Override - public void onError(Throwable error) { - System.out.println("Error: " + error); - } - }; - sseClient.subscribe("http://localhost:8080/sse", eventHandler); - - try { - Thread.sleep(100000); - } - catch (InterruptedException e) { - e.printStackTrace(); - } - } - -} \ No newline at end of file diff --git a/mcp/src/test/java/org/springframework/ai/mcp/attic/ServerParametersParser.java b/mcp/src/test/java/org/springframework/ai/mcp/attic/ServerParametersParser.java deleted file mode 100644 index e093723..0000000 --- a/mcp/src/test/java/org/springframework/ai/mcp/attic/ServerParametersParser.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2024-2024 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.springframework.ai.mcp.attic; - -import java.util.List; -import java.util.Map; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.ObjectMapper; - -import org.springframework.ai.mcp.attic.ServerParametersParser.McpServerConfigurations.McpServerConfiguration; - -/** - * @author Christian Tzolov - * @author Dariusz Jędrzejczyk - */ - -public class ServerParametersParser { - - @JsonInclude(JsonInclude.Include.NON_ABSENT) - public record McpServerConfigurations(// @formatter:off - @JsonProperty("mcpServers") Map mcpServers) { - - @JsonInclude(JsonInclude.Include.NON_ABSENT) - public record McpServerConfiguration( - @JsonProperty("command") String command, - @JsonProperty("args") List args, - @JsonProperty("env") Map env) { - } - } // @formatter:on - - public static void main(String[] args) throws Exception { - ObjectMapper objectMapper = new ObjectMapper(); - - // Assuming the JSON is in a file named "servers.json" - String jsonInput = """ - { - "mcpServers": { - "filesystem": { - "command": "npx", - "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/files"] - }, - "git": { - "command": "uvx", - "args": ["mcp-server-git", "--repository", "path/to/git/repo"] - }, - "github": { - "command": "npx", - "args": ["-y", "@modelcontextprotocol/server-github"], - "env": { - "GITHUB_PERSONAL_ACCESS_TOKEN": "" - } - }, - "postgres": { - "command": "npx", - "args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"] - } - } - } - """; - - // Deserialize JSON into McpServers - McpServerConfigurations servers = objectMapper.readValue(jsonInput, McpServerConfigurations.class); - - // Access individual servers - for (Map.Entry entry : servers.mcpServers().entrySet()) { - System.out.println("Key: " + entry.getKey()); - System.out.println("Command: " + entry.getValue().command()); - System.out.println("Arguments: " + String.join(", ", entry.getValue().args())); - System.out.println("Environment Variables: " + entry.getValue().env()); - System.out.println("-----------"); - } - } - -} diff --git a/mcp/src/test/java/org/springframework/ai/mcp/attic/_DemoServer.java_ b/mcp/src/test/java/org/springframework/ai/mcp/attic/_DemoServer.java_ deleted file mode 100644 index df1fc0b..0000000 --- a/mcp/src/test/java/org/springframework/ai/mcp/attic/_DemoServer.java_ +++ /dev/null @@ -1,61 +0,0 @@ -/* -* Copyright 2024 - 2024 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.springframework.ai.mcp.attic; - -import java.util.List; -import java.util.Map; - -import com.fasterxml.jackson.databind.ObjectMapper; -import reactor.netty.http.server.HttpServer; - -import org.springframework.ai.mcp.server.McpServer; -import org.springframework.ai.mcp.server.transport.SseServerTransport; -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.CallToolResult; -import org.springframework.http.server.reactive.HttpHandler; -import org.springframework.http.server.reactive.ReactorHttpHandlerAdapter; -import org.springframework.web.reactive.function.server.RouterFunctions; - -/** - * - * https://docs.spring.io/spring-framework/reference/web/webflux-functional.html#webflux-fn-running - * https://docs.spring.io/spring-framework/reference/web/webflux/reactive-spring.html#webflux-httphandler - * - * @author Christian Tzolov - */ - -public class DemoServer { - - public static void main(String[] args) { - SseServerTransport transport = new SseServerTransport(new ObjectMapper(), "/mcp/message"); - - var mcpServer = McpServer.using(transport) - .serverInfo("Weather Forecast", "1.0.0") - .tool(new McpSchema.Tool("weather", "Weather forecast tool by location", "{ \"type\": \"object\" }"), - (arguments) -> { - String city = (String) arguments.get("city"); - return new CallToolResult(List.of(), false); - }) - .async(); - - HttpHandler httpHandler = RouterFunctions.toHttpHandler(transport.getRouterFunction()); - ReactorHttpHandlerAdapter adapter = new ReactorHttpHandlerAdapter(httpHandler); - HttpServer httpServer = HttpServer.create().port(8080).handle(adapter); - httpServer.bindNow().onDispose().block(); - - } - -} diff --git a/mcp/src/test/java/org/springframework/ai/mcp/attic/_MainSSE.java_ b/mcp/src/test/java/org/springframework/ai/mcp/attic/_MainSSE.java_ deleted file mode 100644 index e4c3004..0000000 --- a/mcp/src/test/java/org/springframework/ai/mcp/attic/_MainSSE.java_ +++ /dev/null @@ -1,81 +0,0 @@ -/* -* Copyright 2024 - 2024 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.springframework.ai.mcp.attic; - -import java.time.Duration; -import java.util.Map; - -import org.springframework.ai.mcp.client.McpClient; -import org.springframework.ai.mcp.client.McpSyncClient; -import org.springframework.ai.mcp.client.transport.SseClientTransport; -import org.springframework.ai.mcp.spec.McpSchema.CallToolRequest; -import org.springframework.ai.mcp.spec.McpSchema.CallToolResult; -import org.springframework.ai.mcp.spec.McpSchema.ListPromptsResult; -import org.springframework.ai.mcp.spec.McpSchema.ListResourcesResult; -import org.springframework.ai.mcp.spec.McpSchema.ListToolsResult; -import org.springframework.ai.mcp.spec.McpSchema.Resource; -import org.springframework.web.reactive.function.client.WebClient; - -/** - * @author Christian Tzolov - * @since 1.0.0 - */ - -public class MainSSE { - - public static void main(String[] args) { - - try (McpSyncClient mcpClient = McpClient - .using(new SseClientTransport(WebClient.builder().baseUrl("http://localhost:3001"))) - .requestTimeout(Duration.ofSeconds(1000)) - .sync()) { - - mcpClient.initialize(); - - ListToolsResult tools = mcpClient.listTools(); - System.out.println("Tools: " + tools); - - mcpClient.ping(); - - CallToolRequest callToolRequest = new CallToolRequest("echo", Map.of("message", "Hello MCP Spring AI!")); - CallToolResult callToolResult = mcpClient.callTool(callToolRequest); - System.out.println("Call Tool Result: " + callToolResult); - - // mcpClient.sendRootsListChanged(); - - // Resources - ListResourcesResult resources = mcpClient.listResources(); - System.out.println("Resources Size: " + resources.resources().size()); - System.out.println("Resources: " + resources); - for (Resource resource : resources.resources()) { - System.out.println(mcpClient.readResource(resource)); - } - - var resourceTemplate = mcpClient.listResourceTemplates(); - System.out.println("Resource Templates: " + resourceTemplate); - - ListPromptsResult prompts = mcpClient.listPrompts(); - for (var prompt : prompts.prompts()) { - System.out.println("Prompt: " + prompt); - } - - } - catch (Exception e) { - e.printStackTrace(); - } - } - -} diff --git a/pom.xml b/pom.xml index 2092d7d..c30f00b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,12 +4,18 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.springframework.experimental + org.modelcontextprotocol.sdk mcp-parent 0.7.0-SNAPSHOT pom - https://github.com/spring-projects-experimental/spring-ai-mcp + https://github.com/modelcontextprotocol/java-sdk + + + https://github.com/modelcontextprotocol/java-sdk + git://github.com/modelcontextprotocol/java-sdk.git + git@github.com/modelcontextprotocol/java-sdk.git + Spring AI MCP Parent Java SDK and Spring Framework integration for the Model Context Protocol (MCP), enabling interaction with AI models and tools through a standardized interface @@ -36,18 +42,14 @@ Dariusz Jędrzejczyk - - https://github.com/spring-projects-experimental/spring-ai-mcp - git://github.com/spring-projects-experimental/spring-ai-mcp.git - git@github.com:spring-projects-experimental/spring-ai-mcp.git - + Github Issues - https://github.com/spring-projects-experimental/spring-ai-mcp/issues + https://github.com/modelcontextprotocol/java-sdk/issues Github Actions - https://github.com/spring-projects-experimental/spring-ai-mcp/actions + https://github.com/modelcontextprotocol/java-sdk/actions From 413d138d0cda29b95efb1b116a71c1f77e39cbcd Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Fri, 24 Jan 2025 23:03:17 +0100 Subject: [PATCH 004/426] Change license from Apache to MIT Resolves #1 Signed-off-by: Christian Tzolov --- LICENSE | 214 ++---------------- README.md | 2 +- .../antora/modules/ROOT/pages/overview.adoc | 2 +- .../MockMcpTransport.java | 12 - .../client/AbstractMcpAsyncClientTests.java | 12 - .../client/AbstractMcpSyncClientTests.java | 12 - .../server/AbstractMcpAsyncServerTests.java | 12 - .../server/AbstractMcpSyncServerTests.java | 12 - .../transport/WebFluxSseClientTransport.java | 12 - .../WebFluxSseIntegrationTests.java | 18 +- .../client/WebFluxSseMcpAsyncClientTests.java | 12 - .../client/WebFluxSseMcpSyncClientTests.java | 12 - .../WebFluxSseClientTransportTests.java | 12 - .../server/WebFluxSseMcpAsyncServerTests.java | 12 - .../server/WebFluxSseMcpSyncServerTests.java | 12 - .../server/transport/BlockingInputStream.java | 12 - .../transport/WebMvcSseServerTransport.java | 12 - .../WebMvcSseAsyncServerTransportTests.java | 12 - .../server/WebMvcSseIntegrationTests.java | 18 +- .../WebMvcSseSyncServerTransportTests.java | 12 - .../client/McpAsyncClient.java | 12 - .../client/McpClient.java | 12 - .../client/McpClientFeatures.java | 4 + .../client/McpSyncClient.java | 12 - .../client/transport/FlowSseClient.java | 12 - .../HttpClientSseClientTransport.java | 12 - .../client/transport/ServerParameters.java | 12 - .../transport/StdioClientTransport.java | 12 - .../server/McpAsyncServer.java | 12 - .../server/McpServer.java | 12 - .../server/McpServerFeatures.java | 4 + .../server/McpSyncServer.java | 12 - .../HttpServletSseServerTransport.java | 12 - .../transport/StdioServerTransport.java | 12 - .../spec/ClientMcpTransport.java | 12 - .../spec/DefaultMcpSession.java | 12 - .../modelcontextprotocol/spec/McpError.java | 12 - .../modelcontextprotocol/spec/McpSchema.java | 12 - .../modelcontextprotocol/spec/McpSession.java | 12 - .../spec/McpTransport.java | 12 - .../spec/ServerMcpTransport.java | 12 - .../org/modelcontextprotocol/util/Assert.java | 12 - .../org/modelcontextprotocol/util/Utils.java | 12 - .../MockMcpTransport.java | 12 - .../client/AbstractMcpAsyncClientTests.java | 12 - .../client/AbstractMcpSyncClientTests.java | 12 - .../McpAsyncClientResponseHandlerTests.java | 12 - .../client/McpClientProtocolVersionTests.java | 12 - .../client/ServletSseMcpAsyncClientTests.java | 12 - .../client/ServletSseMcpSyncClientTests.java | 12 - .../client/StdioMcpAsyncClientTests.java | 12 - .../client/StdioMcpSyncClientTests.java | 12 - .../HttpClientSseClientTransportTests.java | 12 - .../server/AbstractMcpAsyncServerTests.java | 12 - .../server/AbstractMcpSyncServerTests.java | 12 - .../server/McpServerProtocolVersionTests.java | 12 - .../server/ServletSseMcpAsyncServerTests.java | 12 - .../server/ServletSseMcpSyncServerTests.java | 12 - .../server/StdioMcpAsyncServerTests.java | 12 - .../server/StdioMcpSyncServerTests.java | 12 - .../server/transport/BlockingInputStream.java | 12 - ...letSseServerTransportIntegrationTests.java | 18 +- .../transport/StdioServerTransportTests.java | 12 - .../spec/DefaultMcpSessionTests.java | 12 - pom.xml | 13 +- 65 files changed, 42 insertions(+), 923 deletions(-) diff --git a/LICENSE b/LICENSE index 261eeb9..252046e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,201 +1,21 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ +MIT License - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +Copyright (c) 2025 Broadcom - 1. Definitions. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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 - - http://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. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index 6982146..3d985bb 100644 --- a/README.md +++ b/README.md @@ -137,4 +137,4 @@ Contributions are welcome! Please: ## License -This project is licensed under the [Apache License 2.0](LICENSE). +This project is licensed under the [MIT](LICENSE). diff --git a/mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc b/mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc index d428584..28d4cb4 100644 --- a/mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc +++ b/mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc @@ -123,4 +123,4 @@ mvn test == License -This project is licensed under the link:LICENSE[Apache License 2.0]. +This project is licensed under the link:LICENSE[MIT]. diff --git a/mcp-test/src/main/java/org/modelcontextprotocol/MockMcpTransport.java b/mcp-test/src/main/java/org/modelcontextprotocol/MockMcpTransport.java index c15d922..9660d19 100644 --- a/mcp-test/src/main/java/org/modelcontextprotocol/MockMcpTransport.java +++ b/mcp-test/src/main/java/org/modelcontextprotocol/MockMcpTransport.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol; diff --git a/mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java b/mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java index ccc84cc..b4e2b30 100644 --- a/mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java +++ b/mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client; diff --git a/mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java b/mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java index 7f02fa2..8115903 100644 --- a/mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java +++ b/mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client; diff --git a/mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java b/mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java index a9360cb..43f0ff8 100644 --- a/mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java +++ b/mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server; diff --git a/mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java b/mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java index 83fae26..8a10bf8 100644 --- a/mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java +++ b/mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java b/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java index 78a4291..3a8375b 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java @@ -1,17 +1,5 @@ /* * Copyright 2024 - 2024 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.modelcontextprotocol.client.transport; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/WebFluxSseIntegrationTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/WebFluxSseIntegrationTests.java index 9ac21b1..67a9191 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/WebFluxSseIntegrationTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/WebFluxSseIntegrationTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024 - 2024 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.modelcontextprotocol; @@ -373,7 +361,7 @@ public class WebFluxSseIntegrationTests { // perform a blocking call to a remote service String response = RestClient.create() .get() - .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/specification/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); @@ -413,7 +401,7 @@ public class WebFluxSseIntegrationTests { // perform a blocking call to a remote service String response = RestClient.create() .get() - .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/specification/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); @@ -430,7 +418,7 @@ public class WebFluxSseIntegrationTests { // perform a blocking call to a remote service String response = RestClient.create() .get() - .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/specification/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java index 9f726c4..2299bf3 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java index 4371bff..a154987 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java index ec47529..80de0a8 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client.transport; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java index b149fa0..5a4f797 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java index 6d00edc..df9eacd 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java index b7de2b9..ec4b136 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java @@ -1,17 +1,5 @@ /* * Copyright 2024 - 2024 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.modelcontextprotocol.server.transport; diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java b/mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java index cfbc467..aa00066 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java +++ b/mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server.transport; diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java index aad11c5..846482f 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java +++ b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server; diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseIntegrationTests.java b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseIntegrationTests.java index 0c9f629..96fbc3e 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseIntegrationTests.java +++ b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseIntegrationTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024 - 2024 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.modelcontextprotocol.server; @@ -407,7 +395,7 @@ public class WebMvcSseIntegrationTests { // perform a blocking call to a remote service String response = RestClient.create() .get() - .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/specification/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); @@ -444,7 +432,7 @@ public class WebMvcSseIntegrationTests { // perform a blocking call to a remote service String response = RestClient.create() .get() - .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/specification/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); @@ -461,7 +449,7 @@ public class WebMvcSseIntegrationTests { // perform a blocking call to a remote service String response = RestClient.create() .get() - .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/specification/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java index 545ec01..8024173 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java +++ b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server; diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java b/mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java index 8ec3f9c..4962b37 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client; diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java b/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java index 83801c9..7cf5341 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client; diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/McpClientFeatures.java b/mcp/src/main/java/org/modelcontextprotocol/client/McpClientFeatures.java index 9733b86..6cbc456 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/McpClientFeatures.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/McpClientFeatures.java @@ -1,3 +1,7 @@ +/* + * Copyright 2024-2024 the original author or authors. + */ + package org.modelcontextprotocol.client; import java.util.ArrayList; diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/McpSyncClient.java b/mcp/src/main/java/org/modelcontextprotocol/client/McpSyncClient.java index fa464a7..a44afbd 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/McpSyncClient.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/McpSyncClient.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client; diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/transport/FlowSseClient.java b/mcp/src/main/java/org/modelcontextprotocol/client/transport/FlowSseClient.java index 2f6d798..f382f9c 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/transport/FlowSseClient.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/transport/FlowSseClient.java @@ -1,17 +1,5 @@ /* * Copyright 2024 - 2024 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.modelcontextprotocol.client.transport; diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java b/mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java index 4a48d7c..dc886a5 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java @@ -1,17 +1,5 @@ /* * Copyright 2024 - 2024 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.modelcontextprotocol.client.transport; diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/transport/ServerParameters.java b/mcp/src/main/java/org/modelcontextprotocol/client/transport/ServerParameters.java index 9a0e574..04f5f88 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/transport/ServerParameters.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/transport/ServerParameters.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client.transport; diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/transport/StdioClientTransport.java b/mcp/src/main/java/org/modelcontextprotocol/client/transport/StdioClientTransport.java index b30eb59..ec7c816 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/transport/StdioClientTransport.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/transport/StdioClientTransport.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client.transport; diff --git a/mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java b/mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java index 131d42a..04c6a85 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java +++ b/mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server; diff --git a/mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java b/mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java index 3e28c3c..7564f00 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java +++ b/mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server; diff --git a/mcp/src/main/java/org/modelcontextprotocol/server/McpServerFeatures.java b/mcp/src/main/java/org/modelcontextprotocol/server/McpServerFeatures.java index b97794d..162b431 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/server/McpServerFeatures.java +++ b/mcp/src/main/java/org/modelcontextprotocol/server/McpServerFeatures.java @@ -1,3 +1,7 @@ +/* + * Copyright 2024-2024 the original author or authors. + */ + package org.modelcontextprotocol.server; import java.util.ArrayList; diff --git a/mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java b/mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java index 1233f3a..898b1c6 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java +++ b/mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server; diff --git a/mcp/src/main/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java b/mcp/src/main/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java index 37529d8..6a56798 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java +++ b/mcp/src/main/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java @@ -1,17 +1,5 @@ /* * Copyright 2024 - 2024 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.modelcontextprotocol.server.transport; diff --git a/mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java b/mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java index cf54cb0..e0dd865 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java +++ b/mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server.transport; diff --git a/mcp/src/main/java/org/modelcontextprotocol/spec/ClientMcpTransport.java b/mcp/src/main/java/org/modelcontextprotocol/spec/ClientMcpTransport.java index 92c0973..eff6c15 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/spec/ClientMcpTransport.java +++ b/mcp/src/main/java/org/modelcontextprotocol/spec/ClientMcpTransport.java @@ -1,17 +1,5 @@ /* * Copyright 2024 - 2024 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.modelcontextprotocol.spec; diff --git a/mcp/src/main/java/org/modelcontextprotocol/spec/DefaultMcpSession.java b/mcp/src/main/java/org/modelcontextprotocol/spec/DefaultMcpSession.java index efddf80..5a89a1a 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/spec/DefaultMcpSession.java +++ b/mcp/src/main/java/org/modelcontextprotocol/spec/DefaultMcpSession.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.spec; diff --git a/mcp/src/main/java/org/modelcontextprotocol/spec/McpError.java b/mcp/src/main/java/org/modelcontextprotocol/spec/McpError.java index d12c87e..df79238 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/spec/McpError.java +++ b/mcp/src/main/java/org/modelcontextprotocol/spec/McpError.java @@ -1,17 +1,5 @@ /* * Copyright 2024 - 2024 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.modelcontextprotocol.spec; diff --git a/mcp/src/main/java/org/modelcontextprotocol/spec/McpSchema.java b/mcp/src/main/java/org/modelcontextprotocol/spec/McpSchema.java index e2d49c3..153ca99 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/spec/McpSchema.java +++ b/mcp/src/main/java/org/modelcontextprotocol/spec/McpSchema.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.spec; diff --git a/mcp/src/main/java/org/modelcontextprotocol/spec/McpSession.java b/mcp/src/main/java/org/modelcontextprotocol/spec/McpSession.java index e53f7c8..50ecc52 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/spec/McpSession.java +++ b/mcp/src/main/java/org/modelcontextprotocol/spec/McpSession.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.spec; diff --git a/mcp/src/main/java/org/modelcontextprotocol/spec/McpTransport.java b/mcp/src/main/java/org/modelcontextprotocol/spec/McpTransport.java index 7d9e30c..577ae5b 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/spec/McpTransport.java +++ b/mcp/src/main/java/org/modelcontextprotocol/spec/McpTransport.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.spec; diff --git a/mcp/src/main/java/org/modelcontextprotocol/spec/ServerMcpTransport.java b/mcp/src/main/java/org/modelcontextprotocol/spec/ServerMcpTransport.java index 2b7f584..182be85 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/spec/ServerMcpTransport.java +++ b/mcp/src/main/java/org/modelcontextprotocol/spec/ServerMcpTransport.java @@ -1,17 +1,5 @@ /* * Copyright 2024 - 2024 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.modelcontextprotocol.spec; diff --git a/mcp/src/main/java/org/modelcontextprotocol/util/Assert.java b/mcp/src/main/java/org/modelcontextprotocol/util/Assert.java index 90e6b61..bee6c44 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/util/Assert.java +++ b/mcp/src/main/java/org/modelcontextprotocol/util/Assert.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.util; diff --git a/mcp/src/main/java/org/modelcontextprotocol/util/Utils.java b/mcp/src/main/java/org/modelcontextprotocol/util/Utils.java index 9ba3ac1..2a8da98 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/util/Utils.java +++ b/mcp/src/main/java/org/modelcontextprotocol/util/Utils.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.util; diff --git a/mcp/src/test/java/org/modelcontextprotocol/MockMcpTransport.java b/mcp/src/test/java/org/modelcontextprotocol/MockMcpTransport.java index ccbc228..c62c0d4 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/MockMcpTransport.java +++ b/mcp/src/test/java/org/modelcontextprotocol/MockMcpTransport.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java index 8deb544..e76e389 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java index 6dd181c..79378fa 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java index 59eb632..6a4ee28 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/McpClientProtocolVersionTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/McpClientProtocolVersionTests.java index f67a375..88e18f8 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/McpClientProtocolVersionTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/McpClientProtocolVersionTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java index 1e9000e..5c841b6 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java index 428df4b..8b6f257 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpAsyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpAsyncClientTests.java index 0ff41ed..58de6f8 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpAsyncClientTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpAsyncClientTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpSyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpSyncClientTests.java index 9b80223..d5607fd 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpSyncClientTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpSyncClientTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java index fa99b4a..74593d3 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.client.transport; diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java index 7c26278..0913d29 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server; diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java index 2d3b163..cc1b4fe 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server; diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/McpServerProtocolVersionTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/McpServerProtocolVersionTests.java index 7e0f63d..1e05231 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/McpServerProtocolVersionTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/McpServerProtocolVersionTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server; diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java index 3a29dbf..52836e4 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server; diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java index 7f0d1c6..14f6e30 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server; diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpAsyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpAsyncServerTests.java index 9ad20eb..717b6b0 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpAsyncServerTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpAsyncServerTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server; diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpSyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpSyncServerTests.java index 26fbaaf..2bc8491 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpSyncServerTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpSyncServerTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server; diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java b/mcp/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java index b7de2b9..ec4b136 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java @@ -1,17 +1,5 @@ /* * Copyright 2024 - 2024 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.modelcontextprotocol.server.transport; diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java index 3ebf857..0e6802c 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024 - 2024 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.modelcontextprotocol.server.transport; @@ -235,7 +223,7 @@ public class HttpServletSseServerTransportIntegrationTests { new McpSchema.Tool("tool1", "tool1 description", emptyJsonSchema), request -> { String response = RestClient.create() .get() - .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/specification/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); @@ -270,7 +258,7 @@ public class HttpServletSseServerTransportIntegrationTests { new McpSchema.Tool("tool1", "tool1 description", emptyJsonSchema), request -> { String response = RestClient.create() .get() - .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/specification/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); @@ -286,7 +274,7 @@ public class HttpServletSseServerTransportIntegrationTests { var mcpClient = clientBuilder.toolsChangeConsumer(toolsUpdate -> { String response = RestClient.create() .get() - .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md") + .uri("https://github.com/modelcontextprotocol/specification/blob/main/README.md") .retrieve() .body(String.class); assertThat(response).isNotBlank(); diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/transport/StdioServerTransportTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/transport/StdioServerTransportTests.java index 0dd790b..f564a87 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/transport/StdioServerTransportTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/server/transport/StdioServerTransportTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.server.transport; diff --git a/mcp/src/test/java/org/modelcontextprotocol/spec/DefaultMcpSessionTests.java b/mcp/src/test/java/org/modelcontextprotocol/spec/DefaultMcpSessionTests.java index 0dcd1d4..6ee5345 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/spec/DefaultMcpSessionTests.java +++ b/mcp/src/test/java/org/modelcontextprotocol/spec/DefaultMcpSessionTests.java @@ -1,17 +1,5 @@ /* * Copyright 2024-2024 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.modelcontextprotocol.spec; diff --git a/pom.xml b/pom.xml index c30f00b..97dd9a2 100644 --- a/pom.xml +++ b/pom.xml @@ -26,13 +26,12 @@ https://spring.io - - - Apache 2.0 - https://www.apache.org/licenses/LICENSE-2.0.txt - repo - - + + + MIT License + http://www.opensource.org/licenses/mit-license.php + + From f91fe15ec6bc20c938c20ef96a062d1e66e428d2 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Fri, 24 Jan 2025 23:25:13 +0100 Subject: [PATCH 005/426] Remove redundand code Resolves #4 Signed-off-by: Christian Tzolov --- .../transport/_SseServerTransportTests.java_ | 283 --------- .../client/McpAsyncClient.java | 166 +----- .../client/McpClient.java | 256 -------- .../server/McpAsyncServer.java | 241 +------- .../server/McpServer.java | 561 +----------------- .../server/McpSyncServer.java | 33 -- 6 files changed, 7 insertions(+), 1533 deletions(-) delete mode 100644 mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/_SseServerTransportTests.java_ diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/_SseServerTransportTests.java_ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/_SseServerTransportTests.java_ deleted file mode 100644 index 80f31a2..0000000 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/_SseServerTransportTests.java_ +++ /dev/null @@ -1,283 +0,0 @@ -package org.springframework.ai.mcp.server.transport; - -import java.time.Duration; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicReference; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.Timeout; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import reactor.core.Disposable; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; -import reactor.test.StepVerifier; - -import org.springframework.ai.mcp.spec.McpSchema; -import org.springframework.ai.mcp.spec.McpSchema.JSONRPCRequest; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.codec.ServerSentEvent; -import org.springframework.test.web.reactive.server.WebTestClient; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - -/** - * Tests for the {@link SseServerTransport} class. - * - * @author Christian Tzolov - */ -@Timeout(15) -class SseServerTransportTests { - - private static final Logger logger = LoggerFactory.getLogger(SseServerTransportTests.class); - - private ObjectMapper objectMapper; - - private String messageEndpoint; - - private SseServerTransport transport; - - private WebTestClient webTestClient; - - @BeforeEach - void setUp() { - objectMapper = new ObjectMapper(); - messageEndpoint = "/message"; - transport = new SseServerTransport(objectMapper, messageEndpoint); - webTestClient = WebTestClient.bindToRouterFunction(transport.getRouterFunction()).build(); - } - - @Test - void constructorValidation() { - assertThatThrownBy(() -> new SseServerTransport(null, "/message")).isInstanceOf(IllegalArgumentException.class) - .hasMessageContaining("ObjectMapper must not be null"); - - assertThatThrownBy(() -> new SseServerTransport(new ObjectMapper(), null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessageContaining("Message endpoint must not be null"); - } - - @Test - void testSseConnectionEstablishment() { - List> events = new ArrayList<>(); - - webTestClient.get() - .uri("/sse") - .accept(MediaType.TEXT_EVENT_STREAM) - .exchange() - .expectStatus() - .isOk() - .expectHeader() - .contentTypeCompatibleWith(MediaType.TEXT_EVENT_STREAM) - .returnResult(String.class) - .getResponseBody() - .map(data -> ServerSentEvent.builder().data(data).build()) - .take(1) // Take only the initial endpoint event - .subscribe(events::add); - - // Wait a bit for the event to be received - StepVerifier.create(Mono.delay(Duration.ofMillis(500))).expectNextCount(1).verifyComplete(); - - assertThat(events).hasSize(1); - assertThat(events.get(0).data()).isEqualTo(messageEndpoint); - } - - @Test - void testMessageHandling() { - AtomicReference receivedMessage = new AtomicReference<>(); - - // Set up message handler - transport.connect(message -> { - message.doOnNext(receivedMessage::set).subscribe(); - return Mono.empty(); - }).block(); - - // Create a test message - JSONRPCRequest testMessage = new JSONRPCRequest(McpSchema.JSONRPC_VERSION, "test-method", "test-id", - Map.of("key", "value")); - - // Send message to endpoint - webTestClient.post() - .uri(messageEndpoint) - .contentType(MediaType.APPLICATION_JSON) - .bodyValue(testMessage) - .exchange() - .expectStatus() - .isOk(); - - // Verify the message was received and processed - assertThat(receivedMessage.get()).isNotNull(); - McpSchema.JSONRPCRequest receivedRequest = (McpSchema.JSONRPCRequest) receivedMessage.get(); - assertThat(receivedRequest.id()).isEqualTo(testMessage.id()); - assertThat(receivedRequest.method()).isEqualTo(testMessage.method()); - } - - @Test - @Disabled("Flaky test") - void testBroadcastMessage() { - // Create test clients - int clientCount = 3; - CountDownLatch connectLatch = new CountDownLatch(clientCount); - CountDownLatch messageLatch = new CountDownLatch(clientCount); - - List>> allReceivedEvents = new ArrayList<>(); - List subscriptions = new ArrayList<>(); - - // Connect clients - for (int i = 0; i < clientCount; i++) { - List> clientEvents = new ArrayList<>(); - allReceivedEvents.add(clientEvents); - - Flux> eventStream = webTestClient.get() - .uri("/sse") - .accept(MediaType.TEXT_EVENT_STREAM) - .exchange() - .expectStatus() - .isOk() - .returnResult(String.class) - .getResponseBody() - .map(data -> ServerSentEvent.builder().data(data).build()); - - Disposable subscription = eventStream.doOnNext(event -> { - clientEvents.add(event); - if (event.event() != null && event.event().equals(SseServerTransport.ENDPOINT_EVENT_TYPE)) { - connectLatch.countDown(); - } - else if (event.event() != null && event.event().equals(SseServerTransport.MESSAGE_EVENT_TYPE)) { - messageLatch.countDown(); - } - }).subscribe(); - - subscriptions.add(subscription); - } - - // Wait for all clients to connect - try { - assertThat(connectLatch.await(5, TimeUnit.SECONDS)).isTrue(); - } - catch (InterruptedException e) { - throw new RuntimeException(e); - } - - // Verify initial connections - for (List> events : allReceivedEvents) { - assertThat(events).hasSize(1); - assertThat(events.get(0).data()).isEqualTo(messageEndpoint); - } - - // Give clients time to fully establish their subscriptions - logger.debug("Waiting for subscriptions to stabilize..."); - try { - Thread.sleep(1000); - } - catch (InterruptedException e) { - throw new RuntimeException(e); - } - logger.debug("Sending broadcast message to {} clients", clientCount); - - // Send broadcast message - JSONRPCRequest broadcastMessage = new JSONRPCRequest(McpSchema.JSONRPC_VERSION, "broadcast", "broadcast-id", - Map.of("message", "Hello all!")); - - // Send the message - transport.sendMessage(broadcastMessage).block(Duration.ofSeconds(5)); - - // Wait for all clients to receive the broadcast - try { - assertThat(messageLatch.await(5, TimeUnit.SECONDS)).isTrue(); - } - catch (InterruptedException e) { - throw new RuntimeException(e); - } - - // Verify each client received both messages - for (List> events : allReceivedEvents) { - assertThat(events).hasSize(2); - assertThat(events.get(0).data()).isEqualTo(messageEndpoint); - assertThat(events.get(1).data()).contains("broadcast-id"); - } - - // Cleanup - subscriptions.forEach(Disposable::dispose); - } - - @Test - void testGracefulShutdown() { - // Connect a client - Flux> eventStream = webTestClient.get() - .uri("/sse") - .accept(MediaType.TEXT_EVENT_STREAM) - .exchange() - .expectStatus() - .isOk() - .returnResult(String.class) - .getResponseBody() - .map(data -> ServerSentEvent.builder().data(data).build()); - - List> receivedEvents = new ArrayList<>(); - eventStream.subscribe(receivedEvents::add); - - // Wait for connection - StepVerifier.create(Mono.delay(Duration.ofMillis(500))).expectNextCount(1).verifyComplete(); - - // Initiate shutdown - transport.closeGracefully().block(Duration.ofSeconds(5)); - - // Verify server rejects new connections with timeout - webTestClient.get() - .uri("/sse") - .accept(MediaType.TEXT_EVENT_STREAM) - .exchange() - .expectStatus() - .isEqualTo(HttpStatus.SERVICE_UNAVAILABLE) - .expectBody(String.class) - .isEqualTo("Server is shutting down"); - - // Verify server rejects new messages with timeout - webTestClient.post() - .uri(messageEndpoint) - .contentType(MediaType.APPLICATION_JSON) - .bodyValue(""" - { - "jsonrpc": "2.0", - "method": "test", - "id": "1", - "params": {} - } - """) - .exchange() - .expectStatus() - .isEqualTo(HttpStatus.SERVICE_UNAVAILABLE) - .expectBody(String.class) - .isEqualTo("Server is shutting down"); - } - - @Test - void testInvalidMessageHandling() { - // Test invalid JSON - webTestClient.post() - .uri(messageEndpoint) - .contentType(MediaType.APPLICATION_JSON) - .bodyValue("invalid json") - .exchange() - .expectStatus() - .isBadRequest(); - - // Test invalid message format - webTestClient.post().uri(messageEndpoint).contentType(MediaType.APPLICATION_JSON).bodyValue(""" - { - "invalid": "message" - } - """).exchange().expectStatus().isBadRequest(); - } - -} diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java b/mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java index 4962b37..875de37 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java @@ -15,24 +15,21 @@ import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import org.modelcontextprotocol.spec.ClientMcpTransport; import org.modelcontextprotocol.spec.DefaultMcpSession; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpTransport; import org.modelcontextprotocol.spec.DefaultMcpSession.NotificationHandler; import org.modelcontextprotocol.spec.DefaultMcpSession.RequestHandler; +import org.modelcontextprotocol.spec.McpError; +import org.modelcontextprotocol.spec.McpSchema; import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult; import org.modelcontextprotocol.spec.McpSchema.GetPromptRequest; import org.modelcontextprotocol.spec.McpSchema.GetPromptResult; -import org.modelcontextprotocol.spec.McpSchema.Implementation; import org.modelcontextprotocol.spec.McpSchema.ListPromptsResult; import org.modelcontextprotocol.spec.McpSchema.LoggingLevel; import org.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification; import org.modelcontextprotocol.spec.McpSchema.PaginatedRequest; import org.modelcontextprotocol.spec.McpSchema.Root; -import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities.RootCapabilities; -import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities.Sampling; +import org.modelcontextprotocol.spec.McpTransport; import org.modelcontextprotocol.util.Assert; import org.modelcontextprotocol.util.Utils; import org.slf4j.Logger; @@ -221,107 +218,6 @@ public class McpAsyncClient { } - /** - * Create a new McpAsyncClient with the given transport and session request-response - * timeout. - * @param transport the transport to use. - * @param requestTimeout the session request-response timeout. - * @param clientInfo the client implementation information. - * @param clientCapabilities the client capabilities. - * @param roots the roots. - * @param toolsChangeConsumers the tools change consumers. - * @param resourcesChangeConsumers the resources change consumers. - * @param promptsChangeConsumers the prompts change consumers. - * @param loggingConsumers the logging consumers. - * @param samplingHandler the sampling handler. - * @deprecated Use {@link McpClient#async(ClientMcpTransport)} to obtain an instance. - */ - @Deprecated - public McpAsyncClient(ClientMcpTransport transport, Duration requestTimeout, Implementation clientInfo, - ClientCapabilities clientCapabilities, Map roots, - List>> toolsChangeConsumers, - List>> resourcesChangeConsumers, - List>> promptsChangeConsumers, - List> loggingConsumers, - Function samplingHandler) { - - Assert.notNull(transport, "Transport must not be null"); - Assert.notNull(requestTimeout, "Request timeout must not be null"); - Assert.notNull(clientInfo, "Client info must not be null"); - - this.protocolVersions = List.of(McpSchema.LATEST_PROTOCOL_VERSION); - - this.clientInfo = clientInfo; - - this.clientCapabilities = (clientCapabilities != null) ? clientCapabilities - : new McpSchema.ClientCapabilities(null, !Utils.isEmpty(roots) ? new RootCapabilities(false) : null, - samplingHandler != null ? new Sampling() : null); - - this.transport = transport; - - this.roots = roots != null ? new ConcurrentHashMap<>(roots) : new ConcurrentHashMap<>(); - - // Request Handlers - Map> requestHandlers = new HashMap<>(); - - // Roots List Request Handler - if (this.clientCapabilities.roots() != null) { - requestHandlers.put(McpSchema.METHOD_ROOTS_LIST, rootsListRequestHandler()); - } - - // Sampling Handler - if (this.clientCapabilities.sampling() != null) { - if (samplingHandler == null) { - throw new McpError("Sampling handler must not be null when client capabilities include sampling"); - } - this.samplingHandler = r -> Mono.fromCallable(() -> samplingHandler.apply(r)) - .subscribeOn(Schedulers.boundedElastic()); - requestHandlers.put(McpSchema.METHOD_SAMPLING_CREATE_MESSAGE, samplingCreateMessageHandler()); - } - - // Notification Handlers - Map notificationHandlers = new HashMap<>(); - - // Tools Change Notification - List>> toolsChangeConsumersFinal = new ArrayList<>(); - toolsChangeConsumersFinal.add((notification) -> logger.info("Tools changed: {}", notification)); - if (!Utils.isEmpty(toolsChangeConsumers)) { - toolsChangeConsumersFinal.addAll(toolsChangeConsumers); - } - notificationHandlers.put(McpSchema.METHOD_NOTIFICATION_TOOLS_LIST_CHANGED, - toolsChangeNotificationHandler(toolsChangeConsumersFinal)); - - // Resources Change Notification - List>> resourcesChangeConsumersFinal = new ArrayList<>(); - resourcesChangeConsumersFinal.add((notification) -> logger.info("Resources changed: {}", notification)); - if (!Utils.isEmpty(resourcesChangeConsumers)) { - resourcesChangeConsumersFinal.addAll(resourcesChangeConsumers); - } - notificationHandlers.put(McpSchema.METHOD_NOTIFICATION_RESOURCES_LIST_CHANGED, - resourcesChangeNotificationHandler(resourcesChangeConsumersFinal)); - - // Prompts Change Notification - List>> promptsChangeConsumersFinal = new ArrayList<>(); - promptsChangeConsumersFinal.add((notification) -> logger.info("Prompts changed: {}", notification)); - if (!Utils.isEmpty(promptsChangeConsumers)) { - promptsChangeConsumersFinal.addAll(promptsChangeConsumers); - } - notificationHandlers.put(McpSchema.METHOD_NOTIFICATION_PROMPTS_LIST_CHANGED, - promptsChangeNotificationHandler(promptsChangeConsumersFinal)); - - // Utility Logging Notification - List> loggingConsumersFinal = new ArrayList<>(); - loggingConsumersFinal.add((notification) -> logger.info("Logging: {}", notification)); - if (!Utils.isEmpty(loggingConsumers)) { - loggingConsumersFinal.addAll(loggingConsumers); - } - notificationHandlers.put(McpSchema.METHOD_NOTIFICATION_MESSAGE, - loggingNotificationHandler(loggingConsumersFinal)); - - this.mcpSession = new DefaultMcpSession(requestTimeout, transport, requestHandlers, notificationHandlers); - - } - // -------------------------- // Lifecycle // -------------------------- @@ -587,32 +483,6 @@ public class McpAsyncClient { LIST_TOOLS_RESULT_TYPE_REF); } - /** - * Creates a notification handler for tools/list_changed notifications from the - * server. When the server's available tools change, it sends a notification to inform - * connected clients. This handler automatically fetches the updated tool list and - * distributes it to all registered consumers. - * @param toolsChangeConsumers List of consumers that will be notified when the tools - * list changes. Each consumer receives the complete updated list of tools. - * @return A NotificationHandler that processes tools/list_changed notifications by: - * 1. Fetching the current list of tools from the server 2. Distributing the updated - * list to all registered consumers 3. Handling any errors that occur during this - * process - */ - @Deprecated - private NotificationHandler toolsChangeNotificationHandler( - List>> toolsChangeConsumers) { - - return params -> listTools().flatMap(listToolsResult -> Mono.fromRunnable(() -> { - for (Consumer> toolsChangeConsumer : toolsChangeConsumers) { - toolsChangeConsumer.accept(listToolsResult.tools()); - } - }).subscribeOn(Schedulers.boundedElastic())).onErrorResume(error -> { - logger.error("Error handling tools list change notification", error); - return Mono.empty(); - }).then(); // Convert to Mono - } - /** * Creates a notification handler for tools/list_changed notifications from the * server. When the server's available tools change, it sends a notification to inform @@ -745,20 +615,6 @@ public class McpAsyncClient { VOID_TYPE_REFERENCE); } - @Deprecated - private NotificationHandler resourcesChangeNotificationHandler( - List>> resourcesChangeConsumers) { - - return params -> listResources().flatMap(listResourcesResult -> Mono.fromRunnable(() -> { - for (Consumer> resourceChangeConsumer : resourcesChangeConsumers) { - resourceChangeConsumer.accept(listResourcesResult.resources()); - } - }).subscribeOn(Schedulers.boundedElastic())).onErrorResume(error -> { - logger.error("Error handling resources list change notification", error); - return Mono.empty(); - }).then(); - } - private NotificationHandler asyncResourcesChangeNotificationHandler( List, Mono>> resourcesChangeConsumers) { return params -> listResources().flatMap(listResourcesResult -> Flux.fromIterable(resourcesChangeConsumers) @@ -816,22 +672,6 @@ public class McpAsyncClient { return this.mcpSession.sendNotification(McpSchema.METHOD_NOTIFICATION_PROMPTS_LIST_CHANGED); } - @Deprecated - private NotificationHandler promptsChangeNotificationHandler( - List>> promptsChangeConsumers) { - - return params -> {// @formatter:off - return listPrompts().flatMap(listPromptsResult -> Mono.fromRunnable(() -> { - for (Consumer> promptChangeConsumer : promptsChangeConsumers) { - promptChangeConsumer.accept(listPromptsResult.prompts()); - } - }).subscribeOn(Schedulers.boundedElastic())).onErrorResume(error -> { - logger.error("Error handling prompts list change notification", error); - return Mono.empty(); - }).then(); // Convert to Mono - }; // @formatter:on - } - private NotificationHandler asyncPromptsChangeNotificationHandler( List, Mono>> promptsChangeConsumers) { return params -> listPrompts().flatMap(listPromptsResult -> Flux.fromIterable(promptsChangeConsumers) diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java b/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java index 7cf5341..2580ab0 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java @@ -135,262 +135,6 @@ public interface McpClient { return new AsyncSpec(transport); } - /** - * Start building an MCP client with the specified transport layer. The transport - * layer handles the low-level communication between client and server using protocols - * like stdio or Server-Sent Events (SSE). - * @param transport The transport layer implementation for MCP communication. Common - * implementations include {@code StdioClientTransport} for stdio-based communication - * and {@code SseClientTransport} for SSE-based communication. - * @return A new builder instance for configuring the client - * @throws IllegalArgumentException if transport is null - * @deprecated Use {@link #sync(ClientMcpTransport)} or - * {@link #async(ClientMcpTransport)} specification builder to configure the client - * and build an instance. - */ - @Deprecated - public static Builder using(ClientMcpTransport transport) { - return new Builder(transport); - } - - /** - * Builder class for creating and configuring MCP clients. This class follows the - * builder pattern to provide a fluent API for setting up clients with custom - * configurations. - * - *

- * The builder supports configuration of: - *

    - *
  • Transport layer for client-server communication - *
  • Request timeouts for operation boundaries - *
  • Client capabilities for feature negotiation - *
  • Client implementation details for version tracking - *
  • Root URIs for resource access - *
  • Change notification handlers for tools, resources, and prompts - *
  • Custom message sampling logic - *
- * - * @deprecated Use {@link #sync(ClientMcpTransport)} or - * {@link #async(ClientMcpTransport)} specification builder to instantiate an - * instance. - */ - @Deprecated - public static class Builder { - - private final ClientMcpTransport transport; - - private Duration requestTimeout = Duration.ofSeconds(20); // Default timeout - - private ClientCapabilities capabilities; - - private Implementation clientInfo = new Implementation("Spring AI MCP Client", "0.3.1"); - - private Map roots = new HashMap<>(); - - private List>> toolsChangeConsumers = new ArrayList<>(); - - private List>> resourcesChangeConsumers = new ArrayList<>(); - - private List>> promptsChangeConsumers = new ArrayList<>(); - - private List> loggingConsumers = new ArrayList<>(); - - private Function samplingHandler; - - private Builder(ClientMcpTransport transport) { - Assert.notNull(transport, "Transport must not be null"); - this.transport = transport; - } - - /** - * Sets the duration to wait for server responses before timing out requests. This - * timeout applies to all requests made through the client, including tool calls, - * resource access, and prompt operations. - * @param requestTimeout The duration to wait before timing out requests. Must not - * be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if requestTimeout is null - */ - public Builder requestTimeout(Duration requestTimeout) { - Assert.notNull(requestTimeout, "Request timeout must not be null"); - this.requestTimeout = requestTimeout; - return this; - } - - /** - * Sets the client capabilities that will be advertised to the server during - * connection initialization. Capabilities define what features the client - * supports, such as tool execution, resource access, and prompt handling. - * @param capabilities The client capabilities configuration. Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if capabilities is null - */ - public Builder capabilities(ClientCapabilities capabilities) { - Assert.notNull(capabilities, "Capabilities must not be null"); - this.capabilities = capabilities; - return this; - } - - /** - * Sets the client implementation information that will be shared with the server - * during connection initialization. This helps with version compatibility and - * debugging. - * @param clientInfo The client implementation details including name and version. - * Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if clientInfo is null - */ - public Builder clientInfo(Implementation clientInfo) { - Assert.notNull(clientInfo, "Client info must not be null"); - this.clientInfo = clientInfo; - return this; - } - - /** - * Sets the root URIs that this client can access. Roots define the base URIs for - * resources that the client can request from the server. For example, a root - * might be "file://workspace" for accessing workspace files. - * @param roots A list of root definitions. Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if roots is null - */ - public Builder roots(List roots) { - Assert.notNull(roots, "Roots must not be null"); - for (Root root : roots) { - this.roots.put(root.uri(), root); - } - return this; - } - - /** - * Sets the root URIs that this client can access, using a varargs parameter for - * convenience. This is an alternative to {@link #roots(List)}. - * @param roots An array of root definitions. Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if roots is null - * @see #roots(List) - */ - public Builder roots(Root... roots) { - Assert.notNull(roots, "Roots must not be null"); - for (Root root : roots) { - this.roots.put(root.uri(), root); - } - return this; - } - - /** - * Sets a custom sampling handler for processing message creation requests. The - * sampling handler can modify or validate messages before they are sent to the - * server, enabling custom processing logic. - * @param samplingHandler A function that processes message requests and returns - * results. Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if samplingHandler is null - */ - public Builder sampling(Function samplingHandler) { - Assert.notNull(samplingHandler, "Sampling handler must not be null"); - this.samplingHandler = samplingHandler; - return this; - } - - /** - * Adds a consumer to be notified when the available tools change. This allows the - * client to react to changes in the server's tool capabilities, such as tools - * being added or removed. - * @param toolsChangeConsumer A consumer that receives the updated list of - * available tools. Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if toolsChangeConsumer is null - */ - public Builder toolsChangeConsumer(Consumer> toolsChangeConsumer) { - Assert.notNull(toolsChangeConsumer, "Tools change consumer must not be null"); - this.toolsChangeConsumers.add(toolsChangeConsumer); - return this; - } - - /** - * Adds a consumer to be notified when the available resources change. This allows - * the client to react to changes in the server's resource availability, such as - * files being added or removed. - * @param resourcesChangeConsumer A consumer that receives the updated list of - * available resources. Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if resourcesChangeConsumer is null - */ - public Builder resourcesChangeConsumer(Consumer> resourcesChangeConsumer) { - Assert.notNull(resourcesChangeConsumer, "Resources change consumer must not be null"); - this.resourcesChangeConsumers.add(resourcesChangeConsumer); - return this; - } - - /** - * Adds a consumer to be notified when the available prompts change. This allows - * the client to react to changes in the server's prompt templates, such as new - * templates being added or existing ones being modified. - * @param promptsChangeConsumer A consumer that receives the updated list of - * available prompts. Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if promptsChangeConsumer is null - */ - public Builder promptsChangeConsumer(Consumer> promptsChangeConsumer) { - Assert.notNull(promptsChangeConsumer, "Prompts change consumer must not be null"); - this.promptsChangeConsumers.add(promptsChangeConsumer); - return this; - } - - /** - * Adds a consumer to be notified when logging messages are received from the - * server. This allows the client to react to log messages, such as warnings or - * errors, that are sent by the server. - * @param loggingConsumer A consumer that receives logging messages. Must not be - * null. - * @return This builder instance for method chaining - */ - public Builder loggingConsumer(Consumer loggingConsumer) { - Assert.notNull(loggingConsumer, "Logging consumer must not be null"); - this.loggingConsumers.add(loggingConsumer); - return this; - } - - /** - * Adds multiple consumers to be notified when logging messages are received from - * the server. This allows the client to react to log messages, such as warnings - * or errors, that are sent by the server. - * @param loggingConsumers A list of consumers that receive logging messages. Must - * not be null. - * @return This builder instance for method chaining - */ - public Builder loggingConsumers(List> loggingConsumers) { - Assert.notNull(loggingConsumers, "Logging consumers must not be null"); - this.loggingConsumers.addAll(loggingConsumers); - return this; - } - - /** - * Builds a synchronous MCP client that provides blocking operations. Synchronous - * clients wait for each operation to complete before returning, making them - * simpler to use but potentially less performant for concurrent operations. - * @return A new instance of {@link McpSyncClient} configured with this builder's - * settings - */ - public McpSyncClient sync() { - return new McpSyncClient(async()); - } - - /** - * Builds an asynchronous MCP client that provides non-blocking operations. - * Asynchronous clients return CompletableFuture objects immediately, allowing for - * concurrent operations and reactive programming patterns. - * @return A new instance of {@link McpAsyncClient} configured with this builder's - * settings - */ - public McpAsyncClient async() { - return new McpAsyncClient(transport, requestTimeout, clientInfo, capabilities, roots, toolsChangeConsumers, - resourcesChangeConsumers, promptsChangeConsumers, loggingConsumers, samplingHandler); - } - - } - /** * Synchronous client specification. This class follows the builder pattern to provide * a fluent API for setting up clients with custom configurations. diff --git a/mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java b/mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java index 04c6a85..9086714 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java +++ b/mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java @@ -11,29 +11,24 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; -import java.util.function.Consumer; import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; -import org.modelcontextprotocol.server.McpServer.PromptRegistration; -import org.modelcontextprotocol.server.McpServer.ResourceRegistration; -import org.modelcontextprotocol.server.McpServer.ToolRegistration; import org.modelcontextprotocol.spec.DefaultMcpSession; +import org.modelcontextprotocol.spec.DefaultMcpSession.NotificationHandler; import org.modelcontextprotocol.spec.McpError; import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.ServerMcpTransport; -import org.modelcontextprotocol.spec.DefaultMcpSession.NotificationHandler; import org.modelcontextprotocol.spec.McpSchema.CallToolResult; import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; import org.modelcontextprotocol.spec.McpSchema.LoggingLevel; import org.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification; import org.modelcontextprotocol.spec.McpSchema.Tool; +import org.modelcontextprotocol.spec.ServerMcpTransport; import org.modelcontextprotocol.util.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; -import reactor.core.scheduler.Schedulers; /** * The Model Context Protocol (MCP) server implementation that provides asynchronous @@ -183,102 +178,6 @@ public class McpAsyncServer { notificationHandlers); } - /** - * Create a new McpAsyncServer with the given transport and capabilities. - * @param mcpTransport The transport layer implementation for MCP communication - * @param serverInfo The server implementation details - * @param serverCapabilities The server capabilities - * @param tools The list of tool registrations - * @param resources The map of resource registrations - * @param resourceTemplates The list of resource templates - * @param prompts The map of prompt registrations - * @param rootsChangeConsumers The list of consumers that will be notified when the - * roots list changes - * @deprecated Use {@link McpServer#sync(ServerMcpTransport)} or - * {@link McpServer#async(ServerMcpTransport)} to create a new server instance. - */ - @Deprecated - public McpAsyncServer(ServerMcpTransport mcpTransport, McpSchema.Implementation serverInfo, - McpSchema.ServerCapabilities serverCapabilities, List tools, - Map resources, List resourceTemplates, - Map prompts, List>> rootsChangeConsumers) { - - this.protocolVersions = List.of(McpSchema.LATEST_PROTOCOL_VERSION); - this.serverInfo = serverInfo; - if (!Utils.isEmpty(tools)) { - this.tools.addAll(McpServer.mapDeprecatedTools(tools)); - } - if (!Utils.isEmpty(resources)) { - this.resources.putAll(McpServer.mapDeprecatedResources(resources)); - } - if (!Utils.isEmpty(resourceTemplates)) { - this.resourceTemplates.addAll(resourceTemplates); - } - if (!Utils.isEmpty(prompts)) { - this.prompts.putAll(McpServer.mapDeprecatedPrompts(prompts)); - } - - this.serverCapabilities = (serverCapabilities != null) ? serverCapabilities : new McpSchema.ServerCapabilities( - null, // experimental - new McpSchema.ServerCapabilities.LoggingCapabilities(), // Enable logging - // by default - !Utils.isEmpty(this.prompts) ? new McpSchema.ServerCapabilities.PromptCapabilities(false) : null, - !Utils.isEmpty(this.resources) ? new McpSchema.ServerCapabilities.ResourceCapabilities(false, false) - : null, - !Utils.isEmpty(this.tools) ? new McpSchema.ServerCapabilities.ToolCapabilities(false) : null); - - Map> requestHandlers = new HashMap<>(); - - // Initialize request handlers for standard MCP methods - requestHandlers.put(McpSchema.METHOD_INITIALIZE, initializeRequestHandler()); - - // Ping MUST respond with an empty data, but not NULL response. - requestHandlers.put(McpSchema.METHOD_PING, (params) -> Mono.just("")); - - // Add tools API handlers if the tool capability is enabled - if (this.serverCapabilities.tools() != null) { - requestHandlers.put(McpSchema.METHOD_TOOLS_LIST, toolsListRequestHandler()); - requestHandlers.put(McpSchema.METHOD_TOOLS_CALL, toolsCallRequestHandler()); - } - - // Add resources API handlers if provided - if (!Utils.isEmpty(this.resources)) { - requestHandlers.put(McpSchema.METHOD_RESOURCES_LIST, resourcesListRequestHandler()); - requestHandlers.put(McpSchema.METHOD_RESOURCES_READ, resourcesReadRequestHandler()); - } - - // Add resource templates API handlers if provided. - if (!Utils.isEmpty(this.resourceTemplates)) { - requestHandlers.put(McpSchema.METHOD_RESOURCES_TEMPLATES_LIST, resourceTemplateListRequestHandler()); - } - - // Add prompts API handlers if provider exists - if (!Utils.isEmpty(this.prompts)) { - requestHandlers.put(McpSchema.METHOD_PROMPT_LIST, promptsListRequestHandler()); - requestHandlers.put(McpSchema.METHOD_PROMPT_GET, promptsGetRequestHandler()); - } - - // Add logging API handlers if the logging capability is enabled - if (this.serverCapabilities.logging() != null) { - requestHandlers.put(McpSchema.METHOD_LOGGING_SET_LEVEL, setLoggerRequestHandler()); - } - - Map notificationHandlers = new HashMap<>(); - - notificationHandlers.put(McpSchema.METHOD_NOTIFICATION_INITIALIZED, (params) -> Mono.empty()); - - if (Utils.isEmpty(rootsChangeConsumers)) { - rootsChangeConsumers = List.of((roots) -> logger - .warn("Roots list changed notification, but no consumers provided. Roots list changed: {}", roots)); - } - notificationHandlers.put(McpSchema.METHOD_NOTIFICATION_ROOTS_LIST_CHANGED, - rootsListChnagedNotificationHandler(rootsChangeConsumers)); - - this.transport = mcpTransport; - this.mcpSession = new DefaultMcpSession(Duration.ofSeconds(10), mcpTransport, requestHandlers, - notificationHandlers); - } - // --------------------------------------- // Lifecycle Management // --------------------------------------- @@ -309,33 +208,6 @@ public class McpAsyncServer { }; } - @Deprecated - private DefaultMcpSession.RequestHandler initializeRequestHandler() { - return params -> { - McpSchema.InitializeRequest initializeRequest = transport.unmarshalFrom(params, - new TypeReference() { - }); - - this.clientCapabilities = initializeRequest.capabilities(); - this.clientInfo = initializeRequest.clientInfo(); - - logger.info("Client initialize request - Protocol: {}, Capabilities: {}, Info: {}", - initializeRequest.protocolVersion(), initializeRequest.capabilities(), - initializeRequest.clientInfo()); - - if (!McpSchema.LATEST_PROTOCOL_VERSION.equals(initializeRequest.protocolVersion())) { - return Mono.error(new McpError( - "Unsupported protocol version from client: " + initializeRequest.protocolVersion())) - .publishOn(Schedulers.boundedElastic()); - } - - return Mono - .just(new McpSchema.InitializeResult(McpSchema.LATEST_PROTOCOL_VERSION, this.serverCapabilities, - this.serverInfo, null)) - .publishOn(Schedulers.boundedElastic()); - }; - } - /** * Get the server capabilities that define the supported features and functionality. * @return The server capabilities @@ -404,20 +276,6 @@ public class McpAsyncServer { LIST_ROOTS_RESULT_TYPE_REF); } - @Deprecated - private NotificationHandler rootsListChnagedNotificationHandler( - List>> rootsChangeConsumers) { - - return params -> { - return listRoots().flatMap(listRootsResult -> Mono.fromRunnable(() -> { - rootsChangeConsumers.stream().forEach(consumer -> consumer.accept(listRootsResult.roots())); - }).subscribeOn(Schedulers.boundedElastic())).onErrorResume(error -> { - logger.error("Error handling roots list change notification", error); - return Mono.empty(); - }).then(); - }; - } - private NotificationHandler asyncRootsListChangedNotificationHandler( List, Mono>> rootsChangeConsumers) { return params -> listRoots().flatMap(listRootsResult -> Flux.fromIterable(rootsChangeConsumers) @@ -469,40 +327,6 @@ public class McpAsyncServer { }); } - /** - * Add a new tool registration at runtime. - * @param toolRegistration The tool registration to add - * @return Mono that completes when clients have been notified of the change - * @deprecated Use {@link #addTool(McpServerFeatures.AsyncToolRegistration)}. - */ - @Deprecated - public Mono addTool(ToolRegistration toolRegistration) { - if (toolRegistration == null) { - return Mono.error(new McpError("Tool registration must not be null")); - } - if (toolRegistration.tool() == null) { - return Mono.error(new McpError("Tool must not be null")); - } - if (toolRegistration.call() == null) { - return Mono.error(new McpError("Tool call handler must not be null")); - } - if (this.serverCapabilities.tools() == null) { - return Mono.error(new McpError("Server must be configured with tool capabilities")); - } - - // Check for duplicate tool names - if (this.tools.stream().anyMatch(th -> th.tool().name().equals(toolRegistration.tool().name()))) { - return Mono.error(new McpError("Tool with name '" + toolRegistration.tool().name() + "' already exists")); - } - - this.tools.add(McpServer.mapDeprecatedTool(toolRegistration)); - logger.info("Added tool handler: {}", toolRegistration.tool().name()); - if (this.serverCapabilities.tools().listChanged()) { - return notifyToolsListChanged(); - } - return Mono.empty(); - } - /** * Remove a tool handler at runtime. * @param toolName The name of the tool handler to remove @@ -595,35 +419,6 @@ public class McpAsyncServer { }); } - /** - * Add a new resource handler at runtime. - * @param resourceHandler The resource handler to add - * @return Mono that completes when clients have been notified of the change - * @deprecated Use {@link #addResource(McpServerFeatures.AsyncResourceRegistration)}. - */ - @Deprecated - public Mono addResource(ResourceRegistration resourceHandler) { - if (resourceHandler == null || resourceHandler.resource() == null) { - return Mono.error(new McpError("Resource must not be null")); - } - - if (this.serverCapabilities.resources() == null) { - return Mono.error(new McpError("Server must be configured with resource capabilities")); - } - - if (this.resources.containsKey(resourceHandler.resource().uri())) { - return Mono - .error(new McpError("Resource with URI '" + resourceHandler.resource().uri() + "' already exists")); - } - - this.resources.put(resourceHandler.resource().uri(), McpServer.mapDeprecatedResource(resourceHandler)); - logger.info("Added resource handler: {}", resourceHandler.resource().uri()); - if (this.serverCapabilities.resources().listChanged()) { - return notifyResourcesListChanged(); - } - return Mono.empty(); - } - /** * Remove a resource handler at runtime. * @param resourceUri The URI of the resource handler to remove @@ -724,38 +519,6 @@ public class McpAsyncServer { }); } - /** - * Add a new prompt handler at runtime. - * @param promptRegistration The prompt handler to add - * @return Mono that completes when clients have been notified of the change - * @deprecated Use {@link #addPrompt(McpServerFeatures.AsyncPromptRegistration)}. - */ - @Deprecated - public Mono addPrompt(PromptRegistration promptRegistration) { - if (promptRegistration == null) { - return Mono.error(new McpError("Prompt registration must not be null")); - } - if (this.serverCapabilities.prompts() == null) { - return Mono.error(new McpError("Server must be configured with prompt capabilities")); - } - - if (this.prompts.containsKey(promptRegistration.prompt().name())) { - return Mono - .error(new McpError("Prompt with name '" + promptRegistration.prompt().name() + "' already exists")); - } - - this.prompts.put(promptRegistration.prompt().name(), McpServer.mapDeprecatedPrompt(promptRegistration)); - - logger.info("Added prompt handler: {}", promptRegistration.prompt().name()); - - // Servers that declared the listChanged capability SHOULD send a notification, - // when the list of available prompts changes - if (this.serverCapabilities.prompts().listChanged()) { - return notifyPromptsListChanged(); - } - return Mono.empty(); - } - /** * Remove a prompt handler at runtime. * @param promptName The name of the prompt handler to remove diff --git a/mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java b/mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java index 7564f00..870282f 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java +++ b/mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java @@ -10,16 +10,14 @@ import java.util.List; import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; -import java.util.stream.Collectors; import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpTransport; -import org.modelcontextprotocol.spec.ServerMcpTransport; import org.modelcontextprotocol.spec.McpSchema.CallToolResult; import org.modelcontextprotocol.spec.McpSchema.ResourceTemplate; +import org.modelcontextprotocol.spec.McpTransport; +import org.modelcontextprotocol.spec.ServerMcpTransport; import org.modelcontextprotocol.util.Assert; import reactor.core.publisher.Mono; -import reactor.core.scheduler.Schedulers; /** * Factory class for creating Model Context Protocol (MCP) servers. MCP servers expose @@ -138,18 +136,6 @@ public interface McpServer { return new AsyncSpec(transport); } - /** - * Start building an MCP server with the specified transport. - * @param transport The transport layer implementation for MCP communication - * @return A new builder instance - * @deprecated Use {@link #sync(ServerMcpTransport)} or - * {@link #async(ServerMcpTransport)} to create a server instance. - */ - @Deprecated - public static Builder using(ServerMcpTransport transport) { - return new Builder(transport); - } - /** * Asynchronous server specification. */ @@ -908,547 +894,4 @@ public interface McpServer { } - /** - * Builder class for creating MCP servers with custom configuration. - * - * @deprecated Use {@link #sync(ServerMcpTransport)} or - * {@link #async(ServerMcpTransport)} to create a server. - */ - @Deprecated - public static class Builder { - - private static final McpSchema.Implementation DEFAULT_SERVER_INFO = new McpSchema.Implementation("mcp-server", - "1.0.0"); - - private final ServerMcpTransport transport; - - private McpSchema.Implementation serverInfo = DEFAULT_SERVER_INFO; - - private McpSchema.ServerCapabilities serverCapabilities; - - /** - * The Model Context Protocol (MCP) allows servers to expose tools that can be - * invoked by language models. Tools enable models to interact with external - * systems, such as querying databases, calling APIs, or performing computations. - * Each tool is uniquely identified by a name and includes metadata describing its - * schema. - */ - private final List tools = new ArrayList<>(); - - /** - * The Model Context Protocol (MCP) provides a standardized way for servers to - * expose resources to clients. Resources allow servers to share data that - * provides context to language models, such as files, database schemas, or - * application-specific information. Each resource is uniquely identified by a - * URI. - */ - private Map resources = new HashMap<>(); - - private List resourceTemplates = new ArrayList<>(); - - /** - * The Model Context Protocol (MCP) provides a standardized way for servers to - * expose prompt templates to clients. Prompts allow servers to provide structured - * messages and instructions for interacting with language models. Clients can - * discover available prompts, retrieve their contents, and provide arguments to - * customize them. - */ - private Map prompts = new HashMap<>(); - - private List>> rootsChangeConsumers = new ArrayList<>(); - - private Builder(ServerMcpTransport transport) { - Assert.notNull(transport, "Transport must not be null"); - this.transport = transport; - } - - /** - * Sets the server implementation information that will be shared with clients - * during connection initialization. This helps with version compatibility, - * debugging, and server identification. - * @param serverInfo The server implementation details including name and version. - * Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if serverInfo is null - */ - public Builder serverInfo(McpSchema.Implementation serverInfo) { - Assert.notNull(serverInfo, "Server info must not be null"); - this.serverInfo = serverInfo; - return this; - } - - /** - * Sets the server implementation information using name and version strings. This - * is a convenience method alternative to - * {@link #serverInfo(McpSchema.Implementation)}. - * @param name The server name. Must not be null or empty. - * @param version The server version. Must not be null or empty. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if name or version is null or empty - * @see #serverInfo(McpSchema.Implementation) - */ - public Builder serverInfo(String name, String version) { - Assert.hasText(name, "Name must not be null or empty"); - Assert.hasText(version, "Version must not be null or empty"); - this.serverInfo = new McpSchema.Implementation(name, version); - return this; - } - - /** - * Sets the server capabilities that will be advertised to clients during - * connection initialization. Capabilities define what features the server - * supports, such as: - *
    - *
  • Tool execution - *
  • Resource access - *
  • Prompt handling - *
  • Streaming responses - *
  • Batch operations - *
- * @param serverCapabilities The server capabilities configuration. Must not be - * null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if serverCapabilities is null - */ - public Builder capabilities(McpSchema.ServerCapabilities serverCapabilities) { - this.serverCapabilities = serverCapabilities; - return this; - } - - /** - * Adds a single tool with its implementation handler to the server. This is a - * convenience method for registering individual tools without creating a - * {@link ToolRegistration} explicitly. - * - *

- * Example usage:

{@code
-		 * .tool(
-		 *     new Tool("calculator", "Performs calculations", schema),
-		 *     args -> new CallToolResult("Result: " + calculate(args))
-		 * )
-		 * }
- * @param tool The tool definition including name, description, and schema. Must - * not be null. - * @param handler The function that implements the tool's logic. Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if tool or handler is null - */ - public Builder tool(McpSchema.Tool tool, Function, McpSchema.CallToolResult> handler) { - Assert.notNull(tool, "Tool must not be null"); - Assert.notNull(handler, "Handler must not be null"); - - this.tools.add(new ToolRegistration(tool, handler)); - - return this; - } - - /** - * Adds multiple tools with their handlers to the server using a List. This method - * is useful when tools are dynamically generated or loaded from a configuration - * source. - * @param toolRegistrations The list of tool registrations to add. Must not be - * null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if toolRegistrations is null - * @see #tools(ToolRegistration...) - */ - public Builder tools(List toolRegistrations) { - Assert.notNull(toolRegistrations, "Tool handlers list must not be null"); - this.tools.addAll(toolRegistrations); - return this; - } - - /** - * Adds multiple tools with their handlers to the server using varargs. This - * method provides a convenient way to register multiple tools inline. - * - *

- * Example usage:

{@code
-		 * .tools(
-		 *     new ToolRegistration(calculatorTool, calculatorHandler),
-		 *     new ToolRegistration(weatherTool, weatherHandler),
-		 *     new ToolRegistration(fileManagerTool, fileManagerHandler)
-		 * )
-		 * }
- * @param toolRegistrations The tool registrations to add. Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if toolRegistrations is null - * @see #tools(List) - */ - public Builder tools(ToolRegistration... toolRegistrations) { - for (ToolRegistration tool : toolRegistrations) { - this.tools.add(tool); - } - return this; - } - - /** - * Registers multiple resources with their handlers using a Map. This method is - * useful when resources are dynamically generated or loaded from a configuration - * source. - * @param resourceRegsitrations Map of resource name to registration. Must not be - * null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if resourceRegsitrations is null - * @see #resources(ResourceRegistration...) - */ - public Builder resources(Map resourceRegsitrations) { - Assert.notNull(resourceRegsitrations, "Resource handlers map must not be null"); - this.resources.putAll(resourceRegsitrations); - return this; - } - - /** - * Registers multiple resources with their handlers using a List. This method is - * useful when resources need to be added in bulk from a collection. - * @param resourceRegsitrations List of resource registrations. Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if resourceRegsitrations is null - * @see #resources(ResourceRegistration...) - */ - public Builder resources(List resourceRegsitrations) { - Assert.notNull(resourceRegsitrations, "Resource handlers list must not be null"); - for (ResourceRegistration resource : resourceRegsitrations) { - this.resources.put(resource.resource().uri(), resource); - } - return this; - } - - /** - * Registers multiple resources with their handlers using varargs. This method - * provides a convenient way to register multiple resources inline. - * - *

- * Example usage:

{@code
-		 * .resources(
-		 *     new ResourceRegistration(fileResource, fileHandler),
-		 *     new ResourceRegistration(dbResource, dbHandler),
-		 *     new ResourceRegistration(apiResource, apiHandler)
-		 * )
-		 * }
- * @param resourceRegistrations The resource registrations to add. Must not be - * null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if resourceRegistrations is null - */ - public Builder resources(ResourceRegistration... resourceRegistrations) { - Assert.notNull(resourceRegistrations, "Resource handlers list must not be null"); - for (ResourceRegistration resource : resourceRegistrations) { - this.resources.put(resource.resource().uri(), resource); - } - return this; - } - - /** - * Sets the resource templates that define patterns for dynamic resource access. - * Templates use URI patterns with placeholders that can be filled at runtime. - * - *

- * Example usage:

{@code
-		 * .resourceTemplates(
-		 *     new ResourceTemplate("file://{path}", "Access files by path"),
-		 *     new ResourceTemplate("db://{table}/{id}", "Access database records")
-		 * )
-		 * }
- * @param resourceTemplates List of resource templates. If null, clears existing - * templates. - * @return This builder instance for method chaining - * @see #resourceTemplates(ResourceTemplate...) - */ - public Builder resourceTemplates(List resourceTemplates) { - this.resourceTemplates = resourceTemplates; - return this; - } - - /** - * Sets the resource templates using varargs for convenience. This is an - * alternative to {@link #resourceTemplates(List)}. - * @param resourceTemplates The resource templates to set. - * @return This builder instance for method chaining - * @see #resourceTemplates(List) - */ - public Builder resourceTemplates(ResourceTemplate... resourceTemplates) { - for (ResourceTemplate resourceTemplate : resourceTemplates) { - this.resourceTemplates.add(resourceTemplate); - } - return this; - } - - /** - * Registers multiple prompts with their handlers using a Map. This method is - * useful when prompts are dynamically generated or loaded from a configuration - * source. - * - *

- * Example usage:

{@code
-		 * Map prompts = new HashMap<>();
-		 * prompts.put("analysis", new PromptRegistration(
-		 *     new Prompt("analysis", "Code analysis template"),
-		 *     request -> new GetPromptResult(generateAnalysisPrompt(request))
-		 * ));
-		 * .prompts(prompts)
-		 * }
- * @param prompts Map of prompt name to registration. Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if prompts is null - */ - public Builder prompts(Map prompts) { - this.prompts.putAll(prompts); - return this; - } - - /** - * Registers multiple prompts with their handlers using a List. This method is - * useful when prompts need to be added in bulk from a collection. - * @param prompts List of prompt registrations. Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if prompts is null - * @see #prompts(PromptRegistration...) - */ - public Builder prompts(List prompts) { - for (PromptRegistration prompt : prompts) { - this.prompts.put(prompt.prompt().name(), prompt); - } - return this; - } - - /** - * Registers multiple prompts with their handlers using varargs. This method - * provides a convenient way to register multiple prompts inline. - * - *

- * Example usage:

{@code
-		 * .prompts(
-		 *     new PromptRegistration(analysisPrompt, analysisHandler),
-		 *     new PromptRegistration(summaryPrompt, summaryHandler),
-		 *     new PromptRegistration(reviewPrompt, reviewHandler)
-		 * )
-		 * }
- * @param prompts The prompt registrations to add. Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if prompts is null - */ - public Builder prompts(PromptRegistration... prompts) { - for (PromptRegistration prompt : prompts) { - this.prompts.put(prompt.prompt().name(), prompt); - } - return this; - } - - /** - * Registers a consumer that will be notified when the list of roots changes. This - * is useful for updating resource availability dynamically, such as when new - * files are added or removed. - * @param consumer The consumer to register. Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if consumer is null - */ - public Builder rootsChangeConsumer(Consumer> consumer) { - Assert.notNull(consumer, "Consumer must not be null"); - this.rootsChangeConsumers.add(consumer); - return this; - } - - /** - * Registers multiple consumers that will be notified when the list of roots - * changes. This method is useful when multiple consumers need to be registered at - * once. - * @param consumers The list of consumers to register. Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if consumers is null - */ - public Builder rootsChangeConsumers(List>> consumers) { - Assert.notNull(consumers, "Consumers list must not be null"); - this.rootsChangeConsumers.addAll(consumers); - return this; - } - - /** - * Registers multiple consumers that will be notified when the list of roots - * changes using varargs. This method provides a convenient way to register - * multiple consumers inline. - * @param consumers The consumers to register. Must not be null. - * @return This builder instance for method chaining - * @throws IllegalArgumentException if consumers is null - */ - public Builder rootsChangeConsumers(Consumer>... consumers) { - for (Consumer> consumer : consumers) { - this.rootsChangeConsumers.add(consumer); - } - return this; - } - - /** - * Builds a synchronous MCP server that provides blocking operations. Synchronous - * servers process each request to completion before handling the next one, making - * them simpler to implement but potentially less performant for concurrent - * operations. - * @return A new instance of {@link McpSyncServer} configured with this builder's - * settings - * @deprecated Use {@link #sync(ServerMcpTransport)}. - */ - @Deprecated - public McpSyncServer sync() { - return new McpSyncServer(async()); - } - - /** - * Builds an asynchronous MCP server that provides non-blocking operations. - * Asynchronous servers can handle multiple requests concurrently using - * CompletableFuture, making them more efficient for high-concurrency scenarios - * but more complex to implement. - * @return A new instance of {@link McpAsyncServer} configured with this builder's - * settings - * @deprecated Use {@link #async(ServerMcpTransport)} - */ - @Deprecated - public McpAsyncServer async() { - return new McpAsyncServer(transport, serverInfo, serverCapabilities, tools, resources, resourceTemplates, - prompts, rootsChangeConsumers); - } - - } - - /** - * Registration of a tool with its handler function. Tools are the primary way for MCP - * servers to expose functionality to AI models. Each tool represents a specific - * capability, such as: - *
    - *
  • Performing calculations - *
  • Accessing external APIs - *
  • Querying databases - *
  • Manipulating files - *
  • Executing system commands - *
- * - *

- * Example tool registration:

{@code
-	 * new ToolRegistration(
-	 *     new Tool(
-	 *         "calculator",
-	 *         "Performs mathematical calculations",
-	 *         new JsonSchemaObject()
-	 *             .required("expression")
-	 *             .property("expression", JsonSchemaType.STRING)
-	 *     ),
-	 *     args -> {
-	 *         String expr = (String) args.get("expression");
-	 *         return new CallToolResult("Result: " + evaluate(expr));
-	 *     }
-	 * )
-	 * }
- * - * @param tool The tool definition including name, description, and parameter schema - * @param call The function that implements the tool's logic, receiving arguments and - * returning results - * @deprecated Use {@link McpServerFeatures.SyncToolRegistration} or - * {@link McpServerFeatures.AsyncToolRegistration}. - */ - @Deprecated - public static record ToolRegistration(McpSchema.Tool tool, - Function, McpSchema.CallToolResult> call) { - } - - /** - * Registration of a resource with its handler function. Resources provide context to - * AI models by exposing data such as: - *
    - *
  • File contents - *
  • Database records - *
  • API responses - *
  • System information - *
  • Application state - *
- * - *

- * Example resource registration:

{@code
-	 * new ResourceRegistration(
-	 *     new Resource("docs", "Documentation files", "text/markdown"),
-	 *     request -> {
-	 *         String content = readFile(request.getPath());
-	 *         return new ReadResourceResult(content);
-	 *     }
-	 * )
-	 * }
- * - * @param resource The resource definition including name, description, and MIME type - * @param readHandler The function that handles resource read requests - * @deprecated Use {@link McpServerFeatures.SyncResourceRegistration} or - * {@link McpServerFeatures.AsyncResourceRegistration}. - */ - @Deprecated - public static record ResourceRegistration(McpSchema.Resource resource, - Function readHandler) { - } - - /** - * Registration of a prompt template with its handler function. Prompts provide - * structured templates for AI model interactions, supporting: - *
    - *
  • Consistent message formatting - *
  • Parameter substitution - *
  • Context injection - *
  • Response formatting - *
  • Instruction templating - *
- * - *

- * Example prompt registration:

{@code
-	 * new PromptRegistration(
-	 *     new Prompt("analyze", "Code analysis template"),
-	 *     request -> {
-	 *         String code = request.getArguments().get("code");
-	 *         return new GetPromptResult(
-	 *             "Analyze this code:\n\n" + code + "\n\nProvide feedback on:"
-	 *         );
-	 *     }
-	 * )
-	 * }
- * - * @param prompt The prompt definition including name and description - * @param promptHandler The function that processes prompt requests and returns - * formatted templates - * @deprecated Use {@link McpServerFeatures.SyncPromptRegistration} or - * {@link McpServerFeatures.AsyncPromptRegistration}. - */ - @Deprecated - public static record PromptRegistration(McpSchema.Prompt prompt, - Function promptHandler) { - } - - static McpServerFeatures.AsyncToolRegistration mapDeprecatedTool(ToolRegistration oldTool) { - return new McpServerFeatures.AsyncToolRegistration(oldTool.tool(), - map -> Mono.fromCallable(() -> oldTool.call().apply(map)).subscribeOn(Schedulers.boundedElastic())); - } - - static McpServerFeatures.AsyncResourceRegistration mapDeprecatedResource(ResourceRegistration oldResource) { - return new McpServerFeatures.AsyncResourceRegistration(oldResource.resource(), - req -> Mono.fromCallable(() -> oldResource.readHandler().apply(req)) - .subscribeOn(Schedulers.boundedElastic())); - } - - static McpServerFeatures.AsyncPromptRegistration mapDeprecatedPrompt(PromptRegistration oldPrompt) { - return new McpServerFeatures.AsyncPromptRegistration(oldPrompt.prompt(), - req -> Mono.fromCallable(() -> oldPrompt.promptHandler().apply(req)) - .subscribeOn(Schedulers.boundedElastic())); - } - - static List mapDeprecatedTools(List oldTools) { - return oldTools.stream().map(McpServer::mapDeprecatedTool).toList(); - } - - static Map mapDeprecatedResources( - Map oldResources) { - return oldResources.entrySet() - .stream() - .collect(Collectors.toMap(Map.Entry::getKey, e -> mapDeprecatedResource(e.getValue()))); - } - - static Map mapDeprecatedPrompts( - Map oldPrompts) { - return oldPrompts.entrySet() - .stream() - .collect(Collectors.toMap(Map.Entry::getKey, e -> mapDeprecatedPrompt(e.getValue()))); - } - } diff --git a/mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java b/mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java index 898b1c6..aab1457 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java +++ b/mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java @@ -4,9 +4,6 @@ package org.modelcontextprotocol.server; -import org.modelcontextprotocol.server.McpServer.PromptRegistration; -import org.modelcontextprotocol.server.McpServer.ResourceRegistration; -import org.modelcontextprotocol.server.McpServer.ToolRegistration; import org.modelcontextprotocol.spec.McpError; import org.modelcontextprotocol.spec.McpSchema; import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; @@ -93,16 +90,6 @@ public class McpSyncServer { this.asyncServer.addTool(McpServerFeatures.AsyncToolRegistration.fromSync(toolHandler)).block(); } - /** - * Add a new tool handler. - * @param toolHandler The tool handler to add - * @deprecated Use {@link #addTool(McpServerFeatures.SyncToolRegistration)}. - */ - @Deprecated - public void addTool(ToolRegistration toolHandler) { - this.asyncServer.addTool(toolHandler).block(); - } - /** * Remove a tool handler. * @param toolName The name of the tool handler to remove @@ -119,16 +106,6 @@ public class McpSyncServer { this.asyncServer.addResource(McpServerFeatures.AsyncResourceRegistration.fromSync(resourceHandler)).block(); } - /** - * Add a new resource handler. - * @param resourceHandler The resource handler to add - * @deprecated Use {@link #addResource(McpServerFeatures.SyncResourceRegistration)}. - */ - @Deprecated - public void addResource(ResourceRegistration resourceHandler) { - this.asyncServer.addResource(resourceHandler).block(); - } - /** * Remove a resource handler. * @param resourceUri The URI of the resource handler to remove @@ -145,16 +122,6 @@ public class McpSyncServer { this.asyncServer.addPrompt(McpServerFeatures.AsyncPromptRegistration.fromSync(promptRegistration)).block(); } - /** - * Add a new prompt handler. - * @param promptRegistration The prompt registration to add - * @deprecated Use {@link #addPrompt(McpServerFeatures.SyncPromptRegistration)}. - */ - @Deprecated - public void addPrompt(PromptRegistration promptRegistration) { - this.asyncServer.addPrompt(promptRegistration).block(); - } - /** * Remove a prompt handler. * @param promptName The name of the prompt handler to remove From 0f62a508cef04d74159c9c773b04caf776fb40eb Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Mon, 27 Jan 2025 23:19:11 +0100 Subject: [PATCH 006/426] reomove old GH actions --- .../artifactory-milestone-release.yml | 38 ----------- .github/workflows/artifactory-staging.yml | 38 ----------- .github/workflows/continuous-integration.yml | 65 ------------------- .github/workflows/deploy-docs.yml | 28 -------- .github/workflows/maven-central-release.yml | 62 ------------------ 5 files changed, 231 deletions(-) delete mode 100644 .github/workflows/artifactory-milestone-release.yml delete mode 100644 .github/workflows/artifactory-staging.yml delete mode 100644 .github/workflows/continuous-integration.yml delete mode 100644 .github/workflows/deploy-docs.yml delete mode 100644 .github/workflows/maven-central-release.yml diff --git a/.github/workflows/artifactory-milestone-release.yml b/.github/workflows/artifactory-milestone-release.yml deleted file mode 100644 index 98697f9..0000000 --- a/.github/workflows/artifactory-milestone-release.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Artifactory Milestone Release - -on: - workflow_dispatch: - inputs: - releaseVersion: - description: "Milestone release version" - required: true - -jobs: - build: - name: Release milestone to Artifactory - runs-on: ubuntu-latest - steps: - - name: Checkout source code - uses: actions/checkout@v4 - - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - java-version: '17' - distribution: 'temurin' - cache: 'maven' - - - name: Capture release version - run: echo RELEASE_VERSION=${{ github.event.inputs.releaseVersion }} >> $GITHUB_ENV - - - name: Update release version - run: mvn versions:set -DgenerateBackupPoms=false -DnewVersion=$RELEASE_VERSION - - - name: Enforce release rules - run: mvn org.apache.maven.plugins:maven-enforcer-plugin:enforce -Drules=requireReleaseDeps - - - name: Build with Maven and deploy to Artifactory's milestone repository - env: - ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} - ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }} - run: mvn -P artifactory-milestone -P javadoc -s settings.xml --batch-mode -Dmaven.test.skip=true deploy diff --git a/.github/workflows/artifactory-staging.yml b/.github/workflows/artifactory-staging.yml deleted file mode 100644 index 04493b2..0000000 --- a/.github/workflows/artifactory-staging.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Artifactory Staging - -on: - workflow_dispatch: - inputs: - releaseVersion: - description: "Release version" - required: true - -jobs: - build: - name: Stage release to Artifactory - runs-on: ubuntu-latest - steps: - - name: Checkout source code - uses: actions/checkout@v4 - - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - java-version: '17' - distribution: 'temurin' - cache: 'maven' - - - name: Capture release version - run: echo RELEASE_VERSION=${{ github.event.inputs.releaseVersion }} >> $GITHUB_ENV - - - name: Update release version - run: mvn versions:set -DgenerateBackupPoms=false -DnewVersion=$RELEASE_VERSION - - - name: Enforce release rules - run: mvn org.apache.maven.plugins:maven-enforcer-plugin:enforce -Drules=requireReleaseDeps - - - name: Build with Maven and deploy to Artifactory staging repository - env: - ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} - ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }} - run: mvn -P artifactory-staging -P javadoc -s settings.xml --batch-mode -Dmaven.test.skip=true deploy diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml deleted file mode 100644 index e119a70..0000000 --- a/.github/workflows/continuous-integration.yml +++ /dev/null @@ -1,65 +0,0 @@ -name: CI/CD build - -on: - push: - branches: [ "main" ] - -jobs: - build: - name: Build branch - runs-on: ubuntu-latest - steps: - - name: Checkout source code - uses: actions/checkout@v4 - - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - java-version: '17' - distribution: 'temurin' - cache: 'maven' - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Build with Maven and deploy to Artifactory - env: - ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} - ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }} - run: | - mvn -s settings.xml -Pjavadoc --batch-mode --update-snapshots deploy - - - name: Generate Java docs - run: mvn -Pjavadoc -B javadoc:aggregate - - - name: Capture project version - run: echo PROJECT_VERSION=$(mvn help:evaluate -Dexpression=project.version --quiet -DforceStdout) >> $GITHUB_ENV - -# - name: Generate assembly -# working-directory: spring-ai-docs -# run: mvn assembly:single - - -# - name: Setup SSH key -# env: -# DOCS_SSH_KEY: ${{ secrets.DOCS_SSH_KEY }} -# DOCS_SSH_HOST_KEY: ${{ secrets.DOCS_SSH_HOST_KEY }} -# run: | -# mkdir "$HOME/.ssh" -# echo "$DOCS_SSH_KEY" > "$HOME/.ssh/key" -# chmod 600 "$HOME/.ssh/key" -# echo "$DOCS_SSH_HOST_KEY" > "$HOME/.ssh/known_hosts" -# -# - name: Deploy docs -# env: -# DOCS_HOST: ${{ secrets.DOCS_HOST }} -# DOCS_PATH: ${{ secrets.DOCS_PATH }} -# DOCS_USERNAME: ${{ secrets.DOCS_USERNAME }} -# working-directory: spring-ai-docs/target -# run: | -# unzip spring-ai-$PROJECT_VERSION-docs.zip -# ssh -i $HOME/.ssh/key $DOCS_USERNAME@$DOCS_HOST "cd $DOCS_PATH && mkdir -p $PROJECT_VERSION" -# scp -i $HOME/.ssh/key -r api $DOCS_USERNAME@$DOCS_HOST:$DOCS_PATH/$PROJECT_VERSION - diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml deleted file mode 100644 index de69a21..0000000 --- a/.github/workflows/deploy-docs.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: Deploy Docs -on: - workflow_dispatch: - push: - branches: [main, '[0-9].[0-9].x' ] - tags: ['v[0-9].[0-9].[0-9]', 'v[0-9].[0-9].[0-9]-*'] -permissions: - actions: write -jobs: - build: - runs-on: ubuntu-latest - if: github.repository_owner == 'spring-projects-experimental' - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: docs-build - fetch-depth: 1 - - name: Dispatch (partial build) - if: github.ref_type == 'branch' - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: gh workflow run deploy-docs.yml -r $(git rev-parse --abbrev-ref HEAD) -f build-refname=${{ github.ref_name }} - - name: Dispatch (full build) - if: github.ref_type == 'tag' - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: gh workflow run deploy-docs.yml -r $(git rev-parse --abbrev-ref HEAD) \ No newline at end of file diff --git a/.github/workflows/maven-central-release.yml b/.github/workflows/maven-central-release.yml deleted file mode 100644 index d3de026..0000000 --- a/.github/workflows/maven-central-release.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: Maven Central Release - -on: - workflow_dispatch: - inputs: - releaseVersion: - description: "Release version" - required: true - -jobs: - build: - runs-on: ubuntu-latest - steps: - - - name: Capture release version - run: echo RELEASE_VERSION=${{ github.event.inputs.releaseVersion }} >> $GITHUB_ENV - - - name: Prepare directory structure - run: | - mkdir -p nexus/org/springframework/experimental/mcp-parent/$RELEASE_VERSION - mkdir -p nexus/org/springframework/experimental/mcp/$RELEASE_VERSION - mkdir -p nexus/org/springframework/experimental/spring-ai-mcp/$RELEASE_VERSION - - - name: Download release files from Artifactory - env: - ARTIFACTORY_URL: "https://repo.spring.io/libs-staging-local/org/springframework/experimental" - ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} - ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }} - run: | - echo "Downloading parent POM artifacts" - cd nexus/org/springframework/experimental/spring-ai-mcp/$RELEASE_VERSION - wget --user="$ARTIFACTORY_USERNAME" --password="$ARTIFACTORY_PASSWORD" $ARTIFACTORY_URL/spring-ai-mcp/$RELEASE_VERSION/spring-ai-mcp-$RELEASE_VERSION.pom - - echo "Downloading core artifacts" - cd ../../../../../.. - cd nexus/org/springframework/experimental/mcp/$RELEASE_VERSION - wget --user="$ARTIFACTORY_USERNAME" --password="$ARTIFACTORY_PASSWORD" $ARTIFACTORY_URL/mcp/$RELEASE_VERSION/mcp-$RELEASE_VERSION.pom - wget --user="$ARTIFACTORY_USERNAME" --password="$ARTIFACTORY_PASSWORD" $ARTIFACTORY_URL/mcp/$RELEASE_VERSION/mcp-$RELEASE_VERSION.jar - wget --user="$ARTIFACTORY_USERNAME" --password="$ARTIFACTORY_PASSWORD" $ARTIFACTORY_URL/mcp/$RELEASE_VERSION/mcp-$RELEASE_VERSION-javadoc.jar - wget --user="$ARTIFACTORY_USERNAME" --password="$ARTIFACTORY_PASSWORD" $ARTIFACTORY_URL/mcp/$RELEASE_VERSION/mcp-$RELEASE_VERSION-sources.jar - - echo "Downloading spring artifacts" - cd ../../../../../.. - cd nexus/org/springframework/experimental/spring-ai-mcp/$RELEASE_VERSION - wget --user="$ARTIFACTORY_USERNAME" --password="$ARTIFACTORY_PASSWORD" $ARTIFACTORY_URL/spring-ai-mcp/$RELEASE_VERSION/spring-ai-mcp-$RELEASE_VERSION.pom - wget --user="$ARTIFACTORY_USERNAME" --password="$ARTIFACTORY_PASSWORD" $ARTIFACTORY_URL/spring-ai-mcp/$RELEASE_VERSION/spring-ai-mcp-$RELEASE_VERSION.jar - wget --user="$ARTIFACTORY_USERNAME" --password="$ARTIFACTORY_PASSWORD" $ARTIFACTORY_URL/spring-ai-mcp/$RELEASE_VERSION/spring-ai-mcp-$RELEASE_VERSION-javadoc.jar - wget --user="$ARTIFACTORY_USERNAME" --password="$ARTIFACTORY_PASSWORD" $ARTIFACTORY_URL/spring-ai-mcp/$RELEASE_VERSION/spring-ai-mcp-$RELEASE_VERSION-sources.jar - - - name: Sign artifacts and release them to Maven Central - uses: spring-io/nexus-sync-action@main - id: nexus - with: - url: ${{ secrets.OSSRH_URL }} - username: ${{ secrets.OSSRH_S01_TOKEN_USERNAME }} - password: ${{ secrets.OSSRH_S01_TOKEN_PASSWORD }} - staging-profile-name: ${{ secrets.OSSRH_STAGING_PROFILE_NAME }} - create: true - upload: true - close: true - release: true - generate-checksums: true \ No newline at end of file From 8d946bbdff108d86660c50fce5cb87ca08a4c527 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Tue, 28 Jan 2025 10:50:15 +0100 Subject: [PATCH 007/426] initial maven central relese configuraitons --- .github/workflows/maven-central-release.yml | 38 ++++++++++ pom.xml | 81 +++++++++++++-------- 2 files changed, 87 insertions(+), 32 deletions(-) create mode 100644 .github/workflows/maven-central-release.yml diff --git a/.github/workflows/maven-central-release.yml b/.github/workflows/maven-central-release.yml new file mode 100644 index 0000000..4d67ce0 --- /dev/null +++ b/.github/workflows/maven-central-release.yml @@ -0,0 +1,38 @@ +name: Release to Maven Central + +on: + push: + tags: + - 'v*' + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Java + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + cache: 'maven' + server-id: ossrh + server-username: MAVEN_USERNAME + server-password: MAVEN_PASSWORD + gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE + + - name: Build and Test + run: mvn clean verify + + - name: Publish to Maven Central + run: | + mvn --batch-mode \ + -Prelease \ + -Pjavadoc \ + deploy + env: + MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} diff --git a/pom.xml b/pom.xml index 97dd9a2..8462e58 100644 --- a/pom.xml +++ b/pom.xml @@ -26,12 +26,12 @@ https://spring.io - - - MIT License - http://www.opensource.org/licenses/mit-license.php - - + + + MIT License + http://www.opensource.org/licenses/mit-license.php + + @@ -51,13 +51,11 @@ https://github.com/modelcontextprotocol/java-sdk/actions - - spring-snapshots - https://repo.spring.io/libs-snapshot-local - - false - - + + ossrh + Central Repository OSSRH + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + @@ -299,26 +297,45 @@ - artifactory-staging + relesae + + + + org.sonatype.central + central-publishing-maven-plugin + 0.7.0 + true + + central + + + + org.apache.maven.plugins + maven-gpg-plugin + 3.1.0 + + + sign-artifacts + verify + + sign + + + + --pinentry-mode + loopback + + + + + + + - spring-staging - https://repo.spring.io/libs-staging-local - - false - - - - - - artifactory-milestone - - - spring-milestones - https://repo.spring.io/libs-milestone-local - - false - + ossrh + Central Repository OSSRH + https://oss.sonatype.org/service/local/staging/deploy/maven2/ @@ -365,4 +382,4 @@ -
+ \ No newline at end of file From 2d7228d47c5586c8f3010a2847a35f2c291c44a1 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Tue, 28 Jan 2025 13:06:05 +0100 Subject: [PATCH 008/426] Clean the pom --- mcp-docs/pom.xml | 2 +- mcp-docs/src/main/javadoc/overview.html | 2 +- mcp/README.md | 2 - .../client/McpClient.java | 2 +- pom.xml | 40 ++++++++++--------- settings.xml | 24 ----------- 6 files changed, 24 insertions(+), 48 deletions(-) delete mode 100644 settings.xml diff --git a/mcp-docs/pom.xml b/mcp-docs/pom.xml index 43e4404..fe61156 100644 --- a/mcp-docs/pom.xml +++ b/mcp-docs/pom.xml @@ -71,7 +71,7 @@ src/assembly/javadocs.xml - spring-ai-mcp-${project.version} + mcp-${project.version} true diff --git a/mcp-docs/src/main/javadoc/overview.html b/mcp-docs/src/main/javadoc/overview.html index 3a30a69..9dabad0 100644 --- a/mcp-docs/src/main/javadoc/overview.html +++ b/mcp-docs/src/main/javadoc/overview.html @@ -17,7 +17,7 @@

- This document is the API specification for Spring AI + This document is the API specification for MCP Java SDK

diff --git a/mcp/README.md b/mcp/README.md index 0fcffcb..0e2257d 100644 --- a/mcp/README.md +++ b/mcp/README.md @@ -1,5 +1,3 @@ # Java MCP SDK Java SDK implementation of the Model Context Protocol, enabling seamless integration with language models and AI tools. - -Find more at [Java MCP SDK](https://docs.spring.io/spring-ai-mcp/reference/mcp.html) \ No newline at end of file diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java b/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java index 2580ab0..554c408 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java @@ -159,7 +159,7 @@ public interface McpClient { private ClientCapabilities capabilities; - private Implementation clientInfo = new Implementation("Spring AI MCP Client", "1.0.0"); + private Implementation clientInfo = new Implementation("Java SDK MCP Client", "1.0.0"); private final Map roots = new HashMap<>(); diff --git a/pom.xml b/pom.xml index 8462e58..782c331 100644 --- a/pom.xml +++ b/pom.xml @@ -17,13 +17,13 @@ git@github.com/modelcontextprotocol/java-sdk.git - Spring AI MCP Parent - Java SDK and Spring Framework integration for the Model Context Protocol (MCP), enabling interaction with AI models and tools through a standardized interface + Java SDK MCP Parent + Java SDK for the Model Context Protocol (MCP), enabling interaction with AI models and tools through a standardized interface - Spring Framework - https://spring.io + Anthropic + https://www.anthropic.com @@ -65,7 +65,6 @@ 17 17 - 1.0.0-M5 3.26.3 5.10.2 5.11.0 @@ -297,16 +296,23 @@ - relesae + release - org.sonatype.central - central-publishing-maven-plugin - 0.7.0 + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.7 true - central + ossrh + https://s01.oss.sonatype.org/ + + false @@ -332,10 +338,13 @@ + + ossrh + https://s01.oss.sonatype.org/content/repositories/snapshots + ossrh - Central Repository OSSRH - https://oss.sonatype.org/service/local/staging/deploy/maven2/ + https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ @@ -350,13 +359,6 @@ pom import - - org.springframework.ai - spring-ai-bom - ${spring-ai.version} - pom - import - diff --git a/settings.xml b/settings.xml deleted file mode 100644 index 890e930..0000000 --- a/settings.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - spring-snapshots - ${env.ARTIFACTORY_USERNAME} - ${env.ARTIFACTORY_PASSWORD} - - - spring-staging - ${env.ARTIFACTORY_USERNAME} - ${env.ARTIFACTORY_PASSWORD} - - - spring-milestones - ${env.ARTIFACTORY_USERNAME} - ${env.ARTIFACTORY_PASSWORD} - - - - \ No newline at end of file From 5b10f70021df75517bd949ed84e26b63889cf4c0 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Tue, 28 Jan 2025 13:12:08 +0100 Subject: [PATCH 009/426] Add manual relese trigger --- .github/workflows/maven-central-release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/maven-central-release.yml b/.github/workflows/maven-central-release.yml index 4d67ce0..c760997 100644 --- a/.github/workflows/maven-central-release.yml +++ b/.github/workflows/maven-central-release.yml @@ -1,6 +1,7 @@ name: Release to Maven Central on: + workflow_dispatch: push: tags: - 'v*' From 1aaf2d369a79ee515c2ebb67a04467bca4134239 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Tue, 28 Jan 2025 13:23:25 +0100 Subject: [PATCH 010/426] Fix the GH action secret names --- .github/workflows/maven-central-release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/maven-central-release.yml b/.github/workflows/maven-central-release.yml index c760997..31114c8 100644 --- a/.github/workflows/maven-central-release.yml +++ b/.github/workflows/maven-central-release.yml @@ -21,7 +21,7 @@ jobs: server-id: ossrh server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD - gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} + gpg-private-key: ${{ secrets.GPG_SECRET_KEY }} gpg-passphrase: MAVEN_GPG_PASSPHRASE - name: Build and Test @@ -36,4 +36,4 @@ jobs: env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} - MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.SIGNING_PASSPHRASE }} From d391598be7f4a5a2657b098c2eb026c929359c5b Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Tue, 28 Jan 2025 13:46:07 +0100 Subject: [PATCH 011/426] Extend maven gpg configuration --- pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 782c331..350985e 100644 --- a/pom.xml +++ b/pom.xml @@ -331,6 +331,7 @@ --pinentry-mode loopback + ${env.MAVEN_GPG_PASSPHRASE} @@ -384,4 +385,4 @@ - \ No newline at end of file + From 01592fff4505a8ce12e62c5d5eb44ba9d284cdb9 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Tue, 28 Jan 2025 14:08:47 +0100 Subject: [PATCH 012/426] Disable the mcp-docs as pom module --- .../client/transport/HttpClientSseClientTransport.java | 3 ++- pom.xml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java b/mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java index dc886a5..f80f695 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java +++ b/mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java @@ -217,7 +217,8 @@ public class HttpClientSseClientTransport implements ClientMcpTransport { return Mono.fromFuture( httpClient.sendAsync(request, HttpResponse.BodyHandlers.discarding()).thenAccept(response -> { - if (response.statusCode() != 200) { + if (response.statusCode() != 200 && response.statusCode() != 201 && response.statusCode() != 202 + && response.statusCode() != 206) { logger.error("Error sending message: {}", response.statusCode()); } })); diff --git a/pom.xml b/pom.xml index 350985e..379cf17 100644 --- a/pom.xml +++ b/pom.xml @@ -105,7 +105,7 @@ mcp mcp-transport/mcp-webflux-sse-transport mcp-transport/mcp-webmvc-sse-transport - mcp-docs + mcp-test From 2f5fcdbcbe9127a30e4e29da3245955fb8df4132 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Tue, 28 Jan 2025 14:31:05 +0100 Subject: [PATCH 013/426] Add CI GH action workflow --- .github/workflows/continuous-integration.yml | 38 ++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .github/workflows/continuous-integration.yml diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml new file mode 100644 index 0000000..9e991c4 --- /dev/null +++ b/.github/workflows/continuous-integration.yml @@ -0,0 +1,38 @@ +name: CI/CD build + +on: + push: + branches: [ "main" ] + +jobs: + build: + name: Build branch + runs-on: ubuntu-latest + steps: + - name: Checkout source code + uses: actions/checkout@v4 + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + cache: 'maven' + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Build with Maven and deploy to Sonatype snapshot repository + env: + MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} + run: | + mvn -Pjavadoc -Prelease --batch-mode --update-snapshots deploy + + - name: Generate Java docs + run: mvn -Pjavadoc -B javadoc:aggregate + + - name: Capture project version + run: echo PROJECT_VERSION=$(mvn help:evaluate -Dexpression=project.version --quiet -DforceStdout) >> $GITHUB_ENV From 6296a883313bdc9ebc75f86745e47bcafe93c42b Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Tue, 28 Jan 2025 14:36:31 +0100 Subject: [PATCH 014/426] Update license text and GH actions --- .github/workflows/maven-central-release.yml | 5 +++++ LICENSE | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/maven-central-release.yml b/.github/workflows/maven-central-release.yml index 31114c8..87b338c 100644 --- a/.github/workflows/maven-central-release.yml +++ b/.github/workflows/maven-central-release.yml @@ -24,6 +24,11 @@ jobs: gpg-private-key: ${{ secrets.GPG_SECRET_KEY }} gpg-passphrase: MAVEN_GPG_PASSPHRASE + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + - name: Build and Test run: mvn clean verify diff --git a/LICENSE b/LICENSE index 252046e..5264c5b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2025 Broadcom +Copyright (c) 2025 the original author or authors. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 2e0b60dc3b68f88882dd839c038e9fb258250440 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Tue, 28 Jan 2025 14:39:40 +0100 Subject: [PATCH 015/426] Fix the MAVEN_GPG_PASSPHRASE in GH CI workflow --- .github/workflows/continuous-integration.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 9e991c4..d0dd3e9 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -28,6 +28,7 @@ jobs: env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.SIGNING_PASSPHRASE }} run: | mvn -Pjavadoc -Prelease --batch-mode --update-snapshots deploy From 76495078be94b54ede7aa1d8c58873cc1b3a85ec Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Tue, 28 Jan 2025 14:43:08 +0100 Subject: [PATCH 016/426] further CI wf improvements --- .github/workflows/continuous-integration.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index d0dd3e9..51c921a 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -18,6 +18,11 @@ jobs: java-version: '17' distribution: 'temurin' cache: 'maven' + server-id: ossrh + server-username: MAVEN_USERNAME + server-password: MAVEN_PASSWORD + gpg-private-key: ${{ secrets.GPG_SECRET_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE - name: Setup Node.js uses: actions/setup-node@v4 From c8766098f6954caa66658c470fe5822b5982c61c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dariusz=20J=C4=99drzejczyk?= Date: Tue, 28 Jan 2025 15:53:56 +0100 Subject: [PATCH 017/426] Reorder StdioServerTransport shutdown procedure to avoid errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Dariusz Jędrzejczyk --- .../transport/StdioServerTransport.java | 31 ++++++------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java b/mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java index e0dd865..52845a9 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java +++ b/mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java @@ -105,10 +105,10 @@ public class StdioServerTransport implements ServerMcpTransport { .flatMap(message -> Mono.just(message) .transform(inboundMessageHandler) .contextWrite(ctx -> ctx.put("observation", "myObservation"))) - .doOnComplete(() -> { + .doOnTerminate(() -> { + // The outbound processing will dispose its scheduler upon completion this.outboundSink.tryEmitComplete(); this.inboundScheduler.dispose(); - this.outboundScheduler.dispose(); }) .subscribe(); } @@ -208,13 +208,13 @@ public class StdioServerTransport implements ServerMcpTransport { }) .doOnComplete(() -> { isClosing = true; - outboundSink.tryEmitComplete(); + outboundScheduler.dispose(); }) .doOnError(e -> { if (!isClosing) { logger.error("Error in outbound processing", e); isClosing = true; - outboundSink.tryEmitComplete(); + outboundScheduler.dispose(); } }) .map(msg -> (JSONRPCMessage) msg); @@ -224,26 +224,15 @@ public class StdioServerTransport implements ServerMcpTransport { @Override public Mono closeGracefully() { - - return Mono.fromRunnable(() -> { + return Mono.defer(() -> { isClosing = true; logger.debug("Initiating graceful shutdown"); - }).then(Mono.defer(() -> { - // First complete the sinks to stop processing + // Completing the inbound causes the outbound to be completed as well, so + // we only close the inbound. inboundSink.tryEmitComplete(); - outboundSink.tryEmitComplete(); - return Mono.delay(Duration.ofMillis(100)); - })).then(Mono.fromRunnable(() -> { - try { - // Dispose schedulers with longer timeout - inboundScheduler.dispose(); - outboundScheduler.dispose(); - logger.info("Graceful shutdown completed"); - } - catch (Exception e) { - logger.error("Error during graceful shutdown", e); - } - })).then().subscribeOn(Schedulers.boundedElastic()); + logger.info("Graceful shutdown complete"); + return Mono.empty(); + }).subscribeOn(Schedulers.boundedElastic()); } @Override From 91a03320090926b4103f7fbbb07b34ccff08ac2b Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Tue, 28 Jan 2025 17:04:45 +0100 Subject: [PATCH 018/426] Update nexus-staging-maven-plugin conf --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 379cf17..b683519 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,7 @@ ossrh Central Repository OSSRH - https://oss.sonatype.org/service/local/staging/deploy/maven2/ + https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ From 181e1f25ab85f02a8b1f638c8b2b4c9e7caa2ab3 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Tue, 28 Jan 2025 17:23:07 +0100 Subject: [PATCH 019/426] Change the top domain from org to io --- .github/workflows/continuous-integration.yml | 2 +- README.md | 6 +-- mcp-bom/pom.xml | 10 ++--- mcp-docs/pom.xml | 2 +- .../ROOT/pages/dependency-management.adoc | 12 +++--- .../main/antora/modules/ROOT/pages/mcp.adoc | 12 +++--- .../antora/modules/ROOT/pages/overview.adoc | 12 +++--- mcp-test/pom.xml | 4 +- .../MockMcpTransport.java | 12 +++--- .../client/AbstractMcpAsyncClientTests.java | 32 ++++++++------- .../client/AbstractMcpSyncClientTests.java | 34 ++++++++-------- .../server/AbstractMcpAsyncServerTests.java | 29 ++++++++------ .../server/AbstractMcpSyncServerTests.java | 29 ++++++++------ .../mcp-webflux-sse-transport/README.md | 2 +- .../mcp-webflux-sse-transport/pom.xml | 6 +-- .../transport/WebFluxSseClientTransport.java | 14 +++---- .../transport/WebFluxSseServerTransport.java | 10 ++--- .../WebFluxSseIntegrationTests.java | 36 ++++++++--------- .../client/WebFluxSseMcpAsyncClientTests.java | 8 ++-- .../client/WebFluxSseMcpSyncClientTests.java | 8 ++-- .../WebFluxSseClientTransportTests.java | 7 ++-- .../server/WebFluxSseMcpAsyncServerTests.java | 8 ++-- .../server/WebFluxSseMcpSyncServerTests.java | 8 ++-- .../server/transport/BlockingInputStream.java | 2 +- .../mcp-webmvc-sse-transport/README.md | 2 +- .../mcp-webmvc-sse-transport/pom.xml | 6 +-- .../transport/WebMvcSseServerTransport.java | 10 ++--- .../WebMvcSseAsyncServerTransportTests.java | 7 ++-- .../server/WebMvcSseIntegrationTests.java | 32 ++++++++------- .../WebMvcSseSyncServerTransportTests.java | 7 ++-- .../src/test/resources/logback.xml | 8 ++-- mcp/pom.xml | 2 +- .../client/McpAsyncClient.java | 40 +++++++++---------- .../client/McpClient.java | 20 +++++----- .../client/McpClientFeatures.java | 8 ++-- .../client/McpSyncClient.java | 16 ++++---- .../client/transport/FlowSseClient.java | 2 +- .../HttpClientSseClientTransport.java | 20 +++++----- .../client/transport/ServerParameters.java | 4 +- .../transport/StdioClientTransport.java | 10 ++--- .../server/McpAsyncServer.java | 24 +++++------ .../server/McpServer.java | 14 +++---- .../server/McpServerFeatures.java | 8 ++-- .../server/McpSyncServer.java | 12 +++--- .../HttpServletSseServerTransport.java | 8 ++-- .../transport/StdioServerTransport.java | 10 ++--- .../spec/ClientMcpTransport.java | 2 +- .../spec/DefaultMcpSession.java | 4 +- .../modelcontextprotocol/spec/McpError.java | 4 +- .../modelcontextprotocol/spec/McpSchema.java | 2 +- .../modelcontextprotocol/spec/McpSession.java | 2 +- .../spec/McpTransport.java | 4 +- .../spec/ServerMcpTransport.java | 2 +- .../modelcontextprotocol/util/Assert.java | 2 +- .../modelcontextprotocol/util/Utils.java | 2 +- .../MockMcpTransport.java | 12 +++--- .../client/AbstractMcpAsyncClientTests.java | 32 ++++++++------- .../client/AbstractMcpSyncClientTests.java | 34 ++++++++-------- .../McpAsyncClientResponseHandlerTests.java | 14 ++++--- .../client/McpClientProtocolVersionTests.java | 12 +++--- .../client/ServletSseMcpAsyncClientTests.java | 7 ++-- .../client/ServletSseMcpSyncClientTests.java | 7 ++-- .../client/StdioMcpAsyncClientTests.java | 9 +++-- .../client/StdioMcpSyncClientTests.java | 9 +++-- .../HttpClientSseClientTransportTests.java | 7 ++-- .../server/AbstractMcpAsyncServerTests.java | 29 ++++++++------ .../server/AbstractMcpSyncServerTests.java | 29 ++++++++------ .../server/McpServerProtocolVersionTests.java | 8 ++-- .../server/ServletSseMcpAsyncServerTests.java | 7 ++-- .../server/ServletSseMcpSyncServerTests.java | 7 ++-- .../server/StdioMcpAsyncServerTests.java | 7 ++-- .../server/StdioMcpSyncServerTests.java | 7 ++-- .../server/transport/BlockingInputStream.java | 2 +- ...letSseServerTransportIntegrationTests.java | 33 +++++++-------- .../transport/StdioServerTransportTests.java | 7 ++-- .../spec/DefaultMcpSessionTests.java | 7 +++- pom.xml | 2 +- 77 files changed, 470 insertions(+), 417 deletions(-) rename mcp-test/src/main/java/{org => io}/modelcontextprotocol/MockMcpTransport.java (88%) rename mcp-test/src/main/java/{org => io}/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java (91%) rename mcp-test/src/main/java/{org => io}/modelcontextprotocol/client/AbstractMcpSyncClientTests.java (88%) rename mcp-test/src/main/java/{org => io}/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java (94%) rename mcp-test/src/main/java/{org => io}/modelcontextprotocol/server/AbstractMcpSyncServerTests.java (94%) rename mcp-transport/mcp-webflux-sse-transport/src/main/java/{org => io}/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java (96%) rename mcp-transport/mcp-webflux-sse-transport/src/main/java/{org => io}/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java (98%) rename mcp-transport/mcp-webflux-sse-transport/src/test/java/{org => io}/modelcontextprotocol/WebFluxSseIntegrationTests.java (93%) rename mcp-transport/mcp-webflux-sse-transport/src/test/java/{org => io}/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java (81%) rename mcp-transport/mcp-webflux-sse-transport/src/test/java/{org => io}/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java (82%) rename mcp-transport/mcp-webflux-sse-transport/src/test/java/{org => io}/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java (97%) rename mcp-transport/mcp-webflux-sse-transport/src/test/java/{org => io}/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java (82%) rename mcp-transport/mcp-webflux-sse-transport/src/test/java/{org => io}/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java (83%) rename mcp-transport/mcp-webflux-sse-transport/src/test/java/{org => io}/modelcontextprotocol/server/transport/BlockingInputStream.java (96%) rename mcp-transport/mcp-webmvc-sse-transport/src/main/java/{org => io}/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java (98%) rename mcp-transport/mcp-webmvc-sse-transport/src/test/java/{org => io}/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java (93%) rename mcp-transport/mcp-webmvc-sse-transport/src/test/java/{org => io}/modelcontextprotocol/server/WebMvcSseIntegrationTests.java (94%) rename mcp-transport/mcp-webmvc-sse-transport/src/test/java/{org => io}/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java (93%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/client/McpAsyncClient.java (95%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/client/McpClient.java (97%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/client/McpClientFeatures.java (98%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/client/McpSyncClient.java (96%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/client/transport/FlowSseClient.java (99%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java (93%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/client/transport/ServerParameters.java (97%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/client/transport/StdioClientTransport.java (97%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/server/McpAsyncServer.java (97%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/server/McpServer.java (98%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/server/McpServerFeatures.java (98%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/server/McpSyncServer.java (95%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java (98%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/server/transport/StdioServerTransport.java (96%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/spec/ClientMcpTransport.java (84%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/spec/DefaultMcpSession.java (99%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/spec/McpError.java (77%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/spec/McpSchema.java (99%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/spec/McpSession.java (98%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/spec/McpTransport.java (96%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/spec/ServerMcpTransport.java (84%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/util/Assert.java (98%) rename mcp/src/main/java/{org => io}/modelcontextprotocol/util/Utils.java (97%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/MockMcpTransport.java (89%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java (91%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/client/AbstractMcpSyncClientTests.java (88%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java (96%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/client/McpClientProtocolVersionTests.java (93%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java (84%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java (84%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/client/StdioMcpAsyncClientTests.java (69%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/client/StdioMcpSyncClientTests.java (81%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java (96%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java (94%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/server/AbstractMcpSyncServerTests.java (94%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/server/McpServerProtocolVersionTests.java (95%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java (70%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java (70%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/server/StdioMcpAsyncServerTests.java (67%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/server/StdioMcpSyncServerTests.java (67%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/server/transport/BlockingInputStream.java (96%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java (91%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/server/transport/StdioServerTransportTests.java (95%) rename mcp/src/test/java/{org => io}/modelcontextprotocol/spec/DefaultMcpSessionTests.java (96%) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 51c921a..a9bc8fd 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -35,7 +35,7 @@ jobs: MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} MAVEN_GPG_PASSPHRASE: ${{ secrets.SIGNING_PASSPHRASE }} run: | - mvn -Pjavadoc -Prelease --batch-mode --update-snapshots deploy + mvn -Pjavadoc -Prelease -DskipTests --batch-mode --update-snapshots deploy - name: Generate Java docs run: mvn -Pjavadoc -B javadoc:aggregate diff --git a/README.md b/README.md index 3d985bb..c994354 100644 --- a/README.md +++ b/README.md @@ -47,19 +47,19 @@ Add the following dependencies to your Maven project: ```xml - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-webflux-sse-transport - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-webmvc-sse-transport ``` diff --git a/mcp-bom/pom.xml b/mcp-bom/pom.xml index a1b5164..a524793 100644 --- a/mcp-bom/pom.xml +++ b/mcp-bom/pom.xml @@ -5,7 +5,7 @@ 4.0.0 - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-parent 0.7.0-SNAPSHOT @@ -28,28 +28,28 @@ - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp ${project.version} - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-test ${project.version} - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-webflux-sse-transport ${project.version} - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-webmvc-sse-transport ${project.version} diff --git a/mcp-docs/pom.xml b/mcp-docs/pom.xml index fe61156..feac637 100644 --- a/mcp-docs/pom.xml +++ b/mcp-docs/pom.xml @@ -18,7 +18,7 @@ 4.0.0 - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-parent 0.7.0-SNAPSHOT diff --git a/mcp-docs/src/main/antora/modules/ROOT/pages/dependency-management.adoc b/mcp-docs/src/main/antora/modules/ROOT/pages/dependency-management.adoc index 3aaf09e..7fcbba5 100644 --- a/mcp-docs/src/main/antora/modules/ROOT/pages/dependency-management.adoc +++ b/mcp-docs/src/main/antora/modules/ROOT/pages/dependency-management.adoc @@ -20,7 +20,7 @@ Maven:: - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-bom 0.6.0-SNAPSHOT pom @@ -35,7 +35,7 @@ Gradle:: [source,groovy,indent=0,subs="verbatim,quotes"] ---- dependencies { - implementation platform("org.modelcontextprotocol.sdk:mcp-bom:0.6.0-SNAPSHOT") + implementation platform("io.modelcontextprotocol.sdk:mcp-bom:0.6.0-SNAPSHOT") //... } ---- @@ -53,16 +53,16 @@ The following dependencies are available and managed by the BOM: === Core Dependencies -* `org.modelcontextprotocol.sdk:mcp` - Core MCP library providing the base functionality and APIs for Model Context Protocol implementation. +* `io.modelcontextprotocol.sdk:mcp` - Core MCP library providing the base functionality and APIs for Model Context Protocol implementation. === Transport Dependencies -* `org.modelcontextprotocol.sdk:mcp-webflux-sse-transport` - WebFlux-based Server-Sent Events (SSE) transport implementation for reactive applications. -* `org.modelcontextprotocol.sdk:mcp-webmvc-sse-transport` - WebMVC-based Server-Sent Events (SSE) transport implementation for servlet-based applications. +* `io.modelcontextprotocol.sdk:mcp-webflux-sse-transport` - WebFlux-based Server-Sent Events (SSE) transport implementation for reactive applications. +* `io.modelcontextprotocol.sdk:mcp-webmvc-sse-transport` - WebMVC-based Server-Sent Events (SSE) transport implementation for servlet-based applications. === Testing Dependencies -* `org.modelcontextprotocol.sdk:mcp-test` - Testing utilities and support for MCP-based applications. +* `io.modelcontextprotocol.sdk:mcp-test` - Testing utilities and support for MCP-based applications. [[repositories]] === Milestone and Snapshot Repositories diff --git a/mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc b/mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc index 86ca519..6237ed1 100644 --- a/mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc +++ b/mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc @@ -34,7 +34,7 @@ The core MCP functionality: [source,xml] ---- - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp ---- @@ -46,13 +46,13 @@ For HTTP SSE transport implementations, add one of the following dependencies ---- - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-webflux-sse-transport - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-webmvc-sse-transport ---- @@ -64,7 +64,7 @@ The core MCP functionality: [source,groovy] ---- dependencies { - implementation 'org.modelcontextprotocol.sdk:mcp' + implementation 'io.modelcontextprotocol.sdk:mcp' } ---- + @@ -74,10 +74,10 @@ For HTTP SSE transport implementations, add one of the following dependencies [source,groovy] ---- // Spring WebFlux-based SSE client and server transport -implementation 'org.modelcontextprotocol.sdk:mcp-webflux-sse-transport' +implementation 'io.modelcontextprotocol.sdk:mcp-webflux-sse-transport' // Spring WebMVC-based SSE server transport -implementation 'org.modelcontextprotocol.sdk:mcp-webmvc-sse-transport' +implementation 'io.modelcontextprotocol.sdk:mcp-webmvc-sse-transport' ---- ====== diff --git a/mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc b/mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc index 28d4cb4..e3ec80b 100644 --- a/mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc +++ b/mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc @@ -39,19 +39,19 @@ Maven:: ---- - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-webflux-sse-transport - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-webmvc-sse-transport @@ -78,9 +78,9 @@ Gradle:: [source,groovy] ---- dependencies { - implementation 'org.modelcontextprotocol.sdk:mcp' // Core - implementation 'org.modelcontextprotocol.sdk:mcp-webflux-sse-transport' // Optional - implementation 'org.modelcontextprotocol.sdk:mcp-webmvc-sse-transport' // Optional + implementation 'io.modelcontextprotocol.sdk:mcp' // Core + implementation 'io.modelcontextprotocol.sdk:mcp-webflux-sse-transport' // Optional + implementation 'io.modelcontextprotocol.sdk:mcp-webmvc-sse-transport' // Optional } repositories { diff --git a/mcp-test/pom.xml b/mcp-test/pom.xml index e1edaf2..e6b4170 100644 --- a/mcp-test/pom.xml +++ b/mcp-test/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-parent 0.7.0-SNAPSHOT @@ -22,7 +22,7 @@ - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp 0.7.0-SNAPSHOT diff --git a/mcp-test/src/main/java/org/modelcontextprotocol/MockMcpTransport.java b/mcp-test/src/main/java/io/modelcontextprotocol/MockMcpTransport.java similarity index 88% rename from mcp-test/src/main/java/org/modelcontextprotocol/MockMcpTransport.java rename to mcp-test/src/main/java/io/modelcontextprotocol/MockMcpTransport.java index 9660d19..0604768 100644 --- a/mcp-test/src/main/java/org/modelcontextprotocol/MockMcpTransport.java +++ b/mcp-test/src/main/java/io/modelcontextprotocol/MockMcpTransport.java @@ -2,18 +2,18 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol; +package io.modelcontextprotocol; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import org.modelcontextprotocol.spec.ClientMcpTransport; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.ServerMcpTransport; -import org.modelcontextprotocol.spec.McpSchema.JSONRPCNotification; -import org.modelcontextprotocol.spec.McpSchema.JSONRPCRequest; +import io.modelcontextprotocol.spec.ClientMcpTransport; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.ServerMcpTransport; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCNotification; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCRequest; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.publisher.Sinks; diff --git a/mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java b/mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java similarity index 91% rename from mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java rename to mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java index b4e2b30..affbc4d 100644 --- a/mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java +++ b/mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java @@ -2,31 +2,33 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client; +package io.modelcontextprotocol.client; import java.time.Duration; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; +import io.modelcontextprotocol.client.McpAsyncClient; +import io.modelcontextprotocol.client.McpClient; +import io.modelcontextprotocol.spec.ClientMcpTransport; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpTransport; +import io.modelcontextprotocol.spec.McpSchema.CallToolRequest; +import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import io.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; +import io.modelcontextprotocol.spec.McpSchema.CreateMessageResult; +import io.modelcontextprotocol.spec.McpSchema.GetPromptRequest; +import io.modelcontextprotocol.spec.McpSchema.Prompt; +import io.modelcontextprotocol.spec.McpSchema.Resource; +import io.modelcontextprotocol.spec.McpSchema.Root; +import io.modelcontextprotocol.spec.McpSchema.SubscribeRequest; +import io.modelcontextprotocol.spec.McpSchema.Tool; +import io.modelcontextprotocol.spec.McpSchema.UnsubscribeRequest; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.modelcontextprotocol.spec.ClientMcpTransport; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.CallToolRequest; -import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; -import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; -import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult; -import org.modelcontextprotocol.spec.McpSchema.GetPromptRequest; -import org.modelcontextprotocol.spec.McpSchema.Prompt; -import org.modelcontextprotocol.spec.McpSchema.Resource; -import org.modelcontextprotocol.spec.McpSchema.Root; -import org.modelcontextprotocol.spec.McpSchema.SubscribeRequest; -import org.modelcontextprotocol.spec.McpSchema.Tool; -import org.modelcontextprotocol.spec.McpSchema.UnsubscribeRequest; -import org.modelcontextprotocol.spec.McpTransport; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; diff --git a/mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java b/mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpSyncClientTests.java similarity index 88% rename from mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java rename to mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpSyncClientTests.java index 8115903..df08498 100644 --- a/mcp-test/src/main/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java +++ b/mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpSyncClientTests.java @@ -2,30 +2,32 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client; +package io.modelcontextprotocol.client; import java.time.Duration; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; +import io.modelcontextprotocol.client.McpClient; +import io.modelcontextprotocol.client.McpSyncClient; +import io.modelcontextprotocol.spec.ClientMcpTransport; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpSchema.CallToolRequest; +import io.modelcontextprotocol.spec.McpSchema.CallToolResult; +import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import io.modelcontextprotocol.spec.McpSchema.ListResourceTemplatesResult; +import io.modelcontextprotocol.spec.McpSchema.ListResourcesResult; +import io.modelcontextprotocol.spec.McpSchema.ListToolsResult; +import io.modelcontextprotocol.spec.McpSchema.ReadResourceResult; +import io.modelcontextprotocol.spec.McpSchema.Resource; +import io.modelcontextprotocol.spec.McpSchema.Root; +import io.modelcontextprotocol.spec.McpSchema.SubscribeRequest; +import io.modelcontextprotocol.spec.McpSchema.TextContent; +import io.modelcontextprotocol.spec.McpSchema.Tool; +import io.modelcontextprotocol.spec.McpSchema.UnsubscribeRequest; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.modelcontextprotocol.spec.ClientMcpTransport; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.CallToolRequest; -import org.modelcontextprotocol.spec.McpSchema.CallToolResult; -import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; -import org.modelcontextprotocol.spec.McpSchema.ListResourceTemplatesResult; -import org.modelcontextprotocol.spec.McpSchema.ListResourcesResult; -import org.modelcontextprotocol.spec.McpSchema.ListToolsResult; -import org.modelcontextprotocol.spec.McpSchema.ReadResourceResult; -import org.modelcontextprotocol.spec.McpSchema.Resource; -import org.modelcontextprotocol.spec.McpSchema.Root; -import org.modelcontextprotocol.spec.McpSchema.SubscribeRequest; -import org.modelcontextprotocol.spec.McpSchema.TextContent; -import org.modelcontextprotocol.spec.McpSchema.Tool; -import org.modelcontextprotocol.spec.McpSchema.UnsubscribeRequest; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; diff --git a/mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java b/mcp-test/src/main/java/io/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java similarity index 94% rename from mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java rename to mcp-test/src/main/java/io/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java index 43f0ff8..730f367 100644 --- a/mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java +++ b/mcp-test/src/main/java/io/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java @@ -2,26 +2,29 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; import java.time.Duration; import java.util.List; +import io.modelcontextprotocol.server.McpAsyncServer; +import io.modelcontextprotocol.server.McpServer; +import io.modelcontextprotocol.server.McpServerFeatures; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpTransport; +import io.modelcontextprotocol.spec.ServerMcpTransport; +import io.modelcontextprotocol.spec.McpSchema.CallToolResult; +import io.modelcontextprotocol.spec.McpSchema.GetPromptResult; +import io.modelcontextprotocol.spec.McpSchema.Prompt; +import io.modelcontextprotocol.spec.McpSchema.PromptMessage; +import io.modelcontextprotocol.spec.McpSchema.ReadResourceResult; +import io.modelcontextprotocol.spec.McpSchema.Resource; +import io.modelcontextprotocol.spec.McpSchema.ServerCapabilities; +import io.modelcontextprotocol.spec.McpSchema.Tool; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.CallToolResult; -import org.modelcontextprotocol.spec.McpSchema.GetPromptResult; -import org.modelcontextprotocol.spec.McpSchema.Prompt; -import org.modelcontextprotocol.spec.McpSchema.PromptMessage; -import org.modelcontextprotocol.spec.McpSchema.ReadResourceResult; -import org.modelcontextprotocol.spec.McpSchema.Resource; -import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities; -import org.modelcontextprotocol.spec.McpSchema.Tool; -import org.modelcontextprotocol.spec.McpTransport; -import org.modelcontextprotocol.spec.ServerMcpTransport; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; diff --git a/mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java b/mcp-test/src/main/java/io/modelcontextprotocol/server/AbstractMcpSyncServerTests.java similarity index 94% rename from mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java rename to mcp-test/src/main/java/io/modelcontextprotocol/server/AbstractMcpSyncServerTests.java index 8a10bf8..9c44a82 100644 --- a/mcp-test/src/main/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java +++ b/mcp-test/src/main/java/io/modelcontextprotocol/server/AbstractMcpSyncServerTests.java @@ -2,25 +2,28 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; import java.util.List; +import io.modelcontextprotocol.server.McpServer; +import io.modelcontextprotocol.server.McpServerFeatures; +import io.modelcontextprotocol.server.McpSyncServer; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpTransport; +import io.modelcontextprotocol.spec.ServerMcpTransport; +import io.modelcontextprotocol.spec.McpSchema.CallToolResult; +import io.modelcontextprotocol.spec.McpSchema.GetPromptResult; +import io.modelcontextprotocol.spec.McpSchema.Prompt; +import io.modelcontextprotocol.spec.McpSchema.PromptMessage; +import io.modelcontextprotocol.spec.McpSchema.ReadResourceResult; +import io.modelcontextprotocol.spec.McpSchema.Resource; +import io.modelcontextprotocol.spec.McpSchema.ServerCapabilities; +import io.modelcontextprotocol.spec.McpSchema.Tool; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.CallToolResult; -import org.modelcontextprotocol.spec.McpSchema.GetPromptResult; -import org.modelcontextprotocol.spec.McpSchema.Prompt; -import org.modelcontextprotocol.spec.McpSchema.PromptMessage; -import org.modelcontextprotocol.spec.McpSchema.ReadResourceResult; -import org.modelcontextprotocol.spec.McpSchema.Resource; -import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities; -import org.modelcontextprotocol.spec.McpSchema.Tool; -import org.modelcontextprotocol.spec.McpTransport; -import org.modelcontextprotocol.spec.ServerMcpTransport; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; diff --git a/mcp-transport/mcp-webflux-sse-transport/README.md b/mcp-transport/mcp-webflux-sse-transport/README.md index a38741f..475882b 100644 --- a/mcp-transport/mcp-webflux-sse-transport/README.md +++ b/mcp-transport/mcp-webflux-sse-transport/README.md @@ -2,7 +2,7 @@ ```xml - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-webflux-sse-transport ``` diff --git a/mcp-transport/mcp-webflux-sse-transport/pom.xml b/mcp-transport/mcp-webflux-sse-transport/pom.xml index fb65db4..d737a38 100644 --- a/mcp-transport/mcp-webflux-sse-transport/pom.xml +++ b/mcp-transport/mcp-webflux-sse-transport/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-parent 0.7.0-SNAPSHOT ../../pom.xml @@ -23,13 +23,13 @@ - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp 0.7.0-SNAPSHOT - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-test 0.7.0-SNAPSHOT test diff --git a/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java b/mcp-transport/mcp-webflux-sse-transport/src/main/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java similarity index 96% rename from mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java rename to mcp-transport/mcp-webflux-sse-transport/src/main/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java index 3a8375b..4ab5cdd 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/main/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java @@ -1,7 +1,7 @@ /* * Copyright 2024 - 2024 the original author or authors. */ -package org.modelcontextprotocol.client.transport; +package io.modelcontextprotocol.client.transport; import java.io.IOException; import java.util.function.BiConsumer; @@ -9,11 +9,11 @@ import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import org.modelcontextprotocol.spec.ClientMcpTransport; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.JSONRPCMessage; -import org.modelcontextprotocol.util.Assert; +import io.modelcontextprotocol.spec.ClientMcpTransport; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCMessage; +import io.modelcontextprotocol.util.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.Disposable; @@ -32,7 +32,7 @@ import org.springframework.web.reactive.function.client.WebClient; /** * Server-Sent Events (SSE) implementation of the - * {@link org.modelcontextprotocol.spec.McpTransport} that follows the MCP HTTP with SSE + * {@link io.modelcontextprotocol.spec.McpTransport} that follows the MCP HTTP with SSE * transport specification. * *

diff --git a/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java b/mcp-transport/mcp-webflux-sse-transport/src/main/java/io/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java similarity index 98% rename from mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java rename to mcp-transport/mcp-webflux-sse-transport/src/main/java/io/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java index 8baf696..2dbc929 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/main/java/io/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java @@ -1,4 +1,4 @@ -package org.modelcontextprotocol.server.transport; +package io.modelcontextprotocol.server.transport; import java.io.IOException; import java.time.Duration; @@ -9,10 +9,10 @@ import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.ServerMcpTransport; -import org.modelcontextprotocol.util.Assert; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.ServerMcpTransport; +import io.modelcontextprotocol.util.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Flux; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/WebFluxSseIntegrationTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/WebFluxSseIntegrationTests.java similarity index 93% rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/WebFluxSseIntegrationTests.java rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/WebFluxSseIntegrationTests.java index 67a9191..4cd24c6 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/WebFluxSseIntegrationTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/WebFluxSseIntegrationTests.java @@ -1,7 +1,7 @@ /* * Copyright 2024 - 2024 the original author or authors. */ -package org.modelcontextprotocol; +package io.modelcontextprotocol; import java.time.Duration; import java.util.List; @@ -11,28 +11,28 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; import com.fasterxml.jackson.databind.ObjectMapper; +import io.modelcontextprotocol.client.McpClient; +import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport; +import io.modelcontextprotocol.client.transport.WebFluxSseClientTransport; +import io.modelcontextprotocol.server.McpServer; +import io.modelcontextprotocol.server.McpServerFeatures; +import io.modelcontextprotocol.server.transport.WebFluxSseServerTransport; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpSchema.CallToolResult; +import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import io.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; +import io.modelcontextprotocol.spec.McpSchema.CreateMessageResult; +import io.modelcontextprotocol.spec.McpSchema.InitializeResult; +import io.modelcontextprotocol.spec.McpSchema.Role; +import io.modelcontextprotocol.spec.McpSchema.Root; +import io.modelcontextprotocol.spec.McpSchema.ServerCapabilities; +import io.modelcontextprotocol.spec.McpSchema.Tool; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; -import org.modelcontextprotocol.client.McpClient; -import org.modelcontextprotocol.client.transport.HttpClientSseClientTransport; -import org.modelcontextprotocol.client.transport.WebFluxSseClientTransport; -import org.modelcontextprotocol.server.McpServer; -import org.modelcontextprotocol.server.McpServerFeatures; -import org.modelcontextprotocol.server.transport.WebFluxSseServerTransport; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.CallToolResult; -import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; -import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; -import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult; -import org.modelcontextprotocol.spec.McpSchema.InitializeResult; -import org.modelcontextprotocol.spec.McpSchema.Role; -import org.modelcontextprotocol.spec.McpSchema.Root; -import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities; -import org.modelcontextprotocol.spec.McpSchema.Tool; import reactor.netty.DisposableServer; import reactor.netty.http.server.HttpServer; import reactor.test.StepVerifier; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java similarity index 81% rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java index 2299bf3..79a9db8 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java @@ -2,11 +2,13 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client; +package io.modelcontextprotocol.client; +import io.modelcontextprotocol.client.AbstractMcpAsyncClientTests; +import io.modelcontextprotocol.client.McpAsyncClient; +import io.modelcontextprotocol.client.transport.WebFluxSseClientTransport; +import io.modelcontextprotocol.spec.ClientMcpTransport; import org.junit.jupiter.api.Timeout; -import org.modelcontextprotocol.client.transport.WebFluxSseClientTransport; -import org.modelcontextprotocol.spec.ClientMcpTransport; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java similarity index 82% rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java index a154987..16108c6 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java @@ -2,11 +2,13 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client; +package io.modelcontextprotocol.client; +import io.modelcontextprotocol.client.AbstractMcpSyncClientTests; +import io.modelcontextprotocol.client.McpSyncClient; +import io.modelcontextprotocol.client.transport.WebFluxSseClientTransport; +import io.modelcontextprotocol.spec.ClientMcpTransport; import org.junit.jupiter.api.Timeout; -import org.modelcontextprotocol.client.transport.WebFluxSseClientTransport; -import org.modelcontextprotocol.spec.ClientMcpTransport; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java similarity index 97% rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java index 80de0a8..a09700d 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client.transport; +package io.modelcontextprotocol.client.transport; import java.time.Duration; import java.util.Map; @@ -10,12 +10,13 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import com.fasterxml.jackson.databind.ObjectMapper; +import io.modelcontextprotocol.client.transport.WebFluxSseClientTransport; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCRequest; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.JSONRPCRequest; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; import reactor.core.publisher.Flux; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java similarity index 82% rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java index 5a4f797..b26afd6 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java @@ -2,12 +2,14 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; import com.fasterxml.jackson.databind.ObjectMapper; +import io.modelcontextprotocol.server.AbstractMcpAsyncServerTests; +import io.modelcontextprotocol.server.McpAsyncServer; +import io.modelcontextprotocol.server.transport.WebFluxSseServerTransport; +import io.modelcontextprotocol.spec.ServerMcpTransport; import org.junit.jupiter.api.Timeout; -import org.modelcontextprotocol.server.transport.WebFluxSseServerTransport; -import org.modelcontextprotocol.spec.ServerMcpTransport; import reactor.netty.DisposableServer; import reactor.netty.http.server.HttpServer; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java similarity index 83% rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java index df9eacd..0ad5c73 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java @@ -2,12 +2,14 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; import com.fasterxml.jackson.databind.ObjectMapper; +import io.modelcontextprotocol.server.AbstractMcpSyncServerTests; +import io.modelcontextprotocol.server.McpSyncServer; +import io.modelcontextprotocol.server.transport.WebFluxSseServerTransport; +import io.modelcontextprotocol.spec.ServerMcpTransport; import org.junit.jupiter.api.Timeout; -import org.modelcontextprotocol.server.transport.WebFluxSseServerTransport; -import org.modelcontextprotocol.spec.ServerMcpTransport; import reactor.netty.DisposableServer; import reactor.netty.http.server.HttpServer; diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/transport/BlockingInputStream.java similarity index 96% rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/transport/BlockingInputStream.java index ec4b136..0ab72a9 100644 --- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java +++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/transport/BlockingInputStream.java @@ -1,7 +1,7 @@ /* * Copyright 2024 - 2024 the original author or authors. */ -package org.modelcontextprotocol.server.transport; +package io.modelcontextprotocol.server.transport; import java.io.IOException; import java.io.InputStream; diff --git a/mcp-transport/mcp-webmvc-sse-transport/README.md b/mcp-transport/mcp-webmvc-sse-transport/README.md index 22ed7e4..1e63e47 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/README.md +++ b/mcp-transport/mcp-webmvc-sse-transport/README.md @@ -2,7 +2,7 @@ ```xml - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-webmvc-sse-transport ``` diff --git a/mcp-transport/mcp-webmvc-sse-transport/pom.xml b/mcp-transport/mcp-webmvc-sse-transport/pom.xml index 7dcb169..4e3e910 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/pom.xml +++ b/mcp-transport/mcp-webmvc-sse-transport/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-parent 0.7.0-SNAPSHOT ../../pom.xml @@ -23,13 +23,13 @@ - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp 0.7.0-SNAPSHOT - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-test 0.7.0-SNAPSHOT test diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java b/mcp-transport/mcp-webmvc-sse-transport/src/main/java/io/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java similarity index 98% rename from mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java rename to mcp-transport/mcp-webmvc-sse-transport/src/main/java/io/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java index aa00066..7339311 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java +++ b/mcp-transport/mcp-webmvc-sse-transport/src/main/java/io/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server.transport; +package io.modelcontextprotocol.server.transport; import java.io.IOException; import java.util.UUID; @@ -11,10 +11,10 @@ import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.ServerMcpTransport; -import org.modelcontextprotocol.util.Assert; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.ServerMcpTransport; +import io.modelcontextprotocol.util.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Mono; diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java similarity index 93% rename from mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java rename to mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java index 846482f..d00c17e 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java +++ b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java @@ -2,15 +2,16 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; import com.fasterxml.jackson.databind.ObjectMapper; +import io.modelcontextprotocol.server.AbstractMcpAsyncServerTests; +import io.modelcontextprotocol.server.transport.WebMvcSseServerTransport; +import io.modelcontextprotocol.spec.ServerMcpTransport; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.startup.Tomcat; import org.junit.jupiter.api.Timeout; -import org.modelcontextprotocol.server.transport.WebMvcSseServerTransport; -import org.modelcontextprotocol.spec.ServerMcpTransport; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseIntegrationTests.java b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseIntegrationTests.java similarity index 94% rename from mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseIntegrationTests.java rename to mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseIntegrationTests.java index 96fbc3e..6600ab4 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseIntegrationTests.java +++ b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseIntegrationTests.java @@ -1,7 +1,7 @@ /* * Copyright 2024 - 2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; import java.time.Duration; import java.util.List; @@ -10,6 +10,22 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; import com.fasterxml.jackson.databind.ObjectMapper; +import io.modelcontextprotocol.client.McpClient; +import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport; +import io.modelcontextprotocol.server.McpServer; +import io.modelcontextprotocol.server.McpServerFeatures; +import io.modelcontextprotocol.server.transport.WebMvcSseServerTransport; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpSchema.CallToolResult; +import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import io.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; +import io.modelcontextprotocol.spec.McpSchema.CreateMessageResult; +import io.modelcontextprotocol.spec.McpSchema.InitializeResult; +import io.modelcontextprotocol.spec.McpSchema.Role; +import io.modelcontextprotocol.spec.McpSchema.Root; +import io.modelcontextprotocol.spec.McpSchema.ServerCapabilities; +import io.modelcontextprotocol.spec.McpSchema.Tool; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.LifecycleState; @@ -17,20 +33,6 @@ import org.apache.catalina.startup.Tomcat; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.modelcontextprotocol.client.McpClient; -import org.modelcontextprotocol.client.transport.HttpClientSseClientTransport; -import org.modelcontextprotocol.server.transport.WebMvcSseServerTransport; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.CallToolResult; -import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; -import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; -import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult; -import org.modelcontextprotocol.spec.McpSchema.InitializeResult; -import org.modelcontextprotocol.spec.McpSchema.Role; -import org.modelcontextprotocol.spec.McpSchema.Root; -import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities; -import org.modelcontextprotocol.spec.McpSchema.Tool; import reactor.test.StepVerifier; import org.springframework.context.annotation.Bean; diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java similarity index 93% rename from mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java rename to mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java index 8024173..7539790 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java +++ b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java @@ -2,15 +2,16 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; import com.fasterxml.jackson.databind.ObjectMapper; +import io.modelcontextprotocol.server.AbstractMcpSyncServerTests; +import io.modelcontextprotocol.server.transport.WebMvcSseServerTransport; +import io.modelcontextprotocol.spec.ServerMcpTransport; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.startup.Tomcat; import org.junit.jupiter.api.Timeout; -import org.modelcontextprotocol.server.transport.WebMvcSseServerTransport; -import org.modelcontextprotocol.spec.ServerMcpTransport; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/resources/logback.xml b/mcp-transport/mcp-webmvc-sse-transport/src/test/resources/logback.xml index e300a15..bc1140b 100644 --- a/mcp-transport/mcp-webmvc-sse-transport/src/test/resources/logback.xml +++ b/mcp-transport/mcp-webmvc-sse-transport/src/test/resources/logback.xml @@ -9,16 +9,16 @@ - + - + - + - + diff --git a/mcp/pom.xml b/mcp/pom.xml index d727c55..9890371 100644 --- a/mcp/pom.xml +++ b/mcp/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-parent 0.7.0-SNAPSHOT diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java b/mcp/src/main/java/io/modelcontextprotocol/client/McpAsyncClient.java similarity index 95% rename from mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java rename to mcp/src/main/java/io/modelcontextprotocol/client/McpAsyncClient.java index 875de37..9a0933e 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java +++ b/mcp/src/main/java/io/modelcontextprotocol/client/McpAsyncClient.java @@ -1,7 +1,7 @@ /* * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client; +package io.modelcontextprotocol.client; import java.time.Duration; import java.util.ArrayList; @@ -13,25 +13,25 @@ import java.util.function.Consumer; import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; -import org.modelcontextprotocol.spec.ClientMcpTransport; -import org.modelcontextprotocol.spec.DefaultMcpSession; -import org.modelcontextprotocol.spec.DefaultMcpSession.NotificationHandler; -import org.modelcontextprotocol.spec.DefaultMcpSession.RequestHandler; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; -import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; -import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult; -import org.modelcontextprotocol.spec.McpSchema.GetPromptRequest; -import org.modelcontextprotocol.spec.McpSchema.GetPromptResult; -import org.modelcontextprotocol.spec.McpSchema.ListPromptsResult; -import org.modelcontextprotocol.spec.McpSchema.LoggingLevel; -import org.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification; -import org.modelcontextprotocol.spec.McpSchema.PaginatedRequest; -import org.modelcontextprotocol.spec.McpSchema.Root; -import org.modelcontextprotocol.spec.McpTransport; -import org.modelcontextprotocol.util.Assert; -import org.modelcontextprotocol.util.Utils; +import io.modelcontextprotocol.spec.ClientMcpTransport; +import io.modelcontextprotocol.spec.DefaultMcpSession; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpTransport; +import io.modelcontextprotocol.spec.DefaultMcpSession.NotificationHandler; +import io.modelcontextprotocol.spec.DefaultMcpSession.RequestHandler; +import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import io.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; +import io.modelcontextprotocol.spec.McpSchema.CreateMessageResult; +import io.modelcontextprotocol.spec.McpSchema.GetPromptRequest; +import io.modelcontextprotocol.spec.McpSchema.GetPromptResult; +import io.modelcontextprotocol.spec.McpSchema.ListPromptsResult; +import io.modelcontextprotocol.spec.McpSchema.LoggingLevel; +import io.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification; +import io.modelcontextprotocol.spec.McpSchema.PaginatedRequest; +import io.modelcontextprotocol.spec.McpSchema.Root; +import io.modelcontextprotocol.util.Assert; +import io.modelcontextprotocol.util.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Flux; diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java b/mcp/src/main/java/io/modelcontextprotocol/client/McpClient.java similarity index 97% rename from mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java rename to mcp/src/main/java/io/modelcontextprotocol/client/McpClient.java index 554c408..7ab01b7 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java +++ b/mcp/src/main/java/io/modelcontextprotocol/client/McpClient.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client; +package io.modelcontextprotocol.client; import java.time.Duration; import java.util.ArrayList; @@ -12,15 +12,15 @@ import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; -import org.modelcontextprotocol.spec.ClientMcpTransport; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpTransport; -import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; -import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; -import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult; -import org.modelcontextprotocol.spec.McpSchema.Implementation; -import org.modelcontextprotocol.spec.McpSchema.Root; -import org.modelcontextprotocol.util.Assert; +import io.modelcontextprotocol.spec.ClientMcpTransport; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpTransport; +import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import io.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; +import io.modelcontextprotocol.spec.McpSchema.CreateMessageResult; +import io.modelcontextprotocol.spec.McpSchema.Implementation; +import io.modelcontextprotocol.spec.McpSchema.Root; +import io.modelcontextprotocol.util.Assert; import reactor.core.publisher.Mono; /** diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/McpClientFeatures.java b/mcp/src/main/java/io/modelcontextprotocol/client/McpClientFeatures.java similarity index 98% rename from mcp/src/main/java/org/modelcontextprotocol/client/McpClientFeatures.java rename to mcp/src/main/java/io/modelcontextprotocol/client/McpClientFeatures.java index 6cbc456..284b93f 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/McpClientFeatures.java +++ b/mcp/src/main/java/io/modelcontextprotocol/client/McpClientFeatures.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client; +package io.modelcontextprotocol.client; import java.util.ArrayList; import java.util.HashMap; @@ -12,9 +12,9 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; import java.util.function.Function; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.util.Assert; -import org.modelcontextprotocol.util.Utils; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.util.Assert; +import io.modelcontextprotocol.util.Utils; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/McpSyncClient.java b/mcp/src/main/java/io/modelcontextprotocol/client/McpSyncClient.java similarity index 96% rename from mcp/src/main/java/org/modelcontextprotocol/client/McpSyncClient.java rename to mcp/src/main/java/io/modelcontextprotocol/client/McpSyncClient.java index a44afbd..0178b4b 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/McpSyncClient.java +++ b/mcp/src/main/java/io/modelcontextprotocol/client/McpSyncClient.java @@ -2,17 +2,17 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client; +package io.modelcontextprotocol.client; import java.time.Duration; -import org.modelcontextprotocol.spec.ClientMcpTransport; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; -import org.modelcontextprotocol.spec.McpSchema.GetPromptRequest; -import org.modelcontextprotocol.spec.McpSchema.GetPromptResult; -import org.modelcontextprotocol.spec.McpSchema.ListPromptsResult; -import org.modelcontextprotocol.util.Assert; +import io.modelcontextprotocol.spec.ClientMcpTransport; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import io.modelcontextprotocol.spec.McpSchema.GetPromptRequest; +import io.modelcontextprotocol.spec.McpSchema.GetPromptResult; +import io.modelcontextprotocol.spec.McpSchema.ListPromptsResult; +import io.modelcontextprotocol.util.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/transport/FlowSseClient.java b/mcp/src/main/java/io/modelcontextprotocol/client/transport/FlowSseClient.java similarity index 99% rename from mcp/src/main/java/org/modelcontextprotocol/client/transport/FlowSseClient.java rename to mcp/src/main/java/io/modelcontextprotocol/client/transport/FlowSseClient.java index f382f9c..7fc6799 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/transport/FlowSseClient.java +++ b/mcp/src/main/java/io/modelcontextprotocol/client/transport/FlowSseClient.java @@ -1,7 +1,7 @@ /* * Copyright 2024 - 2024 the original author or authors. */ -package org.modelcontextprotocol.client.transport; +package io.modelcontextprotocol.client.transport; import java.net.URI; import java.net.http.HttpClient; diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java b/mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java similarity index 93% rename from mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java rename to mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java index f80f695..7af5294 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java +++ b/mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java @@ -1,16 +1,16 @@ /* * Copyright 2024 - 2024 the original author or authors. */ -package org.modelcontextprotocol.client.transport; +package io.modelcontextprotocol.client.transport; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import org.modelcontextprotocol.client.transport.FlowSseClient.SseEvent; -import org.modelcontextprotocol.spec.ClientMcpTransport; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.JSONRPCMessage; -import org.modelcontextprotocol.util.Assert; +import io.modelcontextprotocol.client.transport.FlowSseClient.SseEvent; +import io.modelcontextprotocol.spec.ClientMcpTransport; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCMessage; +import io.modelcontextprotocol.util.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Mono; @@ -29,7 +29,7 @@ import java.util.function.Function; /** * Server-Sent Events (SSE) implementation of the - * {@link org.modelcontextprotocol.spec.McpTransport} that follows the MCP HTTP with SSE + * {@link io.modelcontextprotocol.spec.McpTransport} that follows the MCP HTTP with SSE * transport specification, using Java's HttpClient. * *

@@ -51,8 +51,8 @@ import java.util.function.Function; * * * @author Christian Tzolov - * @see org.modelcontextprotocol.spec.McpTransport - * @see org.modelcontextprotocol.spec.ClientMcpTransport + * @see io.modelcontextprotocol.spec.McpTransport + * @see io.modelcontextprotocol.spec.ClientMcpTransport */ public class HttpClientSseClientTransport implements ClientMcpTransport { diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/transport/ServerParameters.java b/mcp/src/main/java/io/modelcontextprotocol/client/transport/ServerParameters.java similarity index 97% rename from mcp/src/main/java/org/modelcontextprotocol/client/transport/ServerParameters.java rename to mcp/src/main/java/io/modelcontextprotocol/client/transport/ServerParameters.java index 04f5f88..25a0227 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/transport/ServerParameters.java +++ b/mcp/src/main/java/io/modelcontextprotocol/client/transport/ServerParameters.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client.transport; +package io.modelcontextprotocol.client.transport; import java.util.ArrayList; import java.util.Arrays; @@ -13,7 +13,7 @@ import java.util.stream.Collectors; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import org.modelcontextprotocol.util.Assert; +import io.modelcontextprotocol.util.Assert; /** * Server parameters for stdio client. diff --git a/mcp/src/main/java/org/modelcontextprotocol/client/transport/StdioClientTransport.java b/mcp/src/main/java/io/modelcontextprotocol/client/transport/StdioClientTransport.java similarity index 97% rename from mcp/src/main/java/org/modelcontextprotocol/client/transport/StdioClientTransport.java rename to mcp/src/main/java/io/modelcontextprotocol/client/transport/StdioClientTransport.java index ec7c816..462837b 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/client/transport/StdioClientTransport.java +++ b/mcp/src/main/java/io/modelcontextprotocol/client/transport/StdioClientTransport.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client.transport; +package io.modelcontextprotocol.client.transport; import java.io.BufferedReader; import java.io.IOException; @@ -18,10 +18,10 @@ import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import org.modelcontextprotocol.spec.ClientMcpTransport; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.JSONRPCMessage; -import org.modelcontextprotocol.util.Assert; +import io.modelcontextprotocol.spec.ClientMcpTransport; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCMessage; +import io.modelcontextprotocol.util.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Flux; diff --git a/mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java b/mcp/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java similarity index 97% rename from mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java rename to mcp/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java index 9086714..a6c9475 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java +++ b/mcp/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; import java.time.Duration; import java.util.HashMap; @@ -14,17 +14,17 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; -import org.modelcontextprotocol.spec.DefaultMcpSession; -import org.modelcontextprotocol.spec.DefaultMcpSession.NotificationHandler; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.CallToolResult; -import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; -import org.modelcontextprotocol.spec.McpSchema.LoggingLevel; -import org.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification; -import org.modelcontextprotocol.spec.McpSchema.Tool; -import org.modelcontextprotocol.spec.ServerMcpTransport; -import org.modelcontextprotocol.util.Utils; +import io.modelcontextprotocol.spec.DefaultMcpSession; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.ServerMcpTransport; +import io.modelcontextprotocol.spec.DefaultMcpSession.NotificationHandler; +import io.modelcontextprotocol.spec.McpSchema.CallToolResult; +import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import io.modelcontextprotocol.spec.McpSchema.LoggingLevel; +import io.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification; +import io.modelcontextprotocol.spec.McpSchema.Tool; +import io.modelcontextprotocol.util.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Flux; diff --git a/mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java b/mcp/src/main/java/io/modelcontextprotocol/server/McpServer.java similarity index 98% rename from mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java rename to mcp/src/main/java/io/modelcontextprotocol/server/McpServer.java index 870282f..54c7a28 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java +++ b/mcp/src/main/java/io/modelcontextprotocol/server/McpServer.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; import java.util.ArrayList; import java.util.HashMap; @@ -11,12 +11,12 @@ import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.CallToolResult; -import org.modelcontextprotocol.spec.McpSchema.ResourceTemplate; -import org.modelcontextprotocol.spec.McpTransport; -import org.modelcontextprotocol.spec.ServerMcpTransport; -import org.modelcontextprotocol.util.Assert; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpTransport; +import io.modelcontextprotocol.spec.ServerMcpTransport; +import io.modelcontextprotocol.spec.McpSchema.CallToolResult; +import io.modelcontextprotocol.spec.McpSchema.ResourceTemplate; +import io.modelcontextprotocol.util.Assert; import reactor.core.publisher.Mono; /** diff --git a/mcp/src/main/java/org/modelcontextprotocol/server/McpServerFeatures.java b/mcp/src/main/java/io/modelcontextprotocol/server/McpServerFeatures.java similarity index 98% rename from mcp/src/main/java/org/modelcontextprotocol/server/McpServerFeatures.java rename to mcp/src/main/java/io/modelcontextprotocol/server/McpServerFeatures.java index 162b431..c8f8399 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/server/McpServerFeatures.java +++ b/mcp/src/main/java/io/modelcontextprotocol/server/McpServerFeatures.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; import java.util.ArrayList; import java.util.HashMap; @@ -11,9 +11,9 @@ import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.util.Assert; -import org.modelcontextprotocol.util.Utils; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.util.Assert; +import io.modelcontextprotocol.util.Utils; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; diff --git a/mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java b/mcp/src/main/java/io/modelcontextprotocol/server/McpSyncServer.java similarity index 95% rename from mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java rename to mcp/src/main/java/io/modelcontextprotocol/server/McpSyncServer.java index aab1457..1de0139 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java +++ b/mcp/src/main/java/io/modelcontextprotocol/server/McpSyncServer.java @@ -2,13 +2,13 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; -import org.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification; -import org.modelcontextprotocol.util.Assert; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import io.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification; +import io.modelcontextprotocol.util.Assert; /** * A synchronous implementation of the Model Context Protocol (MCP) server that wraps diff --git a/mcp/src/main/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java b/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java similarity index 98% rename from mcp/src/main/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java rename to mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java index 6a56798..98b8ea5 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java +++ b/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java @@ -1,7 +1,7 @@ /* * Copyright 2024 - 2024 the original author or authors. */ -package org.modelcontextprotocol.server.transport; +package io.modelcontextprotocol.server.transport; import java.io.BufferedReader; import java.io.IOException; @@ -14,15 +14,15 @@ import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.ServerMcpTransport; import jakarta.servlet.AsyncContext; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.ServerMcpTransport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Mono; diff --git a/mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java b/mcp/src/main/java/io/modelcontextprotocol/server/transport/StdioServerTransport.java similarity index 96% rename from mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java rename to mcp/src/main/java/io/modelcontextprotocol/server/transport/StdioServerTransport.java index 52845a9..506e387 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java +++ b/mcp/src/main/java/io/modelcontextprotocol/server/transport/StdioServerTransport.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server.transport; +package io.modelcontextprotocol.server.transport; import java.io.BufferedReader; import java.io.IOException; @@ -16,10 +16,10 @@ import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.ServerMcpTransport; -import org.modelcontextprotocol.spec.McpSchema.JSONRPCMessage; -import org.modelcontextprotocol.util.Assert; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.ServerMcpTransport; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCMessage; +import io.modelcontextprotocol.util.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Flux; diff --git a/mcp/src/main/java/org/modelcontextprotocol/spec/ClientMcpTransport.java b/mcp/src/main/java/io/modelcontextprotocol/spec/ClientMcpTransport.java similarity index 84% rename from mcp/src/main/java/org/modelcontextprotocol/spec/ClientMcpTransport.java rename to mcp/src/main/java/io/modelcontextprotocol/spec/ClientMcpTransport.java index eff6c15..8a9b4ce 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/spec/ClientMcpTransport.java +++ b/mcp/src/main/java/io/modelcontextprotocol/spec/ClientMcpTransport.java @@ -1,7 +1,7 @@ /* * Copyright 2024 - 2024 the original author or authors. */ -package org.modelcontextprotocol.spec; +package io.modelcontextprotocol.spec; /** * Marker interface for the client-side MCP transport. diff --git a/mcp/src/main/java/org/modelcontextprotocol/spec/DefaultMcpSession.java b/mcp/src/main/java/io/modelcontextprotocol/spec/DefaultMcpSession.java similarity index 99% rename from mcp/src/main/java/org/modelcontextprotocol/spec/DefaultMcpSession.java rename to mcp/src/main/java/io/modelcontextprotocol/spec/DefaultMcpSession.java index 5a89a1a..eb7ce49 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/spec/DefaultMcpSession.java +++ b/mcp/src/main/java/io/modelcontextprotocol/spec/DefaultMcpSession.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.spec; +package io.modelcontextprotocol.spec; import java.time.Duration; import java.util.Map; @@ -11,7 +11,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; import com.fasterxml.jackson.core.type.TypeReference; -import org.modelcontextprotocol.util.Assert; +import io.modelcontextprotocol.util.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.Disposable; diff --git a/mcp/src/main/java/org/modelcontextprotocol/spec/McpError.java b/mcp/src/main/java/io/modelcontextprotocol/spec/McpError.java similarity index 77% rename from mcp/src/main/java/org/modelcontextprotocol/spec/McpError.java rename to mcp/src/main/java/io/modelcontextprotocol/spec/McpError.java index df79238..13e4324 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/spec/McpError.java +++ b/mcp/src/main/java/io/modelcontextprotocol/spec/McpError.java @@ -1,9 +1,9 @@ /* * Copyright 2024 - 2024 the original author or authors. */ -package org.modelcontextprotocol.spec; +package io.modelcontextprotocol.spec; -import org.modelcontextprotocol.spec.McpSchema.JSONRPCResponse.JSONRPCError; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCResponse.JSONRPCError; public class McpError extends RuntimeException { diff --git a/mcp/src/main/java/org/modelcontextprotocol/spec/McpSchema.java b/mcp/src/main/java/io/modelcontextprotocol/spec/McpSchema.java similarity index 99% rename from mcp/src/main/java/org/modelcontextprotocol/spec/McpSchema.java rename to mcp/src/main/java/io/modelcontextprotocol/spec/McpSchema.java index 153ca99..1c6bb61 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/spec/McpSchema.java +++ b/mcp/src/main/java/io/modelcontextprotocol/spec/McpSchema.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.spec; +package io.modelcontextprotocol.spec; import java.io.IOException; import java.util.HashMap; diff --git a/mcp/src/main/java/org/modelcontextprotocol/spec/McpSession.java b/mcp/src/main/java/io/modelcontextprotocol/spec/McpSession.java similarity index 98% rename from mcp/src/main/java/org/modelcontextprotocol/spec/McpSession.java rename to mcp/src/main/java/io/modelcontextprotocol/spec/McpSession.java index 50ecc52..92b4607 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/spec/McpSession.java +++ b/mcp/src/main/java/io/modelcontextprotocol/spec/McpSession.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.spec; +package io.modelcontextprotocol.spec; import java.util.Map; diff --git a/mcp/src/main/java/org/modelcontextprotocol/spec/McpTransport.java b/mcp/src/main/java/io/modelcontextprotocol/spec/McpTransport.java similarity index 96% rename from mcp/src/main/java/org/modelcontextprotocol/spec/McpTransport.java rename to mcp/src/main/java/io/modelcontextprotocol/spec/McpTransport.java index 577ae5b..344a50b 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/spec/McpTransport.java +++ b/mcp/src/main/java/io/modelcontextprotocol/spec/McpTransport.java @@ -2,12 +2,12 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.spec; +package io.modelcontextprotocol.spec; import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; -import org.modelcontextprotocol.spec.McpSchema.JSONRPCMessage; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCMessage; import reactor.core.publisher.Mono; /** diff --git a/mcp/src/main/java/org/modelcontextprotocol/spec/ServerMcpTransport.java b/mcp/src/main/java/io/modelcontextprotocol/spec/ServerMcpTransport.java similarity index 84% rename from mcp/src/main/java/org/modelcontextprotocol/spec/ServerMcpTransport.java rename to mcp/src/main/java/io/modelcontextprotocol/spec/ServerMcpTransport.java index 182be85..1359143 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/spec/ServerMcpTransport.java +++ b/mcp/src/main/java/io/modelcontextprotocol/spec/ServerMcpTransport.java @@ -1,7 +1,7 @@ /* * Copyright 2024 - 2024 the original author or authors. */ -package org.modelcontextprotocol.spec; +package io.modelcontextprotocol.spec; /** * Marker interface for the server-side MCP transport. diff --git a/mcp/src/main/java/org/modelcontextprotocol/util/Assert.java b/mcp/src/main/java/io/modelcontextprotocol/util/Assert.java similarity index 98% rename from mcp/src/main/java/org/modelcontextprotocol/util/Assert.java rename to mcp/src/main/java/io/modelcontextprotocol/util/Assert.java index bee6c44..d68188c 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/util/Assert.java +++ b/mcp/src/main/java/io/modelcontextprotocol/util/Assert.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.util; +package io.modelcontextprotocol.util; import java.util.Collection; diff --git a/mcp/src/main/java/org/modelcontextprotocol/util/Utils.java b/mcp/src/main/java/io/modelcontextprotocol/util/Utils.java similarity index 97% rename from mcp/src/main/java/org/modelcontextprotocol/util/Utils.java rename to mcp/src/main/java/io/modelcontextprotocol/util/Utils.java index 2a8da98..0f799ca 100644 --- a/mcp/src/main/java/org/modelcontextprotocol/util/Utils.java +++ b/mcp/src/main/java/io/modelcontextprotocol/util/Utils.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.util; +package io.modelcontextprotocol.util; import java.util.Collection; import java.util.Map; diff --git a/mcp/src/test/java/org/modelcontextprotocol/MockMcpTransport.java b/mcp/src/test/java/io/modelcontextprotocol/MockMcpTransport.java similarity index 89% rename from mcp/src/test/java/org/modelcontextprotocol/MockMcpTransport.java rename to mcp/src/test/java/io/modelcontextprotocol/MockMcpTransport.java index c62c0d4..1679ab7 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/MockMcpTransport.java +++ b/mcp/src/test/java/io/modelcontextprotocol/MockMcpTransport.java @@ -2,18 +2,18 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol; +package io.modelcontextprotocol; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import org.modelcontextprotocol.spec.ClientMcpTransport; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.ServerMcpTransport; -import org.modelcontextprotocol.spec.McpSchema.JSONRPCNotification; -import org.modelcontextprotocol.spec.McpSchema.JSONRPCRequest; +import io.modelcontextprotocol.spec.ClientMcpTransport; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.ServerMcpTransport; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCNotification; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCRequest; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.publisher.Sinks; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java similarity index 91% rename from mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java rename to mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java index e76e389..ea61844 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java @@ -2,31 +2,33 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client; +package io.modelcontextprotocol.client; import java.time.Duration; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; +import io.modelcontextprotocol.client.McpAsyncClient; +import io.modelcontextprotocol.client.McpClient; +import io.modelcontextprotocol.spec.ClientMcpTransport; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpTransport; +import io.modelcontextprotocol.spec.McpSchema.CallToolRequest; +import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import io.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; +import io.modelcontextprotocol.spec.McpSchema.CreateMessageResult; +import io.modelcontextprotocol.spec.McpSchema.GetPromptRequest; +import io.modelcontextprotocol.spec.McpSchema.Prompt; +import io.modelcontextprotocol.spec.McpSchema.Resource; +import io.modelcontextprotocol.spec.McpSchema.Root; +import io.modelcontextprotocol.spec.McpSchema.SubscribeRequest; +import io.modelcontextprotocol.spec.McpSchema.Tool; +import io.modelcontextprotocol.spec.McpSchema.UnsubscribeRequest; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.modelcontextprotocol.spec.ClientMcpTransport; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.CallToolRequest; -import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; -import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; -import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult; -import org.modelcontextprotocol.spec.McpSchema.GetPromptRequest; -import org.modelcontextprotocol.spec.McpSchema.Prompt; -import org.modelcontextprotocol.spec.McpSchema.Resource; -import org.modelcontextprotocol.spec.McpSchema.Root; -import org.modelcontextprotocol.spec.McpSchema.SubscribeRequest; -import org.modelcontextprotocol.spec.McpSchema.Tool; -import org.modelcontextprotocol.spec.McpSchema.UnsubscribeRequest; -import org.modelcontextprotocol.spec.McpTransport; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpSyncClientTests.java similarity index 88% rename from mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java rename to mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpSyncClientTests.java index 79378fa..6a630c4 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpSyncClientTests.java @@ -2,30 +2,32 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client; +package io.modelcontextprotocol.client; import java.time.Duration; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; +import io.modelcontextprotocol.client.McpClient; +import io.modelcontextprotocol.client.McpSyncClient; +import io.modelcontextprotocol.spec.ClientMcpTransport; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpSchema.CallToolRequest; +import io.modelcontextprotocol.spec.McpSchema.CallToolResult; +import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import io.modelcontextprotocol.spec.McpSchema.ListResourceTemplatesResult; +import io.modelcontextprotocol.spec.McpSchema.ListResourcesResult; +import io.modelcontextprotocol.spec.McpSchema.ListToolsResult; +import io.modelcontextprotocol.spec.McpSchema.ReadResourceResult; +import io.modelcontextprotocol.spec.McpSchema.Resource; +import io.modelcontextprotocol.spec.McpSchema.Root; +import io.modelcontextprotocol.spec.McpSchema.SubscribeRequest; +import io.modelcontextprotocol.spec.McpSchema.TextContent; +import io.modelcontextprotocol.spec.McpSchema.Tool; +import io.modelcontextprotocol.spec.McpSchema.UnsubscribeRequest; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.modelcontextprotocol.spec.ClientMcpTransport; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.CallToolRequest; -import org.modelcontextprotocol.spec.McpSchema.CallToolResult; -import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; -import org.modelcontextprotocol.spec.McpSchema.ListResourceTemplatesResult; -import org.modelcontextprotocol.spec.McpSchema.ListResourcesResult; -import org.modelcontextprotocol.spec.McpSchema.ListToolsResult; -import org.modelcontextprotocol.spec.McpSchema.ReadResourceResult; -import org.modelcontextprotocol.spec.McpSchema.Resource; -import org.modelcontextprotocol.spec.McpSchema.Root; -import org.modelcontextprotocol.spec.McpSchema.SubscribeRequest; -import org.modelcontextprotocol.spec.McpSchema.TextContent; -import org.modelcontextprotocol.spec.McpSchema.Tool; -import org.modelcontextprotocol.spec.McpSchema.UnsubscribeRequest; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java similarity index 96% rename from mcp/src/test/java/org/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java rename to mcp/src/test/java/io/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java index 6a4ee28..a58df5e 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client; +package io.modelcontextprotocol.client; import java.time.Duration; import java.util.ArrayList; @@ -13,12 +13,14 @@ import java.util.function.Function; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import io.modelcontextprotocol.MockMcpTransport; +import io.modelcontextprotocol.client.McpAsyncClient; +import io.modelcontextprotocol.client.McpClient; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import io.modelcontextprotocol.spec.McpSchema.Root; import org.junit.jupiter.api.Test; -import org.modelcontextprotocol.MockMcpTransport; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; -import org.modelcontextprotocol.spec.McpSchema.Root; import reactor.core.publisher.Mono; import static org.assertj.core.api.Assertions.assertThat; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/McpClientProtocolVersionTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/McpClientProtocolVersionTests.java similarity index 93% rename from mcp/src/test/java/org/modelcontextprotocol/client/McpClientProtocolVersionTests.java rename to mcp/src/test/java/io/modelcontextprotocol/client/McpClientProtocolVersionTests.java index 88e18f8..317f571 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/McpClientProtocolVersionTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/McpClientProtocolVersionTests.java @@ -2,16 +2,18 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client; +package io.modelcontextprotocol.client; import java.time.Duration; import java.util.List; +import io.modelcontextprotocol.MockMcpTransport; +import io.modelcontextprotocol.client.McpAsyncClient; +import io.modelcontextprotocol.client.McpClient; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpSchema.InitializeResult; import org.junit.jupiter.api.Test; -import org.modelcontextprotocol.MockMcpTransport; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.InitializeResult; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java similarity index 84% rename from mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java rename to mcp/src/test/java/io/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java index 5c841b6..d96dc7f 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java @@ -2,11 +2,12 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client; +package io.modelcontextprotocol.client; +import io.modelcontextprotocol.client.McpSyncClient; +import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport; +import io.modelcontextprotocol.spec.ClientMcpTransport; import org.junit.jupiter.api.Timeout; -import org.modelcontextprotocol.client.transport.HttpClientSseClientTransport; -import org.modelcontextprotocol.spec.ClientMcpTransport; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java similarity index 84% rename from mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java rename to mcp/src/test/java/io/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java index 8b6f257..0ae22ac 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java @@ -2,11 +2,12 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client; +package io.modelcontextprotocol.client; +import io.modelcontextprotocol.client.McpSyncClient; +import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport; +import io.modelcontextprotocol.spec.ClientMcpTransport; import org.junit.jupiter.api.Timeout; -import org.modelcontextprotocol.client.transport.HttpClientSseClientTransport; -import org.modelcontextprotocol.spec.ClientMcpTransport; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpAsyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java similarity index 69% rename from mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpAsyncClientTests.java rename to mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java index 58de6f8..44c2876 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpAsyncClientTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java @@ -2,12 +2,13 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client; +package io.modelcontextprotocol.client; +import io.modelcontextprotocol.client.McpAsyncClient; +import io.modelcontextprotocol.client.transport.ServerParameters; +import io.modelcontextprotocol.client.transport.StdioClientTransport; +import io.modelcontextprotocol.spec.ClientMcpTransport; import org.junit.jupiter.api.Timeout; -import org.modelcontextprotocol.client.transport.ServerParameters; -import org.modelcontextprotocol.client.transport.StdioClientTransport; -import org.modelcontextprotocol.spec.ClientMcpTransport; /** * Tests for the {@link McpAsyncClient} with {@link StdioClientTransport}. diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpSyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java similarity index 81% rename from mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpSyncClientTests.java rename to mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java index d5607fd..ef7c83b 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpSyncClientTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java @@ -2,15 +2,16 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client; +package io.modelcontextprotocol.client; import java.util.concurrent.atomic.AtomicReference; +import io.modelcontextprotocol.client.McpSyncClient; +import io.modelcontextprotocol.client.transport.ServerParameters; +import io.modelcontextprotocol.client.transport.StdioClientTransport; +import io.modelcontextprotocol.spec.ClientMcpTransport; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; -import org.modelcontextprotocol.client.transport.ServerParameters; -import org.modelcontextprotocol.client.transport.StdioClientTransport; -import org.modelcontextprotocol.spec.ClientMcpTransport; import static org.assertj.core.api.Assertions.assertThat; diff --git a/mcp/src/test/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java similarity index 96% rename from mcp/src/test/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java rename to mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java index 74593d3..2d37b4a 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java @@ -2,19 +2,20 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.client.transport; +package io.modelcontextprotocol.client.transport; import java.time.Duration; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; +import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCRequest; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.JSONRPCRequest; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; import reactor.core.publisher.Mono; diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java similarity index 94% rename from mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java rename to mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java index 0913d29..ff1162c 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java @@ -2,26 +2,29 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; import java.time.Duration; import java.util.List; +import io.modelcontextprotocol.server.McpAsyncServer; +import io.modelcontextprotocol.server.McpServer; +import io.modelcontextprotocol.server.McpServerFeatures; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpTransport; +import io.modelcontextprotocol.spec.ServerMcpTransport; +import io.modelcontextprotocol.spec.McpSchema.CallToolResult; +import io.modelcontextprotocol.spec.McpSchema.GetPromptResult; +import io.modelcontextprotocol.spec.McpSchema.Prompt; +import io.modelcontextprotocol.spec.McpSchema.PromptMessage; +import io.modelcontextprotocol.spec.McpSchema.ReadResourceResult; +import io.modelcontextprotocol.spec.McpSchema.Resource; +import io.modelcontextprotocol.spec.McpSchema.ServerCapabilities; +import io.modelcontextprotocol.spec.McpSchema.Tool; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.CallToolResult; -import org.modelcontextprotocol.spec.McpSchema.GetPromptResult; -import org.modelcontextprotocol.spec.McpSchema.Prompt; -import org.modelcontextprotocol.spec.McpSchema.PromptMessage; -import org.modelcontextprotocol.spec.McpSchema.ReadResourceResult; -import org.modelcontextprotocol.spec.McpSchema.Resource; -import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities; -import org.modelcontextprotocol.spec.McpSchema.Tool; -import org.modelcontextprotocol.spec.McpTransport; -import org.modelcontextprotocol.spec.ServerMcpTransport; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpSyncServerTests.java similarity index 94% rename from mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java rename to mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpSyncServerTests.java index cc1b4fe..37c02c8 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpSyncServerTests.java @@ -2,25 +2,28 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; import java.util.List; +import io.modelcontextprotocol.server.McpServer; +import io.modelcontextprotocol.server.McpServerFeatures; +import io.modelcontextprotocol.server.McpSyncServer; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpTransport; +import io.modelcontextprotocol.spec.ServerMcpTransport; +import io.modelcontextprotocol.spec.McpSchema.CallToolResult; +import io.modelcontextprotocol.spec.McpSchema.GetPromptResult; +import io.modelcontextprotocol.spec.McpSchema.Prompt; +import io.modelcontextprotocol.spec.McpSchema.PromptMessage; +import io.modelcontextprotocol.spec.McpSchema.ReadResourceResult; +import io.modelcontextprotocol.spec.McpSchema.Resource; +import io.modelcontextprotocol.spec.McpSchema.ServerCapabilities; +import io.modelcontextprotocol.spec.McpSchema.Tool; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.CallToolResult; -import org.modelcontextprotocol.spec.McpSchema.GetPromptResult; -import org.modelcontextprotocol.spec.McpSchema.Prompt; -import org.modelcontextprotocol.spec.McpSchema.PromptMessage; -import org.modelcontextprotocol.spec.McpSchema.ReadResourceResult; -import org.modelcontextprotocol.spec.McpSchema.Resource; -import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities; -import org.modelcontextprotocol.spec.McpSchema.Tool; -import org.modelcontextprotocol.spec.McpTransport; -import org.modelcontextprotocol.spec.ServerMcpTransport; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/McpServerProtocolVersionTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/McpServerProtocolVersionTests.java similarity index 95% rename from mcp/src/test/java/org/modelcontextprotocol/server/McpServerProtocolVersionTests.java rename to mcp/src/test/java/io/modelcontextprotocol/server/McpServerProtocolVersionTests.java index 1e05231..74498ff 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/McpServerProtocolVersionTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/server/McpServerProtocolVersionTests.java @@ -2,14 +2,16 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; import java.util.List; import java.util.UUID; +import io.modelcontextprotocol.MockMcpTransport; +import io.modelcontextprotocol.server.McpAsyncServer; +import io.modelcontextprotocol.server.McpServer; +import io.modelcontextprotocol.spec.McpSchema; import org.junit.jupiter.api.Test; -import org.modelcontextprotocol.MockMcpTransport; -import org.modelcontextprotocol.spec.McpSchema; import static org.assertj.core.api.Assertions.assertThat; diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java similarity index 70% rename from mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java rename to mcp/src/test/java/io/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java index 52836e4..02d140f 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java @@ -2,12 +2,13 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; import com.fasterxml.jackson.databind.ObjectMapper; +import io.modelcontextprotocol.server.McpAsyncServer; +import io.modelcontextprotocol.server.transport.HttpServletSseServerTransport; +import io.modelcontextprotocol.spec.ServerMcpTransport; import org.junit.jupiter.api.Timeout; -import org.modelcontextprotocol.server.transport.HttpServletSseServerTransport; -import org.modelcontextprotocol.spec.ServerMcpTransport; /** * Tests for {@link McpAsyncServer} using {@link HttpServletSseServerTransport}. diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java similarity index 70% rename from mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java rename to mcp/src/test/java/io/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java index 14f6e30..9b64e3e 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java @@ -2,12 +2,13 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; import com.fasterxml.jackson.databind.ObjectMapper; +import io.modelcontextprotocol.server.McpSyncServer; +import io.modelcontextprotocol.server.transport.HttpServletSseServerTransport; +import io.modelcontextprotocol.spec.ServerMcpTransport; import org.junit.jupiter.api.Timeout; -import org.modelcontextprotocol.server.transport.HttpServletSseServerTransport; -import org.modelcontextprotocol.spec.ServerMcpTransport; /** * Tests for {@link McpSyncServer} using {@link HttpServletSseServerTransport}. diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpAsyncServerTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/StdioMcpAsyncServerTests.java similarity index 67% rename from mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpAsyncServerTests.java rename to mcp/src/test/java/io/modelcontextprotocol/server/StdioMcpAsyncServerTests.java index 717b6b0..75646fd 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpAsyncServerTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/server/StdioMcpAsyncServerTests.java @@ -2,11 +2,12 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; +import io.modelcontextprotocol.server.McpAsyncServer; +import io.modelcontextprotocol.server.transport.StdioServerTransport; +import io.modelcontextprotocol.spec.ServerMcpTransport; import org.junit.jupiter.api.Timeout; -import org.modelcontextprotocol.server.transport.StdioServerTransport; -import org.modelcontextprotocol.spec.ServerMcpTransport; /** * Tests for {@link McpAsyncServer} using {@link StdioServerTransport}. diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpSyncServerTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/StdioMcpSyncServerTests.java similarity index 67% rename from mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpSyncServerTests.java rename to mcp/src/test/java/io/modelcontextprotocol/server/StdioMcpSyncServerTests.java index 2bc8491..073bbcb 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpSyncServerTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/server/StdioMcpSyncServerTests.java @@ -2,11 +2,12 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server; +package io.modelcontextprotocol.server; +import io.modelcontextprotocol.server.McpSyncServer; +import io.modelcontextprotocol.server.transport.StdioServerTransport; +import io.modelcontextprotocol.spec.ServerMcpTransport; import org.junit.jupiter.api.Timeout; -import org.modelcontextprotocol.server.transport.StdioServerTransport; -import org.modelcontextprotocol.spec.ServerMcpTransport; /** * Tests for {@link McpSyncServer} using {@link StdioServerTransport}. diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java b/mcp/src/test/java/io/modelcontextprotocol/server/transport/BlockingInputStream.java similarity index 96% rename from mcp/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java rename to mcp/src/test/java/io/modelcontextprotocol/server/transport/BlockingInputStream.java index ec4b136..0ab72a9 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java +++ b/mcp/src/test/java/io/modelcontextprotocol/server/transport/BlockingInputStream.java @@ -1,7 +1,7 @@ /* * Copyright 2024 - 2024 the original author or authors. */ -package org.modelcontextprotocol.server.transport; +package io.modelcontextprotocol.server.transport; import java.io.IOException; import java.io.InputStream; diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java similarity index 91% rename from mcp/src/test/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java rename to mcp/src/test/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java index 0e6802c..6fe7fe0 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java @@ -1,7 +1,7 @@ /* * Copyright 2024 - 2024 the original author or authors. */ -package org.modelcontextprotocol.server.transport; +package io.modelcontextprotocol.server.transport; import java.time.Duration; import java.util.List; @@ -10,6 +10,22 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; import com.fasterxml.jackson.databind.ObjectMapper; +import io.modelcontextprotocol.client.McpClient; +import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport; +import io.modelcontextprotocol.server.McpServer; +import io.modelcontextprotocol.server.McpServerFeatures; +import io.modelcontextprotocol.server.transport.HttpServletSseServerTransport; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpSchema.CallToolResult; +import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities; +import io.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; +import io.modelcontextprotocol.spec.McpSchema.CreateMessageResult; +import io.modelcontextprotocol.spec.McpSchema.InitializeResult; +import io.modelcontextprotocol.spec.McpSchema.Role; +import io.modelcontextprotocol.spec.McpSchema.Root; +import io.modelcontextprotocol.spec.McpSchema.ServerCapabilities; +import io.modelcontextprotocol.spec.McpSchema.Tool; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.LifecycleState; @@ -17,21 +33,6 @@ import org.apache.catalina.startup.Tomcat; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.modelcontextprotocol.client.McpClient; -import org.modelcontextprotocol.client.transport.HttpClientSseClientTransport; -import org.modelcontextprotocol.server.McpServer; -import org.modelcontextprotocol.server.McpServerFeatures; -import org.modelcontextprotocol.spec.McpError; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.CallToolResult; -import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities; -import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest; -import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult; -import org.modelcontextprotocol.spec.McpSchema.InitializeResult; -import org.modelcontextprotocol.spec.McpSchema.Role; -import org.modelcontextprotocol.spec.McpSchema.Root; -import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities; -import org.modelcontextprotocol.spec.McpSchema.Tool; import reactor.test.StepVerifier; import org.springframework.web.client.RestClient; diff --git a/mcp/src/test/java/org/modelcontextprotocol/server/transport/StdioServerTransportTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/transport/StdioServerTransportTests.java similarity index 95% rename from mcp/src/test/java/org/modelcontextprotocol/server/transport/StdioServerTransportTests.java rename to mcp/src/test/java/io/modelcontextprotocol/server/transport/StdioServerTransportTests.java index f564a87..a06cfe6 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/server/transport/StdioServerTransportTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/server/transport/StdioServerTransportTests.java @@ -2,7 +2,7 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.server.transport; +package io.modelcontextprotocol.server.transport; import java.io.ByteArrayOutputStream; import java.io.InputStream; @@ -11,12 +11,13 @@ import java.nio.charset.StandardCharsets; import java.util.Map; import com.fasterxml.jackson.databind.ObjectMapper; +import io.modelcontextprotocol.server.transport.StdioServerTransport; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCRequest; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.modelcontextprotocol.spec.McpSchema; -import org.modelcontextprotocol.spec.McpSchema.JSONRPCRequest; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; diff --git a/mcp/src/test/java/org/modelcontextprotocol/spec/DefaultMcpSessionTests.java b/mcp/src/test/java/io/modelcontextprotocol/spec/DefaultMcpSessionTests.java similarity index 96% rename from mcp/src/test/java/org/modelcontextprotocol/spec/DefaultMcpSessionTests.java rename to mcp/src/test/java/io/modelcontextprotocol/spec/DefaultMcpSessionTests.java index 6ee5345..2b7bf34 100644 --- a/mcp/src/test/java/org/modelcontextprotocol/spec/DefaultMcpSessionTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/spec/DefaultMcpSessionTests.java @@ -2,16 +2,19 @@ * Copyright 2024-2024 the original author or authors. */ -package org.modelcontextprotocol.spec; +package io.modelcontextprotocol.spec; import java.time.Duration; import java.util.Map; import com.fasterxml.jackson.core.type.TypeReference; +import io.modelcontextprotocol.MockMcpTransport; +import io.modelcontextprotocol.spec.DefaultMcpSession; +import io.modelcontextprotocol.spec.McpError; +import io.modelcontextprotocol.spec.McpSchema; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.modelcontextprotocol.MockMcpTransport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Mono; diff --git a/pom.xml b/pom.xml index b683519..b562247 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.modelcontextprotocol.sdk + io.modelcontextprotocol.sdk mcp-parent 0.7.0-SNAPSHOT From 1a506d05633997c6d46f8ff47a4d5696361350be Mon Sep 17 00:00:00 2001 From: Christian Tzolov <1351573+tzolov@users.noreply.github.com> Date: Tue, 28 Jan 2025 17:52:23 +0100 Subject: [PATCH 020/426] Update pom.xml update nexus plugin version to 1.7.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b562247..4115541 100644 --- a/pom.xml +++ b/pom.xml @@ -302,7 +302,7 @@ org.sonatype.plugins nexus-staging-maven-plugin - 1.6.7 + 1.7.0 true ossrh From c78c1adcc692559f3c1cc369e3745221675f69c6 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Tue, 28 Jan 2025 19:36:27 +0100 Subject: [PATCH 021/426] Migrate to central-publishing-maven-plugin --- .github/workflows/continuous-integration.yml | 2 +- .github/workflows/maven-central-release.yml | 2 +- pom.xml | 35 ++++---------------- 3 files changed, 8 insertions(+), 31 deletions(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index a9bc8fd..1306cdf 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -18,7 +18,7 @@ jobs: java-version: '17' distribution: 'temurin' cache: 'maven' - server-id: ossrh + server-id: central server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD gpg-private-key: ${{ secrets.GPG_SECRET_KEY }} diff --git a/.github/workflows/maven-central-release.yml b/.github/workflows/maven-central-release.yml index 87b338c..4418440 100644 --- a/.github/workflows/maven-central-release.yml +++ b/.github/workflows/maven-central-release.yml @@ -18,7 +18,7 @@ jobs: java-version: '17' distribution: 'temurin' cache: 'maven' - server-id: ossrh + server-id: central server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD gpg-private-key: ${{ secrets.GPG_SECRET_KEY }} diff --git a/pom.xml b/pom.xml index 4115541..d1bdc29 100644 --- a/pom.xml +++ b/pom.xml @@ -50,13 +50,6 @@ Github Actions https://github.com/modelcontextprotocol/java-sdk/actions - - - ossrh - Central Repository OSSRH - https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ - - UTF-8 @@ -300,19 +293,13 @@ - org.sonatype.plugins - nexus-staging-maven-plugin - 1.7.0 + org.sonatype.central + central-publishing-maven-plugin + 0.7.0 true - ossrh - https://s01.oss.sonatype.org/ - - false + central + false @@ -338,16 +325,6 @@ - - - ossrh - https://s01.oss.sonatype.org/content/repositories/snapshots - - - ossrh - https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ - - @@ -385,4 +362,4 @@ - + \ No newline at end of file From a439e4ae6a19c0f306ae0f7573ee65de5e9ad640 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Tue, 28 Jan 2025 19:45:56 +0100 Subject: [PATCH 022/426] Re-enable the CI tests --- .github/workflows/continuous-integration.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 1306cdf..fffdec2 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -35,7 +35,7 @@ jobs: MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} MAVEN_GPG_PASSPHRASE: ${{ secrets.SIGNING_PASSPHRASE }} run: | - mvn -Pjavadoc -Prelease -DskipTests --batch-mode --update-snapshots deploy + mvn -Pjavadoc -Prelease --batch-mode --update-snapshots deploy - name: Generate Java docs run: mvn -Pjavadoc -B javadoc:aggregate From 7e73152ada562b978a2e8c8b3a2a579e70582b8f Mon Sep 17 00:00:00 2001 From: Mark Pollack Date: Tue, 28 Jan 2025 08:49:41 -0500 Subject: [PATCH 023/426] Convert asciidoc/antor docs to mintlify --- mintlify-docs/docs/dependency-management.mdx | 104 +++++++ mintlify-docs/docs/mcp-capabilities.mdx | 139 +++++++++ mintlify-docs/docs/mcp-client.mdx | 232 ++++++++++++++ mintlify-docs/docs/mcp-overview.mdx | 85 ++++++ mintlify-docs/docs/mcp-server.mdx | 98 ++++++ mintlify-docs/docs/mcp-transport.mdx | 144 +++++++++ mintlify-docs/docs/overview.mdx | 55 ++++ mintlify-docs/favicon.svg | 12 + mintlify-docs/images/class-diagrams.puml | 282 ++++++++++++++++++ mintlify-docs/images/mcp-stack.svg | 197 ++++++++++++ .../spring-ai-mcp-client-architecture.jpg | Bin 0 -> 702970 bytes .../spring-ai-mcp-server-architecture.jpg | Bin 0 -> 809495 bytes .../images/spring-ai-mcp-uml-classdiagram.svg | 1 + mintlify-docs/mint.json | 41 +++ 14 files changed, 1390 insertions(+) create mode 100644 mintlify-docs/docs/dependency-management.mdx create mode 100644 mintlify-docs/docs/mcp-capabilities.mdx create mode 100644 mintlify-docs/docs/mcp-client.mdx create mode 100644 mintlify-docs/docs/mcp-overview.mdx create mode 100644 mintlify-docs/docs/mcp-server.mdx create mode 100644 mintlify-docs/docs/mcp-transport.mdx create mode 100644 mintlify-docs/docs/overview.mdx create mode 100644 mintlify-docs/favicon.svg create mode 100644 mintlify-docs/images/class-diagrams.puml create mode 100644 mintlify-docs/images/mcp-stack.svg create mode 100644 mintlify-docs/images/spring-ai-mcp-client-architecture.jpg create mode 100644 mintlify-docs/images/spring-ai-mcp-server-architecture.jpg create mode 100644 mintlify-docs/images/spring-ai-mcp-uml-classdiagram.svg create mode 100644 mintlify-docs/mint.json diff --git a/mintlify-docs/docs/dependency-management.mdx b/mintlify-docs/docs/dependency-management.mdx new file mode 100644 index 0000000..204c51c --- /dev/null +++ b/mintlify-docs/docs/dependency-management.mdx @@ -0,0 +1,104 @@ +--- +title: Dependency Management +description: Guide to managing dependencies for the Model Context Protocol (MCP) Java SDK +--- + +# Dependency Management + +## Bill of Materials (BOM) + +The Bill of Materials (BOM) declares the recommended versions of all the dependencies used by a given release. +Using the BOM from your application's build script avoids the need for you to specify and maintain the dependency versions yourself. +Instead, the version of the BOM you're using determines the utilized dependency versions. +It also ensures that you're using supported and tested versions of the dependencies by default, unless you choose to override them. + +Add the BOM to your project: + + + +```xml + + + + org.modelcontextprotocol.sdk + mcp-bom + 0.6.0-SNAPSHOT + pom + import + + + +``` + + + +```groovy +dependencies { + implementation platform("org.modelcontextprotocol.sdk:mcp-bom:0.6.0-SNAPSHOT") + //... +} +``` + +Gradle users can also use the Spring AI MCP BOM by leveraging Gradle (5.0+) native support for declaring dependency constraints using a Maven BOM. +This is implemented by adding a 'platform' dependency handler method to the dependencies section of your Gradle build script. +As shown in the snippet below this can then be followed by version-less declarations of the Starter Dependencies for the one or more spring-ai modules you wish to use, e.g. spring-ai-openai. + + + +Replace the version number with the version of the BOM you want to use. + +## Available Dependencies + +The following dependencies are available and managed by the BOM: + +### Core Dependencies + +- `org.modelcontextprotocol.sdk:mcp` - Core MCP library providing the base functionality and APIs for Model Context Protocol implementation. + +### Transport Dependencies + +- `org.modelcontextprotocol.sdk:mcp-webflux-sse-transport` - WebFlux-based Server-Sent Events (SSE) transport implementation for reactive applications. +- `org.modelcontextprotocol.sdk:mcp-webmvc-sse-transport` - WebMVC-based Server-Sent Events (SSE) transport implementation for servlet-based applications. + +### Testing Dependencies + +- `org.modelcontextprotocol.sdk:mcp-test` - Testing utilities and support for MCP-based applications. + +### Milestone and Snapshot Repositories + +To use the Milestone and Snapshot version, you need to add references to the Spring Milestone and/or Snapshot repositories in your build file. +Add the following repository definitions to your Maven or Gradle build file: + + + +```xml + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + false + + + +``` + + + +```groovy +repositories { + maven { url 'https://repo.spring.io/milestone' } + maven { url 'https://repo.spring.io/snapshot' } +} +``` + + diff --git a/mintlify-docs/docs/mcp-capabilities.mdx b/mintlify-docs/docs/mcp-capabilities.mdx new file mode 100644 index 0000000..aceda05 --- /dev/null +++ b/mintlify-docs/docs/mcp-capabilities.mdx @@ -0,0 +1,139 @@ +--- +title: MCP Server Capabilities +description: Configure and manage Model Context Protocol (MCP) server capabilities including tools, resources, and prompts +--- + +# Model Context Protocol Server Capabilities + +The server can be configured with various capabilities: + +```java +var capabilities = ServerCapabilities.builder() + .resources(false, true) // Resource support with list changes notifications + .tools(true) // Tool support with list changes notifications + .prompts(true) // Prompt support with list changes notifications + .logging() // Enable logging support (enabled by default with loging level INFO) + .build(); +``` + +## Logging Support + +The server provides structured logging capabilities that allow sending log messages to clients with different severity levels: + +```java +// Send a log message to clients +server.loggingNotification(LoggingMessageNotification.builder() + .level(LoggingLevel.INFO) + .logger("custom-logger") + .data("Custom log message") + .build()); +``` + +Clients can control the minimum logging level they receive through the `mcpClient.setLoggingLevel(level)` request. Messages below the set level will be filtered out. +Supported logging levels (in order of increasing severity): DEBUG (0), INFO (1), NOTICE (2), WARNING (3), ERROR (4), CRITICAL (5), ALERT (6), EMERGENCY (7) + +## Tool Registration + + + +```java +// Sync tool registration +var syncToolRegistration = new McpServerFeatures.SyncToolRegistration( + new Tool("calculator", "Basic calculator", Map.of( + "operation", "string", + "a", "number", + "b", "number" + )), + arguments -> { + // Tool implementation + return new CallToolResult(result, false); + } +); +``` + + + +```java +// Async tool registration +var asyncToolRegistration = new McpServerFeatures.AsyncToolRegistration( + new Tool("calculator", "Basic calculator", Map.of( + "operation", "string", + "a", "number", + "b", "number" + )), + arguments -> { + // Tool implementation + return Mono.just(new CallToolResult(result, false)); + } +); +``` + + + +## Resource Registration + + + +```java +// Sync resource registration +var syncResourceRegistration = new McpServerFeatures.SyncResourceRegistration( + new Resource("custom://resource", "name", "description", "mime-type", null), + request -> { + // Resource read implementation + return new ReadResourceResult(contents); + } +); +``` + + + +```java +// Async resource registration +var asyncResourceRegistration = new McpServerFeatures.AsyncResourceRegistration( + new Resource("custom://resource", "name", "description", "mime-type", null), + request -> { + // Resource read implementation + return Mono.just(new ReadResourceResult(contents)); + } +); +``` + + + +## Prompt Registration + + + +```java +// Sync prompt registration +var syncPromptRegistration = new McpServerFeatures.SyncPromptRegistration( + new Prompt("greeting", "description", List.of( + new PromptArgument("name", "description", true) + )), + request -> { + // Prompt implementation + return new GetPromptResult(description, messages); + } +); +``` + + + +```java +// Async prompt registration +var asyncPromptRegistration = new McpServerFeatures.AsyncPromptRegistration( + new Prompt("greeting", "description", List.of( + new PromptArgument("name", "description", true) + )), + request -> { + // Prompt implementation + return Mono.just(new GetPromptResult(description, messages)); + } +); +``` + + + +# Error Handling + +The SDK provides comprehensive error handling through the McpError class, covering protocol compatibility, transport communication, JSON-RPC messaging, tool execution, resource management, prompt handling, timeouts, and connection issues. This unified error handling approach ensures consistent and reliable error management across both synchronous and asynchronous operations. diff --git a/mintlify-docs/docs/mcp-client.mdx b/mintlify-docs/docs/mcp-client.mdx new file mode 100644 index 0000000..0f78879 --- /dev/null +++ b/mintlify-docs/docs/mcp-client.mdx @@ -0,0 +1,232 @@ +--- +title: MCP Client +description: Learn how to use the Model Context Protocol (MCP) client to interact with MCP servers +--- + +# Model Context Protocol Client + +The MCP Client is a key component in the Model Context Protocol (MCP) architecture, responsible for establishing and managing connections with MCP servers. It implements the client-side of the protocol, handling: + +- Protocol version negotiation to ensure compatibility with servers +- Capability negotiation to determine available features +- Message transport and JSON-RPC communication +- Tool discovery and execution +- Resource access and management +- Prompt system interactions +- Optional features like roots management and sampling support + +The client provides both synchronous and asynchronous APIs for flexibility in different application contexts. + + + +```java +// Create a sync client with custom configuration +McpSyncClient client = McpClient.sync(transport) + .requestTimeout(Duration.ofSeconds(10)) + .capabilities(ClientCapabilities.builder() + .roots(true) // Enable roots capability + .sampling() // Enable sampling capability + .build()) + .sampling(request -> new CreateMessageResult(response)) + .build(); + +// Initialize connection +client.initialize(); + +// List available tools +ListToolsResult tools = client.listTools(); + +// Call a tool +CallToolResult result = client.callTool( + new CallToolRequest("calculator", + Map.of("operation", "add", "a", 2, "b", 3)) +); + +// List and read resources +ListResourcesResult resources = client.listResources(); +ReadResourceResult resource = client.readResource( + new ReadResourceRequest("resource://uri") +); + +// List and use prompts +ListPromptsResult prompts = client.listPrompts(); +GetPromptResult prompt = client.getPrompt( + new GetPromptRequest("greeting", Map.of("name", "Spring")) +); + +// Add/remove roots +client.addRoot(new Root("file:///path", "description")); +client.removeRoot("file:///path"); + +// Close client +client.closeGracefully(); +``` + + + +```java +// Create an async client with custom configuration +McpAsyncClient client = McpClient.async(transport) + .requestTimeout(Duration.ofSeconds(10)) + .capabilities(ClientCapabilities.builder() + .roots(true) // Enable roots capability + .sampling() // Enable sampling capability + .build()) + .sampling(request -> Mono.just(new CreateMessageResult(response))) + .toolsChangeConsumer(tools -> Mono.fromRunnable(() -> { + logger.info("Tools updated: {}", tools); + })) + .resourcesChangeConsumer(resources -> Mono.fromRunnable(() -> { + logger.info("Resources updated: {}", resources); + })) + .promptsChangeConsumer(prompts -> Mono.fromRunnable(() -> { + logger.info("Prompts updated: {}", prompts); + })) + .build(); + +// Initialize connection and use features +client.initialize() + .flatMap(initResult -> client.listTools()) + .flatMap(tools -> { + return client.callTool(new CallToolRequest( + "calculator", + Map.of("operation", "add", "a", 2, "b", 3) + )); + }) + .flatMap(result -> { + return client.listResources() + .flatMap(resources -> + client.readResource(new ReadResourceRequest("resource://uri")) + ); + }) + .flatMap(resource -> { + return client.listPrompts() + .flatMap(prompts -> + client.getPrompt(new GetPromptRequest( + "greeting", + Map.of("name", "Spring") + )) + ); + }) + .flatMap(prompt -> { + return client.addRoot(new Root("file:///path", "description")) + .then(client.removeRoot("file:///path")); + }) + .doFinally(signalType -> { + client.closeGracefully().subscribe(); + }) + .subscribe(); +``` + + + +## Client Features + +### Tool Execution + +Tools are server-side functions that can be discovered and executed by clients. The client provides methods to list available tools and execute them with parameters. + + + +```java +// List available tools +var tools = client.listTools(); +tools.forEach(tool -> System.out.println(tool.getName())); + +// Execute a tool +var result = client.executeTool("calculator", Map.of( + "operation", "add", + "a", 1, + "b", 2 +)); +``` + + + +```java +// List available tools +client.listTools() + .doOnNext(tools -> tools.forEach(tool -> + System.out.println(tool.getName()))) + .subscribe(); + +// Execute a tool +client.executeTool("calculator", Map.of( + "operation", "add", + "a", 1, + "b", 2 + )) + .subscribe(); +``` + + + +### Resource Access + +Resources are server-side data sources that can be accessed by clients using URI templates. The client provides methods to list available resources and retrieve their content. + + + +```java +// List available resources +var resources = client.listResources(); +resources.forEach(resource -> System.out.println(resource.getName())); + +// Get a resource +var content = client.getResource("file", Map.of( + "path", "/path/to/file.txt" +)); +``` + + + +```java +// List available resources +client.listResources() + .doOnNext(resources -> resources.forEach(resource -> + System.out.println(resource.getName()))) + .subscribe(); + +// Get a resource +client.getResource("file", Map.of( + "path", "/path/to/file.txt" + )) + .subscribe(); +``` + + + +### Prompt System + +The prompt system allows clients to interact with server-side prompt templates. The client provides methods to list available prompts and execute them with parameters. + + + +```java +// List available prompts +var prompts = client.listPrompts(); +prompts.forEach(prompt -> System.out.println(prompt.getName())); + +// Execute a prompt +var response = client.executePrompt("echo", Map.of( + "text", "Hello, World!" +)); +``` + + + +```java +// List available prompts +client.listPrompts() + .doOnNext(prompts -> prompts.forEach(prompt -> + System.out.println(prompt.getName()))) + .subscribe(); + +// Execute a prompt +client.executePrompt("echo", Map.of( + "text", "Hello, World!" + )) + .subscribe(); +``` + + diff --git a/mintlify-docs/docs/mcp-overview.mdx b/mintlify-docs/docs/mcp-overview.mdx new file mode 100644 index 0000000..68329fa --- /dev/null +++ b/mintlify-docs/docs/mcp-overview.mdx @@ -0,0 +1,85 @@ +--- +title: MCP Overview +description: Overview of the Model Context Protocol (MCP) architecture and key concepts +--- + +# Java MCP SDK + +Java SDK implementation of the [Model Context Protocol](https://modelcontextprotocol.io/introduction), enabling seamless integration with language models and AI tools. + +![Spring AI MCP Client Architecture](/images/spring-ai-mcp-client-architecture.jpg) +![Spring AI MCP Server Architecture](/images/spring-ai-mcp-server-architecture.jpg) + +## Features + +- Synchronous and Asynchronous MCP Client and MCP Server implementations +- Standard MCP operations support: + - Protocol [version compatibility negotiation](https://spec.modelcontextprotocol.io/specification/2024-11-05/basic/lifecycle/#initialization) + - [Tool](https://spec.modelcontextprotocol.io/specification/2024-11-05/server/tools/) discovery, execution, list change notifications + - [Resource](https://spec.modelcontextprotocol.io/specification/2024-11-05/server/resources/) management with URI templates + - [Roots](https://spec.modelcontextprotocol.io/specification/2024-11-05/client/roots/) list management and notifications + - [Prompt](https://spec.modelcontextprotocol.io/specification/2024-11-05/server/prompts/) handling and management + - [Sampling](https://spec.modelcontextprotocol.io/specification/2024-11-05/client/sampling/) support for AI model interactions +- Multiple transport implementations: + - Core transports: + - Stdio-based transport for process-based communication + - Java HttpClient-based SSE client transport for HTTP SSE Client-side streaming + - Servlet-based SSE server transport for HTTP SSE Server streaming + - Spring-based transports: + - WebFlux SSE transport for reactive HTTP streaming + - WebMVC SSE transport for servlet-based HTTP streaming + +## Architecture + +![MCP Stack Architecture](/images/mcp-stack.svg) + +The SDK follows a layered architecture with clear separation of concerns: + +- **Client/Server Layer**: Both use McpSession for sync/async operations, with McpClient handling client-side protocol operations and McpServer managing server-side protocol operations. +- **Session Layer (McpSession)**: Manages communication patterns and state using DefaultMcpSession implementation. +- **Transport Layer (McpTransport)**: Handles JSON-RPC message serialization/deserialization via: + - StdioTransport (stdin/stdout) in the core module + - HTTP SSE transports in dedicated transport modules (Java HttpClient, Spring WebFlux, Spring WebMVC) + +Following class diagram illustrates the layered architecture of the MCP SDK, showing the relationships between core interfaces (McpTransport, McpSession), their implementations, and the client/server components. It highlights how the transport layer connects to sessions, which in turn support both synchronous and asynchronous client/server implementations. + +![MCP SDK Class Diagram](/images/spring-ai-mcp-uml-classdiagram.svg) + +Key Interactions: + +- **Client/Server Initialization**: Transport setup, protocol compatibility check, capability negotiation, and implementation details exchange. +- **Message Flow**: JSON-RPC message handling with validation, type-safe response processing, and error handling. +- **Resource Management**: Resource discovery, URI template-based access, subscription system, and content retrieval. + +## Dependencies + +Add the following dependency to your Maven project: + + + +The core MCP functionality: + +```xml + + org.modelcontextprotocol.sdk + mcp + +``` + +For HTTP SSE transport implementations, add one of the following dependencies: + +```xml + + + org.modelcontextprotocol.sdk + mcp-webflux-sse-transport + + + + + org.modelcontextprotocol.sdk + mcp-webmvc-sse-transport + +``` + + diff --git a/mintlify-docs/docs/mcp-server.mdx b/mintlify-docs/docs/mcp-server.mdx new file mode 100644 index 0000000..894e1f3 --- /dev/null +++ b/mintlify-docs/docs/mcp-server.mdx @@ -0,0 +1,98 @@ +--- +title: MCP Server +description: Learn how to implement and configure a Model Context Protocol (MCP) server +--- + +# Model Context Protocol Server + +The MCP Server is a foundational component in the Model Context Protocol (MCP) architecture that provides tools, resources, and capabilities to clients. It implements the server-side of the protocol, responsible for: + +- Exposing tools that clients can discover and execute +- Managing resources with URI-based access patterns +- Providing prompt templates and handling prompt requests +- Supporting capability negotiation with clients +- Implementing server-side protocol operations +- Managing concurrent client connections +- Providing structured logging and notifications + +The server supports both synchronous and asynchronous APIs, allowing for flexible integration in different application contexts. + + + +```java +// Create a server with custom configuration +McpSyncServer syncServer = McpServer.sync(transport) + .serverInfo("my-server", "1.0.0") + .capabilities(ServerCapabilities.builder() + .resources(true) // Enable resource support + .tools(true) // Enable tool support + .prompts(true) // Enable prompt support + .logging() // Enable logging support + .build()) + .build(); + +// Initialize the server +syncServer.initialize(); + +// Register tools, resources, and prompts +syncServer.registerTool(syncToolRegistration); +syncServer.registerResource(syncResourceRegistration); +syncServer.registerPrompt(syncPromptRegistration); + +// Send logging notifications +syncServer.loggingNotification(LoggingMessageNotification.builder() + .level(LoggingLevel.INFO) + .logger("custom-logger") + .data("Server initialized") + .build()); + +// Close the server when done +syncServer.close(); +``` + + + +```java +// Create an async server with custom configuration +McpAsyncServer asyncServer = McpServer.async(transport) + .serverInfo("my-server", "1.0.0") + .capabilities(ServerCapabilities.builder() + .resources(true) // Enable resource support + .tools(true) // Enable tool support + .prompts(true) // Enable prompt support + .logging() // Enable logging support + .build()) + .build(); + +// Initialize the server +asyncServer.initialize() + .doOnSuccess(v -> logger.info("Server initialized")) + .subscribe(); + +// Register tools, resources, and prompts +asyncServer.registerTool(asyncToolRegistration) + .doOnSuccess(v -> logger.info("Tool registered")) + .subscribe(); + +asyncServer.registerResource(asyncResourceRegistration) + .doOnSuccess(v -> logger.info("Resource registered")) + .subscribe(); + +asyncServer.registerPrompt(asyncPromptRegistration) + .doOnSuccess(v -> logger.info("Prompt registered")) + .subscribe(); + +// Send logging notifications +asyncServer.loggingNotification(LoggingMessageNotification.builder() + .level(LoggingLevel.INFO) + .logger("custom-logger") + .data("Server initialized") + .build()); + +// Close the server when done +asyncServer.close() + .doOnSuccess(v -> logger.info("Server closed")) + .subscribe(); +``` + + diff --git a/mintlify-docs/docs/mcp-transport.mdx b/mintlify-docs/docs/mcp-transport.mdx new file mode 100644 index 0000000..e0483d6 --- /dev/null +++ b/mintlify-docs/docs/mcp-transport.mdx @@ -0,0 +1,144 @@ +--- +title: MCP Transport +description: Understanding the Model Context Protocol (MCP) transport layer and available implementations +--- + +# Model Context Protocol Transport Layer + +The transport layer in the MCP SDK is responsible for handling the communication between clients and servers. It provides different implementations to support various communication protocols and patterns. The SDK includes several built-in transport implementations: + + + + + <> + Create in-process based transport: + + ```java + StdioServerTransport transport = new StdioServerTransport(new ObjectMapper()); + ``` + + Provides bidirectional JSON-RPC message handling over standard input/output streams with non-blocking message processing, serialization/deserialization, and graceful shutdown support. + + Key features: +

    +
  • Bidirectional communication through stdin/stdout
  • +
  • Process-based integration support
  • +
  • Simple setup and configuration
  • +
  • Lightweight implementation
  • +
+ + + + + <> +

Creates WebFlux-based SSE server transport.
Requires the mcp-webflux-sse-transport dependency.

+ +
+      
+        {`@Configuration
+class McpConfig {
+    @Bean
+    WebFluxSseServerTransport webFluxSseServerTransport(ObjectMapper mapper) {
+        return new WebFluxSseServerTransport(mapper, "/mcp/message");
+    }
+
+    @Bean
+    RouterFunction mcpRouterFunction(WebFluxSseServerTransport transport) {
+        return transport.getRouterFunction();
+    }
+}`}
+      
+    
+ +

Implements the MCP HTTP with SSE transport specification, providing:

+
    +
  • Reactive HTTP streaming with WebFlux
  • +
  • Concurrent client connections through SSE endpoints
  • +
  • Message routing and session management
  • +
  • Graceful shutdown capabilities
  • +
+ +
+ + + + <> +

Creates WebMvc-based SSE server transport.
Requires the mcp-webmvc-sse-transport dependency.

+ +
+      
+        {`@Configuration
+@EnableWebMvc
+class McpConfig {
+    @Bean
+    WebMvcSseServerTransport webMvcSseServerTransport(ObjectMapper mapper) {
+        return new WebMvcSseServerTransport(mapper, "/mcp/message");
+    }
+
+    @Bean
+    RouterFunction mcpRouterFunction(WebMvcSseServerTransport transport) {
+        return transport.getRouterFunction();
+    }
+}`}
+      
+    
+ +

Implements the MCP HTTP with SSE transport specification, providing:

+
    +
  • Server-side event streaming
  • +
  • Integration with Spring WebMVC
  • +
  • Support for traditional web applications
  • +
  • Synchronous operation handling
  • +
+ +
+ + + + <> +

+ Creates a Servlet-based SSE server transport.
+ Included in the core mcp module.
+ The HttpServletSseServerTransport can be used with any Servlet container. + To use it with a Spring Web application, you can register it as a Servlet bean: +

+ +
+      
+        {`@Configuration
+@EnableWebMvc
+public class McpServerConfig implements WebMvcConfigurer {
+
+    @Bean
+    public HttpServletSseServerTransport servletSseServerTransport() {
+        return new HttpServletSseServerTransport(new ObjectMapper(), "/mcp/message");
+    }
+
+    @Bean
+    public ServletRegistrationBean customServletBean(HttpServletSseServerTransport servlet) {
+        return new ServletRegistrationBean(servlet);
+    }
+}`}
+      
+    
+ +

+ Implements the MCP HTTP with SSE transport specification using the traditional Servlet API, providing: +

+
    +
  • Asynchronous message handling using Servlet 6.0 async support
  • +
  • Session management for multiple client connections
  • +
  • + Two types of endpoints: +
      +
    • SSE endpoint (/sse) for server-to-client events
    • +
    • Message endpoint (configurable) for client-to-server requests
    • +
    +
  • +
  • Error handling and response formatting
  • +
  • Graceful shutdown support
  • +
+ +
+ + diff --git a/mintlify-docs/docs/overview.mdx b/mintlify-docs/docs/overview.mdx new file mode 100644 index 0000000..6624032 --- /dev/null +++ b/mintlify-docs/docs/overview.mdx @@ -0,0 +1,55 @@ +--- +title: Overview +description: Introduction to the Model Context Protocol (MCP) Java SDK +--- + +# Java & Spring MCP + +Java SDK and Spring Framework integration for the [Model Context Protocol](https://modelcontextprotocol.org/docs/concepts/architecture), enabling standardized interaction with AI models and tools through both synchronous and asynchronous communication. + +![Spring AI MCP Client Architecture](/images/spring-ai-mcp-client-architecture.jpg) +![Spring AI MCP Server Architecture](/images/spring-ai-mcp-server-architecture.jpg) + +## Core Components + +### [MCP Java SDK](/docs/mcp) +Core implementation of the Model Context Protocol specification, providing: + +- Synchronous and asynchronous [Client](/docs/mcp#mcp-client) and [Server](/docs/mcp#mcp-server) implementations +- Tool discovery and execution +- Resource management with URI templates +- Prompt handling and management +- Structured logging +- Request and Notification handling + +### MCP Transports + +#### Core Transports +- Stdio-based (`StdioClientTransport`, `StdioServerTransport`) for process-based communication +- Java HttpClient-based SSE client (`HttpClientSseClientTransport`) for HTTP SSE Client-side streaming +- Servlet-based SSE server (`HttpServletSseServerTransport`) for HTTP SSE Server streaming using traditional Servlet API + +#### Optional SSE Transports +- [WebFlux SSE Transport](https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-transport/mcp-webflux-sse-transport) - Reactive HTTP streaming with Spring WebFlux (Client & Server) +- [WebMvc SSE Transport](https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-transport/mcp-webmvc-sse-transport) - Spring MVC based SSE transport (Server only). +You can use the core `HttpClientSseClientTransport` transport as a SSE client. + +## Getting Started + + + +```xml + + + org.modelcontextprotocol.sdk + mcp + + + + + org.modelcontextprotocol.sdk + mcp-webflux-sse-transport + +``` + + diff --git a/mintlify-docs/favicon.svg b/mintlify-docs/favicon.svg new file mode 100644 index 0000000..03d9f85 --- /dev/null +++ b/mintlify-docs/favicon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/mintlify-docs/images/class-diagrams.puml b/mintlify-docs/images/class-diagrams.puml new file mode 100644 index 0000000..5b08c73 --- /dev/null +++ b/mintlify-docs/images/class-diagrams.puml @@ -0,0 +1,282 @@ +@startuml Core Components + +' Core Interfaces +interface McpTransport { + +Mono connect(Function, Mono> handler) + +Mono sendMessage(JSONRPCMessage message) + +void close() + +Mono closeGracefully() + + T unmarshalFrom(Object data, TypeReference typeRef) +} + +interface McpSession { + + Mono sendRequest(String method, Object requestParams, TypeReference typeRef) + +Mono sendNotification(String method, Map params) + +Mono closeGracefully() + +void close() +} + +' Core Implementation Classes +class DefaultMcpSession { + +interface RequestHandler + +interface NotificationHandler +} + +' Client Classes +class McpClient { + +{static} Builder using(ClientMcpTransport transport) +} + +class McpAsyncClient { + +Mono initialize() + +ServerCapabilities getServerCapabilities() + +Implementation getServerInfo() + +ClientCapabilities getClientCapabilities() + +Implementation getClientInfo() + +void close() + +Mono closeGracefully() + +Mono ping() + +Mono addRoot(Root root) + +Mono removeRoot(String rootUri) + +Mono rootsListChangedNotification() + +Mono callTool(CallToolRequest request) + +Mono listTools() + +Mono listResources() + +Mono readResource(ReadResourceRequest request) + +Mono listResourceTemplates() + +Mono subscribeResource(SubscribeRequest request) + +Mono unsubscribeResource(UnsubscribeRequest request) + +Mono listPrompts() + +Mono getPrompt(GetPromptRequest request) + +Mono setLoggingLevel(LoggingLevel level) +} + +class McpSyncClient { + +InitializeResult initialize() + +ServerCapabilities getServerCapabilities() + +Implementation getServerInfo() + +ClientCapabilities getClientCapabilities() + +Implementation getClientInfo() + +void close() + +boolean closeGracefully() + +Object ping() + +void addRoot(Root root) + +void removeRoot(String rootUri) + +void rootsListChangedNotification() + +CallToolResult callTool(CallToolRequest request) + +ListToolsResult listTools() + +ListResourcesResult listResources() + +ReadResourceResult readResource(ReadResourceRequest request) + +ListResourceTemplatesResult listResourceTemplates() + +void subscribeResource(SubscribeRequest request) + +void unsubscribeResource(UnsubscribeRequest request) + +ListPromptsResult listPrompts() + +GetPromptResult getPrompt(GetPromptRequest request) + +void setLoggingLevel(LoggingLevel level) +} + +' Server Classes +class McpServer { + +{static} Builder using(ServerMcpTransport transport) +} + +class McpAsyncServer { + + +ServerCapabilities getServerCapabilities() + +Implementation getServerInfo() + +ClientCapabilities getClientCapabilities() + +Implementation getClientInfo() + +void close() + +Mono closeGracefully() + + ' Tool Management + +Mono addTool(ToolRegistration toolRegistration) + +Mono removeTool(String toolName) + +Mono notifyToolsListChanged() + + ' Resource Management + +Mono addResource(ResourceRegistration resourceHandler) + +Mono removeResource(String resourceUri) + +Mono notifyResourcesListChanged() + + ' Prompt Management + +Mono addPrompt(PromptRegistration promptRegistration) + +Mono removePrompt(String promptName) + +Mono notifyPromptsListChanged() + + ' Logging + +Mono loggingNotification(LoggingMessageNotification notification) + + ' Sampling + +Mono createMessage(CreateMessageRequest request) +} + +class McpSyncServer { + +McpAsyncServer getAsyncServer() + + +ServerCapabilities getServerCapabilities() + +Implementation getServerInfo() + +ClientCapabilities getClientCapabilities() + +Implementation getClientInfo() + +void close() + +void closeGracefully() + + ' Tool Management + +void addTool(ToolRegistration toolHandler) + +void removeTool(String toolName) + +void notifyToolsListChanged() + + ' Resource Management + +void addResource(ResourceRegistration resourceHandler) + +void removeResource(String resourceUri) + +void notifyResourcesListChanged() + + ' Prompt Management + +void addPrompt(PromptRegistration promptRegistration) + +void removePrompt(String promptName) + +void notifyPromptsListChanged() + + ' Logging + +void loggingNotification(LoggingMessageNotification notification) + + ' Sampling + +CreateMessageResult createMessage(CreateMessageRequest request) +} + +' Transport Implementations +class StdioClientTransport implements ClientMcpTransport { + +void setErrorHandler(Consumer errorHandler) + +Sinks.Many getErrorSink() +} + +class StdioServerTransport implements ServerMcpTransport { +} + + +class HttpServletSseServerTransport implements ServerMcpTransport { +} + + +class HttpClientSseClientTransport implements ClientMcpTransport { +} + + +class WebFluxSseClientTransport implements ClientMcpTransport { +} + + +class WebFluxSseServerTransport implements ServerMcpTransport { + +RouterFunction getRouterFunction() +} + +class WebMvcSseServerTransport implements ServerMcpTransport { + +RouterFunction getRouterFunction() +} + + +' Schema and Error Classes +class McpSchema { + +class ErrorCodes + +interface Request + +interface JSONRPCMessage + +interface ResourceContents + +interface Content + +interface ServerCapabilities + +{static} JSONRPCMessage deserializeJsonRpcMessage() +} + +class McpError { +} + +' Relationships +McpTransport <|.. ClientMcpTransport +McpTransport <|.. ServerMcpTransport + +McpSession <|.. DefaultMcpSession +DefaultMcpSession --o McpAsyncClient +DefaultMcpSession --o McpAsyncServer + +McpClient ..> McpAsyncClient : creates +McpClient ..> McpSyncClient : creates +McpSyncClient --> McpAsyncClient : delegates to + +McpServer ..> McpAsyncServer : creates +McpServer ..> McpSyncServer : creates +McpSyncServer o-- McpAsyncServer + +DefaultMcpSession o-- McpTransport +McpSchema <.. McpSession : uses +McpError ..> McpSession : throws + +@enduml + +@startuml Message Flow + +package "MCP Schema" { + interface JSONRPCMessage { + +String jsonrpc() + } + + interface Request { + } + + class InitializeRequest + class CallToolRequest + class ListToolsRequest + class ListResourcesRequest + class ReadResourceRequest + class ListResourceTemplatesRequest + class ListPromptsRequest + class GetPromptRequest +} + +package "Resource Types" { + interface ResourceContents { + +String uri() + +String mimeType() + } + + class TextResourceContents + class BlobResourceContents + + interface Content { + +String type() + } + + class TextContent + class ImageContent + class EmbeddedResource + + interface Annotated { + +Annotations annotations() + } + + interface PromptOrResourceReference { + +String type() + } + + class PromptReference + class ResourceReference +} + +JSONRPCMessage <|.. Request +Request <|.. InitializeRequest +Request <|.. CallToolRequest +Request <|.. ListToolsRequest +Request <|.. ListResourcesRequest +Request <|.. ReadResourceRequest +Request <|.. ListResourceTemplatesRequest +Request <|.. ListPromptsRequest +Request <|.. GetPromptRequest + +ResourceContents <|.. TextResourceContents +ResourceContents <|.. BlobResourceContents + +Content <|.. TextContent +Content <|.. ImageContent +Content <|.. EmbeddedResource + +PromptOrResourceReference <|.. PromptReference +PromptOrResourceReference <|.. ResourceReference + +@enduml diff --git a/mintlify-docs/images/mcp-stack.svg b/mintlify-docs/images/mcp-stack.svg new file mode 100644 index 0000000..3847eaa --- /dev/null +++ b/mintlify-docs/images/mcp-stack.svg @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mintlify-docs/images/spring-ai-mcp-client-architecture.jpg b/mintlify-docs/images/spring-ai-mcp-client-architecture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f858b8d5ca623cca605b1e0c2ba6c86a4d29fbe6 GIT binary patch literal 702970 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 z zQ--G%;qX}qj6MvVOM31jS&C=qfRDwE29z?H?S4R(o6lPD;Ce5?TN(}Ok6#Z}Cz-s# zT7tEHek0oCc8|Vkyd1|Ei|T3-Br*=)fSmDhvA3U!RfIN$)xE;#f_Ar#X|W_ZIjqMM zAbM3Wxf4;NZLqRU8-~{=;9GWzZ^eX-d<8plu;+)4l6tRu4j$roMoJ&xOg|BpXv3Z3 zkW@RcphA4sk$gYPf;8)9)1FK@W-Cyg0xQmeeF~+%%spy0QY`53o|JPC!wofCR5l&( z+{&IYj$?q2(CL@}-8>F;0NUO2I>{!h!YW~8Uz80FbQs;g_W zjri7yqX9hBvJqm0U(nmAMUUC^&k5=g&cQ;UPZcfi8SwzOO_Jc)vKwU0*J58;4{x^ z)E#VoZ22L%mr)6Zz-x!{M8hjNxCvNuXGJR7{h~X)5NRz^{7jKTqWhZOlw0{v<)L3A zV_FuQ%>{B=O0mkBcx|x-MV{`rKIsO&rTIhbo*~QR@U>JyFbWf!#`U2bjm(Tc9|wW# z^JU+kC20K|fp^bWq@npY1j?&>d&Dd8SyW7lmi{c+>U2L6!PnVsK;LUI@G})jM9$aF z$9IF4XlMGBE}LG9wcB|ig3$Qao1}HKdfX#>}LG9uHQI^6I$Eq_pYTU1x!(G;;}HNvFoiSOUWc< zioB1Ua5V;^C8w~nx6a(8T{V=HkgyV3+dVX0UUM5T)g%{SKpalX zUI->Gr=##<=la?fLS*yNsM|m|i3;G9dO4MM{-x~Kc&|H=DcJGS(VX;O#`z32eeZZI zIU>>~;ENv^-`3*k@ziXba}3&TtMhyj4%Wc-Lak!D>H%oh4s|s-*FMkrDLlbzKhWOT zfpAdfV>aj?WH>jA-(tsW9p}rW$?wuJgx=Z`tBy5yv;(c%sPC@q0<5v?DNI;`>R#u@ z#evx(k6aM9@{LB|j5Ypg_l{+JJ3&+8vG{B+=TPI*Q0=xTOYxd~jWRGy+al83 z#1dq{$oz{HJ7Tff`iy>|jR5~!fhc&2^7---^w&#Q_0#~C7BTB0%;CQJH?EM&A=>?F z1vSmnFU@@~=uP>*@%a2v((!s*1a2;hrM$#bE^MeOout75;ZLf`N$JY9)2$l3L z&o|P3rpTu8Ebf2@?aUs3euTeZUd2l*uL8d0nO7*BkAtNO13%BO?)2=Pu%6hjHPzw$neR$PP@8tk7B9&)1Qj+h=$+ zIPPsK$cI#p274?j)%GNlv#+>fQs|aM6pBCWw)n_4X3+0ZEKjq?68lr~_eZS311icIF8j?#QO}mwJ^7lnVMgooJrM$SP=&a}sPC(RwRnw4< z?BigEx8?kn4NQYNcxv$iCF+eC?QRz*@DurYYs*9XM0X>NSwTSup(b73?x;MGZg%WO zWwiO&Z52RUL7z6YAgL~@*05f^h3Z+fVUV9CT&FspoAJ)0J}{jhpK%?1Aa3YQXeI*fN(X*^aE|2Gz1Y`llMGp&b_gGy4Et+wV~ zzP5T$(W+qU7Q=6PSCC8UPF%s9{~$xwAIkWoy@hp<$Hv=rl|)=;)G9 zuVb1I^Km~jDRbK7Vydn?1@Xq`x%_;&bXD2`cm_M6Zd=kr4x^+jzJ@t<3nZNX07oFJ zBu7h>J^^6cNS>VJMO%#DNMm$?(8r-%=P2&NG~-qS(m2FG6d&Hq^y7+@Cqxppa{21M zCyi6DRaBOqzZGR7h@6Z|?y6}3=>fIxy0Q}AuJIwN8D+5g6E&k9q16Rw{G3Vete)P} zi1?2ldF7o%8T%m(SzZPaa?MWl+J~62W#0sdYZb(Y{+IaYj}U3NN$+xqq0rzHy(dEr z`##Cu!_iST>0tzsZj+06B`O%lUR!>FPmEX3C!f3)-v^)OX2WuqlZG99f=UWr8Lw

2Y} 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
CS?oAGQYS-KrP>J>k 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ΞfZ3(ExoJXd zTQ8Z>dHJ#I+BW^JzBL;^eWz`eXwamdq5rjc$?;|HyTeksnKiTOHq!x}zOA7&AAt8B zrB9DNwQKyFaaWCk(o4=R@4V!U2nf`sl#ulqT+w-{CT{rKtRA8zJX~*jpc4sl7_seO zUTs?$uw_{bTi7MnV$ww72Z$21#^x2caq+Yc|2Mr+Je56!W)ny!qOJ#)GK3}wB&tNP zaq;=BR9n3-<(U{RflQu1(!l0c9xKW5oDETNg-%j9(tdGqe5c-EAVbB>o8@o7@+^EV zyINrhhfxiN`@cEonhoo*EDI*Fa5#LyQ2Me{EeSdV0Ft?)X)}7`tZ7;&C}HnG=CbIH&Oal z6Cz*P7yo1>Cd1O;KphTuflsZ49vfef_qH`0cGkF9vBsO_*kX){S$-h z{?UJ%r@9>|Y0$%1fe?6qD&J{lJpDn|uHQdj{e>v26dci}uFW%UX;<|xjuphca{uka zbP-~UX(BA8lK*o@94UK}oSX;=aA-r6i$#K%@$ayLHSN(7f2{@WQxZwknw43!cq(ju zqoH}rI_FEaVC3>_G=JoYj(h#`iI@~Bzaeq(Go6rAaOe+Q#+rEt0~Jwd?yT+f z{Hsh|(HWtj9`8Ei3Jdxt)}yc&dhqb%(D6Q~*+~n&xSrsTT=C~s2d-6LF|yRCUww1C zgzdSs?$L_0aPeo_Z=b|qV@qL~&Q~Vh?OnMhKio@1EfMyY-6;-26!Q9;LtEdxd8U#; z&_qpT<~Md=LatlMC5Cp(E4CvRw=lctwjB2Ozp8Fvg~)HGI*+X#BCF_2abAPK_WB&u z3Ykc`p>WFpPv1$qo*H0He1XVbzAch2mnWAj02b!vY87#%dj2<7BNQt-l8GW$j4v?R1g;GD53mZZd77)EE_LcInNd>)v4yjcK(_`ZaErxnl4s zu_d4o8m25eQi2`s6bg%;Bkq^4=R#IZudB=0A{Z*MvG@iysyq`xVvkY+e{d`sX(A5H z2>Vi3a^94A!{VRT!5;$gw@ejZ!WX}wh-Zb3+4hUh^|U?WQT98H{eB6vkfTEFY%kOH zhT4<%X-m9~Q0O{oVQVVaexx9yBY_R^xMQpeL#u9$%cC;Bq4MJzaRR!a_ zsDq4kZyyrdpCMLFqJ8bR%*}dwx!FK+%F;M}pmh1FB~$zJTGYqRogF~QEiZr8W#+0} zw60PnP3<$^#>Lc$s~|cF7iWSLS#%cOeoSia zmV$1B4NEo~;8M13iT*HTD4`06He>xy_jH=dQyjEMRDq{`UK9i3P6Gn{gX8U{XRbG{ zTnX*1nP^qKmLi)^ju)zC1m}jy44wF~) z_SnY?dAp_$q#1Q-tHpS1ly?vdfJlQAC0AA%wSKIvu8d6N=2CqvN`Bbv#W%tCpZa90 z_#G`A-bI9{P>RZ^);xVrykUkAQwkiNJ;h=M2F&YuH_k6>dRFloC|>YhYZy}!ji^|4 zm{y>NwS(!s*J@G0pmzIK#&`Ow!uBd?0|B@%Rz9EO-4QvyK-T>=_&XeVb!b8)Oa!_7 zIePs{G`jpfC!&h$C_d?&bJG2UCYvj#A2!wk4}U`KJLW4Xby=Neoh|O#I&BKV)8ahCvYWH}p2c}DL+S&W$yZi`BE`9t%K9@o%a5`( zf`wYY6d}@#&8#ZZCt`!1Q+60eTq8_}u;r3e!{&Bk?sqo6Vl455ISFzT@t%8(mws>} zv_ktZR$dU!71UJXoV~j1?Hw>aC7;Z5wKJZF&0x2eoMkc^wz5ZML1iPgqh-N1VJ8tA z@RZ7HnF*W|?Zu_ZJ(L|ADloX)D9b!;2rSn7o1?!S4qqgK!sMPgAD>)xdHI*6ZoKjy ze`aHyYNs`+eWe49Pnw zP2!YSxiM~!XIcwC`TGz@vA*_=AvQV}fnk`vLG}qS5t#KRCak0-xgx+N@Mdt z&OGoy_@L%;VZrlAaG=-#Qpfb0=Pb8M+1IBBK}&GZ05JgUT;_Ybb-dg=m1h&-`f7YR zUEnJx+&MEr4iU?CwP+VwbU{c{OMM!Bl#RT6CdXN;le$Xkf%zQ`UTdMLJJ*<;4)?{! zIuJdnwW51WUsPtojByqSlsLi~@;dw2y0epA?)qi6)_jQ(su%laoF%ZD>a#WGcy!dw zHS2Ssbk}0jayFW)0H6P?;lg$&c+IflQ<)!o#coF%dbj-h$c_*=KCoFu2xp71V-FETC$0qDCo8zp4Pi&^-5W+xMnZ~4y zRFP3~@mx|QhP5W}Y>7e@qRR$FzwMDTl9G7IYyLER$-y*PBTGW>i$5Y9Imi6G6Ve|H z?%BH58zr>Hx1!Hmx`xemiZbqX6`EVsCoLsanXc$;6nF{AqD5@w$-g~xv@x3OQdA}{ z==tEE$pfJFSo_jxI{t(i z)U|oLacigdR#C&9K7mct^ZqR__MBwXv~0Tx239U=#!szegPc<&?6W3xc5_5CE1Yl= z*0Nt?!Ul2)4QDapl(Vcn=rvMl9!wP}A+jfHZ+09MVlC z_@Mg@R1ufZYB|g+a&6%Wbulr(uZB0a5n&`c*jLhNPi**p6Hirv2C3|_`*3=DC9;Xk z-V#zSqhpF$3GleGa9=dGs`3E(V9w}9d29nFaV9BTB0Jwq1i3Eo6H!^hO+%!uJxz_| z3D@Raw&vyMACipAer2#i+4f)hBE6ZR*plg3Oym|~0Q5HE#tL^%uKJsTdm+UM>{98e z?K2rckS9(R)mbCLpyvu?o(H&P_KNcvHY}s`K@>% z&ch3SS3B6Igz~Ou8CalJu53?aW>lEuWd8wk!WB;*U($GKSMBFP<1)q)op#YALsG!v z?B{Xjg}uZZwX-%>0hk2=8@M{}OL?In40+05O?t8S#O2lXdH(YmS7GfmXms`)6v@{( zWDm{D3ckG|Bx@`pb$NGQDGfeT#sHtF_(t1jA*?GLJUcE&TyjP2`$aX~-B(Fl*9|_E zR~&e^`QL*X2eoPXcKMC&IYUD$o2%?uos;az$n5O-8;S~1gBCwHd=_LcweS)dM?E%c zXhS*m_{NfEd@MS#-P-Z`ZgmS>Kjt;h`P zTEMtTIR5PizIT>nxUg0lB}IjjBamt!US84&eUf!1eC}_2hoX%unEqry2%I%We02Go zQq9ZOcG`Gb$69Kw_7z^VY?-#Vlf{I`9Gc}*+tHP*J|^+yV7>eV)Bb}aq<}K|2u-mZ zc%C!767QM&q|I;BC`ELHR3887#awEGGp0&e$S`T^4V=@<#n`gX;!z)i?MG}`5m$n* zfMvVhV$hWMILF*VW!ZBE6PKlGE9c*o)MM+FHW?K>AOrFdli?4Kc%s#E9dRM>{p?aE zUMi$U4=rTAVjuKMMcl9N>0xG`0!=#E;b%L_#5o=lp<3p1`Ay?Sp{ik>C(L1#vO~mV zmTZEOxAMok?B?yykKoi=gFo8{0rCMCJ7nQJlW;IXs#%dI`uV_}(3tfPFSD}fNIK7k zwNXuasJ^?CR6z16aUZ+}=abay?X|Jm4-Ed8v%`VVn>Ah0?j?$QYHEJ<-! z^z4_Y`vKq#7v(p_f%h&nr-$aZ>NqFI8Q(k>NPn+yXc%Er}?$P!i+_IFFb@5KA zSjJ$6gRl%$gxSvP-V>p_&p#X|CH0*cJgc1Afx4Nn^nY=wc!a^5Q}1a4hSQ95u0AL< zbD=jeR_`xD}q)7k*OQhSajjd|Yt^Ci9?0UD+uE9!eme z%sE!ilCv|<-}p(3IJ|iMmRW@r{r^N z(S-1+<<+ya;KM&$kFF$Eaf+3#uV8QUr(>^Xc@=l7-oLccy^ZPAghzwImgnd%RR}z_ zs>eCfr@)QPzw&X2mkqBc8)6C)^p>h1x-C4Eyj+bGr9d090*MS-GF|E-%Bd>A4(@(z zZhQ2dZd%&zM{LLg?2D()<6I1lo}bjTuo*L3F<@TYp(G@gMi@D{qC4=X4|l-{cIwo| z92hrvA}xNJN)GY2kv>{9hAKZT9i8~;%hPsc+}MiD*>uaIrKP%98+=jU-vYd-ZWqfy zRLa&aVyggc0lhNY$5QhSNWP6c)emL+hOiS6yHtA}ufCn%g&Pz6=-@3CLxkPt=>&I| z1=oC?(Vz8VU$K z5GLS4j=Jnb`<^nU*B-kD(0G&xsa@p?xbTU}UKdi?;7jIOr&Q{v(Z9}>*#5?BW!oUnOj$E0rqs4}>V*Q4%$fZk*hB$bj8dQGZjVH#&H2 z80DUb?di?kPI#fld6aln&hcP{w>Ds`?lkQvU2I-zz`3r)((UhJr`pHlU#I}an~`p- zm+ZfySjGz8NgbQxj(dGo) zS&V;MykGnzsk`0(dV#es(Vy<1hf@b_ZNVI#CTFd@>``dfdSe=1?Ztk~xy4Wmo^9PBI^DX<~c` zp+NH?zOhLUSKMrbdAB9aj#(qtDS`XO00_Wf8#rZjw!ho^S~5f?qsF)Kp50W8&NU{5%RW z{%PvF!*G75DreDLJVtMFOsG*y0N4^ET5VQSt(GeHXCKUq-vWnhQ>9vfS;URK8j*anq92o!Luq($OJ^y~N+Uk*b zt!_m=Xw(}tE-mVe+Q0|zVeR8`Pp{-Z$#G`Z%BKHD%C`2Z44jjNhiux0Kjf7s-%SWxy=#C6pgs@aYv5tQJbm!902dWD z8`tUZ(N*bdpOQY3S6F&s^@VWD2|8U#iRvViSI&gGt+~9?>isyZrjd@6YJ~K_#1%n2 zK%n?>ISY37EPsvv%1(CWX@9zVovZ@?!X&T;A`pdSpnw6gR@k0JqRS3#kdJw zN@%#@**xtq??F64qxP&x9#Jv%Wzym}%pvvW*4p2Z`RT2ruIeJM3tT8^xtD{AI~414 zh~GQM{`;=!wdnhDA=y_Z)5u)|_a(XQPuT70DBp|0K(-Ygy?uYzcO01Y3J*GsBrJD{ zNZfnj_oWX2k~dC>kqg}OTgPi}8xKb%+UE}YfwdsYt-?LwW!f7YjuW|{(&WkskHPLQ zPm)Uwnwm-KA_=qiB{faC`D|Nl*>14ySdEPOF!q?3lEE6=2Z88s3SZTB=u^uJGH!(h zYuN_2!5Reg&~(26FApxG2#u6AsPGsnO%B z;qq>TSFjn2$Rpd0oP9S4U?J10JSdeZ)EmyIuP2m#?1e8KEfRkdMrkRV$5x#3OH>nW zHMXwU>87p)lwdz4hI#aoFztJR_9+dwu;rB9J++ipmqY`qjgY!qa>-#MIhjYGvoLIF z*6fHD^JY-p3l49VVi!o4$XfF1)wzoif8GzS}wTs!< zg6es`7|po$Ws>Sw;;HAe8)}I@Egt&&Ly$pFTCJ(>Q>PlK3h2-nXt0NjylyK$Y@SCm~QvIsuFio_8W2t~C=DK@3qpjs7 z&3+wTdSxdcbA4${@n^kpLz=#HS@D@o+L*YP1Ph-!G8`>$<{Xp%G|46(M^ry)4ERWs zG<~z%HXJrTcXkypCjNv-kSbuRDsH}Z`@s?ZflYX+DPI?L9ywN7A4V)E=pdRCvz8e& z%T~QT{lQReQHiEA2v3ADx-ZZ74Cb;fM9$}Nm@o;ihbhYCx><-<{<`U`n%VB7vs15V zjPAv`hT9C9SY!kMe3k6RZL7Ug&D+uVWNP_I_wa!!;^ua~obrWpx4QSxDflH5xV-kG z%1TQ`ogINdik=zcQ_f_7gWx&g3HZX)iMOKA?Xga#xf#xHEk8{AtWP~@-v-UM%0z1S zB|RNjO{9K?O(tGB#`*f)hlnzcGVlFO9Ek{>)fy)p2s( z7(;Un+ElVK|9)M8+JIl}lB5Pr=J;5R_l18d^*g3Ozy9~Vz%hFLh}a&mkpz{6K^-ox z;0gkpoLSd@%czC|TmwzFp}U@;5{d3CzEbq)E<4%=V)3bQv1I5)Ov=Ne=k6YIZz68E zK)PQ-qL*hqG5Hh1#^00gw$ShCR@Ox)tFzxmruLVMr^X~^xvFlTjkld04C*gj@LRQ5 zee#1tayVP`2ghe6HZiMXN|@-sJU3b}+I41Bysrsc5qX5$n)A^82%U7B9rdv+kJ10Z z(dHFk-eVN!e)>E*3l@E{J1dUDT zcWGuK^i^eMm_n_eK8D!PpKYEh2v$^D4q9w%8%Z2YW^ed2;Y({d#HDz0QOz{1teo3a9sEm2n0_{d(e*^F^ z-T;0#B<(ctTyJgpfU%ZVeZNR-*deBA?EP7Fi(W%C3q9gEM`nvbc0Gw!%U!EhUhlVw zMIMukmeNApOL)h>vBeWpF(K)43SLUPLe}aeU7)UDy!_dvlC-AVNdfMdX2pi`Mxyq| zOoAT`ceb97(=nc$FdHU27Q=_ zMd(DA_S#AJv;NK??!Yx$R7$FA)#&94eO*8ptFOs~ zz>AkdprKmsjnIzRj|1!9t|jgAMC`g=uT=G)AXeRtXp>gL5M&3+=rA;|chuby8jq#3 zsd=id3U#de$og-8vzBxA0x2e#uKTip5ET-@uOje35*5r?^jTf((DA#wyb=`aZB`j_ z+>f;g2$q*B(>E7}hW_AK7vl9m|6W;Ds8^rO97P(3s~uNHNJ;;syuX-xdm)n?lq-B% z40DqH#dTdM0_bKO*-~ar=~B}yUCq$)fnQFUlw1MAVY8n)s7)5({ZaAD9gj6t58N|G z_VQ=o*Y00_G%cd!*$NAj3tD#llcGnDT+FRHMX1AjW*;HOT4;LBb)`Qzc%vjPT)VWr zsw)TA*d5?^`_jLbI6~(3!3FKEGN`p#E#^nC zDjBA4o#T5XGj_b<{l`xX3XjV9);A$!or0=Kr#Ts92szIZh)VJ_k<2FL&RL2p#+x|) zn+`end!k>;Gs^vR&P z6U8}NC<=0+hQfy@weo*=6p{Dx;)Z%ihJnEmcg0B(8M(oB!}O-c^`kUTW?0@<8vj15 zf62ichmv1VAYsvUnNz+L6x&i|yS9`D9dxO->@*(6%|4AUbu+GsEB8-r!(h!1UZ3ql z-=?R^PHACbUS30?v-T$z6`f~F#dSr^JaGOa_YXIw02dnn>fnc8CC_5e!~h~Y=A6<^Bg z69}(w5(o}aXWR=G(J9wqM zPH!&0LQ1Hxe|~25icNXV5fNh7+0iA=K={(7Rt81lD06Bagao3JrJJf>qxovU%NVh~ zP<;_>a(z^RB}rYEKEGgokQA&=OPh&yE|hy}9VGixY&#=v=CnR5j);_aveK*pGHRXn zo?f%hrbd>zx#=wrPKZyFgjQG^yzoE9q-yoK_(t@@FZIJN(M}^XnNjiH@ zK6cQEtV=gCJ|qMTrcL0SqpGz1Sa0Zj(=zl72aHbtvirOBsCM7Fj?pQ3eeNhMgg1>r zEhmxs*nM0p$@prwpmFoh77<0Vl`8i|?7USnS)IoA3thjZC#MG$Z#)HL4CJ+e#Z?1(+ zv16vP#HQG}rn=u9kHbdbm8xwC^2SXx%EDK-ezZNqIThyT-u(6~dEL?TO9N!$O&d0uI zZ(YCYW?C*%MtOgqC`yWyu7%a`A~n4s-3&;Wg@wT6t+hAgqN3g<4;x%%<(QTkB(&OJ zEP)tZLuWlAbTBGx-+Apf2kIr}O+Y1Tkm`89MPr&Qy+_5PFqu$Btb;vZKd|98Q(Jx_ zvB6cUANn-+4$#-v37wuDW0_wnOgV+05H9p`b~{vvfGgpW@_+LKW1KCpa2SL~a~-OE z0UFJX1{gXwnZiYeY8y}q73~!8%TCvVSeDz{I(m&QKpyn40uTs8+pvxJ%+Kqz9x{h~$f4We;(7_RYv zj%oO>+XPyo)lF73iRu1r>ut`O;3WF@9~>+#60hi(VndNnm2yO{v{F1iJ8O>*F4Q)j znMX}i^}w(bxPl?q)zM{{TL4SmUd{CLw3SPf$(wTj@uZ#9LYCjo0~=(wXji<<>8)vC zv?|QGghvb%4F({OEG)VcK9@OZcg^a73_jP|^tSZjS~k zyz)CZ($}3l?)bssqGb{Lw1Yodo^$DIiVAuF3d6$Cjb5k_}^_VJG$QS zGxQ})oySJL=Z(R5@`abQ*!)XbL)z^9d%vq*w|7#};T6hh2;DXrqe1e&ca;Prl1{%l zEZ(F9JzUSXST+5@q0VDDO#_HsduO}3_cNR5hlpwlKmZdZc($=Lm2}83GI6=Qv?ta! zu#!$%!qf3_0dSymIs$FO$f z+5*F?gRP{K!}}~B^hF-jP3e}UQHJ*#p484iVBlCtke`zFRf*kjc!Wt~V}!|cNgAo>O5?>lp1z=7h`gKG`O2z%f{8U|M|akWco znHUO>OPF~y%JzCc9^RTDy4~|zT`6ZthaQ$W*9j4j9ez@72dH?n~ zqR&bR;c0rx8fdOm?~9$04aIz6qr2n>NA{oH;;W;?(w>OD;^x+$Nw+@AvNV8;so(*_ z25tSY2aG+wcdNl)-F^LhzH@rcs+S4f(Dc z8BOz0C4Gcv|6$1i$K?vYJe7|p1F=p17Tedn*GM-zT8V)u)$Y2&dY0KREu8nG6rl;QpGucAPs=^?70e2cRP*4HOp6ynaj2(!NtY zMPw7`yT1r$2i%?X>*0O$k>Niwp%oY3Ps4tp|KO0hE=M9MxB@Jifw>w{bo;BWK=#vo zFCT{-JK%ZDC66I18EDaNfp$L^xT`MBWm}7plA91NB*asOcO*s|gX6KbNL$s!!QYjGUAx9Z+~<-)R#uIk$Fhq{7A zYC>)o_z$a;r+sUf_DGfJTCAXtSBIG9c_@K(ys|c^?&N6{TcX@hPdhh4UW@WzXUA++ zKB$3D26Rz(4aH>}%!EAHu8Z)jzR7al6VaQ~hE?_!h7wP_uNN~&iRQaU4fNAlR=@XL zNdD*&rwBh1^WL!{&`GVuTgr*ul^oO9NW@-!dT3i8jv%b(qpimVHL8O?)uUpm2jOju zhbl&8$@hN&Ht+jVdq&alzlvXy#cdlt$gC4kTg`}mC#WZtIvIyh`E z;#Kzg&Wiab4pEI!CAr9qkYJ^hSXR7K?(QyGviFNw5@%UU-|jKVEZ;wdkeqrk7J_>_=q#fd4ZN`TNB*ysHOb~}U57Ar3CL>uFT390T# zzF2T`iS0j^Gh#&ML7pXRdtxwo*ktX+#=!3ZK1ttA0^(JING4IfR$~uKgp6xI>r?vr zhH_Wk^GGzk0~61=5MiPRLaQ;9NdgFpyTZ$x(NH5$}*3hw8Rn#U);p2xW!PneRAairtE?G$d(;l(=#CQ)9B~aB z1bgc{^SjD!7U_u5Lf@>U{Lz#0=)pUctbT^1HHh`Koe{EwC#ri4TF}`}u>as=Dxh?| zQ73F;ud@YDaUNd$`a95EDEJl08&bl=YFl)1hnR9ViZDQaXVoT}kjIk_QN6}tD`EiJ zq(=&qlOJU)=<1{{nQBSKG1&PcSA+m}eq9wqnqA=u=YiPtb;ai!;7+YaKei{NO~!Ag zdIx_KJ&U-fqTTb!0hD$%un#VxIEhmq47A20p-2Pd zIZvg~{dhvJOZT!!Fq~SBwJ?4UVAkvMM3E0Q88*1OHt&45mCsmv+oG-pr-lOLvA2g^ zQj43ER9gloJ?GeJpSf;!!gYpy}|g;`{e@l##97 z!Tp*O&g%oce@y?%Un*s;vP?nefxL202CHPDZs$M{C~QU8<;3DN&ri&{%rZP8gUp*( z32iBJfSMMQDccePVE|-E4V)JldNd%->twpupBCFLC0v@A^u|ygd`sjtluYGEd?Mkb z4R)%TN$L)RKR5<&oC-(3KaGb!^&=Ipf@WkB?9B_Z?R}gB=KMkXYBZQd-!^(Oy}RCz z#;uc%w_2dtiHwow-QF^IYp_lGbqHVkK>v)`;`ki9wKoFUfe^xiX*b5Wo*kvDo3-la zUL5&HOY5|kV`+!jWMn25bn3rdS~iAf)YqAMzDUIeg>)YB@67Kbdk{|x<5zBh-c+tz z(nHdC^@DYARmd=lE6b@``+rw4hO(~D}8^FH6oPc;#G4Am584v}`P1u>p0sS4Rm+K{W(C!DMB=k}j8$qy1jwyRiN{@5E@2C;c|&p}3KJpysu^H9|E~H)& z+%rptd62zMl%iOc^8pOXess;`Y6H}*&R(7Y1N$}?Is9U(fH7Fn!r*E?vD4r2#~8;G zlR5nz!Pa|h`%H-ywEUn(9zI>0-{>a8j;W+8XaQ%DP~=9O^kvP@Jd`=h@~_T6`MD+V z@RTd`4KeI5CuD}Svb}pGN~EV(R|h<`JqaI|o{J*El3vfG8RH~NVxSsW1nVE1#;eDG z!s!@NnrJ${meO|*;s5+~DK1?GD9*B6e^9FLA7C$oClN4_|LiEdw|~DPpa}Ui##1g8 zE5L1k-HOye($@NmquS)(o#0}N$0wwi7qh7wXJTTyzx3tXpxQ}s(LW{=_R|aPVHGo( zvp&*L(_=xA#Mu_%v^9p7`+@K5V#rdfy<1EzVciyNc;G5Mw*z+rK|d7BD#ptn9dE6C`aw8{OMKt>8FuM z;f1A4o1SoGQa{B?NWpuMFWE zQJfA(D@@$q!va;3Z`VEkZ@4z+)xV(r9LQE9g}`iv0kfd*!S&_)tp zhEYnqi95EPQ1{=rO|^skPAtozMHa$Dg3TR%!WSWog25=qFI4v^0E`dZXMnJ{_i%XL z$k~v%pI@()8IP6BWQNZcRgK?<^T#p`%}RPJ{uuGtxVg_Eo=E`3h4S#!|Az>TzS_>W zMU^S=eC6jp-@s!5?Z8B^^BrK@g}eJU7Yog9??aW?=;!YzA70TR(9+hfxZJNCU5o5x zJ~v-lJ3)~*u)8g@Z1d#_PO6D_>i*udyu5VDSlq>FwuZnKj}Yr$E?!ZqpisR+3(>_K z+F}3xf38V|jJmXiT1Wpwh}j+x)qop}`1+Na8v%GU0u4wW1D!8LxmN!#($YNI#$G{i z?27sS#@>5JwRLTKqjKEh9*hB-dIB~@G*d(`iA`|>OcA09LI;UrK=kI=G1Y?5L9|#H z2_%qAM-s*K4h8|DV|wqs`pG%D$IiRScTUdv-ne7j=lzGYc3EYwz1Es@t~uv#W+g5l zuS3xyoswEYc5&NkwHoL;h#yEYt9NLQP5Y{>|FxefNeZxj_KFMzRsFk(1gcw;!odA3 z`zb4r`Fh%5m-<{w7hN%cn*{eTF|>kb=#UF;%uYUSm%QL>B$K5wwN163oaM;`zT^)o%5 zT3nXGB_;PKz_Ukc@)hSXuNJOr7VOXJJw2HZt!!h2E-`|~vX4Ku^sgON1*4?_ z<_CHdZ+4995B)1c%D0bj(6R^}%?m41M|Qh;#H#p`KCQ07AGU@AV;djeJbII!SzNV1 zMVF=^7yAAK;C!7=FWqeo zQ^}@PGKqV8n&$}spmkt|-s`Vf_yCyb^6UTZD`v~*%R$U#(rn@NQ&dx^r-OQ(!BR5F zh^ArSq{)rZAM+0kH~#=Qsk7wve9!2irfg<7BbLh{7PtUuB-WKz%! znD@y`mY0iy0P~bWiTfw%&Kei{ILBO@Zoo1-q9o0->t;ZE!EnQuD;DkQ#m`^w+$EK zj0+O#%{;ui=for^ey#fmZ}?e_>rTA{_n+*ayJ?B#i+Hc*&e!gA@$}4nZxVsDbS1K= zY#!1fv+3pysbJUe_})IkED~M4D-w;ufro7c1?Puwl~r(~HpuAKc@IoflG_6b=`3$Lp)^IFIj(dOQTtDR(o z$#YPs*ESs&EE3m!a4D%3dbB)4T@lXI4UjQ8*N2KDNzP6Xzq-?sm3Nf(;HCf5_tCa} zBlX~7UZJq4#)wUqV@cRcC|I^obqozOl>KCIQry59%;HnXb)*oUGA8dVRbw#mNQ>E{ zem5~RF|E|T!Emv!MSqKGwKO}h$5qTk%hBik!AQS%4*j60-5_fCSj)}KEpS-OkKEE~ znd&v#5hN1kX*8Ky#MBdA;8OJUFvGW@a$elh!DotOw>p_iQ7txE=>(Xtq)scI$iI7i z20q%OtGoF3jW%A*yCHQ$7`KZmL+GSlf$>^66??dEj1{5yWTj}dgT$IJsTSPy!!EQn zD5RtH1-@>}sop@Gf7o502hJa-or(xS-F)e~s*bh`3$M~mTVh<%&sg_Q#%oB7=9SMIW~#jSjfirX?G;DVa2uLCe>0 zJ|zDh5K_aIm<#rpCxJ~+a}D4b$+Ry1N*k0W`)0RKV0)&=Ij`2VGMn=$w^|A$7#Zsm zdu;=GE7Cj`c7epP@iy>MC=DuoP_5FWV%msGWABj`_MbbycvWoA+1a$f6N$CNBPsL= zJj&{{Sv>xvJP%6VqK3_RpdC-fz7mZ+7Spx!(ZHGUo!e!Rj*Jhl{TJZx=E zsjrReDUIkGFlMwfnYVt1Z2i$@>U!wwh#nIPWk|Ykjm@#t=WWwf8-t~#C>A{*T`?9j z$laBXxcogqEd}SDb=?^0Y_BYLBGLz83BM2;HjXcG51FK@AqN&nNBI6AzuJ080rn!Q zW?%LNxt|J;|GGSuiCvcP(XIq~ zBGJ0M(zUH!Dm5Yt??Il!w5?%Q?uS-y*CD`!6hm6()Ofg{3ok2qZ0AALt>!S8rnWA$ zE{bkgohk<>mZ~Rmu~{soyFlxoEd>vA>w$Ri=%f}Ffl|WcBps+Bn8l6^1j_n7h$roW z-*rM78fl$Xx?HQgNY1o%RDl96$GycXoJA&qpLU-LJr25F#y$?jERjo#bjhAY^gUhJ zbb0-h$`EMUQh2ois7%LWJfRmVZi?972bL$GKqBH2^1W6#`CNl)c%sIJ*?(&BoEgqh5nv#G*V ztvgtjSjY`2OHUC>K5E8DDXp)c%F4eA_K4>#1Nm}$G%Re9D!)5xSN4$#ex0o3!sapp z@2Rs81gx=LMA{j4qOEL|>IOM^r#9{q&FyA(2=Z z8r`1VQRRQde*}%Pv~I0%r`sqty6b2<(xuA02|Nh{;gka!1Bix%ODH#O-DFqCOrslRRLxZK!rZhf{!)EyJrA@KgS0J_y0S4C@4oy@c)#UNX7eT4p6lVw zd=%Eo;0GBRm-3IVY}6$xIqB7v-wz&Ni0c8VrtTNtG&@|@V*4iVdp4G+fx3yM30$fS z8P4iV^%xGIJAxjYsV-{Bgr*Lq>^q%1X?seqJxNn;fmj0I$+ry@Q|fx zfM}jro0W%7JQwwlF9K_kaN9^>sXLeNV(&a7Zz@)(6YK2IMtN3s4;>b^-fan3fjhimb4eEld+w>Spbbm}N z^0#G&C6^{?f_2wkjlW)Y&B8`R7s8x1ED(lu5TwjW^S@DK2OE=JqkGBsb|?oS^@KFx z6~r*vi(S(Cz913%gin3p;*&bYfMD?%&>K0LWGOiRYTlZSF~PSpBWZ_ znRnHwFXEiyMkl@Y}H`le>6Vd5A zi{kTUOk5M!r7~(SB-0hY`XCRAbyeg1fx9q$Ls=EYT&_EMH=!~AP-B4(cW+l)1O*Oe~~uC^6`u_bS#K+PyYT51PW&SVNAiqzZs_8F_!;3Wm2Fey52 zb~lVKD$GlB8W$tti+eLr=T<2*o5E@g%BmU zQ?8xeit-TjM(vTzGHy1j42-Xn?O}G!8($o0l(ANGac)7hX)5_TjVohn+XU2Z z-x7>|#Lan{Qaq2LZGnZ&`IfS7C&lx^=Lp3xBeMk zl*xopH3sZk=yZqtQk0QVp9i{z31w7Z@cq`l)UCsjuD$x!r2J)6M1)!fYEsV)3{urx zPk(p)Vo4#;Dz^Dj22))_8(7U=LG+GYoF{Ri@!&x1WI=SWqT^LRTQlB*S z0bsR~H!hlFkQ8`mkvv(321r|%ip-eX)wq-nK|SU$dr8A3scFm&a6?Qlc{WPwrRsrH z*OQrN;aYpKgtwp{Tt~VpeRkMPo8;y&DCfg@{&B5)$B`>a~xz-ZX|UFqq% zSUuo8gl^q;S7O5Sj#uUggbruIPs4*{sVbgcgNA{H)f27e@M?!De{0%u6fxC_oiM%V z6nKV?lJsf?D@(}?6PPf-AoInBnCRP}W-eOQ5j_qiz}$-AhmQy|ljd;H&d)yvHMv}8 z+t6qJ0AL>KsYiL`DT)!X9+lU84cJP3W2BtyRp`-o;4A*$okSbby>vE;mf51wRLi=b z#lZa2(R3_WCSOAa_BvBJZtlD$LJD}UA@Nlt4~seKqGb?4#$q~scIRu3s}v1=X}7%D z)NK;$|1X}xm4i@ThuKNtDBj$ zaxITo!{9d8oUkE7ld=iBgq7%|I3AIA%~86V`xkQMIc6u+?Fi0ye&&7a%Yir@qEu*mvPY;V8Rzj}LXkucH}sp7Pcs1|{Qh8O#Cm@>&L zMZN|g;I}_+rI1Xrgfzi_cUcBj=0XctY2-<6S-kydXkpV9!Q zZoMxXmMf9S^KX$Y;FK~LL)md|8!tT;WFqLpXX8Lnrgkvc^e3vRMa|n?o$yoU#va#y z=`_519<-uDjg9guU!e2q{#4}Kp5c_~97iRQZhI|^#|J>!mcZ?e!M^@V&W}JaG({~0 zzytpF6CwW#so&YH$mbi0_H~sscqdPrOB)CZwv_h2kU5r`_afWRCDEY%3XMhPMZXb! zaAEwFjn4QUaQ7NL)?VuLPq5HBOO-A?T6rmM1sr0Z8n+sloH*_9P?vcN6vVL&+z?g? z$+g92c&n}fB?(n*Oi@O4HrFht{Ww5K=~kyy_sRaIMyjVMdYLyxrF~h`U;5PZ{4k)6 z{{x_1HY|OHTk!q82J3QCXkN&Kec!Y#o$x~y<)wX$U9OvUcnr58#jH(rteL}MMUU>=*pXE5{Mocnsq|~ol;E}HU4iBhc;Q4NwW{)+2y4D zgO3cZ1Tl3h7ZJ7Mxx;{jDj1Kfoi4wrizfRJZdOM4Hsg9FSqeLW= z?aFx{o{nyLC@QRBhYr&8-<|8D`OXFp`2JXB=>T0!%u(l*q-qMOAQpXt^Fm6@Shw1x zGc>+2c904GW*Rh-eqOADtV09qQ;VgS8}Zk0%bkHgpOecA-@af{T1XS+@h&O2(3H@LJA4a>L^!Aw>B!GJ@1hhds)k zzk5n@t(euz@S5ZMUa_ohE$wfP+mi*Gc|-}69YNGGq#}D)eIW_{Q&Uq;U4UqD9Zs@EE$cUr(YHVw_kndd1aocqYO$ zv44LQe^Jwnh2Q~q*8pu)TSDI~4~2nlgZKoymdia>4k@S)0Q)$rde`YQ)|M<(s6%&Q zufEQMV;xkyMr{=PaJM1*lm-GkR%5zGx)Gei&{&{uSyHSz<7=N7RMKi5`T>q&!ER7X?czu0CiBqEpa%n9|)#nbC*h z#EbAlGdg6P-8p^Nk-A7y#Dtd%117nUZVRa{;eOqemp4a^GNEym*Nc1m4)w`Q+93A$ z4$1ch4+lF^9n_dLjiZBSOez0z`-Zc_|CgTLbl0EM4eY@Fy7_oSLZ`q4C z0-ebkl3!ymn~3kCgf)mBTl}JQE{7SI#0(1;K9vugC;CgU&t#xdss$z0hZGy>f_unAVGtbF0;Ixb}HalFr(SRaF~w|j5(>d{ic?37e? z!zwv_Wcx*G(G-Rq1-fa4HOE0ozo^PAt9ee1{E`N*$6pGb*X@v{P3g_PLFjersO8EeoYPI?shczD2k4{E7g@i;} zjML40EE0zSfWF3$@A7{>K%CB#LP^+=Z0FWG;bQk9M!UUR=&6!I-{Eq?0bkr3nGj9To`f{CAiMuw}r>~$4!vthj+PdF>=$O^%?Ffv%%XZ1l{cZyfX77%8wO| z23ISuR9(}|)ffn4xwq79wP<>Q5RS=(NO!w#xM6HAK^8khi@?drI3(Xd^%U8uQxZ(p zj_>&B3181>MC{51;TChTctbXpwnl}P&)uID3VRqbJtpBydp zxZkENtZzB?!1msbf7hHk8{;!>m(-Ay!+~>u69 zJUez5de`lBSjC{>X{hAVNSNKt`#iqBOLXL*v{whIIgcK}FZ88)yagzp+>JN*C3HiB z$1*|+pSC0Nt3?EE(ca#^j~H*ChO}f&1>&pDsVhosKeCE37y6cG zEFZM52X=ukfSJ6w5vr|ZQKn81H4)$D2EPF&C^q#H?oFj{Z=x;M;#Xr`aHCD^D`(}z zhMgQIb{!J~&UR~e-dpg`=TGn@aL&x;V>f%)up36BHz3x<-#DGBVonjQh>VZsu=R11 zvn82vW5d0h=_Z{Z&bEFr#i+dL%L18d`dX}esSkOWxK46ZS$mYVyFO8wg)Ov`Z=C|K z`kwSfnp%giB`9`(0915X-4QVkCK}~I%77IBz&!IWe?B(;!ktUDX|ng3ZTfD2Dm~<< z@`(OyJ&60LZ2T+N4Le*Ynkc>-cYlVjAYdW31QmX3Jq-<4C=e7BP+kzogv}ByfU^-} z88Jchh;EdEKSp5^-P6b5k=Ze za*sFf*~iHiMM-1t&}c^B6{x}F6#x9@7>=6`bup*e&){=yVAmEtZ*8Ie^2zHQSNoja zhKwj*Q)M^0a5A{JP~~UhQniY`VzzD2m+Z+CkSFJFIoP{i?+6R1+a2#&K0;)@hmoNe z*RWRz)E-!)PS?=R#xx?Jlb~dr)|~{otJU1uZ9=$;P(96B9a%n-gGZsdogVT8!LNLEQMR#%F0b;$+ffah}J;US1}2rR1q^b@OwKy+oFh@ zWK|IJrNTNpWV@cDNpp-AsWSsHWU=u9aG`EgOo1t8FFe^(r2@(U(NZ;7+FN0oB^okn zp06iqcWu~(rQ+-{SvnTG4+j|s_UNWmZY`L`&85A$uUQH-n-s&(vBOAv%BC~v@FL4c z2dy`3+=g#%IjeVf3%ZAerLw4uRY}60sBO?~xp77Ykc$IvJh;#`@pe~%M*N+~vAX3M zx8YH@1h5%v`sI^vWqd^z9rDKZ-PIN<71r(YyOnpf^p0z%Ri?%7)ZA=3NPRR?t^hCE z)m`830BW8*J2|cnais-H3{qv27p{_+G-L>@1ulVW0p-7_#J9ACzl)=GPr!=G_)ilQG z8At2s~`bq=^?<@ zR8=(*dKxgLsXR8B+#Pc=lw7D!L-HM8mCt)Yh1zBtuwo^*pVnNzjCycEXmclgnv$)>wuAoB zM;{`cto0tt;k`M-Cm&%wBVwzUi@T6HP!Ox?Y-luQFpz7CaI;W>NI%;LnZ`)9w8gDm z>NODYT7OlHyXj_HD27wQ&@GHlH-}SLfr$ATH#Az{%yeLQ>jywybFSv-iWXlB!S)qr zPW`svqB(zB(vkiCQ1xo@wT7gvm+3CVG_>6)kKa3zVrUap{g4@xg_@f+7=I7^S{nmc|_JF zSjH4+$?PV0N3D_ySQEp~Z9JJ>(4~>{wOaKWUdcmWah^S4D_SD8xSW(U*dct~Pw_g; zCfOI`4mef+E3f%qg?;vaCZ*#r!9)3#4NuJzkm#n+kO5U~Ytd-`G+0l?jV^s+!K$-* z^q^QNJ2}|W7VEOE?jFNbU@<1t*D%{kwX+?`fr)re&O@luy&cAlY{+fwQPrdb#szEJ zq#aCw2XNQ8Zoutk?jd3fdk5_%`hCkZNqDYu_#&Ag+&9V|7g(u8;p+tEn4Te#24(EK zD#HbG5`lx4EUB?Cno-M*BOda#*g_SrNIo}Pp?NE^P8T@m8(6kW zVe6C%3@CypW%PxRMIAy=Sml$Q`AgEMUR4K{^JKvc3uup{Bamm4z9|jm9G^$I(Tx)c zWR&m|-0h9N0yeNVM6ErQtfileusMqGN<{G{9R-l|4Q{Cp?69nBz@Ox%-l7$|lEE-+ zsB|d;k#>3k#@<)@!TrP4}U4nA+lGmm!V4+oBMCqnr*I>|w+WUn%_gipFl!^n54L{VQH_{2tI_}?h z*%ZLSvT>qc{oFhhR!wqY_dIt!L4F_)x8Ky)a}SCMZ{$ryi{Maeu2{{K^9KoTN(>Da zCF&Lh^3$HJzD2XhlyxN7E2m>om;Hh4-UonLwilbSRq`rGIjvReg5MB6-1RyWXn{Yq zJ^i)kCCDp~W&)i2RIc^%`F1l4Awwj$;zoyHI5U5ZaX7*WaH{zIXXEVONuCL5DSKJB zs|A{FU;z&5F0G*QRjefL%^?zeJ)h+Sxf^D|YjsRm*ksUZ*X3BluF#bSFMr0&$yw^oEyWI`HQQsy|I7&c?VFU`?-fE-IL?w#_8g7QH;St zxa`tpr@bVIC4})jTrCpdl8XCFPcJ*P0g?^62mN?)C>1jEtnkw43KH+^k-lb%0l*PO5~fOrh7 z#*W`FRJj|uz$xY0DrST~#SO71>pD|xRnad2DBWWgrF z9cq`07z~>PQ{BBKN8P;8cDU@ec8u}UVuL#A&{sM2U3^y7jYU~-Qu;`0=lVjrrK(}vkXB!{wxUGS{?XlY#e*&*{u3olH}Trw z$651X!Q8K}J?36j(W-;F@p$+6&f_xUetZK>2bhyhK-L!Pk9jwvCM!P!%!K}6H2&pFCsn5FTYC>5D(nWIe0YgG1<1kU4n zR1T68BK>h>A5I{p@0+#0i%OR8JPQGOWWi41>n|0{G!!02;jX``^{$F>*C<)1!4({0 z`~`p+5Z!xa?)pWIIeMmYq?CO)AuB9dq^0;$Q*utNfjG(^F%lh?*=gT_%ixTlWdyAw z)^uV@2Zc*~)ZamKH+u@Zd}LtU4pEdIc$D^|uNDgGb)cDuFsv$q!;){)upkEOtwom$5(a1xeU%cGz2ElZ;(I$x@& zOG9O5$vbU(v4hfvZ^Gx+&WIu)4{M}(gE)Hb@lR?h$jk{w1>VqA(R+_V3y|ir?X$)l zK^zK?@3eVZB13vHc-(AgO{(6}!<@5c7R?DB^}N{>w=_?8#~rNsI>iIGm|z{RB+wbX%R4@FVtP>X5hNh)lz4!hVjWVjb>^l8<0T49iX-JI;Zp zWtP*``qKU0RL%k`^lXM2MJ8pOH?JOUw2PjNeZSDYVovw`6u|KE7>;iHD3t^}F+Cx7$pYp>28^jA}$!s$dm)VV*bn>yxE^PYL8b-cV-M7!qta+J9&io$ z_Ft~!#7CkhCYOd`e#l5w7yB5YYDCY}ZSyNjXtbnhXQ{;5zWi|-%;IW<*eUIsK zaq&B9*Ihzc3WJo?0-Bc$Vvvnu98!9Exr`K>PlrV()Vmw)+1|D^}LXfIiQ68j2I zOtk1R-8%FMyEk&|Zl;ora{=$rDt!M|O+lDM2)i(HCdAQWkHx8F8BJ-Z4Nc-|a!Wdk zhZ2)E?`sa&b!MN13QE)6LKr=Nv^8ASyj-(9CFG?~y~~?b_WGJj-h4J8jG)qk=<)Hn z*E=)3PaOOy%_y_k<&ddJ6+8}1L|WvgArE4`6(!psyq1WkCksrU{!6X@PaZnEc2k>f zUt%|~EhxyT-hNn$s&XvNWS3n2v7k$BI?rTgp@trTse9(gW_&=pwEb5E0u$a`x`}c;|IumD z=AXy&dL0|Sb}$aJ43}I&N@)c*qHDDu*?7!Rts1rj*xc!m1V0MoN(~tCYcpJx^D<`B z{s=6S6WZm$!>q6{5)3q?%_rU=yKm9wV~B!G^IEQ z4>iH>b{^CZH}aybnK|gTi09-WT3a2m7tby+^Yuhd>WtArDkzp7DM@z{XD~inHxaS6%T5Z_0clfim zwxpYN89o}?^ZjaQKS8YZY=QUe>AfcH=5lZeX!D13cV>m8@f-mbAwT?EU*XR)oj6qD zpZowYWP{FQu-kwj5to9+9SHM;r@~I-@UV~at2#=(e7*bG;*L8$0lxqiS^jS~?vI*%$-2<$Hb&Fp?CVGBd`5PZY~m4+M}IN! zqWI97cnc$E?z03sGB9H4wG^SVyx!%?5w&>?3$8`C7^6>C5WROhrBbh(MF%D$)YrBmw$I@A>avqoc?v z?U@I@1N&vQk$#3YJ{g_8wKs!`bkM3WFxzA@14=kqvAD8J@1G0sp5b|Vgs$DsI}9^X z9{2Q7&V2LluS6Hw6c2)@xr!c^L^a#;UP?Qv*|;*0IoLRL^L@pJb8log>){Q!|4&E4 z#aE!Ty+<#;(i%LsZ|uNHA+9H#Kb4Srd@E#Yez)aAzAqh_lzuSUg+RyW~F!M6L&NSt2BGISq0SPw%3sFy-$b zuD_Ow|HH}26>*eNv!CAkx;8)np0OYM{{Ql#^7%CUJpE-#ewmVArsS6?`GrdEbU3;z zso(oTCBIO~FO2IK#`O#1`h{`*B1?WQ0)3Gsf8F}|B1?WQKYpJ6pOGaKMX0jgFZ1dg zpE(Fx#=mdAhhr1ZSCe)z$)R@2%5Iu@_3g=9k*?DLJIh>& z0X-rk>H;Z=QocJ^T9si5&OEU(&kouujg*AotJb;OjGM)Mik@au;@8e8JMhgpzVTVE zY_{URYU;Tg&qKpc2np?yef|bua{T3Aulb)mdE#@G7dZMeZ5WG}a&?|*QRR$1v7WlL z2Yhql-sdlG$<&{k5Z~OCyK~Xj4wH@Xsgo4%0TC@b5qf&y_ZUh-Za>lq%s`bB!;$R< z^=6x@LXHx|Yib6$8gA@2^t%ZuDCQlyq~}lvOPyu4O#BTzd`UzW< zZa+#0wNy@NTAAD5u2Zw^pEbVO*%~8`mc|LPKqVo3$~bS?dnB#6Yc!ybUtgh#U#FiI z*e|bvR2rcnBkNA{ni1(_vh`Stf+|J`blD;`kARajQ!o@!J26+u$ZinfwOR5fpD2~< zx8Y^<oT!P)viv zhP$kD@Rzv5n48&gJn(chAq3w}=1$}Lvi)ai=Ng;6D65ZJX7qXrIC#&1- z-_}6lmzDAhQTgli_Z;^pBaBBqG8g!9E<>dgi!_)+^l+;CLLdpR-6AbWDz9woBm^yd zB62A+XJ=nt98KP$vcrlZiykcwwgJnE6KmSqo5Wb#+ur;c1)V+kJN3s=ztGSx?8d*t znN9V%C~?$%^H4X~83Eyc6)+irNy_Kpz>q~!hORu0Qbi15ktz$EL5(;d(&D>+A#TV? zHnNS&ff1jv5_FrT+x)A(Dy!}taTN}u=JS|4v zAhjks#D&-r)M%P`O;2y;t|Mie2=AK@rJ^hhbzQ>_Z-fT^@EI4)Na#!VebO*DU-5{J zEImww+9`6-2q3&<=99U&J`S7YJDa=G!mVsDbueQU@Z_74_hL9Qm$Mi4i|WI8{;gkmXjh3+(^UCvxEqtR)=`#Hk9sbdc`@A zJ&?Y?H`KAZy|dPET)=Sl#$ai>EW{-1Kyei4GnL?<;HF$NINHEP-z@Z$I8-b@q{pMm zsr_zgNGk7SDS(##qm;9??zGjdlT!*phnj?tUD=BhE4rNkz;xUXzsvd8PtGS;egIUJeZMeU z;qc4-gU?R1-aK(zr6@A4CBWnTyCP})bnJtt|D=MiSUW}*`eHWM{8}!=1{Lg(w{IRP zn2Fa!j$wzgwkF1aCL6W7)b;oZ0GFie+kaBnKf8URQ$b=^+J5ULmlQQMSY@^2{V=xo zw%?%U!jGKdJF3dk-~YS|K2UOg1n@uI`SiEa_@H@8+hdW`9>2t)xBWROX%* zx?7Xn;U_0|6TmL_pEmKt8`lfuZMGwYO7ZonZ*!h4mj}@~TG7@rl2+!b=rVYJV>MVe zYB!7=@ECBp3h_s8di^s!a{HstTo3M7`A?7LaxsH;#d{Avb1+CR{!GIxDu4KpVWDR& zp4kto_zmEE@u!aXqsso$wK%yH#hR70fqB1(pK(pP*)>B-drJgtGaq!CKBNA6iuY3S>9Ggue4Cx8Jf@#3zt#?m8&VHNXKTlW7vv=kEF5_Q6Iia%{xGNo^=+Dv?OSb^{l-|C4Ie^6$9U#8s z+CkRdp8}j7c=FGRziW6f?0YpJO*F~e_2=Gz9n;!$Z1}W+%c0~!9A}x|t%qq|VLkym zw6`axBMkmoVgKyD9A8l2nI)yX=hFjjZ)VeO9I_Se*I!AtAAZ79Z#s*eo)zahUuoMm z_w>pyW~u`r`Xnp90*P|I_h# z+AN>zy~a#GcrUSS*$(;n3bAOyc_`kY-VQB>?ik4dPPn2zz3}SVXY0VM{%2B7y24mV zL_w$WbvN&oV0D$JCxah<%J%Q2q%ME&X<8GAO_(+{c@6p*N_#UpH?^0LAh20+`lz|m zG~kRx{v4pUBfcsN;W~v*C$P>wwPg-~5J`)5HAZvi4vuexQRQqVZ%#haZ?j znU@=&^kn)E`Xex_$91+FY`V_%{vUV!1?fJuUqSUpbz&bJ-v@g0xjy&+c)v1-sSwsm z+_tdv9hL-~jr_;sf08))xt&axE3WNfh|$?{fZnLiblP zu5zYJj`f+b9{aNMxSP-$*TnE6Q)?iZ>_wHi(0oKBy-H_-yCVGbTzX>K~+&%0RH~OhWZ}> zew;i~fdF~5!H^_+2=#v)C+Dn-CvII>jvAbYsxx*;ci+@BKut}jiYM(JXUwe>sX zM}U(JPydnQj}!kR%*@ss0xM~PUG;8|!=fc_VQR9E2xaZ=1h>2Hpt`|yh>S2W!doNS zP}S10<;GT=RagkE2Wk|ZL!^Qo9&-adX=+97)KtiwQQ@W)8@(Raq%b?IKUnkUTe0=4aR~dx2*XL%rSyA7yPXsEu0S*&hzNjD&YrX82y1dE|A9|8 z)4Dx-HdNKHMYn>v$a5G&P{YYus;J@kn8w~lg*BqnyRscWK+mHQvW~o1D=V=bjmzsyvAjD(tnJ=)09n}|QB_HCAc2;48oG}6}-#k zw;RZ;EE{|0RTxUtI2-~jVI;(e?*OnLKDL5>1m?oiCgDc7DJTPj z4DQF{uX?LVjL+uks?~ z4P8fO|B@Ar($jRDmNg=KQiD&6NGQY~L!5?N3W!|83SG%zZ-=UNHNfi!>EE1IFNiRE zpQ4ca zX6)U)or^~x{R_Th`i25f&Dm1f*ulINoT%E*D=xD$aw1oLc(RKkjMnPbV}|9{ymyY6 zy&c0nZ72zr1{e@Ebxdz6tz|nbR5(E{`6gIfWHKkKva#v<8OV%`Hw zvYkHKUTn6CRkU2`+X(yFenl59HR!uM{pK89Y=&*qE=2?44%Rh2pZ)5XYe-Cps(xN1 zoF|IBQ>5!Lo*I{@fyU9)gGCn0$YX*NNy```uQ{V`)luJ)(SeOkIF6eeNO-}^b|SQ1 z7wo}5p(+Q*Vm;b67QZhFrUdZf5ewM1jH*YE9lRgK?hmcC;^j(E=dY=O{2|H^zS5v8 zN%B$_FE2Tuj$ozgekHon0k14ySfH3U%Po5bisZm7dgHi|5S(UZ)ndyPC#RvJeCatc zIbUvfXHxulu5JS^HLX4!FzD%@E~0nC#jzp&V1mFn^a>px~@U`1v#uJ_K{rI_w9M?*h ztEZ!~xmOS#mP73a`dk*5 zQWY78om4IMky8x1qq;37?5!&*ZBiwV>ia{6sY*w6H*A3Ah>Z71-=|D_Xj?cCazabM zVYp}6?T*3@tjmhJ5euj?gC&{SGM0!ivPdFSSXjedPg3v6eMMCjWEg)2jMU+qpjN~n z+XL2?1g?w`#t3c6g{@%rkOW}}jBv~4b>-h4Ux!=yPC1@(PsCsQ-acu#Ao~aGLaSqcb%!Q$8CRD~A@gz-1 zI1Uu1xVEM7-7jLyP3s0iEP~?`ebXCC(J+FBBPHahUa-WI1g1hIX{uZ24u3?pwr_&JSO_-sMveKE@TrI)oXFgct4HMsMnE^u~|Oz zsRdw`A~-~kwl?7BduQrJfr!hki-{g_t41P-=GnwKDDPw^AsWQgjK_pExR`p1dJQM~ zBrggVOw!IV2rN6H-7R|z2X8sdB0~w92VhIs2f+7Q6CnP%4L5G{I;q{hd6bXc@){_d zu+Z0Ye}aZpnPSvT09{@$ORKf^&#jB-3-je&BEu=^9&NJ2mkb2`v-=8 z_tJ5iS&}zhxcekCV7qo%c7R9TyLYo24^^Sc{D8AR{2{8!|2m|CQ&*D9scTyKMO?xU z-~YJbNe&R$*3X#Au3M!o_m(?HM=GxAAr2Em0DCowpZf9dsY`1Gga-p+sgivy%+y@f zigWR4(MWKcLl=kv$`dEqlT8Q-tpalpPjw<>trlzCFeGaQ=2(eNVB*VI|uArFtH{+*>0VIWx?RV*VHDx)4<0f|3o?;6*FvcoE<=%?qML%cL<6KA)*>foC zp-jowW^YvIeVM;~6`kf~LW$5POt#Wgd^vX8O!s}l(dbv>(S#@1+a>=Gd+!<5WZJfk zGDV$H(LqEIM4ZqhG!a4vXQW99h)D=7pj1gH0-+aYER;ZS0BNBOp(cUE0HK67(z`+k zp@rUi@956+yzlos&pY4uYp=cb{K9R0 zR!`n|M?AJ(SEk?SpO${Bbbs%Z#;aBWOX6FmZg^6j$LWGK#tCL`{<80t8%yUAYzA9< z&ap*gKfiUo>MMkRc!2|!w%>GKY*=+GOSZi)?I~Yn4znE^EGCml!JYKoVg)kRE5u?4 zO;OvoExjP=eTF@_e94^qRvhdRNp{aPOL*7p;l5fY&Kqp50#A>2zICGo#tR1Zfm)9p zN*b>2@8$;pc3b0Nig4wcCwH_o4I{~cPtFjLUOZxc?|EhJ15k9juNsk#Wa{bZF)%=( zhCBBYznfV-ho(;pX%IbmY$ftvK?%uPt$7M+btKy;y4rHBxlzUqn-Gzx3|T=vbMjew z<+hP-_?j?6A8(pno=ut+tF69h~nTtn?;fd(gsrpJELG5~`ovHJz)s?a5T|)ia6{;)r1@in?F56-Q;JTNmFL9Hhqw_S~LwMol zkSzZX$wt;I`Lar@2GRk!p(PvxlxZBEa$R{rc`HTEGM86rMX4E5P*V+JrR2IQYWk@V ziEI`0C{IDQ3g+VIPpi~dWR+3$pkG4Y^9U)6`nwCE3EgKl9k~cVwE)g*xi%%wBOtG(gDj6yNO5iqE7Ra=QH3m2SIvzeem)y>-%T1vI`Uy5-0$W@X7Qz^4D_!4Y1&X zg88S!G*vkqd0Dgyc$OT@ov7f^i2LYXkiSB>70;lp7Z=Rg*76h`NSpV<5IlT-uz8uH z$#GGm5K!k`V#xs0B9Vy)b38gk-@%l+*P}BDPJHw7o!E>`;p-~5;LZsVxS$|`*%i!^ zxjmk|F*dfwuM3+Qx7(7Q&c0W>jnG{63W{g>?8WWx*G6ow2g{9qUi#EluhYF9Q*9UT zPj_)mkhF?RO~qnWi}@_U06N|kCyDCf;=AinSQdBL#42@{>G#;{^RN(W$4kYcIEt>z z4mnwlW8@1ItdIDf(|Oso*YFskfL!JEIi}WHT<|Zgj0~aq9K>V7g|safw-2OH3MF$f zyz4w2zL}$S^e4^C+0hv$&nL5fk@Ziiebq5l=MUNK*qChIT9DXIB=8_fNTx7G4!Vo=V3n?jGmqtds-P*K}C`pseom zqB^Zo5zl)~ewI4dZ8v*dwmUotp?BxNYWgUWNMTTqMYR@WrtIt>XRq5{>dJS~u$o$< z8N=xQ;IWMxZj=~}X_(v~R7vS5z#};;?uYF80r0rfb7tSuY$#J*RkGHw#hcdV8{$>= z$7%Cy99mO0Dz+0n|2EmXjE@6wUvY;1ec%6o0|WkMeKJO)V*q7Ddb$DJU!W z#1BNdcn)R5#Jt-cFA?H55K19aA(qiIaB1u8e&x8q!22gJ!btq11SGKNIbi~95nr$k z*&pqRH&^A%F~+PrvB7BOl_v41M&}gj{&NhOp{`FQ$Cr84znta|6qcEiZZv8-b!UWWi5531@a^ZougsH=2MZFh)?G6$sd`XznPhisz zM(sG}gq2V(XQFqBE*!9&KH@8Qo$oN~8prbjNDariNTz_PpJM_P>%zxIt9jIqRk%hp zG@oXG-YL+Wv#*a1mL>?<(qym_p}~(5ng!0i5~pH~m)i zs;c#Ip<4If|88gf!oORf0!_7gRtAM3OXBX5T;g1b5+pit*LPPJHbqe=QtT3~Z;j#J zZ-L3e;>dOehDkT9-C%s?WT>tI$eiE6tq;EoT!@|gB6`WeTZsuq>mL>P^{uVa*V4n1 zC4f=$$@ufIqzY*liEbfb%+9x;^sJ!qJ%U=@sDBGZ(LC(-MF{y3g*8+Zu}cdrfri zJ1G$Wl{t6bVmEHB5Ka7b<&ptE+Zu^?_0O!1YY8 z_U2NxlbV68I(AtSEW{PK1wqc8H=67Yc+X(3$c7w@yd_282+aF5YI_txkR-Uq)J5=P zHaKOi3`rdXS>|l@^bN@37J=B#C&` zjO%T&PE}b9X%*ZFXpqG2*Nc$-4?8`3dqJ9>9{zcEoYfM4Bdd8~mR~SKYileAd%%ye zY{M!48VVy9BMnpMBYo<1x+$ATvnup0N+1^?r9tO6YzOoQ;O%?!(YVcV1`O7Ro+5g4 z?7qL_3E&-h&)DB%m|_=|rqE%pyCTm$lH$U;jVqrk@Qb5`tso-mC8%0LPah2E!TNY%kW*#tU!HDg-%Rn03p^-V zL(M0d)^^4dJyqI@G0o5ouiMXF>^W?hJ7D)rbh<3&_u4B>kCNcYs@GzEaNeU_W|==c zVw+OPs3DeDkEDkvygs_FW*PKD!@U=IRg!{;56$VFoxn&jIiF?nTXwmpy&$y*wzd2u ztuWnuDs;Bd!UeW&{&*vZl!sF^$`oLKH9QWicYfRX zABTl)n~Zg6@YZIMT+p=C(vh(}*HxU_)4v6Cv28SFnUs5Cq~@WVcR0qc@-_x0EK=}v z*nn?k5+9%7fG=E^0rTK7=26MGk!eS0g-vnye3gXh_)prfX2FrKvX{mgTXlDot)ln8>)j5iwXderZTM? z5B0i7c|5D}Zc$OQeJS%T`n*MLEPJ)}43gg8c)Bn7G6!h#PfF$I{lHKjf!-OtV6 zJeq6Oe|qYju**ue;i-zF3+6>o_aGo_QdxUD(=v|D(5La!?6MNlFTJYEbdd8Gh{}{G zQPDr^%M13uGfcHppR)x6{6C#M^gL(XT{L_kv-D?P8{Ejc3r7|6T|s8CYU~6neqevZ z;g^USOh{i*`&fLpu@Ws6_(&?7NTnrrRvHb>GN7m#-=w;`M7AJZUj2soM|XsI3ubZV zNYmq=y_3Fqu)iL3tC}|Q$FFOSGLq=O4ihRb+X?no@N0NUCX5GcPde_iED zubS2GTYH!d1ZH);1eaVA|BwKYu_>`Y)(XtB-h~oA&Q)$zkr{=LD4t)yDmyttjbjY~ zA6hvrli*L+$A1`RotuggbkLlj{C<0H$_!+01NjA0N7Py@fop|~;Jq1o3kvT0e|8wz z%KxftL+@WnU+F8|OM>M2{1V>~5>(R}l|GsQQ&*L`zyE7g(|2a>4TUN^*(6 zaU#zm3pLVsG@O#$9UFe7#2rg7WkYlZxqn|C&X)M{ZbFx>>%YHKg~t;YW16hGb6>PR zo;z#1Q_#AXY+xAdoK;@}3|@BXw>(0$j2U>o81v#*La5@-HyLt=ZL@WrFwr2s7cBt5 zB9W!V6L^eqO=rZAV?nBMa*4X$XqJD^mn>{7H9pvl#;?Q{bn96P=f-_) zOB}v(b$XFr4b{L*?8z8_iU~8%O#f3HHu1kZB?C=PtCV%|-93NQN0z(NsZP>5nxnZd z-h{L~Sx%LYA5!im>8Yp% zn0S8k$ho3-$ok!-HmssueqWo6@QZRElkzQye*IhLV4y}2M6ZvJGb0{PQOWmw?SwkB zy&?F>O-PzueJRh+LtTqKm()4o8x%;;p19!6s|T{H)~hC=VHSznoXPQkjM7;KF9OO? zq)Yhcf3{Sm+*JN-Vttd;QsQve)-`tu7b<2JgkE;b znb)~CG?3S40vZPW$74dWqeT=u$aChxxc_RBmiir(gRQBSf}8RC%h6fSGbvnLkR0VJ zx|6f5X^HN+Sz=+r-yY>yV4{kstwlvly#)g;OQz}0`@D*%kB_HgX=Flfp{t!0yyu6c z5?z=h&l8K4@iDkuCU7uyysOG3{qj@kICXmUhoFK5!_K-u1H<#%Uh*MuA57gY3VOUB z(%t6RS!{)*S0lud`fZnT(%R>YtWxx%c@Jfv$d@};bLIqWZoE)>x^ZY3MGOXrx(;f| zC7wgFYqgZ+ylN;XVNdSfw{34U`|EIgBLYT@e*y(Eh-BiT@Tfk0mpqeBc?S_xy;MP@ z`jB87(WzOfzO+8&WgKwg(j_+`5BlYttVhqKazlVp0k%Up%=j?xEBuQ|;+tTr5aR%0 z!d{DH*Fzno;EB+3a5vy zQ(POlzWF5m%ir!PWaFYvv<@Bp6O$9QFwj5Ha*;CKkO)V8<&w6|T1s9ELDdCKmfG14 zXS-R03a}7Zocf!PjJ04MTc#^9)_xLqn~5fu+AewB=#2aouBRv&p}T+@q2mt^3l-p# znK>NR-|dmnXKkD2qsV!O`*`(M(IO;&zIiWGFay+g?Dmld(d!qax2mluPm!*(zedR9 z0O=YPX7C1=xz;N+@J;43X;O@$dUM`mi>fl`u?x|6c8t%BIhA!N2FyH~U@0X4wwOHd zAkao`x#=5;(}0xJTscnyvbo$)uoJT!9F-C*7*VKB9g(0TaduiYb_<=6y6J{21hdJ;QBncfk(-8S(?AZGBzDNVD7 zKyB%r!wSF3Atp=v72Hj>6x`GA(HKeas^-nsua3g)_>cIeSfXx*3*D`ZYaX3}6*ueC zQR=<8W5Cbq%vw;fuxd>Ciu$L@eCo|IxyN>du`coB$t3`joQ$iNDi7F6^n;9nxi8^{ zjYB$Xij|mUr4wHFo)6HMs;-7Du`jJ<3LLp7+a%cv1Ydkal%$aKI{gy2)? zd=YrDl(-ex={F7UsCP6%7mnWFx!`zJ)rew`Wo%po1a z-jbO2x{iF~Z*LZ4XtWaB-3varWP<0V_re;}Dh7X9JnmaXR@+fni20hsAA2T1Pl(kp zjn7b#|t@M>r7tpX!xuZjkYAx)#UR8ne z>cUX}FgBuS(_f`#Dm`=u4ED-S!0rI0nKeaq6;aWY+i!H-o@Qp12r#5XTcIG9q&@K| zAxulrIr@Y4qqz`)-eGz{QS(e~2K1xiC;FiH-biS~`|(e-$De1za1}YDR0xNGz^WY_ z=q8;-xh6Uvx?8wLHH{ap>cR_ijqsqjDCbvA)-^HJo>jv<+C9a$J4$;mmD-4wbZc74 z+q%^Oe$_NpQbE)A)nx3M9Y zaV)Q(=6KmYw2glx=IprCupn)@*r6KshXIkO-)#SIfR)a+0}|a4DOA~3RvLQ$2cp=D zbhn~`l15i`eLKf;w@`W86Nno3NqeSHZ6V5IdgUIqnHWg5C~F-pmE6;~J>2lR#$Tp| zQl?lyUqi_lM|!3jo!Lan-^=rRo~c=P&uUl^K6)-wR?;&YPbw9O_IpVa&J4=BGH z)h|i{l`7aq&CNRsH3f}$GoZSre$!Fa;e+L|kqSjX%K_7>a$Pbb({|Vy3?E}3U@Obs zYC_fIxe=vW%fx6DPz>oko_4F)>x;!b#_t{O?4I?f>!#)A#m6q9V9^Od+SH~JESA_~ z$F1HaKxz;Dt;z2yZCWNohL1Qfs9rO0FK)!KZ9A?ekz7NWeAm>ioPw7Z>bgi7q<$iiXkjBU$YRdT`H9<1 zh=as?9}y~3pePGvwQjQ;J4s=1DUG|$&PN5(G-4xzC$HOd+!P(l*R3pf;E-<4)A40Z zJVRAPcGFiD^_w@wZsN&OLP=f7IRi25*qD7az;lIEeYCqJ_<5HqD=U0Ml-_4E{w}|e zoOSnB3{l1--kg{<{quZA^8Gm#FDBBwhLT`DQ zk32ZeH>cd+MrNdkbQNQIh403Ja%@)nB9=b*+gQxlRE`Pz!I>SR@erSc>pmcuHqXdz zF3xiEM_o&xxe^_Pr(SqYFvp`xR6bxr)N(xEQ7*>Cm(5U$z z*A1^kIG-mu{Lzv8cv!+at_w0ne@n%jCG6zqFW--cCE2INj?YI8U)_}0StXu!yBuh@ zeB5Y~*$tf=b)N9c{gaDd>d${gU%h(k%lFe)9f)6?+q6vII%fZs@#`wgzPoCHu+u9P zxWXZ{N2+8UqS24IRQ>)H^}jBj+~g@ghZ}Y-_-klA$1UyAxISj`3?bM`YLt5Lx`rIJ zp;PlQ0L^sSH0vr8I&xm`al|_Wm;^t$H^H$2q{(~_r69qwMqi?jf1)#WwfEE3)itQX^;`nNGr^YSX{Zp1}Qf!5ot zdYO-Yh=2%rCi)88OD(>^GLK^$JcF?Q%H?;Raz8);(5rb9aUM{?*c-T54*$VAro&8V z^kaKWcN};Y$_&IGd|q-lPkwR=@w0+GogI`$1fR# zuUtl-wjQqZUiQ$opA?F_gV!(d#1`g_>p~5)=%Pvduht7V%~XJCf^@_1bkorM%(LG= zp)E#>%j2t8NJ-T05c~&ACPB_{?8Dhb3Z@ zAUvztwA%}5VK7T-xMS!`x_wETK%x>kE7N8oy7N2J>7@biLeF z?RctT|EzguZ!WCRyS5z5L`scguoGW+|5c4&(g;xb7j{lw`9pfJXZDeJS%Gde89 zs6TjwVIJVVa)rMASnPc43zV8MX|Zl@t=TvGm@D1jqX2ECH*X*_J~eJW?G6iRLSsl~ zhLGYPYS*II45-99bx=EQchM^F{)&!6#|iiPJn?Yc-z0s+{_YNqWW`xDQpGhVA&aAoy;-4?jrmLE zk7%I%4mJZB7L~mKQ11>{lNDAvYf_?{a1eipuIJw;V5ldMaZ)C93r-S-FFz)xMR?2X8RMIJ0ZZ7xDJi(&BL|F&eHmo*BNOS6dHVrVK%N#t5#N2pkroMenXG( zCCQ>nbG9{GC4qlMXo5~^`%D_81i|awgi}0}DrE*D@P&FdewX*W0R=^rHAk}`G1#6t zH_LaIqBzp>pyxyCeU{LG^SZ*H&6~|jxxaS_>)xgNe5h9P4YPZ{h3B_wS@AEEk&xJ5 zmsQl_a0qD(ePGXMMxWx~h>+!UNcT`<;>EqOzEP>7+@cl#YV(B70}Xif10h``0M*lG z>Zj0?P6f^PrB#e-3EQ$A{jGi`78n4j$NCGPliJZ9i$af21%z&*`OVkKsv^oIXn}}5 zac83cFXQ?p)_)icv0FrwN+rX_y8ZzS)WU7y7bjN}Ixcol#hZj6gSL~=*1dLkm9A?V zueKkzjd}s)Ftvfe9RRszOU(kP_`Hqj0~n{m1(A%^9Y6PZ_nJ3#0=+{V|FS_zM37pl zDJvNl><)3N)uSh{%ndJ>m}VI+<)*X}B(m2F13&BgW?22P+S_`yPRH~(_~P?~WQ^po zw&5*O?H6?~HCrOxS0cI%3_q`?xxj;Yqfc3mSge8>wnA_nbG5z+V-cn9E)dv2QmCq(pkdG zb~2v04VdoOw}kp+F}qYNylP?e`VGDc zdj4Y664Bi(*#ICBP0GAR`CdEbir4CvXSIIS%kC~e#KU}b@VT^smE4SsTf0~#&ms(+ zoB>+Y5Y)Kp=PEL4v74EJaP-HyHH`Mx#7TPkx49I8M^NplWg0)!eCJ527t#m*YNlSF z1cUkgepVg|&on1SktX!+3;&C$G0YRw9WxpMDsySbX0dg^;?uV$gT~_^m z4r$+Ky(h9^BivA-$M&y-2b%b9&l!e7A4s>&V#9$<5-xdH5XElAs)L+I|C6^<&ykHO zm7ef_4V6ihog6_S5N`&=w^bj|pFukUa6)h*JsCfT@C8%ez|2hm=M2_x%<~ZzI zD5+>P-eoG~EG+hEdRe;JW47ZWuu=HS-*omMhpAjEQkdhF{3s0EZ`X^s%(sw-g){C3{($5`K~>A z+!zOQ@>UqFY0o@Z-vA!&&gvytT*Tb9L< z<=&U1`4h{?d7Nlep?wT^6! zRV~zkp&qW7*g(q(j)4uP2URfhVe1j>p2?`iM)!U1GrJ z#3cX`M-+ITCcP{cU-Fg;AdT(WF$JUB5NO6jM%S1zLc+A^WzXPe1D(O51+e*nX;mIn z7u!!YH@Dq|_VETGNP$SYfR?h?>cm^*a9~rF-Y2piTw%AO0<SoqXbmjNEu((ZqZ{p{lGrjBe)(NUEdk&}`ahpOEVq^EGu; zWvQ~G>+`4mw}lOQDbOnU@26_sI-=}_HHLK_9od|dxr@QV9OTxC@p!-vUUi`QN5^i> ztEmI9fXlou3oC5}mM?aQRhnQOMewvvBAbV2&4EZ!42YfJ_pt7M5KZ=%_T-7H&zg90 z>@q;FcAUG_($|UAm*<{EsBVF;Z)+%^G`S*=JHn$@wyKJW>)IJG%V*$^Yx*&QaA8fvgTcUPDTyB20+Of8i%{cB(w6cGN*F8cN@-p z`8yw`zX?Qo%(yj=Y|1smc(;zsXcrV|*C%4i13_zNp<%=_RNVajgzL{o(H*zQ%2n%L z9{WBbsTuKYmtJ1Wic-w}r1`}? ztu#;!?V~>%a=WFk$48EXd3NVZrU=0p;!4UH?fEH5p0PVm(xPUA1Lm-*_yZV;xnJ|nlT@|FivU5P^RPa11)=kI z>YjzaTC>0;qa5gEQD-&+NgBnlO#QmqYW)Buex@z*mVF)eznH2MEc{}&rnE&Wd>ss-qeeL$pZdK)N15R{&~-&HSjq4DcD za`~tDv%!0xC=ZS=T)#3VRVM*lNpE6n)XH@8N!l|MaU9|AHbH6A zo%TY+Ke$5v(pAXE0!?%m229cquh;530sa!mMnMmx8*#==xs}* zOD-2geUj6!A`DON*vCM^Ol?Odr zhKFU>Y!$*qs~j{kD4}}{I^xzGqLsK`Y{qMo3u%scR>tft7)|$=t4vyRw#hF@D?#wA zqCF?;b`3-k%QWs6u0c21DDL33aGf}tZ~W=heX_|KZrX3ZG50F87l0}7UlF;{IeIbf zhTSInBjLb`fc)9#D;MY;vhu{q8@HM?_?62sc-;{Ge#gNRZugZ-{0c6xoWUMwuHbxA z1<&mJEMCUyYm~My1b)Q=W&MGHh2;af2?!y@q>^YXLP!+G6TU=B;%SJ*(3c8!g6lt- z^1orC1h>kuSvW^8*5}IAcoZlzec!Jc#Jw(*$B$d|iU!(RK>)CA66wfeZeo0cyq_;k z-G%E9QLi(+jxvs`u4UWnbcqUgF3qql{SGe2-1m#4l<`2}DYXy~Nipr0(mH-q z=DT1?K8ESVT21{6vC5fc{Zn&IR`5vY3WYxP8w18dcRUo~1p+fLa3C=^38J?MG3CGX zrkz?AT@!_=qA!_v5MBKfd-k5W^kmeZvdOEaxK-?zL0os_FQ-k-8~Is~x@BFq1U^xFYR{VyYh{p-7Yh)46TC58yw-~#dsva)rf)YHF`RLNw1alLI=h!T=S zACa|g*56qs&+$j9OBkcPgKa28WH$Jn8h8!xXXS`fTZF0FpGVCzH|LZDVKf zOamlN@9$*7oVmqC3ukvD?(V`jJjt9vUB13`S8`tsmJE~U9iuYuRtln)GPAj}m=zE` zC76Z8e0$-{14^({tEDkWAwr7ofUNx{n&;qRO7|dr^gih(Io7470W*LKYfQ~6W$!48 zKKU5EMuWnm*UmimEm{}zjEdmvKGnB4EbMN_l;$}dt9^&Tz;CYZC7ki3JIj6kJZ~W$ zE?CmEHB#WGu}~Nc+pZ+YB{Ov5hB?vN8RQIgkjBUAvQ+${qYE6ZvQ5(u_VOne zegtc6-CHcdv#2$AWkD)~!>yPr9ehBXim4+`Ue&OXZV)i~ir1{~iX?$Qd&6FCp&C zq1ypaEAY@LMRV)=?rA>dw+lVDKKwn}Y4~NTWu)vzbjSyjadvH{o+hE#k7tFvl9<~} zXwlMx+BylzBFHV?K4bsrs?cy4=lI^$@a@~kvJEL;!0$3cjW`@zjPBKsNFA2SSU+)w zj!k_gk0FBo*rwKZshS=ctz>agY!Jqyod%a?tq9_JV2FWt2#DjyP^~oYCM8tnyy_NJ z)(1|~@p6-yW>N@YGWfl>U!+iQ3 z(V634Jk%NV^oO%zu{spq|jW#Qp7sbLYghKgesb~oR1zsGWQ^_@SLB*b9#CY zTiY*IE#AN1XD|O}0fz1xj3uPOPr0>dE%mr;;gOYT{R-*qSI!cZ{v3 za%o0ZmR^|TOxR;>osNiT55f9M`yxsj-hsfnU+@aWUSGLPzBDZkf49lmu2&AfcwFga zD=``|RkaiCwFLl0H^v^7p!|Cq{1ze=4*XFvzT!k|W^v#9WulA&lWT+>_!PITI5ZJ-` zR3rI`j%U)AVE`#^{D@N~q+g?LgvZQ0I)FFNi2_PTRyNNwR-3e4o`6A{bULv+uuKDx z%9w6bBf9eDZR<)S5wV^<)co;@ z+;n3wx+qeAC(k3PqiO76-0+3XCnu{h+8#f$M84d1Fmqnf4w?@t-YN|hhBSDsj2+yp zJm=!tPf#wv%*nxMgXQsVxmAq%vP3&p$$?#T-GtX&Y6zWY8BlFrqQ@bJ@~9gtiftTJ zmqw>(wmRRkz*z^}&%*mL8RiOn^v)Krk}i0_4!FBun&M#66PC8Q=IEttD>jU>JX;)0 z?jNM9NGhgxN?T9(>d7c(aL4x61TJsrRgqJNEzY!fx{fpb^JZS`Z^0l@#HvC|Y+}Pu zhvHk>AMUe<-WTgU4S)4;I$0T&H8Q;Ng@f1U(heT24hJ=5rr7r51O-u>^VLBHUtBhDr)%2lqK=>b!RE13o^>Ot*s6Lc1`~=mvaV6{En9_gIgLVr6Ju zI+t9=GjUhu#{LTAMNu41%N(ue8xKOL^CIBQn4tOn;RhFj2$&UbEY$j=OJqVJOs@~g z*)Yt5QvA|K3U@~GE>~VqJw*rv&Slo!s-F#&O>4F*81p$*v++{9>viKY-sSRN6&hII zg*YLIkimCzq0k;L&jnBXu|%b}-@*h$-)Zo6ck$KKrPC96O?v>6;H)+#t@p}A1S5{% zFe7-BZb6{rAnbW-AH{S6C_A_}pKZ$F(*EJIXD)LZQcl%PGFRR@O{^e`*u}v_05WP8 zd)o2waWwG`E;&dF>41hj+>6s!Q}VUtD8ULJ;@^+mZR!)icqjY!`GcZ&w@=Em%4J5_ zTFLT#lPtmFu>6|1f#d1Kxg5b8cKz%&WSF<%_Gj$n!)FJ_VUG^G##T1|iz!6>?eF>F z{{yBFm%D9jSB->=1AX+|enIIE&ni0LLQ8gobz<&R5NI3~4>6!{bI14%9nZGa4Vs|9 z(tI$>PNIQ+QRWY1R3?Rl4}M!AB-T13qYr4gh4gPdWVzxYvQOnFDu-nm#Y$hk@2*9p zq@0IMo#d4iP8fjoM3V+~3c1a@=b7e8 zS?48)%vuJ9MEFt~+$u4Zg^rIK z1Y~w|y4Jajb7O6<_t%C;p)f_BPZf@4;rRl=9Nn){U%iBDVX&gCz@Ii2Jy#>BF!D~J z1VQqgfuSi~g~@D>sQ(xu4u_2YT->HYzqxoP{J8&fahz438g8Mwgsr#K$A_N8;Fhy0 z2Gr6#@E^#wBS6PwI<4C;Sf8G+DGT+rE^_Ut?tXq_G0pg7lEiLzI63OBjC$ysFXqFp>ud;AO51szezNvdO}pznIc~}=H00? z;Dzg!jorjm1};0cQEL{y1Bl_ z?2rDpofKoh3BUhQ=c@^^Q#k)JN0tVanAAQB!Bb*Icbrxi*eO?Ej-Mtw+6YOyYOhv> zd^wmcyEOCGQ^&ze{?3GM*(adMquT})QncUnbr+tN`f0CAaR=(Jw45SFoA;lhzVb~&)y3i z+e2n=fG|P`{)(a<6-6S~sZ(CZDF6PKrQ(lA{T<65N7uyTE=DvSPUSP<@UuRiZ9@jJ z07D`YxAgX@+MQJ)KTVJ}s17writBv$nZ`oXPIPSp=}i140>lxR!&?iqe1^7aW3pY_ zj7oFi{^}fxU+*GwExg3+07`AK>RBYtPHqmEx3bnCg@TTSmWN)udFdNAkbS)&c>q-S}oQj25td%$wQlw=`{9e9jlB&$Mq-Rmxepw_z zD%wLhHgwMg<}9vRGvKd(lz9z6#_SV|$&7}2vS;1h)=W=(|Kda`l8{+!wK_*d;By+* zl>zeo?PJg3CNWbK{{XV?d8MoN!X&5CoSZt=QS8!OZam7hvGFMDx9EqO>kcQYS5R;0 z0~d*Gmi+gK0mREUZ_(MYXo(GW+AWciH(h2aIf|UJCj7;q#0)nPui0Cv*~M zgJxvlY&X}tZ<;&%VN;p*ksabx;fQ(UmoWaNjN}W!Gy#^|fCsoU2=o2HK5X4~!)aOD z_{Sr=3)M$wUFIS#ZfSARjH#NT#5dHDVJuXCO~MgxKFKwCYx3`DhwEF)e~?m?^xI$l zu9EExpLbNL-j}-?e$zE~L2gv;q(qpDs~Y_8;K0CzP061^_~1KoYRhQp|DdawWxW_} zvs%oKRjWN{%EkZkP1FCziuo?weqXl*N;Y^_3-+us=pQMXFxlObNMEcc5(O_0-|)yO zL-t&fO2Y_SUH4$4P65998pF%e2Q=_7@ zJk)MyYIhA&LGYi&x#^iWywA1;&1!j(jW~<=@>eS4>g;*@L6|+|a(uubv7Qv*cl(T| zBu;sU@(|!lBvQE1;B#==4b;HL4jn6xynwS}&fJ-o3vkJO!ISGV?rj=Wbarea3Q_QWyfZResuoG*0O28!cLKV|HRmaiz+N z0XZ-VG&nelc>v~cngRuT;sb9~RQ`mxGdG?Y;9JblSMgJFH(BzLAYzw%v*?^kDRHmC zZEOf%_(-Dq@gVVqA@J^K!&k0EKmKurTdrw`Ga@9b=#A0=NbB0+QtDvKC3sGNU=)Tx z!~>V>743xXci!*F(7%FNt}f_R#_89IY-lInpjyg^^>khDW_FMlLsdt4!Ld{i7H=;L z7v?C}*s7Z)(WY!n1 zQ_ZIEuD;Wqt6ax-rHLheyDasaK|q{gnx;Hkj~!wghg_uN7mG4ZFNVNcYTmOn6R*A1 z-9knu>HMDs2Fe0pIa+obT+=64p&1g> zGS;BKT;Kv4kBqM2r@(wN8Pc~Gmh4<5G*k?UooJ`f1Ju?$Nc;HZou3Iq3 z{g5}Xm|sm6X#6E3LqiK{9QwrjK6tinpBl^Vl_#X}vj6RIk<~4!s5GKxW)0r|BpCvA zQCVZ4T;eP3b+meGi|F%pd}L`m3Fq&jatV5`^ws)I7jgsah|C2f0RO`7Dne<7oRi`t z;}T!}w0R%iV9KNzTE{FCLFj{6Ux79LG!+ulHaTXjA|}{qp27H)S8!f|KVm0|uX9a_ z6^Gja+y*I!%+HDTKcdncllT$hacaEdzA*0L2d{BsL^sN^z!7E;N7x{QCGvc=-ze6n=>uA!w~iEVXql zqakK^83ue{7*;xKz%#lFRCG8tusH4mGFMkA2TW&cc9l4D&dPWd_0TQm~cC6Twe z+_wH|!%!4$Z$#EFrKUs}HzBA^qz5kLAjwgbkaz-xp6{1&psrccVeu?P=fH{ZN<;Sk zVtQwb7u$|7VIjI_Kc)4f+{c$S&q7*2$8FH}%z-$#4zRgHh0nSK#t!BPSSaeZvlO~* zUEdAH57BpNXAbX-(6fN(n+*jAKa8;b*j^6;orjZ(8-5JNIfTf1=W)6#HUAZI&5_!j z#_6Iat7;zJHjl_$;}HD%(6Q^d1s6&<3RA*2khkUb zR5m#OK>b`7cc1<{Gye1H{Ks~=l_9U)?bEKV_YtN4o=vNr@>fGOeC1Q4u&Kc`aOvn5 zE{$`a{}%ku<S^wzMJ@(7@ z?T^K3H@0L9DDYNGt1a~IFI>RUU;a<`_`mhqx6tJm2UqJuP=syuha_>+!mBS%7Aol3 zqIq(gFW)-UpF$xRsDGG1E{PpH=4!;SSexj@kmd*o(xrqB&L{yX35F!}fOJXdBy_Ni2noRfq=hyH z2_%7FKw4W7%jknPRxwelQvGGPjMCPdCI(22Q7fYWgAiZ>>=47{gQ@mT3eIqjMLLuLx-QTz)sFx z8-=!gw9qUYMVD!0VPh-*XCjIJaoIW4&yNwc?alp$WsJRTkQG>nLUweE9FJ~DESF<< z8yOh`QC_UtA}b$dz<5w>3mUAe`RQ6oTX~pO&Z=|n-1yy(tx~hrnTF!z0h(k_1;S2+ zS_T?Pm5xeMI)7oM_pv|w_EZEf*3KudIH0rIoDWG(hKCe}X;qVp4Jol*Tu~mC(QA)Y zwtg3~PT!A9T4mx(7HVZeLC&goQyYcqf zdTfySRQaT1KnBeRz~;AD%$L!ng}+@#Qpu!&hfkU~nmA2sT+P?+1lR;F9E@WkqV!os%93w+3*{NHB>sD5z`tJRzSt& zUl!L`?*)6u?p2@WrcA}CGp%O#c}vY6qUmtwkQxMfh*nLMi29w4YYt*BR+9+S$b|h& z``V0*xu36FLD-|d=U@FnN+EG&gj}#U(uyPEtscbmgJmfZhBHIpl;~X5nUoTBZCjN6 zW*;>P=Qe?-kf%ojS^aQnR?J!(a(381q#D3MU|30a=jQL?YO4p|411E8VK6|(X<$?b z%7?Ej>6NL{L@q>H0QKWkJc5{J?C05Em+kCgMYXU zNMZA*Wqo<_G8m9m9&mXJOodDXu1p%Ss$w^U z?VF{SJrU+3CyK;nVX5{$icF8F9_N(S5vh@>w@klxR*WIaE0;X)>qz<{qz~^hj347B zCV@b1p?qE{AJ7#*U$v~F5{V=%*4pmo;0EA1PyhRvA&4mm4lDh@>JOr{S3s>6YHT@* zlo&>!Z=eqRrN0|OwCU0~YIPwC#m!?9&T3U@+@1Bwo_dAI{`hIznvN^=r8C>JJQrBL z%OCJ*Hf5md;DUS{AV8P+0nvqT_vQ=I!CyZg3ukW?AG)F@xEwfL1BX)w#cFGgt`q`* zR?sJn(5%ZE3Dv5Qa8iyWx2ECUUG8RkeB}}|xQ`k*jH{C>d#^vGeXz+0@ks%e`PH7x z8-8#_7WD}k`|UblF2L#X$IJnd8s+;M=exjnKMIvbv@t5vo4LQc zxEcpB-tH3DygN4DNqWRnXz=d?d5KaSm(;_+ehDiVzs}gOGl^xk!}Rs^W)(kOi9gqp-Gpsw2@hU=eW368 zIRb=3`zsD(YjyIVPOB+zE(;fUPxCn}`6O6Gvb(ab98Uby!8>;@4@>LF z3yjEq6cM%V7<5mFFQ($YftN*V26G)-R|y=sr0AF!F8VcTC$euIotjcLilj;&ifm~c zg|ET&Ees{}Dg?vcR0=Em5GuMEU2WzE<@Q}NxIol-11Mj8id%KizrYk@pZCwYb^F-M zz5xz@e7mlQxSd|6=k;|fUakMWS8xJk9f^>Q`hFh5GIega29uYW9efH4E=I~}x z%+EGm`{x`3kF;=JC~GfQgS6DP19N+^Q%;no#Yr$@C-P|6O6=$0U~_JQu6mxRc2C0X zb6sz9Zw$*pewnmRwG`Szjgi&}3qv}F!EVjB_RO#UHc<_bjeIUK&4gGL*BSjxZ}33m zzo?3zLbXkMaX^|Z+BYrji(W3($Hfbc1Q3{^V%_DgE8~W;Qr=EQT%27UXGXK(2qe08 zc(0(ERAUpnlyz^_YH%6*B_A$auJldg)FHO?!1aF*xWuT{@gS}diHZcW&gCd|+hxU`yHydT$`Wt;HDYwS*Y@LhX4z)Gi9Pg)<71 zEaTD=;cVET7XSSgjfl2VOQ&|q713k%(1HF^%MxvLKmb0ls@i>NY&x)pc@Ilc{_+~chsR2T;%pjKB(9@)9m$huWdSO@y#6Fb-* zM=D~Y*#hbJnogN|nRICAoc<1i!DTh44Su^^bfoaQYnNE6h^b#I210CkfGb)|h91_zV1Wq_3C#gYix*nU zlUnt|RK-b8vb~pd__Q02mo7I&IoFI}$x~_@^+4SF3bv1xN}ou{gT3@leDj40fpe zCnVvQ6B_>jkzf$e!mdY0Pdxg!@$~;7yOJYDv&SKBmM(5Be6;hU^|_>F@{Q%~0{lgf zT#a0KAoQ)_B31L1=2e#1=g}7~$u#5=mRko)+FU^tiVo3s{v)a`_43Lh3!?h1i}46v zm?s0y4{jTbWC8lqx~DJM?lKe8Uj*dGwig-f#g(4FKUy%f8I58_PKr~>9#Tt;MP62W zKMd{)DFd(&{Ez}F7h?{Ryt`p}1IwR}yNI~LmjuL@B}%~cKxo~z+D$!233hkD5`~-n zPK9}-ol!ufo_rQloaj!@(#rwyEw)Xr^oTLju(hhi%cEVTfj4u~L%MS>sGMjp67kL> z#(woJKTe^@y`8L~%xgj8Glr22Bs85jkW@0GP_kuLKd^nlifvjsHt(ZC^w2R_MDT|2 zhTeCx%1emERY%PJTK`lqBenGOAa>rCgv}o*lHa73S;f+3?LL?4e~u8$@EAQpfL34m zSZMK5#y@~5w>X%rwt1II&8n_pyClOgpb(|oiX@}Q0rf{_+!)2Y_QhtHJGnFSRhDwj zhNVx|497x{1(^UV*@dhb2@~P04vuV(S0$|PE}2+&5+R(dXGuA=pVhG_YaUn$W4Ff= z^+OR72|B}7Ft+cl2HWED2aU~$`2jR12W&ntaA{8c2DOCcuK7(zJDn6bcYDr3C2`fH ztQw9aK^h>d4!`pBX2|rYY5qp7M~`mXJJ~hPkR0L5Jj`Ti8V(4gu3RP$ z7DL*&);#<9f1(ZSWed`>ySa!6&h~d6O;+cz6dkqILAnS?M^ssOhXYby8(KGMcHY;u z!>dg-8=3rxBsj%dss0m5z|*AO6;6)LG!noS8hCQyQ`&b#+@;Icb`ffDou4V8{q<5c z5g$C5uXJ5v+$mimznX*i=2B2hJBfI8YUZB&nt_4A6ovZ1h154hNg0A?SoT-u+JAmk zkdjOTL0IYl*dC;M&0P3iDp-k;@@B|G0N0YGIlR@Qo}<1{JA$@tTqGrtYGrTz;6%tE znctff>7Z<76nRTeMAIb zplk~{b=4DJlK^l9;8|Ed{CE8;i!*48*6rS|a4R5^Tg4{6g0H-~-=ZF;5k#wLftY(& znx0<$#H1jLj5ZSi)UJ4TY%zE}_GFI=>c-lYXR#>nr8X!NLy7QpsUU3IAV!GWxmDl# zs&yJCt1Y_KnRRV|3u|uU5l%iH}u9>U>0q% z9i4Wh9NTeLn zt&p1D*P}BgpQwci9G_*wt?DTGGe_X6v>^lEZ;A9&>xnf@DVn!$oJ_7 z@29s!Km^PC()4cDx%P8dhWOWYbh#m-pD`SrtcxrLKHOhG{%&VQ2(o8n9_s)QJgljR zalG1gkCKK8!n#gh=;n^$;=pw`Z+Y^rD0#XEVw``lVEBjN{FNLGo%dmEOW&Un`tVnY z%+{&ufO%IIh!FVb2lAPJ8}E7kC;VJatQy(b_>kkvC#(Pf1JhcOH|>St0(J4=8*cqt zJ%p6qT$v4SU3uKc!N(?YZ^`NY7>YNn4NLP}NPqFvO#oH#(X8!`OpSZI^F+F&h8Ze2 zMTStAc$q5=InJI3x~L)ZE1lnoA!-A*H)wEG{dD#$oNd1hTl!=7UzPJ15Ae0R$-4hanAo`+9G%6&CfO=KLM^n&4+Q6_$3O*tOL^u#^<_+w(w)z04PI z*s2i2&mrl2x81kgOYVrZedj_Gico&@o36M(Nc*5Q`{N979+`hhTX>Kl)4no7tekEM z)HYasaoShAqxx;@4_Hs?D$ssE)N$1Z?Vi_|?uk@p_DVRMet$PX>*2Vw_;()9Xub7> zwL~Mi%vpF~G6wGOHK$!`zYbIr3Sv9Yjq3dp@bAfgg+L9a_&IgCHS|fOx zUcjKu91jhNZnec0&iyb;FXNau%Xv{(>qougvv{xDYLllM zARD0ix+a$U*Noa>?{KuMP;2lcHXFRU=$;KsG%Akl4&sj7*?2|emVWhmb7seyo=ph=8?=BQ_e6HMo*=6nAI06*vq`zqUO>3zpOK3Kj-7lA>v% zp<0W1XbV*s3?ahiLV@6VK(T6$EqLzLa+AdY-G&lgCNT{c!HoPg%qq@+I?Xq{f$^dYa=p zZYioKHT6xlzlnb^GNB{!OeUrHcjKvSNf58piyVX+2qIdnO+;^39amwCX0w+wP1Xz( z>^FU9XE+{Kw^@qyK)pol(i9U?5=sz@aKy>JwxRd~hiyc=_Xav<9WnM^MLBe^lhquE zHewpd7`Rs*$^HO>NWLlm5xF!kPRWG}V0c4b)SL`6L4AV8ra9eh^S}P#+a3yym{&VIxD6=E*EFE zyo=;!_>#=c%gVdOG6ckDJGU2wgTSToC@-;+t-x~u;kBUyNt?BY=8@GoBOMPt^~BZy zt-&?nF-Ya>U)}47-a@U)YVm@s53S7$$nYf!g+ZZY^WMpDUTB;4aaL$eP%Rx23g2cU z;%WtPJNEhL+Hk|0EtOH}{Xrs-;Br>&vK%p&mU3BZDF!=>vgc|-ile6Pbf(yNByWKv zUUUED*?Wq#z*H=SvPC}l;jEP$MVw1|sv;uO@lwAWc`8tbz|*t(#+N}o0uGb~2Rw?L zUz~C`6A!Z_(!04}3|{E-vlkA%tvdwakoI)4Wq&dpwdA|9CDFKKiKINjvD=>^jRBz)Bg z-z*BJNKDGALC7yWMZkaF;Ms=XwR((Fb^w;TcSLaRm3Ncmdja-eL*E*%`{WA%AbbeT zT{5YrHRs2|%PMO>>}afXC*Q%~b|%+=9U6^=_4mCA8{b^k=`KR2y+JN1o+*jT{Mzla zQ#3SGe69GQVLm@1Bqyu%s8{V%`&5%Is8_XqPK5!5p+bg0zwrrD0GeY% z*jGZ1Ob0G@_7H>74>&IdJ=wLTJr9KBJ-wsOHPE|8>|Y?+><(rdOv1{Nj(1RSFThe5 zvJ0_9DaOL@r{bdY4_(51C$c=oc$q(0#{s)Qk%=>_JU>c3`sdC5+w1==dHioJdHnh9 z`hJ!F((v+&{7PM7{PG-OXtrWq^2|)A5r7FCpWp;z(Wogk9_jns#mGsT*WzxjF^6Cw z?~H0%Rtso-#PcNnpTCe;wor3w#P#sJ=F75q`GvVr`y!bTXu9ppB9c@<9*1@vhy95* zXLuMtf7`{|Pv5(kT5r$+!g9!Yd9(1F^&2q6Vx13d%zi9MU%3yGI z8Fv}c-`72^5D6e9@^ij|!elRgR+|3p^S30fHl0YR8Im5y;q83gqn|(xoO9^=j1#i+ zcw_DT-mL;gY}4s;upqiC=>#Y63bMgy1Ng#tFI>Qk2R5xd7#G>y8AHY2D(bB|cPKt5 zPSYD2_~i)i>wn(UzrSjm1-dROPxxK^&XaRc-?dP3_0Zg-i$`?%)!)y2fG@uFgV%UR zepkE6F~`5q(!Q9VzQso+>Yux#x!=#NnQ7%&|Gniu_Kv!^f}N~4IRb1){~rN~P;;Ne z1hT2H!%X;Vd^;sRFyukY;<{Ln-?W^iep}ffp_AVXoy^j?_ z3bLfulyti1M#MWDZq_?S9IOl5OfF-7fPC~4P=yPTuR8erddc)dO{U4}3@10Vj;#8_ za0uu{Uq}*2RhMptOxL1G>@$oE?hLks(Dw1Zfm3IIwo8Pn !!OSj~P(uHLIot{k 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

xa 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

2Uo+bG<0QGR@jr$=F2 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 Z1P&26MBosCLj(>HI7Hw-4uRi#{~z9ZTp9oX literal 0 HcmV?d00001 diff --git a/mintlify-docs/images/spring-ai-mcp-uml-classdiagram.svg b/mintlify-docs/images/spring-ai-mcp-uml-classdiagram.svg new file mode 100644 index 0000000..f83a586 --- /dev/null +++ b/mintlify-docs/images/spring-ai-mcp-uml-classdiagram.svg @@ -0,0 +1 @@ +McpTransportMono<Void> connect(Function<Mono<JSONRPCMessage>, Mono<JSONRPCMessage>> handler)Mono<Void> sendMessage(JSONRPCMessage message)void close()Mono<Void> closeGracefully()<T> T unmarshalFrom(Object data, TypeReference<T> typeRef)McpSession<T> Mono<T> sendRequest(String method, Object requestParams, TypeReference<T> typeRef)Mono<Void> sendNotification(String method, Map<String, Object> params)Mono<Void> closeGracefully()void close()DefaultMcpSessioninterface RequestHandlerinterface NotificationHandlerMcpClientBuilder using(ClientMcpTransport transport)McpAsyncClientMono<InitializeResult> initialize()ServerCapabilities getServerCapabilities()Implementation getServerInfo()ClientCapabilities getClientCapabilities()Implementation getClientInfo()void close()Mono<Void> closeGracefully()Mono<Object> ping()Mono<Void> addRoot(Root root)Mono<Void> removeRoot(String rootUri)Mono<Void> rootsListChangedNotification()Mono<CallToolResult> callTool(CallToolRequest request)Mono<ListToolsResult> listTools()Mono<ListResourcesResult> listResources()Mono<ReadResourceResult> readResource(ReadResourceRequest request)Mono<ListResourceTemplatesResult> listResourceTemplates()Mono<Void> subscribeResource(SubscribeRequest request)Mono<Void> unsubscribeResource(UnsubscribeRequest request)Mono<ListPromptsResult> listPrompts()Mono<GetPromptResult> getPrompt(GetPromptRequest request)Mono<Void> setLoggingLevel(LoggingLevel level)McpSyncClientInitializeResult initialize()ServerCapabilities getServerCapabilities()Implementation getServerInfo()ClientCapabilities getClientCapabilities()Implementation getClientInfo()void close()boolean closeGracefully()Object ping()void addRoot(Root root)void removeRoot(String rootUri)void rootsListChangedNotification()CallToolResult callTool(CallToolRequest request)ListToolsResult listTools()ListResourcesResult listResources()ReadResourceResult readResource(ReadResourceRequest request)ListResourceTemplatesResult listResourceTemplates()void subscribeResource(SubscribeRequest request)void unsubscribeResource(UnsubscribeRequest request)ListPromptsResult listPrompts()GetPromptResult getPrompt(GetPromptRequest request)void setLoggingLevel(LoggingLevel level)McpServerBuilder using(ServerMcpTransport transport)McpAsyncServerServerCapabilities getServerCapabilities()Implementation getServerInfo()ClientCapabilities getClientCapabilities()Implementation getClientInfo()void close()Mono<Void> closeGracefully() Mono<Void> addTool(ToolRegistration toolRegistration)Mono<Void> removeTool(String toolName)Mono<Void> notifyToolsListChanged() Mono<Void> addResource(ResourceRegistration resourceHandler)Mono<Void> removeResource(String resourceUri)Mono<Void> notifyResourcesListChanged() Mono<Void> addPrompt(PromptRegistration promptRegistration)Mono<Void> removePrompt(String promptName)Mono<Void> notifyPromptsListChanged() Mono<Void> loggingNotification(LoggingMessageNotification notification) Mono<CreateMessageResult> createMessage(CreateMessageRequest request)McpSyncServerMcpAsyncServer getAsyncServer() ServerCapabilities getServerCapabilities()Implementation getServerInfo()ClientCapabilities getClientCapabilities()Implementation getClientInfo()void close()void closeGracefully() void addTool(ToolRegistration toolHandler)void removeTool(String toolName)void notifyToolsListChanged() void addResource(ResourceRegistration resourceHandler)void removeResource(String resourceUri)void notifyResourcesListChanged() void addPrompt(PromptRegistration promptRegistration)void removePrompt(String promptName)void notifyPromptsListChanged() void loggingNotification(LoggingMessageNotification notification) CreateMessageResult createMessage(CreateMessageRequest request)StdioClientTransportvoid setErrorHandler(Consumer<String> errorHandler)Sinks.Many<String> getErrorSink()ClientMcpTransportStdioServerTransportServerMcpTransportHttpServletSseServerTransportHttpClientSseClientTransportWebFluxSseClientTransportWebFluxSseServerTransportRouterFunction<?> getRouterFunction()WebMvcSseServerTransportRouterFunction<?> getRouterFunction()McpSchemaclass ErrorCodesinterface Requestinterface JSONRPCMessageinterface ResourceContentsinterface Contentinterface ServerCapabilitiesJSONRPCMessage deserializeJsonRpcMessage()McpErrorcreatescreatesdelegates tocreatescreatesusesthrows \ No newline at end of file diff --git a/mintlify-docs/mint.json b/mintlify-docs/mint.json new file mode 100644 index 0000000..eb4ddaa --- /dev/null +++ b/mintlify-docs/mint.json @@ -0,0 +1,41 @@ +{ + "$schema": "https://mintlify.com/schema.json", + "name": "Model Context Protocol Java SDK", + "logo": { + "dark": "/logo/dark.svg", + "light": "/logo/light.svg" + }, + "favicon": "/favicon.svg", + "colors": { + "primary": "#09090b", + "light": "#FAFAFA", + "dark": "#09090b" + }, + "topbarLinks": [], + "topbarCtaButton": { + "name": "GitHub", + "url": "https://github.com/modelcontextprotocol/java-sdk" + }, + "search": { + "location": "top" + }, + "navigation": [ + { + "group": "Getting Started", + "pages": [ + "docs/overview", + "docs/dependency-management" + ] + }, + { + "group": "MCP SDK Reference", + "pages": [ + "docs/mcp-overview", + "docs/mcp-client", + "docs/mcp-server", + "docs/mcp-transport", + "docs/mcp-capabilities" + ] + } + ] +} From 585f30cf339c5b54563db086c52b09e6520e6978 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Wed, 29 Jan 2025 13:40:48 +0100 Subject: [PATCH 024/426] Module and Package restructoring - mcp-transport -> mcp-spring - mcp-webflux-sse-transport -> mcp-spring-webflux - pom coordinates changed accordingly - mpc-webmvc-sse-transport -> mcp-spring-webmvc - pom coordinates changed accordingly - docs contains the mdx version of the documentation --- README.md | 8 ++--- .../docs/dependency-management.mdx | 4 +-- .../docs/mcp-capabilities.mdx | 0 {mintlify-docs => docs}/docs/mcp-client.mdx | 0 {mintlify-docs => docs}/docs/mcp-overview.mdx | 4 +-- {mintlify-docs => docs}/docs/mcp-server.mdx | 0 .../docs/mcp-transport.mdx | 4 +-- {mintlify-docs => docs}/docs/overview.mdx | 6 ++-- {mintlify-docs => docs}/favicon.svg | 0 .../images/class-diagrams.puml | 0 {mintlify-docs => docs}/images/mcp-stack.svg | 0 .../spring-ai-mcp-client-architecture.jpg | Bin .../spring-ai-mcp-server-architecture.jpg | Bin .../images/spring-ai-mcp-uml-classdiagram.svg | 0 {mintlify-docs => docs}/mint.json | 2 +- mcp-bom/pom.xml | 4 +-- .../ROOT/pages/dependency-management.adoc | 4 +-- .../main/antora/modules/ROOT/pages/mcp.adoc | 14 ++++---- .../antora/modules/ROOT/pages/overview.adoc | 12 +++---- .../mcp-spring-webflux}/README.md | 2 +- .../mcp-spring-webflux}/pom.xml | 2 +- .../transport/WebFluxSseClientTransport.java | 0 .../transport/WebFluxSseServerTransport.java | 0 .../WebFluxSseIntegrationTests.java | 0 .../client/WebFluxSseMcpAsyncClientTests.java | 2 -- .../client/WebFluxSseMcpSyncClientTests.java | 2 -- .../WebFluxSseClientTransportTests.java | 1 - .../server/WebFluxSseMcpAsyncServerTests.java | 2 -- .../server/WebFluxSseMcpSyncServerTests.java | 2 -- .../server/transport/BlockingInputStream.java | 0 .../src/test/resources/logback.xml | 0 .../mcp-spring-webmvc}/README.md | 2 +- .../mcp-spring-webmvc}/pom.xml | 2 +- .../transport/WebMvcSseServerTransport.java | 0 .../WebMvcSseAsyncServerTransportTests.java | 1 - .../server/WebMvcSseIntegrationTests.java | 2 -- .../WebMvcSseSyncServerTransportTests.java | 1 - .../src/test/resources/logback.xml | 0 .../client/AbstractMcpAsyncClientTests.java | 4 +-- .../client/AbstractMcpSyncClientTests.java | 2 -- .../server/AbstractMcpAsyncServerTests.java | 7 ++-- .../server/AbstractMcpSyncServerTests.java | 7 ++-- .../client/McpAsyncClient.java | 34 ++---------------- .../transport/StdioServerTransport.java | 3 +- .../client/AbstractMcpAsyncClientTests.java | 4 +-- .../client/AbstractMcpSyncClientTests.java | 2 -- .../McpAsyncClientResponseHandlerTests.java | 2 -- .../client/McpClientProtocolVersionTests.java | 2 -- .../client/ServletSseMcpAsyncClientTests.java | 1 - .../client/ServletSseMcpSyncClientTests.java | 1 - .../client/StdioMcpAsyncClientTests.java | 1 - .../client/StdioMcpSyncClientTests.java | 1 - .../HttpClientSseClientTransportTests.java | 1 - .../server/AbstractMcpAsyncServerTests.java | 7 ++-- .../server/AbstractMcpSyncServerTests.java | 7 ++-- .../server/McpServerProtocolVersionTests.java | 2 -- .../server/ServletSseMcpAsyncServerTests.java | 1 - .../server/ServletSseMcpSyncServerTests.java | 1 - .../server/StdioMcpAsyncServerTests.java | 1 - .../server/StdioMcpSyncServerTests.java | 1 - ...letSseServerTransportIntegrationTests.java | 1 - .../transport/StdioServerTransportTests.java | 1 - .../spec/DefaultMcpSessionTests.java | 3 -- pom.xml | 4 +-- 64 files changed, 51 insertions(+), 133 deletions(-) rename {mintlify-docs => docs}/docs/dependency-management.mdx (91%) rename {mintlify-docs => docs}/docs/mcp-capabilities.mdx (100%) rename {mintlify-docs => docs}/docs/mcp-client.mdx (100%) rename {mintlify-docs => docs}/docs/mcp-overview.mdx (97%) rename {mintlify-docs => docs}/docs/mcp-server.mdx (100%) rename {mintlify-docs => docs}/docs/mcp-transport.mdx (97%) rename {mintlify-docs => docs}/docs/overview.mdx (86%) rename {mintlify-docs => docs}/favicon.svg (100%) rename {mintlify-docs => docs}/images/class-diagrams.puml (100%) rename {mintlify-docs => docs}/images/mcp-stack.svg (100%) rename {mintlify-docs => docs}/images/spring-ai-mcp-client-architecture.jpg (100%) rename {mintlify-docs => docs}/images/spring-ai-mcp-server-architecture.jpg (100%) rename {mintlify-docs => docs}/images/spring-ai-mcp-uml-classdiagram.svg (100%) rename {mintlify-docs => docs}/mint.json (96%) rename {mcp-transport/mcp-webflux-sse-transport => mcp-spring/mcp-spring-webflux}/README.md (96%) rename {mcp-transport/mcp-webflux-sse-transport => mcp-spring/mcp-spring-webflux}/pom.xml (98%) rename {mcp-transport/mcp-webflux-sse-transport => mcp-spring/mcp-spring-webflux}/src/main/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java (100%) rename {mcp-transport/mcp-webflux-sse-transport => mcp-spring/mcp-spring-webflux}/src/main/java/io/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java (100%) rename {mcp-transport/mcp-webflux-sse-transport => mcp-spring/mcp-spring-webflux}/src/test/java/io/modelcontextprotocol/WebFluxSseIntegrationTests.java (100%) rename {mcp-transport/mcp-webflux-sse-transport => mcp-spring/mcp-spring-webflux}/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java (92%) rename {mcp-transport/mcp-webflux-sse-transport => mcp-spring/mcp-spring-webflux}/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java (92%) rename {mcp-transport/mcp-webflux-sse-transport => mcp-spring/mcp-spring-webflux}/src/test/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java (99%) rename {mcp-transport/mcp-webflux-sse-transport => mcp-spring/mcp-spring-webflux}/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java (92%) rename {mcp-transport/mcp-webflux-sse-transport => mcp-spring/mcp-spring-webflux}/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java (93%) rename {mcp-transport/mcp-webflux-sse-transport => mcp-spring/mcp-spring-webflux}/src/test/java/io/modelcontextprotocol/server/transport/BlockingInputStream.java (100%) rename {mcp-transport/mcp-webflux-sse-transport => mcp-spring/mcp-spring-webflux}/src/test/resources/logback.xml (100%) rename {mcp-transport/mcp-webmvc-sse-transport => mcp-spring/mcp-spring-webmvc}/README.md (91%) rename {mcp-transport/mcp-webmvc-sse-transport => mcp-spring/mcp-spring-webmvc}/pom.xml (98%) rename {mcp-transport/mcp-webmvc-sse-transport => mcp-spring/mcp-spring-webmvc}/src/main/java/io/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java (100%) rename {mcp-transport/mcp-webmvc-sse-transport => mcp-spring/mcp-spring-webmvc}/src/test/java/io/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java (98%) rename {mcp-transport/mcp-webmvc-sse-transport => mcp-spring/mcp-spring-webmvc}/src/test/java/io/modelcontextprotocol/server/WebMvcSseIntegrationTests.java (99%) rename {mcp-transport/mcp-webmvc-sse-transport => mcp-spring/mcp-spring-webmvc}/src/test/java/io/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java (98%) rename {mcp-transport/mcp-webmvc-sse-transport => mcp-spring/mcp-spring-webmvc}/src/test/resources/logback.xml (100%) diff --git a/README.md b/README.md index c994354..4133b9a 100644 --- a/README.md +++ b/README.md @@ -28,8 +28,8 @@ Java implementation of the Model Context Protocol specification. It includes: - Servlet-based SSE server (`HttpServletSseServerTransport`) for HTTP SSE Server streaming using traditional Servlet API #### Optional SSE Transports -- [WebFlux SSE Transport](https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-transport/mcp-webflux-sse-transport) - Reactive HTTP streaming with Spring WebFlux (Client & Server) -- [WebMvc SSE Transport](https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-transport/mcp-webmvc-sse-transport) - Spring MVC based HTTP SSE transport (Server only). +- [WebFlux SSE Transport](https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-spring/mcp-spring-webflux) - Reactive HTTP streaming with Spring WebFlux (Client & Server) +- [WebMvc SSE Transport](https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-spring/mcp-spring-webmvc) - Spring MVC based HTTP SSE transport (Server only). You can use the core `HttpClientSseClientTransport` transport as a SSE client. ### [Spring AI MCP](https://docs.spring.io/spring-ai-mcp/reference/spring-mcp.html) @@ -54,13 +54,13 @@ Add the following dependencies to your Maven project: io.modelcontextprotocol.sdk - mcp-webflux-sse-transport + mcp-spring-webflux io.modelcontextprotocol.sdk - mcp-webmvc-sse-transport + mcp-spring-webmvc ``` diff --git a/mintlify-docs/docs/dependency-management.mdx b/docs/docs/dependency-management.mdx similarity index 91% rename from mintlify-docs/docs/dependency-management.mdx rename to docs/docs/dependency-management.mdx index 204c51c..dbd69e4 100644 --- a/mintlify-docs/docs/dependency-management.mdx +++ b/docs/docs/dependency-management.mdx @@ -57,8 +57,8 @@ The following dependencies are available and managed by the BOM: ### Transport Dependencies -- `org.modelcontextprotocol.sdk:mcp-webflux-sse-transport` - WebFlux-based Server-Sent Events (SSE) transport implementation for reactive applications. -- `org.modelcontextprotocol.sdk:mcp-webmvc-sse-transport` - WebMVC-based Server-Sent Events (SSE) transport implementation for servlet-based applications. +- `org.modelcontextprotocol.sdk:mcp-spring-webflux` - WebFlux-based Server-Sent Events (SSE) transport implementation for reactive applications. +- `org.modelcontextprotocol.sdk:mcp-spring-webmvc` - WebMVC-based Server-Sent Events (SSE) transport implementation for servlet-based applications. ### Testing Dependencies diff --git a/mintlify-docs/docs/mcp-capabilities.mdx b/docs/docs/mcp-capabilities.mdx similarity index 100% rename from mintlify-docs/docs/mcp-capabilities.mdx rename to docs/docs/mcp-capabilities.mdx diff --git a/mintlify-docs/docs/mcp-client.mdx b/docs/docs/mcp-client.mdx similarity index 100% rename from mintlify-docs/docs/mcp-client.mdx rename to docs/docs/mcp-client.mdx diff --git a/mintlify-docs/docs/mcp-overview.mdx b/docs/docs/mcp-overview.mdx similarity index 97% rename from mintlify-docs/docs/mcp-overview.mdx rename to docs/docs/mcp-overview.mdx index 68329fa..18ae2b7 100644 --- a/mintlify-docs/docs/mcp-overview.mdx +++ b/docs/docs/mcp-overview.mdx @@ -72,13 +72,13 @@ For HTTP SSE transport implementations, add one of the following dependencies: org.modelcontextprotocol.sdk - mcp-webflux-sse-transport + mcp-spring-webflux org.modelcontextprotocol.sdk - mcp-webmvc-sse-transport + mcp-spring-webmvc ``` diff --git a/mintlify-docs/docs/mcp-server.mdx b/docs/docs/mcp-server.mdx similarity index 100% rename from mintlify-docs/docs/mcp-server.mdx rename to docs/docs/mcp-server.mdx diff --git a/mintlify-docs/docs/mcp-transport.mdx b/docs/docs/mcp-transport.mdx similarity index 97% rename from mintlify-docs/docs/mcp-transport.mdx rename to docs/docs/mcp-transport.mdx index e0483d6..d9fc318 100644 --- a/mintlify-docs/docs/mcp-transport.mdx +++ b/docs/docs/mcp-transport.mdx @@ -31,7 +31,7 @@ The transport layer in the MCP SDK is responsible for handling the communication <> -

Creates WebFlux-based SSE server transport.
Requires the mcp-webflux-sse-transport dependency.

+

Creates WebFlux-based SSE server transport.
Requires the mcp-spring-webflux dependency.

       
@@ -63,7 +63,7 @@ class McpConfig {
 
 
   <>
-    

Creates WebMvc-based SSE server transport.
Requires the mcp-webmvc-sse-transport dependency.

+

Creates WebMvc-based SSE server transport.
Requires the mcp-spring-webmvc dependency.

       
diff --git a/mintlify-docs/docs/overview.mdx b/docs/docs/overview.mdx
similarity index 86%
rename from mintlify-docs/docs/overview.mdx
rename to docs/docs/overview.mdx
index 6624032..28d9e3d 100644
--- a/mintlify-docs/docs/overview.mdx
+++ b/docs/docs/overview.mdx
@@ -30,8 +30,8 @@ Core implementation of the Model Context Protocol specification, providing:
 - Servlet-based SSE server (`HttpServletSseServerTransport`) for HTTP SSE Server streaming using traditional Servlet API
 
 #### Optional SSE Transports
-- [WebFlux SSE Transport](https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-transport/mcp-webflux-sse-transport) - Reactive HTTP streaming with Spring WebFlux (Client & Server)
-- [WebMvc SSE Transport](https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-transport/mcp-webmvc-sse-transport) - Spring MVC based SSE transport (Server only). 
+- [WebFlux SSE Transport](https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-spring/mcp-spring-webflux) - Reactive HTTP streaming with Spring WebFlux (Client & Server)
+- [WebMvc SSE Transport](https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-spring/mcp-spring-webmvc) - Spring MVC based SSE transport (Server only). 
 You can use the core `HttpClientSseClientTransport` transport as a SSE client.
 
 ## Getting Started
@@ -48,7 +48,7 @@ You can use the core `HttpClientSseClientTransport` transport as a SSE client.
 
 
     org.modelcontextprotocol.sdk
-    mcp-webflux-sse-transport
+    mcp-spring-webflux
 
 ```
   
diff --git a/mintlify-docs/favicon.svg b/docs/favicon.svg
similarity index 100%
rename from mintlify-docs/favicon.svg
rename to docs/favicon.svg
diff --git a/mintlify-docs/images/class-diagrams.puml b/docs/images/class-diagrams.puml
similarity index 100%
rename from mintlify-docs/images/class-diagrams.puml
rename to docs/images/class-diagrams.puml
diff --git a/mintlify-docs/images/mcp-stack.svg b/docs/images/mcp-stack.svg
similarity index 100%
rename from mintlify-docs/images/mcp-stack.svg
rename to docs/images/mcp-stack.svg
diff --git a/mintlify-docs/images/spring-ai-mcp-client-architecture.jpg b/docs/images/spring-ai-mcp-client-architecture.jpg
similarity index 100%
rename from mintlify-docs/images/spring-ai-mcp-client-architecture.jpg
rename to docs/images/spring-ai-mcp-client-architecture.jpg
diff --git a/mintlify-docs/images/spring-ai-mcp-server-architecture.jpg b/docs/images/spring-ai-mcp-server-architecture.jpg
similarity index 100%
rename from mintlify-docs/images/spring-ai-mcp-server-architecture.jpg
rename to docs/images/spring-ai-mcp-server-architecture.jpg
diff --git a/mintlify-docs/images/spring-ai-mcp-uml-classdiagram.svg b/docs/images/spring-ai-mcp-uml-classdiagram.svg
similarity index 100%
rename from mintlify-docs/images/spring-ai-mcp-uml-classdiagram.svg
rename to docs/images/spring-ai-mcp-uml-classdiagram.svg
diff --git a/mintlify-docs/mint.json b/docs/mint.json
similarity index 96%
rename from mintlify-docs/mint.json
rename to docs/mint.json
index eb4ddaa..397b8c0 100644
--- a/mintlify-docs/mint.json
+++ b/docs/mint.json
@@ -33,7 +33,7 @@
         "docs/mcp-overview",
         "docs/mcp-client",
         "docs/mcp-server",
-        "docs/mcp-transport",
+        "docs/mcp-spring",
         "docs/mcp-capabilities"
       ]
     }
diff --git a/mcp-bom/pom.xml b/mcp-bom/pom.xml
index a524793..26bfce4 100644
--- a/mcp-bom/pom.xml
+++ b/mcp-bom/pom.xml
@@ -43,14 +43,14 @@
             
             
                 io.modelcontextprotocol.sdk
-                mcp-webflux-sse-transport
+                mcp-spring-webflux
                 ${project.version}
             
 
             
             
                 io.modelcontextprotocol.sdk
-                mcp-webmvc-sse-transport
+                mcp-spring-webmvc
                 ${project.version}
             
 
diff --git a/mcp-docs/src/main/antora/modules/ROOT/pages/dependency-management.adoc b/mcp-docs/src/main/antora/modules/ROOT/pages/dependency-management.adoc
index 7fcbba5..517973c 100644
--- a/mcp-docs/src/main/antora/modules/ROOT/pages/dependency-management.adoc
+++ b/mcp-docs/src/main/antora/modules/ROOT/pages/dependency-management.adoc
@@ -57,8 +57,8 @@ The following dependencies are available and managed by the BOM:
 
 === Transport Dependencies
 
-* `io.modelcontextprotocol.sdk:mcp-webflux-sse-transport` - WebFlux-based Server-Sent Events (SSE) transport implementation for reactive applications.
-* `io.modelcontextprotocol.sdk:mcp-webmvc-sse-transport` - WebMVC-based Server-Sent Events (SSE) transport implementation for servlet-based applications.
+* `io.modelcontextprotocol.sdk:mcp-spring-webflux` - WebFlux-based Server-Sent Events (SSE) transport implementation for reactive applications.
+* `io.modelcontextprotocol.sdk:mcp-spring-webmvc` - WebMVC-based Server-Sent Events (SSE) transport implementation for servlet-based applications.
 
 === Testing Dependencies
 
diff --git a/mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc b/mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc
index 6237ed1..7a48722 100644
--- a/mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc
+++ b/mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc
@@ -47,13 +47,13 @@ For HTTP SSE transport implementations, add one of the following dependencies
 
 
     io.modelcontextprotocol.sdk
-    mcp-webflux-sse-transport
+    mcp-spring-webflux
 
 
 
 
     io.modelcontextprotocol.sdk
-    mcp-webmvc-sse-transport
+    mcp-spring-webmvc
 
 ----
 
@@ -74,10 +74,10 @@ For HTTP SSE transport implementations, add one of the following dependencies
 [source,groovy]
 ----
 // Spring WebFlux-based SSE client and server transport
-implementation 'io.modelcontextprotocol.sdk:mcp-webflux-sse-transport'
+implementation 'io.modelcontextprotocol.sdk:mcp-spring-webflux'
 
 // Spring WebMVC-based SSE server transport
-implementation 'io.modelcontextprotocol.sdk:mcp-webmvc-sse-transport'
+implementation 'io.modelcontextprotocol.sdk:mcp-spring-webmvc'
 ----
 ======
 
@@ -267,7 +267,7 @@ McpTransport transport = new HttpClientSseClientTransport("http://your-mcp-serve
 SSE (WebFlux)::
 +
 Creates WebFlux-based SSE client transport.
-Requires the `mcp-webflux-sse-transport` dependency.
+Requires the `mcp-spring-webflux` dependency.
 +
 [source,java]
 ----
@@ -464,7 +464,7 @@ Provides bidirectional JSON-RPC message handling over standard input/output stre
 SSE (WebFlux)::
 +
 Creates WebFlux-based SSE server transport.
-Requires the `mcp-webflux-sse-transport` dependency.
+Requires the `mcp-spring-webflux` dependency.
 +
 [source,java]
 ----
@@ -492,7 +492,7 @@ Implements the MCP HTTP with SSE transport specification, providing:
 SSE (WebMvc)::
 +
 Creates WebMvc-based SSE server transport.
-Requires the `mcp-webmvc-sse-transport` dependency.
+Requires the `mcp-spring-webmvc` dependency.
 +
 [source,java]
 ----
diff --git a/mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc b/mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc
index e3ec80b..9dc040b 100644
--- a/mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc
+++ b/mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc
@@ -25,8 +25,8 @@ Core implementation of the Model Context Protocol specification, providing:
 ** Servlet-based SSE server (`HttpServletSseServerTransport`) for HTTP SSE Server streaming using traditional Servlet API
 
 * *Optional SSE Transports*
-** link:https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-transport/mcp-webflux-sse-transport[WebFlux SSE Transport] - Reactive HTTP streaming with Spring WebFlux (Client & Server)
-** link:https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-transport/mcp-webmvc-sse-transport[WebMvc SSE Transport] - Spring MVC based SSE transport (Server only). 
+** link:https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-spring/mcp-spring-webflux[WebFlux SSE Transport] - Reactive HTTP streaming with Spring WebFlux (Client & Server)
+** link:https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-spring/mcp-spring-webmvc[WebMvc SSE Transport] - Spring MVC based SSE transport (Server only). 
 You can use the core `HttpClientSseClientTransport` transport as a SSE client.
 
 == Getting Started
@@ -46,13 +46,13 @@ Maven::
 
 
     io.modelcontextprotocol.sdk
-    mcp-webflux-sse-transport
+    mcp-spring-webflux
 
 
 
 
     io.modelcontextprotocol.sdk
-    mcp-webmvc-sse-transport
+    mcp-spring-webmvc
 
 
 ----
@@ -79,8 +79,8 @@ Gradle::
 ----
 dependencies {
     implementation 'io.modelcontextprotocol.sdk:mcp'                     // Core
-    implementation 'io.modelcontextprotocol.sdk:mcp-webflux-sse-transport'  // Optional
-    implementation 'io.modelcontextprotocol.sdk:mcp-webmvc-sse-transport'   // Optional
+    implementation 'io.modelcontextprotocol.sdk:mcp-spring-webflux'  // Optional
+    implementation 'io.modelcontextprotocol.sdk:mcp-spring-webmvc'   // Optional
 }
 
 repositories {
diff --git a/mcp-transport/mcp-webflux-sse-transport/README.md b/mcp-spring/mcp-spring-webflux/README.md
similarity index 96%
rename from mcp-transport/mcp-webflux-sse-transport/README.md
rename to mcp-spring/mcp-spring-webflux/README.md
index 475882b..e701e41 100644
--- a/mcp-transport/mcp-webflux-sse-transport/README.md
+++ b/mcp-spring/mcp-spring-webflux/README.md
@@ -3,7 +3,7 @@
 ```xml
 
     io.modelcontextprotocol.sdk
-    mcp-webflux-sse-transport
+    mcp-spring-webflux
 
 ```
 
diff --git a/mcp-transport/mcp-webflux-sse-transport/pom.xml b/mcp-spring/mcp-spring-webflux/pom.xml
similarity index 98%
rename from mcp-transport/mcp-webflux-sse-transport/pom.xml
rename to mcp-spring/mcp-spring-webflux/pom.xml
index d737a38..ec93eea 100644
--- a/mcp-transport/mcp-webflux-sse-transport/pom.xml
+++ b/mcp-spring/mcp-spring-webflux/pom.xml
@@ -9,7 +9,7 @@
 		0.7.0-SNAPSHOT
 		../../pom.xml
 	
-	mcp-webflux-sse-transport
+	mcp-spring-webflux
 	jar
 	WebFlux implementation of the Java MCP SSE transport
 	
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/main/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java b/mcp-spring/mcp-spring-webflux/src/main/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java
similarity index 100%
rename from mcp-transport/mcp-webflux-sse-transport/src/main/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java
rename to mcp-spring/mcp-spring-webflux/src/main/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/main/java/io/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java b/mcp-spring/mcp-spring-webflux/src/main/java/io/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java
similarity index 100%
rename from mcp-transport/mcp-webflux-sse-transport/src/main/java/io/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java
rename to mcp-spring/mcp-spring-webflux/src/main/java/io/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/WebFluxSseIntegrationTests.java b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/WebFluxSseIntegrationTests.java
similarity index 100%
rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/WebFluxSseIntegrationTests.java
rename to mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/WebFluxSseIntegrationTests.java
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java
similarity index 92%
rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java
rename to mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java
index 79a9db8..021ce46 100644
--- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java
+++ b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java
@@ -4,8 +4,6 @@
 
 package io.modelcontextprotocol.client;
 
-import io.modelcontextprotocol.client.AbstractMcpAsyncClientTests;
-import io.modelcontextprotocol.client.McpAsyncClient;
 import io.modelcontextprotocol.client.transport.WebFluxSseClientTransport;
 import io.modelcontextprotocol.spec.ClientMcpTransport;
 import org.junit.jupiter.api.Timeout;
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java
similarity index 92%
rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java
rename to mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java
index 16108c6..20eeb1d 100644
--- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java
+++ b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java
@@ -4,8 +4,6 @@
 
 package io.modelcontextprotocol.client;
 
-import io.modelcontextprotocol.client.AbstractMcpSyncClientTests;
-import io.modelcontextprotocol.client.McpSyncClient;
 import io.modelcontextprotocol.client.transport.WebFluxSseClientTransport;
 import io.modelcontextprotocol.spec.ClientMcpTransport;
 import org.junit.jupiter.api.Timeout;
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java
similarity index 99%
rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java
rename to mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java
index a09700d..912e04f 100644
--- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java
+++ b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java
@@ -10,7 +10,6 @@ import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import io.modelcontextprotocol.client.transport.WebFluxSseClientTransport;
 import io.modelcontextprotocol.spec.McpSchema;
 import io.modelcontextprotocol.spec.McpSchema.JSONRPCRequest;
 import org.junit.jupiter.api.AfterEach;
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java
similarity index 92%
rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java
rename to mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java
index b26afd6..1ed0d99 100644
--- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java
+++ b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java
@@ -5,8 +5,6 @@
 package io.modelcontextprotocol.server;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import io.modelcontextprotocol.server.AbstractMcpAsyncServerTests;
-import io.modelcontextprotocol.server.McpAsyncServer;
 import io.modelcontextprotocol.server.transport.WebFluxSseServerTransport;
 import io.modelcontextprotocol.spec.ServerMcpTransport;
 import org.junit.jupiter.api.Timeout;
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java
similarity index 93%
rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java
rename to mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java
index 0ad5c73..4db00dd 100644
--- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java
+++ b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java
@@ -5,8 +5,6 @@
 package io.modelcontextprotocol.server;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import io.modelcontextprotocol.server.AbstractMcpSyncServerTests;
-import io.modelcontextprotocol.server.McpSyncServer;
 import io.modelcontextprotocol.server.transport.WebFluxSseServerTransport;
 import io.modelcontextprotocol.spec.ServerMcpTransport;
 import org.junit.jupiter.api.Timeout;
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/transport/BlockingInputStream.java b/mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/server/transport/BlockingInputStream.java
similarity index 100%
rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/io/modelcontextprotocol/server/transport/BlockingInputStream.java
rename to mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/server/transport/BlockingInputStream.java
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/resources/logback.xml b/mcp-spring/mcp-spring-webflux/src/test/resources/logback.xml
similarity index 100%
rename from mcp-transport/mcp-webflux-sse-transport/src/test/resources/logback.xml
rename to mcp-spring/mcp-spring-webflux/src/test/resources/logback.xml
diff --git a/mcp-transport/mcp-webmvc-sse-transport/README.md b/mcp-spring/mcp-spring-webmvc/README.md
similarity index 91%
rename from mcp-transport/mcp-webmvc-sse-transport/README.md
rename to mcp-spring/mcp-spring-webmvc/README.md
index 1e63e47..9adf5b2 100644
--- a/mcp-transport/mcp-webmvc-sse-transport/README.md
+++ b/mcp-spring/mcp-spring-webmvc/README.md
@@ -3,7 +3,7 @@
 ```xml
 
     io.modelcontextprotocol.sdk
-    mcp-webmvc-sse-transport
+    mcp-spring-webmvc
 
 ```
 
diff --git a/mcp-transport/mcp-webmvc-sse-transport/pom.xml b/mcp-spring/mcp-spring-webmvc/pom.xml
similarity index 98%
rename from mcp-transport/mcp-webmvc-sse-transport/pom.xml
rename to mcp-spring/mcp-spring-webmvc/pom.xml
index 4e3e910..fa5766a 100644
--- a/mcp-transport/mcp-webmvc-sse-transport/pom.xml
+++ b/mcp-spring/mcp-spring-webmvc/pom.xml
@@ -9,7 +9,7 @@
 		0.7.0-SNAPSHOT
 		../../pom.xml
 	
-	mcp-webmvc-sse-transport
+	mcp-spring-webmvc
 	jar
 	Spring Web MVC implementation of the Java MCP SSE transport
 	
diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/main/java/io/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java b/mcp-spring/mcp-spring-webmvc/src/main/java/io/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java
similarity index 100%
rename from mcp-transport/mcp-webmvc-sse-transport/src/main/java/io/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java
rename to mcp-spring/mcp-spring-webmvc/src/main/java/io/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java
diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java b/mcp-spring/mcp-spring-webmvc/src/test/java/io/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java
similarity index 98%
rename from mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java
rename to mcp-spring/mcp-spring-webmvc/src/test/java/io/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java
index d00c17e..a819920 100644
--- a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java
+++ b/mcp-spring/mcp-spring-webmvc/src/test/java/io/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java
@@ -5,7 +5,6 @@
 package io.modelcontextprotocol.server;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import io.modelcontextprotocol.server.AbstractMcpAsyncServerTests;
 import io.modelcontextprotocol.server.transport.WebMvcSseServerTransport;
 import io.modelcontextprotocol.spec.ServerMcpTransport;
 import org.apache.catalina.Context;
diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseIntegrationTests.java b/mcp-spring/mcp-spring-webmvc/src/test/java/io/modelcontextprotocol/server/WebMvcSseIntegrationTests.java
similarity index 99%
rename from mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseIntegrationTests.java
rename to mcp-spring/mcp-spring-webmvc/src/test/java/io/modelcontextprotocol/server/WebMvcSseIntegrationTests.java
index 6600ab4..62f6963 100644
--- a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseIntegrationTests.java
+++ b/mcp-spring/mcp-spring-webmvc/src/test/java/io/modelcontextprotocol/server/WebMvcSseIntegrationTests.java
@@ -12,8 +12,6 @@ import java.util.function.Function;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import io.modelcontextprotocol.client.McpClient;
 import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
-import io.modelcontextprotocol.server.McpServer;
-import io.modelcontextprotocol.server.McpServerFeatures;
 import io.modelcontextprotocol.server.transport.WebMvcSseServerTransport;
 import io.modelcontextprotocol.spec.McpError;
 import io.modelcontextprotocol.spec.McpSchema;
diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java b/mcp-spring/mcp-spring-webmvc/src/test/java/io/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java
similarity index 98%
rename from mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java
rename to mcp-spring/mcp-spring-webmvc/src/test/java/io/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java
index 7539790..249b4de 100644
--- a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/io/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java
+++ b/mcp-spring/mcp-spring-webmvc/src/test/java/io/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java
@@ -5,7 +5,6 @@
 package io.modelcontextprotocol.server;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import io.modelcontextprotocol.server.AbstractMcpSyncServerTests;
 import io.modelcontextprotocol.server.transport.WebMvcSseServerTransport;
 import io.modelcontextprotocol.spec.ServerMcpTransport;
 import org.apache.catalina.Context;
diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/resources/logback.xml b/mcp-spring/mcp-spring-webmvc/src/test/resources/logback.xml
similarity index 100%
rename from mcp-transport/mcp-webmvc-sse-transport/src/test/resources/logback.xml
rename to mcp-spring/mcp-spring-webmvc/src/test/resources/logback.xml
diff --git a/mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java b/mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java
index affbc4d..a904a87 100644
--- a/mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java
+++ b/mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java
@@ -9,11 +9,8 @@ import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.Function;
 
-import io.modelcontextprotocol.client.McpAsyncClient;
-import io.modelcontextprotocol.client.McpClient;
 import io.modelcontextprotocol.spec.ClientMcpTransport;
 import io.modelcontextprotocol.spec.McpSchema;
-import io.modelcontextprotocol.spec.McpTransport;
 import io.modelcontextprotocol.spec.McpSchema.CallToolRequest;
 import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
 import io.modelcontextprotocol.spec.McpSchema.CreateMessageRequest;
@@ -25,6 +22,7 @@ import io.modelcontextprotocol.spec.McpSchema.Root;
 import io.modelcontextprotocol.spec.McpSchema.SubscribeRequest;
 import io.modelcontextprotocol.spec.McpSchema.Tool;
 import io.modelcontextprotocol.spec.McpSchema.UnsubscribeRequest;
+import io.modelcontextprotocol.spec.McpTransport;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
diff --git a/mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpSyncClientTests.java b/mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpSyncClientTests.java
index df08498..b1c58a6 100644
--- a/mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpSyncClientTests.java
+++ b/mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpSyncClientTests.java
@@ -8,8 +8,6 @@ import java.time.Duration;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import io.modelcontextprotocol.client.McpClient;
-import io.modelcontextprotocol.client.McpSyncClient;
 import io.modelcontextprotocol.spec.ClientMcpTransport;
 import io.modelcontextprotocol.spec.McpSchema;
 import io.modelcontextprotocol.spec.McpSchema.CallToolRequest;
diff --git a/mcp-test/src/main/java/io/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java b/mcp-test/src/main/java/io/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java
index 730f367..ca5783d 100644
--- a/mcp-test/src/main/java/io/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java
+++ b/mcp-test/src/main/java/io/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java
@@ -7,13 +7,8 @@ package io.modelcontextprotocol.server;
 import java.time.Duration;
 import java.util.List;
 
-import io.modelcontextprotocol.server.McpAsyncServer;
-import io.modelcontextprotocol.server.McpServer;
-import io.modelcontextprotocol.server.McpServerFeatures;
 import io.modelcontextprotocol.spec.McpError;
 import io.modelcontextprotocol.spec.McpSchema;
-import io.modelcontextprotocol.spec.McpTransport;
-import io.modelcontextprotocol.spec.ServerMcpTransport;
 import io.modelcontextprotocol.spec.McpSchema.CallToolResult;
 import io.modelcontextprotocol.spec.McpSchema.GetPromptResult;
 import io.modelcontextprotocol.spec.McpSchema.Prompt;
@@ -22,6 +17,8 @@ import io.modelcontextprotocol.spec.McpSchema.ReadResourceResult;
 import io.modelcontextprotocol.spec.McpSchema.Resource;
 import io.modelcontextprotocol.spec.McpSchema.ServerCapabilities;
 import io.modelcontextprotocol.spec.McpSchema.Tool;
+import io.modelcontextprotocol.spec.McpTransport;
+import io.modelcontextprotocol.spec.ServerMcpTransport;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/mcp-test/src/main/java/io/modelcontextprotocol/server/AbstractMcpSyncServerTests.java b/mcp-test/src/main/java/io/modelcontextprotocol/server/AbstractMcpSyncServerTests.java
index 9c44a82..f8b9575 100644
--- a/mcp-test/src/main/java/io/modelcontextprotocol/server/AbstractMcpSyncServerTests.java
+++ b/mcp-test/src/main/java/io/modelcontextprotocol/server/AbstractMcpSyncServerTests.java
@@ -6,13 +6,8 @@ package io.modelcontextprotocol.server;
 
 import java.util.List;
 
-import io.modelcontextprotocol.server.McpServer;
-import io.modelcontextprotocol.server.McpServerFeatures;
-import io.modelcontextprotocol.server.McpSyncServer;
 import io.modelcontextprotocol.spec.McpError;
 import io.modelcontextprotocol.spec.McpSchema;
-import io.modelcontextprotocol.spec.McpTransport;
-import io.modelcontextprotocol.spec.ServerMcpTransport;
 import io.modelcontextprotocol.spec.McpSchema.CallToolResult;
 import io.modelcontextprotocol.spec.McpSchema.GetPromptResult;
 import io.modelcontextprotocol.spec.McpSchema.Prompt;
@@ -21,6 +16,8 @@ import io.modelcontextprotocol.spec.McpSchema.ReadResourceResult;
 import io.modelcontextprotocol.spec.McpSchema.Resource;
 import io.modelcontextprotocol.spec.McpSchema.ServerCapabilities;
 import io.modelcontextprotocol.spec.McpSchema.Tool;
+import io.modelcontextprotocol.spec.McpTransport;
+import io.modelcontextprotocol.spec.ServerMcpTransport;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/mcp/src/main/java/io/modelcontextprotocol/client/McpAsyncClient.java b/mcp/src/main/java/io/modelcontextprotocol/client/McpAsyncClient.java
index 9a0933e..31d3175 100644
--- a/mcp/src/main/java/io/modelcontextprotocol/client/McpAsyncClient.java
+++ b/mcp/src/main/java/io/modelcontextprotocol/client/McpAsyncClient.java
@@ -9,17 +9,15 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.Consumer;
 import java.util.function.Function;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import io.modelcontextprotocol.spec.ClientMcpTransport;
 import io.modelcontextprotocol.spec.DefaultMcpSession;
-import io.modelcontextprotocol.spec.McpError;
-import io.modelcontextprotocol.spec.McpSchema;
-import io.modelcontextprotocol.spec.McpTransport;
 import io.modelcontextprotocol.spec.DefaultMcpSession.NotificationHandler;
 import io.modelcontextprotocol.spec.DefaultMcpSession.RequestHandler;
+import io.modelcontextprotocol.spec.McpError;
+import io.modelcontextprotocol.spec.McpSchema;
 import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
 import io.modelcontextprotocol.spec.McpSchema.CreateMessageRequest;
 import io.modelcontextprotocol.spec.McpSchema.CreateMessageResult;
@@ -30,13 +28,13 @@ import io.modelcontextprotocol.spec.McpSchema.LoggingLevel;
 import io.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification;
 import io.modelcontextprotocol.spec.McpSchema.PaginatedRequest;
 import io.modelcontextprotocol.spec.McpSchema.Root;
+import io.modelcontextprotocol.spec.McpTransport;
 import io.modelcontextprotocol.util.Assert;
 import io.modelcontextprotocol.util.Utils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
-import reactor.core.scheduler.Schedulers;
 
 /**
  * The Model Context Protocol (MCP) client implementation that provides asynchronous
@@ -686,32 +684,6 @@ public class McpAsyncClient {
 	// --------------------------
 	// Logging
 	// --------------------------
-	/**
-	 * Create a notification handler for logging notifications from the server. This
-	 * handler automatically distributes logging messages to all registered consumers.
-	 * @param loggingConsumers List of consumers that will be notified when a logging
-	 * message is received. Each consumer receives the logging message notification.
-	 * @return A NotificationHandler that processes log notifications by distributing the
-	 * message to all registered consumers
-	 */
-	private NotificationHandler loggingNotificationHandler(
-			List> loggingConsumers) {
-
-		return params -> {
-
-			McpSchema.LoggingMessageNotification loggingMessageNotification = transport.unmarshalFrom(params,
-					new TypeReference() {
-					});
-
-			return Mono.fromRunnable(() -> {
-				for (Consumer loggingConsumer : loggingConsumers) {
-					loggingConsumer.accept(loggingMessageNotification);
-				}
-			}).subscribeOn(Schedulers.boundedElastic()).then();
-
-		};
-	}
-
 	/**
 	 * Create a notification handler for logging notifications from the server. This
 	 * handler automatically distributes logging messages to all registered consumers.
diff --git a/mcp/src/main/java/io/modelcontextprotocol/server/transport/StdioServerTransport.java b/mcp/src/main/java/io/modelcontextprotocol/server/transport/StdioServerTransport.java
index 506e387..818aa28 100644
--- a/mcp/src/main/java/io/modelcontextprotocol/server/transport/StdioServerTransport.java
+++ b/mcp/src/main/java/io/modelcontextprotocol/server/transport/StdioServerTransport.java
@@ -10,15 +10,14 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.nio.charset.StandardCharsets;
-import java.time.Duration;
 import java.util.concurrent.Executors;
 import java.util.function.Function;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import io.modelcontextprotocol.spec.McpSchema;
-import io.modelcontextprotocol.spec.ServerMcpTransport;
 import io.modelcontextprotocol.spec.McpSchema.JSONRPCMessage;
+import io.modelcontextprotocol.spec.ServerMcpTransport;
 import io.modelcontextprotocol.util.Assert;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java
index ea61844..974f9c3 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java
@@ -9,11 +9,8 @@ import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.Function;
 
-import io.modelcontextprotocol.client.McpAsyncClient;
-import io.modelcontextprotocol.client.McpClient;
 import io.modelcontextprotocol.spec.ClientMcpTransport;
 import io.modelcontextprotocol.spec.McpSchema;
-import io.modelcontextprotocol.spec.McpTransport;
 import io.modelcontextprotocol.spec.McpSchema.CallToolRequest;
 import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
 import io.modelcontextprotocol.spec.McpSchema.CreateMessageRequest;
@@ -25,6 +22,7 @@ import io.modelcontextprotocol.spec.McpSchema.Root;
 import io.modelcontextprotocol.spec.McpSchema.SubscribeRequest;
 import io.modelcontextprotocol.spec.McpSchema.Tool;
 import io.modelcontextprotocol.spec.McpSchema.UnsubscribeRequest;
+import io.modelcontextprotocol.spec.McpTransport;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpSyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpSyncClientTests.java
index 6a630c4..0750ccd 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpSyncClientTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/client/AbstractMcpSyncClientTests.java
@@ -8,8 +8,6 @@ import java.time.Duration;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import io.modelcontextprotocol.client.McpClient;
-import io.modelcontextprotocol.client.McpSyncClient;
 import io.modelcontextprotocol.spec.ClientMcpTransport;
 import io.modelcontextprotocol.spec.McpSchema;
 import io.modelcontextprotocol.spec.McpSchema.CallToolRequest;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java
index a58df5e..d11fa0f 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java
@@ -14,8 +14,6 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import io.modelcontextprotocol.MockMcpTransport;
-import io.modelcontextprotocol.client.McpAsyncClient;
-import io.modelcontextprotocol.client.McpClient;
 import io.modelcontextprotocol.spec.McpError;
 import io.modelcontextprotocol.spec.McpSchema;
 import io.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/McpClientProtocolVersionTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/McpClientProtocolVersionTests.java
index 317f571..58e486e 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/client/McpClientProtocolVersionTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/client/McpClientProtocolVersionTests.java
@@ -8,8 +8,6 @@ import java.time.Duration;
 import java.util.List;
 
 import io.modelcontextprotocol.MockMcpTransport;
-import io.modelcontextprotocol.client.McpAsyncClient;
-import io.modelcontextprotocol.client.McpClient;
 import io.modelcontextprotocol.spec.McpError;
 import io.modelcontextprotocol.spec.McpSchema;
 import io.modelcontextprotocol.spec.McpSchema.InitializeResult;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java
index d96dc7f..56ac8f5 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java
@@ -4,7 +4,6 @@
 
 package io.modelcontextprotocol.client;
 
-import io.modelcontextprotocol.client.McpSyncClient;
 import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
 import io.modelcontextprotocol.spec.ClientMcpTransport;
 import org.junit.jupiter.api.Timeout;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java
index 0ae22ac..d76d0bf 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java
@@ -4,7 +4,6 @@
 
 package io.modelcontextprotocol.client;
 
-import io.modelcontextprotocol.client.McpSyncClient;
 import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
 import io.modelcontextprotocol.spec.ClientMcpTransport;
 import org.junit.jupiter.api.Timeout;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java
index 44c2876..ce74812 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpAsyncClientTests.java
@@ -4,7 +4,6 @@
 
 package io.modelcontextprotocol.client;
 
-import io.modelcontextprotocol.client.McpAsyncClient;
 import io.modelcontextprotocol.client.transport.ServerParameters;
 import io.modelcontextprotocol.client.transport.StdioClientTransport;
 import io.modelcontextprotocol.spec.ClientMcpTransport;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java
index ef7c83b..9f2bc4a 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/client/StdioMcpSyncClientTests.java
@@ -6,7 +6,6 @@ package io.modelcontextprotocol.client;
 
 import java.util.concurrent.atomic.AtomicReference;
 
-import io.modelcontextprotocol.client.McpSyncClient;
 import io.modelcontextprotocol.client.transport.ServerParameters;
 import io.modelcontextprotocol.client.transport.StdioClientTransport;
 import io.modelcontextprotocol.spec.ClientMcpTransport;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java
index 2d37b4a..294056f 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java
@@ -9,7 +9,6 @@ import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
 
-import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
 import io.modelcontextprotocol.spec.McpSchema;
 import io.modelcontextprotocol.spec.McpSchema.JSONRPCRequest;
 import org.junit.jupiter.api.AfterEach;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java
index ff1162c..dcc103b 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java
@@ -7,13 +7,8 @@ package io.modelcontextprotocol.server;
 import java.time.Duration;
 import java.util.List;
 
-import io.modelcontextprotocol.server.McpAsyncServer;
-import io.modelcontextprotocol.server.McpServer;
-import io.modelcontextprotocol.server.McpServerFeatures;
 import io.modelcontextprotocol.spec.McpError;
 import io.modelcontextprotocol.spec.McpSchema;
-import io.modelcontextprotocol.spec.McpTransport;
-import io.modelcontextprotocol.spec.ServerMcpTransport;
 import io.modelcontextprotocol.spec.McpSchema.CallToolResult;
 import io.modelcontextprotocol.spec.McpSchema.GetPromptResult;
 import io.modelcontextprotocol.spec.McpSchema.Prompt;
@@ -22,6 +17,8 @@ import io.modelcontextprotocol.spec.McpSchema.ReadResourceResult;
 import io.modelcontextprotocol.spec.McpSchema.Resource;
 import io.modelcontextprotocol.spec.McpSchema.ServerCapabilities;
 import io.modelcontextprotocol.spec.McpSchema.Tool;
+import io.modelcontextprotocol.spec.McpTransport;
+import io.modelcontextprotocol.spec.ServerMcpTransport;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpSyncServerTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpSyncServerTests.java
index 37c02c8..bdcd7ae 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpSyncServerTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/server/AbstractMcpSyncServerTests.java
@@ -6,13 +6,8 @@ package io.modelcontextprotocol.server;
 
 import java.util.List;
 
-import io.modelcontextprotocol.server.McpServer;
-import io.modelcontextprotocol.server.McpServerFeatures;
-import io.modelcontextprotocol.server.McpSyncServer;
 import io.modelcontextprotocol.spec.McpError;
 import io.modelcontextprotocol.spec.McpSchema;
-import io.modelcontextprotocol.spec.McpTransport;
-import io.modelcontextprotocol.spec.ServerMcpTransport;
 import io.modelcontextprotocol.spec.McpSchema.CallToolResult;
 import io.modelcontextprotocol.spec.McpSchema.GetPromptResult;
 import io.modelcontextprotocol.spec.McpSchema.Prompt;
@@ -21,6 +16,8 @@ import io.modelcontextprotocol.spec.McpSchema.ReadResourceResult;
 import io.modelcontextprotocol.spec.McpSchema.Resource;
 import io.modelcontextprotocol.spec.McpSchema.ServerCapabilities;
 import io.modelcontextprotocol.spec.McpSchema.Tool;
+import io.modelcontextprotocol.spec.McpTransport;
+import io.modelcontextprotocol.spec.ServerMcpTransport;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/server/McpServerProtocolVersionTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/McpServerProtocolVersionTests.java
index 74498ff..9735872 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/server/McpServerProtocolVersionTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/server/McpServerProtocolVersionTests.java
@@ -8,8 +8,6 @@ import java.util.List;
 import java.util.UUID;
 
 import io.modelcontextprotocol.MockMcpTransport;
-import io.modelcontextprotocol.server.McpAsyncServer;
-import io.modelcontextprotocol.server.McpServer;
 import io.modelcontextprotocol.spec.McpSchema;
 import org.junit.jupiter.api.Test;
 
diff --git a/mcp/src/test/java/io/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java
index 02d140f..715f636 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java
@@ -5,7 +5,6 @@
 package io.modelcontextprotocol.server;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import io.modelcontextprotocol.server.McpAsyncServer;
 import io.modelcontextprotocol.server.transport.HttpServletSseServerTransport;
 import io.modelcontextprotocol.spec.ServerMcpTransport;
 import org.junit.jupiter.api.Timeout;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java
index 9b64e3e..208de7f 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java
@@ -5,7 +5,6 @@
 package io.modelcontextprotocol.server;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import io.modelcontextprotocol.server.McpSyncServer;
 import io.modelcontextprotocol.server.transport.HttpServletSseServerTransport;
 import io.modelcontextprotocol.spec.ServerMcpTransport;
 import org.junit.jupiter.api.Timeout;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/server/StdioMcpAsyncServerTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/StdioMcpAsyncServerTests.java
index 75646fd..e933d63 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/server/StdioMcpAsyncServerTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/server/StdioMcpAsyncServerTests.java
@@ -4,7 +4,6 @@
 
 package io.modelcontextprotocol.server;
 
-import io.modelcontextprotocol.server.McpAsyncServer;
 import io.modelcontextprotocol.server.transport.StdioServerTransport;
 import io.modelcontextprotocol.spec.ServerMcpTransport;
 import org.junit.jupiter.api.Timeout;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/server/StdioMcpSyncServerTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/StdioMcpSyncServerTests.java
index 073bbcb..d935041 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/server/StdioMcpSyncServerTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/server/StdioMcpSyncServerTests.java
@@ -4,7 +4,6 @@
 
 package io.modelcontextprotocol.server;
 
-import io.modelcontextprotocol.server.McpSyncServer;
 import io.modelcontextprotocol.server.transport.StdioServerTransport;
 import io.modelcontextprotocol.spec.ServerMcpTransport;
 import org.junit.jupiter.api.Timeout;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java
index 6fe7fe0..4a292da 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java
@@ -14,7 +14,6 @@ import io.modelcontextprotocol.client.McpClient;
 import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
 import io.modelcontextprotocol.server.McpServer;
 import io.modelcontextprotocol.server.McpServerFeatures;
-import io.modelcontextprotocol.server.transport.HttpServletSseServerTransport;
 import io.modelcontextprotocol.spec.McpError;
 import io.modelcontextprotocol.spec.McpSchema;
 import io.modelcontextprotocol.spec.McpSchema.CallToolResult;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/server/transport/StdioServerTransportTests.java b/mcp/src/test/java/io/modelcontextprotocol/server/transport/StdioServerTransportTests.java
index a06cfe6..43e5019 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/server/transport/StdioServerTransportTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/server/transport/StdioServerTransportTests.java
@@ -11,7 +11,6 @@ import java.nio.charset.StandardCharsets;
 import java.util.Map;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import io.modelcontextprotocol.server.transport.StdioServerTransport;
 import io.modelcontextprotocol.spec.McpSchema;
 import io.modelcontextprotocol.spec.McpSchema.JSONRPCRequest;
 import org.junit.jupiter.api.AfterEach;
diff --git a/mcp/src/test/java/io/modelcontextprotocol/spec/DefaultMcpSessionTests.java b/mcp/src/test/java/io/modelcontextprotocol/spec/DefaultMcpSessionTests.java
index 2b7bf34..9d011af 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/spec/DefaultMcpSessionTests.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/spec/DefaultMcpSessionTests.java
@@ -9,9 +9,6 @@ import java.util.Map;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import io.modelcontextprotocol.MockMcpTransport;
-import io.modelcontextprotocol.spec.DefaultMcpSession;
-import io.modelcontextprotocol.spec.McpError;
-import io.modelcontextprotocol.spec.McpSchema;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/pom.xml b/pom.xml
index d1bdc29..0edd15f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -96,8 +96,8 @@
 	
 		mcp-bom
 		mcp
-		mcp-transport/mcp-webflux-sse-transport
-		mcp-transport/mcp-webmvc-sse-transport
+		mcp-spring/mcp-spring-webflux
+		mcp-spring/mcp-spring-webmvc
 		
 		mcp-test
 	

From 8cd3cfdf3f84942537808d8fd232d2964e08ea47 Mon Sep 17 00:00:00 2001
From: Christian Tzolov 
Date: Wed, 29 Jan 2025 14:32:43 +0100
Subject: [PATCH 025/426] Improve docs

---
 README.md                                     |  40 +-
 docs/docs/dependency-management.mdx           |  38 -
 docs/docs/mcp-overview.mdx                    |   6 +-
 docs/docs/overview.mdx                        |  32 +-
 docs/images/java-mcp-client-architecture.jpg  | Bin 0 -> 676694 bytes
 docs/images/java-mcp-server-architecture.jpg  | Bin 0 -> 859935 bytes
 ...gram.svg => java-mcp-uml-classdiagram.svg} |   0
 .../spring-ai-mcp-client-architecture.jpg     | Bin 702970 -> 0 bytes
 .../spring-ai-mcp-server-architecture.jpg     | Bin 809495 -> 0 bytes
 docs/mint.json                                |   2 +-
 mcp-bom/pom.xml                               |   4 +-
 mcp-docs/pom.xml                              |  89 ---
 mcp-docs/src/assembly/javadocs.xml            |  31 -
 mcp-docs/src/main/antora/antora-playbook.yml  |  48 --
 mcp-docs/src/main/antora/antora.yml           |  12 -
 .../modules/ROOT/images/class-diagrams.puml   | 282 --------
 .../antora/modules/ROOT/images/mcp-stack.svg  | 197 -----
 .../spring-ai-mcp-clinet-architecture.jpg     | Bin 702970 -> 0 bytes
 .../spring-ai-mcp-server-architecture.jpg     | Bin 809495 -> 0 bytes
 .../images/spring-ai-mcp-uml-classdiagram.svg |   1 -
 .../src/main/antora/modules/ROOT/nav.adoc     |   3 -
 .../ROOT/pages/dependency-management.adoc     | 109 ---
 .../main/antora/modules/ROOT/pages/mcp.adoc   | 675 ------------------
 .../antora/modules/ROOT/pages/overview.adoc   | 126 ----
 .../resources/antora-resources/antora.yml     |   2 -
 mcp-docs/src/main/javadoc/overview.html       |  33 -
 pom.xml                                       |   9 -
 27 files changed, 18 insertions(+), 1721 deletions(-)
 create mode 100644 docs/images/java-mcp-client-architecture.jpg
 create mode 100644 docs/images/java-mcp-server-architecture.jpg
 rename docs/images/{spring-ai-mcp-uml-classdiagram.svg => java-mcp-uml-classdiagram.svg} (100%)
 delete mode 100644 docs/images/spring-ai-mcp-client-architecture.jpg
 delete mode 100644 docs/images/spring-ai-mcp-server-architecture.jpg
 delete mode 100644 mcp-docs/pom.xml
 delete mode 100644 mcp-docs/src/assembly/javadocs.xml
 delete mode 100644 mcp-docs/src/main/antora/antora-playbook.yml
 delete mode 100644 mcp-docs/src/main/antora/antora.yml
 delete mode 100644 mcp-docs/src/main/antora/modules/ROOT/images/class-diagrams.puml
 delete mode 100644 mcp-docs/src/main/antora/modules/ROOT/images/mcp-stack.svg
 delete mode 100644 mcp-docs/src/main/antora/modules/ROOT/images/spring-ai-mcp-clinet-architecture.jpg
 delete mode 100644 mcp-docs/src/main/antora/modules/ROOT/images/spring-ai-mcp-server-architecture.jpg
 delete mode 100644 mcp-docs/src/main/antora/modules/ROOT/images/spring-ai-mcp-uml-classdiagram.svg
 delete mode 100644 mcp-docs/src/main/antora/modules/ROOT/nav.adoc
 delete mode 100644 mcp-docs/src/main/antora/modules/ROOT/pages/dependency-management.adoc
 delete mode 100644 mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc
 delete mode 100644 mcp-docs/src/main/antora/modules/ROOT/pages/overview.adoc
 delete mode 100644 mcp-docs/src/main/antora/resources/antora-resources/antora.yml
 delete mode 100644 mcp-docs/src/main/javadoc/overview.html

diff --git a/README.md b/README.md
index 4133b9a..d38005a 100644
--- a/README.md
+++ b/README.md
@@ -1,26 +1,27 @@
-# Java & Spring MCP
+# MCP Java SDK
 [![Build Status](https://github.com/modelcontextprotocol/java-sdk/actions/workflows/continuous-integration.yml/badge.svg)](https://github.com/modelcontextprotocol/java-sdk/actions/workflows/continuous-integration.yml)
 
-Set of projects that provide Java SDK and Spring Framework integration for the [Model Context Protocol](https://modelcontextprotocol.org/docs/concepts/architecture). 
+Set of projects that provide Java SDK integration for the [Model Context Protocol](https://modelcontextprotocol.org/docs/concepts/architecture). 
 It enables Java applications to interact with AI models and tools through a standardized interface, supporting both synchronous and asynchronous communication patterns.
 
 ## 📚 Reference Documentation
-For comprehensive guides and API documentation, visit the [Spring AI MCP Reference Documentation](https://docs.spring.io/spring-ai-mcp/reference/overview.html).
 
-
+For comprehensive guides and API documentation, visit the [MCP Java SDK Reference Documentation](docs/docs/overview.mdx).
 
-
+
+
+
 
 ## Projects
 
-### [MCP Java SDK](https://docs.spring.io/spring-ai-mcp/reference/mcp.html)
+### MCP 
 
 Java implementation of the Model Context Protocol specification. It includes:
 - Synchronous and asynchronous [MCP Client](https://docs.spring.io/spring-ai-mcp/reference/mcp.html#_mcp_client) and [MCP Server](https://docs.spring.io/spring-ai-mcp/reference/mcp.html#_mcp_server) implementations
 - Standard MCP operations support (tool discovery, resource management, prompt handling, structured logging). Support for request and notification handling.
 - [Stdio](https://spec.modelcontextprotocol.io/specification/2024-11-05/basic/transports/#stdio) and [SSE](https://spec.modelcontextprotocol.io/specification/2024-11-05/basic/transports/#http-with-sse) transport implementations. 
 
-### MCP Transports
+### MCP Spring
 
 #### Core Transports
 - Stdio-based (`StdioClientTransport`, `StdioServerTransport`) for process-based communication
@@ -32,13 +33,6 @@ Java implementation of the Model Context Protocol specification. It includes:
 - [WebMvc SSE Transport](https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-spring/mcp-spring-webmvc) - Spring MVC based HTTP SSE transport (Server only). 
 You can use the core `HttpClientSseClientTransport` transport as a SSE client.
 
-### [Spring AI MCP](https://docs.spring.io/spring-ai-mcp/reference/spring-mcp.html)
-
-The Spring integration module provides Spring-specific functionality:
-- Integration with Spring AI's function calling system
-- Spring-friendly abstractions for MCP clients
-- Auto-configurations (WIP)
-
 
 ## Installation
 
@@ -64,24 +58,6 @@ Add the following dependencies to your Maven project:
 
 ```
 
-This is a milestone release, not available on Maven Central. 
-Add this repository to your POM:
-
-```xml
-
-    
-        spring-milestones
-        Spring Milestones
-        https://repo.spring.io/milestone
-        
-            false
-        
-    
-
-```
-
-Reffer to the [Dependency Management](https://docs.spring.io/spring-ai-mcp/reference/dependency-management.html) page for more information.
-
 ## Example Demos
 
 Explore these MCP examples in the [spring-ai-examples/model-context-protocol](https://github.com/spring-projects/spring-ai-examples/tree/main/model-context-protocol) repository:
diff --git a/docs/docs/dependency-management.mdx b/docs/docs/dependency-management.mdx
index dbd69e4..6520721 100644
--- a/docs/docs/dependency-management.mdx
+++ b/docs/docs/dependency-management.mdx
@@ -64,41 +64,3 @@ The following dependencies are available and managed by the BOM:
 
 - `org.modelcontextprotocol.sdk:mcp-test` - Testing utilities and support for MCP-based applications.
 
-### Milestone and Snapshot Repositories
-
-To use the Milestone and Snapshot version, you need to add references to the Spring Milestone and/or Snapshot repositories in your build file.
-Add the following repository definitions to your Maven or Gradle build file:
-
-
-  
-```xml
-
-  
-    spring-milestones
-    Spring Milestones
-    https://repo.spring.io/milestone
-    
-      false
-    
-  
-  
-    spring-snapshots
-    Spring Snapshots
-    https://repo.spring.io/snapshot
-    
-      false
-    
-  
-
-```
-  
-
-  
-```groovy
-repositories {
-    maven { url 'https://repo.spring.io/milestone' }
-    maven { url 'https://repo.spring.io/snapshot' }
-}
-```
-  
-
diff --git a/docs/docs/mcp-overview.mdx b/docs/docs/mcp-overview.mdx
index 18ae2b7..d1d2742 100644
--- a/docs/docs/mcp-overview.mdx
+++ b/docs/docs/mcp-overview.mdx
@@ -7,8 +7,8 @@ description: Overview of the Model Context Protocol (MCP) architecture and key c
 
 Java SDK implementation of the [Model Context Protocol](https://modelcontextprotocol.io/introduction), enabling seamless integration with language models and AI tools.
 
-![Spring AI MCP Client Architecture](/images/spring-ai-mcp-client-architecture.jpg)
-![Spring AI MCP Server Architecture](/images/spring-ai-mcp-server-architecture.jpg)
+![Spring AI MCP Client Architecture](/images/java-mcp-client-architecture.jpg)
+![Spring AI MCP Server Architecture](/images/java-mcp-server-architecture.jpg)
 
 ## Features
 
@@ -43,7 +43,7 @@ The SDK follows a layered architecture with clear separation of concerns:
 
 Following class diagram illustrates the layered architecture of the MCP SDK, showing the relationships between core interfaces (McpTransport, McpSession), their implementations, and the client/server components. It highlights how the transport layer connects to sessions, which in turn support both synchronous and asynchronous client/server implementations.
 
-![MCP SDK Class Diagram](/images/spring-ai-mcp-uml-classdiagram.svg)
+![MCP SDK Class Diagram](/images/java-mcp-uml-classdiagram.svg)
 
 Key Interactions:
 
diff --git a/docs/docs/overview.mdx b/docs/docs/overview.mdx
index 28d9e3d..e9c5e32 100644
--- a/docs/docs/overview.mdx
+++ b/docs/docs/overview.mdx
@@ -3,36 +3,12 @@ title: Overview
 description: Introduction to the Model Context Protocol (MCP) Java SDK
 ---
 
-# Java & Spring MCP
+# MCP Java SDK
 
-Java SDK and Spring Framework integration for the [Model Context Protocol](https://modelcontextprotocol.org/docs/concepts/architecture), enabling standardized interaction with AI models and tools through both synchronous and asynchronous communication.
+Java SDK for the [Model Context Protocol](https://modelcontextprotocol.org/docs/concepts/architecture), enabling standardized interaction with AI models and tools through both synchronous and asynchronous communication.
 
-![Spring AI MCP Client Architecture](/images/spring-ai-mcp-client-architecture.jpg)
-![Spring AI MCP Server Architecture](/images/spring-ai-mcp-server-architecture.jpg)
-
-## Core Components
-
-### [MCP Java SDK](/docs/mcp)
-Core implementation of the Model Context Protocol specification, providing:
-
-- Synchronous and asynchronous [Client](/docs/mcp#mcp-client) and [Server](/docs/mcp#mcp-server) implementations
-- Tool discovery and execution
-- Resource management with URI templates
-- Prompt handling and management
-- Structured logging
-- Request and Notification handling
-
-### MCP Transports
-
-#### Core Transports
-- Stdio-based (`StdioClientTransport`, `StdioServerTransport`) for process-based communication
-- Java HttpClient-based SSE client (`HttpClientSseClientTransport`) for HTTP SSE Client-side streaming
-- Servlet-based SSE server (`HttpServletSseServerTransport`) for HTTP SSE Server streaming using traditional Servlet API
-
-#### Optional SSE Transports
-- [WebFlux SSE Transport](https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-spring/mcp-spring-webflux) - Reactive HTTP streaming with Spring WebFlux (Client & Server)
-- [WebMvc SSE Transport](https://github.com/modelcontextprotocol/java-sdk/tree/main/mcp-spring/mcp-spring-webmvc) - Spring MVC based SSE transport (Server only). 
-You can use the core `HttpClientSseClientTransport` transport as a SSE client.
+![Java MCP Client Architecture](/images/java-mcp-client-architecture.jpg)
+![Java MCP Server Architecture](/images/java-mcp-server-architecture.jpg)
 
 ## Getting Started
 
diff --git a/docs/images/java-mcp-client-architecture.jpg b/docs/images/java-mcp-client-architecture.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..688a2b4ad0f92090bf0033ab5eb3b20fce1a8484
GIT binary patch
literal 676694
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

$1Iq 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�>qUf*{0N3T_ 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Ν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