Skip to content
This repository was archived by the owner on Feb 14, 2025. It is now read-only.

Commit c248642

Browse files
committed
another restructuring
1 parent 68c21d2 commit c248642

20 files changed

+301
-77
lines changed

mcp/docs/mcp-class-diagram.puml

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
@startuml MCP Class Diagram
2+
3+
' Style configurations
4+
skinparam class {
5+
BackgroundColor White
6+
ArrowColor Black
7+
BorderColor Black
8+
}
9+
10+
' Interfaces
11+
interface McpAsyncTransport {
12+
+start(): void
13+
+close(): void
14+
+setInboudMessageHandler(Consumer<JSONRPCMessage>): void
15+
+setErrorHandler(Consumer<String>): void
16+
+sendMessage(JSONRPCMessage): Mono<Void>
17+
}
18+
19+
interface McpAsyncSession {
20+
+initialize(): Mono<InitializeResult>
21+
+close(): void
22+
+listTools(): Mono<ListToolsResult>
23+
+callTool(String, Map<String, Object>): Mono<CallToolResult>
24+
+createMessage(List<SamplingMessage>, ModelPreferences): Mono<CreateMessageResult>
25+
}
26+
27+
interface McpClient {
28+
+initialize(): InitializeResult
29+
+listTools(): ListToolsResult
30+
+callTool(String, Map<String, Object>): CallToolResult
31+
+createMessage(List<SamplingMessage>, ModelPreferences): CreateMessageResult
32+
}
33+
34+
' Classes
35+
class DefaultMcpTransport {
36+
-objectMapper: ObjectMapper
37+
-errorSink: Sinks.Many<String>
38+
-inboundSink: Sinks.Many<JSONRPCMessage>
39+
-outboundSink: Sinks.Many<JSONRPCMessage>
40+
+DefaultMcpTransport()
41+
+DefaultMcpTransport(ObjectMapper)
42+
}
43+
44+
class McpAsyncClient {
45+
-transport: McpAsyncTransport
46+
-session: McpAsyncSession
47+
+McpAsyncClient(McpAsyncTransport)
48+
+initialize(): Mono<InitializeResult>
49+
+close(): void
50+
}
51+
52+
class McpSyncClient {
53+
-asyncClient: McpAsyncClient
54+
+McpSyncClient(McpAsyncTransport)
55+
+initialize(): InitializeResult
56+
+close(): void
57+
}
58+
59+
class StdioServerTransport {
60+
-process: Process
61+
-writer: BufferedWriter
62+
-reader: BufferedReader
63+
+StdioServerTransport(ServerParameters)
64+
}
65+
66+
class ServerParameters {
67+
-command: String[]
68+
-workingDirectory: File
69+
-environment: Map<String, String>
70+
}
71+
72+
class ServerParametersParser {
73+
+{static} parse(String): ServerParameters
74+
}
75+
76+
class Assert {
77+
+{static} notNull(Object, String): void
78+
+{static} hasText(String, String): void
79+
}
80+
81+
' Relationships
82+
McpAsyncTransport <|.. DefaultMcpTransport
83+
DefaultMcpTransport <|-- StdioServerTransport
84+
85+
McpClient <|.. McpSyncClient
86+
McpAsyncSession <|.. McpAsyncClient
87+
88+
McpSyncClient o-- McpAsyncClient
89+
McpAsyncClient o-- McpAsyncTransport
90+
McpAsyncClient o-- McpAsyncSession
91+
92+
StdioServerTransport o-- ServerParameters
93+
ServerParameters <.. ServerParametersParser : creates
94+
95+
' Package organization
96+
package "spring.ai.mcp.spec" {
97+
' McpAsyncTransport
98+
' McpAsyncSession
99+
' DefaultMcpTransport
100+
}
101+
102+
package "spring.ai.mcp.client" {
103+
' McpClient
104+
' McpAsyncClient
105+
' McpSyncClient
106+
107+
package "stdio" {
108+
' StdioServerTransport
109+
' ServerParameters
110+
' ServerParametersParser
111+
}
112+
113+
package "util" {
114+
' Assert
115+
}
116+
}
117+
118+
@enduml

