@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