another restructuring

This commit is contained in:
Christian Tzolov 2024-12-09 23:31:23 +01:00
commit c248642d52
2 changed files with 301 additions and 77 deletions

View file

@ -0,0 +1,118 @@
@startuml MCP Class Diagram
' Style configurations
skinparam class {
BackgroundColor White
ArrowColor Black
BorderColor Black
}
' Interfaces
interface McpAsyncTransport {
+start(): void
+close(): void
+setInboudMessageHandler(Consumer<JSONRPCMessage>): void
+setErrorHandler(Consumer<String>): void
+sendMessage(JSONRPCMessage): Mono<Void>
}
interface McpAsyncSession {
+initialize(): Mono<InitializeResult>
+close(): void
+listTools(): Mono<ListToolsResult>
+callTool(String, Map<String, Object>): Mono<CallToolResult>
+createMessage(List<SamplingMessage>, ModelPreferences): Mono<CreateMessageResult>
}
interface McpClient {
+initialize(): InitializeResult
+listTools(): ListToolsResult
+callTool(String, Map<String, Object>): CallToolResult
+createMessage(List<SamplingMessage>, ModelPreferences): CreateMessageResult
}
' Classes
class DefaultMcpTransport {
-objectMapper: ObjectMapper
-errorSink: Sinks.Many<String>
-inboundSink: Sinks.Many<JSONRPCMessage>
-outboundSink: Sinks.Many<JSONRPCMessage>
+DefaultMcpTransport()
+DefaultMcpTransport(ObjectMapper)
}
class McpAsyncClient {
-transport: McpAsyncTransport
-session: McpAsyncSession
+McpAsyncClient(McpAsyncTransport)
+initialize(): Mono<InitializeResult>
+close(): void
}
class McpSyncClient {
-asyncClient: McpAsyncClient
+McpSyncClient(McpAsyncTransport)
+initialize(): InitializeResult
+close(): void
}
class StdioServerTransport {
-process: Process
-writer: BufferedWriter
-reader: BufferedReader
+StdioServerTransport(ServerParameters)
}
class ServerParameters {
-command: String[]
-workingDirectory: File
-environment: Map<String, String>
}
class ServerParametersParser {
+{static} parse(String): ServerParameters
}
class Assert {
+{static} notNull(Object, String): void
+{static} hasText(String, String): void
}
' Relationships
McpAsyncTransport <|.. DefaultMcpTransport
DefaultMcpTransport <|-- StdioServerTransport
McpClient <|.. McpSyncClient
McpAsyncSession <|.. McpAsyncClient
McpSyncClient o-- McpAsyncClient
McpAsyncClient o-- McpAsyncTransport
McpAsyncClient o-- McpAsyncSession
StdioServerTransport o-- ServerParameters
ServerParameters <.. ServerParametersParser : creates
' Package organization
package "spring.ai.mcp.spec" {
' McpAsyncTransport
' McpAsyncSession
' DefaultMcpTransport
}
package "spring.ai.mcp.client" {
' McpClient
' McpAsyncClient
' McpSyncClient
package "stdio" {
' StdioServerTransport
' ServerParameters
' ServerParametersParser
}
package "util" {
' Assert
}
}
@enduml

View file

@ -0,0 +1,105 @@
@startuml MCP Sequence Diagram
participant McpClient
participant McpSyncClient
participant McpAsyncClient
participant DefaultMcpTransport
participant StdioServerTransport
== Initialization ==
McpClient -> McpSyncClient: new McpSyncClient(transport)
activate McpSyncClient
McpSyncClient -> McpAsyncClient: new McpAsyncClient(transport)
activate McpAsyncClient
McpAsyncClient -> DefaultMcpTransport: start()
activate DefaultMcpTransport
DefaultMcpTransport --> McpAsyncClient: started
deactivate DefaultMcpTransport
McpAsyncClient --> McpSyncClient: created
deactivate McpAsyncClient
McpSyncClient --> McpClient: created
deactivate McpSyncClient
== Message Flow ==
McpClient -> McpSyncClient: initialize()
activate McpSyncClient
McpSyncClient -> McpAsyncClient: initialize()
activate McpAsyncClient
McpAsyncClient -> DefaultMcpTransport: sendMessage(initRequest)
activate DefaultMcpTransport
DefaultMcpTransport -> StdioServerTransport: sendMessage(initRequest)
activate StdioServerTransport
StdioServerTransport --> DefaultMcpTransport: response
deactivate StdioServerTransport
DefaultMcpTransport --> McpAsyncClient: InitializeResult
deactivate DefaultMcpTransport
McpAsyncClient --> McpSyncClient: InitializeResult
deactivate McpAsyncClient
McpSyncClient --> McpClient: InitializeResult
deactivate McpSyncClient
== Tool Execution ==
McpClient -> McpSyncClient: callTool(name, args)
activate McpSyncClient
McpSyncClient -> McpAsyncClient: callTool(name, args)
activate McpAsyncClient
McpAsyncClient -> DefaultMcpTransport: sendMessage(toolRequest)
activate DefaultMcpTransport
DefaultMcpTransport -> StdioServerTransport: sendMessage(toolRequest)
activate StdioServerTransport
StdioServerTransport --> DefaultMcpTransport: response
deactivate StdioServerTransport
DefaultMcpTransport --> McpAsyncClient: CallToolResult
deactivate DefaultMcpTransport
McpAsyncClient --> McpSyncClient: CallToolResult
deactivate McpAsyncClient
McpSyncClient --> McpClient: CallToolResult
deactivate McpSyncClient
== Cleanup ==
McpClient -> McpSyncClient: close()
activate McpSyncClient
McpSyncClient -> McpAsyncClient: close()
activate McpAsyncClient
McpAsyncClient -> DefaultMcpTransport: close()
activate DefaultMcpTransport
DefaultMcpTransport -> StdioServerTransport: close()
activate StdioServerTransport
StdioServerTransport --> DefaultMcpTransport: closed
deactivate StdioServerTransport
DefaultMcpTransport --> McpAsyncClient: closed
deactivate DefaultMcpTransport
McpAsyncClient --> McpSyncClient: closed
deactivate McpAsyncClient
McpSyncClient --> McpClient: closed
deactivate McpSyncClient
@enduml