From a922b1aa7a09dfa0d2ce17321436058898ee2152 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Wed, 11 Dec 2024 00:51:13 +0100 Subject: [PATCH] Add doc diagrams --- mcp-core/docs/class-diagrams.puml | 135 ++++++++++++++++++ .../docs/spring-ai-mcp-uml-classdiagram.svg | 1 + spring-ai-mcp-core/README.md | 8 ++ 3 files changed, 144 insertions(+) create mode 100644 mcp-core/docs/class-diagrams.puml create mode 100644 mcp-core/docs/spring-ai-mcp-uml-classdiagram.svg diff --git a/mcp-core/docs/class-diagrams.puml b/mcp-core/docs/class-diagrams.puml new file mode 100644 index 0000000..f98cd2b --- /dev/null +++ b/mcp-core/docs/class-diagrams.puml @@ -0,0 +1,135 @@ +@startuml Core Components + +interface McpTransport { + +void start() + +void close() + +Mono closeGracefully() + +void setInboudMessageHandler() + +void setInboundErrorHandler() + +Mono sendMessage() +} + +abstract class AbstractMcpTransport { + #ObjectMapper objectMapper + #getInboundSink() + #getOutboundSink() + #getErrorSink() +} + +interface McpSession { + + Mono sendRequest() + +Mono sendNotification() + +Mono closeGracefully() +} + +class DefaultMcpSession { + -McpTransport transport + -ObjectMapper objectMapper +} + +class McpClient { + +{static} async() + +{static} sync() +} + +class McpAsyncClient { + +Mono initialize() + +Mono callTool() + +Mono listTools() + +Mono listResources() + +Mono readResource() + +Mono listPrompts() + +Mono getPrompt() +} + +class McpSyncClient { + +InitializeResult initialize() + +CallToolResult callTool() + +ListToolsResult listTools() + +ListResourcesResult listResources() + +ReadResourceResult readResource() + +ListPromptsResult listPrompts() + +GetPromptResult getPrompt() +} + +class StdioServerTransport { + -Process serverProcess + -ServerParameters parameters +} + +class McpSchema { + +class ErrorCodes + +interface Request + +interface JSONRPCMessage + +interface ResourceContents + +interface Content +} + +class McpError { + -int code + -String message +} + +McpTransport <|.. AbstractMcpTransport +AbstractMcpTransport <|-- StdioServerTransport +McpSession <|-- DefaultMcpSession +DefaultMcpSession <|-- McpAsyncClient +McpClient ..> McpAsyncClient : creates +McpClient ..> McpSyncClient : creates +McpSyncClient o-- McpAsyncClient +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 CreateMessageRequest + class CompleteRequest + 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 +} + +JSONRPCMessage <|.. Request +Request <|.. InitializeRequest +Request <|.. CallToolRequest +Request <|.. CreateMessageRequest +Request <|.. CompleteRequest +Request <|.. GetPromptRequest + +ResourceContents <|.. TextResourceContents +ResourceContents <|.. BlobResourceContents + +Content <|.. TextContent +Content <|.. ImageContent +Content <|.. EmbeddedResource + +@enduml diff --git a/mcp-core/docs/spring-ai-mcp-uml-classdiagram.svg b/mcp-core/docs/spring-ai-mcp-uml-classdiagram.svg new file mode 100644 index 0000000..5ff2925 --- /dev/null +++ b/mcp-core/docs/spring-ai-mcp-uml-classdiagram.svg @@ -0,0 +1 @@ +McpTransportvoid start()void close()Mono<Void> closeGracefully()void setInboudMessageHandler()void setInboundErrorHandler()Mono<Void> sendMessage()AbstractMcpTransportObjectMapper objectMappergetInboundSink()getOutboundSink()getErrorSink()McpSession<T> Mono<T> sendRequest()Mono<Void> sendNotification()Mono<Void> closeGracefully()DefaultMcpSessionMcpTransport transportObjectMapper objectMapperMcpClientasync()sync()McpAsyncClientMono<InitializeResult> initialize()Mono<CallToolResult> callTool()Mono<ListToolsResult> listTools()Mono<ListResourcesResult> listResources()Mono<ReadResourceResult> readResource()Mono<ListPromptsResult> listPrompts()Mono<GetPromptResult> getPrompt()McpSyncClientInitializeResult initialize()CallToolResult callTool()ListToolsResult listTools()ListResourcesResult listResources()ReadResourceResult readResource()ListPromptsResult listPrompts()GetPromptResult getPrompt()StdioServerTransportProcess serverProcessServerParameters parametersMcpSchemaclass ErrorCodesinterface Requestinterface JSONRPCMessageinterface ResourceContentsinterface ContentMcpErrorint codeString messagecreatescreatesusesthrows \ No newline at end of file diff --git a/spring-ai-mcp-core/README.md b/spring-ai-mcp-core/README.md index 1a771c6..9f230e8 100644 --- a/spring-ai-mcp-core/README.md +++ b/spring-ai-mcp-core/README.md @@ -30,6 +30,12 @@ Add the following dependency to your Maven project: ``` +## Documentation + +Detailed UML class diagrams showing the relationships between components can be found in [docs/class-diagrams.puml](docs/class-diagrams.puml). The diagrams include: +- Core Components: Shows the main interfaces, classes, and their relationships +- Message Flow: Illustrates the message and resource type hierarchies + ## Usage ### Async Client Example @@ -135,6 +141,8 @@ The SDK follows a layered architecture: - **AbstractMcpTransport**: Base transport implementation - **StdioServerTransport**: Stdio-based server communication + + ### Key Interactions 1. Client initialization