diff --git a/mcp/README.md b/mcp/README.md index 2e5669f..88e0cc3 100644 --- a/mcp/README.md +++ b/mcp/README.md @@ -101,7 +101,7 @@ The SDK follows a layered architecture: - **McpClient**: Main interface defining the synchronous operations - **McpAsyncClient**: Async implementation using Project Reactor - **McpSyncClient**: Synchronous wrapper around the async client -- **McpAsyncTransport**: Transport layer interface +- **McpTransport**: Transport layer interface - **DefaultMcpTransport**: Base transport implementation - **StdioServerTransport**: Stdio-based server communication diff --git a/mcp/docs/mcp-class-diagram.puml b/mcp/docs/mcp-class-diagram.puml index 18ce099..5c0d939 100644 --- a/mcp/docs/mcp-class-diagram.puml +++ b/mcp/docs/mcp-class-diagram.puml @@ -8,7 +8,7 @@ skinparam class { } ' Interfaces -interface McpAsyncTransport { +interface McpTransport { +start(): void +close(): void +setInboudMessageHandler(Consumer): void @@ -42,16 +42,16 @@ class DefaultMcpTransport { } class McpAsyncClient { - -transport: McpAsyncTransport + -transport: McpTransport -session: McpAsyncSession - +McpAsyncClient(McpAsyncTransport) + +McpAsyncClient(McpTransport) +initialize(): Mono +close(): void } class McpSyncClient { -asyncClient: McpAsyncClient - +McpSyncClient(McpAsyncTransport) + +McpSyncClient(McpTransport) +initialize(): InitializeResult +close(): void } @@ -79,14 +79,14 @@ class Assert { } ' Relationships -McpAsyncTransport <|.. DefaultMcpTransport +McpTransport <|.. DefaultMcpTransport DefaultMcpTransport <|-- StdioServerTransport McpClient <|.. McpSyncClient McpAsyncSession <|.. McpAsyncClient McpSyncClient o-- McpAsyncClient -McpAsyncClient o-- McpAsyncTransport +McpAsyncClient o-- McpTransport McpAsyncClient o-- McpAsyncSession StdioServerTransport o-- ServerParameters @@ -94,7 +94,7 @@ ServerParameters <.. ServerParametersParser : creates ' Package organization package "spring.ai.mcp.spec" { - ' McpAsyncTransport + ' McpTransport ' McpAsyncSession ' DefaultMcpTransport } diff --git a/mcp/src/main/java/spring/ai/experimental/mcp/client/McpAsyncClient.java b/mcp/src/main/java/spring/ai/experimental/mcp/client/McpAsyncClient.java index 7efba72..eae2b56 100644 --- a/mcp/src/main/java/spring/ai/experimental/mcp/client/McpAsyncClient.java +++ b/mcp/src/main/java/spring/ai/experimental/mcp/client/McpAsyncClient.java @@ -5,23 +5,27 @@ import java.time.Duration; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import reactor.core.publisher.Mono; -import spring.ai.experimental.mcp.spec.McpAsyncSession; -import spring.ai.experimental.mcp.spec.McpAsyncTransport; +import spring.ai.experimental.mcp.spec.McpSession; +import spring.ai.experimental.mcp.spec.McpTransport; import spring.ai.experimental.mcp.spec.McpSchema; -public class McpAsyncClient extends McpAsyncSession { +/** + * @author Dariusz Jędrzejczyk + * @author Christian Tzolov + */ +public class McpAsyncClient extends McpSession { - public McpAsyncClient(McpAsyncTransport transport) { + public McpAsyncClient(McpTransport transport) { this(transport, Duration.ofSeconds(10), new ObjectMapper()); } - public McpAsyncClient(McpAsyncTransport transport, Duration requestTimeout, ObjectMapper objectMapper) { + public McpAsyncClient(McpTransport transport, Duration requestTimeout, ObjectMapper objectMapper) { super(requestTimeout, objectMapper, transport); } - /** - * The initialization phase MUST be the first interaction between client and server. + * The initialization phase MUST be the first interaction between client and + * server. * During this phase, the client and server: * *
- * The client MUST initiate this phase by sending an initialize request containing: + * The client MUST initiate this phase by sending an initialize request + * containing: *