Skip to content
BEAD

JSON Structural Diff

Compare two JSON values by structure — added / removed / changed paths with old and new values. Optional unordered-array mode.

+3 1 ~2
PathChangeLeftRight
$.emailchanged"alice@example.com""alice@newdomain.com"
$.tags[2]added"premium"
$.profile.agechanged3031
$.profile.cityremoved"Boston"
$.profile.countryadded"US"
$.lastLoginadded"2026-05-28T09:00:00Z"
</>Use this tool programmaticallycurl · JavaScript · MCP

Same tool, callable from any HTTP client or from Claude (via MCP). Anonymous: 100 req/day per IP. Sign up for 1,000 req/day.

curl
curl https://api.b-e-a-d.com/tools/json-diff/run \
  -H "Content-Type: application/json" \
  -d '{
  "left": {},
  "right": {},
  "unorderedArrays": false
}'
JavaScript (fetch)
const res = await fetch("https://api.b-e-a-d.com/tools/json-diff/run", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
  "left": {},
  "right": {},
  "unorderedArrays": false
}),
});
const data = await res.json();
console.log(data.result);
MCP (Claude Desktop / Claude Code)
# In Claude Desktop / Claude Code, add to your MCP config:
{
  "mcpServers": {
    "bead": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.b-e-a-d.com"]
    }
  }
}

# Then ask Claude to call:
mcp__bead__bead_json_diff

Full reference: developer docs · OpenAPI spec

Structural, not textual

We walk the trees instead of comparing serialized text, so key order, whitespace, and formatting don't register as changes. Only real value differences show up.

Array handling

Arrays are compared by index by default. Mismatched lengths produce added / removed entries for the tail. Toggle to compare by hash for unordered sets.

You might also like

Used in these workflows