Skip to content

Commit a6a45dc

Browse files
committed
fix: Improved compatibility with empty ToolMetadata and enhanced some unit tests.
Signed-off-by: Sun Yuhan <[email protected]>
1 parent 0363d6d commit a6a45dc

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

mcp/common/src/main/java/org/springframework/ai/mcp/McpToolUtils.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import io.modelcontextprotocol.server.McpSyncServerExchange;
3131
import io.modelcontextprotocol.spec.McpSchema;
3232
import io.modelcontextprotocol.spec.McpSchema.Role;
33+
import org.springframework.ai.tool.metadata.ToolMetadata;
3334
import reactor.core.publisher.Mono;
3435
import reactor.core.scheduler.Schedulers;
3536

@@ -167,8 +168,11 @@ public static McpServerFeatures.SyncToolSpecification toSyncToolSpecification(To
167168
*/
168169
public static McpServerFeatures.SyncToolSpecification toSyncToolSpecification(ToolCallback toolCallback,
169170
MimeType mimeType) {
171+
boolean returnDirect = Optional.ofNullable(toolCallback.getToolMetadata())
172+
.map(ToolMetadata::returnDirect)
173+
.orElse(false);
170174
McpSchema.ToolAnnotations toolAnnotations = new McpSchema.ToolAnnotations(null, null, null, null, null,
171-
toolCallback.getToolMetadata().returnDirect());
175+
returnDirect);
172176

173177
var tool = new McpSchema.Tool(toolCallback.getToolDefinition().name(),
174178
toolCallback.getToolDefinition().description(), toolCallback.getToolDefinition().inputSchema(),

mcp/common/src/test/java/org/springframework/ai/mcp/ToolUtilsTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import io.modelcontextprotocol.spec.McpSchema.TextContent;
3333
import io.modelcontextprotocol.spec.McpSchema.Tool;
3434
import org.junit.jupiter.api.Test;
35+
import org.springframework.ai.tool.metadata.ToolMetadata;
3536
import reactor.test.StepVerifier;
3637

3738
import org.springframework.ai.tool.ToolCallback;
@@ -199,8 +200,10 @@ private ToolCallback createMockToolCallback(String name, String result) {
199200
.description("Test tool")
200201
.inputSchema("{}")
201202
.build();
203+
ToolMetadata metadata = ToolMetadata.builder().build();
202204
when(callback.getToolDefinition()).thenReturn(definition);
203205
when(callback.call(anyString(), any())).thenReturn(result);
206+
when(callback.getToolMetadata()).thenReturn(metadata);
204207
return callback;
205208
}
206209

@@ -211,8 +214,10 @@ private ToolCallback createMockToolCallback(String name, RuntimeException error)
211214
.description("Test tool")
212215
.inputSchema("{}")
213216
.build();
217+
ToolMetadata metadata = ToolMetadata.builder().build();
214218
when(callback.getToolDefinition()).thenReturn(definition);
215219
when(callback.call(anyString(), any())).thenThrow(error);
220+
when(callback.getToolMetadata()).thenReturn(metadata);
216221
return callback;
217222
}
218223

0 commit comments

Comments
 (0)