1616
1717package com .google .adk .tools .mcp ;
1818
19- import com .google .common .collect .ImmutableMap ;
2019import io .modelcontextprotocol .client .McpClient ;
2120import io .modelcontextprotocol .client .McpSyncClient ;
22- import io .modelcontextprotocol .client .transport .HttpClientSseClientTransport ;
23- import io .modelcontextprotocol .client .transport .ServerParameters ;
24- import io .modelcontextprotocol .client .transport .StdioClientTransport ;
2521import io .modelcontextprotocol .spec .McpClientTransport ;
2622import io .modelcontextprotocol .spec .McpSchema .ClientCapabilities ;
2723import io .modelcontextprotocol .spec .McpSchema .InitializeResult ;
24+ import java .time .Duration ;
2825import org .slf4j .Logger ;
2926import org .slf4j .LoggerFactory ;
3027
31- import java .time .Duration ;
32- import java .util .Collection ;
33- import java .util .Optional ;
34-
3528/**
3629 * Manages MCP client sessions.
3730 *
3831 * <p>This class provides methods for creating and initializing MCP client sessions, handling
39- * different connection parameters (Stdio and SSE) .
32+ * different connection parameters and transport builders .
4033 */
4134// TODO(b/413489523): Implement this class.
4235public class McpSessionManager {
@@ -53,31 +46,21 @@ public McpSyncClient createSession() {
5346 }
5447
5548 public static McpSyncClient initializeSession (Object connectionParams ) {
56- McpClientTransport transport ;
57- if (connectionParams instanceof ServerParameters serverParameters ) {
58- transport = new StdioClientTransport (serverParameters );
59- } else if (connectionParams instanceof SseServerParameters sseServerParams ) {
60- transport = HttpClientSseClientTransport .builder (sseServerParams .url ())
61- .sseEndpoint ("sse" )
62- .customizeRequest (builder ->
63- Optional .ofNullable (sseServerParams .headers ())
64- .map (ImmutableMap ::entrySet )
65- .stream ().flatMap (Collection ::stream )
66- .forEach (entry ->
67- builder .header (
68- entry .getKey (),
69- Optional .ofNullable (entry .getValue ())
70- .map (Object ::toString )
71- .orElse ("" )
72- )
73- )
74- )
75- .build ();
76- } else {
77- throw new IllegalArgumentException (
78- "Connection parameters must be either ServerParameters or SseServerParameters, but got "
79- + connectionParams .getClass ().getName ());
80- }
49+ McpClientTransport transport = new DefaultMcpTransportBuilder ().build (connectionParams );
50+ McpSyncClient client =
51+ McpClient .sync (transport )
52+ .requestTimeout (Duration .ofSeconds (10 ))
53+ .capabilities (ClientCapabilities .builder ().build ())
54+ .build ();
55+ InitializeResult initResult = client .initialize ();
56+ logger .debug ("Initialize Client Result: {}" , initResult );
57+ return client ;
58+ }
59+
60+ public static McpSyncClient initializeSession (
61+ Object connectionParams , McpTransportBuilder transportBuilder ) {
62+ McpClientTransport transport = transportBuilder .build (connectionParams );
63+
8164 McpSyncClient client =
8265 McpClient .sync (transport )
8366 .requestTimeout (Duration .ofSeconds (10 ))
0 commit comments