Streaming tool-call JSON replayer

Paste saved Claude Messages events as JSONL, a JSON array or SSE. Step through the capture to see when each tool-input object first becomes parseable.

Inspect saved streaming fragments in your browser. No tools are executed.

How it works

The replayer concatenates partial_json strings in arrival order, separately for each block index. It attempts JSON parsing after every fragment and records the first complete object. A block-stop event marks the final input. A max_tokens stop reason identifies possible output-limit truncation.

Use Start, Previous, Next and End to inspect event prefixes. Character counts are JavaScript UTF-16 code units; they are not token counts or byte counts. There is no rounding.

Worked examples

Two fragments make one object

The initial seven-event example has 1 tool call and 2 fragments. {"city": followed by "Paris"} first becomes a complete object at event 4.

Output-limit cutoff

Keep only the first fragment, then add message_delta with stop_reason max_tokens and message_stop. The replay reports 1 call with output-limit truncation / invalid input.

Capture completeness

Missing message_start, message_delta or message_stop events mark an incomplete excerpt. Every content block, including text and thinking, must have a stop. Orphan deltas, duplicate block starts and events after message completion receive findings. Missing content_block_stop remains a finding even when the assembled object parses. Unknown event types are retained as review findings. This tool does not diagnose network buffering or measure latency without timestamps.

Frequently asked questions

Is a JSON parse error during streaming a failure?
Not necessarily. A fragment can end inside a string or property. Final input must be checked after assembly.
Does parseable JSON mean I can execute the tool?
No. Wait for the block to stop, then validate the complete input against the tool schema before deciding whether to execute.
Can I paste a Bedrock binary event stream?
No. Decode the transport into Claude Messages event payloads first. Converse events and base64 wrappers are not supported.
Does it repair invalid JSON?
No. It preserves fragments exactly and distinguishes intermediate parse state from final block status.
What are the local limits?
At most 100,000 characters, 10,000 lines and 1,000 events from one message. These are local safeguards, not provider limits.

Sources

Last reviewed 2026-11-14; next review due by 2026-12-14. The method is written out above so you can check our math.