mcp/docs/mcp-sequence-diagram.puml

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
@startuml MCP Sequence Diagram
2+
3+
participant McpClient
4+
participant McpSyncClient
5+
participant McpAsyncClient
6+
participant DefaultMcpTransport
7+
participant StdioServerTransport
8+
9+
== Initialization ==
10+
11+
McpClient -> McpSyncClient: new McpSyncClient(transport)
12+
activate McpSyncClient
13+
14+
McpSyncClient -> McpAsyncClient: new McpAsyncClient(transport)
15+
activate McpAsyncClient
16+
17+
McpAsyncClient -> DefaultMcpTransport: start()
18+
activate DefaultMcpTransport
19+
DefaultMcpTransport --> McpAsyncClient: started
20+
deactivate DefaultMcpTransport
21+
22+
McpAsyncClient --> McpSyncClient: created
23+
deactivate McpAsyncClient
24+
25+
McpSyncClient --> McpClient: created
26+
deactivate McpSyncClient
27+
28+
== Message Flow ==
29+
30+
McpClient -> McpSyncClient: initialize()
31+
activate McpSyncClient
32+
33+
McpSyncClient -> McpAsyncClient: initialize()
34+
activate McpAsyncClient
35+
36+
McpAsyncClient -> DefaultMcpTransport: sendMessage(initRequest)
37+
activate DefaultMcpTransport
38+
39+
DefaultMcpTransport -> StdioServerTransport: sendMessage(initRequest)
40+
activate StdioServerTransport
41+
42+
StdioServerTransport --> DefaultMcpTransport: response
43+
deactivate StdioServerTransport
44+
45+
DefaultMcpTransport --> McpAsyncClient: InitializeResult
46+
deactivate DefaultMcpTransport
47+
48+
McpAsyncClient --> McpSyncClient: InitializeResult
49+
deactivate McpAsyncClient
50+
51+
McpSyncClient --> McpClient: InitializeResult
52+
deactivate McpSyncClient
53+
54+
== Tool Execution ==
55+
56+
McpClient -> McpSyncClient: callTool(name, args)
57+
activate McpSyncClient
58+
59+
McpSyncClient -> McpAsyncClient: callTool(name, args)
60+
activate McpAsyncClient
61+
62+
McpAsyncClient -> DefaultMcpTransport: sendMessage(toolRequest)
63+
activate DefaultMcpTransport
64+
65+
DefaultMcpTransport -> StdioServerTransport: sendMessage(toolRequest)
66+
activate StdioServerTransport
67+
68+
StdioServerTransport --> DefaultMcpTransport: response
69+
deactivate StdioServerTransport
70+
71+
DefaultMcpTransport --> McpAsyncClient: CallToolResult
72+
deactivate DefaultMcpTransport
73+
74+
McpAsyncClient --> McpSyncClient: CallToolResult
75+
deactivate McpAsyncClient
76+
77+
McpSyncClient --> McpClient: CallToolResult
78+
deactivate McpSyncClient
79+
80+
== Cleanup ==
81+
82+
McpClient -> McpSyncClient: close()
83+
activate McpSyncClient
84+
85+
McpSyncClient -> McpAsyncClient: close()
86+
activate McpAsyncClient
87+
88+
McpAsyncClient -> DefaultMcpTransport: close()
89+
activate DefaultMcpTransport
90+
91+
DefaultMcpTransport -> StdioServerTransport: close()
92+
activate StdioServerTransport
93+
StdioServerTransport --> DefaultMcpTransport: closed
94+
deactivate StdioServerTransport
95+
96+
DefaultMcpTransport --> McpAsyncClient: closed
97+
deactivate DefaultMcpTransport
98+
99+
McpAsyncClient --> McpSyncClient: closed
100+
deactivate McpAsyncClient
101+
102+
McpSyncClient --> McpClient: closed
103+
deactivate McpSyncClient
104+
105+
@enduml

mcp/src/main/java/spring/ai/mcp/client/McpAsyncClient.java renamed to mcp/src/main/java/spring/ai/experimental/mcp/client/McpAsyncClient.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
package spring.ai.mcp.client;
1+
package spring.ai.experimental.mcp.client;
22

33
import java.time.Duration;
44

55
import com.fasterxml.jackson.core.type.TypeReference;
66
import com.fasterxml.jackson.databind.ObjectMapper;
77
import reactor.core.publisher.Mono;
8-
import spring.ai.mcp.spec.McpAsyncSession;
9-
import spring.ai.mcp.spec.McpAsyncTransport;
10-
import spring.ai.mcp.spec.McpSchema;
8+
import spring.ai.experimental.mcp.spec.McpAsyncSession;
9+
import spring.ai.experimental.mcp.spec.McpAsyncTransport;
10+
import spring.ai.experimental.mcp.spec.McpSchema;
1111

