@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 { -McpTransport transport -ObjectMapper objectMapper +interface RequestHandler +interface NotificationHandler } ' Client Classes class McpClient { +{static} Builder using(McpTransport transport) +{static} McpAsyncClient async(McpTransport transport) +{static} McpSyncClient sync(McpTransport transport) } class McpAsyncClient { +Mono initialize() +Mono callTool(CallToolRequest request) +Mono listTools() +Mono listResources() +Mono readResource(ReadResourceRequest request) +Mono listResourceTemplates() +Mono listPrompts() +Mono getPrompt(GetPromptRequest request) } class McpSyncClient { +InitializeResult initialize() +CallToolResult callTool(CallToolRequest request) +ListToolsResult listTools() +ListResourcesResult listResources() +ReadResourceResult readResource(ReadResourceRequest request) +ListResourceTemplatesResult listResourceTemplates() +ListPromptsResult listPrompts() +GetPromptResult getPrompt(GetPromptRequest request) } ' Server Classes class McpServer { +{static} Builder using(McpTransport transport) } class McpAsyncServer { +Mono addTool(ToolHandler toolHandler) +Mono removeTool(String toolName) +Mono notifyToolsListChanged() +Mono notifyResourcesListChanged() +Mono notifyPromptsListChanged() +interface ToolHandler } class McpSyncServer { +void addTool(ToolHandler toolHandler) +void removeTool(String toolName) +void notifyToolsListChanged() +void notifyResourcesListChanged() +void notifyPromptsListChanged() +McpAsyncServer getAsyncServer() } ' Transport Implementations class StdioClientTransport { -Process serverProcess -ServerParameters parameters } class SseClientTransport { -WebClient webClient } class StdioServerTransport { } class SseServerTransport { } ' Schema and Error Classes class McpSchema { +class ErrorCodes +interface Request +interface JSONRPCMessage +interface ResourceContents +interface Content +interface ServerCapabilities +{static} JSONRPCMessage deserializeJsonRpcMessage() } class McpError { -int code -String message } ' Relationships McpTransport <|.. StdioClientTransport McpTransport <|.. SseClientTransport McpTransport <|.. StdioServerTransport McpTransport <|.. SseServerTransport McpSession <|.. DefaultMcpSession DefaultMcpSession --o McpAsyncClient DefaultMcpSession --o McpAsyncServer McpClient ..> McpAsyncClient : creates McpClient ..> McpSyncClient : creates McpSyncClient o-- McpAsyncClient 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