# AI Tool-Call Trace Explorer > Paste an agent transcript: see every tool call in order, with errors, timings, retries and loops. Reads an AI agent transcript – OpenAI chat messages with tool_calls, OpenAI Responses function_call items, Anthropic messages with tool_use/tool_result blocks, or generic JSONL events – and rebuilds the ordered timeline of tool calls with (truncated) inputs and outputs, errors, durations, repeated identical calls (retries and loops), per-tool statistics and the slowest calls. Only execution events are analysed; hidden reasoning is never reconstructed. Part of usefulweb.site (https://usefulweb.site/). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://toolcalltraceexplorer.usefulweb.site/ (interactive tool at https://toolcalltraceexplorer.usefulweb.site/tool) - JSON API: POST https://toolcalltraceexplorer.usefulweb.site/api/v1/calculate with a JSON object of inputs (schema: https://toolcalltraceexplorer.usefulweb.site/api/v1/tool) - OpenAPI: https://toolcalltraceexplorer.usefulweb.site/openapi.json - MCP (Streamable HTTP): https://toolcalltraceexplorer.usefulweb.site/mcp - tool `tool_call_trace_explorer` ## Inputs - trace (textarea, required): Transcript or trace - JSON array / {messages:[…]} of chat messages, Responses API items, or JSON Lines events {ts, type, name, input, output, error, duration_ms}. - format (select): Format - maxChars (integer): Truncate inputs/outputs to - loopThreshold (integer): Identical calls that count as a loop ## Method - OpenAI chat: assistant tool_calls are matched to role "tool" messages by tool_call_id (legacy function_call by name). OpenAI Responses: function_call ↔ function_call_output by call_id. Anthropic: tool_use ↔ tool_result by tool_use_id; is_error is respected. - Generic events: start/end pairs are matched by id (or the latest open call of the same tool); single events with input + output/error count as complete calls. Durations come from duration_ms or end − start timestamps. - A result counts as an error when it is flagged (is_error, error field, error/fail event type) or its text starts with error/exception/traceback or mentions an HTTP 4xx/5xx status, a timeout, ENOENT or “permission denied”. - Repeats: calls with the same tool name and canonically identical arguments (key order ignored). ≥ loop threshold → loop; otherwise a repeat after a failed attempt → retry; else duplicate. - Reasoning/thinking blocks are counted but never displayed or reconstructed; only execution events (calls and results) are shown.