1212
public class McpAsyncClient extends McpAsyncSession {
1313

mcp/src/main/java/spring/ai/mcp/client/McpClient.java renamed to mcp/src/main/java/spring/ai/experimental/mcp/client/McpClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package spring.ai.mcp.client;
16+
package spring.ai.experimental.mcp.client;
1717

1818
import java.time.Duration;
1919

2020
import com.fasterxml.jackson.databind.ObjectMapper;
21-
import spring.ai.mcp.spec.McpAsyncTransport;
21+
import spring.ai.experimental.mcp.spec.McpAsyncTransport;
2222

2323
/**
2424
* The MCP client is the main entry point for interacting with the Model Context Protocol

mcp/src/main/java/spring/ai/mcp/client/McpSyncClient.java renamed to mcp/src/main/java/spring/ai/experimental/mcp/client/McpSyncClient.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
package spring.ai.mcp.client;
1+
package spring.ai.experimental.mcp.client;
22

33
import java.time.Duration;
44

5-
import spring.ai.mcp.client.util.Assert;
6-
import spring.ai.mcp.spec.McpSchema;
5+
import spring.ai.experimental.mcp.client.util.Assert;
6+
import spring.ai.experimental.mcp.spec.McpSchema;
77

88
public class McpSyncClient implements AutoCloseable {
99

mcp/src/main/java/spring/ai/mcp/client/stdio/ServerParameters.java renamed to mcp/src/main/java/spring/ai/experimental/mcp/client/stdio/ServerParameters.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package spring.ai.mcp.client.stdio;
1+
package spring.ai.experimental.mcp.client.stdio;
22

33
import java.util.ArrayList;
44
import java.util.Arrays;
@@ -9,7 +9,7 @@
99

1010
import com.fasterxml.jackson.annotation.JsonInclude;
1111
import com.fasterxml.jackson.annotation.JsonProperty;
12-
import spring.ai.mcp.client.util.Assert;
12+
import spring.ai.experimental.mcp.client.util.Assert;
1313

1414
/**
1515
* Server parameters for stdio client.

mcp/src/main/java/spring/ai/mcp/client/stdio/ServerParametersParser.java renamed to mcp/src/main/java/spring/ai/experimental/mcp/client/stdio/ServerParametersParser.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package spring.ai.mcp.client.stdio;
16+
package spring.ai.experimental.mcp.client.stdio;
1717

1818
import java.util.Map;
1919
import java.util.List;
2020

2121
import com.fasterxml.jackson.annotation.JsonInclude;
2222
import com.fasterxml.jackson.annotation.JsonProperty;
2323
import com.fasterxml.jackson.databind.ObjectMapper;
24-
import spring.ai.mcp.client.stdio.ServerParametersParser.McpServerConfigurations.McpServerConfiguration;
24+
import spring.ai.experimental.mcp.client.stdio.ServerParametersParser.McpServerConfigurations.McpServerConfiguration;
2525

2626
/**
2727
* @author Christian Tzolov

mcp/src/main/java/spring/ai/mcp/client/stdio/StdioServerTransport.java renamed to mcp/src/main/java/spring/ai/experimental/mcp/client/stdio/StdioServerTransport.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package spring.ai.mcp.client.stdio;
1+
package spring.ai.experimental.mcp.client.stdio;
22

33
import java.io.BufferedReader;
44
import java.io.BufferedWriter;
@@ -12,12 +12,12 @@
1212
import com.fasterxml.jackson.databind.ObjectMapper;
1313
import reactor.core.scheduler.Scheduler;
1414
import reactor.core.scheduler.Schedulers;
15-
import spring.ai.mcp.client.util.Assert;
16-
import spring.ai.mcp.spec.DefaultMcpTransport;
17-
import spring.ai.mcp.spec.McpSchema.JSONRPCMessage;
18-
import spring.ai.mcp.spec.McpSchema.JSONRPCNotification;
19-
import spring.ai.mcp.spec.McpSchema.JSONRPCRequest;
20-
import spring.ai.mcp.spec.McpSchema.JSONRPCResponse;
15+
import spring.ai.experimental.mcp.client.util.Assert;
16+
import spring.ai.experimental.mcp.spec.DefaultMcpTransport;
17+
import spring.ai.experimental.mcp.spec.McpSchema.JSONRPCMessage;
18+
import spring.ai.experimental.mcp.spec.McpSchema.JSONRPCNotification;
19+
import spring.ai.experimental.mcp.spec.McpSchema.JSONRPCRequest;
20+
import spring.ai.experimental.mcp.spec.McpSchema.JSONRPCResponse;
2121

2222
/**
2323
* Stdio client for communicating with a server process.

mcp/src/main/java/spring/ai/mcp/client/util/Assert.java renamed to mcp/src/main/java/spring/ai/experimental/mcp/client/util/Assert.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package spring.ai.mcp.client.util;
16+
package spring.ai.experimental.mcp.client.util;
1717

1818
import reactor.util.annotation.Nullable;
1919

mcp/src/main/java/spring/ai/mcp/spec/DefaultMcpTransport.java renamed to mcp/src/main/java/spring/ai/experimental/mcp/spec/DefaultMcpTransport.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package spring.ai.mcp.spec;
16+
package spring.ai.experimental.mcp.spec;
1717

1818
import java.util.function.Consumer;
1919

2020
import com.fasterxml.jackson.databind.ObjectMapper;
2121
import reactor.core.publisher.Mono;
2222
import reactor.core.publisher.Sinks;
23-
import spring.ai.mcp.client.util.Assert;
24-
import spring.ai.mcp.spec.McpSchema.JSONRPCMessage;
23+
import spring.ai.experimental.mcp.client.util.Assert;
24+
import spring.ai.experimental.mcp.spec.McpSchema.JSONRPCMessage;
2525

2626
/**
2727
* @author Christian Tzolov

0 commit comments

Comments
 (0)