From 9d90e4875ffefca8b3e342e44ce834dabc3d3857 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Mon, 13 Jan 2025 12:27:18 +0100 Subject: [PATCH 001/443] 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 5f7ec93..b418d0c 100644 --- a/mcp-bom/pom.xml +++ b/mcp-bom/pom.xml @@ -7,7 +7,7 @@ org.springframework.experimental mcp-parent - 0.5.0 + 0.6.0-SNAPSHOT mcp-bom diff --git a/mcp-docs/pom.xml b/mcp-docs/pom.xml index d70f198..0967cb1 100644 --- a/mcp-docs/pom.xml +++ b/mcp-docs/pom.xml @@ -20,7 +20,7 @@ org.springframework.experimental mcp-parent - 0.5.0 + 0.6.0-SNAPSHOT mcp-docs Spring AI MCP Docs diff --git a/mcp-test/pom.xml b/mcp-test/pom.xml index 07dfb40..6ca4339 100644 --- a/mcp-test/pom.xml +++ b/mcp-test/pom.xml @@ -6,7 +6,7 @@ org.springframework.experimental mcp-parent - 0.5.0 + 0.6.0-SNAPSHOT mcp-test jar @@ -24,7 +24,7 @@ org.springframework.experimental mcp - 0.5.0 + 0.6.0-SNAPSHOT diff --git a/mcp-transport/mcp-webflux-sse-transport/pom.xml b/mcp-transport/mcp-webflux-sse-transport/pom.xml index 4a148b6..fd51d01 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.5.0 + 0.6.0-SNAPSHOT ../../pom.xml mcp-webflux-sse-transport @@ -25,13 +25,13 @@ org.springframework.experimental mcp - 0.5.0 + 0.6.0-SNAPSHOT org.springframework.experimental mcp-test - 0.5.0 + 0.6.0-SNAPSHOT test diff --git a/mcp-transport/mcp-webmvc-sse-transport/pom.xml b/mcp-transport/mcp-webmvc-sse-transport/pom.xml index 1ad2c79..9d24d95 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.5.0 + 0.6.0-SNAPSHOT ../../pom.xml mcp-webmvc-sse-transport @@ -25,13 +25,13 @@ org.springframework.experimental mcp - 0.5.0 + 0.6.0-SNAPSHOT org.springframework.experimental mcp-test - 0.5.0 + 0.6.0-SNAPSHOT test diff --git a/mcp/pom.xml b/mcp/pom.xml index 3e7fad6..f8e5c20 100644 --- a/mcp/pom.xml +++ b/mcp/pom.xml @@ -6,7 +6,7 @@ org.springframework.experimental mcp-parent - 0.5.0 + 0.6.0-SNAPSHOT mcp jar diff --git a/pom.xml b/pom.xml index 2e1dc9d..2d583ca 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.springframework.experimental mcp-parent - 0.5.0 + 0.6.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 2789f4d..7d31418 100644 --- a/spring-ai-mcp/pom.xml +++ b/spring-ai-mcp/pom.xml @@ -6,7 +6,7 @@ org.springframework.experimental mcp-parent - 0.5.0 + 0.6.0-SNAPSHOT spring-ai-mcp Spring AI MCP From 7a5793d0f3da6f677124da273971d53f8d2371bb Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Mon, 13 Jan 2025 12:36:45 +0100 Subject: [PATCH 002/443] docs: Update dependency management version --- .../main/antora/modules/ROOT/pages/dependency-management.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 b123aba..0f01bc4 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 @@ -22,7 +22,7 @@ Maven:: org.springframework.experimental mcp-bom - 0.5.0 + 0.6.0-SNAPSHOT pom import @@ -35,7 +35,7 @@ Gradle:: [source,groovy,indent=0,subs="verbatim,quotes"] ---- dependencies { - implementation platform("org.springframework.experimental:mcp-bom:0.5.0") + implementation platform("org.springframework.experimental:mcp-bom:0.6.0-SNAPSHOT") //... } ---- From 2199e34cf89f8df68ac01300e2f3294bf43bd7e9 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Mon, 13 Jan 2025 13:27:07 +0100 Subject: [PATCH 003/443] Fix the MCP Server Architecture diagram --- .../spring-ai-mcp-server-architecture.jpg | Bin 801473 -> 809495 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mcp-docs/src/main/antora/modules/ROOT/images/spring-ai-mcp-server-architecture.jpg b/mcp-docs/src/main/antora/modules/ROOT/images/spring-ai-mcp-server-architecture.jpg index c800a5e3f849ae11ca6bf56bc612f7de69d17ff2..c6ebea0c3220becc1864a09cdd3c47425fe74246 100644 GIT binary patch literal 809495 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�>qUf*{0N3T_ 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Ν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

2Uo+bG<0QGR@jr$=F2 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 Z1P&26MBosCLj(>HI7Hw-4uRi#{~z9ZTp9oX literal 801473 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

#QZtWYiW0MEl<;K}@Y} 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 z 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

0T3CILl%)Yu4fnBjV8_p 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%0Dy?WEn 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

7754Q56)kxoqL<%vG|`nh2{n@<^xDTA%E{N7 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 zΜ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%0AoGep#R5{Cho&Fx1F)&Q#0}j@1e}Kqyj% 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

=Dd5RD|XEF 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%0A%J0Cu% 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 V0e}EN03ZMm00{iQB=D}|e*m2+WgGwi From 26460e640b09eba911ec54eddb8a1301418272f0 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Tue, 14 Jan 2025 14:43:55 +0100 Subject: [PATCH 004/443] feat(mcp): add JsonIgnoreProperties to schema records for resilient deserialization --- .../org/springframework/ai/mcp/spec/McpSchema.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java b/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java index ce274f8..b1073c1 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java @@ -222,6 +222,7 @@ public final class McpSchema { } // @formatter:on @JsonInclude(JsonInclude.Include.NON_ABSENT) + @JsonIgnoreProperties(ignoreUnknown = true) public record InitializeResult( // @formatter:off @JsonProperty("protocolVersion") String protocolVersion, @JsonProperty("capabilities") ServerCapabilities capabilities, @@ -472,12 +473,14 @@ public final class McpSchema { } // @formatter:on @JsonInclude(JsonInclude.Include.NON_ABSENT) + @JsonIgnoreProperties(ignoreUnknown = true) public record ListResourcesResult( // @formatter:off @JsonProperty("resources") List resources, @JsonProperty("nextCursor") String nextCursor) { } // @formatter:on @JsonInclude(JsonInclude.Include.NON_ABSENT) + @JsonIgnoreProperties(ignoreUnknown = true) public record ListResourceTemplatesResult( // @formatter:off @JsonProperty("resourceTemplates") List resourceTemplates, @JsonProperty("nextCursor") String nextCursor) { @@ -489,6 +492,7 @@ public final class McpSchema { } // @formatter:on @JsonInclude(JsonInclude.Include.NON_ABSENT) + @JsonIgnoreProperties(ignoreUnknown = true) public record ReadResourceResult( // @formatter:off @JsonProperty("contents") List contents){ } // @formatter:on @@ -619,6 +623,7 @@ public final class McpSchema { * are more prompts available. */ @JsonInclude(JsonInclude.Include.NON_ABSENT) + @JsonIgnoreProperties(ignoreUnknown = true) public record ListPromptsResult( // @formatter:off @JsonProperty("prompts") List prompts, @JsonProperty("nextCursor") String nextCursor) { @@ -643,6 +648,7 @@ public final class McpSchema { * @param messages A list of messages to display as part of the prompt. */ @JsonInclude(JsonInclude.Include.NON_ABSENT) + @JsonIgnoreProperties(ignoreUnknown = true) public record GetPromptResult( // @formatter:off @JsonProperty("description") String description, @JsonProperty("messages") List messages) { @@ -659,6 +665,7 @@ public final class McpSchema { * are more tools available. */ @JsonInclude(JsonInclude.Include.NON_ABSENT) + @JsonIgnoreProperties(ignoreUnknown = true) public record ListToolsResult( // @formatter:off @JsonProperty("tools") List tools, @JsonProperty("nextCursor") String nextCursor) { @@ -716,6 +723,7 @@ public final class McpSchema { * input schema. */ @JsonInclude(JsonInclude.Include.NON_ABSENT) + @JsonIgnoreProperties(ignoreUnknown = true) public record CallToolRequest(// @formatter:off @JsonProperty("name") String name, @JsonProperty("arguments") Map arguments) implements Request { @@ -730,6 +738,7 @@ public final class McpSchema { * If false or absent, indicates successful execution. */ @JsonInclude(JsonInclude.Include.NON_ABSENT) + @JsonIgnoreProperties(ignoreUnknown = true) public record CallToolResult( // @formatter:off @JsonProperty("content") List content, @JsonProperty("isError") Boolean isError) { @@ -776,6 +785,7 @@ public final class McpSchema { }// @formatter:on @JsonInclude(JsonInclude.Include.NON_ABSENT) + @JsonIgnoreProperties(ignoreUnknown = true) public record CreateMessageResult(// @formatter:off @JsonProperty("role") Role role, @JsonProperty("content") Content content, @@ -837,6 +847,7 @@ public final class McpSchema { } @JsonInclude(JsonInclude.Include.NON_ABSENT) + @JsonIgnoreProperties(ignoreUnknown = true) public record PaginatedResult(@JsonProperty("nextCursor") String nextCursor) { } @@ -1044,6 +1055,7 @@ public final class McpSchema { * that the server can operate on. */ @JsonInclude(JsonInclude.Include.NON_ABSENT) + @JsonIgnoreProperties(ignoreUnknown = true) public record ListRootsResult( // @formatter:off @JsonProperty("roots") List roots) { } // @formatter:on From f3e3a65ca674349645ecf33a049e1dac48bbc8d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CJermaineHua=E2=80=9D?= Date: Tue, 14 Jan 2025 23:59:20 +0800 Subject: [PATCH 005/443] Set method scope properly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: “JermaineHua” --- .../java/org/springframework/ai/mcp/spec/McpSchema.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java b/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java index b1073c1..1a9f3d3 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java @@ -98,7 +98,7 @@ public final class McpSchema { // Sampling Methods public static final String METHOD_SAMPLING_CREATE_MESSAGE = "sampling/createMessage"; - private static ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); // --------------------------- // JSON-RPC Error Codes @@ -106,7 +106,7 @@ public final class McpSchema { /** * Standard error codes used in MCP JSON-RPC responses. */ - public final class ErrorCodes { + public static final class ErrorCodes { /** * Invalid JSON was received by the server. @@ -705,7 +705,7 @@ public final class McpSchema { } // @formatter:on - public static JsonSchema parseSchema(String schema) { + private static JsonSchema parseSchema(String schema) { try { return OBJECT_MAPPER.readValue(schema, JsonSchema.class); } From c2ece20cc2267cf7ea59c7b7cfe966e804c85e3f Mon Sep 17 00:00:00 2001 From: Alexandros Pappas Date: Thu, 16 Jan 2025 15:28:35 +0100 Subject: [PATCH 006/443] feat: Make SSE endpoint configurable in server transports This commit updates the WebFluxSseServerTransport, WebMvcSseServerTransport, and HttpServletSseServerTransport classes to accept the SSE endpoint path as a constructor argument. This change provides more flexibility in configuring the SSE endpoint, allowing it to be customized instead of being hardcoded to "/sse". It also aligns the Java SDK's behavior with the Python SDK's SseServerTransport, which already supports this customization. A default SSE endpoint of "/sse" is maintained for backward compatibility. Also, addressed minor code quality issues identified by SonarLint and reordered modifiers for static final fields to conform with the Java Language Specification. Signed-off-by: Alexandros Pappas --- .../transport/WebFluxSseClientTransport.java | 10 ++-- .../transport/WebFluxSseServerTransport.java | 41 +++++++++----- .../transport/WebMvcSseServerTransport.java | 32 ++++++++--- .../ai/mcp/client/McpAsyncClient.java | 8 +-- .../HttpClientSseClientTransport.java | 10 ++-- .../ai/mcp/server/McpAsyncServer.java | 8 +-- .../ai/mcp/server/McpServer.java | 2 +- .../HttpServletSseServerTransport.java | 56 +++++++++++++------ .../ai/mcp/spec/McpSchema.java | 2 +- .../ai/mcp/spec/DefaultMcpSessionTests.java | 2 +- 10 files changed, 112 insertions(+), 59 deletions(-) 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/springframework/ai/mcp/client/transport/WebFluxSseClientTransport.java index 0505372..a4605c6 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/springframework/ai/mcp/client/transport/WebFluxSseClientTransport.java @@ -72,31 +72,31 @@ import org.springframework.web.reactive.function.client.WebClient; */ public class WebFluxSseClientTransport implements ClientMcpTransport { - private final static Logger logger = LoggerFactory.getLogger(WebFluxSseClientTransport.class); + private static final Logger logger = LoggerFactory.getLogger(WebFluxSseClientTransport.class); /** * Event type for JSON-RPC messages received through the SSE connection. The server * sends messages with this event type to transmit JSON-RPC protocol data. */ - private final static String MESSAGE_EVENT_TYPE = "message"; + private static final String MESSAGE_EVENT_TYPE = "message"; /** * Event type for receiving the message endpoint URI from the server. The server MUST * send this event when a client connects, providing the URI where the client should * send its messages via HTTP POST. */ - private final static String ENDPOINT_EVENT_TYPE = "endpoint"; + private static final String ENDPOINT_EVENT_TYPE = "endpoint"; /** * Default SSE endpoint path as specified by the MCP transport specification. This * endpoint is used to establish the SSE connection with the server. */ - private final static String SSE_ENDPOINT = "/sse"; + private static final String SSE_ENDPOINT = "/sse"; /** * Type reference for parsing SSE events containing string data. */ - private final static ParameterizedTypeReference> SSE_TYPE = new ParameterizedTypeReference<>() { + private static final ParameterizedTypeReference> SSE_TYPE = new ParameterizedTypeReference<>() { }; /** 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/springframework/ai/mcp/server/transport/WebFluxSseServerTransport.java index 88812ad..6126eba 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/springframework/ai/mcp/server/transport/WebFluxSseServerTransport.java @@ -57,32 +57,35 @@ import org.springframework.web.reactive.function.server.ServerResponse; * {@link Sinks} for thread-safe message broadcasting. * * @author Christian Tzolov + * @author Alexandros Pappas * @see ServerMcpTransport * @see ServerSentEvent */ public class WebFluxSseServerTransport implements ServerMcpTransport { - private final static Logger logger = LoggerFactory.getLogger(WebFluxSseServerTransport.class); + private static final Logger logger = LoggerFactory.getLogger(WebFluxSseServerTransport.class); /** * Event type for JSON-RPC messages sent through the SSE connection. */ - public final static String MESSAGE_EVENT_TYPE = "message"; + public static final String MESSAGE_EVENT_TYPE = "message"; /** * Event type for sending the message endpoint URI to clients. */ - public final static String ENDPOINT_EVENT_TYPE = "endpoint"; + public static final String ENDPOINT_EVENT_TYPE = "endpoint"; /** * Default SSE endpoint path as specified by the MCP transport specification. */ - public final static String SSE_ENDPOINT = "/sse"; + public static final String DEFAULT_SSE_ENDPOINT = "/sse"; private final ObjectMapper objectMapper; private final String messageEndpoint; + private final String sseEndpoint; + private final RouterFunction routerFunction; /** @@ -106,18 +109,34 @@ public class WebFluxSseServerTransport implements ServerMcpTransport { * setup. Must not be null. * @throws IllegalArgumentException if either parameter is null */ - public WebFluxSseServerTransport(ObjectMapper objectMapper, String messageEndpoint) { + public WebFluxSseServerTransport(ObjectMapper objectMapper, String messageEndpoint, String sseEndpoint) { Assert.notNull(objectMapper, "ObjectMapper must not be null"); Assert.notNull(messageEndpoint, "Message endpoint must not be null"); + Assert.notNull(sseEndpoint, "SSE endpoint must not be null"); this.objectMapper = objectMapper; this.messageEndpoint = messageEndpoint; + this.sseEndpoint = sseEndpoint; this.routerFunction = RouterFunctions.route() - .GET(SSE_ENDPOINT, this::handleSseConnection) - .POST(messageEndpoint, this::handleMessage) + .GET(this.sseEndpoint, this::handleSseConnection) + .POST(this.messageEndpoint, this::handleMessage) .build(); } + /** + * Constructs a new WebFlux SSE server transport instance with the default SSE + * endpoint. + * @param objectMapper The ObjectMapper to use for JSON serialization/deserialization + * of MCP messages. Must not be null. + * @param messageEndpoint The endpoint URI where clients should send their JSON-RPC + * messages. This endpoint will be communicated to clients during SSE connection + * setup. Must not be null. + * @throws IllegalArgumentException if either parameter is null + */ + public WebFluxSseServerTransport(ObjectMapper objectMapper, String messageEndpoint) { + this(objectMapper, messageEndpoint, DEFAULT_SSE_ENDPOINT); + } + /** * Configures the message handler for this transport. In the WebFlux SSE * implementation, this method stores the handler for processing incoming messages but @@ -243,7 +262,7 @@ public class WebFluxSseServerTransport implements ServerMcpTransport { *

* The router function defines two endpoints: *

    - *
  • GET {SSE_ENDPOINT} - For establishing SSE connections
  • + *
  • GET {sseEndpoint} - For establishing SSE connections
  • *
  • POST {messageEndpoint} - For receiving client messages
  • *
* @return The configured {@link RouterFunction} for handling HTTP requests @@ -343,11 +362,7 @@ public class WebFluxSseServerTransport implements ServerMcpTransport { .bodyValue(new McpError(error.getMessage())); }); } - catch (IllegalArgumentException e) { - logger.error("Failed to deserialize message: {}", e.getMessage()); - return ServerResponse.badRequest().bodyValue(new McpError("Invalid message format")); - } - catch (IOException e) { + catch (IllegalArgumentException | IOException e) { logger.error("Failed to deserialize message: {}", e.getMessage()); return ServerResponse.badRequest().bodyValue(new McpError("Invalid message format")); } 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/springframework/ai/mcp/server/transport/WebMvcSseServerTransport.java index cc01f36..cee0b48 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/springframework/ai/mcp/server/transport/WebMvcSseServerTransport.java @@ -70,32 +70,35 @@ import org.springframework.web.servlet.function.ServerResponse.SseBuilder; * maintains its own SSE connection. * * @author Christian Tzolov + * @author Alexandros Pappas * @see ServerMcpTransport * @see RouterFunction */ public class WebMvcSseServerTransport implements ServerMcpTransport { - private final static Logger logger = LoggerFactory.getLogger(WebMvcSseServerTransport.class); + private static final Logger logger = LoggerFactory.getLogger(WebMvcSseServerTransport.class); /** * Event type for JSON-RPC messages sent through the SSE connection. */ - public final static String MESSAGE_EVENT_TYPE = "message"; + public static final String MESSAGE_EVENT_TYPE = "message"; /** * Event type for sending the message endpoint URI to clients. */ - public final static String ENDPOINT_EVENT_TYPE = "endpoint"; + public static final String ENDPOINT_EVENT_TYPE = "endpoint"; /** * Default SSE endpoint path as specified by the MCP transport specification. */ - public final static String SSE_ENDPOINT = "/sse"; + public static final String DEFAULT_SSE_ENDPOINT = "/sse"; private final ObjectMapper objectMapper; private final String messageEndpoint; + private final String sseEndpoint; + private final RouterFunction routerFunction; /** @@ -122,18 +125,33 @@ public class WebMvcSseServerTransport implements ServerMcpTransport { * SSE connection's initial endpoint event. * @throws IllegalArgumentException if either objectMapper or messageEndpoint is null */ - public WebMvcSseServerTransport(ObjectMapper objectMapper, String messageEndpoint) { + public WebMvcSseServerTransport(ObjectMapper objectMapper, String messageEndpoint, String sseEndpoint) { Assert.notNull(objectMapper, "ObjectMapper must not be null"); Assert.notNull(messageEndpoint, "Message endpoint must not be null"); + Assert.notNull(sseEndpoint, "SSE endpoint must not be null"); this.objectMapper = objectMapper; this.messageEndpoint = messageEndpoint; + this.sseEndpoint = sseEndpoint; this.routerFunction = RouterFunctions.route() - .GET(SSE_ENDPOINT, this::handleSseConnection) - .POST(messageEndpoint, this::handleMessage) + .GET(this.sseEndpoint, this::handleSseConnection) + .POST(this.messageEndpoint, this::handleMessage) .build(); } + /** + * Constructs a new WebMvcSseServerTransport instance with the default SSE endpoint. + * @param objectMapper The ObjectMapper to use for JSON serialization/deserialization + * of messages. + * @param messageEndpoint The endpoint URI where clients should send their JSON-RPC + * messages via HTTP POST. This endpoint will be communicated to clients through the + * SSE connection's initial endpoint event. + * @throws IllegalArgumentException if either objectMapper or messageEndpoint is null + */ + public WebMvcSseServerTransport(ObjectMapper objectMapper, String messageEndpoint) { + this(objectMapper, messageEndpoint, DEFAULT_SSE_ENDPOINT); + } + /** * Sets up the message handler for this transport. In the WebMVC SSE implementation, * this method only stores the handler for later use, as connections are initiated by diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java b/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java index 004cbc7..7b7958a 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java @@ -62,7 +62,7 @@ import org.springframework.ai.mcp.util.Utils; */ public class McpAsyncClient { - private final static Logger logger = LoggerFactory.getLogger(McpAsyncClient.class); + private static final Logger logger = LoggerFactory.getLogger(McpAsyncClient.class); private static TypeReference VOID_TYPE_REFERENCE = new TypeReference<>() { }; @@ -498,7 +498,7 @@ public class McpAsyncClient { logger.error("Error handling tools list change notification", error); return Mono.empty(); }).then(); // Convert to Mono - }; + } // -------------------------- // Resources @@ -619,7 +619,7 @@ public class McpAsyncClient { logger.error("Error handling resources list change notification", error); return Mono.empty(); }).then(); - }; + } // -------------------------- // Prompts @@ -680,7 +680,7 @@ public class McpAsyncClient { return Mono.empty(); }).then(); // Convert to Mono }; // @formatter:on - }; + } // -------------------------- // Logging diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/HttpClientSseClientTransport.java b/mcp/src/main/java/org/springframework/ai/mcp/client/transport/HttpClientSseClientTransport.java index 9284806..68f1032 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/HttpClientSseClientTransport.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/client/transport/HttpClientSseClientTransport.java @@ -70,16 +70,16 @@ import java.util.function.Function; */ public class HttpClientSseClientTransport implements ClientMcpTransport { - private final static Logger logger = LoggerFactory.getLogger(HttpClientSseClientTransport.class); + private static final Logger logger = LoggerFactory.getLogger(HttpClientSseClientTransport.class); /** SSE event type for JSON-RPC messages */ - private final static String MESSAGE_EVENT_TYPE = "message"; + private static final String MESSAGE_EVENT_TYPE = "message"; /** SSE event type for endpoint discovery */ - private final static String ENDPOINT_EVENT_TYPE = "endpoint"; + private static final String ENDPOINT_EVENT_TYPE = "endpoint"; /** Default SSE endpoint path */ - private final static String SSE_ENDPOINT = "/sse"; + private static final String SSE_ENDPOINT = "/sse"; /** Base URI for the MCP server */ private final String baseUri; @@ -170,7 +170,7 @@ public class HttpClientSseClientTransport implements ClientMcpTransport { handler.apply(Mono.just(message)).subscribe(); } else { - logger.error("Received unrecognized SSE event type: " + event.type()); + logger.error("Received unrecognized SSE event type: {}", event.type()); } } catch (IOException e) { diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java b/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java index fa8c512..37d0c65 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java @@ -54,7 +54,7 @@ import org.springframework.ai.mcp.util.Utils; */ public class McpAsyncServer { - private final static Logger logger = LoggerFactory.getLogger(McpAsyncServer.class); + private static final Logger logger = LoggerFactory.getLogger(McpAsyncServer.class); /** * The MCP session implementation that manages bidirectional JSON-RPC communication @@ -279,7 +279,7 @@ public class McpAsyncServer { return Mono.empty(); }).then(); }; - }; + } // --------------------------------------- // Tool Management @@ -352,9 +352,7 @@ public class McpAsyncServer { private DefaultMcpSession.RequestHandler toolsListRequestHandler() { return params -> { - List tools = this.tools.stream().map(toolRegistration -> { - return toolRegistration.tool(); - }).toList(); + List tools = this.tools.stream().map(ToolRegistration::tool).toList(); return Mono.just(new McpSchema.ListToolsResult(tools, null)); }; diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java b/mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java index 362491b..e5fec07 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java @@ -208,7 +208,7 @@ public interface McpServer { */ public static class Builder { - private final static McpSchema.Implementation DEFAULT_SERVER_INFO = new McpSchema.Implementation("mcp-server", + private static final McpSchema.Implementation DEFAULT_SERVER_INFO = new McpSchema.Implementation("mcp-server", "1.0.0"); private final ServerMcpTransport transport; diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransport.java b/mcp/src/main/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransport.java index 4857a60..d5ae27b 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransport.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransport.java @@ -63,6 +63,7 @@ import org.springframework.ai.mcp.spec.ServerMcpTransport; * * * @author Christian Tzolov + * @author Alexandros Pappas * @see ServerMcpTransport * @see HttpServlet */ @@ -73,8 +74,14 @@ public class HttpServletSseServerTransport extends HttpServlet implements Server /** Logger for this class */ private static final Logger logger = LoggerFactory.getLogger(HttpServletSseServerTransport.class); - /** The endpoint path for SSE connections */ - public static final String SSE_ENDPOINT = "/sse"; + public static final String UTF_8 = "UTF-8"; + + public static final String APPLICATION_JSON = "application/json"; + + public static final String FAILED_TO_SEND_ERROR_RESPONSE = "Failed to send error response: {}"; + + /** Default endpoint path for SSE connections */ + public static final String DEFAULT_SSE_ENDPOINT = "/sse"; /** Event type for regular messages */ public static final String MESSAGE_EVENT_TYPE = "message"; @@ -88,6 +95,9 @@ public class HttpServletSseServerTransport extends HttpServlet implements Server /** The endpoint path for handling client messages */ private final String messageEndpoint; + /** The endpoint path for handling SSE connections */ + private final String sseEndpoint; + /** Map of active client sessions, keyed by session ID */ private final Map sessions = new ConcurrentHashMap<>(); @@ -98,14 +108,26 @@ public class HttpServletSseServerTransport extends HttpServlet implements Server private Function, Mono> connectHandler; /** - * Creates a new HttpServletSseServerTransport instance. + * Creates a new HttpServletSseServerTransport instance with a custom SSE endpoint. + * @param objectMapper The JSON object mapper to use for message + * serialization/deserialization + * @param messageEndpoint The endpoint path where clients will send their messages + * @param sseEndpoint The endpoint path where clients will establish SSE connections + */ + public HttpServletSseServerTransport(ObjectMapper objectMapper, String messageEndpoint, String sseEndpoint) { + this.objectMapper = objectMapper; + this.messageEndpoint = messageEndpoint; + this.sseEndpoint = sseEndpoint; + } + + /** + * Creates a new HttpServletSseServerTransport instance with the default SSE endpoint. * @param objectMapper The JSON object mapper to use for message * serialization/deserialization * @param messageEndpoint The endpoint path where clients will send their messages */ public HttpServletSseServerTransport(ObjectMapper objectMapper, String messageEndpoint) { - this.objectMapper = objectMapper; - this.messageEndpoint = messageEndpoint; + this(objectMapper, messageEndpoint, DEFAULT_SSE_ENDPOINT); } /** @@ -124,7 +146,7 @@ public class HttpServletSseServerTransport extends HttpServlet implements Server throws ServletException, IOException { String pathInfo = request.getPathInfo(); - if (!SSE_ENDPOINT.equals(pathInfo)) { + if (!sseEndpoint.equals(pathInfo)) { response.sendError(HttpServletResponse.SC_NOT_FOUND); return; } @@ -135,7 +157,7 @@ public class HttpServletSseServerTransport extends HttpServlet implements Server } response.setContentType("text/event-stream"); - response.setCharacterEncoding("UTF-8"); + response.setCharacterEncoding(UTF_8); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Connection", "keep-alive"); response.setHeader("Access-Control-Allow-Origin", "*"); @@ -191,8 +213,8 @@ public class HttpServletSseServerTransport extends HttpServlet implements Server if (connectHandler != null) { connectHandler.apply(Mono.just(message)).subscribe(responseMessage -> { try { - response.setContentType("application/json"); - response.setCharacterEncoding("UTF-8"); + response.setContentType(APPLICATION_JSON); + response.setCharacterEncoding(UTF_8); String jsonResponse = objectMapper.writeValueAsString(responseMessage); PrintWriter writer = response.getWriter(); writer.write(jsonResponse); @@ -205,15 +227,15 @@ public class HttpServletSseServerTransport extends HttpServlet implements Server "Error processing response: " + e.getMessage()); } catch (IOException ex) { - logger.error("Failed to send error response: {}", ex.getMessage()); + logger.error(FAILED_TO_SEND_ERROR_RESPONSE, ex.getMessage()); } } }, error -> { try { logger.error("Error processing message: {}", error.getMessage()); McpError mcpError = new McpError(error.getMessage()); - response.setContentType("application/json"); - response.setCharacterEncoding("UTF-8"); + response.setContentType(APPLICATION_JSON); + response.setCharacterEncoding(UTF_8); response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); String jsonError = objectMapper.writeValueAsString(mcpError); PrintWriter writer = response.getWriter(); @@ -221,13 +243,13 @@ public class HttpServletSseServerTransport extends HttpServlet implements Server writer.flush(); } catch (IOException e) { - logger.error("Failed to send error response: {}", e.getMessage()); + logger.error(FAILED_TO_SEND_ERROR_RESPONSE, e.getMessage()); try { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error sending error response: " + e.getMessage()); } catch (IOException ex) { - logger.error("Failed to send error response: {}", ex.getMessage()); + logger.error(FAILED_TO_SEND_ERROR_RESPONSE, ex.getMessage()); } } }); @@ -240,8 +262,8 @@ public class HttpServletSseServerTransport extends HttpServlet implements Server logger.error("Invalid message format: {}", e.getMessage()); try { McpError mcpError = new McpError("Invalid message format: " + e.getMessage()); - response.setContentType("application/json"); - response.setCharacterEncoding("UTF-8"); + response.setContentType(APPLICATION_JSON); + response.setCharacterEncoding(UTF_8); response.setStatus(HttpServletResponse.SC_BAD_REQUEST); String jsonError = objectMapper.writeValueAsString(mcpError); PrintWriter writer = response.getWriter(); @@ -249,7 +271,7 @@ public class HttpServletSseServerTransport extends HttpServlet implements Server writer.flush(); } catch (IOException ex) { - logger.error("Failed to send error response: {}", ex.getMessage()); + logger.error(FAILED_TO_SEND_ERROR_RESPONSE, ex.getMessage()); response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid message format"); } } diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java b/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java index 1a9f3d3..e107fb6 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java @@ -140,7 +140,7 @@ public final class McpSchema { } - private final static TypeReference> MAP_TYPE_REF = new TypeReference<>() { + private static final TypeReference> MAP_TYPE_REF = new TypeReference<>() { }; /** diff --git a/mcp/src/test/java/org/springframework/ai/mcp/spec/DefaultMcpSessionTests.java b/mcp/src/test/java/org/springframework/ai/mcp/spec/DefaultMcpSessionTests.java index 658c49a..acf7c44 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/spec/DefaultMcpSessionTests.java +++ b/mcp/src/test/java/org/springframework/ai/mcp/spec/DefaultMcpSessionTests.java @@ -42,7 +42,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; */ class DefaultMcpSessionTests { - private final static Logger logger = LoggerFactory.getLogger(DefaultMcpSessionTests.class); + private static final Logger logger = LoggerFactory.getLogger(DefaultMcpSessionTests.class); private static final Duration TIMEOUT = Duration.ofSeconds(5); From f333265c5f1e4d6e768d9d8550c66d33e0e15b43 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Fri, 17 Jan 2025 06:59:34 +0100 Subject: [PATCH 007/443] Minor doc link fixes --- README.md | 4 ++-- mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ef35c56..8b01c23 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,9 @@ It enables Java applications to interact with AI models and tools through a stan ### [MCP Java SDK](https://docs.spring.io/spring-ai-mcp/reference/mcp.html) Java implementation of the Model Context Protocol specification. It includes: -- Synchronous and asynchronous [MCP Client](https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/mcp/README.md#client-usage-examples) and [MCP Server](https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/mcp/README.md#server-usage-examples) implementations +- 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/basic/transports/#stdio) and [SSE](https://spec.modelcontextprotocol.io/specification/basic/transports/#http-with-sse) transport implementations. +- [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 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 f19d960..9faf8fe 100644 --- a/mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc +++ b/mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc @@ -107,6 +107,7 @@ Key Interactions: * *Prompt System*: Discovery, parameter-based retrieval, change notifications, and content management. * *Tool Execution*: Discovery, parameter validation, timeout-aware execution, and result processing. +[[mcp-client]] == MCP 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: @@ -338,6 +339,7 @@ This capability allows: * Support for both text and image-based interactions * Optional inclusion of MCP server context in prompts +[[mcp-server]] == MCP 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: From e1bdc9881337c41444305741a428b41c418bd4d1 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Fri, 17 Jan 2025 07:11:04 +0100 Subject: [PATCH 008/443] Add a ref docs link in the README --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8b01c23..f6116ae 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,12 @@ # 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) 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. +## 📚 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). + From 6839d3b74005520ea44942927a0634999474567f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dariusz=20J=C4=99drzejczyk?= Date: Mon, 20 Jan 2025 18:33:06 +0100 Subject: [PATCH 009/443] Refactor McpClient for async and sync interactions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduce new builder patterns and enhance type safety - Add new builder patterns for McpClient and McpServer with sync/async variants - Introduce dedicated McpClientFeatures and McpServerFeatures classes - Enhance type safety and reactive support with proper Mono integration - Add migration guide for 0.6.0 release - Mark old builder methods as deprecated - Update documentation to reflect new APIs BREAKING CHANGE: The old builder patterns using McpClient.using() and McpServer.using() are now deprecated in favor of new sync() and async() builders that provide better type safety and clearer sync/async separation. Follow the migration guide. Resolves #48 Signed-off-by: Dariusz Jędrzejczyk Co-authored-by: Christian Tzolov --- mcp-docs/0.6.0-MIGRATION-GUIDE.md | 258 ++++ .../main/antora/modules/ROOT/pages/mcp.adoc | 90 +- .../BlaAbstractMcpAsyncClientTests.java | 46 +- .../client/BlaAbstractMcpSyncClientTests.java | 20 +- .../BlaAbstractMcpAsyncServerTests.java | 170 ++- .../server/BlaAbstractMcpSyncServerTests.java | 121 +- .../ai/mcp/WebFluxSseIntegrationTests.java | 74 +- .../mcp/server/WebMvcSseIntegrationTests.java | 73 +- .../ai/mcp/client/McpAsyncClient.java | 194 ++- .../ai/mcp/client/McpClient.java | 464 ++++++- .../ai/mcp/client/McpClientFeatures.java | 200 +++ .../ai/mcp/client/McpSyncClient.java | 31 +- .../ai/mcp/server/McpAsyncServer.java | 385 ++++-- .../ai/mcp/server/McpServer.java | 1091 +++++++++++++++-- .../ai/mcp/server/McpServerFeatures.java | 399 ++++++ .../ai/mcp/server/McpSyncServer.java | 123 +- .../ai/mcp/spec/DefaultMcpSession.java | 10 +- .../client/AbstractMcpAsyncClientTests.java | 46 +- .../client/AbstractMcpSyncClientTests.java | 20 +- .../McpAsyncClientResponseHandlerTests.java | 44 +- .../server/AbstractMcpAsyncServerTests.java | 169 ++- .../server/AbstractMcpSyncServerTests.java | 122 +- ...letSseServerTransportIntegrationTests.java | 50 +- .../ai/mcp/spec/DefaultMcpSessionTests.java | 2 +- .../ai/mcp/spring/ToolHelper.java | 51 + 25 files changed, 3497 insertions(+), 756 deletions(-) create mode 100644 mcp-docs/0.6.0-MIGRATION-GUIDE.md create mode 100644 mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java create mode 100644 mcp/src/main/java/org/springframework/ai/mcp/server/McpServerFeatures.java diff --git a/mcp-docs/0.6.0-MIGRATION-GUIDE.md b/mcp-docs/0.6.0-MIGRATION-GUIDE.md new file mode 100644 index 0000000..37592d0 --- /dev/null +++ b/mcp-docs/0.6.0-MIGRATION-GUIDE.md @@ -0,0 +1,258 @@ +# Spring AI MCP 0.5.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 + +## Benefits of Migration + +1. **Improved Type Safety**: The new builder patterns and feature classes provide better compile-time type checking. + +2. **Clear Async/Sync Separation**: Distinct builders and features for sync and async operations make the code intent clearer. + +3. **Enhanced Reactive Support**: Async operations now properly integrate with Project Reactor's `Mono` type. + +4. **Better Error Handling**: More consistent error handling across sync and async operations. + +5. **Simplified Configuration**: Builder patterns provide a more intuitive way to configure clients and servers. + +## Additional Notes + +- The migration primarily focuses on builder patterns and feature organization +- Functional behavior remains the same after migration +- Async operations now properly integrate with Project Reactor +- All deprecated APIs will continue to work but will be removed in a future release 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 9faf8fe..dd3ed6f 100644 --- a/mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc +++ b/mcp-docs/src/main/antora/modules/ROOT/pages/mcp.adoc @@ -129,14 +129,14 @@ Sync API:: [source,java] ---- // Create a sync client with custom configuration -McpSyncClient client = McpClient.using(transport) +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)) - .sync(); + .sampling(request -> new CreateMessageResult(response)) + .build(); // Initialize connection client.initialize(); @@ -175,23 +175,23 @@ Async API:: [source,java] ---- // Create an async client with custom configuration -McpAsyncClient client = McpClient.using(transport) +McpAsyncClient client = McpClient.async(transport) .requestTimeout(Duration.ofSeconds(10)) .capabilities(ClientCapabilities.builder() .roots(true) // Enable roots capability .sampling() // Enable sampling capability .build()) - .sampling( request -> new CreateMessageResult(response)) - .toolsChangeConsumer(tools -> { + .sampling(request -> Mono.just(new CreateMessageResult(response))) + .toolsChangeConsumer(tools -> Mono.fromRunnable(() -> { logger.info("Tools updated: {}", tools); - }) - .resourcesChangeConsumer(resources -> { + })) + .resourcesChangeConsumer(resources -> Mono.fromRunnable(() -> { logger.info("Resources updated: {}", resources); - }) - .promptsChangeConsumer(prompts -> { + })) + .promptsChangeConsumer(prompts -> Mono.fromRunnable(() -> { logger.info("Prompts updated: {}", prompts); - }) - .async(); + })) + .build(); // Initialize connection client.initialize() @@ -361,13 +361,13 @@ Sync API:: [source,java] ---- // Create a server with custom configuration -McpSyncServer syncServer = McpServer.using(transport) - .info("my-server", "1.0.0") +McpSyncServer syncServer = McpServer.sync(transport) + .serverInfo("my-server", "1.0.0") .capabilities(ServerCapabilities.builder()...build()) - .tools(new CalculatorTool()) - .resources(resourceRegistration) - .prompts(promptRegistration) - .sync(); + .tools(new McpServerFeatures.SyncToolRegistration(calculatorTool, calculatorHandler)) + .resources(new McpServerFeatures.SyncResourceRegistration(resource, resourceHandler)) + .prompts(new McpServerFeatures.SyncPromptRegistration(prompt, promptHandler)) + .build(); // Add a tool handler at runtime syncServer.addTool(new CalculatorTool()); @@ -396,13 +396,13 @@ Async API:: [source,java] ---- // Create an async server with custom configuration -McpAsyncServer asyncServer = McpServer.using(transport) - .info("my-server", "1.0.0") +McpAsyncServer asyncServer = McpServer.async(transport) + .serverInfo("my-server", "1.0.0") .capabilities(ServerCapabilities.builder()...build()) - .tools(new CalculatorTool()) - .resources(resourceRegistration) - .prompts(promptRegistration) - .async(); + .tools(new McpServerFeatures.AsyncToolRegistration(calculatorTool, args -> Mono.just(calculatorHandler.apply(args)))) + .resources(new McpServerFeatures.AsyncResourceRegistration(resource, req -> Mono.just(resourceHandler.apply(req)))) + .prompts(new McpServerFeatures.AsyncPromptRegistration(prompt, req -> Mono.just(promptHandler.apply(req)))) + .build(); // Add a tool handler at runtime asyncServer.addTool(new CalculatorTool()) @@ -593,7 +593,8 @@ Supported logging levels (in order of increasing severity): DEBUG (0), INFO (1), [source,java] ---- -var toolRegistration = new ToolRegistration( +// Sync tool registration +var syncToolRegistration = new McpServerFeatures.SyncToolRegistration( new Tool("calculator", "Basic calculator", Map.of( "operation", "string", "a", "number", @@ -604,26 +605,50 @@ var toolRegistration = new ToolRegistration( return new CallToolResult(result, false); } ); + +// 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 [source,java] ---- -var resourceRegistration = new ResourceRegistration( +// 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); } ); + +// 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 [source,java] ---- -var promptRegistration = new PromptRegistration( +// Sync prompt registration +var syncPromptRegistration = new McpServerFeatures.SyncPromptRegistration( new Prompt("greeting", "description", List.of( new PromptArgument("name", "description", true) )), @@ -632,6 +657,17 @@ var promptRegistration = new PromptRegistration( return new GetPromptResult(description, messages); } ); + +// 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 diff --git a/mcp-test/src/main/java/org/springframework/ai/mcp/client/BlaAbstractMcpAsyncClientTests.java b/mcp-test/src/main/java/org/springframework/ai/mcp/client/BlaAbstractMcpAsyncClientTests.java index 9477f6b..edceae9 100644 --- a/mcp-test/src/main/java/org/springframework/ai/mcp/client/BlaAbstractMcpAsyncClientTests.java +++ b/mcp-test/src/main/java/org/springframework/ai/mcp/client/BlaAbstractMcpAsyncClientTests.java @@ -25,6 +25,7 @@ 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 reactor.core.publisher.Mono; import reactor.test.StepVerifier; import org.springframework.ai.mcp.spec.ClientMcpTransport; @@ -77,10 +78,10 @@ public abstract class BlaAbstractMcpAsyncClientTests { this.mcpTransport = createMcpTransport(); assertThatCode(() -> { - mcpAsyncClient = McpClient.using(mcpTransport) + mcpAsyncClient = McpClient.async(mcpTransport) .requestTimeout(TIMEOUT) .capabilities(ClientCapabilities.builder().roots(true).build()) - .async(); + .build(); mcpAsyncClient.initialize().block(Duration.ofSeconds(10)); }).doesNotThrowAnyException(); } @@ -96,10 +97,10 @@ public abstract class BlaAbstractMcpAsyncClientTests { @Test void testConstructorWithInvalidArguments() { - assertThatThrownBy(() -> McpClient.using(null).sync()).isInstanceOf(IllegalArgumentException.class) + assertThatThrownBy(() -> McpClient.sync(null).build()).isInstanceOf(IllegalArgumentException.class) .hasMessage("Transport must not be null"); - assertThatThrownBy(() -> McpClient.using(mcpTransport).requestTimeout(null).sync()) + assertThatThrownBy(() -> McpClient.sync(mcpTransport).requestTimeout(null).build()) .isInstanceOf(IllegalArgumentException.class) .hasMessage("Request timeout must not be null"); } @@ -195,10 +196,10 @@ public abstract class BlaAbstractMcpAsyncClientTests { void testInitializeWithRootsListProviders() { var transport = createMcpTransport(); - var client = McpClient.using(transport) + var client = McpClient.async(transport) .requestTimeout(TIMEOUT) .roots(new Root("file:///test/path", "test-root")) - .async(); + .build(); assertThatCode(() -> client.initialize().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); @@ -277,12 +278,12 @@ public abstract class BlaAbstractMcpAsyncClientTests { AtomicBoolean promptsNotificationReceived = new AtomicBoolean(false); var transport = createMcpTransport(); - var client = McpClient.using(transport) + var client = McpClient.async(transport) .requestTimeout(TIMEOUT) - .toolsChangeConsumer(tools -> toolsNotificationReceived.set(true)) - .resourcesChangeConsumer(resources -> resourcesNotificationReceived.set(true)) - .promptsChangeConsumer(prompts -> promptsNotificationReceived.set(true)) - .async(); + .toolsChangeConsumer(tools -> Mono.fromRunnable(() -> toolsNotificationReceived.set(true))) + .resourcesChangeConsumer(resources -> Mono.fromRunnable(() -> resourcesNotificationReceived.set(true))) + .promptsChangeConsumer(prompts -> Mono.fromRunnable(() -> promptsNotificationReceived.set(true))) + .build(); assertThatCode(() -> { client.initialize().block(); @@ -299,9 +300,11 @@ public abstract class BlaAbstractMcpAsyncClientTests { var capabilities = ClientCapabilities.builder().sampling().build(); - var client = McpClient.using(transport).requestTimeout(TIMEOUT).capabilities(capabilities).sampling(request -> { - return CreateMessageResult.builder().message("test").model("test-model").build(); - }).async(); + var client = McpClient.async(transport) + .requestTimeout(TIMEOUT) + .capabilities(capabilities) + .sampling(request -> Mono.just(CreateMessageResult.builder().message("test").model("test-model").build())) + .build(); assertThatCode(() -> { client.initialize().block(Duration.ofSeconds(10)); @@ -319,14 +322,13 @@ public abstract class BlaAbstractMcpAsyncClientTests { .sampling() .build(); - Function samplingHandler = request -> { - return CreateMessageResult.builder().message("test").model("test-model").build(); - }; - var client = McpClient.using(transport) + Function> samplingHandler = request -> Mono + .just(CreateMessageResult.builder().message("test").model("test-model").build()); + var client = McpClient.async(transport) .requestTimeout(TIMEOUT) .capabilities(capabilities) .sampling(samplingHandler) - .async(); + .build(); assertThatCode(() -> { var result = client.initialize().block(Duration.ofSeconds(10)); @@ -353,10 +355,10 @@ public abstract class BlaAbstractMcpAsyncClientTests { AtomicBoolean logReceived = new AtomicBoolean(false); var transport = createMcpTransport(); - var client = McpClient.using(transport) + var client = McpClient.async(transport) .requestTimeout(TIMEOUT) - .loggingConsumer(notification -> logReceived.set(true)) - .async(); + .loggingConsumer(notification -> Mono.fromRunnable(() -> logReceived.set(true))) + .build(); assertThatCode(() -> { client.initialize().block(Duration.ofSeconds(10)); diff --git a/mcp-test/src/main/java/org/springframework/ai/mcp/client/BlaAbstractMcpSyncClientTests.java b/mcp-test/src/main/java/org/springframework/ai/mcp/client/BlaAbstractMcpSyncClientTests.java index 59d1896..26e453c 100644 --- a/mcp-test/src/main/java/org/springframework/ai/mcp/client/BlaAbstractMcpSyncClientTests.java +++ b/mcp-test/src/main/java/org/springframework/ai/mcp/client/BlaAbstractMcpSyncClientTests.java @@ -72,10 +72,10 @@ public abstract class BlaAbstractMcpSyncClientTests { this.mcpTransport = createMcpTransport(); assertThatCode(() -> { - mcpSyncClient = McpClient.using(mcpTransport) + mcpSyncClient = McpClient.sync(mcpTransport) .requestTimeout(TIMEOUT) .capabilities(ClientCapabilities.builder().roots(true).build()) - .sync(); + .build(); mcpSyncClient.initialize(); }).doesNotThrowAnyException(); } @@ -90,10 +90,10 @@ public abstract class BlaAbstractMcpSyncClientTests { @Test void testConstructorWithInvalidArguments() { - assertThatThrownBy(() -> McpClient.using(null).sync()).isInstanceOf(IllegalArgumentException.class) + assertThatThrownBy(() -> McpClient.sync(null).build()).isInstanceOf(IllegalArgumentException.class) .hasMessage("Transport must not be null"); - assertThatThrownBy(() -> McpClient.using(mcpTransport).requestTimeout(null).sync()) + assertThatThrownBy(() -> McpClient.sync(mcpTransport).requestTimeout(null).build()) .isInstanceOf(IllegalArgumentException.class) .hasMessage("Request timeout must not be null"); } @@ -180,10 +180,10 @@ public abstract class BlaAbstractMcpSyncClientTests { void testInitializeWithRootsListProviders() { var transport = createMcpTransport(); - var client = McpClient.using(transport) + var client = McpClient.sync(transport) .requestTimeout(TIMEOUT) .roots(new Root("file:///test/path", "test-root")) - .sync(); + .build(); assertThatCode(() -> { client.initialize(); @@ -262,12 +262,12 @@ public abstract class BlaAbstractMcpSyncClientTests { AtomicBoolean promptsNotificationReceived = new AtomicBoolean(false); var transport = createMcpTransport(); - var client = McpClient.using(transport) + var client = McpClient.sync(transport) .requestTimeout(TIMEOUT) .toolsChangeConsumer(tools -> toolsNotificationReceived.set(true)) .resourcesChangeConsumer(resources -> resourcesNotificationReceived.set(true)) .promptsChangeConsumer(prompts -> promptsNotificationReceived.set(true)) - .sync(); + .build(); assertThatCode(() -> { client.initialize(); @@ -295,10 +295,10 @@ public abstract class BlaAbstractMcpSyncClientTests { AtomicBoolean logReceived = new AtomicBoolean(false); var transport = createMcpTransport(); - var client = McpClient.using(transport) + var client = McpClient.sync(transport) .requestTimeout(TIMEOUT) .loggingConsumer(notification -> logReceived.set(true)) - .sync(); + .build(); assertThatCode(() -> { client.initialize(); diff --git a/mcp-test/src/main/java/org/springframework/ai/mcp/server/BlaAbstractMcpAsyncServerTests.java b/mcp-test/src/main/java/org/springframework/ai/mcp/server/BlaAbstractMcpAsyncServerTests.java index d765e05..807bcc5 100644 --- a/mcp-test/src/main/java/org/springframework/ai/mcp/server/BlaAbstractMcpAsyncServerTests.java +++ b/mcp-test/src/main/java/org/springframework/ai/mcp/server/BlaAbstractMcpAsyncServerTests.java @@ -18,16 +18,13 @@ package org.springframework.ai.mcp.server; import java.time.Duration; import java.util.List; -import java.util.Map; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import reactor.core.publisher.Mono; import reactor.test.StepVerifier; -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.CallToolResult; @@ -82,24 +79,24 @@ public abstract class BlaAbstractMcpAsyncServerTests { @Test void testConstructorWithInvalidArguments() { - assertThatThrownBy(() -> McpServer.using(null)).isInstanceOf(IllegalArgumentException.class) + assertThatThrownBy(() -> McpServer.async(null)).isInstanceOf(IllegalArgumentException.class) .hasMessage("Transport must not be null"); - assertThatThrownBy(() -> McpServer.using(createMcpTransport()).serverInfo((McpSchema.Implementation) null)) + assertThatThrownBy(() -> McpServer.async(createMcpTransport()).serverInfo((McpSchema.Implementation) null)) .isInstanceOf(IllegalArgumentException.class) .hasMessage("Server info must not be null"); } @Test void testGracefulShutdown() { - var mcpAsyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); StepVerifier.create(mcpAsyncServer.closeGracefully()).verifyComplete(); } @Test void testImmediateClose() { - var mcpAsyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThatCode(() -> mcpAsyncServer.close()).doesNotThrowAnyException(); } @@ -118,81 +115,80 @@ public abstract class BlaAbstractMcpAsyncServerTests { @Test void testAddTool() { Tool newTool = new McpSchema.Tool("new-tool", "New test tool", emptyJsonSchema); - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) - .async(); + .build(); - StepVerifier - .create(mcpAsyncServer.addTool(new ToolRegistration(newTool, args -> new CallToolResult(List.of(), false)))) + StepVerifier.create(mcpAsyncServer.addTool(new McpServerFeatures.AsyncToolRegistration(newTool, + args -> Mono.just(new CallToolResult(List.of(), false))))) .verifyComplete(); - assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))); + assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } @Test void testAddDuplicateTool() { Tool duplicateTool = new McpSchema.Tool(TEST_TOOL_NAME, "Duplicate tool", emptyJsonSchema); - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) - .tool(duplicateTool, args -> new CallToolResult(List.of(), false)) - .async(); + .tool(duplicateTool, args -> Mono.just(new CallToolResult(List.of(), false))) + .build(); - StepVerifier - .create(mcpAsyncServer - .addTool(new ToolRegistration(duplicateTool, args -> new CallToolResult(List.of(), false)))) + StepVerifier.create(mcpAsyncServer.addTool(new McpServerFeatures.AsyncToolRegistration(duplicateTool, + args -> Mono.just(new CallToolResult(List.of(), false))))) .verifyErrorSatisfies(error -> { assertThat(error).isInstanceOf(McpError.class) .hasMessage("Tool with name '" + TEST_TOOL_NAME + "' already exists"); }); - assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))); + assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } @Test void testRemoveTool() { Tool too = new McpSchema.Tool(TEST_TOOL_NAME, "Duplicate tool", emptyJsonSchema); - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) - .tool(too, args -> new CallToolResult(List.of(), false)) - .async(); + .tool(too, args -> Mono.just(new CallToolResult(List.of(), false))) + .build(); StepVerifier.create(mcpAsyncServer.removeTool(TEST_TOOL_NAME)).verifyComplete(); - assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))); + assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } @Test void testRemoveNonexistentTool() { - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) - .async(); + .build(); StepVerifier.create(mcpAsyncServer.removeTool("nonexistent-tool")).verifyErrorSatisfies(error -> { assertThat(error).isInstanceOf(McpError.class).hasMessage("Tool with name 'nonexistent-tool' not found"); }); - assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))); + assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } @Test void testNotifyToolsListChanged() { Tool too = new McpSchema.Tool(TEST_TOOL_NAME, "Duplicate tool", emptyJsonSchema); - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) - .tool(too, args -> new CallToolResult(List.of(), false)) - .async(); + .tool(too, args -> Mono.just(new CallToolResult(List.of(), false))) + .build(); StepVerifier.create(mcpAsyncServer.notifyToolsListChanged()).verifyComplete(); - assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))); + assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } // --------------------------------------- @@ -201,24 +197,24 @@ public abstract class BlaAbstractMcpAsyncServerTests { @Test void testNotifyResourcesListChanged() { - var mcpAsyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); StepVerifier.create(mcpAsyncServer.notifyResourcesListChanged()).verifyComplete(); - assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))); + assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } @Test void testAddResource() { - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().resources(true, false).build()) - .async(); + .build(); Resource resource = new Resource(TEST_RESOURCE_URI, "Test Resource", "text/plain", "Test resource description", null); - ResourceRegistration registration = new ResourceRegistration(resource, - req -> new ReadResourceResult(List.of())); + McpServerFeatures.AsyncResourceRegistration registration = new McpServerFeatures.AsyncResourceRegistration( + resource, req -> Mono.just(new ReadResourceResult(List.of()))); StepVerifier.create(mcpAsyncServer.addResource(registration)).verifyComplete(); @@ -227,14 +223,15 @@ public abstract class BlaAbstractMcpAsyncServerTests { @Test void testAddResourceWithNullRegistration() { - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().resources(true, false).build()) - .async(); + .build(); - StepVerifier.create(mcpAsyncServer.addResource(null)).verifyErrorSatisfies(error -> { - assertThat(error).isInstanceOf(McpError.class).hasMessage("Resource must not be null"); - }); + StepVerifier.create(mcpAsyncServer.addResource((McpServerFeatures.AsyncResourceRegistration) null)) + .verifyErrorSatisfies(error -> { + assertThat(error).isInstanceOf(McpError.class).hasMessage("Resource must not be null"); + }); assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } @@ -242,14 +239,14 @@ public abstract class BlaAbstractMcpAsyncServerTests { @Test void testAddResourceWithoutCapability() { // Create a server without resource capabilities - McpAsyncServer serverWithoutResources = McpServer.using(createMcpTransport()) + McpAsyncServer serverWithoutResources = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") - .async(); + .build(); Resource resource = new Resource(TEST_RESOURCE_URI, "Test Resource", "text/plain", "Test resource description", null); - ResourceRegistration registration = new ResourceRegistration(resource, - req -> new ReadResourceResult(List.of())); + McpServerFeatures.AsyncResourceRegistration registration = new McpServerFeatures.AsyncResourceRegistration( + resource, req -> Mono.just(new ReadResourceResult(List.of()))); StepVerifier.create(serverWithoutResources.addResource(registration)).verifyErrorSatisfies(error -> { assertThat(error).isInstanceOf(McpError.class) @@ -260,9 +257,9 @@ public abstract class BlaAbstractMcpAsyncServerTests { @Test void testRemoveResourceWithoutCapability() { // Create a server without resource capabilities - McpAsyncServer serverWithoutResources = McpServer.using(createMcpTransport()) + McpAsyncServer serverWithoutResources = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") - .async(); + .build(); StepVerifier.create(serverWithoutResources.removeResource(TEST_RESOURCE_URI)).verifyErrorSatisfies(error -> { assertThat(error).isInstanceOf(McpError.class) @@ -276,36 +273,37 @@ public abstract class BlaAbstractMcpAsyncServerTests { @Test void testNotifyPromptsListChanged() { - var mcpAsyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); StepVerifier.create(mcpAsyncServer.notifyPromptsListChanged()).verifyComplete(); - assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))); + assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } @Test void testAddPromptWithNullRegistration() { - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().prompts(false).build()) - .async(); + .build(); - StepVerifier.create(mcpAsyncServer.addPrompt(null)).verifyErrorSatisfies(error -> { - assertThat(error).isInstanceOf(McpError.class).hasMessage("Prompt registration must not be null"); - }); + StepVerifier.create(mcpAsyncServer.addPrompt((McpServerFeatures.AsyncPromptRegistration) null)) + .verifyErrorSatisfies(error -> { + assertThat(error).isInstanceOf(McpError.class).hasMessage("Prompt registration must not be null"); + }); } @Test void testAddPromptWithoutCapability() { // Create a server without prompt capabilities - McpAsyncServer serverWithoutPrompts = McpServer.using(createMcpTransport()) + McpAsyncServer serverWithoutPrompts = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") - .async(); + .build(); Prompt prompt = new Prompt(TEST_PROMPT_NAME, "Test Prompt", List.of()); - PromptRegistration registration = new PromptRegistration(prompt, req -> new GetPromptResult( - "Test prompt description", - List.of(new PromptMessage(McpSchema.Role.ASSISTANT, new McpSchema.TextContent("Test content"))))); + McpServerFeatures.AsyncPromptRegistration registration = new McpServerFeatures.AsyncPromptRegistration(prompt, + req -> Mono.just(new GetPromptResult("Test prompt description", List + .of(new PromptMessage(McpSchema.Role.ASSISTANT, new McpSchema.TextContent("Test content")))))); StepVerifier.create(serverWithoutPrompts.addPrompt(registration)).verifyErrorSatisfies(error -> { assertThat(error).isInstanceOf(McpError.class) @@ -316,9 +314,9 @@ public abstract class BlaAbstractMcpAsyncServerTests { @Test void testRemovePromptWithoutCapability() { // Create a server without prompt capabilities - McpAsyncServer serverWithoutPrompts = McpServer.using(createMcpTransport()) + McpAsyncServer serverWithoutPrompts = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") - .async(); + .build(); StepVerifier.create(serverWithoutPrompts.removePrompt(TEST_PROMPT_NAME)).verifyErrorSatisfies(error -> { assertThat(error).isInstanceOf(McpError.class) @@ -331,15 +329,15 @@ public abstract class BlaAbstractMcpAsyncServerTests { String TEST_PROMPT_NAME_TO_REMOVE = "TEST_PROMPT_NAME678"; Prompt prompt = new Prompt(TEST_PROMPT_NAME_TO_REMOVE, "Test Prompt", List.of()); - PromptRegistration registration = new PromptRegistration(prompt, req -> new GetPromptResult( - "Test prompt description", - List.of(new PromptMessage(McpSchema.Role.ASSISTANT, new McpSchema.TextContent("Test content"))))); + McpServerFeatures.AsyncPromptRegistration registration = new McpServerFeatures.AsyncPromptRegistration(prompt, + req -> Mono.just(new GetPromptResult("Test prompt description", List + .of(new PromptMessage(McpSchema.Role.ASSISTANT, new McpSchema.TextContent("Test content")))))); - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().prompts(true).build()) .prompts(registration) - .async(); + .build(); StepVerifier.create(mcpAsyncServer.removePrompt(TEST_PROMPT_NAME_TO_REMOVE)).verifyComplete(); @@ -348,10 +346,10 @@ public abstract class BlaAbstractMcpAsyncServerTests { @Test void testRemoveNonexistentPrompt() { - var mcpAsyncServer2 = McpServer.using(createMcpTransport()) + var mcpAsyncServer2 = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().prompts(true).build()) - .async(); + .build(); StepVerifier.create(mcpAsyncServer2.removePrompt("nonexistent-prompt")).verifyErrorSatisfies(error -> { assertThat(error).isInstanceOf(McpError.class) @@ -372,15 +370,15 @@ public abstract class BlaAbstractMcpAsyncServerTests { var rootsReceived = new McpSchema.Root[1]; var consumerCalled = new boolean[1]; - var singleConsumerServer = McpServer.using(createMcpTransport()) + var singleConsumerServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") - .rootsChangeConsumers(List.of(roots -> { + .rootsChangeConsumers(List.of(roots -> Mono.fromRunnable(() -> { consumerCalled[0] = true; if (!roots.isEmpty()) { rootsReceived[0] = roots.get(0); } - })) - .async(); + }))) + .build(); assertThat(singleConsumerServer).isNotNull(); assertThatCode(() -> singleConsumerServer.closeGracefully().block(Duration.ofSeconds(10))) @@ -392,13 +390,13 @@ public abstract class BlaAbstractMcpAsyncServerTests { var consumer2Called = new boolean[1]; var rootsContent = new List[1]; - var multipleConsumersServer = McpServer.using(createMcpTransport()) + var multipleConsumersServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") - .rootsChangeConsumers(List.of(roots -> { + .rootsChangeConsumers(List.of(roots -> Mono.fromRunnable(() -> { consumer1Called[0] = true; rootsContent[0] = roots; - }, roots -> consumer2Called[0] = true)) - .async(); + }), roots -> Mono.fromRunnable(() -> consumer2Called[0] = true))) + .build(); assertThat(multipleConsumersServer).isNotNull(); assertThatCode(() -> multipleConsumersServer.closeGracefully().block(Duration.ofSeconds(10))) @@ -406,12 +404,12 @@ public abstract class BlaAbstractMcpAsyncServerTests { onClose(); // Test error handling - var errorHandlingServer = McpServer.using(createMcpTransport()) + var errorHandlingServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .rootsChangeConsumers(List.of(roots -> { throw new RuntimeException("Test error"); })) - .async(); + .build(); assertThat(errorHandlingServer).isNotNull(); assertThatCode(() -> errorHandlingServer.closeGracefully().block(Duration.ofSeconds(10))) @@ -419,7 +417,7 @@ public abstract class BlaAbstractMcpAsyncServerTests { onClose(); // Test without consumers - var noConsumersServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").async(); + var noConsumersServer = McpServer.async(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThat(noConsumersServer).isNotNull(); assertThatCode(() -> noConsumersServer.closeGracefully().block(Duration.ofSeconds(10))) @@ -432,10 +430,10 @@ public abstract class BlaAbstractMcpAsyncServerTests { @Test void testLoggingLevels() { - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().logging().build()) - .async(); + .build(); // Test all logging levels for (McpSchema.LoggingLevel level : McpSchema.LoggingLevel.values()) { @@ -451,10 +449,10 @@ public abstract class BlaAbstractMcpAsyncServerTests { @Test void testLoggingWithoutCapability() { - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().build()) // No logging capability - .async(); + .build(); var notification = McpSchema.LoggingMessageNotification.builder() .level(McpSchema.LoggingLevel.INFO) @@ -467,10 +465,10 @@ public abstract class BlaAbstractMcpAsyncServerTests { @Test void testLoggingWithNullNotification() { - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().logging().build()) - .async(); + .build(); StepVerifier.create(mcpAsyncServer.loggingNotification(null)).verifyError(McpError.class); } diff --git a/mcp-test/src/main/java/org/springframework/ai/mcp/server/BlaAbstractMcpSyncServerTests.java b/mcp-test/src/main/java/org/springframework/ai/mcp/server/BlaAbstractMcpSyncServerTests.java index 069dc83..415f08e 100644 --- a/mcp-test/src/main/java/org/springframework/ai/mcp/server/BlaAbstractMcpSyncServerTests.java +++ b/mcp-test/src/main/java/org/springframework/ai/mcp/server/BlaAbstractMcpSyncServerTests.java @@ -23,9 +23,6 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -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.CallToolResult; @@ -81,31 +78,31 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testConstructorWithInvalidArguments() { - assertThatThrownBy(() -> McpServer.using(null)).isInstanceOf(IllegalArgumentException.class) + assertThatThrownBy(() -> McpServer.sync(null)).isInstanceOf(IllegalArgumentException.class) .hasMessage("Transport must not be null"); - assertThatThrownBy(() -> McpServer.using(createMcpTransport()).serverInfo((McpSchema.Implementation) null)) + assertThatThrownBy(() -> McpServer.sync(createMcpTransport()).serverInfo(null)) .isInstanceOf(IllegalArgumentException.class) .hasMessage("Server info must not be null"); } @Test void testGracefulShutdown() { - var mcpSyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var mcpSyncServer = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThatCode(() -> mcpSyncServer.closeGracefully()).doesNotThrowAnyException(); } @Test void testImmediateClose() { - var mcpSyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var mcpSyncServer = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThatCode(() -> mcpSyncServer.close()).doesNotThrowAnyException(); } @Test void testGetAsyncServer() { - var mcpSyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var mcpSyncServer = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThat(mcpSyncServer.getAsyncServer()).isNotNull(); @@ -126,14 +123,14 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testAddTool() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) - .sync(); + .build(); Tool newTool = new McpSchema.Tool("new-tool", "New test tool", emptyJsonSchema); assertThatCode(() -> mcpSyncServer - .addTool(new ToolRegistration(newTool, args -> new CallToolResult(List.of(), false)))) + .addTool(new McpServerFeatures.SyncToolRegistration(newTool, args -> new CallToolResult(List.of(), false)))) .doesNotThrowAnyException(); assertThatCode(() -> mcpSyncServer.closeGracefully()).doesNotThrowAnyException(); @@ -143,14 +140,14 @@ public abstract class BlaAbstractMcpSyncServerTests { void testAddDuplicateTool() { Tool duplicateTool = new McpSchema.Tool(TEST_TOOL_NAME, "Duplicate tool", emptyJsonSchema); - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) .tool(duplicateTool, args -> new CallToolResult(List.of(), false)) - .sync(); + .build(); - assertThatThrownBy(() -> mcpSyncServer - .addTool(new ToolRegistration(duplicateTool, args -> new CallToolResult(List.of(), false)))) + assertThatThrownBy(() -> mcpSyncServer.addTool(new McpServerFeatures.SyncToolRegistration(duplicateTool, + args -> new CallToolResult(List.of(), false)))) .isInstanceOf(McpError.class) .hasMessage("Tool with name '" + TEST_TOOL_NAME + "' already exists"); @@ -161,11 +158,11 @@ public abstract class BlaAbstractMcpSyncServerTests { void testRemoveTool() { Tool tool = new McpSchema.Tool(TEST_TOOL_NAME, "Test tool", emptyJsonSchema); - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) .tool(tool, args -> new CallToolResult(List.of(), false)) - .sync(); + .build(); assertThatCode(() -> mcpSyncServer.removeTool(TEST_TOOL_NAME)).doesNotThrowAnyException(); @@ -174,10 +171,10 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testRemoveNonexistentTool() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) - .sync(); + .build(); assertThatThrownBy(() -> mcpSyncServer.removeTool("nonexistent-tool")).isInstanceOf(McpError.class) .hasMessage("Tool with name 'nonexistent-tool' not found"); @@ -187,7 +184,7 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testNotifyToolsListChanged() { - var mcpSyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var mcpSyncServer = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThatCode(() -> mcpSyncServer.notifyToolsListChanged()).doesNotThrowAnyException(); @@ -200,7 +197,7 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testNotifyResourcesListChanged() { - var mcpSyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var mcpSyncServer = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThatCode(() -> mcpSyncServer.notifyResourcesListChanged()).doesNotThrowAnyException(); @@ -209,15 +206,15 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testAddResource() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().resources(true, false).build()) - .sync(); + .build(); Resource resource = new Resource(TEST_RESOURCE_URI, "Test Resource", "text/plain", "Test resource description", null); - ResourceRegistration registration = new ResourceRegistration(resource, - req -> new ReadResourceResult(List.of())); + McpServerFeatures.SyncResourceRegistration registration = new McpServerFeatures.SyncResourceRegistration( + resource, req -> new ReadResourceResult(List.of())); assertThatCode(() -> mcpSyncServer.addResource(registration)).doesNotThrowAnyException(); @@ -226,12 +223,13 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testAddResourceWithNullRegistration() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().resources(true, false).build()) - .sync(); + .build(); - assertThatThrownBy(() -> mcpSyncServer.addResource(null)).isInstanceOf(McpError.class) + assertThatThrownBy(() -> mcpSyncServer.addResource((McpServerFeatures.SyncResourceRegistration) null)) + .isInstanceOf(McpError.class) .hasMessage("Resource must not be null"); assertThatCode(() -> mcpSyncServer.closeGracefully()).doesNotThrowAnyException(); @@ -239,12 +237,12 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testAddResourceWithoutCapability() { - var serverWithoutResources = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var serverWithoutResources = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); Resource resource = new Resource(TEST_RESOURCE_URI, "Test Resource", "text/plain", "Test resource description", null); - ResourceRegistration registration = new ResourceRegistration(resource, - req -> new ReadResourceResult(List.of())); + McpServerFeatures.SyncResourceRegistration registration = new McpServerFeatures.SyncResourceRegistration( + resource, req -> new ReadResourceResult(List.of())); assertThatThrownBy(() -> serverWithoutResources.addResource(registration)).isInstanceOf(McpError.class) .hasMessage("Server must be configured with resource capabilities"); @@ -252,7 +250,7 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testRemoveResourceWithoutCapability() { - var serverWithoutResources = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var serverWithoutResources = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThatThrownBy(() -> serverWithoutResources.removeResource(TEST_RESOURCE_URI)).isInstanceOf(McpError.class) .hasMessage("Server must be configured with resource capabilities"); @@ -264,7 +262,7 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testNotifyPromptsListChanged() { - var mcpSyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var mcpSyncServer = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThatCode(() -> mcpSyncServer.notifyPromptsListChanged()).doesNotThrowAnyException(); @@ -273,23 +271,24 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testAddPromptWithNullRegistration() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().prompts(false).build()) - .sync(); + .build(); - assertThatThrownBy(() -> mcpSyncServer.addPrompt(null)).isInstanceOf(McpError.class) + assertThatThrownBy(() -> mcpSyncServer.addPrompt((McpServerFeatures.SyncPromptRegistration) null)) + .isInstanceOf(McpError.class) .hasMessage("Prompt registration must not be null"); } @Test void testAddPromptWithoutCapability() { - var serverWithoutPrompts = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var serverWithoutPrompts = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); Prompt prompt = new Prompt(TEST_PROMPT_NAME, "Test Prompt", List.of()); - PromptRegistration registration = new PromptRegistration(prompt, req -> new GetPromptResult( - "Test prompt description", - List.of(new PromptMessage(McpSchema.Role.ASSISTANT, new McpSchema.TextContent("Test content"))))); + McpServerFeatures.SyncPromptRegistration registration = new McpServerFeatures.SyncPromptRegistration(prompt, + req -> new GetPromptResult("Test prompt description", List + .of(new PromptMessage(McpSchema.Role.ASSISTANT, new McpSchema.TextContent("Test content"))))); assertThatThrownBy(() -> serverWithoutPrompts.addPrompt(registration)).isInstanceOf(McpError.class) .hasMessage("Server must be configured with prompt capabilities"); @@ -297,7 +296,7 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testRemovePromptWithoutCapability() { - var serverWithoutPrompts = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var serverWithoutPrompts = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThatThrownBy(() -> serverWithoutPrompts.removePrompt(TEST_PROMPT_NAME)).isInstanceOf(McpError.class) .hasMessage("Server must be configured with prompt capabilities"); @@ -306,15 +305,15 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testRemovePrompt() { Prompt prompt = new Prompt(TEST_PROMPT_NAME, "Test Prompt", List.of()); - PromptRegistration registration = new PromptRegistration(prompt, req -> new GetPromptResult( - "Test prompt description", - List.of(new PromptMessage(McpSchema.Role.ASSISTANT, new McpSchema.TextContent("Test content"))))); + McpServerFeatures.SyncPromptRegistration registration = new McpServerFeatures.SyncPromptRegistration(prompt, + req -> new GetPromptResult("Test prompt description", List + .of(new PromptMessage(McpSchema.Role.ASSISTANT, new McpSchema.TextContent("Test content"))))); - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().prompts(true).build()) .prompts(registration) - .sync(); + .build(); assertThatCode(() -> mcpSyncServer.removePrompt(TEST_PROMPT_NAME)).doesNotThrowAnyException(); @@ -323,10 +322,10 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testRemoveNonexistentPrompt() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().prompts(true).build()) - .sync(); + .build(); assertThatThrownBy(() -> mcpSyncServer.removePrompt("nonexistent-prompt")).isInstanceOf(McpError.class) .hasMessage("Prompt with name 'nonexistent-prompt' not found"); @@ -344,7 +343,7 @@ public abstract class BlaAbstractMcpSyncServerTests { var rootsReceived = new McpSchema.Root[1]; var consumerCalled = new boolean[1]; - var singleConsumerServer = McpServer.using(createMcpTransport()) + var singleConsumerServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .rootsChangeConsumers(List.of(roots -> { consumerCalled[0] = true; @@ -352,7 +351,7 @@ public abstract class BlaAbstractMcpSyncServerTests { rootsReceived[0] = roots.get(0); } })) - .sync(); + .build(); assertThat(singleConsumerServer).isNotNull(); assertThatCode(() -> singleConsumerServer.closeGracefully()).doesNotThrowAnyException(); @@ -363,32 +362,32 @@ public abstract class BlaAbstractMcpSyncServerTests { var consumer2Called = new boolean[1]; var rootsContent = new List[1]; - var multipleConsumersServer = McpServer.using(createMcpTransport()) + var multipleConsumersServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .rootsChangeConsumers(List.of(roots -> { consumer1Called[0] = true; rootsContent[0] = roots; }, roots -> consumer2Called[0] = true)) - .sync(); + .build(); assertThat(multipleConsumersServer).isNotNull(); assertThatCode(() -> multipleConsumersServer.closeGracefully()).doesNotThrowAnyException(); onClose(); // Test error handling - var errorHandlingServer = McpServer.using(createMcpTransport()) + var errorHandlingServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .rootsChangeConsumers(List.of(roots -> { throw new RuntimeException("Test error"); })) - .sync(); + .build(); assertThat(errorHandlingServer).isNotNull(); assertThatCode(() -> errorHandlingServer.closeGracefully()).doesNotThrowAnyException(); onClose(); // Test without consumers - var noConsumersServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var noConsumersServer = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThat(noConsumersServer).isNotNull(); assertThatCode(() -> noConsumersServer.closeGracefully()).doesNotThrowAnyException(); @@ -400,10 +399,10 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testLoggingLevels() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().logging().build()) - .sync(); + .build(); // Test all logging levels for (McpSchema.LoggingLevel level : McpSchema.LoggingLevel.values()) { @@ -419,10 +418,10 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testLoggingWithoutCapability() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().build()) // No logging capability - .sync(); + .build(); var notification = McpSchema.LoggingMessageNotification.builder() .level(McpSchema.LoggingLevel.INFO) @@ -435,10 +434,10 @@ public abstract class BlaAbstractMcpSyncServerTests { @Test void testLoggingWithNullNotification() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().logging().build()) - .sync(); + .build(); assertThatThrownBy(() -> mcpSyncServer.loggingNotification(null)).isInstanceOf(McpError.class); } 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/springframework/ai/mcp/WebFluxSseIntegrationTests.java index 1e3c11a..ca968cf 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/springframework/ai/mcp/WebFluxSseIntegrationTests.java @@ -36,7 +36,7 @@ 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.McpServer.ToolRegistration; +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; @@ -69,7 +69,7 @@ public class WebFluxSseIntegrationTests { private WebFluxSseServerTransport mcpServerTransport; - ConcurrentHashMap clientBulders = new ConcurrentHashMap<>(); + ConcurrentHashMap clientBulders = new ConcurrentHashMap<>(); @BeforeEach public void before() { @@ -80,9 +80,9 @@ public class WebFluxSseIntegrationTests { ReactorHttpHandlerAdapter adapter = new ReactorHttpHandlerAdapter(httpHandler); this.httpServer = HttpServer.create().port(PORT).handle(adapter).bindNow(); - clientBulders.put("httpclient", McpClient.using(new HttpClientSseClientTransport("http://localhost:" + PORT))); - clientBulders.put("webflux", McpClient - .using(new WebFluxSseClientTransport(WebClient.builder().baseUrl("http://localhost:" + PORT)))); + clientBulders.put("httpclient", McpClient.sync(new HttpClientSseClientTransport("http://localhost:" + PORT))); + clientBulders.put("webflux", + McpClient.sync(new WebFluxSseClientTransport(WebClient.builder().baseUrl("http://localhost:" + PORT)))); } @@ -98,7 +98,7 @@ public class WebFluxSseIntegrationTests { // --------------------------------------- @Test void testCreateMessageWithoutInitialization() { - var mcpAsyncServer = McpServer.using(mcpServerTransport).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(mcpServerTransport).serverInfo("test-server", "1.0.0").build(); var messages = List .of(new McpSchema.SamplingMessage(McpSchema.Role.USER, new McpSchema.TextContent("Test message"))); @@ -117,11 +117,11 @@ public class WebFluxSseIntegrationTests { @ValueSource(strings = { "httpclient", "webflux" }) void testCreateMessageWithoutSamplingCapabilities(String clientType) { - var mcpAsyncServer = McpServer.using(mcpServerTransport).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(mcpServerTransport).serverInfo("test-server", "1.0.0").build(); var clientBuilder = clientBulders.get(clientType); - var client = clientBuilder.clientInfo(new McpSchema.Implementation("Sample client", "0.0.0")).sync(); + var client = clientBuilder.clientInfo(new McpSchema.Implementation("Sample client", "0.0.0")).build(); InitializeResult initResult = client.initialize(); assertThat(initResult).isNotNull(); @@ -145,7 +145,7 @@ public class WebFluxSseIntegrationTests { var clientBuilder = clientBulders.get(clientType); - var mcpAsyncServer = McpServer.using(mcpServerTransport).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(mcpServerTransport).serverInfo("test-server", "1.0.0").build(); Function samplingHandler = request -> { assertThat(request.messages()).hasSize(1); @@ -158,7 +158,7 @@ public class WebFluxSseIntegrationTests { var client = clientBuilder.clientInfo(new McpSchema.Implementation("Sample client", "0.0.0")) .capabilities(ClientCapabilities.builder().sampling().build()) .sampling(samplingHandler) - .sync(); + .build(); InitializeResult initResult = client.initialize(); assertThat(initResult).isNotNull(); @@ -191,13 +191,13 @@ public class WebFluxSseIntegrationTests { List roots = List.of(new Root("uri1://", "root1"), new Root("uri2://", "root2")); AtomicReference> rootsRef = new AtomicReference<>(); - var mcpServer = McpServer.using(mcpServerTransport) + var mcpServer = McpServer.sync(mcpServerTransport) .rootsChangeConsumer(rootsUpdate -> rootsRef.set(rootsUpdate)) - .sync(); + .build(); var mcpClient = clientBuilder.capabilities(ClientCapabilities.builder().roots(true).build()) .roots(roots) - .sync(); + .build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -236,14 +236,14 @@ public class WebFluxSseIntegrationTests { void testRootsWithoutCapability(String clientType) { var clientBuilder = clientBulders.get(clientType); - var mcpServer = McpServer.using(mcpServerTransport).rootsChangeConsumer(rootsUpdate -> { - }).sync(); + var mcpServer = McpServer.sync(mcpServerTransport).rootsChangeConsumer(rootsUpdate -> { + }).build(); // Create client without roots capability var mcpClient = clientBuilder.capabilities(ClientCapabilities.builder().build()) // No // roots // capability - .sync(); + .build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -262,13 +262,13 @@ public class WebFluxSseIntegrationTests { var clientBuilder = clientBulders.get(clientType); AtomicReference> rootsRef = new AtomicReference<>(); - var mcpServer = McpServer.using(mcpServerTransport) + var mcpServer = McpServer.sync(mcpServerTransport) .rootsChangeConsumer(rootsUpdate -> rootsRef.set(rootsUpdate)) - .sync(); + .build(); var mcpClient = clientBuilder.capabilities(ClientCapabilities.builder().roots(true).build()) .roots(List.of()) // Empty roots list - .sync(); + .build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -293,14 +293,14 @@ public class WebFluxSseIntegrationTests { AtomicReference> rootsRef1 = new AtomicReference<>(); AtomicReference> rootsRef2 = new AtomicReference<>(); - var mcpServer = McpServer.using(mcpServerTransport) + var mcpServer = McpServer.sync(mcpServerTransport) .rootsChangeConsumer(rootsUpdate -> rootsRef1.set(rootsUpdate)) .rootsChangeConsumer(rootsUpdate -> rootsRef2.set(rootsUpdate)) - .sync(); + .build(); var mcpClient = clientBuilder.capabilities(ClientCapabilities.builder().roots(true).build()) .roots(roots) - .sync(); + .build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -325,13 +325,13 @@ public class WebFluxSseIntegrationTests { List roots = List.of(new Root("uri1://", "root1")); AtomicReference> rootsRef = new AtomicReference<>(); - var mcpServer = McpServer.using(mcpServerTransport) + var mcpServer = McpServer.sync(mcpServerTransport) .rootsChangeConsumer(rootsUpdate -> rootsRef.set(rootsUpdate)) - .sync(); + .build(); var mcpClient = clientBuilder.capabilities(ClientCapabilities.builder().roots(true).build()) .roots(roots) - .sync(); + .build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -368,8 +368,8 @@ public class WebFluxSseIntegrationTests { var clientBuilder = clientBulders.get(clientType); var callResponse = new McpSchema.CallToolResult(List.of(new McpSchema.TextContent("CALL RESPONSE")), null); - ToolRegistration tool1 = new ToolRegistration(new McpSchema.Tool("tool1", "tool1 description", emptyJsonSchema), - request -> { + McpServerFeatures.SyncToolRegistration tool1 = new McpServerFeatures.SyncToolRegistration( + new McpSchema.Tool("tool1", "tool1 description", emptyJsonSchema), request -> { // perform a blocking call to a remote service String response = RestClient.create() .get() @@ -380,12 +380,12 @@ public class WebFluxSseIntegrationTests { return callResponse; }); - var mcpServer = McpServer.using(mcpServerTransport) + var mcpServer = McpServer.sync(mcpServerTransport) .capabilities(ServerCapabilities.builder().tools(true).build()) .tools(tool1) - .sync(); + .build(); - var mcpClient = clientBuilder.sync(); + var mcpClient = clientBuilder.build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -408,8 +408,8 @@ public class WebFluxSseIntegrationTests { var clientBuilder = clientBulders.get(clientType); var callResponse = new McpSchema.CallToolResult(List.of(new McpSchema.TextContent("CALL RESPONSE")), null); - ToolRegistration tool1 = new ToolRegistration(new McpSchema.Tool("tool1", "tool1 description", emptyJsonSchema), - request -> { + McpServerFeatures.SyncToolRegistration tool1 = new McpServerFeatures.SyncToolRegistration( + new McpSchema.Tool("tool1", "tool1 description", emptyJsonSchema), request -> { // perform a blocking call to a remote service String response = RestClient.create() .get() @@ -420,10 +420,10 @@ public class WebFluxSseIntegrationTests { return callResponse; }); - var mcpServer = McpServer.using(mcpServerTransport) + var mcpServer = McpServer.sync(mcpServerTransport) .capabilities(ServerCapabilities.builder().tools(true).build()) .tools(tool1) - .sync(); + .build(); AtomicReference> rootsRef = new AtomicReference<>(); var mcpClient = clientBuilder.toolsChangeConsumer(toolsUpdate -> { @@ -435,7 +435,7 @@ public class WebFluxSseIntegrationTests { .body(String.class); assertThat(response).isNotBlank(); rootsRef.set(toolsUpdate); - }).sync(); + }).build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -458,8 +458,8 @@ public class WebFluxSseIntegrationTests { }); // Add a new tool - ToolRegistration tool2 = new ToolRegistration(new McpSchema.Tool("tool2", "tool2 description", emptyJsonSchema), - request -> callResponse); + McpServerFeatures.SyncToolRegistration tool2 = new McpServerFeatures.SyncToolRegistration( + new McpSchema.Tool("tool2", "tool2 description", emptyJsonSchema), request -> callResponse); mcpServer.addTool(tool2); 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/springframework/ai/mcp/server/WebMvcSseIntegrationTests.java index 6658386..308be78 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/springframework/ai/mcp/server/WebMvcSseIntegrationTests.java @@ -35,7 +35,6 @@ 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.ToolRegistration; import org.springframework.ai.mcp.server.transport.WebMvcSseServerTransport; import org.springframework.ai.mcp.spec.McpError; import org.springframework.ai.mcp.spec.McpSchema; @@ -71,7 +70,7 @@ public class WebMvcSseIntegrationTests { private WebMvcSseServerTransport mcpServerTransport; - McpClient.Builder clientBuilder; + McpClient.SyncSpec clientBuilder; @Configuration @EnableWebMvc @@ -137,7 +136,7 @@ public class WebMvcSseIntegrationTests { throw new RuntimeException("Failed to start Tomcat", e); } - this.clientBuilder = McpClient.using(new HttpClientSseClientTransport("http://localhost:" + PORT)); + this.clientBuilder = McpClient.sync(new HttpClientSseClientTransport("http://localhost:" + PORT)); } @AfterEach @@ -164,7 +163,7 @@ public class WebMvcSseIntegrationTests { // --------------------------------------- @Test void testCreateMessageWithoutInitialization() { - var mcpAsyncServer = McpServer.using(mcpServerTransport).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(mcpServerTransport).serverInfo("test-server", "1.0.0").build(); var messages = List .of(new McpSchema.SamplingMessage(McpSchema.Role.USER, new McpSchema.TextContent("Test message"))); @@ -182,9 +181,9 @@ public class WebMvcSseIntegrationTests { @Test void testCreateMessageWithoutSamplingCapabilities() { - var mcpAsyncServer = McpServer.using(mcpServerTransport).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(mcpServerTransport).serverInfo("test-server", "1.0.0").build(); - var client = clientBuilder.clientInfo(new McpSchema.Implementation("Sample client", "0.0.0")).sync(); + var client = clientBuilder.clientInfo(new McpSchema.Implementation("Sample " + "client", "0.0.0")).build(); InitializeResult initResult = client.initialize(); assertThat(initResult).isNotNull(); @@ -205,7 +204,7 @@ public class WebMvcSseIntegrationTests { @Test void testCreateMessageSuccess() throws InterruptedException { - var mcpAsyncServer = McpServer.using(mcpServerTransport).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(mcpServerTransport).serverInfo("test-server", "1.0.0").build(); Function samplingHandler = request -> { assertThat(request.messages()).hasSize(1); @@ -218,7 +217,7 @@ public class WebMvcSseIntegrationTests { var client = clientBuilder.clientInfo(new McpSchema.Implementation("Sample client", "0.0.0")) .capabilities(ClientCapabilities.builder().sampling().build()) .sampling(samplingHandler) - .sync(); + .build(); InitializeResult initResult = client.initialize(); assertThat(initResult).isNotNull(); @@ -248,13 +247,13 @@ public class WebMvcSseIntegrationTests { List roots = List.of(new Root("uri1://", "root1"), new Root("uri2://", "root2")); AtomicReference> rootsRef = new AtomicReference<>(); - var mcpServer = McpServer.using(mcpServerTransport) + var mcpServer = McpServer.sync(mcpServerTransport) .rootsChangeConsumer(rootsUpdate -> rootsRef.set(rootsUpdate)) - .sync(); + .build(); var mcpClient = clientBuilder.capabilities(ClientCapabilities.builder().roots(true).build()) .roots(roots) - .sync(); + .build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -290,12 +289,12 @@ public class WebMvcSseIntegrationTests { @Test void testRootsWithoutCapability() { - var mcpServer = McpServer.using(mcpServerTransport).rootsChangeConsumer(rootsUpdate -> { - }).sync(); + var mcpServer = McpServer.sync(mcpServerTransport).rootsChangeConsumer(rootsUpdate -> { + }).build(); // Create client without roots capability // No roots capability - var mcpClient = clientBuilder.capabilities(ClientCapabilities.builder().build()).sync(); + var mcpClient = clientBuilder.capabilities(ClientCapabilities.builder().build()).build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -311,13 +310,13 @@ public class WebMvcSseIntegrationTests { @Test void testRootsWithEmptyRootsList() { AtomicReference> rootsRef = new AtomicReference<>(); - var mcpServer = McpServer.using(mcpServerTransport) + var mcpServer = McpServer.sync(mcpServerTransport) .rootsChangeConsumer(rootsUpdate -> rootsRef.set(rootsUpdate)) - .sync(); + .build(); var mcpClient = clientBuilder.capabilities(ClientCapabilities.builder().roots(true).build()) .roots(List.of()) // Empty roots list - .sync(); + .build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -339,14 +338,14 @@ public class WebMvcSseIntegrationTests { AtomicReference> rootsRef1 = new AtomicReference<>(); AtomicReference> rootsRef2 = new AtomicReference<>(); - var mcpServer = McpServer.using(mcpServerTransport) + var mcpServer = McpServer.sync(mcpServerTransport) .rootsChangeConsumer(rootsUpdate -> rootsRef1.set(rootsUpdate)) .rootsChangeConsumer(rootsUpdate -> rootsRef2.set(rootsUpdate)) - .sync(); + .build(); var mcpClient = clientBuilder.capabilities(ClientCapabilities.builder().roots(true).build()) .roots(roots) - .sync(); + .build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -367,13 +366,13 @@ public class WebMvcSseIntegrationTests { List roots = List.of(new Root("uri1://", "root1")); AtomicReference> rootsRef = new AtomicReference<>(); - var mcpServer = McpServer.using(mcpServerTransport) + var mcpServer = McpServer.sync(mcpServerTransport) .rootsChangeConsumer(rootsUpdate -> rootsRef.set(rootsUpdate)) - .sync(); + .build(); var mcpClient = clientBuilder.capabilities(ClientCapabilities.builder().roots(true).build()) .roots(roots) - .sync(); + .build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -407,8 +406,8 @@ public class WebMvcSseIntegrationTests { void testToolCallSuccess() { var callResponse = new McpSchema.CallToolResult(List.of(new McpSchema.TextContent("CALL RESPONSE")), null); - ToolRegistration tool1 = new ToolRegistration(new McpSchema.Tool("tool1", "tool1 description", emptyJsonSchema), - request -> { + McpServerFeatures.SyncToolRegistration tool1 = new McpServerFeatures.SyncToolRegistration( + new McpSchema.Tool("tool1", "tool1 description", emptyJsonSchema), request -> { // perform a blocking call to a remote service String response = RestClient.create() .get() @@ -419,12 +418,12 @@ public class WebMvcSseIntegrationTests { return callResponse; }); - var mcpServer = McpServer.using(mcpServerTransport) + var mcpServer = McpServer.sync(mcpServerTransport) .capabilities(ServerCapabilities.builder().tools(true).build()) .tools(tool1) - .sync(); + .build(); - var mcpClient = clientBuilder.sync(); + var mcpClient = clientBuilder.build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -444,8 +443,8 @@ public class WebMvcSseIntegrationTests { void testToolListChangeHandlingSuccess() { var callResponse = new McpSchema.CallToolResult(List.of(new McpSchema.TextContent("CALL RESPONSE")), null); - ToolRegistration tool1 = new ToolRegistration(new McpSchema.Tool("tool1", "tool1 description", emptyJsonSchema), - request -> { + McpServerFeatures.SyncToolRegistration tool1 = new McpServerFeatures.SyncToolRegistration( + new McpSchema.Tool("tool1", "tool1 description", emptyJsonSchema), request -> { // perform a blocking call to a remote service String response = RestClient.create() .get() @@ -456,10 +455,10 @@ public class WebMvcSseIntegrationTests { return callResponse; }); - var mcpServer = McpServer.using(mcpServerTransport) + var mcpServer = McpServer.sync(mcpServerTransport) .capabilities(ServerCapabilities.builder().tools(true).build()) .tools(tool1) - .sync(); + .build(); AtomicReference> rootsRef = new AtomicReference<>(); var mcpClient = clientBuilder.toolsChangeConsumer(toolsUpdate -> { @@ -471,7 +470,7 @@ public class WebMvcSseIntegrationTests { .body(String.class); assertThat(response).isNotBlank(); rootsRef.set(toolsUpdate); - }).sync(); + }).build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -494,8 +493,8 @@ public class WebMvcSseIntegrationTests { }); // Add a new tool - ToolRegistration tool2 = new ToolRegistration(new McpSchema.Tool("tool2", "tool2 description", emptyJsonSchema), - request -> callResponse); + McpServerFeatures.SyncToolRegistration tool2 = new McpServerFeatures.SyncToolRegistration( + new McpSchema.Tool("tool2", "tool2 description", emptyJsonSchema), request -> callResponse); mcpServer.addTool(tool2); @@ -510,9 +509,9 @@ public class WebMvcSseIntegrationTests { @Test void testInitialize() { - var mcpServer = McpServer.using(mcpServerTransport).sync(); + var mcpServer = McpServer.sync(mcpServerTransport).build(); - var mcpClient = clientBuilder.sync(); + var mcpClient = clientBuilder.build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java b/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java index 7b7958a..22d0804 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java @@ -27,6 +27,7 @@ import java.util.function.Function; import com.fasterxml.jackson.core.type.TypeReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; @@ -55,10 +56,39 @@ import org.springframework.ai.mcp.util.Utils; /** * The Model Context Protocol (MCP) client implementation that provides asynchronous - * communication with MCP servers. + * communication with MCP servers using Project Reactor's Mono and Flux types. + * + *

+ * This client implements the MCP specification, enabling AI models to interact with + * external tools and resources through a standardized interface. Key features include: + *

    + *
  • Asynchronous communication using reactive programming patterns + *
  • Tool discovery and invocation for server-provided functionality + *
  • Resource access and management with URI-based addressing + *
  • Prompt template handling for standardized AI interactions + *
  • Real-time notifications for tools, resources, and prompts changes + *
  • Structured logging with configurable severity levels + *
  • Message sampling for AI model interactions + *
+ * + *

+ * The client follows a lifecycle: + *

    + *
  1. Initialization - Establishes connection and negotiates capabilities + *
  2. Normal Operation - Handles requests and notifications + *
  3. Graceful Shutdown - Ensures clean connection termination + *
+ * + *

+ * This implementation uses Project Reactor for non-blocking operations, making it + * suitable for high-throughput scenarios and reactive applications. All operations return + * Mono or Flux types that can be composed into reactive pipelines. * * @author Dariusz Jędrzejczyk * @author Christian Tzolov + * @see McpClient + * @see McpSchema + * @see DefaultMcpSession */ public class McpAsyncClient { @@ -109,13 +139,96 @@ public class McpAsyncClient { * request text or image-based interactions and optionally include context from MCP * servers in their prompts. */ - private Function samplingHandler; + private Function> samplingHandler; /** * Client transport implementation. */ private final McpTransport transport; + /** + * 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 features the MCP Client supported features. + */ + McpAsyncClient(ClientMcpTransport transport, Duration requestTimeout, McpClientFeatures.Async features) { + + Assert.notNull(transport, "Transport must not be null"); + Assert.notNull(requestTimeout, "Request timeout must not be null"); + + this.clientInfo = features.clientInfo(); + this.clientCapabilities = features.clientCapabilities(); + this.transport = transport; + this.roots = new ConcurrentHashMap<>(features.roots()); + + // 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 (features.samplingHandler() == null) { + throw new McpError("Sampling handler must not be null when client capabilities include sampling"); + } + this.samplingHandler = features.samplingHandler(); + requestHandlers.put(McpSchema.METHOD_SAMPLING_CREATE_MESSAGE, samplingCreateMessageHandler()); + } + + // Notification Handlers + Map notificationHandlers = new HashMap<>(); + + // Tools Change Notification + List, Mono>> toolsChangeConsumersFinal = new ArrayList<>(); + toolsChangeConsumersFinal + .add((notification) -> Mono.fromRunnable(() -> logger.info("Tools changed: {}", notification))); + + if (!Utils.isEmpty(features.toolsChangeConsumers())) { + toolsChangeConsumersFinal.addAll(features.toolsChangeConsumers()); + } + notificationHandlers.put(McpSchema.METHOD_NOTIFICATION_TOOLS_LIST_CHANGED, + asyncToolsChangeNotificationHandler(toolsChangeConsumersFinal)); + + // Resources Change Notification + List, Mono>> resourcesChangeConsumersFinal = new ArrayList<>(); + resourcesChangeConsumersFinal + .add((notification) -> Mono.fromRunnable(() -> logger.info("Resources changed: {}", notification))); + + if (!Utils.isEmpty(features.resourcesChangeConsumers())) { + resourcesChangeConsumersFinal.addAll(features.resourcesChangeConsumers()); + } + + notificationHandlers.put(McpSchema.METHOD_NOTIFICATION_RESOURCES_LIST_CHANGED, + asyncResourcesChangeNotificationHandler(resourcesChangeConsumersFinal)); + + // Prompts Change Notification + List, Mono>> promptsChangeConsumersFinal = new ArrayList<>(); + promptsChangeConsumersFinal + .add((notification) -> Mono.fromRunnable(() -> logger.info("Prompts changed: {}", notification))); + if (!Utils.isEmpty(features.promptsChangeConsumers())) { + promptsChangeConsumersFinal.addAll(features.promptsChangeConsumers()); + } + notificationHandlers.put(McpSchema.METHOD_NOTIFICATION_PROMPTS_LIST_CHANGED, + asyncPromptsChangeNotificationHandler(promptsChangeConsumersFinal)); + + // Utility Logging Notification + List>> loggingConsumersFinal = new ArrayList<>(); + loggingConsumersFinal.add((notification) -> Mono.fromRunnable(() -> logger.info("Logging: {}", notification))); + if (!Utils.isEmpty(features.loggingConsumers())) { + loggingConsumersFinal.addAll(features.loggingConsumers()); + } + notificationHandlers.put(McpSchema.METHOD_NOTIFICATION_MESSAGE, + asyncLoggingNotificationHandler(loggingConsumersFinal)); + + this.mcpSession = new DefaultMcpSession(requestTimeout, transport, requestHandlers, notificationHandlers); + + } + /** * Create a new McpAsyncClient with the given transport and session request-response * timeout. @@ -129,7 +242,9 @@ public class McpAsyncClient { * @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, @@ -153,11 +268,11 @@ public class McpAsyncClient { this.roots = roots != null ? new ConcurrentHashMap<>(roots) : new ConcurrentHashMap<>(); // Request Handlers - Map requestHanlers = new HashMap<>(); + Map> requestHandlers = new HashMap<>(); // Roots List Request Handler - if (this.roots != null && this.clientCapabilities.roots() != null) { - requestHanlers.put(McpSchema.METHOD_ROOTS_LIST, rootsListRequestHandler()); + if (this.clientCapabilities.roots() != null) { + requestHandlers.put(McpSchema.METHOD_ROOTS_LIST, rootsListRequestHandler()); } // Sampling Handler @@ -165,8 +280,9 @@ public class McpAsyncClient { if (samplingHandler == null) { throw new McpError("Sampling handler must not be null when client capabilities include sampling"); } - this.samplingHandler = samplingHandler; - requestHanlers.put(McpSchema.METHOD_SAMPLING_CREATE_MESSAGE, samplingCreateMessageHandler()); + this.samplingHandler = r -> Mono.fromCallable(() -> samplingHandler.apply(r)) + .subscribeOn(Schedulers.boundedElastic()); + requestHandlers.put(McpSchema.METHOD_SAMPLING_CREATE_MESSAGE, samplingCreateMessageHandler()); } // Notification Handlers @@ -208,7 +324,7 @@ public class McpAsyncClient { notificationHandlers.put(McpSchema.METHOD_NOTIFICATION_MESSAGE, loggingNotificationHandler(loggingConsumersFinal)); - this.mcpSession = new DefaultMcpSession(requestTimeout, transport, requestHanlers, notificationHandlers); + this.mcpSession = new DefaultMcpSession(requestTimeout, transport, requestHandlers, notificationHandlers); } @@ -416,15 +532,13 @@ public class McpAsyncClient { // -------------------------- // Sampling // -------------------------- - private RequestHandler samplingCreateMessageHandler() { + private RequestHandler samplingCreateMessageHandler() { return params -> { McpSchema.CreateMessageRequest request = transport.unmarshalFrom(params, new TypeReference() { }); - CreateMessageResult response = this.samplingHandler.apply(request); - - return Mono.just(response); + return this.samplingHandler.apply(request); }; } @@ -500,6 +614,26 @@ public class McpAsyncClient { }).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 + * 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 + */ + private NotificationHandler asyncToolsChangeNotificationHandler( + List, Mono>> toolsChangeConsumers) { + // TODO: params are not used yet + return params -> listTools().flatMap(listToolsResult -> Flux.fromIterable(toolsChangeConsumers) + .flatMap(consumer -> consumer.apply(listToolsResult.tools())) + .then()); + } + // -------------------------- // Resources // -------------------------- @@ -621,6 +755,13 @@ public class McpAsyncClient { }).then(); } + private NotificationHandler asyncResourcesChangeNotificationHandler( + List, Mono>> resourcesChangeConsumers) { + return params -> listResources().flatMap(listResourcesResult -> Flux.fromIterable(resourcesChangeConsumers) + .flatMap(consumer -> consumer.apply(listResourcesResult.resources())) + .then()); + } + // -------------------------- // Prompts // -------------------------- @@ -682,6 +823,13 @@ public class McpAsyncClient { }; // @formatter:on } + private NotificationHandler asyncPromptsChangeNotificationHandler( + List, Mono>> promptsChangeConsumers) { + return params -> listPrompts().flatMap(listPromptsResult -> Flux.fromIterable(promptsChangeConsumers) + .flatMap(consumer -> consumer.apply(listPromptsResult.prompts())) + .then()); + } + // -------------------------- // Logging // -------------------------- @@ -711,6 +859,28 @@ public class McpAsyncClient { }; } + /** + * 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 asyncLoggingNotificationHandler( + List>> loggingConsumers) { + + return params -> { + McpSchema.LoggingMessageNotification loggingMessageNotification = transport.unmarshalFrom(params, + new TypeReference() { + }); + + return Flux.fromIterable(loggingConsumers) + .flatMap(consumer -> consumer.apply(loggingMessageNotification)) + .then(); + }; + } + /** * Client can set the minimum logging level it wants to receive from the server. * @param loggingLevel the min logging level diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClient.java b/mcp/src/main/java/org/springframework/ai/mcp/client/McpClient.java index cac0001..69a811e 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClient.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/client/McpClient.java @@ -24,6 +24,8 @@ import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; +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; @@ -58,24 +60,30 @@ import org.springframework.ai.mcp.util.Assert; * * *

- * Example of creating a basic client:

{@code
- * McpClient.using(transport)
+ * Example of creating a basic synchronous client: 
{@code
+ * McpClient.sync(transport)
  *     .requestTimeout(Duration.ofSeconds(5))
- *     .sync(); // or .async()
+ *     .build();
+ * }
+ * + * Example of creating a basic asynchronous client:
{@code
+ * McpClient.async(transport)
+ *     .requestTimeout(Duration.ofSeconds(5))
+ *     .build();
  * }
* *

- * Example with advanced configuration:

{@code
- * McpClient.using(transport)
+ * Example with advanced asynchronous configuration: 
{@code
+ * McpClient.async(transport)
  *     .requestTimeout(Duration.ofSeconds(10))
  *     .capabilities(new ClientCapabilities(...))
  *     .clientInfo(new Implementation("My Client", "1.0.0"))
  *     .roots(new Root("file://workspace", "Workspace Files"))
- *     .toolsChangeConsumer(tools -> System.out.println("Tools updated: " + tools))
- *     .resourcesChangeConsumer(resources -> System.out.println("Resources updated: " + resources))
- *     .promptsChangeConsumer(prompts -> System.out.println("Prompts updated: " + prompts))
- *     .loggingConsumer(message -> System.out.println("Log message: " + message))
- *     .async();
+ *     .toolsChangeConsumer(tools -> Mono.fromRunnable(() -> System.out.println("Tools updated: " + tools)))
+ *     .resourcesChangeConsumer(resources -> Mono.fromRunnable(() -> System.out.println("Resources updated: " + resources)))
+ *     .promptsChangeConsumer(prompts -> Mono.fromRunnable(() -> System.out.println("Prompts updated: " + prompts)))
+ *     .loggingConsumer(message -> Mono.fromRunnable(() -> System.out.println("Log message: " + message)))
+ *     .build();
  * }
* *

@@ -115,7 +123,11 @@ public interface McpClient { * 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); } @@ -136,7 +148,12 @@ public interface McpClient { *

  • 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; @@ -353,4 +370,431 @@ public interface McpClient { } + /** + * Synchronous client specification. + */ + class SyncSpec { + + 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 SyncSpec(ClientMcpTransport transport) { + 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 SyncSpec 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 SyncSpec 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 SyncSpec 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 SyncSpec 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 SyncSpec 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 SyncSpec 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 SyncSpec 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 SyncSpec 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 SyncSpec 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 SyncSpec 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 SyncSpec loggingConsumers(List> loggingConsumers) { + Assert.notNull(loggingConsumers, "Logging consumers must not be null"); + this.loggingConsumers.addAll(loggingConsumers); + return this; + } + + /** + * Create an instance of {@link McpSyncClient} with the provided configurations or + * sensible defaults. + * @return a new instance of {@link McpSyncClient}. + */ + public McpSyncClient build() { + McpClientFeatures.Sync syncFeatures = new McpClientFeatures.Sync(this.clientInfo, this.capabilities, + this.roots, this.toolsChangeConsumers, this.resourcesChangeConsumers, this.promptsChangeConsumers, + this.loggingConsumers, this.samplingHandler); + + McpClientFeatures.Async asyncFeatures = McpClientFeatures.Async.fromSync(syncFeatures); + + return new McpSyncClient(new McpAsyncClient(transport, this.requestTimeout, asyncFeatures)); + } + + } + + /** + * Asynchronous client specification. + */ + class AsyncSpec { + + 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, Mono>> toolsChangeConsumers = new ArrayList<>(); + + private List, Mono>> resourcesChangeConsumers = new ArrayList<>(); + + private List, Mono>> promptsChangeConsumers = new ArrayList<>(); + + private List>> loggingConsumers = new ArrayList<>(); + + private Function> samplingHandler; + + private AsyncSpec(ClientMcpTransport transport) { + 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 AsyncSpec 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 AsyncSpec 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 AsyncSpec 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 AsyncSpec 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 AsyncSpec 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 AsyncSpec 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 AsyncSpec toolsChangeConsumer(Function, Mono> 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 AsyncSpec resourcesChangeConsumer( + Function, Mono> 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 AsyncSpec promptsChangeConsumer(Function, Mono> 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 AsyncSpec loggingConsumer(Function> 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 AsyncSpec loggingConsumers( + List>> loggingConsumers) { + Assert.notNull(loggingConsumers, "Logging consumers must not be null"); + this.loggingConsumers.addAll(loggingConsumers); + return this; + } + + /** + * Create an instance of {@link McpAsyncClient} with the provided configurations + * or sensible defaults. + * @return a new instance of {@link McpAsyncClient}. + */ + public McpAsyncClient build() { + return new McpAsyncClient(this.transport, this.requestTimeout, + new McpClientFeatures.Async(this.clientInfo, this.capabilities, this.roots, + this.toolsChangeConsumers, this.resourcesChangeConsumers, this.promptsChangeConsumers, + this.loggingConsumers, this.samplingHandler)); + } + + } + + static SyncSpec sync(ClientMcpTransport transport) { + return new SyncSpec(transport); + } + + static AsyncSpec async(ClientMcpTransport transport) { + return new AsyncSpec(transport); + } + } diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java b/mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java new file mode 100644 index 0000000..9277398 --- /dev/null +++ b/mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java @@ -0,0 +1,200 @@ +package org.springframework.ai.mcp.client; + +import java.util.ArrayList; +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 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; + +/** + * Internal representation of features and capabilities for Model Context Protocol (MCP) + * clients. This class provides two record types for managing client features: + *
      + *
    • {@link Async} for non-blocking operations with Project Reactor's Mono responses + *
    • {@link Sync} for blocking operations with direct responses + *
    + * + *

    + * Each feature specification includes: + *

      + *
    • Client implementation information and capabilities + *
    • Root URI mappings for resource access + *
    • Change notification handlers for tools, resources, and prompts + *
    • Logging message consumers + *
    • Message sampling handlers for request processing + *
    + * + *

    + * The class supports conversion between synchronous and asynchronous specifications + * through the {@link Async#fromSync} method, which ensures proper handling of blocking + * operations in non-blocking contexts by scheduling them on a bounded elastic scheduler. + * + * @see McpClient + * @see McpSchema.Implementation + * @see McpSchema.ClientCapabilities + */ +class McpClientFeatures { + + /** + * Asynchronous client features specification providing the capabilities and request + * and notification handlers. + * + * @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. + */ + record Async(McpSchema.Implementation clientInfo, McpSchema.ClientCapabilities clientCapabilities, + Map roots, List, Mono>> toolsChangeConsumers, + List, Mono>> resourcesChangeConsumers, + List, Mono>> promptsChangeConsumers, + List>> loggingConsumers, + Function> samplingHandler) { + + /** + * Create an instance and validate the arguments. + * @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. + */ + public Async(McpSchema.Implementation clientInfo, McpSchema.ClientCapabilities clientCapabilities, + Map roots, + List, Mono>> toolsChangeConsumers, + List, Mono>> resourcesChangeConsumers, + List, Mono>> promptsChangeConsumers, + List>> loggingConsumers, + Function> samplingHandler) { + + Assert.notNull(clientInfo, "Client info must not be null"); + + this.clientInfo = clientInfo; + this.clientCapabilities = (clientCapabilities != null) ? clientCapabilities + : new McpSchema.ClientCapabilities(null, + !Utils.isEmpty(roots) ? new McpSchema.ClientCapabilities.RootCapabilities(false) : null, + samplingHandler != null ? new McpSchema.ClientCapabilities.Sampling() : null); + this.roots = roots != null ? new ConcurrentHashMap<>(roots) : new ConcurrentHashMap<>(); + + this.toolsChangeConsumers = toolsChangeConsumers; + this.resourcesChangeConsumers = resourcesChangeConsumers; + this.promptsChangeConsumers = promptsChangeConsumers; + this.loggingConsumers = loggingConsumers; + this.samplingHandler = samplingHandler; + } + + /** + * Convert a synchronous specification into an asynchronous one and provide + * blocking code offloading to prevent accidental blocking of the non-blocking + * transport. + * @param syncSpec a potentially blocking, synchronous specification. + * @return a specification which is protected from blocking calls specified by the + * user. + */ + public static Async fromSync(Sync syncSpec) { + List, Mono>> toolsChangeConsumers = new ArrayList<>(); + for (Consumer> consumer : syncSpec.toolsChangeConsumers()) { + toolsChangeConsumers.add(t -> Mono.fromRunnable(() -> consumer.accept(t)) + .subscribeOn(Schedulers.boundedElastic())); + } + + List, Mono>> resourcesChangeConsumers = new ArrayList<>(); + for (Consumer> consumer : syncSpec.resourcesChangeConsumers()) { + resourcesChangeConsumers.add(r -> Mono.fromRunnable(() -> consumer.accept(r)) + .subscribeOn(Schedulers.boundedElastic())); + } + + List, Mono>> promptsChangeConsumers = new ArrayList<>(); + + for (Consumer> consumer : syncSpec.promptsChangeConsumers()) { + promptsChangeConsumers.add(p -> Mono.fromRunnable(() -> consumer.accept(p)) + .subscribeOn(Schedulers.boundedElastic())); + } + + List>> loggingConsumers = new ArrayList<>(); + for (Consumer consumer : syncSpec.loggingConsumers()) { + loggingConsumers.add(l -> Mono.fromRunnable(() -> consumer.accept(l)) + .subscribeOn(Schedulers.boundedElastic())); + } + + Function> samplingHandler = r -> Mono + .fromCallable(() -> syncSpec.samplingHandler().apply(r)) + .subscribeOn(Schedulers.boundedElastic()); + return new Async(syncSpec.clientInfo(), syncSpec.clientCapabilities(), syncSpec.roots(), + toolsChangeConsumers, resourcesChangeConsumers, promptsChangeConsumers, loggingConsumers, + samplingHandler); + } + } + + /** + * Synchronous client features specification providing the capabilities and request + * and notification handlers. + * + * @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. + */ + public record Sync(McpSchema.Implementation clientInfo, McpSchema.ClientCapabilities clientCapabilities, + Map roots, List>> toolsChangeConsumers, + List>> resourcesChangeConsumers, + List>> promptsChangeConsumers, + List> loggingConsumers, + Function samplingHandler) { + + /** + * Create an instance and validate the arguments. + * @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. + */ + public Sync(McpSchema.Implementation clientInfo, McpSchema.ClientCapabilities clientCapabilities, + Map roots, List>> toolsChangeConsumers, + List>> resourcesChangeConsumers, + List>> promptsChangeConsumers, + List> loggingConsumers, + Function samplingHandler) { + + Assert.notNull(clientInfo, "Client info must not be null"); + + this.clientInfo = clientInfo; + this.clientCapabilities = (clientCapabilities != null) ? clientCapabilities + : new McpSchema.ClientCapabilities(null, + !Utils.isEmpty(roots) ? new McpSchema.ClientCapabilities.RootCapabilities(false) : null, + samplingHandler != null ? new McpSchema.ClientCapabilities.Sampling() : null); + this.roots = roots != null ? new HashMap<>(roots) : new HashMap<>(); + + this.toolsChangeConsumers = toolsChangeConsumers; + this.resourcesChangeConsumers = resourcesChangeConsumers; + this.promptsChangeConsumers = promptsChangeConsumers; + this.loggingConsumers = loggingConsumers; + this.samplingHandler = samplingHandler; + } + } + +} diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpSyncClient.java b/mcp/src/main/java/org/springframework/ai/mcp/client/McpSyncClient.java index 8cc018a..954f7aa 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpSyncClient.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/client/McpSyncClient.java @@ -29,10 +29,39 @@ import org.springframework.ai.mcp.spec.McpSchema.ListPromptsResult; import org.springframework.ai.mcp.util.Assert; /** - * A synchronous client for the Model Context Protocol (MCP). + * A synchronous client implementation for the Model Context Protocol (MCP) that wraps an + * {@link McpAsyncClient} to provide blocking operations. + * + *

    + * This client implements the MCP specification by delegating to an asynchronous client + * and blocking on the results. Key features include: + *

      + *
    • Synchronous, blocking API for simpler integration in non-reactive applications + *
    • Tool discovery and invocation for server-provided functionality + *
    • Resource access and management with URI-based addressing + *
    • Prompt template handling for standardized AI interactions + *
    • Real-time notifications for tools, resources, and prompts changes + *
    • Structured logging with configurable severity levels + *
    + * + *

    + * The client follows the same lifecycle as its async counterpart: + *

      + *
    1. Initialization - Establishes connection and negotiates capabilities + *
    2. Normal Operation - Handles requests and notifications + *
    3. Graceful Shutdown - Ensures clean connection termination + *
    + * + *

    + * This implementation implements {@link AutoCloseable} for resource cleanup and provides + * both immediate and graceful shutdown options. All operations block until completion or + * timeout, making it suitable for traditional synchronous programming models. * * @author Dariusz Jędrzejczyk * @author Christian Tzolov + * @see McpClient + * @see McpAsyncClient + * @see McpSchema */ public class McpSyncClient implements AutoCloseable { diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java b/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java index 37d0c65..d5e3043 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java @@ -24,10 +24,12 @@ 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.slf4j.Logger; import org.slf4j.LoggerFactory; +import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; @@ -48,9 +50,43 @@ import org.springframework.ai.mcp.util.Utils; /** * The Model Context Protocol (MCP) server implementation that provides asynchronous - * communication. + * communication using Project Reactor's Mono and Flux types. + * + *

    + * This server implements the MCP specification, enabling AI models to expose tools, + * resources, and prompts through a standardized interface. Key features include: + *

      + *
    • Asynchronous communication using reactive programming patterns + *
    • Dynamic tool registration and management + *
    • Resource handling with URI-based addressing + *
    • Prompt template management + *
    • Real-time client notifications for state changes + *
    • Structured logging with configurable severity levels + *
    • Support for client-side AI model sampling + *
    + * + *

    + * The server follows a lifecycle: + *

      + *
    1. Initialization - Accepts client connections and negotiates capabilities + *
    2. Normal Operation - Handles client requests and sends notifications + *
    3. Graceful Shutdown - Ensures clean connection termination + *
    + * + *

    + * This implementation uses Project Reactor for non-blocking operations, making it + * suitable for high-throughput scenarios and reactive applications. All operations return + * Mono or Flux types that can be composed into reactive pipelines. + * + *

    + * The server supports runtime modification of its capabilities through methods like + * {@link #addTool}, {@link #addResource}, and {@link #addPrompt}, automatically notifying + * connected clients of changes when configured to do so. * * @author Christian Tzolov + * @see McpServer + * @see McpSchema + * @see DefaultMcpSession */ public class McpAsyncServer { @@ -75,16 +111,84 @@ public class McpAsyncServer { /** * Thread-safe list of tool handlers that can be modified at runtime. */ - private final CopyOnWriteArrayList tools; + private final CopyOnWriteArrayList tools = new CopyOnWriteArrayList<>(); - private final CopyOnWriteArrayList resourceTemplates; + private final CopyOnWriteArrayList resourceTemplates = new CopyOnWriteArrayList<>(); - private final ConcurrentHashMap resources; + private final ConcurrentHashMap resources = new ConcurrentHashMap<>(); - private final ConcurrentHashMap prompts; + private final ConcurrentHashMap prompts = new ConcurrentHashMap<>(); private LoggingLevel minLoggingLevel = LoggingLevel.DEBUG; + /** + * Create a new McpAsyncServer with the given transport and capabilities. + * @param mcpTransport The transport layer implementation for MCP communication. + * @param features The MCP server supported features. + */ + McpAsyncServer(ServerMcpTransport mcpTransport, McpServerFeatures.Async features) { + this.serverInfo = features.serverInfo(); + this.serverCapabilities = features.serverCapabilities(); + this.tools.addAll(features.tools()); + this.resources.putAll(features.resources()); + this.resourceTemplates.addAll(features.resourceTemplates()); + this.prompts.putAll(features.prompts()); + + 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()); + + List, Mono>> rootsChangeConsumers = features.rootsChangeConsumers(); + + if (Utils.isEmpty(rootsChangeConsumers)) { + rootsChangeConsumers = List.of((roots) -> Mono.fromRunnable(() -> logger + .warn("Roots list changed notification, but no consumers provided. Roots list changed: {}", roots))); + } + + notificationHandlers.put(McpSchema.METHOD_NOTIFICATION_ROOTS_LIST_CHANGED, + asyncRootsListChangedNotificationHandler(rootsChangeConsumers)); + + this.transport = mcpTransport; + this.mcpSession = new DefaultMcpSession(Duration.ofSeconds(10), mcpTransport, requestHandlers, + notificationHandlers); + } + /** * Create a new McpAsyncServer with the given transport and capabilities. * @param mcpTransport The transport layer implementation for MCP communication @@ -96,18 +200,28 @@ public class McpAsyncServer { * @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.serverInfo = serverInfo; - this.tools = new CopyOnWriteArrayList<>(tools != null ? tools : List.of()); - this.resources = !Utils.isEmpty(resources) ? new ConcurrentHashMap<>(resources) : new ConcurrentHashMap<>(); - this.resourceTemplates = !Utils.isEmpty(resourceTemplates) ? new CopyOnWriteArrayList<>(resourceTemplates) - : new CopyOnWriteArrayList<>(); - this.prompts = !Utils.isEmpty(prompts) ? new ConcurrentHashMap<>(prompts) : new ConcurrentHashMap<>(); + 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 @@ -118,13 +232,13 @@ public class McpAsyncServer { : null, !Utils.isEmpty(this.tools) ? new McpSchema.ServerCapabilities.ToolCapabilities(false) : null); - Map requestHandlers = new HashMap<>(); + 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("")); + requestHandlers.put(McpSchema.METHOD_PING, (params) -> Mono.just("")); // Add tools API handlers if the tool capability is enabled if (this.serverCapabilities.tools() != null) { @@ -173,7 +287,7 @@ public class McpAsyncServer { // --------------------------------------- // Lifecycle Management // --------------------------------------- - private DefaultMcpSession.RequestHandler initializeRequestHandler() { + private DefaultMcpSession.RequestHandler initializeRequestHandler() { return params -> { McpSchema.InitializeRequest initializeRequest = transport.unmarshalFrom(params, new TypeReference() { @@ -187,14 +301,13 @@ public class McpAsyncServer { initializeRequest.clientInfo()); if (!McpSchema.LATEST_PROTOCOL_VERSION.equals(initializeRequest.protocolVersion())) { - return Mono - .error(new McpError( - "Unsupported protocol version from client: " + 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, + .just(new McpSchema.InitializeResult(McpSchema.LATEST_PROTOCOL_VERSION, this.serverCapabilities, this.serverInfo, null)) .publishOn(Schedulers.boundedElastic()); }; @@ -268,6 +381,7 @@ public class McpAsyncServer { LIST_ROOTS_RESULT_TYPE_REF); } + @Deprecated private NotificationHandler rootsListChnagedNotificationHandler( List>> rootsChangeConsumers) { @@ -281,6 +395,13 @@ public class McpAsyncServer { }; } + private NotificationHandler asyncRootsListChangedNotificationHandler( + List, Mono>> rootsChangeConsumers) { + return params -> listRoots().flatMap(listRootsResult -> Flux.fromIterable(rootsChangeConsumers) + .flatMap(consumer -> consumer.apply(listRootsResult.roots())) + .then()); + } + // --------------------------------------- // Tool Management // --------------------------------------- @@ -290,6 +411,44 @@ public class McpAsyncServer { * @param toolRegistration The tool registration to add * @return Mono that completes when clients have been notified of the change */ + public Mono addTool(McpServerFeatures.AsyncToolRegistration 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")); + } + + return Mono.defer(() -> { + // 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(toolRegistration); + logger.info("Added tool handler: {}", toolRegistration.tool().name()); + + if (this.serverCapabilities.tools().listChanged()) { + return notifyToolsListChanged(); + } + return Mono.empty(); + }); + } + + /** + * 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")); @@ -309,7 +468,7 @@ public class McpAsyncServer { return Mono.error(new McpError("Tool with name '" + toolRegistration.tool().name() + "' already exists")); } - this.tools.add(toolRegistration); + this.tools.add(McpServer.mapDeprecatedTool(toolRegistration)); logger.info("Added tool handler: {}", toolRegistration.tool().name()); if (this.serverCapabilities.tools().listChanged()) { return notifyToolsListChanged(); @@ -330,15 +489,17 @@ public class McpAsyncServer { return Mono.error(new McpError("Server must be configured with tool capabilities")); } - boolean removed = this.tools.removeIf(toolRegistration -> toolRegistration.tool().name().equals(toolName)); - if (removed) { - logger.info("Removed tool handler: {}", toolName); - if (this.serverCapabilities.tools().listChanged()) { - return notifyToolsListChanged(); + return Mono.defer(() -> { + boolean removed = this.tools.removeIf(toolRegistration -> toolRegistration.tool().name().equals(toolName)); + if (removed) { + logger.info("Removed tool handler: {}", toolName); + if (this.serverCapabilities.tools().listChanged()) { + return notifyToolsListChanged(); + } + return Mono.empty(); } - return Mono.empty(); - } - return Mono.error(new McpError("Tool with name '" + toolName + "' not found")); + return Mono.error(new McpError("Tool with name '" + toolName + "' not found")); + }); } /** @@ -349,32 +510,30 @@ public class McpAsyncServer { return this.mcpSession.sendNotification(McpSchema.METHOD_NOTIFICATION_TOOLS_LIST_CHANGED, null); } - private DefaultMcpSession.RequestHandler toolsListRequestHandler() { + private DefaultMcpSession.RequestHandler toolsListRequestHandler() { return params -> { - - List tools = this.tools.stream().map(ToolRegistration::tool).toList(); + List tools = this.tools.stream().map(McpServerFeatures.AsyncToolRegistration::tool).toList(); return Mono.just(new McpSchema.ListToolsResult(tools, null)); }; } - private DefaultMcpSession.RequestHandler toolsCallRequestHandler() { + private DefaultMcpSession.RequestHandler toolsCallRequestHandler() { return params -> { McpSchema.CallToolRequest callToolRequest = transport.unmarshalFrom(params, new TypeReference() { }); - Optional toolRegistration = this.tools.stream() + Optional toolRegistration = this.tools.stream() .filter(tr -> callToolRequest.name().equals(tr.tool().name())) .findAny(); if (toolRegistration.isEmpty()) { - return Mono.error(new McpError("Tool not found: " + callToolRequest.name())); + return Mono.error(new McpError("Tool not found: " + callToolRequest.name())); } - return Mono.fromCallable(() -> toolRegistration.get().call().apply(callToolRequest.arguments())) - .map(result -> (Object) result) - .subscribeOn(Schedulers.boundedElastic()); + return toolRegistration.map(tool -> tool.call().apply(callToolRequest.arguments())) + .orElse(Mono.error(new McpError("Tool not found: " + callToolRequest.name()))); }; } @@ -387,6 +546,35 @@ public class McpAsyncServer { * @param resourceHandler The resource handler to add * @return Mono that completes when clients have been notified of the change */ + public Mono addResource(McpServerFeatures.AsyncResourceRegistration 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")); + } + + return Mono.defer(() -> { + if (this.resources.putIfAbsent(resourceHandler.resource().uri(), resourceHandler) != null) { + return Mono + .error(new McpError("Resource with URI '" + resourceHandler.resource().uri() + "' already exists")); + } + logger.info("Added resource handler: {}", resourceHandler.resource().uri()); + if (this.serverCapabilities.resources().listChanged()) { + return notifyResourcesListChanged(); + } + return Mono.empty(); + }); + } + + /** + * 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")); @@ -401,7 +589,7 @@ public class McpAsyncServer { .error(new McpError("Resource with URI '" + resourceHandler.resource().uri() + "' already exists")); } - this.resources.put(resourceHandler.resource().uri(), resourceHandler); + this.resources.put(resourceHandler.resource().uri(), McpServer.mapDeprecatedResource(resourceHandler)); logger.info("Added resource handler: {}", resourceHandler.resource().uri()); if (this.serverCapabilities.resources().listChanged()) { return notifyResourcesListChanged(); @@ -422,15 +610,17 @@ public class McpAsyncServer { return Mono.error(new McpError("Server must be configured with resource capabilities")); } - ResourceRegistration removed = this.resources.remove(resourceUri); - if (removed != null) { - logger.info("Removed resource handler: {}", resourceUri); - if (this.serverCapabilities.resources().listChanged()) { - return notifyResourcesListChanged(); + return Mono.defer(() -> { + McpServerFeatures.AsyncResourceRegistration removed = this.resources.remove(resourceUri); + if (removed != null) { + logger.info("Removed resource handler: {}", resourceUri); + if (this.serverCapabilities.resources().listChanged()) { + return notifyResourcesListChanged(); + } + return Mono.empty(); } - return Mono.empty(); - } - return Mono.error(new McpError("Resource with URI '" + resourceUri + "' not found")); + return Mono.error(new McpError("Resource with URI '" + resourceUri + "' not found")); + }); } /** @@ -441,28 +631,30 @@ public class McpAsyncServer { return this.mcpSession.sendNotification(McpSchema.METHOD_NOTIFICATION_RESOURCES_LIST_CHANGED, null); } - private DefaultMcpSession.RequestHandler resourcesListRequestHandler() { + private DefaultMcpSession.RequestHandler resourcesListRequestHandler() { return params -> { - var resourceList = this.resources.values().stream().map(ResourceRegistration::resource).toList(); + var resourceList = this.resources.values() + .stream() + .map(McpServerFeatures.AsyncResourceRegistration::resource) + .toList(); return Mono.just(new McpSchema.ListResourcesResult(resourceList, null)); }; } - private DefaultMcpSession.RequestHandler resourceTemplateListRequestHandler() { + private DefaultMcpSession.RequestHandler resourceTemplateListRequestHandler() { return params -> Mono.just(new McpSchema.ListResourceTemplatesResult(this.resourceTemplates, null)); } - private DefaultMcpSession.RequestHandler resourcesReadRequestHandler() { + private DefaultMcpSession.RequestHandler resourcesReadRequestHandler() { return params -> { McpSchema.ReadResourceRequest resourceRequest = transport.unmarshalFrom(params, new TypeReference() { }); var resourceUri = resourceRequest.uri(); - if (this.resources.containsKey(resourceUri)) { - return Mono.fromCallable(() -> this.resources.get(resourceUri).readHandler().apply(resourceRequest)) - .map(result -> (Object) result) - .subscribeOn(Schedulers.boundedElastic()); + McpServerFeatures.AsyncResourceRegistration registration = this.resources.get(resourceUri); + if (registration != null) { + return this.resources.get(resourceUri).readHandler().apply(resourceRequest); } return Mono.error(new McpError("Resource not found: " + resourceUri)); }; @@ -477,6 +669,41 @@ public class McpAsyncServer { * @param promptRegistration The prompt handler to add * @return Mono that completes when clients have been notified of the change */ + public Mono addPrompt(McpServerFeatures.AsyncPromptRegistration 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")); + } + + return Mono.defer(() -> { + McpServerFeatures.AsyncPromptRegistration registration = this.prompts + .putIfAbsent(promptRegistration.prompt().name(), promptRegistration); + if (registration != null) { + return Mono.error( + new McpError("Prompt with name '" + promptRegistration.prompt().name() + "' already exists")); + } + + 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(); + }); + } + + /** + * 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")); @@ -490,7 +717,7 @@ public class McpAsyncServer { .error(new McpError("Prompt with name '" + promptRegistration.prompt().name() + "' already exists")); } - this.prompts.put(promptRegistration.prompt().name(), promptRegistration); + this.prompts.put(promptRegistration.prompt().name(), McpServer.mapDeprecatedPrompt(promptRegistration)); logger.info("Added prompt handler: {}", promptRegistration.prompt().name()); @@ -515,18 +742,20 @@ public class McpAsyncServer { return Mono.error(new McpError("Server must be configured with prompt capabilities")); } - PromptRegistration removed = this.prompts.remove(promptName); + return Mono.defer(() -> { + McpServerFeatures.AsyncPromptRegistration removed = this.prompts.remove(promptName); - if (removed != null) { - logger.info("Removed prompt handler: {}", promptName); - // Servers that declared the listChanged capability SHOULD send a - // notification, when the list of available prompts changes - if (this.serverCapabilities.prompts().listChanged()) { - return this.notifyPromptsListChanged(); + if (removed != null) { + logger.info("Removed prompt handler: {}", promptName); + // Servers that declared the listChanged capability SHOULD send a + // notification, when the list of available prompts changes + if (this.serverCapabilities.prompts().listChanged()) { + return this.notifyPromptsListChanged(); + } + return Mono.empty(); } - return Mono.empty(); - } - return Mono.error(new McpError("Prompt with name '" + promptName + "' not found")); + return Mono.error(new McpError("Prompt with name '" + promptName + "' not found")); + }); } /** @@ -537,34 +766,35 @@ public class McpAsyncServer { return this.mcpSession.sendNotification(McpSchema.METHOD_NOTIFICATION_PROMPTS_LIST_CHANGED, null); } - private DefaultMcpSession.RequestHandler promptsListRequestHandler() { + private DefaultMcpSession.RequestHandler promptsListRequestHandler() { return params -> { // TODO: Implement pagination // McpSchema.PaginatedRequest request = transport.unmarshalFrom(params, // new TypeReference() { // }); - var promptList = this.prompts.values().stream().map(PromptRegistration::prompt).toList(); + var promptList = this.prompts.values() + .stream() + .map(McpServerFeatures.AsyncPromptRegistration::prompt) + .toList(); return Mono.just(new McpSchema.ListPromptsResult(promptList, null)); }; } - private DefaultMcpSession.RequestHandler promptsGetRequestHandler() { + private DefaultMcpSession.RequestHandler promptsGetRequestHandler() { return params -> { McpSchema.GetPromptRequest promptRequest = transport.unmarshalFrom(params, new TypeReference() { }); // Implement prompt retrieval logic here - if (this.prompts.containsKey(promptRequest.name())) { - return Mono - .fromCallable(() -> this.prompts.get(promptRequest.name()).promptHandler().apply(promptRequest)) - .map(result -> (Object) result) - .subscribeOn(Schedulers.boundedElastic()); + McpServerFeatures.AsyncPromptRegistration registration = this.prompts.get(promptRequest.name()); + if (registration == null) { + return Mono.error(new McpError("Prompt not found: " + promptRequest.name())); } - return Mono.error(new McpError("Prompt not found: " + promptRequest.name())); + return registration.promptHandler().apply(promptRequest); }; } @@ -600,13 +830,10 @@ public class McpAsyncServer { * not be sent. * @return A handler that processes logging level change requests */ - private DefaultMcpSession.RequestHandler setLoggerRequestHandler() { + private DefaultMcpSession.RequestHandler setLoggerRequestHandler() { return params -> { - McpSchema.LoggingLevel setLoggerRequest = transport.unmarshalFrom(params, - new TypeReference() { - }); - - this.minLoggingLevel = setLoggerRequest; + this.minLoggingLevel = transport.unmarshalFrom(params, new TypeReference() { + }); return Mono.empty(); }; @@ -615,7 +842,7 @@ public class McpAsyncServer { // --------------------------------------- // Sampling // --------------------------------------- - private static TypeReference CREATE_MESSAGE_RESULT_TYPE_REF = new TypeReference<>() { + private static final TypeReference CREATE_MESSAGE_RESULT_TYPE_REF = new TypeReference<>() { }; /** diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java b/mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java index e5fec07..1fbf47b 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java @@ -22,11 +22,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 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.McpSchema.Tool; import org.springframework.ai.mcp.spec.McpTransport; import org.springframework.ai.mcp.spec.ServerMcpTransport; import org.springframework.ai.mcp.util.Assert; @@ -47,6 +50,18 @@ import org.springframework.ai.mcp.util.Assert; * * *

    + * Thread Safety: Both synchronous and asynchronous server implementations are + * thread-safe. The synchronous server processes requests sequentially, while the + * asynchronous server can handle concurrent requests safely through its reactive + * programming model. + * + *

    + * Error Handling: The server implementations provide robust error handling through the + * McpError class. Errors are properly propagated to clients while maintaining the + * server's stability. Server implementations should use appropriate error codes and + * provide meaningful error messages to help diagnose issues. + * + *

    * The class provides factory methods to create either: *

      *
    • {@link McpAsyncServer} for non-blocking operations with CompletableFuture responses @@ -54,28 +69,40 @@ import org.springframework.ai.mcp.util.Assert; *
    * *

    - * Example of creating a basic server:

    {@code
    - * McpServer.using(transport)
    - *     .info("my-server", "1.0.0")
    + * Example of creating a basic synchronous server: 
    {@code
    + * McpServer.sync(transport)
    + *     .serverInfo("my-server", "1.0.0")
      *     .tool(new Tool("calculator", "Performs calculations", schema),
      *           args -> new CallToolResult("Result: " + calculate(args)))
    - *     .sync(); // or .async()
    + *     .build();
    + * }
    + * + * Example of creating a basic asynchronous server:
    {@code
    + * McpServer.async(transport)
    + *     .serverInfo("my-server", "1.0.0")
    + *     .tool(new Tool("calculator", "Performs calculations", schema),
    + *           args -> Mono.just(new CallToolResult("Result: " + calculate(args))))
    + *     .build();
      * }
    * *

    - * Example with comprehensive configuration:

    {@code
    - * McpServer.using(transport)
    - *     .info("advanced-server", "2.0.0")
    + * Example with comprehensive asynchronous configuration: 
    {@code
    + * McpServer.async(transport)
    + *     .serverInfo("advanced-server", "2.0.0")
      *     .capabilities(new ServerCapabilities(...))
      *     // Register tools
      *     .tools(
    - *         new ToolRegistration(calculatorTool, calculatorHandler),
    - *         new ToolRegistration(weatherTool, weatherHandler)
    + *         new McpServerFeatures.AsyncToolRegistration(calculatorTool,
    + *             args -> Mono.just(new CallToolResult("Result: " + calculate(args)))),
    + *         new McpServerFeatures.AsyncToolRegistration(weatherTool,
    + *             args -> Mono.just(new CallToolResult("Weather: " + getWeather(args))))
      *     )
      *     // Register resources
      *     .resources(
    - *         new ResourceRegistration(fileResource, fileHandler),
    - *         new ResourceRegistration(dbResource, dbHandler)
    + *         new McpServerFeatures.AsyncResourceRegistration(fileResource,
    + *             req -> Mono.just(new ReadResourceResult(readFile(req)))),
    + *         new McpServerFeatures.AsyncResourceRegistration(dbResource,
    + *             req -> Mono.just(new ReadResourceResult(queryDb(req))))
      *     )
      *     // Add resource templates
      *     .resourceTemplates(
    @@ -84,10 +111,12 @@ import org.springframework.ai.mcp.util.Assert;
      *     )
      *     // Register prompts
      *     .prompts(
    - *         new PromptRegistration(analysisPrompt, analysisHandler),
    - *         new PromptRegistration(summaryPrompt, summaryHandler)
    + *         new McpServerFeatures.AsyncPromptRegistration(analysisPrompt,
    + *             req -> Mono.just(new GetPromptResult(generateAnalysisPrompt(req)))),
    + *         new McpServerFeatures.AsyncPromptRegistration(summaryPrompt,
    + *             req -> Mono.just(new GetPromptResult(generateSummaryPrompt(req))))
      *     )
    - *     .async();
    + *     .build();
      * }
    * * @author Christian Tzolov @@ -97,115 +126,804 @@ import org.springframework.ai.mcp.util.Assert; */ public interface McpServer { - /** - * 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 - */ - public static record ToolRegistration(Tool tool, Function, 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 - */ - 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 - */ - public static record PromptRegistration(McpSchema.Prompt prompt, - Function promptHandler) { - } - /** * 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); } /** - * Builder class for creating MCP servers with custom configuration. + * Asynchronous server specification. */ + class AsyncSpec { + + 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 final 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 final Map prompts = new HashMap<>(); + + private final List, Mono>> rootsChangeConsumers = new ArrayList<>(); + + private AsyncSpec(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 AsyncSpec 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 AsyncSpec 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 AsyncSpec 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 McpServerFeatures.AsyncToolRegistration} explicitly. + * + *

    + * Example usage:

    {@code
    +		 * .tool(
    +		 *     new Tool("calculator", "Performs calculations", schema),
    +		 *     args -> Mono.just(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 AsyncSpec tool(McpSchema.Tool tool, Function, Mono> handler) { + Assert.notNull(tool, "Tool must not be null"); + Assert.notNull(handler, "Handler must not be null"); + + this.tools.add(new McpServerFeatures.AsyncToolRegistration(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(McpServerFeatures.AsyncToolRegistration...) + */ + public AsyncSpec 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 McpServerFeatures.AsyncToolRegistration(calculatorTool, calculatorHandler),
    +		 *     new McpServerFeatures.AsyncToolRegistration(weatherTool, weatherHandler),
    +		 *     new McpServerFeatures.AsyncToolRegistration(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 AsyncSpec tools(McpServerFeatures.AsyncToolRegistration... toolRegistrations) { + for (McpServerFeatures.AsyncToolRegistration 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(McpServerFeatures.AsyncResourceRegistration...) + */ + public AsyncSpec 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(McpServerFeatures.AsyncResourceRegistration...) + */ + public AsyncSpec resources(List resourceRegsitrations) { + Assert.notNull(resourceRegsitrations, "Resource handlers list must not be null"); + for (McpServerFeatures.AsyncResourceRegistration 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 McpServerFeatures.AsyncResourceRegistration(fileResource, fileHandler),
    +		 *     new McpServerFeatures.AsyncResourceRegistration(dbResource, dbHandler),
    +		 *     new McpServerFeatures.AsyncResourceRegistration(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 AsyncSpec resources(McpServerFeatures.AsyncResourceRegistration... resourceRegistrations) { + Assert.notNull(resourceRegistrations, "Resource handlers list must not be null"); + for (McpServerFeatures.AsyncResourceRegistration 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 AsyncSpec resourceTemplates(List resourceTemplates) { + this.resourceTemplates.addAll(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 AsyncSpec 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
    +		 * .prompts(Map.of("analysis", new McpServerFeatures.AsyncPromptRegistration(
    +		 *     new Prompt("analysis", "Code analysis template"),
    +		 *     request -> Mono.just(new GetPromptResult(generateAnalysisPrompt(request)))
    +		 * )));
    +		 * }
    + * @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 AsyncSpec 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(McpServerFeatures.AsyncPromptRegistration...) + */ + public AsyncSpec prompts(List prompts) { + for (McpServerFeatures.AsyncPromptRegistration 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 McpServerFeatures.AsyncPromptRegistration(analysisPrompt, analysisHandler),
    +		 *     new McpServerFeatures.AsyncPromptRegistration(summaryPrompt, summaryHandler),
    +		 *     new McpServerFeatures.AsyncPromptRegistration(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 AsyncSpec prompts(McpServerFeatures.AsyncPromptRegistration... prompts) { + for (McpServerFeatures.AsyncPromptRegistration 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 AsyncSpec rootsChangeConsumer(Function, Mono> 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 AsyncSpec rootsChangeConsumers(List, Mono>> 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 AsyncSpec rootsChangeConsumers(Function, Mono>... consumers) { + for (Function, Mono> consumer : consumers) { + this.rootsChangeConsumers.add(consumer); + } + return this; + } + + /** + * Builds an asynchronous MCP server that provides non-blocking operations. + * @return A new instance of {@link McpAsyncServer} configured with this builder's + * settings + */ + public McpAsyncServer build() { + return new McpAsyncServer(this.transport, + new McpServerFeatures.Async(this.serverInfo, this.serverCapabilities, this.tools, this.resources, + this.resourceTemplates, this.prompts, this.rootsChangeConsumers)); + } + + } + + /** + * Synchronous server specification. + */ + class SyncSpec { + + 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 final 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 SyncSpec(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 SyncSpec 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 SyncSpec 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 SyncSpec 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 SyncSpec 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 McpServerFeatures.SyncToolRegistration(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(McpServerFeatures.SyncToolRegistration...) + */ + public SyncSpec 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 SyncSpec tools(McpServerFeatures.SyncToolRegistration... toolRegistrations) { + for (McpServerFeatures.SyncToolRegistration 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(McpServerFeatures.SyncResourceRegistration...) + */ + public SyncSpec 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(McpServerFeatures.SyncResourceRegistration...) + */ + public SyncSpec resources(List resourceRegsitrations) { + Assert.notNull(resourceRegsitrations, "Resource handlers list must not be null"); + for (McpServerFeatures.SyncResourceRegistration 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 SyncSpec resources(McpServerFeatures.SyncResourceRegistration... resourceRegistrations) { + Assert.notNull(resourceRegistrations, "Resource handlers list must not be null"); + for (McpServerFeatures.SyncResourceRegistration 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 SyncSpec resourceTemplates(List resourceTemplates) { + this.resourceTemplates.addAll(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 SyncSpec 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 SyncSpec 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(McpServerFeatures.SyncPromptRegistration...) + */ + public SyncSpec prompts(List prompts) { + for (McpServerFeatures.SyncPromptRegistration 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 SyncSpec prompts(McpServerFeatures.SyncPromptRegistration... prompts) { + for (McpServerFeatures.SyncPromptRegistration 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 SyncSpec 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 SyncSpec 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 SyncSpec rootsChangeConsumers(Consumer>... consumers) { + for (Consumer> consumer : consumers) { + this.rootsChangeConsumers.add(consumer); + } + return this; + } + + /** + * Builds a synchronous MCP server that provides blocking operations. + * @return A new instance of {@link McpSyncServer} configured with this builder's + * settings + */ + public McpSyncServer build() { + McpServerFeatures.Sync syncFeatures = new McpServerFeatures.Sync(this.serverInfo, this.serverCapabilities, + this.tools, this.resources, this.resourceTemplates, this.prompts, this.rootsChangeConsumers); + return new McpSyncServer( + new McpAsyncServer(this.transport, McpServerFeatures.Async.fromSync(syncFeatures))); + } + + } + + /** + * 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 SyncSpec} for configuring the server. + */ + static SyncSpec sync(ServerMcpTransport transport) { + return new SyncSpec(transport); + } + + /** + * Builds an asynchronous MCP server that provides non-blocking operations. + * Asynchronous servers can handle multiple requests concurrently using a functional + * paradigm with non-blocking server transports, making them more efficient for + * high-concurrency scenarios but more complex to implement. + * @return A new instance of {@link SyncSpec} for configuring the server. + */ + static AsyncSpec async(ServerMcpTransport transport) { + return new AsyncSpec(transport); + } + + /** + * 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", @@ -576,7 +1294,9 @@ public interface McpServer { * 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()); } @@ -588,13 +1308,156 @@ public interface McpServer { * 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/springframework/ai/mcp/server/McpServerFeatures.java b/mcp/src/main/java/org/springframework/ai/mcp/server/McpServerFeatures.java new file mode 100644 index 0000000..0faba95 --- /dev/null +++ b/mcp/src/main/java/org/springframework/ai/mcp/server/McpServerFeatures.java @@ -0,0 +1,399 @@ +package org.springframework.ai.mcp.server; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; +import java.util.function.Function; + +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. + */ +public class McpServerFeatures { + + /** + * Asynchronous server features specification. + * + * @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 + */ + record Async(McpSchema.Implementation serverInfo, McpSchema.ServerCapabilities serverCapabilities, + List tools, Map resources, + List resourceTemplates, + Map prompts, + List, Mono>> rootsChangeConsumers) { + + /** + * Create an instance and validate the arguments. + * @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 + */ + Async(McpSchema.Implementation serverInfo, McpSchema.ServerCapabilities serverCapabilities, + List tools, Map resources, + List resourceTemplates, + Map prompts, + List, Mono>> rootsChangeConsumers) { + + Assert.notNull(serverInfo, "Server info must not be null"); + + this.serverInfo = serverInfo; + this.serverCapabilities = (serverCapabilities != null) ? serverCapabilities + : new McpSchema.ServerCapabilities(null, // experimental + new McpSchema.ServerCapabilities.LoggingCapabilities(), // Enable + // logging + // by + // default + !Utils.isEmpty(prompts) ? new McpSchema.ServerCapabilities.PromptCapabilities(false) : null, + !Utils.isEmpty(resources) + ? new McpSchema.ServerCapabilities.ResourceCapabilities(false, false) : null, + !Utils.isEmpty(tools) ? new McpSchema.ServerCapabilities.ToolCapabilities(false) : null); + + this.tools = (tools != null) ? tools : List.of(); + this.resources = (resources != null) ? resources : Map.of(); + this.resourceTemplates = (resourceTemplates != null) ? resourceTemplates : List.of(); + this.prompts = (prompts != null) ? prompts : Map.of(); + this.rootsChangeConsumers = (rootsChangeConsumers != null) ? rootsChangeConsumers : List.of(); + } + + /** + * Convert a synchronous specification into an asynchronous one and provide + * blocking code offloading to prevent accidental blocking of the non-blocking + * transport. + * @param syncSpec a potentially blocking, synchronous specification. + * @return a specification which is protected from blocking calls specified by the + * user. + */ + static Async fromSync(Sync syncSpec) { + List tools = new ArrayList<>(); + for (var tool : syncSpec.tools()) { + tools.add(AsyncToolRegistration.fromSync(tool)); + } + + Map resources = new HashMap<>(); + syncSpec.resources().forEach((key, resource) -> { + resources.put(key, AsyncResourceRegistration.fromSync(resource)); + }); + + Map prompts = new HashMap<>(); + syncSpec.prompts().forEach((key, prompt) -> { + prompts.put(key, AsyncPromptRegistration.fromSync(prompt)); + }); + + List, Mono>> rootChangeConsumers = new ArrayList<>(); + + for (var rootChangeConsumer : syncSpec.rootsChangeConsumers()) { + rootChangeConsumers.add(list -> Mono.fromRunnable(() -> rootChangeConsumer.accept(list)) + .subscribeOn(Schedulers.boundedElastic())); + } + + return new Async(syncSpec.serverInfo(), syncSpec.serverCapabilities(), tools, resources, + syncSpec.resourceTemplates(), prompts, rootChangeConsumers); + } + } + + /** + * Synchronous server features specification. + * + * @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 + */ + record Sync(McpSchema.Implementation serverInfo, McpSchema.ServerCapabilities serverCapabilities, + List tools, + Map resources, + List resourceTemplates, + Map prompts, + List>> rootsChangeConsumers) { + + /** + * Create an instance and validate the arguments. + * @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 + */ + Sync(McpSchema.Implementation serverInfo, McpSchema.ServerCapabilities serverCapabilities, + List tools, + Map resources, + List resourceTemplates, + Map prompts, + List>> rootsChangeConsumers) { + + Assert.notNull(serverInfo, "Server info must not be null"); + + this.serverInfo = serverInfo; + this.serverCapabilities = (serverCapabilities != null) ? serverCapabilities + : new McpSchema.ServerCapabilities(null, // experimental + new McpSchema.ServerCapabilities.LoggingCapabilities(), // Enable + // logging + // by + // default + !Utils.isEmpty(prompts) ? new McpSchema.ServerCapabilities.PromptCapabilities(false) : null, + !Utils.isEmpty(resources) + ? new McpSchema.ServerCapabilities.ResourceCapabilities(false, false) : null, + !Utils.isEmpty(tools) ? new McpSchema.ServerCapabilities.ToolCapabilities(false) : null); + + this.tools = (tools != null) ? tools : new ArrayList<>(); + this.resources = (resources != null) ? resources : new HashMap<>(); + this.resourceTemplates = (resourceTemplates != null) ? resourceTemplates : new ArrayList<>(); + this.prompts = (prompts != null) ? prompts : new HashMap<>(); + this.rootsChangeConsumers = (rootsChangeConsumers != null) ? rootsChangeConsumers : new ArrayList<>(); + } + + } + + /** + * Registration of a tool with its asynchronous 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 McpServerFeatures.AsyncToolRegistration(
    +	 *     new Tool(
    +	 *         "calculator",
    +	 *         "Performs mathematical calculations",
    +	 *         new JsonSchemaObject()
    +	 *             .required("expression")
    +	 *             .property("expression", JsonSchemaType.STRING)
    +	 *     ),
    +	 *     args -> {
    +	 *         String expr = (String) args.get("expression");
    +	 *         return Mono.just(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 + */ + public record AsyncToolRegistration(McpSchema.Tool tool, + Function, Mono> call) { + + static AsyncToolRegistration fromSync(SyncToolRegistration tool) { + // FIXME: This is temporary, proper validation should be implemented + if (tool == null) { + return null; + } + return new AsyncToolRegistration(tool.tool(), + map -> Mono.fromCallable(() -> tool.call().apply(map)).subscribeOn(Schedulers.boundedElastic())); + } + } + + /** + * Registration of a resource with its asynchronous 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 McpServerFeatures.AsyncResourceRegistration(
    +	 *     new Resource("docs", "Documentation files", "text/markdown"),
    +	 *     request -> {
    +	 *         String content = readFile(request.getPath());
    +	 *         return Mono.just(new ReadResourceResult(content));
    +	 *     }
    +	 * )
    +	 * }
    + * + * @param resource The resource definition including name, description, and MIME type + * @param readHandler The function that handles resource read requests + */ + public record AsyncResourceRegistration(McpSchema.Resource resource, + Function> readHandler) { + + static AsyncResourceRegistration fromSync(SyncResourceRegistration resource) { + // FIXME: This is temporary, proper validation should be implemented + if (resource == null) { + return null; + } + return new AsyncResourceRegistration(resource.resource(), + req -> Mono.fromCallable(() -> resource.readHandler().apply(req)) + .subscribeOn(Schedulers.boundedElastic())); + } + } + + /** + * Registration of a prompt template with its asynchronous 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 McpServerFeatures.AsyncPromptRegistration(
    +	 *     new Prompt("analyze", "Code analysis template"),
    +	 *     request -> {
    +	 *         String code = request.getArguments().get("code");
    +	 *         return Mono.just(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 + */ + public record AsyncPromptRegistration(McpSchema.Prompt prompt, + Function> promptHandler) { + + static AsyncPromptRegistration fromSync(SyncPromptRegistration prompt) { + // FIXME: This is temporary, proper validation should be implemented + if (prompt == null) { + return null; + } + return new AsyncPromptRegistration(prompt.prompt(), + req -> Mono.fromCallable(() -> prompt.promptHandler().apply(req)) + .subscribeOn(Schedulers.boundedElastic())); + } + } + + /** + * Registration of a tool with its synchronous 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 McpServerFeatures.SyncToolRegistration(
    +	 *     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 + */ + public record SyncToolRegistration(McpSchema.Tool tool, + Function, McpSchema.CallToolResult> call) { + } + + /** + * Registration of a resource with its synchronous 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 McpServerFeatures.SyncResourceRegistration(
    +	 *     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 + */ + public record SyncResourceRegistration(McpSchema.Resource resource, + Function readHandler) { + } + + /** + * Registration of a prompt template with its synchronous 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 McpServerFeatures.SyncPromptRegistration(
    +	 *     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 + */ + public record SyncPromptRegistration(McpSchema.Prompt prompt, + Function promptHandler) { + } + +} diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpSyncServer.java b/mcp/src/main/java/org/springframework/ai/mcp/server/McpSyncServer.java index db564f0..97c949f 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpSyncServer.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/server/McpSyncServer.java @@ -26,11 +26,42 @@ import org.springframework.ai.mcp.spec.McpSchema.LoggingMessageNotification; import org.springframework.ai.mcp.util.Assert; /** - * Synchronous wrapper around {@link McpAsyncServer} that provides blocking operations. - * This class delegates all operations to an underlying async server instance while - * providing a synchronous API. + * A synchronous implementation of the Model Context Protocol (MCP) server that wraps + * {@link McpAsyncServer} to provide blocking operations. This class delegates all + * operations to an underlying async server instance while providing a simpler, + * synchronous API for scenarios where reactive programming is not required. + * + *

    + * The MCP server enables AI models to expose tools, resources, and prompts through a + * standardized interface. Key features available through this synchronous API include: + *

      + *
    • Tool registration and management for extending AI model capabilities + *
    • Resource handling with URI-based addressing for providing context + *
    • Prompt template management for standardized interactions + *
    • Real-time client notifications for state changes + *
    • Structured logging with configurable severity levels + *
    • Support for client-side AI model sampling + *
    + * + *

    + * While {@link McpAsyncServer} uses Project Reactor's Mono and Flux types for + * non-blocking operations, this class converts those into blocking calls, making it more + * suitable for: + *

      + *
    • Traditional synchronous applications + *
    • Simple scripting scenarios + *
    • Testing and debugging + *
    • Cases where reactive programming adds unnecessary complexity + *
    + * + *

    + * The server supports runtime modification of its capabilities through methods like + * {@link #addTool}, {@link #addResource}, and {@link #addPrompt}, automatically notifying + * connected clients of changes when configured to do so. * * @author Christian Tzolov + * @see McpAsyncServer + * @see McpSchema */ public class McpSyncServer { @@ -69,6 +100,16 @@ public class McpSyncServer { * Add a new tool handler. * @param toolHandler The tool handler to add */ + public void addTool(McpServerFeatures.SyncToolRegistration toolHandler) { + 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(); } @@ -85,6 +126,16 @@ public class McpSyncServer { * Add a new resource handler. * @param resourceHandler The resource handler to add */ + public void addResource(McpServerFeatures.SyncResourceRegistration resourceHandler) { + 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(); } @@ -101,6 +152,16 @@ public class McpSyncServer { * Add a new prompt handler. * @param promptRegistration The prompt registration to add */ + public void addPrompt(McpServerFeatures.SyncPromptRegistration promptRegistration) { + 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(); } @@ -120,28 +181,6 @@ public class McpSyncServer { this.asyncServer.notifyToolsListChanged().block(); } - /** - * Notify clients that the list of available resources has changed. - */ - public void notifyResourcesListChanged() { - this.asyncServer.notifyResourcesListChanged().block(); - } - - /** - * Notify clients that the list of available prompts has changed. - */ - public void notifyPromptsListChanged() { - this.asyncServer.notifyPromptsListChanged().block(); - } - - /** - * Send a logging message notification to all clients. - * @param loggingMessageNotification The logging message notification to send - */ - public void loggingNotification(LoggingMessageNotification loggingMessageNotification) { - this.asyncServer.loggingNotification(loggingMessageNotification).block(); - } - /** * Get the server capabilities that define the supported features and functionality. * @return The server capabilities @@ -174,6 +213,28 @@ public class McpSyncServer { return this.asyncServer.getClientInfo(); } + /** + * Notify clients that the list of available resources has changed. + */ + public void notifyResourcesListChanged() { + this.asyncServer.notifyResourcesListChanged().block(); + } + + /** + * Notify clients that the list of available prompts has changed. + */ + public void notifyPromptsListChanged() { + this.asyncServer.notifyPromptsListChanged().block(); + } + + /** + * Send a logging message notification to all clients. + * @param loggingMessageNotification The logging message notification to send + */ + public void loggingNotification(LoggingMessageNotification loggingMessageNotification) { + this.asyncServer.loggingNotification(loggingMessageNotification).block(); + } + /** * Close the server gracefully. */ @@ -199,13 +260,19 @@ public class McpSyncServer { /** * Create a new message using the sampling capabilities of the client. The Model * Context Protocol (MCP) provides a standardized way for servers to request LLM - * sampling (“completions” or “generations”) from language models via clients. This - * flow allows clients to maintain control over model access, selection, and + * sampling ("completions" or "generations") from language models via clients. + * + *

    + * This flow allows clients to maintain control over model access, selection, and * permissions while enabling servers to leverage AI capabilities—with no server API * keys necessary. Servers can request text or image-based interactions and optionally * include context from MCP servers in their prompts. + * + *

    + * Unlike its async counterpart, this method blocks until the message creation is + * complete, making it easier to use in synchronous code paths. * @param createMessageRequest The request to create a new message - * @return A Mono that completes when the message has been created + * @return The result of the message creation * @throws McpError if the client has not been initialized or does not support * sampling capabilities * @throws McpError if the client does not support the createMessage method diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/DefaultMcpSession.java b/mcp/src/main/java/org/springframework/ai/mcp/spec/DefaultMcpSession.java index 8a1dde0..fffd710 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/spec/DefaultMcpSession.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/spec/DefaultMcpSession.java @@ -63,7 +63,7 @@ public class DefaultMcpSession implements McpSession { private final ConcurrentHashMap> pendingResponses = new ConcurrentHashMap<>(); /** Map of request handlers keyed by method name */ - private final ConcurrentHashMap requestHandlers = new ConcurrentHashMap<>(); + private final ConcurrentHashMap> requestHandlers = new ConcurrentHashMap<>(); /** Map of notification handlers keyed by method name */ private final ConcurrentHashMap notificationHandlers = new ConcurrentHashMap<>(); @@ -79,16 +79,18 @@ public class DefaultMcpSession implements McpSession { /** * Functional interface for handling incoming JSON-RPC requests. Implementations * should process the request parameters and return a response. + * + * @param Response type */ @FunctionalInterface - public interface RequestHandler { + public interface RequestHandler { /** * Handles an incoming request with the given parameters. * @param params The request parameters * @return A Mono containing the response object */ - Mono handle(Object params); + Mono handle(Object params); } @@ -116,7 +118,7 @@ public class DefaultMcpSession implements McpSession { * @param notificationHandlers Map of method names to notification handlers */ public DefaultMcpSession(Duration requestTimeout, McpTransport transport, - Map requestHandlers, Map notificationHandlers) { + Map> requestHandlers, Map notificationHandlers) { Assert.notNull(requestTimeout, "The requstTimeout can not be null"); Assert.notNull(transport, "The transport can not be null"); diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java b/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java index b5a00bf..2579f57 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java +++ b/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java @@ -25,6 +25,7 @@ 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 reactor.core.publisher.Mono; import reactor.test.StepVerifier; import org.springframework.ai.mcp.spec.ClientMcpTransport; @@ -77,10 +78,10 @@ public abstract class AbstractMcpAsyncClientTests { this.mcpTransport = createMcpTransport(); assertThatCode(() -> { - mcpAsyncClient = McpClient.using(mcpTransport) + mcpAsyncClient = McpClient.async(mcpTransport) .requestTimeout(TIMEOUT) .capabilities(ClientCapabilities.builder().roots(true).build()) - .async(); + .build(); mcpAsyncClient.initialize().block(Duration.ofSeconds(10)); }).doesNotThrowAnyException(); } @@ -96,10 +97,10 @@ public abstract class AbstractMcpAsyncClientTests { @Test void testConstructorWithInvalidArguments() { - assertThatThrownBy(() -> McpClient.using(null).sync()).isInstanceOf(IllegalArgumentException.class) + assertThatThrownBy(() -> McpClient.sync(null).build()).isInstanceOf(IllegalArgumentException.class) .hasMessage("Transport must not be null"); - assertThatThrownBy(() -> McpClient.using(mcpTransport).requestTimeout(null).sync()) + assertThatThrownBy(() -> McpClient.sync(mcpTransport).requestTimeout(null).build()) .isInstanceOf(IllegalArgumentException.class) .hasMessage("Request timeout must not be null"); } @@ -195,10 +196,10 @@ public abstract class AbstractMcpAsyncClientTests { void testInitializeWithRootsListProviders() { var transport = createMcpTransport(); - var client = McpClient.using(transport) + var client = McpClient.async(transport) .requestTimeout(TIMEOUT) .roots(new Root("file:///test/path", "test-root")) - .async(); + .build(); assertThatCode(() -> client.initialize().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); @@ -277,12 +278,12 @@ public abstract class AbstractMcpAsyncClientTests { AtomicBoolean promptsNotificationReceived = new AtomicBoolean(false); var transport = createMcpTransport(); - var client = McpClient.using(transport) + var client = McpClient.async(transport) .requestTimeout(TIMEOUT) - .toolsChangeConsumer(tools -> toolsNotificationReceived.set(true)) - .resourcesChangeConsumer(resources -> resourcesNotificationReceived.set(true)) - .promptsChangeConsumer(prompts -> promptsNotificationReceived.set(true)) - .async(); + .toolsChangeConsumer(tools -> Mono.fromRunnable(() -> toolsNotificationReceived.set(true))) + .resourcesChangeConsumer(resources -> Mono.fromRunnable(() -> resourcesNotificationReceived.set(true))) + .promptsChangeConsumer(prompts -> Mono.fromRunnable(() -> promptsNotificationReceived.set(true))) + .build(); assertThatCode(() -> { client.initialize().block(); @@ -299,9 +300,11 @@ public abstract class AbstractMcpAsyncClientTests { var capabilities = ClientCapabilities.builder().sampling().build(); - var client = McpClient.using(transport).requestTimeout(TIMEOUT).capabilities(capabilities).sampling(request -> { - return CreateMessageResult.builder().message("test").model("test-model").build(); - }).async(); + var client = McpClient.async(transport) + .requestTimeout(TIMEOUT) + .capabilities(capabilities) + .sampling(request -> Mono.just(CreateMessageResult.builder().message("test").model("test-model").build())) + .build(); assertThatCode(() -> { client.initialize().block(Duration.ofSeconds(10)); @@ -319,14 +322,13 @@ public abstract class AbstractMcpAsyncClientTests { .sampling() .build(); - Function samplingHandler = request -> { - return CreateMessageResult.builder().message("test").model("test-model").build(); - }; - var client = McpClient.using(transport) + Function> samplingHandler = request -> Mono + .just(CreateMessageResult.builder().message("test").model("test-model").build()); + var client = McpClient.async(transport) .requestTimeout(TIMEOUT) .capabilities(capabilities) .sampling(samplingHandler) - .async(); + .build(); assertThatCode(() -> { var result = client.initialize().block(Duration.ofSeconds(10)); @@ -353,10 +355,10 @@ public abstract class AbstractMcpAsyncClientTests { AtomicBoolean logReceived = new AtomicBoolean(false); var transport = createMcpTransport(); - var client = McpClient.using(transport) + var client = McpClient.async(transport) .requestTimeout(TIMEOUT) - .loggingConsumer(notification -> logReceived.set(true)) - .async(); + .loggingConsumer(notification -> Mono.fromRunnable(() -> logReceived.set(true))) + .build(); assertThatCode(() -> { client.initialize().block(Duration.ofSeconds(10)); diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java b/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java index 9935f7f..c012612 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java +++ b/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java @@ -72,10 +72,10 @@ public abstract class AbstractMcpSyncClientTests { this.mcpTransport = createMcpTransport(); assertThatCode(() -> { - mcpSyncClient = McpClient.using(mcpTransport) + mcpSyncClient = McpClient.sync(mcpTransport) .requestTimeout(TIMEOUT) .capabilities(ClientCapabilities.builder().roots(true).build()) - .sync(); + .build(); mcpSyncClient.initialize(); }).doesNotThrowAnyException(); } @@ -90,10 +90,10 @@ public abstract class AbstractMcpSyncClientTests { @Test void testConstructorWithInvalidArguments() { - assertThatThrownBy(() -> McpClient.using(null).sync()).isInstanceOf(IllegalArgumentException.class) + assertThatThrownBy(() -> McpClient.sync(null).build()).isInstanceOf(IllegalArgumentException.class) .hasMessage("Transport must not be null"); - assertThatThrownBy(() -> McpClient.using(mcpTransport).requestTimeout(null).sync()) + assertThatThrownBy(() -> McpClient.sync(mcpTransport).requestTimeout(null).build()) .isInstanceOf(IllegalArgumentException.class) .hasMessage("Request timeout must not be null"); } @@ -180,10 +180,10 @@ public abstract class AbstractMcpSyncClientTests { void testInitializeWithRootsListProviders() { var transport = createMcpTransport(); - var client = McpClient.using(transport) + var client = McpClient.sync(transport) .requestTimeout(TIMEOUT) .roots(new Root("file:///test/path", "test-root")) - .sync(); + .build(); assertThatCode(() -> { client.initialize(); @@ -262,12 +262,12 @@ public abstract class AbstractMcpSyncClientTests { AtomicBoolean promptsNotificationReceived = new AtomicBoolean(false); var transport = createMcpTransport(); - var client = McpClient.using(transport) + var client = McpClient.sync(transport) .requestTimeout(TIMEOUT) .toolsChangeConsumer(tools -> toolsNotificationReceived.set(true)) .resourcesChangeConsumer(resources -> resourcesNotificationReceived.set(true)) .promptsChangeConsumer(prompts -> promptsNotificationReceived.set(true)) - .sync(); + .build(); assertThatCode(() -> { client.initialize(); @@ -295,10 +295,10 @@ public abstract class AbstractMcpSyncClientTests { AtomicBoolean logReceived = new AtomicBoolean(false); var transport = createMcpTransport(); - var client = McpClient.using(transport) + var client = McpClient.sync(transport) .requestTimeout(TIMEOUT) .loggingConsumer(notification -> logReceived.set(true)) - .sync(); + .build(); assertThatCode(() -> { client.initialize(); diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/McpAsyncClientResponseHandlerTests.java b/mcp/src/test/java/org/springframework/ai/mcp/client/McpAsyncClientResponseHandlerTests.java index 6c67b99..2922bf0 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/client/McpAsyncClientResponseHandlerTests.java +++ b/mcp/src/test/java/org/springframework/ai/mcp/client/McpAsyncClientResponseHandlerTests.java @@ -27,6 +27,7 @@ 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 reactor.core.publisher.Mono; import org.springframework.ai.mcp.MockMcpTransport; import org.springframework.ai.mcp.spec.McpError; @@ -48,12 +49,11 @@ class McpAsyncClientResponseHandlerTests { List receivedTools = new ArrayList<>(); // Create a consumer that will be called when tools change - Consumer> toolsChangeConsumer = tools -> { - receivedTools.addAll(tools); - }; + Function, Mono> toolsChangeConsumer = tools -> Mono + .fromRunnable(() -> receivedTools.addAll(tools)); // Create client with tools change consumer - McpAsyncClient asyncMcpClient = McpClient.using(transport).toolsChangeConsumer(toolsChangeConsumer).async(); + McpAsyncClient asyncMcpClient = McpClient.async(transport).toolsChangeConsumer(toolsChangeConsumer).build(); // Create a mock tools list that the server will return Map inputSchema = Map.of("type", "object", "properties", Map.of(), "required", List.of()); @@ -88,9 +88,9 @@ class McpAsyncClientResponseHandlerTests { void testRootsListRequestHandling() { MockMcpTransport transport = new MockMcpTransport(); - McpAsyncClient asyncMcpClient = McpClient.using(transport) + McpAsyncClient asyncMcpClient = McpClient.async(transport) .roots(new Root("file:///test/path", "test-root")) - .async(); + .build(); // Simulate incoming request McpSchema.JSONRPCRequest request = new McpSchema.JSONRPCRequest(McpSchema.JSONRPC_VERSION, @@ -118,14 +118,13 @@ class McpAsyncClientResponseHandlerTests { List receivedResources = new ArrayList<>(); // Create a consumer that will be called when resources change - Consumer> resourcesChangeConsumer = resources -> { - receivedResources.addAll(resources); - }; + Function, Mono> resourcesChangeConsumer = resources -> Mono + .fromRunnable(() -> receivedResources.addAll(resources)); // Create client with resources change consumer - McpAsyncClient asyncMcpClient = McpClient.using(transport) + McpAsyncClient asyncMcpClient = McpClient.async(transport) .resourcesChangeConsumer(resourcesChangeConsumer) - .async(); + .build(); // Create a mock resources list that the server will return McpSchema.Resource mockResource = new McpSchema.Resource("test://resource", "Test Resource", "A test resource", @@ -165,12 +164,11 @@ class McpAsyncClientResponseHandlerTests { List receivedPrompts = new ArrayList<>(); // Create a consumer that will be called when prompts change - Consumer> promptsChangeConsumer = prompts -> { - receivedPrompts.addAll(prompts); - }; + Function, Mono> promptsChangeConsumer = prompts -> Mono + .fromRunnable(() -> receivedPrompts.addAll(prompts)); // Create client with prompts change consumer - McpAsyncClient asyncMcpClient = McpClient.using(transport).promptsChangeConsumer(promptsChangeConsumer).async(); + McpAsyncClient asyncMcpClient = McpClient.async(transport).promptsChangeConsumer(promptsChangeConsumer).build(); // Create a mock prompts list that the server will return McpSchema.Prompt mockPrompt = new McpSchema.Prompt("test-prompt", "Test Prompt Description", @@ -207,17 +205,17 @@ class McpAsyncClientResponseHandlerTests { MockMcpTransport transport = new MockMcpTransport(); // Create a test sampling handler that echoes back the input - Function samplingHandler = request -> { + Function> samplingHandler = request -> { var content = request.messages().get(0).content(); - return new McpSchema.CreateMessageResult(McpSchema.Role.ASSISTANT, content, "test-model", - McpSchema.CreateMessageResult.StopReason.END_TURN); + return Mono.just(new McpSchema.CreateMessageResult(McpSchema.Role.ASSISTANT, content, "test-model", + McpSchema.CreateMessageResult.StopReason.END_TURN)); }; // Create client with sampling capability and handler - McpAsyncClient asyncMcpClient = McpClient.using(transport) + McpAsyncClient asyncMcpClient = McpClient.async(transport) .capabilities(ClientCapabilities.builder().sampling().build()) .sampling(samplingHandler) - .async(); + .build(); // Create a mock create message request var messageRequest = new McpSchema.CreateMessageRequest( @@ -259,9 +257,9 @@ class McpAsyncClientResponseHandlerTests { MockMcpTransport transport = new MockMcpTransport(); // Create client without sampling capability - McpAsyncClient asyncMcpClient = McpClient.using(transport) + McpAsyncClient asyncMcpClient = McpClient.async(transport) .capabilities(ClientCapabilities.builder().build()) // No sampling capability - .async(); + .build(); // Create a mock create message request var messageRequest = new McpSchema.CreateMessageRequest( @@ -292,7 +290,7 @@ class McpAsyncClientResponseHandlerTests { // Create client with sampling capability but null handler assertThatThrownBy( - () -> McpClient.using(transport).capabilities(ClientCapabilities.builder().sampling().build()).async()) + () -> McpClient.async(transport).capabilities(ClientCapabilities.builder().sampling().build()).build()) .isInstanceOf(McpError.class) .hasMessage("Sampling handler must not be null when client capabilities include sampling"); } diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java b/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java index 7da6775..0c7c1aa 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java +++ b/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java @@ -22,11 +22,9 @@ import java.util.List; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import reactor.core.publisher.Mono; import reactor.test.StepVerifier; -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.CallToolResult; @@ -81,24 +79,24 @@ public abstract class AbstractMcpAsyncServerTests { @Test void testConstructorWithInvalidArguments() { - assertThatThrownBy(() -> McpServer.using(null)).isInstanceOf(IllegalArgumentException.class) + assertThatThrownBy(() -> McpServer.async(null)).isInstanceOf(IllegalArgumentException.class) .hasMessage("Transport must not be null"); - assertThatThrownBy(() -> McpServer.using(createMcpTransport()).serverInfo((McpSchema.Implementation) null)) + assertThatThrownBy(() -> McpServer.async(createMcpTransport()).serverInfo((McpSchema.Implementation) null)) .isInstanceOf(IllegalArgumentException.class) .hasMessage("Server info must not be null"); } @Test void testGracefulShutdown() { - var mcpAsyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); StepVerifier.create(mcpAsyncServer.closeGracefully()).verifyComplete(); } @Test void testImmediateClose() { - var mcpAsyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThatCode(() -> mcpAsyncServer.close()).doesNotThrowAnyException(); } @@ -117,81 +115,80 @@ public abstract class AbstractMcpAsyncServerTests { @Test void testAddTool() { Tool newTool = new McpSchema.Tool("new-tool", "New test tool", emptyJsonSchema); - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) - .async(); + .build(); - StepVerifier - .create(mcpAsyncServer.addTool(new ToolRegistration(newTool, args -> new CallToolResult(List.of(), false)))) + StepVerifier.create(mcpAsyncServer.addTool(new McpServerFeatures.AsyncToolRegistration(newTool, + args -> Mono.just(new CallToolResult(List.of(), false))))) .verifyComplete(); - assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))); + assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } @Test void testAddDuplicateTool() { Tool duplicateTool = new McpSchema.Tool(TEST_TOOL_NAME, "Duplicate tool", emptyJsonSchema); - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) - .tool(duplicateTool, args -> new CallToolResult(List.of(), false)) - .async(); + .tool(duplicateTool, args -> Mono.just(new CallToolResult(List.of(), false))) + .build(); - StepVerifier - .create(mcpAsyncServer - .addTool(new ToolRegistration(duplicateTool, args -> new CallToolResult(List.of(), false)))) + StepVerifier.create(mcpAsyncServer.addTool(new McpServerFeatures.AsyncToolRegistration(duplicateTool, + args -> Mono.just(new CallToolResult(List.of(), false))))) .verifyErrorSatisfies(error -> { assertThat(error).isInstanceOf(McpError.class) .hasMessage("Tool with name '" + TEST_TOOL_NAME + "' already exists"); }); - assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))); + assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } @Test void testRemoveTool() { Tool too = new McpSchema.Tool(TEST_TOOL_NAME, "Duplicate tool", emptyJsonSchema); - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) - .tool(too, args -> new CallToolResult(List.of(), false)) - .async(); + .tool(too, args -> Mono.just(new CallToolResult(List.of(), false))) + .build(); StepVerifier.create(mcpAsyncServer.removeTool(TEST_TOOL_NAME)).verifyComplete(); - assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))); + assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } @Test void testRemoveNonexistentTool() { - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) - .async(); + .build(); StepVerifier.create(mcpAsyncServer.removeTool("nonexistent-tool")).verifyErrorSatisfies(error -> { assertThat(error).isInstanceOf(McpError.class).hasMessage("Tool with name 'nonexistent-tool' not found"); }); - assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))); + assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } @Test void testNotifyToolsListChanged() { Tool too = new McpSchema.Tool(TEST_TOOL_NAME, "Duplicate tool", emptyJsonSchema); - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) - .tool(too, args -> new CallToolResult(List.of(), false)) - .async(); + .tool(too, args -> Mono.just(new CallToolResult(List.of(), false))) + .build(); StepVerifier.create(mcpAsyncServer.notifyToolsListChanged()).verifyComplete(); - assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))); + assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } // --------------------------------------- @@ -200,24 +197,24 @@ public abstract class AbstractMcpAsyncServerTests { @Test void testNotifyResourcesListChanged() { - var mcpAsyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); StepVerifier.create(mcpAsyncServer.notifyResourcesListChanged()).verifyComplete(); - assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))); + assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } @Test void testAddResource() { - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().resources(true, false).build()) - .async(); + .build(); Resource resource = new Resource(TEST_RESOURCE_URI, "Test Resource", "text/plain", "Test resource description", null); - ResourceRegistration registration = new ResourceRegistration(resource, - req -> new ReadResourceResult(List.of())); + McpServerFeatures.AsyncResourceRegistration registration = new McpServerFeatures.AsyncResourceRegistration( + resource, req -> Mono.just(new ReadResourceResult(List.of()))); StepVerifier.create(mcpAsyncServer.addResource(registration)).verifyComplete(); @@ -226,14 +223,15 @@ public abstract class AbstractMcpAsyncServerTests { @Test void testAddResourceWithNullRegistration() { - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().resources(true, false).build()) - .async(); + .build(); - StepVerifier.create(mcpAsyncServer.addResource(null)).verifyErrorSatisfies(error -> { - assertThat(error).isInstanceOf(McpError.class).hasMessage("Resource must not be null"); - }); + StepVerifier.create(mcpAsyncServer.addResource((McpServerFeatures.AsyncResourceRegistration) null)) + .verifyErrorSatisfies(error -> { + assertThat(error).isInstanceOf(McpError.class).hasMessage("Resource must not be null"); + }); assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } @@ -241,14 +239,14 @@ public abstract class AbstractMcpAsyncServerTests { @Test void testAddResourceWithoutCapability() { // Create a server without resource capabilities - McpAsyncServer serverWithoutResources = McpServer.using(createMcpTransport()) + McpAsyncServer serverWithoutResources = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") - .async(); + .build(); Resource resource = new Resource(TEST_RESOURCE_URI, "Test Resource", "text/plain", "Test resource description", null); - ResourceRegistration registration = new ResourceRegistration(resource, - req -> new ReadResourceResult(List.of())); + McpServerFeatures.AsyncResourceRegistration registration = new McpServerFeatures.AsyncResourceRegistration( + resource, req -> Mono.just(new ReadResourceResult(List.of()))); StepVerifier.create(serverWithoutResources.addResource(registration)).verifyErrorSatisfies(error -> { assertThat(error).isInstanceOf(McpError.class) @@ -259,9 +257,9 @@ public abstract class AbstractMcpAsyncServerTests { @Test void testRemoveResourceWithoutCapability() { // Create a server without resource capabilities - McpAsyncServer serverWithoutResources = McpServer.using(createMcpTransport()) + McpAsyncServer serverWithoutResources = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") - .async(); + .build(); StepVerifier.create(serverWithoutResources.removeResource(TEST_RESOURCE_URI)).verifyErrorSatisfies(error -> { assertThat(error).isInstanceOf(McpError.class) @@ -275,36 +273,37 @@ public abstract class AbstractMcpAsyncServerTests { @Test void testNotifyPromptsListChanged() { - var mcpAsyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); StepVerifier.create(mcpAsyncServer.notifyPromptsListChanged()).verifyComplete(); - assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))); + assertThatCode(() -> mcpAsyncServer.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } @Test void testAddPromptWithNullRegistration() { - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().prompts(false).build()) - .async(); + .build(); - StepVerifier.create(mcpAsyncServer.addPrompt(null)).verifyErrorSatisfies(error -> { - assertThat(error).isInstanceOf(McpError.class).hasMessage("Prompt registration must not be null"); - }); + StepVerifier.create(mcpAsyncServer.addPrompt((McpServerFeatures.AsyncPromptRegistration) null)) + .verifyErrorSatisfies(error -> { + assertThat(error).isInstanceOf(McpError.class).hasMessage("Prompt registration must not be null"); + }); } @Test void testAddPromptWithoutCapability() { // Create a server without prompt capabilities - McpAsyncServer serverWithoutPrompts = McpServer.using(createMcpTransport()) + McpAsyncServer serverWithoutPrompts = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") - .async(); + .build(); Prompt prompt = new Prompt(TEST_PROMPT_NAME, "Test Prompt", List.of()); - PromptRegistration registration = new PromptRegistration(prompt, req -> new GetPromptResult( - "Test prompt description", - List.of(new PromptMessage(McpSchema.Role.ASSISTANT, new McpSchema.TextContent("Test content"))))); + McpServerFeatures.AsyncPromptRegistration registration = new McpServerFeatures.AsyncPromptRegistration(prompt, + req -> Mono.just(new GetPromptResult("Test prompt description", List + .of(new PromptMessage(McpSchema.Role.ASSISTANT, new McpSchema.TextContent("Test content")))))); StepVerifier.create(serverWithoutPrompts.addPrompt(registration)).verifyErrorSatisfies(error -> { assertThat(error).isInstanceOf(McpError.class) @@ -315,9 +314,9 @@ public abstract class AbstractMcpAsyncServerTests { @Test void testRemovePromptWithoutCapability() { // Create a server without prompt capabilities - McpAsyncServer serverWithoutPrompts = McpServer.using(createMcpTransport()) + McpAsyncServer serverWithoutPrompts = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") - .async(); + .build(); StepVerifier.create(serverWithoutPrompts.removePrompt(TEST_PROMPT_NAME)).verifyErrorSatisfies(error -> { assertThat(error).isInstanceOf(McpError.class) @@ -330,15 +329,15 @@ public abstract class AbstractMcpAsyncServerTests { String TEST_PROMPT_NAME_TO_REMOVE = "TEST_PROMPT_NAME678"; Prompt prompt = new Prompt(TEST_PROMPT_NAME_TO_REMOVE, "Test Prompt", List.of()); - PromptRegistration registration = new PromptRegistration(prompt, req -> new GetPromptResult( - "Test prompt description", - List.of(new PromptMessage(McpSchema.Role.ASSISTANT, new McpSchema.TextContent("Test content"))))); + McpServerFeatures.AsyncPromptRegistration registration = new McpServerFeatures.AsyncPromptRegistration(prompt, + req -> Mono.just(new GetPromptResult("Test prompt description", List + .of(new PromptMessage(McpSchema.Role.ASSISTANT, new McpSchema.TextContent("Test content")))))); - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().prompts(true).build()) .prompts(registration) - .async(); + .build(); StepVerifier.create(mcpAsyncServer.removePrompt(TEST_PROMPT_NAME_TO_REMOVE)).verifyComplete(); @@ -347,10 +346,10 @@ public abstract class AbstractMcpAsyncServerTests { @Test void testRemoveNonexistentPrompt() { - var mcpAsyncServer2 = McpServer.using(createMcpTransport()) + var mcpAsyncServer2 = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().prompts(true).build()) - .async(); + .build(); StepVerifier.create(mcpAsyncServer2.removePrompt("nonexistent-prompt")).verifyErrorSatisfies(error -> { assertThat(error).isInstanceOf(McpError.class) @@ -371,15 +370,15 @@ public abstract class AbstractMcpAsyncServerTests { var rootsReceived = new McpSchema.Root[1]; var consumerCalled = new boolean[1]; - var singleConsumerServer = McpServer.using(createMcpTransport()) + var singleConsumerServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") - .rootsChangeConsumers(List.of(roots -> { + .rootsChangeConsumers(List.of(roots -> Mono.fromRunnable(() -> { consumerCalled[0] = true; if (!roots.isEmpty()) { rootsReceived[0] = roots.get(0); } - })) - .async(); + }))) + .build(); assertThat(singleConsumerServer).isNotNull(); assertThatCode(() -> singleConsumerServer.closeGracefully().block(Duration.ofSeconds(10))) @@ -391,13 +390,13 @@ public abstract class AbstractMcpAsyncServerTests { var consumer2Called = new boolean[1]; var rootsContent = new List[1]; - var multipleConsumersServer = McpServer.using(createMcpTransport()) + var multipleConsumersServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") - .rootsChangeConsumers(List.of(roots -> { + .rootsChangeConsumers(List.of(roots -> Mono.fromRunnable(() -> { consumer1Called[0] = true; rootsContent[0] = roots; - }, roots -> consumer2Called[0] = true)) - .async(); + }), roots -> Mono.fromRunnable(() -> consumer2Called[0] = true))) + .build(); assertThat(multipleConsumersServer).isNotNull(); assertThatCode(() -> multipleConsumersServer.closeGracefully().block(Duration.ofSeconds(10))) @@ -405,12 +404,12 @@ public abstract class AbstractMcpAsyncServerTests { onClose(); // Test error handling - var errorHandlingServer = McpServer.using(createMcpTransport()) + var errorHandlingServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .rootsChangeConsumers(List.of(roots -> { throw new RuntimeException("Test error"); })) - .async(); + .build(); assertThat(errorHandlingServer).isNotNull(); assertThatCode(() -> errorHandlingServer.closeGracefully().block(Duration.ofSeconds(10))) @@ -418,7 +417,7 @@ public abstract class AbstractMcpAsyncServerTests { onClose(); // Test without consumers - var noConsumersServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").async(); + var noConsumersServer = McpServer.async(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThat(noConsumersServer).isNotNull(); assertThatCode(() -> noConsumersServer.closeGracefully().block(Duration.ofSeconds(10))) @@ -431,10 +430,10 @@ public abstract class AbstractMcpAsyncServerTests { @Test void testLoggingLevels() { - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().logging().build()) - .async(); + .build(); // Test all logging levels for (McpSchema.LoggingLevel level : McpSchema.LoggingLevel.values()) { @@ -450,10 +449,10 @@ public abstract class AbstractMcpAsyncServerTests { @Test void testLoggingWithoutCapability() { - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().build()) // No logging capability - .async(); + .build(); var notification = McpSchema.LoggingMessageNotification.builder() .level(McpSchema.LoggingLevel.INFO) @@ -466,10 +465,10 @@ public abstract class AbstractMcpAsyncServerTests { @Test void testLoggingWithNullNotification() { - var mcpAsyncServer = McpServer.using(createMcpTransport()) + var mcpAsyncServer = McpServer.async(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().logging().build()) - .async(); + .build(); StepVerifier.create(mcpAsyncServer.loggingNotification(null)).verifyError(McpError.class); } diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java b/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java index 73dcc40..ddb827a 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java +++ b/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java @@ -17,15 +17,11 @@ package org.springframework.ai.mcp.server; import java.util.List; -import java.util.Map; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -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.CallToolResult; @@ -81,31 +77,31 @@ public abstract class AbstractMcpSyncServerTests { @Test void testConstructorWithInvalidArguments() { - assertThatThrownBy(() -> McpServer.using(null)).isInstanceOf(IllegalArgumentException.class) + assertThatThrownBy(() -> McpServer.sync(null)).isInstanceOf(IllegalArgumentException.class) .hasMessage("Transport must not be null"); - assertThatThrownBy(() -> McpServer.using(createMcpTransport()).serverInfo((McpSchema.Implementation) null)) + assertThatThrownBy(() -> McpServer.sync(createMcpTransport()).serverInfo(null)) .isInstanceOf(IllegalArgumentException.class) .hasMessage("Server info must not be null"); } @Test void testGracefulShutdown() { - var mcpSyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var mcpSyncServer = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThatCode(() -> mcpSyncServer.closeGracefully()).doesNotThrowAnyException(); } @Test void testImmediateClose() { - var mcpSyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var mcpSyncServer = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThatCode(() -> mcpSyncServer.close()).doesNotThrowAnyException(); } @Test void testGetAsyncServer() { - var mcpSyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var mcpSyncServer = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThat(mcpSyncServer.getAsyncServer()).isNotNull(); @@ -126,14 +122,14 @@ public abstract class AbstractMcpSyncServerTests { @Test void testAddTool() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) - .sync(); + .build(); Tool newTool = new McpSchema.Tool("new-tool", "New test tool", emptyJsonSchema); assertThatCode(() -> mcpSyncServer - .addTool(new ToolRegistration(newTool, args -> new CallToolResult(List.of(), false)))) + .addTool(new McpServerFeatures.SyncToolRegistration(newTool, args -> new CallToolResult(List.of(), false)))) .doesNotThrowAnyException(); assertThatCode(() -> mcpSyncServer.closeGracefully()).doesNotThrowAnyException(); @@ -143,14 +139,14 @@ public abstract class AbstractMcpSyncServerTests { void testAddDuplicateTool() { Tool duplicateTool = new McpSchema.Tool(TEST_TOOL_NAME, "Duplicate tool", emptyJsonSchema); - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) .tool(duplicateTool, args -> new CallToolResult(List.of(), false)) - .sync(); + .build(); - assertThatThrownBy(() -> mcpSyncServer - .addTool(new ToolRegistration(duplicateTool, args -> new CallToolResult(List.of(), false)))) + assertThatThrownBy(() -> mcpSyncServer.addTool(new McpServerFeatures.SyncToolRegistration(duplicateTool, + args -> new CallToolResult(List.of(), false)))) .isInstanceOf(McpError.class) .hasMessage("Tool with name '" + TEST_TOOL_NAME + "' already exists"); @@ -161,11 +157,11 @@ public abstract class AbstractMcpSyncServerTests { void testRemoveTool() { Tool tool = new McpSchema.Tool(TEST_TOOL_NAME, "Test tool", emptyJsonSchema); - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) .tool(tool, args -> new CallToolResult(List.of(), false)) - .sync(); + .build(); assertThatCode(() -> mcpSyncServer.removeTool(TEST_TOOL_NAME)).doesNotThrowAnyException(); @@ -174,10 +170,10 @@ public abstract class AbstractMcpSyncServerTests { @Test void testRemoveNonexistentTool() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().tools(true).build()) - .sync(); + .build(); assertThatThrownBy(() -> mcpSyncServer.removeTool("nonexistent-tool")).isInstanceOf(McpError.class) .hasMessage("Tool with name 'nonexistent-tool' not found"); @@ -187,7 +183,7 @@ public abstract class AbstractMcpSyncServerTests { @Test void testNotifyToolsListChanged() { - var mcpSyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var mcpSyncServer = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThatCode(() -> mcpSyncServer.notifyToolsListChanged()).doesNotThrowAnyException(); @@ -200,7 +196,7 @@ public abstract class AbstractMcpSyncServerTests { @Test void testNotifyResourcesListChanged() { - var mcpSyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var mcpSyncServer = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThatCode(() -> mcpSyncServer.notifyResourcesListChanged()).doesNotThrowAnyException(); @@ -209,15 +205,15 @@ public abstract class AbstractMcpSyncServerTests { @Test void testAddResource() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().resources(true, false).build()) - .sync(); + .build(); Resource resource = new Resource(TEST_RESOURCE_URI, "Test Resource", "text/plain", "Test resource description", null); - ResourceRegistration registration = new ResourceRegistration(resource, - req -> new ReadResourceResult(List.of())); + McpServerFeatures.SyncResourceRegistration registration = new McpServerFeatures.SyncResourceRegistration( + resource, req -> new ReadResourceResult(List.of())); assertThatCode(() -> mcpSyncServer.addResource(registration)).doesNotThrowAnyException(); @@ -226,12 +222,13 @@ public abstract class AbstractMcpSyncServerTests { @Test void testAddResourceWithNullRegistration() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().resources(true, false).build()) - .sync(); + .build(); - assertThatThrownBy(() -> mcpSyncServer.addResource(null)).isInstanceOf(McpError.class) + assertThatThrownBy(() -> mcpSyncServer.addResource((McpServerFeatures.SyncResourceRegistration) null)) + .isInstanceOf(McpError.class) .hasMessage("Resource must not be null"); assertThatCode(() -> mcpSyncServer.closeGracefully()).doesNotThrowAnyException(); @@ -239,12 +236,12 @@ public abstract class AbstractMcpSyncServerTests { @Test void testAddResourceWithoutCapability() { - var serverWithoutResources = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var serverWithoutResources = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); Resource resource = new Resource(TEST_RESOURCE_URI, "Test Resource", "text/plain", "Test resource description", null); - ResourceRegistration registration = new ResourceRegistration(resource, - req -> new ReadResourceResult(List.of())); + McpServerFeatures.SyncResourceRegistration registration = new McpServerFeatures.SyncResourceRegistration( + resource, req -> new ReadResourceResult(List.of())); assertThatThrownBy(() -> serverWithoutResources.addResource(registration)).isInstanceOf(McpError.class) .hasMessage("Server must be configured with resource capabilities"); @@ -252,7 +249,7 @@ public abstract class AbstractMcpSyncServerTests { @Test void testRemoveResourceWithoutCapability() { - var serverWithoutResources = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var serverWithoutResources = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThatThrownBy(() -> serverWithoutResources.removeResource(TEST_RESOURCE_URI)).isInstanceOf(McpError.class) .hasMessage("Server must be configured with resource capabilities"); @@ -264,7 +261,7 @@ public abstract class AbstractMcpSyncServerTests { @Test void testNotifyPromptsListChanged() { - var mcpSyncServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var mcpSyncServer = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThatCode(() -> mcpSyncServer.notifyPromptsListChanged()).doesNotThrowAnyException(); @@ -273,23 +270,24 @@ public abstract class AbstractMcpSyncServerTests { @Test void testAddPromptWithNullRegistration() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().prompts(false).build()) - .sync(); + .build(); - assertThatThrownBy(() -> mcpSyncServer.addPrompt(null)).isInstanceOf(McpError.class) + assertThatThrownBy(() -> mcpSyncServer.addPrompt((McpServerFeatures.SyncPromptRegistration) null)) + .isInstanceOf(McpError.class) .hasMessage("Prompt registration must not be null"); } @Test void testAddPromptWithoutCapability() { - var serverWithoutPrompts = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var serverWithoutPrompts = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); Prompt prompt = new Prompt(TEST_PROMPT_NAME, "Test Prompt", List.of()); - PromptRegistration registration = new PromptRegistration(prompt, req -> new GetPromptResult( - "Test prompt description", - List.of(new PromptMessage(McpSchema.Role.ASSISTANT, new McpSchema.TextContent("Test content"))))); + McpServerFeatures.SyncPromptRegistration registration = new McpServerFeatures.SyncPromptRegistration(prompt, + req -> new GetPromptResult("Test prompt description", List + .of(new PromptMessage(McpSchema.Role.ASSISTANT, new McpSchema.TextContent("Test content"))))); assertThatThrownBy(() -> serverWithoutPrompts.addPrompt(registration)).isInstanceOf(McpError.class) .hasMessage("Server must be configured with prompt capabilities"); @@ -297,7 +295,7 @@ public abstract class AbstractMcpSyncServerTests { @Test void testRemovePromptWithoutCapability() { - var serverWithoutPrompts = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var serverWithoutPrompts = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThatThrownBy(() -> serverWithoutPrompts.removePrompt(TEST_PROMPT_NAME)).isInstanceOf(McpError.class) .hasMessage("Server must be configured with prompt capabilities"); @@ -306,15 +304,15 @@ public abstract class AbstractMcpSyncServerTests { @Test void testRemovePrompt() { Prompt prompt = new Prompt(TEST_PROMPT_NAME, "Test Prompt", List.of()); - PromptRegistration registration = new PromptRegistration(prompt, req -> new GetPromptResult( - "Test prompt description", - List.of(new PromptMessage(McpSchema.Role.ASSISTANT, new McpSchema.TextContent("Test content"))))); + McpServerFeatures.SyncPromptRegistration registration = new McpServerFeatures.SyncPromptRegistration(prompt, + req -> new GetPromptResult("Test prompt description", List + .of(new PromptMessage(McpSchema.Role.ASSISTANT, new McpSchema.TextContent("Test content"))))); - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().prompts(true).build()) .prompts(registration) - .sync(); + .build(); assertThatCode(() -> mcpSyncServer.removePrompt(TEST_PROMPT_NAME)).doesNotThrowAnyException(); @@ -323,10 +321,10 @@ public abstract class AbstractMcpSyncServerTests { @Test void testRemoveNonexistentPrompt() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().prompts(true).build()) - .sync(); + .build(); assertThatThrownBy(() -> mcpSyncServer.removePrompt("nonexistent-prompt")).isInstanceOf(McpError.class) .hasMessage("Prompt with name 'nonexistent-prompt' not found"); @@ -344,7 +342,7 @@ public abstract class AbstractMcpSyncServerTests { var rootsReceived = new McpSchema.Root[1]; var consumerCalled = new boolean[1]; - var singleConsumerServer = McpServer.using(createMcpTransport()) + var singleConsumerServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .rootsChangeConsumers(List.of(roots -> { consumerCalled[0] = true; @@ -352,7 +350,7 @@ public abstract class AbstractMcpSyncServerTests { rootsReceived[0] = roots.get(0); } })) - .sync(); + .build(); assertThat(singleConsumerServer).isNotNull(); assertThatCode(() -> singleConsumerServer.closeGracefully()).doesNotThrowAnyException(); @@ -363,32 +361,32 @@ public abstract class AbstractMcpSyncServerTests { var consumer2Called = new boolean[1]; var rootsContent = new List[1]; - var multipleConsumersServer = McpServer.using(createMcpTransport()) + var multipleConsumersServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .rootsChangeConsumers(List.of(roots -> { consumer1Called[0] = true; rootsContent[0] = roots; }, roots -> consumer2Called[0] = true)) - .sync(); + .build(); assertThat(multipleConsumersServer).isNotNull(); assertThatCode(() -> multipleConsumersServer.closeGracefully()).doesNotThrowAnyException(); onClose(); // Test error handling - var errorHandlingServer = McpServer.using(createMcpTransport()) + var errorHandlingServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .rootsChangeConsumers(List.of(roots -> { throw new RuntimeException("Test error"); })) - .sync(); + .build(); assertThat(errorHandlingServer).isNotNull(); assertThatCode(() -> errorHandlingServer.closeGracefully()).doesNotThrowAnyException(); onClose(); // Test without consumers - var noConsumersServer = McpServer.using(createMcpTransport()).serverInfo("test-server", "1.0.0").sync(); + var noConsumersServer = McpServer.sync(createMcpTransport()).serverInfo("test-server", "1.0.0").build(); assertThat(noConsumersServer).isNotNull(); assertThatCode(() -> noConsumersServer.closeGracefully()).doesNotThrowAnyException(); @@ -400,10 +398,10 @@ public abstract class AbstractMcpSyncServerTests { @Test void testLoggingLevels() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().logging().build()) - .sync(); + .build(); // Test all logging levels for (McpSchema.LoggingLevel level : McpSchema.LoggingLevel.values()) { @@ -419,10 +417,10 @@ public abstract class AbstractMcpSyncServerTests { @Test void testLoggingWithoutCapability() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().build()) // No logging capability - .sync(); + .build(); var notification = McpSchema.LoggingMessageNotification.builder() .level(McpSchema.LoggingLevel.INFO) @@ -435,10 +433,10 @@ public abstract class AbstractMcpSyncServerTests { @Test void testLoggingWithNullNotification() { - var mcpSyncServer = McpServer.using(createMcpTransport()) + var mcpSyncServer = McpServer.sync(createMcpTransport()) .serverInfo("test-server", "1.0.0") .capabilities(ServerCapabilities.builder().logging().build()) - .sync(); + .build(); assertThatThrownBy(() -> mcpSyncServer.loggingNotification(null)).isInstanceOf(McpError.class); } diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransportIntegrationTests.java b/mcp/src/test/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransportIntegrationTests.java index 71338a9..bc6bc06 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransportIntegrationTests.java +++ b/mcp/src/test/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransportIntegrationTests.java @@ -36,7 +36,7 @@ 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.McpServer.ToolRegistration; +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; @@ -63,7 +63,7 @@ public class HttpServletSseServerTransportIntegrationTests { private HttpServletSseServerTransport mcpServerTransport; - McpClient.Builder clientBuilder; + McpClient.SyncSpec clientBuilder; private Tomcat tomcat; @@ -99,7 +99,7 @@ public class HttpServletSseServerTransportIntegrationTests { throw new RuntimeException("Failed to start Tomcat", e); } - this.clientBuilder = McpClient.using(new HttpClientSseClientTransport("http://localhost:" + PORT)); + this.clientBuilder = McpClient.sync(new HttpClientSseClientTransport("http://localhost:" + PORT)); } @AfterEach @@ -120,7 +120,7 @@ public class HttpServletSseServerTransportIntegrationTests { @Test void testCreateMessageWithoutInitialization() { - var mcpAsyncServer = McpServer.using(mcpServerTransport).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(mcpServerTransport).serverInfo("test-server", "1.0.0").build(); var messages = List .of(new McpSchema.SamplingMessage(McpSchema.Role.USER, new McpSchema.TextContent("Test message"))); @@ -137,9 +137,9 @@ public class HttpServletSseServerTransportIntegrationTests { @Test void testCreateMessageWithoutSamplingCapabilities() { - var mcpAsyncServer = McpServer.using(mcpServerTransport).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(mcpServerTransport).serverInfo("test-server", "1.0.0").build(); - var client = clientBuilder.clientInfo(new McpSchema.Implementation("Sample client", "0.0.0")).sync(); + var client = clientBuilder.clientInfo(new McpSchema.Implementation("Sample client", "0.0.0")).build(); InitializeResult initResult = client.initialize(); assertThat(initResult).isNotNull(); @@ -159,7 +159,7 @@ public class HttpServletSseServerTransportIntegrationTests { @Test void testCreateMessageSuccess() { - var mcpAsyncServer = McpServer.using(mcpServerTransport).serverInfo("test-server", "1.0.0").async(); + var mcpAsyncServer = McpServer.async(mcpServerTransport).serverInfo("test-server", "1.0.0").build(); Function samplingHandler = request -> { assertThat(request.messages()).hasSize(1); @@ -172,7 +172,7 @@ public class HttpServletSseServerTransportIntegrationTests { var client = clientBuilder.clientInfo(new McpSchema.Implementation("Sample client", "0.0.0")) .capabilities(ClientCapabilities.builder().sampling().build()) .sampling(samplingHandler) - .sync(); + .build(); InitializeResult initResult = client.initialize(); assertThat(initResult).isNotNull(); @@ -199,13 +199,13 @@ public class HttpServletSseServerTransportIntegrationTests { List roots = List.of(new Root("uri1://", "root1"), new Root("uri2://", "root2")); AtomicReference> rootsRef = new AtomicReference<>(); - var mcpServer = McpServer.using(mcpServerTransport) + var mcpServer = McpServer.sync(mcpServerTransport) .rootsChangeConsumer(rootsUpdate -> rootsRef.set(rootsUpdate)) - .sync(); + .build(); var mcpClient = clientBuilder.capabilities(ClientCapabilities.builder().roots(true).build()) .roots(roots) - .sync(); + .build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -235,8 +235,8 @@ public class HttpServletSseServerTransportIntegrationTests { @Test void testToolCallSuccess() { var callResponse = new McpSchema.CallToolResult(List.of(new McpSchema.TextContent("CALL RESPONSE")), null); - ToolRegistration tool1 = new ToolRegistration(new McpSchema.Tool("tool1", "tool1 description", emptyJsonSchema), - request -> { + McpServerFeatures.SyncToolRegistration tool1 = new McpServerFeatures.SyncToolRegistration( + 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") @@ -246,12 +246,12 @@ public class HttpServletSseServerTransportIntegrationTests { return callResponse; }); - var mcpServer = McpServer.using(mcpServerTransport) + var mcpServer = McpServer.sync(mcpServerTransport) .capabilities(ServerCapabilities.builder().tools(true).build()) .tools(tool1) - .sync(); + .build(); - var mcpClient = clientBuilder.sync(); + var mcpClient = clientBuilder.build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -270,8 +270,8 @@ public class HttpServletSseServerTransportIntegrationTests { @Test void testToolListChangeHandlingSuccess() { var callResponse = new McpSchema.CallToolResult(List.of(new McpSchema.TextContent("CALL RESPONSE")), null); - ToolRegistration tool1 = new ToolRegistration(new McpSchema.Tool("tool1", "tool1 description", emptyJsonSchema), - request -> { + McpServerFeatures.SyncToolRegistration tool1 = new McpServerFeatures.SyncToolRegistration( + 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") @@ -281,10 +281,10 @@ public class HttpServletSseServerTransportIntegrationTests { return callResponse; }); - var mcpServer = McpServer.using(mcpServerTransport) + var mcpServer = McpServer.sync(mcpServerTransport) .capabilities(ServerCapabilities.builder().tools(true).build()) .tools(tool1) - .sync(); + .build(); AtomicReference> toolsRef = new AtomicReference<>(); var mcpClient = clientBuilder.toolsChangeConsumer(toolsUpdate -> { @@ -295,7 +295,7 @@ public class HttpServletSseServerTransportIntegrationTests { .body(String.class); assertThat(response).isNotBlank(); toolsRef.set(toolsUpdate); - }).sync(); + }).build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); @@ -316,8 +316,8 @@ public class HttpServletSseServerTransportIntegrationTests { assertThat(toolsRef.get()).isEmpty(); }); - ToolRegistration tool2 = new ToolRegistration(new McpSchema.Tool("tool2", "tool2 description", emptyJsonSchema), - request -> callResponse); + McpServerFeatures.SyncToolRegistration tool2 = new McpServerFeatures.SyncToolRegistration( + new McpSchema.Tool("tool2", "tool2 description", emptyJsonSchema), request -> callResponse); mcpServer.addTool(tool2); @@ -331,8 +331,8 @@ public class HttpServletSseServerTransportIntegrationTests { @Test void testInitialize() { - var mcpServer = McpServer.using(mcpServerTransport).sync(); - var mcpClient = clientBuilder.sync(); + var mcpServer = McpServer.sync(mcpServerTransport).build(); + var mcpClient = clientBuilder.build(); InitializeResult initResult = mcpClient.initialize(); assertThat(initResult).isNotNull(); diff --git a/mcp/src/test/java/org/springframework/ai/mcp/spec/DefaultMcpSessionTests.java b/mcp/src/test/java/org/springframework/ai/mcp/spec/DefaultMcpSessionTests.java index acf7c44..9af6513 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/spec/DefaultMcpSessionTests.java +++ b/mcp/src/test/java/org/springframework/ai/mcp/spec/DefaultMcpSessionTests.java @@ -150,7 +150,7 @@ class DefaultMcpSessionTests { @Test void testRequestHandling() { String echoMessage = "Hello MCP!"; - Map requestHandlers = Map.of(ECHO_METHOD, + Map> requestHandlers = Map.of(ECHO_METHOD, params -> Mono.just(params)); transport = new MockMcpTransport(); session = new DefaultMcpSession(TIMEOUT, transport, requestHandlers, Map.of()); 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 index 943f988..a3c5e44 100644 --- 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 @@ -26,6 +26,7 @@ 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; @@ -60,14 +61,62 @@ 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 @@ -88,7 +137,9 @@ public final class ToolHelper { * @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(), From 919433437c1b6066b50fdcf9e2a29629128ad418 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dariusz=20J=C4=99drzejczyk?= Date: Thu, 23 Jan 2025 13:33:11 +0100 Subject: [PATCH 010/443] Polish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Dariusz Jędrzejczyk --- .../ai/mcp/client/McpAsyncClient.java | 31 ++++-- .../ai/mcp/client/McpClient.java | 98 ++++++++++++++----- .../ai/mcp/client/McpClientFeatures.java | 21 ++-- .../ai/mcp/client/McpSyncClient.java | 9 ++ .../ai/mcp/server/McpAsyncServer.java | 33 ++++++- .../ai/mcp/server/McpServer.java | 55 ++++++----- .../ai/mcp/server/McpServerFeatures.java | 2 + .../ai/mcp/server/McpSyncServer.java | 1 + 8 files changed, 181 insertions(+), 69 deletions(-) diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java b/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java index 22d0804..5d82881 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java @@ -517,7 +517,7 @@ public class McpAsyncClient { return this.mcpSession.sendNotification(McpSchema.METHOD_NOTIFICATION_ROOTS_LIST_CHANGED); } - private RequestHandler rootsListRequestHandler() { + private RequestHandler rootsListRequestHandler() { return params -> { McpSchema.PaginatedRequest request = transport.unmarshalFrom(params, new TypeReference() { @@ -545,10 +545,10 @@ public class McpAsyncClient { // -------------------------- // Tools // -------------------------- - private static TypeReference CALL_TOOL_RESULT_TYPE_REF = new TypeReference<>() { + private static final TypeReference CALL_TOOL_RESULT_TYPE_REF = new TypeReference<>() { }; - private static TypeReference LIST_TOOLS_RESULT_TYPE_REF = new TypeReference<>() { + private static final TypeReference LIST_TOOLS_RESULT_TYPE_REF = new TypeReference<>() { }; /** @@ -601,6 +601,7 @@ public class McpAsyncClient { * list to all registered consumers 3. Handling any errors that occur during this * process */ + @Deprecated private NotificationHandler toolsChangeNotificationHandler( List>> toolsChangeConsumers) { @@ -631,6 +632,10 @@ public class McpAsyncClient { // TODO: params are not used yet return params -> listTools().flatMap(listToolsResult -> Flux.fromIterable(toolsChangeConsumers) .flatMap(consumer -> consumer.apply(listToolsResult.tools())) + .onErrorResume(error -> { + logger.error("Error handling tools list change notification", error); + return Mono.empty(); + }) .then()); } @@ -638,13 +643,13 @@ public class McpAsyncClient { // Resources // -------------------------- - private static TypeReference LIST_RESOURCES_RESULT_TYPE_REF = new TypeReference<>() { + private static final TypeReference LIST_RESOURCES_RESULT_TYPE_REF = new TypeReference<>() { }; - private static TypeReference READ_RESOURCE_RESULT_TYPE_REF = new TypeReference<>() { + private static final TypeReference READ_RESOURCE_RESULT_TYPE_REF = new TypeReference<>() { }; - private static TypeReference LIST_RESOURCE_TEMPLATES_RESULT_TYPE_REF = new TypeReference<>() { + private static final TypeReference LIST_RESOURCE_TEMPLATES_RESULT_TYPE_REF = new TypeReference<>() { }; /** @@ -742,6 +747,7 @@ public class McpAsyncClient { VOID_TYPE_REFERENCE); } + @Deprecated private NotificationHandler resourcesChangeNotificationHandler( List>> resourcesChangeConsumers) { @@ -759,16 +765,20 @@ public class McpAsyncClient { List, Mono>> resourcesChangeConsumers) { return params -> listResources().flatMap(listResourcesResult -> Flux.fromIterable(resourcesChangeConsumers) .flatMap(consumer -> consumer.apply(listResourcesResult.resources())) + .onErrorResume(error -> { + logger.error("Error handling resources list change notification", error); + return Mono.empty(); + }) .then()); } // -------------------------- // Prompts // -------------------------- - private static TypeReference LIST_PROMPTS_RESULT_TYPE_REF = new TypeReference<>() { + private static final TypeReference LIST_PROMPTS_RESULT_TYPE_REF = new TypeReference<>() { }; - private static TypeReference GET_PROMPT_RESULT_TYPE_REF = new TypeReference<>() { + private static final TypeReference GET_PROMPT_RESULT_TYPE_REF = new TypeReference<>() { }; /** @@ -808,6 +818,7 @@ public class McpAsyncClient { return this.mcpSession.sendNotification(McpSchema.METHOD_NOTIFICATION_PROMPTS_LIST_CHANGED); } + @Deprecated private NotificationHandler promptsChangeNotificationHandler( List>> promptsChangeConsumers) { @@ -827,6 +838,10 @@ public class McpAsyncClient { List, Mono>> promptsChangeConsumers) { return params -> listPrompts().flatMap(listPromptsResult -> Flux.fromIterable(promptsChangeConsumers) .flatMap(consumer -> consumer.apply(listPromptsResult.prompts())) + .onErrorResume(error -> { + logger.error("Error handling prompts list change notification", error); + return Mono.empty(); + }) .then()); } diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClient.java b/mcp/src/main/java/org/springframework/ai/mcp/client/McpClient.java index 69a811e..e11a9a7 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClient.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/client/McpClient.java @@ -65,7 +65,7 @@ import org.springframework.ai.mcp.util.Assert; * .requestTimeout(Duration.ofSeconds(5)) * .build(); * } - * + * * Example of creating a basic asynchronous client:
    {@code
      * McpClient.async(transport)
      *     .requestTimeout(Duration.ofSeconds(5))
    @@ -114,6 +114,40 @@ import org.springframework.ai.mcp.util.Assert;
      */
     public interface McpClient {
     
    +	/**
    +	 * Start building a synchronous MCP client with the specified transport layer. The
    +	 * synchronous MCP client 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. 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
    +	 */
    +	static SyncSpec sync(ClientMcpTransport transport) {
    +		return new SyncSpec(transport);
    +	}
    +
    +	/**
    +	 * Start building an asynchronous MCP client with the specified transport layer. The
    +	 * asynchronous MCP client provides non-blocking operations. Asynchronous clients
    +	 * return reactive primitives (Mono/Flux) immediately, allowing for concurrent
    +	 * operations and reactive programming patterns. 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
    +	 */
    +	static AsyncSpec async(ClientMcpTransport transport) {
    +		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
    @@ -371,7 +405,20 @@ public interface McpClient {
     	}
     
     	/**
    -	 * Synchronous client specification.
    +	 * Synchronous client specification. 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 + *
    */ class SyncSpec { @@ -381,21 +428,22 @@ public interface McpClient { private ClientCapabilities capabilities; - private Implementation clientInfo = new Implementation("Spring AI MCP Client", "0.3.1"); + private Implementation clientInfo = new Implementation("Spring AI MCP Client", "1.0.0"); - private Map roots = new HashMap<>(); + private final Map roots = new HashMap<>(); - private List>> toolsChangeConsumers = new ArrayList<>(); + private final List>> toolsChangeConsumers = new ArrayList<>(); - private List>> resourcesChangeConsumers = new ArrayList<>(); + private final List>> resourcesChangeConsumers = new ArrayList<>(); - private List>> promptsChangeConsumers = new ArrayList<>(); + private final List>> promptsChangeConsumers = new ArrayList<>(); - private List> loggingConsumers = new ArrayList<>(); + private final List> loggingConsumers = new ArrayList<>(); private Function samplingHandler; private SyncSpec(ClientMcpTransport transport) { + Assert.notNull(transport, "Transport must not be null"); this.transport = transport; } @@ -581,7 +629,20 @@ public interface McpClient { } /** - * Asynchronous client specification. + * Asynchronous client specification. 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 + *
    */ class AsyncSpec { @@ -593,19 +654,20 @@ public interface McpClient { private Implementation clientInfo = new Implementation("Spring AI MCP Client", "0.3.1"); - private Map roots = new HashMap<>(); + private final Map roots = new HashMap<>(); - private List, Mono>> toolsChangeConsumers = new ArrayList<>(); + private final List, Mono>> toolsChangeConsumers = new ArrayList<>(); - private List, Mono>> resourcesChangeConsumers = new ArrayList<>(); + private final List, Mono>> resourcesChangeConsumers = new ArrayList<>(); - private List, Mono>> promptsChangeConsumers = new ArrayList<>(); + private final List, Mono>> promptsChangeConsumers = new ArrayList<>(); - private List>> loggingConsumers = new ArrayList<>(); + private final List>> loggingConsumers = new ArrayList<>(); private Function> samplingHandler; private AsyncSpec(ClientMcpTransport transport) { + Assert.notNull(transport, "Transport must not be null"); this.transport = transport; } @@ -789,12 +851,4 @@ public interface McpClient { } - static SyncSpec sync(ClientMcpTransport transport) { - return new SyncSpec(transport); - } - - static AsyncSpec async(ClientMcpTransport transport) { - return new AsyncSpec(transport); - } - } diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java b/mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java index 9277398..7d8bb17 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java @@ -16,8 +16,8 @@ import org.springframework.ai.mcp.util.Assert; import org.springframework.ai.mcp.util.Utils; /** - * Internal representation of features and capabilities for Model Context Protocol (MCP) - * clients. This class provides two record types for managing client features: + * Representation of features and capabilities for Model Context Protocol (MCP) clients. + * This class provides two record types for managing client features: *
      *
    • {@link Async} for non-blocking operations with Project Reactor's Mono responses *
    • {@link Sync} for blocking operations with direct responses @@ -38,6 +38,7 @@ import org.springframework.ai.mcp.util.Utils; * through the {@link Async#fromSync} method, which ensures proper handling of blocking * operations in non-blocking contexts by scheduling them on a bounded elastic scheduler. * + * @author Dariusz Jędrzejczyk * @see McpClient * @see McpSchema.Implementation * @see McpSchema.ClientCapabilities @@ -92,10 +93,10 @@ class McpClientFeatures { samplingHandler != null ? new McpSchema.ClientCapabilities.Sampling() : null); this.roots = roots != null ? new ConcurrentHashMap<>(roots) : new ConcurrentHashMap<>(); - this.toolsChangeConsumers = toolsChangeConsumers; - this.resourcesChangeConsumers = resourcesChangeConsumers; - this.promptsChangeConsumers = promptsChangeConsumers; - this.loggingConsumers = loggingConsumers; + this.toolsChangeConsumers = toolsChangeConsumers != null ? toolsChangeConsumers : List.of(); + this.resourcesChangeConsumers = resourcesChangeConsumers != null ? resourcesChangeConsumers : List.of(); + this.promptsChangeConsumers = promptsChangeConsumers != null ? promptsChangeConsumers : List.of(); + this.loggingConsumers = loggingConsumers != null ? loggingConsumers : List.of(); this.samplingHandler = samplingHandler; } @@ -189,10 +190,10 @@ class McpClientFeatures { samplingHandler != null ? new McpSchema.ClientCapabilities.Sampling() : null); this.roots = roots != null ? new HashMap<>(roots) : new HashMap<>(); - this.toolsChangeConsumers = toolsChangeConsumers; - this.resourcesChangeConsumers = resourcesChangeConsumers; - this.promptsChangeConsumers = promptsChangeConsumers; - this.loggingConsumers = loggingConsumers; + this.toolsChangeConsumers = toolsChangeConsumers != null ? toolsChangeConsumers : List.of(); + this.resourcesChangeConsumers = resourcesChangeConsumers != null ? resourcesChangeConsumers : List.of(); + this.promptsChangeConsumers = promptsChangeConsumers != null ? promptsChangeConsumers : List.of(); + this.loggingConsumers = loggingConsumers != null ? loggingConsumers : List.of(); this.samplingHandler = samplingHandler; } } diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpSyncClient.java b/mcp/src/main/java/org/springframework/ai/mcp/client/McpSyncClient.java index 954f7aa..1d008ab 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpSyncClient.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/client/McpSyncClient.java @@ -21,6 +21,7 @@ import java.time.Duration; 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; @@ -74,6 +75,14 @@ public class McpSyncClient implements AutoCloseable { private final McpAsyncClient delegate; + /** + * Create a new McpSyncClient with the given delegate. + * @param delegate the asynchronous kernel on top of which this synchronous client + * provides a blocking API. + * @deprecated Use {@link McpClient#sync(ClientMcpTransport)} to obtain an instance. + */ + @Deprecated + // TODO make the constructor package private post-deprecation public McpSyncClient(McpAsyncClient delegate) { Assert.notNull(delegate, "The delegate can not be null"); this.delegate = delegate; diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java b/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java index d5e3043..8d406a5 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java @@ -84,6 +84,7 @@ import org.springframework.ai.mcp.util.Utils; * connected clients of changes when configured to do so. * * @author Christian Tzolov + * @author Dariusz Jędrzejczyk * @see McpServer * @see McpSchema * @see DefaultMcpSession @@ -137,7 +138,7 @@ public class McpAsyncServer { Map> requestHandlers = new HashMap<>(); // Initialize request handlers for standard MCP methods - requestHandlers.put(McpSchema.METHOD_INITIALIZE, initializeRequestHandler()); + requestHandlers.put(McpSchema.METHOD_INITIALIZE, asyncInitializeRequestHandler()); // Ping MUST respond with an empty data, but not NULL response. requestHandlers.put(McpSchema.METHOD_PING, (params) -> Mono.just("")); @@ -287,6 +288,28 @@ public class McpAsyncServer { // --------------------------------------- // Lifecycle Management // --------------------------------------- + private DefaultMcpSession.RequestHandler asyncInitializeRequestHandler() { + 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())); + } + + return Mono.just(new McpSchema.InitializeResult(McpSchema.LATEST_PROTOCOL_VERSION, this.serverCapabilities, + this.serverInfo, null)); + }; + } + + @Deprecated private DefaultMcpSession.RequestHandler initializeRequestHandler() { return params -> { McpSchema.InitializeRequest initializeRequest = transport.unmarshalFrom(params, @@ -360,7 +383,7 @@ public class McpAsyncServer { this.mcpSession.close(); } - private static TypeReference LIST_ROOTS_RESULT_TYPE_REF = new TypeReference<>() { + private static final TypeReference LIST_ROOTS_RESULT_TYPE_REF = new TypeReference<>() { }; /** @@ -399,6 +422,10 @@ public class McpAsyncServer { List, Mono>> rootsChangeConsumers) { return params -> listRoots().flatMap(listRootsResult -> Flux.fromIterable(rootsChangeConsumers) .flatMap(consumer -> consumer.apply(listRootsResult.roots())) + .onErrorResume(error -> { + logger.error("Error handling roots list change notification", error); + return Mono.empty(); + }) .then()); } @@ -654,7 +681,7 @@ public class McpAsyncServer { var resourceUri = resourceRequest.uri(); McpServerFeatures.AsyncResourceRegistration registration = this.resources.get(resourceUri); if (registration != null) { - return this.resources.get(resourceUri).readHandler().apply(resourceRequest); + return registration.readHandler().apply(resourceRequest); } return Mono.error(new McpError("Resource not found: " + resourceUri)); }; diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java b/mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java index 1fbf47b..615fd51 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java @@ -120,12 +120,37 @@ import org.springframework.ai.mcp.util.Assert; * }
    * * @author Christian Tzolov + * @author Dariusz Jędrzejczyk * @see McpAsyncServer * @see McpSyncServer * @see McpTransport */ public interface McpServer { + /** + * Starts building 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. + * @param transport The transport layer implementation for MCP communication + * @return A new instance of {@link SyncSpec} for configuring the server. + */ + static SyncSpec sync(ServerMcpTransport transport) { + return new SyncSpec(transport); + } + + /** + * Starts building an asynchronous MCP server that provides blocking operations. + * Asynchronous servers can handle multiple requests concurrently using a functional + * paradigm with non-blocking server transports, making them more efficient for + * high-concurrency scenarios but more complex to implement. + * @param transport The transport layer implementation for MCP communication + * @return A new instance of {@link SyncSpec} for configuring the server. + */ + static AsyncSpec async(ServerMcpTransport transport) { + return new AsyncSpec(transport); + } + /** * Start building an MCP server with the specified transport. * @param transport The transport layer implementation for MCP communication @@ -170,7 +195,7 @@ public interface McpServer { */ private final Map resources = new HashMap<>(); - private List resourceTemplates = new ArrayList<>(); + private final List resourceTemplates = new ArrayList<>(); /** * The Model Context Protocol (MCP) provides a standardized way for servers to @@ -547,7 +572,7 @@ public interface McpServer { */ private final Map resources = new HashMap<>(); - private List resourceTemplates = new ArrayList<>(); + private final List resourceTemplates = new ArrayList<>(); /** * The Model Context Protocol (MCP) provides a standardized way for servers to @@ -556,9 +581,9 @@ public interface McpServer { * discover available prompts, retrieve their contents, and provide arguments to * customize them. */ - private Map prompts = new HashMap<>(); + private final Map prompts = new HashMap<>(); - private List>> rootsChangeConsumers = new ArrayList<>(); + private final List>> rootsChangeConsumers = new ArrayList<>(); private SyncSpec(ServerMcpTransport transport) { Assert.notNull(transport, "Transport must not be null"); @@ -895,28 +920,6 @@ public interface McpServer { } - /** - * 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 SyncSpec} for configuring the server. - */ - static SyncSpec sync(ServerMcpTransport transport) { - return new SyncSpec(transport); - } - - /** - * Builds an asynchronous MCP server that provides non-blocking operations. - * Asynchronous servers can handle multiple requests concurrently using a functional - * paradigm with non-blocking server transports, making them more efficient for - * high-concurrency scenarios but more complex to implement. - * @return A new instance of {@link SyncSpec} for configuring the server. - */ - static AsyncSpec async(ServerMcpTransport transport) { - return new AsyncSpec(transport); - } - /** * Builder class for creating MCP servers with custom configuration. * diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpServerFeatures.java b/mcp/src/main/java/org/springframework/ai/mcp/server/McpServerFeatures.java index 0faba95..2dd4e66 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpServerFeatures.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/server/McpServerFeatures.java @@ -16,6 +16,8 @@ import org.springframework.ai.mcp.util.Utils; /** * MCP server features specification that a particular server can choose to support. + * + * @author Dariusz Jędrzejczyk */ public class McpServerFeatures { diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpSyncServer.java b/mcp/src/main/java/org/springframework/ai/mcp/server/McpSyncServer.java index 97c949f..004f7a3 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpSyncServer.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/server/McpSyncServer.java @@ -60,6 +60,7 @@ import org.springframework.ai.mcp.util.Assert; * connected clients of changes when configured to do so. * * @author Christian Tzolov + * @author Dariusz Jędrzejczyk * @see McpAsyncServer * @see McpSchema */ From 7359750cdbb15a39aec746cb422cfa2baf30771f Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Thu, 23 Jan 2025 14:05:32 +0100 Subject: [PATCH 011/443] Update 0.6.0-MIGRATION-GUIDE.md remove unrelated sections --- mcp-docs/0.6.0-MIGRATION-GUIDE.md | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/mcp-docs/0.6.0-MIGRATION-GUIDE.md b/mcp-docs/0.6.0-MIGRATION-GUIDE.md index 37592d0..2034273 100644 --- a/mcp-docs/0.6.0-MIGRATION-GUIDE.md +++ b/mcp-docs/0.6.0-MIGRATION-GUIDE.md @@ -237,22 +237,3 @@ The following APIs are deprecated and will be removed in a future release: - `McpServer.ResourceRegistration` - Use `McpServerFeatures.SyncResourceRegistration` or `McpServerFeatures.AsyncResourceRegistration` instead - `McpServer.PromptRegistration` - Use `McpServerFeatures.SyncPromptRegistration` or `McpServerFeatures.AsyncPromptRegistration` instead - `ToolHelper.toToolRegistration()` - Use `ToolHelper.toSyncToolRegistration()` instead - -## Benefits of Migration - -1. **Improved Type Safety**: The new builder patterns and feature classes provide better compile-time type checking. - -2. **Clear Async/Sync Separation**: Distinct builders and features for sync and async operations make the code intent clearer. - -3. **Enhanced Reactive Support**: Async operations now properly integrate with Project Reactor's `Mono` type. - -4. **Better Error Handling**: More consistent error handling across sync and async operations. - -5. **Simplified Configuration**: Builder patterns provide a more intuitive way to configure clients and servers. - -## Additional Notes - -- The migration primarily focuses on builder patterns and feature organization -- Functional behavior remains the same after migration -- Async operations now properly integrate with Project Reactor -- All deprecated APIs will continue to work but will be removed in a future release From a83f41381afc524411dd774564df1c24bb80b9ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dariusz=20J=C4=99drzejczyk?= Date: Thu, 23 Jan 2025 14:57:25 +0100 Subject: [PATCH 012/443] Align abstract tests in mcp-test with mcp-core (#70) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Dariusz Jędrzejczyk --- ....java => AbstractMcpAsyncClientTests.java} | 2 +- ...s.java => AbstractMcpSyncClientTests.java} | 2 +- ....java => AbstractMcpAsyncServerTests.java} | 2 +- ...s.java => AbstractMcpSyncServerTests.java} | 3 +- .../transport/BlaBlockingInputStream.java | 81 ------------------- .../client/WebFluxSseMcpAsyncClientTests.java | 2 +- .../client/WebFluxSseMcpSyncClientTests.java | 2 +- .../server/WebFluxSseMcpAsyncServerTests.java | 2 +- .../server/WebFluxSseMcpSyncServerTests.java | 2 +- .../WebMvcSseAsyncServerTransportTests.java | 2 +- .../WebMvcSseSyncServerTransportTests.java | 2 +- .../client/AbstractMcpAsyncClientTests.java | 1 + .../client/AbstractMcpSyncClientTests.java | 1 + .../server/AbstractMcpAsyncServerTests.java | 1 + .../server/AbstractMcpSyncServerTests.java | 1 + 15 files changed, 14 insertions(+), 92 deletions(-) rename mcp-test/src/main/java/org/springframework/ai/mcp/client/{BlaAbstractMcpAsyncClientTests.java => AbstractMcpAsyncClientTests.java} (99%) rename mcp-test/src/main/java/org/springframework/ai/mcp/client/{BlaAbstractMcpSyncClientTests.java => AbstractMcpSyncClientTests.java} (99%) rename mcp-test/src/main/java/org/springframework/ai/mcp/server/{BlaAbstractMcpAsyncServerTests.java => AbstractMcpAsyncServerTests.java} (99%) rename mcp-test/src/main/java/org/springframework/ai/mcp/server/{BlaAbstractMcpSyncServerTests.java => AbstractMcpSyncServerTests.java} (99%) delete mode 100644 mcp-test/src/main/java/org/springframework/ai/mcp/server/transport/BlaBlockingInputStream.java diff --git a/mcp-test/src/main/java/org/springframework/ai/mcp/client/BlaAbstractMcpAsyncClientTests.java b/mcp-test/src/main/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java similarity index 99% rename from mcp-test/src/main/java/org/springframework/ai/mcp/client/BlaAbstractMcpAsyncClientTests.java rename to mcp-test/src/main/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java index edceae9..2579f57 100644 --- a/mcp-test/src/main/java/org/springframework/ai/mcp/client/BlaAbstractMcpAsyncClientTests.java +++ b/mcp-test/src/main/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java @@ -54,7 +54,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; * @author Christian Tzolov * @author Dariusz Jędrzejczyk */ -public abstract class BlaAbstractMcpAsyncClientTests { +public abstract class AbstractMcpAsyncClientTests { private McpAsyncClient mcpAsyncClient; diff --git a/mcp-test/src/main/java/org/springframework/ai/mcp/client/BlaAbstractMcpSyncClientTests.java b/mcp-test/src/main/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java similarity index 99% rename from mcp-test/src/main/java/org/springframework/ai/mcp/client/BlaAbstractMcpSyncClientTests.java rename to mcp-test/src/main/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java index 26e453c..c012612 100644 --- a/mcp-test/src/main/java/org/springframework/ai/mcp/client/BlaAbstractMcpSyncClientTests.java +++ b/mcp-test/src/main/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java @@ -50,7 +50,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; * @author Christian Tzolov * @author Dariusz Jędrzejczyk */ -public abstract class BlaAbstractMcpSyncClientTests { +public abstract class AbstractMcpSyncClientTests { private McpSyncClient mcpSyncClient; diff --git a/mcp-test/src/main/java/org/springframework/ai/mcp/server/BlaAbstractMcpAsyncServerTests.java b/mcp-test/src/main/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java similarity index 99% rename from mcp-test/src/main/java/org/springframework/ai/mcp/server/BlaAbstractMcpAsyncServerTests.java rename to mcp-test/src/main/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java index 807bcc5..0c7c1aa 100644 --- a/mcp-test/src/main/java/org/springframework/ai/mcp/server/BlaAbstractMcpAsyncServerTests.java +++ b/mcp-test/src/main/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java @@ -48,7 +48,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; * * @author Christian Tzolov */ -public abstract class BlaAbstractMcpAsyncServerTests { +public abstract class AbstractMcpAsyncServerTests { private static final String TEST_TOOL_NAME = "test-tool"; diff --git a/mcp-test/src/main/java/org/springframework/ai/mcp/server/BlaAbstractMcpSyncServerTests.java b/mcp-test/src/main/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java similarity index 99% rename from mcp-test/src/main/java/org/springframework/ai/mcp/server/BlaAbstractMcpSyncServerTests.java rename to mcp-test/src/main/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java index 415f08e..ddb827a 100644 --- a/mcp-test/src/main/java/org/springframework/ai/mcp/server/BlaAbstractMcpSyncServerTests.java +++ b/mcp-test/src/main/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java @@ -17,7 +17,6 @@ package org.springframework.ai.mcp.server; import java.util.List; -import java.util.Map; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -46,7 +45,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; * * @author Christian Tzolov */ -public abstract class BlaAbstractMcpSyncServerTests { +public abstract class AbstractMcpSyncServerTests { private static final String TEST_TOOL_NAME = "test-tool"; diff --git a/mcp-test/src/main/java/org/springframework/ai/mcp/server/transport/BlaBlockingInputStream.java b/mcp-test/src/main/java/org/springframework/ai/mcp/server/transport/BlaBlockingInputStream.java deleted file mode 100644 index 270eaae..0000000 --- a/mcp-test/src/main/java/org/springframework/ai/mcp/server/transport/BlaBlockingInputStream.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.server.transport; - -import java.io.IOException; -import java.io.InputStream; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.LinkedBlockingQueue; - -public class BlaBlockingInputStream extends InputStream { - - private final BlockingQueue queue = new LinkedBlockingQueue<>(); - - private volatile boolean completed = false; - - private volatile boolean closed = false; - - @Override - public int read() throws IOException { - if (closed) { - throw new IOException("Stream is closed"); - } - - try { - Integer value = queue.poll(); - if (value == null) { - if (completed) { - return -1; - } - value = queue.take(); // Blocks until data is available - if (value == null && completed) { - return -1; - } - } - return value; - } - catch (InterruptedException e) { - Thread.currentThread().interrupt(); - throw new IOException("Read interrupted", e); - } - } - - public void write(int b) { - if (!closed && !completed) { - queue.offer(b); - } - } - - public void write(byte[] data) { - if (!closed && !completed) { - for (byte b : data) { - queue.offer((int) b & 0xFF); - } - } - } - - public void complete() { - this.completed = true; - } - - @Override - public void close() { - this.closed = true; - this.completed = true; - this.queue.clear(); - } - -} \ No newline at end of file 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/springframework/ai/mcp/client/WebFluxSseMcpAsyncClientTests.java index 0a15af2..761dd6a 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/springframework/ai/mcp/client/WebFluxSseMcpAsyncClientTests.java @@ -30,7 +30,7 @@ import org.springframework.web.reactive.function.client.WebClient; * @author Christian Tzolov */ @Timeout(15) // Giving extra time beyond the client timeout -class WebFluxSseMcpAsyncClientTests extends BlaAbstractMcpAsyncClientTests { +class WebFluxSseMcpAsyncClientTests extends AbstractMcpAsyncClientTests { static String host = "http://localhost:3001"; 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/springframework/ai/mcp/client/WebFluxSseMcpSyncClientTests.java index 2e1a4d9..41153af 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/springframework/ai/mcp/client/WebFluxSseMcpSyncClientTests.java @@ -30,7 +30,7 @@ import org.springframework.web.reactive.function.client.WebClient; * @author Christian Tzolov */ @Timeout(15) // Giving extra time beyond the client timeout -class WebFluxSseMcpSyncClientTests extends BlaAbstractMcpSyncClientTests { +class WebFluxSseMcpSyncClientTests extends AbstractMcpSyncClientTests { static String host = "http://localhost:3001"; 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/springframework/ai/mcp/server/WebFluxSseMcpAsyncServerTests.java index 753216a..b90c9a5 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/springframework/ai/mcp/server/WebFluxSseMcpAsyncServerTests.java @@ -33,7 +33,7 @@ import org.springframework.web.reactive.function.server.RouterFunctions; * @author Christian Tzolov */ @Timeout(15) // Giving extra time beyond the client timeout -class WebFluxSseMcpAsyncServerTests extends BlaAbstractMcpAsyncServerTests { +class WebFluxSseMcpAsyncServerTests extends AbstractMcpAsyncServerTests { private static final int PORT = 8181; 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/springframework/ai/mcp/server/WebFluxSseMcpSyncServerTests.java index 097ed77..048d639 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/springframework/ai/mcp/server/WebFluxSseMcpSyncServerTests.java @@ -33,7 +33,7 @@ import org.springframework.web.reactive.function.server.RouterFunctions; * @author Christian Tzolov */ @Timeout(15) // Giving extra time beyond the client timeout -class WebFluxSseMcpSyncServerTests extends BlaAbstractMcpSyncServerTests { +class WebFluxSseMcpSyncServerTests extends AbstractMcpSyncServerTests { private static final int PORT = 8182; 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/springframework/ai/mcp/server/WebMvcSseAsyncServerTransportTests.java index 18dcd16..374a5c5 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/springframework/ai/mcp/server/WebMvcSseAsyncServerTransportTests.java @@ -33,7 +33,7 @@ import org.springframework.web.servlet.function.RouterFunction; import org.springframework.web.servlet.function.ServerResponse; @Timeout(15) -class WebMvcSseAsyncServerTransportTests extends BlaAbstractMcpAsyncServerTests { +class WebMvcSseAsyncServerTransportTests extends AbstractMcpAsyncServerTests { private static final String MESSAGE_ENDPOINT = "/mcp/message"; 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/springframework/ai/mcp/server/WebMvcSseSyncServerTransportTests.java index fb3926d..2c44c57 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/springframework/ai/mcp/server/WebMvcSseSyncServerTransportTests.java @@ -33,7 +33,7 @@ import org.springframework.web.servlet.function.RouterFunction; import org.springframework.web.servlet.function.ServerResponse; @Timeout(15) -class WebMvcSseSyncServerTransportTests extends BlaAbstractMcpSyncServerTests { +class WebMvcSseSyncServerTransportTests extends AbstractMcpSyncServerTests { private static final String MESSAGE_ENDPOINT = "/mcp/message"; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java b/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java index 2579f57..0d7fd0b 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java +++ b/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java @@ -54,6 +54,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; * @author Christian Tzolov * @author Dariusz Jędrzejczyk */ +// KEEP IN SYNC with the class in mcp-test module public abstract class AbstractMcpAsyncClientTests { private McpAsyncClient mcpAsyncClient; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java b/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java index c012612..c046b9e 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java +++ b/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java @@ -50,6 +50,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; * @author Christian Tzolov * @author Dariusz Jędrzejczyk */ +// KEEP IN SYNC with the class in mcp-test module public abstract class AbstractMcpSyncClientTests { private McpSyncClient mcpSyncClient; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java b/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java index 0c7c1aa..869d34a 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java +++ b/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java @@ -48,6 +48,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; * * @author Christian Tzolov */ +// KEEP IN SYNC with the class in mcp-test module public abstract class AbstractMcpAsyncServerTests { private static final String TEST_TOOL_NAME = "test-tool"; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java b/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java index ddb827a..f627bdc 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java +++ b/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java @@ -45,6 +45,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; * * @author Christian Tzolov */ +// KEEP IN SYNC with the class in mcp-test module public abstract class AbstractMcpSyncServerTests { private static final String TEST_TOOL_NAME = "test-tool"; From 516da0bada0c408a1f57c5348d4504016ca28f3a Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Thu, 23 Jan 2025 18:06:21 +0100 Subject: [PATCH 013/443] minor migration gide update --- mcp-docs/0.6.0-MIGRATION-GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mcp-docs/0.6.0-MIGRATION-GUIDE.md b/mcp-docs/0.6.0-MIGRATION-GUIDE.md index 2034273..8f3b157 100644 --- a/mcp-docs/0.6.0-MIGRATION-GUIDE.md +++ b/mcp-docs/0.6.0-MIGRATION-GUIDE.md @@ -1,4 +1,4 @@ -# Spring AI MCP 0.5.0 Migration Guide +# 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. From 48ab97bf237795c2f5ba1ee37351fa225d3dafb6 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Fri, 24 Jan 2025 13:08:41 +0100 Subject: [PATCH 014/443] fix(transport): Add cleanup logic for inbound processing in StdioServerTransport Resolves #72 Signed-off-by: Christian Tzolov --- .../transport/StdioServerTransport.java | 91 ++++++++++--------- 1 file changed, 48 insertions(+), 43 deletions(-) diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/transport/StdioServerTransport.java b/mcp/src/main/java/org/springframework/ai/mcp/server/transport/StdioServerTransport.java index 5f8e78b..e9b88d2 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/transport/StdioServerTransport.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/server/transport/StdioServerTransport.java @@ -118,6 +118,11 @@ public class StdioServerTransport implements ServerMcpTransport { .flatMap(message -> Mono.just(message) .transform(inboundMessageHandler) .contextWrite(ctx -> ctx.put("observation", "myObservation"))) + .doOnComplete(() -> { + this.outboundSink.tryEmitComplete(); + this.inboundScheduler.dispose(); + this.outboundScheduler.dispose(); + }) .subscribe(); } @@ -184,51 +189,51 @@ public class StdioServerTransport implements ServerMcpTransport { */ private void startOutboundProcessing() { Function, Flux> outboundConsumer = messages -> messages // @formatter:off - .doOnSubscribe(subscription -> outboundReady.tryEmitValue(null)) - .publishOn(outboundScheduler) - .handle((message, sink) -> { - if (message != null && !isClosing) { - try { - String jsonMessage = objectMapper.writeValueAsString(message); - // Escape any embedded newlines in the JSON message as per spec - jsonMessage = jsonMessage.replace("\r\n", "\\n").replace("\n", "\\n").replace("\r", "\\n"); + .doOnSubscribe(subscription -> outboundReady.tryEmitValue(null)) + .publishOn(outboundScheduler) + .handle((message, sink) -> { + if (message != null && !isClosing) { + try { + String jsonMessage = objectMapper.writeValueAsString(message); + // Escape any embedded newlines in the JSON message as per spec + jsonMessage = jsonMessage.replace("\r\n", "\\n").replace("\n", "\\n").replace("\r", "\\n"); - synchronized (outputStream) { - outputStream.write(jsonMessage.getBytes(StandardCharsets.UTF_8)); - outputStream.write("\n".getBytes(StandardCharsets.UTF_8)); - outputStream.flush(); - } - sink.next(message); - } - catch (IOException e) { - if (!isClosing) { - logger.error("Error writing message", e); - sink.error(new RuntimeException(e)); - } - else { - logger.debug("Stream closed during shutdown", e); - } - } - } - else if (isClosing) { - sink.complete(); - } - }) - .doOnComplete(() -> { - isClosing = true; - outboundSink.tryEmitComplete(); - }) - .doOnError(e -> { - if (!isClosing) { - logger.error("Error in outbound processing", e); - isClosing = true; - outboundSink.tryEmitComplete(); - } - }) - .map(msg -> (JSONRPCMessage) msg); + synchronized (outputStream) { + outputStream.write(jsonMessage.getBytes(StandardCharsets.UTF_8)); + outputStream.write("\n".getBytes(StandardCharsets.UTF_8)); + outputStream.flush(); + } + sink.next(message); + } + catch (IOException e) { + if (!isClosing) { + logger.error("Error writing message", e); + sink.error(new RuntimeException(e)); + } + else { + logger.debug("Stream closed during shutdown", e); + } + } + } + else if (isClosing) { + sink.complete(); + } + }) + .doOnComplete(() -> { + isClosing = true; + outboundSink.tryEmitComplete(); + }) + .doOnError(e -> { + if (!isClosing) { + logger.error("Error in outbound processing", e); + isClosing = true; + outboundSink.tryEmitComplete(); + } + }) + .map(msg -> (JSONRPCMessage) msg); - outboundConsumer.apply(outboundSink.asFlux()).subscribe(); - } // @formatter:on + outboundConsumer.apply(outboundSink.asFlux()).subscribe(); + } // @formatter:on @Override public Mono closeGracefully() { From a424b3665373ddb03df71a6cfb3f8b8cdb7a3099 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Fri, 24 Jan 2025 12:59:30 +0100 Subject: [PATCH 015/443] feat: Add protocol version negotiation Implement protocol version negotiation between MCP client and server to ensure compatibility and graceful version handling. The server will now suggest the latest supported version when an unsupported version is requested, while the client will verify version compatibility during initialization. - Support multiple protocol versions in both client and server - Negotiate compatible version during initialization - Fall back to latest version when unsupported version requested - Add comprehensive test coverage for version negotiation Resolves #71 Signed-off-by: Christian Tzolov --- .../ai/mcp/client/McpAsyncClient.java | 23 ++- .../ai/mcp/client/McpClientFeatures.java | 3 - .../ai/mcp/server/McpAsyncServer.java | 30 +++- .../springframework/ai/mcp/util/Assert.java | 16 +- .../ai/mcp/MockMcpTransport.java | 8 +- .../McpAsyncClientResponseHandlerTests.java | 1 - .../client/McpClientProtocolVersionTests.java | 170 ++++++++++++++++++ .../server/McpServerProtocolVersionTests.java | 132 ++++++++++++++ 8 files changed, 370 insertions(+), 13 deletions(-) create mode 100644 mcp/src/test/java/org/springframework/ai/mcp/client/McpClientProtocolVersionTests.java create mode 100644 mcp/src/test/java/org/springframework/ai/mcp/server/McpServerProtocolVersionTests.java diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java b/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java index 5d82881..7f6ccc1 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java @@ -146,6 +146,11 @@ public class McpAsyncClient { */ private final McpTransport transport; + /** + * Supported protocol versions. + */ + private List protocolVersions = List.of(McpSchema.LATEST_PROTOCOL_VERSION); + /** * Create a new McpAsyncClient with the given transport and session request-response * timeout. @@ -257,6 +262,8 @@ public class McpAsyncClient { 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 @@ -360,8 +367,11 @@ public class McpAsyncClient { * @return the initialize result. */ public Mono initialize() { + + String latestVersion = this.protocolVersions.get(this.protocolVersions.size() - 1); + McpSchema.InitializeRequest initializeRequest = new McpSchema.InitializeRequest(// @formatter:off - McpSchema.LATEST_PROTOCOL_VERSION, + latestVersion, this.clientCapabilities, this.clientInfo); // @formatter:on @@ -378,7 +388,7 @@ public class McpAsyncClient { initializeResult.protocolVersion(), initializeResult.capabilities(), initializeResult.serverInfo(), initializeResult.instructions()); - if (!McpSchema.LATEST_PROTOCOL_VERSION.equals(initializeResult.protocolVersion())) { + if (!this.protocolVersions.contains(initializeResult.protocolVersion())) { return Mono.error(new McpError( "Unsupported protocol version from the server: " + initializeResult.protocolVersion())); } @@ -911,4 +921,13 @@ public class McpAsyncClient { return this.mcpSession.sendNotification(McpSchema.METHOD_LOGGING_SET_LEVEL, params); } + /** + * This method is package-private and used for test only. Should not be called by user + * code. + * @param protocolVersions the Client supported protocol versions. + */ + void setProtocolVersions(List protocolVersions) { + this.protocolVersions = protocolVersions; + } + } diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java b/mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java index 7d8bb17..05be98d 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java @@ -67,7 +67,6 @@ class McpClientFeatures { /** * Create an instance and validate the arguments. - * @param clientInfo the client implementation information. * @param clientCapabilities the client capabilities. * @param roots the roots. * @param toolsChangeConsumers the tools change consumers. @@ -85,7 +84,6 @@ class McpClientFeatures { Function> samplingHandler) { Assert.notNull(clientInfo, "Client info must not be null"); - this.clientInfo = clientInfo; this.clientCapabilities = (clientCapabilities != null) ? clientCapabilities : new McpSchema.ClientCapabilities(null, @@ -182,7 +180,6 @@ class McpClientFeatures { Function samplingHandler) { Assert.notNull(clientInfo, "Client info must not be null"); - this.clientInfo = clientInfo; this.clientCapabilities = (clientCapabilities != null) ? clientCapabilities : new McpSchema.ClientCapabilities(null, diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java b/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java index 8d406a5..00971b7 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java @@ -122,12 +122,18 @@ public class McpAsyncServer { private LoggingLevel minLoggingLevel = LoggingLevel.DEBUG; + /** + * Supported protocol versions. + */ + private List protocolVersions = List.of(McpSchema.LATEST_PROTOCOL_VERSION); + /** * Create a new McpAsyncServer with the given transport and capabilities. * @param mcpTransport The transport layer implementation for MCP communication. * @param features The MCP server supported features. */ McpAsyncServer(ServerMcpTransport mcpTransport, McpServerFeatures.Async features) { + this.serverInfo = features.serverInfo(); this.serverCapabilities = features.serverCapabilities(); this.tools.addAll(features.tools()); @@ -210,6 +216,7 @@ public class McpAsyncServer { 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)); @@ -299,12 +306,18 @@ public class McpAsyncServer { 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())); + String serverProtocolVersion = this.protocolVersions.get(this.protocolVersions.size() - 1); + + if (this.protocolVersions.contains(initializeRequest.protocolVersion())) { + serverProtocolVersion = initializeRequest.protocolVersion(); + } + else { + logger.warn( + "Client requested unsupported protocol version: {}, so the server will sugggest the {} version instead", + initializeRequest.protocolVersion(), serverProtocolVersion); } - return Mono.just(new McpSchema.InitializeResult(McpSchema.LATEST_PROTOCOL_VERSION, this.serverCapabilities, + return Mono.just(new McpSchema.InitializeResult(serverProtocolVersion, this.serverCapabilities, this.serverInfo, null)); }; } @@ -903,4 +916,13 @@ public class McpAsyncServer { CREATE_MESSAGE_RESULT_TYPE_REF); } + /** + * This method is package-private and used for test only. Should not be called by user + * code. + * @param protocolVersions the Client supported protocol versions. + */ + void setProtocolVersions(List protocolVersions) { + this.protocolVersions = protocolVersions; + } + } diff --git a/mcp/src/main/java/org/springframework/ai/mcp/util/Assert.java b/mcp/src/main/java/org/springframework/ai/mcp/util/Assert.java index 8d4ea23..0dc1fc1 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/util/Assert.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/util/Assert.java @@ -16,11 +16,13 @@ package org.springframework.ai.mcp.util; +import java.util.Collection; + import reactor.util.annotation.Nullable; /** * Assertion utility class that assists in validating arguments. - * + * * @author Christian Tzolov */ @@ -29,6 +31,18 @@ import reactor.util.annotation.Nullable; */ public final class Assert { + /** + * Assert that the collection is not {@code null} and not empty. + * @param collection the collection to check + * @param message the exception message to use if the assertion fails + * @throws IllegalArgumentException if the collection is {@code null} or empty + */ + public static void notEmpty(@Nullable Collection collection, String message) { + if (collection == null || collection.isEmpty()) { + throw new IllegalArgumentException(message); + } + } + /** * Assert that an object is not {@code null}. * diff --git a/mcp/src/test/java/org/springframework/ai/mcp/MockMcpTransport.java b/mcp/src/test/java/org/springframework/ai/mcp/MockMcpTransport.java index 20736b1..1622418 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/MockMcpTransport.java +++ b/mcp/src/test/java/org/springframework/ai/mcp/MockMcpTransport.java @@ -32,7 +32,10 @@ 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") +/** + * A mock implementation of the {@link ClientMcpTransport} and {@link ServerMcpTransport} + * interfaces. + */ public class MockMcpTransport implements ClientMcpTransport, ServerMcpTransport { private final AtomicInteger inboundMessageCount = new AtomicInteger(0); @@ -91,6 +94,7 @@ public class MockMcpTransport implements ClientMcpTransport, ServerMcpTransport connected = false; outgoing.tryEmitComplete(); inbound.tryEmitComplete(); + // Wait for all subscribers to complete return Mono.empty(); }); } @@ -100,4 +104,4 @@ public class MockMcpTransport implements ClientMcpTransport, ServerMcpTransport return new ObjectMapper().convertValue(data, typeRef); } -} \ No newline at end of file +} diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/McpAsyncClientResponseHandlerTests.java b/mcp/src/test/java/org/springframework/ai/mcp/client/McpAsyncClientResponseHandlerTests.java index 2922bf0..c5b0ec8 100644 --- a/mcp/src/test/java/org/springframework/ai/mcp/client/McpAsyncClientResponseHandlerTests.java +++ b/mcp/src/test/java/org/springframework/ai/mcp/client/McpAsyncClientResponseHandlerTests.java @@ -20,7 +20,6 @@ import java.time.Duration; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.function.Consumer; import java.util.function.Function; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/McpClientProtocolVersionTests.java b/mcp/src/test/java/org/springframework/ai/mcp/client/McpClientProtocolVersionTests.java new file mode 100644 index 0000000..7a0be90 --- /dev/null +++ b/mcp/src/test/java/org/springframework/ai/mcp/client/McpClientProtocolVersionTests.java @@ -0,0 +1,170 @@ +/* + * 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.client; + +import java.time.Duration; +import java.util.List; + +import org.junit.jupiter.api.Test; +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; + +/** + * Tests for MCP protocol version negotiation and compatibility. + */ +class McpClientProtocolVersionTests { + + private static final Duration REQUEST_TIMEOUT = Duration.ofSeconds(30); + + private static final McpSchema.Implementation CLIENT_INFO = new McpSchema.Implementation("test-client", "1.0.0"); + + @Test + void shouldUseLatestVersionByDefault() { + MockMcpTransport transport = new MockMcpTransport(); + McpAsyncClient client = McpClient.async(transport) + .clientInfo(CLIENT_INFO) + .requestTimeout(REQUEST_TIMEOUT) + .build(); + + try { + Mono initializeResultMono = client.initialize(); + + StepVerifier.create(initializeResultMono).then(() -> { + McpSchema.JSONRPCRequest request = transport.getLastSentMessageAsRequest(); + assertThat(request.params()).isInstanceOf(McpSchema.InitializeRequest.class); + McpSchema.InitializeRequest initRequest = (McpSchema.InitializeRequest) request.params(); + assertThat(initRequest.protocolVersion()).isEqualTo(McpSchema.LATEST_PROTOCOL_VERSION); + + transport.simulateIncomingMessage(new McpSchema.JSONRPCResponse(McpSchema.JSONRPC_VERSION, request.id(), + new McpSchema.InitializeResult(McpSchema.LATEST_PROTOCOL_VERSION, null, + new McpSchema.Implementation("test-server", "1.0.0"), null), + null)); + }).assertNext(result -> { + assertThat(result.protocolVersion()).isEqualTo(McpSchema.LATEST_PROTOCOL_VERSION); + }).verifyComplete(); + + } + finally { + // Ensure cleanup happens even if test fails + StepVerifier.create(client.closeGracefully()).verifyComplete(); + } + } + + @Test + void shouldNegotiateSpecificVersion() { + String oldVersion = "0.1.0"; + MockMcpTransport transport = new MockMcpTransport(); + McpAsyncClient client = McpClient.async(transport) + .clientInfo(CLIENT_INFO) + .requestTimeout(REQUEST_TIMEOUT) + .build(); + + client.setProtocolVersions(List.of(oldVersion, McpSchema.LATEST_PROTOCOL_VERSION)); + + try { + Mono initializeResultMono = client.initialize(); + + StepVerifier.create(initializeResultMono).then(() -> { + McpSchema.JSONRPCRequest request = transport.getLastSentMessageAsRequest(); + assertThat(request.params()).isInstanceOf(McpSchema.InitializeRequest.class); + McpSchema.InitializeRequest initRequest = (McpSchema.InitializeRequest) request.params(); + assertThat(initRequest.protocolVersion()).isIn(List.of(oldVersion, McpSchema.LATEST_PROTOCOL_VERSION)); + + transport.simulateIncomingMessage(new McpSchema.JSONRPCResponse(McpSchema.JSONRPC_VERSION, request.id(), + new McpSchema.InitializeResult(oldVersion, null, + new McpSchema.Implementation("test-server", "1.0.0"), null), + null)); + }).assertNext(result -> { + assertThat(result.protocolVersion()).isEqualTo(oldVersion); + }).verifyComplete(); + } + finally { + StepVerifier.create(client.closeGracefully()).verifyComplete(); + } + } + + @Test + void shouldFailForUnsupportedVersion() { + String unsupportedVersion = "999.999.999"; + MockMcpTransport transport = new MockMcpTransport(); + McpAsyncClient client = McpClient.async(transport) + .clientInfo(CLIENT_INFO) + .requestTimeout(REQUEST_TIMEOUT) + .build(); + + try { + Mono initializeResultMono = client.initialize(); + + StepVerifier.create(initializeResultMono).then(() -> { + McpSchema.JSONRPCRequest request = transport.getLastSentMessageAsRequest(); + assertThat(request.params()).isInstanceOf(McpSchema.InitializeRequest.class); + + transport.simulateIncomingMessage(new McpSchema.JSONRPCResponse(McpSchema.JSONRPC_VERSION, request.id(), + new McpSchema.InitializeResult(unsupportedVersion, null, + new McpSchema.Implementation("test-server", "1.0.0"), null), + null)); + }).expectError(McpError.class).verify(); + } + finally { + StepVerifier.create(client.closeGracefully()).verifyComplete(); + } + } + + @Test + void shouldUseHighestVersionWhenMultipleSupported() { + String oldVersion = "0.1.0"; + String middleVersion = "0.2.0"; + String latestVersion = McpSchema.LATEST_PROTOCOL_VERSION; + + MockMcpTransport transport = new MockMcpTransport(); + McpAsyncClient client = McpClient.async(transport) + .clientInfo(CLIENT_INFO) + .requestTimeout(REQUEST_TIMEOUT) + .build(); + + client.setProtocolVersions(List.of(oldVersion, middleVersion, latestVersion)); + + try { + Mono initializeResultMono = client.initialize(); + + StepVerifier.create(initializeResultMono).then(() -> { + McpSchema.JSONRPCRequest request = transport.getLastSentMessageAsRequest(); + McpSchema.InitializeRequest initRequest = (McpSchema.InitializeRequest) request.params(); + assertThat(initRequest.protocolVersion()).isEqualTo(latestVersion); + + transport.simulateIncomingMessage(new McpSchema.JSONRPCResponse(McpSchema.JSONRPC_VERSION, request.id(), + new McpSchema.InitializeResult(latestVersion, null, + new McpSchema.Implementation("test-server", "1.0.0"), null), + null)); + }).assertNext(result -> { + assertThat(result.protocolVersion()).isEqualTo(latestVersion); + }).verifyComplete(); + } + finally { + StepVerifier.create(client.closeGracefully()).verifyComplete(); + } + + } + +} diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/McpServerProtocolVersionTests.java b/mcp/src/test/java/org/springframework/ai/mcp/server/McpServerProtocolVersionTests.java new file mode 100644 index 0000000..f557921 --- /dev/null +++ b/mcp/src/test/java/org/springframework/ai/mcp/server/McpServerProtocolVersionTests.java @@ -0,0 +1,132 @@ +/* + * 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.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 static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for MCP server protocol version negotiation and compatibility. + */ +class McpServerProtocolVersionTests { + + private static final McpSchema.Implementation SERVER_INFO = new McpSchema.Implementation("test-server", "1.0.0"); + + private static final McpSchema.Implementation CLIENT_INFO = new McpSchema.Implementation("test-client", "1.0.0"); + + private McpSchema.JSONRPCRequest jsonRpcInitializeRequest(String requestId, String protocolVersion) { + return new McpSchema.JSONRPCRequest(McpSchema.JSONRPC_VERSION, McpSchema.METHOD_INITIALIZE, requestId, + new McpSchema.InitializeRequest(protocolVersion, null, CLIENT_INFO)); + } + + @Test + void shouldUseLatestVersionByDefault() { + MockMcpTransport transport = new MockMcpTransport(); + McpAsyncServer server = McpServer.async(transport).serverInfo(SERVER_INFO).build(); + + String requestId = UUID.randomUUID().toString(); + + transport.simulateIncomingMessage(jsonRpcInitializeRequest(requestId, McpSchema.LATEST_PROTOCOL_VERSION)); + + McpSchema.JSONRPCMessage response = transport.getLastSentMessage(); + assertThat(response).isInstanceOf(McpSchema.JSONRPCResponse.class); + McpSchema.JSONRPCResponse jsonResponse = (McpSchema.JSONRPCResponse) response; + assertThat(jsonResponse.id()).isEqualTo(requestId); + assertThat(jsonResponse.result()).isInstanceOf(McpSchema.InitializeResult.class); + McpSchema.InitializeResult result = (McpSchema.InitializeResult) jsonResponse.result(); + assertThat(result.protocolVersion()).isEqualTo(McpSchema.LATEST_PROTOCOL_VERSION); + + server.closeGracefully().subscribe(); + } + + @Test + void shouldNegotiateSpecificVersion() { + String oldVersion = "0.1.0"; + MockMcpTransport transport = new MockMcpTransport(); + McpAsyncServer server = McpServer.async(transport).serverInfo(SERVER_INFO).build(); + + server.setProtocolVersions(List.of(oldVersion, McpSchema.LATEST_PROTOCOL_VERSION)); + + String requestId = UUID.randomUUID().toString(); + + transport.simulateIncomingMessage(jsonRpcInitializeRequest(requestId, oldVersion)); + + McpSchema.JSONRPCMessage response = transport.getLastSentMessage(); + assertThat(response).isInstanceOf(McpSchema.JSONRPCResponse.class); + McpSchema.JSONRPCResponse jsonResponse = (McpSchema.JSONRPCResponse) response; + assertThat(jsonResponse.id()).isEqualTo(requestId); + assertThat(jsonResponse.result()).isInstanceOf(McpSchema.InitializeResult.class); + McpSchema.InitializeResult result = (McpSchema.InitializeResult) jsonResponse.result(); + assertThat(result.protocolVersion()).isEqualTo(oldVersion); + + server.closeGracefully().subscribe(); + } + + @Test + void shouldSuggestLatestVersionForUnsupportedVersion() { + String unsupportedVersion = "999.999.999"; + MockMcpTransport transport = new MockMcpTransport(); + McpAsyncServer server = McpServer.async(transport).serverInfo(SERVER_INFO).build(); + + String requestId = UUID.randomUUID().toString(); + + transport.simulateIncomingMessage(jsonRpcInitializeRequest(requestId, unsupportedVersion)); + + McpSchema.JSONRPCMessage response = transport.getLastSentMessage(); + assertThat(response).isInstanceOf(McpSchema.JSONRPCResponse.class); + McpSchema.JSONRPCResponse jsonResponse = (McpSchema.JSONRPCResponse) response; + assertThat(jsonResponse.id()).isEqualTo(requestId); + assertThat(jsonResponse.result()).isInstanceOf(McpSchema.InitializeResult.class); + McpSchema.InitializeResult result = (McpSchema.InitializeResult) jsonResponse.result(); + assertThat(result.protocolVersion()).isEqualTo(McpSchema.LATEST_PROTOCOL_VERSION); + + server.closeGracefully().subscribe(); + } + + @Test + void shouldUseHighestVersionWhenMultipleSupported() { + String oldVersion = "0.1.0"; + String middleVersion = "0.2.0"; + String latestVersion = McpSchema.LATEST_PROTOCOL_VERSION; + + MockMcpTransport transport = new MockMcpTransport(); + McpAsyncServer server = McpServer.async(transport).serverInfo(SERVER_INFO).build(); + + server.setProtocolVersions(List.of(oldVersion, middleVersion, latestVersion)); + + String requestId = UUID.randomUUID().toString(); + transport.simulateIncomingMessage(jsonRpcInitializeRequest(requestId, latestVersion)); + + McpSchema.JSONRPCMessage response = transport.getLastSentMessage(); + assertThat(response).isInstanceOf(McpSchema.JSONRPCResponse.class); + McpSchema.JSONRPCResponse jsonResponse = (McpSchema.JSONRPCResponse) response; + assertThat(jsonResponse.id()).isEqualTo(requestId); + assertThat(jsonResponse.result()).isInstanceOf(McpSchema.InitializeResult.class); + McpSchema.InitializeResult result = (McpSchema.InitializeResult) jsonResponse.result(); + assertThat(result.protocolVersion()).isEqualTo(latestVersion); + + server.closeGracefully().subscribe(); + } + +} From d75adb68c7b9b7f80b90934511f497fdb2582721 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Fri, 24 Jan 2025 18:25:35 +0100 Subject: [PATCH 016/443] feat(sse): expand accepted HTTP status codes for SSE stream connection Accept HTTP status codes 200, 201, 202, and 206 as valid responses for SSE stream connection. Improves error message to include actual status code. Removes unused main method. Resolves #68 --- .../mcp/client/transport/FlowSseClient.java | 31 ++----------------- 1 file changed, 3 insertions(+), 28 deletions(-) diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/FlowSseClient.java b/mcp/src/main/java/org/springframework/ai/mcp/client/transport/FlowSseClient.java index 3fa932a..4b6191d 100644 --- a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/FlowSseClient.java +++ b/mcp/src/main/java/org/springframework/ai/mcp/client/transport/FlowSseClient.java @@ -198,8 +198,9 @@ public class FlowSseClient { info -> subscriberFactory.apply(lineSubscriber)); future.thenAccept(response -> { - if (response.statusCode() != 200) { - throw new RuntimeException("Failed to connect to SSE stream: " + response.statusCode()); + int status = response.statusCode(); + if (status != 200 && status != 201 && status != 202 && status != 206) { + throw new RuntimeException("Failed to connect to SSE stream. Unexpected status code: " + status); } }).exceptionally(throwable -> { eventHandler.onError(throwable); @@ -207,30 +208,4 @@ public class FlowSseClient { }); } - // public static void main(String[] args) { - - // FlowSseClient sseClient = new FlowSseClient( - // HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(10)).build()); - - // 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(); - // } - // } - } From e7505ba24714694dd034934ff6d417ff2b1f0ee4 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Fri, 24 Jan 2025 18:39:38 +0100 Subject: [PATCH 017/443] Release version 0.6.0 --- 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 b418d0c..9abd5eb 100644 --- a/mcp-bom/pom.xml +++ b/mcp-bom/pom.xml @@ -7,7 +7,7 @@ org.springframework.experimental mcp-parent - 0.6.0-SNAPSHOT + 0.6.0 mcp-bom diff --git a/mcp-docs/pom.xml b/mcp-docs/pom.xml index 0967cb1..9f0d61b 100644 --- a/mcp-docs/pom.xml +++ b/mcp-docs/pom.xml @@ -20,7 +20,7 @@ org.springframework.experimental mcp-parent - 0.6.0-SNAPSHOT + 0.6.0 mcp-docs Spring AI MCP Docs diff --git a/mcp-test/pom.xml b/mcp-test/pom.xml index 6ca4339..212003a 100644 --- a/mcp-test/pom.xml +++ b/mcp-test/pom.xml @@ -6,7 +6,7 @@ org.springframework.experimental mcp-parent - 0.6.0-SNAPSHOT + 0.6.0 mcp-test jar @@ -24,7 +24,7 @@ org.springframework.experimental mcp - 0.6.0-SNAPSHOT + 0.6.0 diff --git a/mcp-transport/mcp-webflux-sse-transport/pom.xml b/mcp-transport/mcp-webflux-sse-transport/pom.xml index fd51d01..df23747 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-SNAPSHOT + 0.6.0 ../../pom.xml mcp-webflux-sse-transport @@ -25,13 +25,13 @@ org.springframework.experimental mcp - 0.6.0-SNAPSHOT + 0.6.0 org.springframework.experimental mcp-test - 0.6.0-SNAPSHOT + 0.6.0 test diff --git a/mcp-transport/mcp-webmvc-sse-transport/pom.xml b/mcp-transport/mcp-webmvc-sse-transport/pom.xml index 9d24d95..95c7df1 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-SNAPSHOT + 0.6.0 ../../pom.xml mcp-webmvc-sse-transport @@ -25,13 +25,13 @@ org.springframework.experimental mcp - 0.6.0-SNAPSHOT + 0.6.0 org.springframework.experimental mcp-test - 0.6.0-SNAPSHOT + 0.6.0 test diff --git a/mcp/pom.xml b/mcp/pom.xml index f8e5c20..3febfbf 100644 --- a/mcp/pom.xml +++ b/mcp/pom.xml @@ -6,7 +6,7 @@ org.springframework.experimental mcp-parent - 0.6.0-SNAPSHOT + 0.6.0 mcp jar diff --git a/pom.xml b/pom.xml index 2d583ca..d750215 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.springframework.experimental mcp-parent - 0.6.0-SNAPSHOT + 0.6.0 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 7d31418..ab74c04 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-SNAPSHOT + 0.6.0 spring-ai-mcp Spring AI MCP From dd64cd88c23c0210b939db2f180476ec54ae1715 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Fri, 24 Jan 2025 18:40:03 +0100 Subject: [PATCH 018/443] 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 019/443] 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: - *

      - *
    • Convert Spring AI's {@link FunctionCallback} instances to MCP tool - * registrations
    • - *
    • Generate JSON schemas for tool input validation
    • - *
    - * - * @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 020/443] 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 021/443] 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 022/443] 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 023/443] 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 024/443] 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 025/443] 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 026/443] 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 027/443] 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 028/443] 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 029/443] 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 030/443] 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 031/443] 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 032/443] 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 033/443] 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 034/443] 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 035/443] 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 036/443] 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 037/443] 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 038/443] 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 039/443] 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 040/443] 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 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 !!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 041/443] 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 042/443] 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
    zcmeFZ2~=9=-Zx5`G-*a_osu}6YO0Be8iMoKHVzp;OAv9k(Kstca5ie&G;xYpn;5}~
    zMk5F~)F>h%v5E6Y6mbGHjyT~wkC(jXeQ*8NUFUr3oVC8*bMMN-0v`4={r3Oad;e$l
    z`}W@hKEGvg(*khl5CCvU^aAXU9O}Dy{krRScdRXLg3bTl&;$^bBUb@{0Aw)gj^($1
    zv$J>j+p+h5AMv5>t~>hvhwpz-MDwooe3%^oV5|RwKL70S@p~R1$Nr?r{ky2U|25qa(dQ?go&dlS5db)C4**EK0{~7q{#Tpm
    z;~!xAo2W@ngey?=@&fn+JOFT
    zLmx&SKJuAp;O8fgpA;Sa7t8)10P)Yng2Y&d4=DjY5kGWT{Lp?KK>owEcKFbT@;|5h
    z+0kRiKRt5zlMl@ypNpbo3Jmz#-9(PmdlG|Llt|C4k>NJ1!}8R!J8M
    zx4j!2`l`H>EpzUgwjRPRDCEbdWnJCU$~yYr-a$V~{Wa|c6=dUv`swHV(z*+l&vV~s
    zUAKU_Kl~~z?`^G$nHOPXY~iB$y_drto}y*tL})(wfa-rRiEe~XKRJB#(6P@%t>1}@
    zK#7`85$9C-ALFTa5XrAkOjNnZnL-+|pl{rIBvO{bEUO>Wolg7UY&
    zK7I9eM8^&N)1u6Ud+cLhT{nBE;=VrsICWUGp7>#LfGJ=a`{$Y;Yac1_kpdqn@R0%^
    zDe#d3|9_*v;RRMlZPx-y+t^ZN&_v@a^864J6#+x?f!c5z)=x@G9^0i>SGM5uno(OR
    z^~E|4xf)J{gi&nVQv-{VldLcQu&&ta-eXgjaw5)r5=~npu4R{`83Y?luD^MGVF4k7
    znvYISAp3^+p0ia|V)Pb}y$J==b@ftpq3E1JCvHtgR3}Yn|8O+IRIjGt?zIQfO4Y_8
    z&Nzan>J6fmn1iv@U@?}gH7tlaF#ogVru!1Y8meiz@Ii^#ff*uLkvhASs}BNI1>!5s
    z5y%zjvd4CyE_E(qOz-&G&;WiQ^fl}N=4w;@d5a;cr&#jX&al9ElDk&;X0aNdrSGETorutx_iI=c?u$M0Q<-IC5
    z);HE?VAJ}*Gz&X__K(Y2&kGzVJJzribD#ayIHS|DZI_lgux_*@cVs(IXe~5!y>wt2
    z7sUhpmvdGEwr#)P7_{yktz9r
    z#f@N=pbzZHfqhOJ-u!bz#SUy0;dX0SZVK+>*8cYu@^NcF-nIYzJp6dqez+7qK9D~?
    zkpIrIKk{0UF!YhveiWnrTQ2@6Mtzi!|E{ooRDM1xKOgnl|JU_e1&f8r)Xv_+-ZK$>
    z53aqX#wuDhGknMOBa9}CGvQ!xO#gdqTsidDUK^N1SX{eh8;&WL(=#%V+3FjZeXYpP
    z3wcW3>yu2XT~?N1XDH8!pyZiT9*T}9o953FG?iPsB$S7ax=s|5y5(5Mt&W{TpEjG3
    zY^(JkudkTH8UR1F{r}CP_3xgKTbBI_Wzc1PRWZrQ!ylGpk`~oExRKKukd;ri6|U|BPI~TKgih7|CeybVx8bNe{B4Rgt6DX-3m}
    zJ)OC0Inpb;z~94!ua{Ej&od`KT{F77C*8jBT^>8`Yt7P8v4x7jw~rL?_;9OzK)%VE
    zv?0gnj}y;Dj`Y8(C>+@TxoY*z?Kqz6PpEwW2o`|Zwl*@#PS^)DEv@|AwEiZ2lcE*^
    zj8Jg-1*foaZ6BcRVO6;P&G7BLXVkmfA8?1h|Eo~{hp%%eG03Z{BqD04J4QVy?Vvqe
    zcbKs&w>a;PK&$J%J2@L(yQ7}D@WPUK<_A~z2E}3jp+_f-O-&ZEMYmY=?3FNb#1B&H
    zzx{P*Yjp4e;D64FCH4WS<5R~|=O1b=+uBUKEg3Ptyk@-M
    zvFF>8Z9n($ZTjvd-`aH%Y)RoCe;w@q=#>sjjrVB+?h~sPXo5M#pqS&W
    zJMEAPL!r^aQmE=a;Gncne~@RC@sB;y+`7Yw`+)iq_lLg@^?&qAM=#amZ!yQ`W1$<=
    z2HS%yW9aex3c8V*?A%s9bbv8r861jEIUD<^EJpI;%Fg!Nu-!}Rzn2b@CIB`Se<4v1
    z?7nr#a3G6kGO{C)zL}BfA2tv%JT_~+XPN#|#q#y3ns$2_Dd`};@Tw9!;kuGf5&Hld
    zM*EN6p1%;>sRQ!jlcIy{qUQ9_q#z~gJOk(R`T$eV3qB}FZm$14zXhAW>&}F=0Z0LV
    z9q>a3c0Xt4?GU~)x_(1db6H!bZ@zrFwz&_#b3j^z$sA-BtY8JnnyK5iiXT7|k$)ZN
    z|Lm2{9uOAKIUZydF|swCEQK}guxsq-11#bGK{0Z9{`k-eaqw+pBoTY)&cI)Hs)rA3
    zzH#rP8q@pRNefo46TShZLq3AIr=_Nw2PMV-MYZJQOd4H^?Rs8l`T?~S@2^AspS=?B
    zK;*==ii6BzM>jSv$9UFv&V#UZfF%qclpzI!5;arS%tx42>#LvSm;ZIAdhEdNN0l7V
    zF1hZn*(@qCIHpIKKgCE?QGtUSVj5{{cbX8Q`uw;6?00?Gj
    z>;vv?rT7s1vW39HOodlF`YvhY3v+-PK!kkAKsGbu{X2-)2&)gd@npJp?IvzghP!u#s
    z+y>?h1<8%LBUgm{PDpMxNXKgjQ
    zhBE9Mu1hGOrNyP1&%oP3K!n;PE@2!9G$Ph~(ZP@jXrQuz3gJox*}rao?HdUIn5eru
    zbgr#shaq}b{f$9K8xd9Gp02s=nbE$v*cpUVJ+Q-5NuL$trceigy$n$Fu6_N4r?~Cs
    zKQH9DvLhXieXgT0(^g_Nu+9Ct=bCUJlhgM{cj1^5fd@A0)#|iqgGs=FEM|v0CxCJ~
    zGJXhdR)@YVzhW&rbSVFqKd;%t>5gRt)0^_TA$|s-GG7!sHr97vyJDZ$R()x@6Vj54
    z73f5;F2>In701h6AC$9x-=HxyWKcaFnIExftJah$Ed+O(LphkDDj(u2)$U;ZoQYC<
    z+w(vKnc#zqe~;^pi^F`W(4&$>4fJ_DbBJ}}zm`7j*L6J%DIfPnzLyb7c%f%dk)4E`
    z&@pq!6`;w1js!1?69m+6vp(YZ`@AYa&>)
    z6>F=)=iPH@?OZ@Dsm(YulYPfSQ1JpAwgjlfm|79^iyP`jZXgFdPh~^G%g5u#eahkq
    zdyGNVzE6^?|D?k|sC`s}{{dnC{lkBu8hkZJYf(b+k&!wtYH7BUAKYd@{33DNZ36zF
    zpcLFl(pAgDQ#&4<(Hk2Z^StNW+RAjES)U<~bJI8-tt$Xf#!Z@Y8J{V!POdxye*VS#f-EBp(HD{b+onVR<
    zV}3K3;~UmRmp?^E2SyoL&mL32er0_js>}5HdT;Wg5!E)$D0TkEuGo-^ZrxI^W7a}Z
    z%FR59LGrgoax474y-h7vvSX-61M*BHayIrshF3!omzVju7YqgZ8hSSNZf
    z#Ez`ZG{_+0f1^+Wm9VQys+AmZh4VAdBJyUliu~d-pGJ+C!!7zd*o7WY`N`6BnW?0w
    zdqu4}Q~Q7!7uunX6!arG2X53L5^kj-?V+=rtK?ObfKuVlu};-X!GVem@vDlK9ShGU
    zDrNh8^?Z|ao|(brfxzjskc!r9JJb#RCcOOLF|1e%5W(G{HSzQ2c}XFAOoBx|uQ&DlU~XJICVaMuvBJBJ1?a+t~GOF7YPU=Sb(
    z4l~MCGP*W8q_~mlDy_$$>lVrQmWZip`1>pxZCZR)Fc%u7%IwH+Bc+VOVI@3I*WQRY
    z1lc6HvbWbrd=Y;~L1$uVa7}Mu6&@jHl5>8D3C1Uns0w>up>zoS1CbRE;8s?Gw@fk=
    zSuoz+Fvqc{_U}C#D1IGt-Y@^_%|C~j{D|if=AbcT)rU7R37xKPS`4e=6u`z$3xD3*
    za8qf5R$W>qr%i{y~8lPysrPrKMwBx7$
    zba92Wev5c)DBlvWY0&p!vZL8k(QCSaDM9@k^@I_h!So^b(2aF@{1XT3me)1zY~t37
    z;`t~_h7&Gy2)QR%VTn3^K61TcJ8a#Q5QSm=5f{SP8x>eq<%T
    z9M?Al6<@sXSN-jb7d{Nfui2qJDPHvNee|B+FD=+prv#fzHm;bNBruGe_2lFWKgFC5
    zUWHk)kl818q$HftsFI#y;CwQ%U=}i3BPQJ!+Ld{f#g
    z6YLgtikxfMk6n~p#?4zgbPvR*h@r_YnqQl!#MFk@yRbT%rhT>>Wm~cc5wLU5>Ah~G
    z?M2;yx^U023!W9C$7cJNg3FJ!Naxy!p7P2orqSU;
    z60L9_ShK=P%Ddgw(FfM*A#~P>zLgB1@$^gOH!KK0W&SC6gG2Ll@_a8K%r&kz6CU_-
    z%QVu%_4*6$>RoF>tXa&b-ks^Gd~J0)%dAac
    zT*mXkj3OvTvz)-J4d2Af_Vyv=(S+Dimn$B#;8_ge%zXW{L&Cg;M?9HH(HAH1&t^`Z((WK3RiFNF=<8oPcdvz~ujstDrMhTXqPuBg
    z>JlfPZC%XlW`&UTLmMw^@y1O~RK2EPcZ~ZpQa)dAhQu4l;b}(-hEx8ab!AwMMZ54&Ewv5P-K4!>iz2<-awlHNg2C*?Ff0n8MU*3weES
    zR9w=cY4`T|rLW72Oap_geFK-_5sHN-0H#`!25vd-5rdg_36Mtf_1~9EE$*G>SySgk|Ywqs58Og
    z$C_u+w5+}fY6%AJA23sRUZcEXekmMJ=coX`nec_7<(1|hmX
    zz|nI>llb|24|JFGX^&|SyZ$W88H*%AYxWEX
    z1Q*{+1HpmA*jYaXnMLb}`wv4#=XTRb9XjxmZz9_tOqZtl;SGwM^Rhw;a$LIWmP96r
    zgvXcB=R5=BvMgXWW}5_0T+Ype;e=gpSR%u-NZ1$Ze>Y2Mr~P
    zprF)y>7YVOSVC7~xG(aB4_0rI-S}>4>PDz6N?X+;EK!==Q
    z%Y6Xi4vbT7btyP_#KKs=2UW2)(OC>jONva)CHv(@)FI5F9hnu=7%E7<6xc&3*eWoi
    zTx?pNR(tZQXuN4;7?a_Z#F9N%KeMK~R$6Fe^<`g)Z0wxBA0F;!*PdHaBQq0cQFUlH
    z<*e%?bc~#SSrv6BxtG40%uY}7tl#xARsN3Q+Xi-|IdjtxTI>$b$Wm>vrG8H1%|8dJ
    z&b6py<;GKxTliq=`|Xv2_YVvvX!!w5S>5}7xQd09U4!}vdwUtxG#w#SLK|)x`Q=ii
    zPX_VEK*a+tF;tkHntKmv%rCw>W#D-Q&3Kv?dNEh^4HzvXljhAuCZs5(ufANAY5rU1
    zebhCrJsJO`j4UV!!nA}lbOPY58#aA;ogDCn0jJZX@Y{P+Qe6`0AVHW@dkZs62Kk;}
    zoUIHNv}D?DE+wTasiq-(Q^=w`%uUOCCWD8A;Uk*zo6{No_MH_%%2VWA3C^uZ&obvL$uKJIyzw^Vg;I+-gsS3z5=kPth7SR*wsG{-bA!%a?izB-O
    zNc*me$J$z~0O^(OWvS>r>J)wwdoRkdS!Jk_4wdbV8#t4fY?QYTC`}K%%Oi4f!qga2
    z(Q`Jt8~(#c2#?wCJDA@oPUh%c!7m{^;ZzS?lLM{ES68!q4KL*>T}qgHX1RDd#a!X#DoJ2$pKe+OXs#YC}o6|JiG2gCj
    z^$b>Pv$!xDzuaQ0v=8`>=%NpEoM~36r>3H19`lSSN*v>76Mp*gRWp
    zVX{E2RZ>Dif`~<9qEmaujS6-&mHi&AEskVc#vn7-H$!{fTh=hHs(+qvkHxLGo`2(
    zy)yb$J-vWOOR8B@$oW;T!c_@r@*Cs-rT;Ta?N
    zZ@liXr|44FBwclmwXJF2^Q1xN;|5;~Pk-B>o?YVQ($K^-PXuWt@dx?Z2pcm;!_B+a-iussj)^iW8_-7~FU-u!vL_O;2Wox|CSt=X+ghe@yqHd=
    zuT4L{wVA&`lkrV5m=DR;<`ShT1|ePA1Ay+8f1+f5w5|RV;{1C}f1Pc0!qi$pWv?Tg
    z9TxEYSQtdt%YNA)o=_az0e2!dk&SOARy`MRUrl;R(dJ}M>7gri=fdvzbS_YszKMco
    z&NU{F+h4~{Igt}%2ZBnV-Jp=@>zCo(ul$-?+nFvF=F@^~(Nn~R1BVIQ+FD=pG+a5F
    zh-9+fr7a-KFj9H&M+`k5Xcj~fQ!ab_Ixt8AK4Ke!31@i8wDhIH<)7kGCBSXgk&zX-
    zW8m18^48qrw{ugz2tWDO<%D;YbbkG5dNO5NJ^*1uvlTge^kwK^s7<(9F3&O7os;Vr
    z%hK)K7SbzrP*R3@Ph8xwJO+eJz-|FoyzWI-3hY-ahH1}*b$((p`SYh=Cp(xlFEu@f5=q!A*t
    z(vHFKfr!VVzedQ7uJY(csxj7tPH)^UVv|b?!Iol28pS9BNy&+xZdD$=F|zXkrt#Zi
    z-wrvr+FtRq(|J{uiZB^Rxu>I)lRFH1FaY^w4@w?_3*UsWi5)le_
    zer?MDLI!+NMmobNh@sc7cxQrs$fC)jPuEMlX*UAST9={8P^sewHG6pe0o!qTa!0sr
    zl7i(uqh))vQ#eu2TrZ74L
    zzO>L@58StlHR?^kTFY}s2F<`2iVD+}|%d*^G64LlT&Id!4}Skv&@x;^ycP=){N2XbF#1-pg(iQIYV`}SV)YzuqHEd2_Z6lVf
    z3Ip#`?y2bkNKM5TT21#IBfTFzUG>GZE%(dg}-%=krmtanwtw=%?-RX8|D->Pt)
    zx!nCwipZu!$L5LZauDn
    z_o6SY!xZ)bZqi4SX6mob8!rhSKL@=0Fh0G*Zd6%zh=kC(zsIlcC7R#?iN*
    z=8n0;5RVPZ!!&|~d;R^w*NDeudP&{(DT7!HuG7b6-Uo*&NiLXW6>gJONzB3t
    zL`+hMwaKWb@o9?Fj!1s;Chn$Xk44;fJuLH0>!=GY4#L}+q21TAr<;N8O3hXSU2?rP
    z;JrOGR*g8aK+r<}`HNX=fR?PI-%p0JH>hS%-in+dP05hoGfqZ2;TxSpZcj&*)^!|K
    z&pYYjX^X254=U`l+LoxzPO!vqP;n=`ERd-KJk(CU0U5F;zg%?@Pm$^Oj
    zv%9#e5v9v-x?gE+<~Wzh2+f-W>(wQuY>kqjzUhVjG@XzwUF`$`+b$nhy+iq^2K}MgOA1Jfwh{RX?KYI%CXg)JeDALwtJOgS8CAHMRh596p6*qP`UbJ4mgqQ?3h4#7JDL5c5``JPj8EWPa}AA
    z_LQc3GGu&Ky^C=K_bnC2`+DRBy$qnF^=XjAa*ES^U~#;tC7fp(JoB4k-{PYUgzj)H
    z&K}!)_0{|^f4sL8MS-JMeR5#?098oj|E=_zgKhD3-mrH$+>T+T5
    zU3hHX!q6vU?6BZ_oToUT>E7)WEsmu1Ru
    z3eJ3t_uFmXeGtnwIXH5RVc%Z;^R|gkc8Fhtw@G&O)i=ZYfOF)Y6@OoUpKY3KyNSTu
    zh?J+MmJwJNy_tx#riDHbD{0yX3`H1vB`;FdnlkQ(d7kF^J)ekx>CSe-XW%TFIAp+m
    z^JYZ0y1~r=mtV?-5nM(XjIH4f%H)&VGtqpd^`Pl`}>L?taj+9#7NiZWbUX)
    za|HTSW`yOh_wipFH+qdq<5mC1o97qCz;>6UCXq6&U++ZHmH}7kJ7ijn5Yplg<0VM
    z`O5g1%Lxk=qfZ{_juh_>tI%a1-bKnKgOmyq1GyM@e{-(skD+|0sbWK~bUlIGW?kJ{
    zVaM4B<)~PbD^om&fv|GMa!UqPT{U|)0)HBAPmanL-z!3>4tRI0D?gz|GB)gnIzb@f
    zyv1vzDMAb`2aWNJ2vL_lF+-)3mXViC+JnLiJBa{dI|6rkUyL{WLh2$~KoY
    zm>~3a`)}
    z?w@;PR5wxrwqX5qWa+iY467tqz4t#A58gMTBLxy`u{C?@yD9sCu(IX*^DUc-J4tv>
    z`ZAnSZt1{)vlR;2SLZ-SM$^v(1i3zvO>u{tgHrKvaJvsyr6&xu%oUdDk+54nBF|D
    zD)6=b^BG;4VY?MyvxaqI&6sb@>^kv%bznz#%`al9r0udn{7;KDhIjUS`Eift(6HUB
    z>&FJ~9*?*nr#+|7Kqu)*>qAq)lU2!3Ii|d^A9mH60#QOm7T@gZmAJ*#VsQIU@s5A4kJ(0(5nGgr>in#Chd
    zSzc37!%-tOu2;_83N9LP?YxbVedy58G*^YpMzM3EV5arOV?4S7$M3T8
    z%kqfU(M0hA6c2IV=#PY%#^7bd&J*4~z>y-6+PYC393VV-hkt%Av!Xo8m}?4er9Mgy
    zWcDynmATk8hNrl$d>Z^ABUU0lStTLEz>u_lf4Qu|d8l5C-T3zP4yO2gM8faX7*(&)
    zrDh(^1ooC(Fz;rEOC%FwyBOMajr)M>x0vCMGTu{+lb(|dO;K!sO438GGkj;egc6b{
    zNYkk1k#6qSfiH2_uC)xb+o|61wz9WEGtfjlP`)I|i*axIyoPhN
    zuW53OdfPzCOuZ&{yjQ8?8mFbg+=gZLwqq=?0E@Adm47*0#0{%NQv)6F-=NLjknv2N
    zi(@0)BBo?msLAr=ZW&1Ek~sI?r`rcHC73LrCvRJ;G3kUv-))ZBhN~H0NG8`h&}EfK
    z80=13-|;Qj>59YSGv8d?R9?S`IpJ+foSx?Ety&H~0T;(EKXQ6(^ec17jgqN(x34LI
    zVRmnN)3zoFyc%FfSzKyLsjJ~J$;A^rZaJ55lL^lr*i8A}u{>VnTvHFpbZgwao%zrz
    zH)WNm!nV~=AfFu(g1>(tMZubm!0hT0@%3a@1*KC-{*bbv91=$uY)`N^e
    zn_Ay1PqzIwbm1+(uV?M_6n=nQ-+hT-+Lbtq-kZwL-;zQgF;Am3D9ou66Xp4iqh^-t
    zOVFH~o`cM%TJqSLae;h_ykEYyqqixLXC~V++`)~8;B}G
    zSj)vyR3$Bxw3eGVowj#V9!;lHE%?Hw)m_aD<9$G0LQllqzTXv<9e>ye;k!!&dPibv
    z@J`Sqf}2ZQjScH!Qs`vHbWY5fru6bUj)4W+J&Dmuk7-@)7~ZpPzmh}TV)hhUr3N1s
    z{RctKiHRLOw5qDooC}0UVRwvAPt%>YsNm&v$e+F_lQM=w7#*&)1h=k&>uJb}g!%Cj
    zD@xep)TK%?V^tUUyBc+`BrTxvZDRHXhO0i}=fak?K`$q=ms!RFz*!
    zy}2!Mmw34{Db>PmP@!aR
    zUQv*UhE-XRxLF<8@BAi_d-|-uF{9kiwpTyqx#-4-PWQ*l
    zw(dF|m^{oP&Xh~=8-?v$lK1fGaLuo2zXT-D}4#NqJ?WVak>hnq2V@+zHis!J$g4!3xE-hVvmtRd7O`5$^@
    z^8ZI#uKHJE-(-ffA3h=t53;FO49|trwIGxpO>WZjIViBjhl~?QnKj0IwVje#*Jkzm
    zt6N!iOC}oujAB<#Wk|u`fWf2YjGZFM4vSAiLRlUXK<8rgjspRUSv`I-VOL^<|F(dU
    zUKn7Qk(2JJ;@e%GkVO#(hqlAb%$#WA)4k?EVbwc>CybCy%&}V<);7dni^00Q563fLr~DPBkcZ&l}`T4vEGEIepz6cvqVb-
    zI23FhqhhF{@)hrHslMk-Aw=e4SLH~~w9%pwp7is1660rzUCuGT-xa!&-i>&@8~rhoSq;VrNOShf5@Mp@tE6&PXbA^nn>%Kpek5q*wcSOhc%yUms^25%_w
    ztx&>%M$+tVYd(^Be%7(03v^{-lw&+Mg{&m&Zp7&jh5A6_#O;y?|$CSH}KpTh%{N~q|Ds))3ZhUFXs&S(7|vHekBioDdk8V
    zVd&4$cp8glYHs7X_92mpbT>ZRzwNE~{}R6lx{qduxo?lLO|%30(=8cu`v9+u=*f*U
    z6JN`H5)L>MB+>_R&MPv(ff$b}1A)x1##6&Dw!0fPCL9ZSu8-V1NfNSyB16qVf&FU}
    z3*sCrGUjB%j_~#-B~(F%-fq28%TtW_u_XrQq`f7($aNq}H;PskQx6n-7HZ}~jw%Aa
    z#~?`b79+`ajl!>7FQ`7Qd4-X>8#pT~@6XRm>sYA^?U3IjByRKf5K3*^&|W-zZY*fm
    z0|zsQtstY%39@qr#q5)4HMA1toHF`qKUciWsFN|Ft-nlaP&NH#oJ5n}CJs$oex*1T
    zy}(|xuP@AA&UP<(SPqOTqGJUTxEQtEZq&k3t|nXv(fX>MGDo`F#;0O
    zDss?EZv`qNiiNbM$Q7~!v%=Lfvgc-i<>Q+H!JTj5&4VlJu+BF#U%!QNG|X5Mkw0v7
    zjsMHmeiJHU%W)sDNRHj>E$V!)_?4qRsEhWqzTDqNk5Y*4BVpOOkwx^!%$7?ty{2zO
    zwseR#oGaNb30}gK7tI;p*Y#f%cpxgYtEx%a$u>h>tLHB!7T+BjZ^dg4LlO7jmLdZZ
    zgDu&H>P^g&AKH=aoqng=k${%=#Vu7hzYZB0XDhy?qSMu?MVt&Sw<~G3W>WfW;;eJm
    z_-;x)OQ@ukW6$=03dT2Y5rkF0_ZsBOnmV0na$xxGk~RAn=B;6u5+{ojb49WNCI|=|
    zN{Cw#?{vO-HN*f63aLdrBhg#|jSLAKqv`sB`T~?K8
    zSqot*e(}1nF{~`#F=KP9nlb}p?WP+>-LKs8>*55r8DdT3m|SEC)jNjA+-H
    zOu23b-nbP1m^V4vsT>hRfj0I~XZ_nxdO?AxxfiJ3I};wJbq$Gmo#^>6E10=)4IIeH
    z$y95(%6ML8t9cHk%RcW{FWzh|*S7aUS~y(_HFMMR(&EIgV&YUh(H-wa0=x7*Mjzbv1mTGRs
    zE=}_+|Ml_p*8!Om+Mbmyi`w_iW-&LC@%U^HPo6{WCEt#x53ZFY8OiVrUB%7^`iA;%
    zz97KBXfmpB%fOq+EjH-c2W&N?G|0ZWq}(dc3{nnELXM!?9VUNtrD-yu5LPHy40}}N
    z%-iwbewtc1b+(5-RnR#d6wgdo6?YQ8wKJ{#0M9d<6;@h#l;n7DyCtO#VN
    zJ(}VwgU^XpI#pU=#{f!=bBXWRX_kv41>?Qr
    ztJ=!~aVZ$6ChOa-RcFLE-G#ne8hL3%!3aX;%Dqu%GKULqe4IhTW_Zo(<~(HMU%JF4
    zSjh7^kH|2j(xnnpE2?vc%S#RzrX9U0Fd487sLV_cUf?oITQCrNFzBm@eG8L1KlGWr=7e&m)&XqJVw`G5`_4w7R_sN3mf1cGm2toV9*-^3^_Y}_=
    zL&Z~(*nNO)1`>to&xDE(L6s-$!wpIil0U~VxrKBCqW>^!{NjI1Z{a8QlcRh
    zDoZdQ`t6{ORvB0)^zAX&E||(czg2sVeh+QzJtv>&?i`31N5Oa)RL!;virv
    z?ddNJMq<{@q3Wr@s2Qgo_2n7!tU_*DKOwf0#v)mdJn|az9`@`km@oRa`gZpSzx1JR
    z(lXMG53ffMd=eRKpoH8gHxBoB%<$X~^dx4O1Brbj{{1jExr~;3GQ5L=x)}f7`5$YI
    z6R7`=E_T!`F3+bsMpR>y(*rRbieWb9x|OwS_oajG(EQ3d>xqlq*gvm!m5S%
    zFhftd|Kw$@5CbI~z_#L_s8S!Z=l%(C{@td(Dtqn_f%-a*DX*(ghOZ1MRqK^o(?
    zwbmFkM1w+CTPCWe#~~Y{9Qn4T`1n=XXE$m`7SG9$u=<8kn_LKonJ_b
    zbNUAFp#tA8#u(Utl+;fZkzDS`X4Eh_)-psJ0Zz6xcXspydI=pP7v@4Xcp
    z{KVg<2DOe(6yLj5I4?x78+`D=E8lNTM+tsX~o8)7ZF87cMo>9FY9@U
    z-SiM4aWb*0he9B&=w8Oaj2Kb;Us@Up>YNGlh(uy+an+2$OlvXUW!@b!mvtJH7i>5=
    zPFsB$FHT>||><<9HmpQl0{U%YboWFLPB~aR|A|0
    zxD~|Z9JJha)b20+heMv2^R%Pyw8J1yr638mm>NMXSuNS_*lE4fZ)3zJJg4Oh26FC=
    z`Rb6$p1P*LLK&>UKtQ7Ff#c2^qm;!KJqaIEuGI#BOZ_l5fBKu&;xURc%J;|7#nP=VH
    z+#f^xr)Lb}ShPos&{-~lL%x)ocq!3`fE|~t3(Hl0BQ|-X&K;=7G!VHLr^@Vc?EGXc
    zm?io=K>3=Vi_!|}Jxf}9CMq*tR=3^xR*&}CVAo|!4N*=S2X4dWP(w4KRH}%0jcDfj
    zdTk7bCpWA>j}2N__u5P=7#o2<3SG}QhuG>-D^8rqDVm|e6cYIo9m;sG*a}Cv+p~`~
    zNg-z_w#%OD(FQ)vgsQ94!G5p1v;k(GM!Qjg-iE~6%v_|i%rQ87erc|fj$Ij~x@xQ&
    z_$FXj#|l=Cm2
    zMip%%ae}nm*6N`JGxGs^129d1^OSi0S-mgo<&w5A6MY*Mt40YKl5m|1e=6lhkXVem^PLwH9BNb
    ze0vDiI_masc+3Bby)S`k^4u1swbix`lmeoREmRN?6vH5MTN$h-x2CN{=R?z``h#Wc3oMP4a)9biQk6KGFA=7#AQx+HR`)2YLXYA(#ou8fr(AV&w_sa
    z7)f9g>lZ!mS*PaaN)XwxWKFXmJDy-({GeaWvtqN

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