diff --git a/llama-index-core/llama_index/core/agent/react/step.py b/llama-index-core/llama_index/core/agent/react/step.py
index 70187062fcc73e792253df21fb7f6530d549a5f5..7253d19b53a4d17fdfefb4a54f331e14562b2b26 100644
--- a/llama-index-core/llama_index/core/agent/react/step.py
+++ b/llama-index-core/llama_index/core/agent/react/step.py
@@ -240,7 +240,15 @@ class ReActAgentWorker(BaseAgentWorker):
                 EventPayload.TOOL: tool.metadata,
             },
         ) as event:
-            tool_output = tool.call(**reasoning_step.action_input)
+            try:
+                tool_output = tool.call(**reasoning_step.action_input)
+            except Exception as e:
+                tool_output = ToolOutput(
+                    content=f"Error: {e!s}",
+                    tool_name=tool.metadata.name,
+                    raw_input={"kwargs": reasoning_step.action_input},
+                    raw_output=e,
+                )
             event.on_end(payload={EventPayload.FUNCTION_OUTPUT: str(tool_output)})
 
         task.extra_state["sources"].append(tool_output)
@@ -276,7 +284,15 @@ class ReActAgentWorker(BaseAgentWorker):
                 EventPayload.TOOL: tool.metadata,
             },
         ) as event:
-            tool_output = await tool.acall(**reasoning_step.action_input)
+            try:
+                tool_output = await tool.acall(**reasoning_step.action_input)
+            except Exception as e:
+                tool_output = ToolOutput(
+                    content=f"Error: {e!s}",
+                    tool_name=tool.metadata.name,
+                    raw_input={"kwargs": reasoning_step.action_input},
+                    raw_output=e,
+                )
             event.on_end(payload={EventPayload.FUNCTION_OUTPUT: str(tool_output)})
 
         task.extra_state["sources"].append(tool_output)