The same hash diffing that runs in your browser on the homepage is available to coding agents, as a local MCP server or an HTTP API. When an agent is debugging a failing Rails test, comparing two 40-key nested hashes by reading them wastes context and invites mistakes. These tools do the comparison with a real parser and return only what changed.
The rubyhash-mcp package exposes two tools to any MCP
client: ruby_hash_diff and ruby_to_json.
Everything runs on your machine and nothing is uploaded, the same
privacy promise as the site itself.
claude mcp add rubyhash -- npx -y rubyhash-mcp Or in any MCP client configuration:
{
"mcpServers": {
"rubyhash": { "command": "npx", "args": ["-y", "rubyhash-mcp"] }
}
} For agents that cannot run a local server. POST two Ruby hash literals, or raw failing test output, and get a structured diff report back. The API is deterministic, no LLM involved, and request bodies are not retained. Unlike the browser tool and the MCP server, an HTTP call does leave your machine, so prefer the MCP server for sensitive data.
Single calls are free within a daily fair-use quota (about 100 per IP per day). Past the quota, and for the batch endpoint built for CI pipelines, the same calls are payable per request via x402 in USDC on Base. No account, no API key, either way.
POST /diff with {expected, actual} or {raw}, free tier then $0.005POST /convert with {hash, sort_keys}, free tier then $0.002POST /batch with {pairs: [...]}, up to 100 diffs per call, $0.02curl -X POST https://dcwupdtclrmraxmqblou.supabase.co/functions/v1/rubyhash-api/diff \
-H "Content-Type: application/json" \
-d '{"expected": "{\"role\"=>\"admin\"}", "actual": "{\"role\"=>\"editor\"}"}' {
"equal": false,
"summary": "1 changed, 0 added, 0 removed, 1 type change",
"changed": [
{
"path": "seats",
"before": 3, "after": 3,
"beforeType": "Integer", "afterType": "Float",
"typeChanged": true
}
]
} Symbol keys and string keys are treated as different keys, because in Ruby they are. Type changes are flagged explicitly since they are the differences most likely to cause a downstream bug and the easiest to miss by eye.
If you landed here as a person, the interactive version is on the homepage, and the guide to debugging Ruby hash diffs covers the whole topic in depth.