diff --git a/mcp/common/src/main/java/org/springframework/ai/mcp/AsyncMcpToolCallback.java b/mcp/common/src/main/java/org/springframework/ai/mcp/AsyncMcpToolCallback.java index 95d1b9039..f67b61632 100644 --- a/mcp/common/src/main/java/org/springframework/ai/mcp/AsyncMcpToolCallback.java +++ b/mcp/common/src/main/java/org/springframework/ai/mcp/AsyncMcpToolCallback.java @@ -109,9 +109,12 @@ public class AsyncMcpToolCallback implements ToolCallback { Map arguments = ModelOptionsUtils.jsonToMap(functionInput); // Note that we use the original tool name here, not the adapted one from // getToolDefinition - return this.asyncMcpClient.callTool(new CallToolRequest(this.tool.name(), arguments)) - .map(response -> ModelOptionsUtils.toJsonString(response.content())) - .block(); + return this.asyncMcpClient.callTool(new CallToolRequest(this.tool.name(), arguments)).map(response -> { + if (response.isError() != null && response.isError()) { + throw new IllegalStateException("Error calling tool: " + response.content()); + } + return ModelOptionsUtils.toJsonString(response.content()); + }).block(); } @Override diff --git a/mcp/common/src/main/java/org/springframework/ai/mcp/SyncMcpToolCallback.java b/mcp/common/src/main/java/org/springframework/ai/mcp/SyncMcpToolCallback.java index 1b71e9301..aa51e1f36 100644 --- a/mcp/common/src/main/java/org/springframework/ai/mcp/SyncMcpToolCallback.java +++ b/mcp/common/src/main/java/org/springframework/ai/mcp/SyncMcpToolCallback.java @@ -113,7 +113,7 @@ public class SyncMcpToolCallback implements ToolCallback { // Note that we use the original tool name here, not the adapted one from // getToolDefinition CallToolResult response = this.mcpClient.callTool(new CallToolRequest(this.tool.name(), arguments)); - if (response.isError()) { + if (response.isError() != null && response.isError()) { throw new IllegalStateException("Error calling tool: " + response.content()); } return ModelOptionsUtils.toJsonString(response.content());