diff --git a/core/src/main/java/com/google/adk/tools/mcp/ConversionUtils.java b/core/src/main/java/com/google/adk/tools/mcp/ConversionUtils.java index e0f9eb1ff..8ad7d1b46 100644 --- a/core/src/main/java/com/google/adk/tools/mcp/ConversionUtils.java +++ b/core/src/main/java/com/google/adk/tools/mcp/ConversionUtils.java @@ -19,19 +19,26 @@ import com.google.adk.tools.BaseTool; import com.google.genai.types.FunctionDeclaration; import com.google.genai.types.Schema; +import io.modelcontextprotocol.json.McpJsonMapper; import io.modelcontextprotocol.spec.McpSchema; import java.util.Optional; /** Utility class for converting between different representations of MCP tools. */ public final class ConversionUtils { + private static final McpJsonMapper jsonMapper = McpJsonMapper.getDefault(); + public McpSchema.Tool adkToMcpToolType(BaseTool tool) { Optional toolDeclaration = tool.declaration(); if (toolDeclaration.isEmpty()) { - return new McpSchema.Tool(tool.name(), tool.description(), ""); + return McpSchema.Tool.builder().name(tool.name()).description(tool.description()).build(); } Schema geminiSchema = toolDeclaration.get().parameters().get(); - return new McpSchema.Tool(tool.name(), tool.description(), geminiSchema.toJson()); + return McpSchema.Tool.builder() + .name(tool.name()) + .description(tool.description()) + .inputSchema(jsonMapper, geminiSchema.toJson()) + .build(); } private ConversionUtils() {} diff --git a/core/src/main/java/com/google/adk/tools/mcp/DefaultMcpTransportBuilder.java b/core/src/main/java/com/google/adk/tools/mcp/DefaultMcpTransportBuilder.java index 3e3e4c157..b82ebae84 100644 --- a/core/src/main/java/com/google/adk/tools/mcp/DefaultMcpTransportBuilder.java +++ b/core/src/main/java/com/google/adk/tools/mcp/DefaultMcpTransportBuilder.java @@ -5,6 +5,7 @@ import io.modelcontextprotocol.client.transport.HttpClientStreamableHttpTransport; import io.modelcontextprotocol.client.transport.ServerParameters; import io.modelcontextprotocol.client.transport.StdioClientTransport; +import io.modelcontextprotocol.json.McpJsonMapper; import io.modelcontextprotocol.spec.McpClientTransport; import java.util.Collection; import java.util.Optional; @@ -17,10 +18,12 @@ */ public class DefaultMcpTransportBuilder implements McpTransportBuilder { + private static final McpJsonMapper jsonMapper = McpJsonMapper.getDefault(); + @Override public McpClientTransport build(Object connectionParams) { if (connectionParams instanceof ServerParameters serverParameters) { - return new StdioClientTransport(serverParameters); + return new StdioClientTransport(serverParameters, jsonMapper); } else if (connectionParams instanceof SseServerParameters sseServerParams) { return HttpClientSseClientTransport.builder(sseServerParams.url()) .sseEndpoint( @@ -42,8 +45,9 @@ public McpClientTransport build(Object connectionParams) { } else if (connectionParams instanceof StreamableHttpServerParameters streamableParams) { return HttpClientStreamableHttpTransport.builder(streamableParams.url()) .connectTimeout(streamableParams.timeout()) + .jsonMapper(jsonMapper) .asyncHttpRequestCustomizer( - (builder, method, uri, body) -> { + (builder, method, uri, body, context) -> { streamableParams.headers().forEach((key, value) -> builder.header(key, value)); return Mono.just(builder); }) diff --git a/core/src/test/java/com/google/adk/tools/mcp/McpToolsetTest.java b/core/src/test/java/com/google/adk/tools/mcp/McpToolsetTest.java index 7a780784a..6da5844cb 100644 --- a/core/src/test/java/com/google/adk/tools/mcp/McpToolsetTest.java +++ b/core/src/test/java/com/google/adk/tools/mcp/McpToolsetTest.java @@ -31,6 +31,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import io.modelcontextprotocol.client.McpSyncClient; +import io.modelcontextprotocol.json.McpJsonMapper; import io.modelcontextprotocol.spec.McpSchema; import java.util.List; import java.util.Optional; @@ -50,6 +51,8 @@ public class McpToolsetTest { @Mock private McpSyncClient mockMcpSyncClient; @Mock private ReadonlyContext mockReadonlyContext; + private static final McpJsonMapper jsonMapper = McpJsonMapper.getDefault(); + @Test public void testMcpToolsetConfig_withStdioServerParams_parsesCorrectly() { McpToolsetConfig mcpConfig = new McpToolsetConfig(); @@ -266,11 +269,23 @@ public void testFromConfig_emptyToolFilter_createsToolset() throws Configuration public void getTools_withToolFilter_returnsFilteredTools() { ImmutableList toolFilter = ImmutableList.of("tool1", "tool3"); McpSchema.Tool mockTool1 = - McpSchema.Tool.builder().name("tool1").description("desc1").inputSchema("{}").build(); + McpSchema.Tool.builder() + .name("tool1") + .description("desc1") + .inputSchema(jsonMapper, "{}") + .build(); McpSchema.Tool mockTool2 = - McpSchema.Tool.builder().name("tool2").description("desc2").inputSchema("{}").build(); + McpSchema.Tool.builder() + .name("tool2") + .description("desc2") + .inputSchema(jsonMapper, "{}") + .build(); McpSchema.Tool mockTool3 = - McpSchema.Tool.builder().name("tool3").description("desc3").inputSchema("{}").build(); + McpSchema.Tool.builder() + .name("tool3") + .description("desc3") + .inputSchema(jsonMapper, "{}") + .build(); McpSchema.ListToolsResult mockResult = new McpSchema.ListToolsResult(ImmutableList.of(mockTool1, mockTool2, mockTool3), null); diff --git a/core/src/test/java/com/google/adk/tools/mcp/StdioServerParametersTest.java b/core/src/test/java/com/google/adk/tools/mcp/StdioServerParametersTest.java index ef50ccb02..166665309 100644 --- a/core/src/test/java/com/google/adk/tools/mcp/StdioServerParametersTest.java +++ b/core/src/test/java/com/google/adk/tools/mcp/StdioServerParametersTest.java @@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableMap; import io.modelcontextprotocol.client.transport.ServerParameters; import io.modelcontextprotocol.client.transport.StdioClientTransport; +import io.modelcontextprotocol.json.McpJsonMapper; import java.lang.reflect.Field; import java.util.List; import java.util.Map; @@ -33,6 +34,8 @@ @RunWith(JUnit4.class) public final class StdioServerParametersTest { + private static final McpJsonMapper jsonMapper = McpJsonMapper.getDefault(); + @Test public void toServerParameters_withNullArgs_createsValidServerParameters() { StdioServerParameters params = @@ -41,7 +44,7 @@ public void toServerParameters_withNullArgs_createsValidServerParameters() { ServerParameters serverParams = params.toServerParameters(); assertThat(serverParams).isNotNull(); - StdioClientTransport transport = new StdioClientTransport(serverParams); + StdioClientTransport transport = new StdioClientTransport(serverParams, jsonMapper); assertThat(transport).isNotNull(); } @@ -53,7 +56,7 @@ public void toServerParameters_withNullEnv_createsValidServerParameters() { ServerParameters serverParams = params.toServerParameters(); assertThat(serverParams).isNotNull(); - StdioClientTransport transport = new StdioClientTransport(serverParams); + StdioClientTransport transport = new StdioClientTransport(serverParams, jsonMapper); assertThat(transport).isNotNull(); } @@ -66,7 +69,7 @@ public void toServerParameters_withNonNullArgs_createsValidServerParameters() { ServerParameters serverParams = params.toServerParameters(); assertThat(serverParams).isNotNull(); - StdioClientTransport transport = new StdioClientTransport(serverParams); + StdioClientTransport transport = new StdioClientTransport(serverParams, jsonMapper); assertThat(transport).isNotNull(); } @@ -79,7 +82,7 @@ public void toServerParameters_withNonNullEnv_createsValidServerParameters() { ServerParameters serverParams = params.toServerParameters(); assertThat(serverParams).isNotNull(); - StdioClientTransport transport = new StdioClientTransport(serverParams); + StdioClientTransport transport = new StdioClientTransport(serverParams, jsonMapper); assertThat(transport).isNotNull(); } @@ -94,7 +97,7 @@ public void toServerParameters_withAllFieldsSet_createsValidServerParameters() { ServerParameters serverParams = params.toServerParameters(); assertThat(serverParams).isNotNull(); - StdioClientTransport transport = new StdioClientTransport(serverParams); + StdioClientTransport transport = new StdioClientTransport(serverParams, jsonMapper); assertThat(transport).isNotNull(); } @@ -105,7 +108,7 @@ public void toServerParameters_withOnlyCommand_createsValidServerParameters() { ServerParameters serverParams = params.toServerParameters(); assertThat(serverParams).isNotNull(); - StdioClientTransport transport = new StdioClientTransport(serverParams); + StdioClientTransport transport = new StdioClientTransport(serverParams, jsonMapper); assertThat(transport).isNotNull(); } diff --git a/pom.xml b/pom.xml index 0bac51b2a..09d3f3edf 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ 1.11.0 3.4.1 1.49.0 - 0.11.3 + 0.14.0 2.38.0 1.8.0 4.32.0