Skip to content

Commit bb2db41

Browse files
google-genai-botcopybara-github
authored andcommitted
feat: support stdio_connection_params in McpToolset config
PiperOrigin-RevId: 845809789
1 parent 464f0b2 commit bb2db41

3 files changed

Lines changed: 83 additions & 15 deletions

File tree

core/src/main/java/com/google/adk/tools/mcp/McpSessionManager.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,19 @@ public static McpSyncClient initializeSession(
6161
Object connectionParams, McpTransportBuilder transportBuilder) {
6262
Duration initializationTimeout = null;
6363
Duration requestTimeout = null;
64-
McpClientTransport transport = transportBuilder.build(connectionParams);
65-
if (connectionParams instanceof SseServerParameters sseServerParams) {
64+
Object transportBuilderParams = connectionParams;
65+
if (connectionParams instanceof StdioConnectionParameters stdioConnectionParameters) {
66+
transportBuilderParams = stdioConnectionParameters.serverParams().toServerParameters();
67+
requestTimeout = stdioConnectionParameters.timeoutDuration();
68+
} else if (connectionParams instanceof SseServerParameters sseServerParams) {
6669
initializationTimeout = sseServerParams.timeout();
6770
requestTimeout = sseServerParams.sseReadTimeout();
6871
} else if (connectionParams instanceof StreamableHttpServerParameters streamableParams) {
6972
initializationTimeout = streamableParams.timeout();
7073
requestTimeout = streamableParams.readTimeout();
7174
}
75+
McpClientTransport transport = transportBuilder.build(transportBuilderParams);
76+
7277
McpSyncClient client =
7378
McpClient.sync(transport)
7479
.initializationTimeout(

core/src/main/java/com/google/adk/tools/mcp/McpToolset.java

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.google.adk.agents.ReadonlyContext;
2525
import com.google.adk.tools.BaseTool;
2626
import com.google.adk.tools.BaseToolset;
27+
import com.google.common.primitives.Booleans;
2728
import io.modelcontextprotocol.client.McpSyncClient;
2829
import io.modelcontextprotocol.client.transport.ServerParameters;
2930
import io.modelcontextprotocol.spec.McpSchema.ListToolsResult;
@@ -285,12 +286,23 @@ public void close() {
285286

286287
/** Configuration class for MCPToolset. */
287288
public static class McpToolsetConfig extends JsonBaseModel {
289+
290+
private StdioConnectionParameters stdioConnectionParams;
291+
288292
private StdioServerParameters stdioServerParams;
289293

290294
private SseServerParameters sseServerParams;
291295

292296
private List<String> toolFilter;
293297

298+
public StdioConnectionParameters stdioConnectionParams() {
299+
return stdioConnectionParams;
300+
}
301+
302+
public void setStdioConnectionParams(StdioConnectionParameters stdioConnectionParams) {
303+
this.stdioConnectionParams = stdioConnectionParams;
304+
}
305+
294306
public StdioServerParameters stdioServerParams() {
295307
return stdioServerParams;
296308
}
@@ -337,23 +349,26 @@ public static McpToolset fromConfig(BaseTool.ToolConfig config, String configAbs
337349
mapper.convertValue(config.args(), McpToolsetConfig.class);
338350

339351
// Validate that exactly one parameter type is set
340-
if ((mcpToolsetConfig.stdioServerParams() != null)
341-
== (mcpToolsetConfig.sseServerParams() != null)) {
352+
if (Booleans.countTrue(
353+
mcpToolsetConfig.stdioServerParams() != null,
354+
mcpToolsetConfig.sseServerParams() != null,
355+
mcpToolsetConfig.stdioConnectionParams() != null)
356+
!= 1) {
342357
throw new ConfigurationException(
343-
"Exactly one of stdioServerParams or sseServerParams must be set for McpToolset");
358+
"Exactly one of stdioConnectionParams, stdioServerParams or sseServerParams must be set"
359+
+ " for McpToolset");
344360
}
345361

346362
// Convert tool filter to Optional<Object>
347-
Optional<Object> toolFilter =
348-
Optional.ofNullable(mcpToolsetConfig.toolFilter()).map(filter -> filter);
349-
350-
// Create McpToolset with appropriate connection parameters
351-
if (mcpToolsetConfig.stdioServerParams() != null) {
352-
return new McpToolset(
353-
mcpToolsetConfig.stdioServerParams().toServerParameters(), mapper, toolFilter);
354-
} else {
355-
return new McpToolset(mcpToolsetConfig.sseServerParams(), mapper, toolFilter);
356-
}
363+
Optional<Object> toolFilter = Optional.ofNullable(mcpToolsetConfig.toolFilter());
364+
365+
Object connectionParameters =
366+
Optional.<Object>ofNullable(mcpToolsetConfig.stdioConnectionParams())
367+
.or(() -> Optional.ofNullable(mcpToolsetConfig.sseServerParams()))
368+
.orElse(mcpToolsetConfig.stdioConnectionParams());
369+
370+
// Create McpToolset with McpSessionManager having appropriate connection parameters
371+
return new McpToolset(new McpSessionManager(connectionParameters), mapper, toolFilter);
357372
} catch (IllegalArgumentException e) {
358373
throw new ConfigurationException("Failed to parse McpToolsetConfig from ToolArgsConfig", e);
359374
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.google.adk.tools.mcp;
2+
3+
import com.fasterxml.jackson.annotation.JsonCreator;
4+
import com.fasterxml.jackson.annotation.JsonIgnore;
5+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
6+
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
7+
import com.google.auto.value.AutoValue;
8+
import java.time.Duration;
9+
10+
@AutoValue
11+
@JsonDeserialize(builder = StdioConnectionParameters.Builder.class)
12+
public abstract class StdioConnectionParameters {
13+
14+
private static final long MILLIS_IN_SEC = 1000L;
15+
16+
StdioConnectionParameters() {}
17+
18+
public abstract StdioServerParameters serverParams();
19+
20+
// Timeout in seconds
21+
public abstract float timeout();
22+
23+
@JsonIgnore
24+
public Duration timeoutDuration() {
25+
return Duration.ofMillis((long) (timeout() * MILLIS_IN_SEC));
26+
}
27+
28+
@AutoValue.Builder
29+
@JsonPOJOBuilder(buildMethodName = "build", withPrefix = "")
30+
public abstract static class Builder {
31+
32+
@JsonCreator
33+
public static Builder jacksonBuilder() {
34+
return StdioConnectionParameters.builder();
35+
}
36+
37+
public abstract Builder serverParams(StdioServerParameters serverParams);
38+
39+
public abstract Builder timeout(float timeout);
40+
41+
public abstract StdioConnectionParameters build();
42+
}
43+
44+
public static Builder builder() {
45+
Builder b = new AutoValue_StdioConnectionParameters.Builder();
46+
return b.timeout(5f);
47+
}
48+
}

0 commit comments

Comments
 (0)