Skip to content

Commit aefdb06

Browse files
committed
fix: Resolve NPE when McpTool description is null
1 parent 4225b07 commit aefdb06

2 files changed

Lines changed: 18 additions & 1 deletion

File tree

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.fasterxml.jackson.databind.ObjectMapper;
2222
import com.google.adk.tools.BaseTool;
2323
import com.google.adk.tools.mcp.McpToolException.McpToolDeclarationException;
24+
import com.google.common.base.Strings;
2425
import com.google.common.collect.ImmutableMap;
2526
import com.google.genai.types.FunctionDeclaration;
2627
import io.modelcontextprotocol.spec.McpSchema.CallToolResult;
@@ -52,7 +53,7 @@ protected AbstractMcpTool(
5253
Tool mcpTool, T mcpSession, McpSessionManager mcpSessionManager, ObjectMapper objectMapper) {
5354
super(
5455
mcpTool == null ? "" : mcpTool.name(),
55-
mcpTool == null ? "" : (mcpTool.description().isEmpty() ? "" : mcpTool.description()));
56+
mcpTool == null ? "" : (Strings.nullToEmpty(mcpTool.description())));
5657

5758
if (mcpTool == null) {
5859
throw new IllegalArgumentException("mcpTool cannot be null");

core/src/test/java/com/google/adk/tools/mcp/AbstractMcpToolTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@
1717
package com.google.adk.tools.mcp;
1818

1919
import static com.google.common.truth.Truth.assertThat;
20+
import static org.junit.Assert.assertEquals;
21+
import static org.mockito.Mockito.mock;
2022

2123
import com.fasterxml.jackson.databind.ObjectMapper;
2224
import com.google.common.collect.ImmutableList;
25+
import io.modelcontextprotocol.client.McpSyncClient;
26+
import io.modelcontextprotocol.spec.McpSchema;
2327
import io.modelcontextprotocol.spec.McpSchema.CallToolResult;
2428
import io.modelcontextprotocol.spec.McpSchema.TextContent;
2529
import java.util.List;
@@ -56,4 +60,16 @@ public void testWrapCallResult_success() {
5660
Map<?, ?> contentItem = (Map<?, ?>) content.get(0);
5761
assertThat(contentItem).containsEntry("text", "success");
5862
}
63+
64+
@Test
65+
public void instantiateWithToolBuilder_nullDescription_succeeds() {
66+
McpSyncClient sessionMock = mock(McpSyncClient.class);
67+
McpSessionManager managerMock = mock(McpSessionManager.class);
68+
McpSchema.Tool schemaTool = McpSchema.Tool.builder().name("realTool").build();
69+
70+
McpTool tool = new McpTool(schemaTool, sessionMock, managerMock, objectMapper);
71+
72+
assertEquals("", tool.description());
73+
assertEquals("realTool", tool.name());
74+
}
5975
}

0 commit comments

Comments
 (0)