{"openapi":"3.1.0","info":{"title":"entity-resolve","version":"0.1.0","description":"Fuzzy-dedupe a list of records into clusters of likely-duplicate entities. Blocks by normalized token prefix, scores with Jaro-Winkler + token-set matching (exact on email/phone), unions matches above threshold, and returns a merged canonical record per cluster with a confidence score. Deterministic, no LLM calls.","x-guidance":"Call `resolve` with `records`: an array of up to 10,000 arbitrary JSON objects (total payload ≤1MB) you want deduplicated. Optionally set `options.threshold` (0..1 similarity cutoff, default 0.82 — lower finds more matches at the cost of false positives) and `options.keys` (which field names to compare; defaults to every string field seen across the input). Returns `clusters` — groups of input indices judged to be the same entity, each with a merged canonical record and a confidence score — and `skipped`, records that couldn't be compared with a reason. Deterministic and side-effect-free: safe to retry on the same input.","contact":{"email":"jeff@fosterinstruments.com"}},"servers":[{"url":"https://entity-resolve.x402supply.com"}],"paths":{"/mcp":{"post":{"operationId":"entity-resolve_call","summary":"Call entity-resolve via MCP tools/call","tags":["entity-resolve"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","id","method","params"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","number"]},"method":{"const":"tools/call"},"params":{"type":"object","required":["name","arguments"],"properties":{"name":{"const":"resolve"},"arguments":{"type":"object","properties":{"records":{"type":"array","items":{},"minItems":1,"maxItems":10000},"options":{"type":"object","properties":{"threshold":{"type":"number","minimum":0,"maximum":1,"default":0.82},"keys":{"type":"array","items":{"type":"string"},"minItems":1}},"additionalProperties":false}},"required":["records"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}}}}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object","description":"JSON-RPC 2.0 response envelope. `result.content[0].text` is a JSON-encoded string matching the schema in `x-mcp-result-schema`.","properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","number"]},"result":{"type":"object","properties":{"content":{"type":"array","items":{"type":"object","properties":{"type":{"const":"text"},"text":{"type":"string"}}}}}}},"x-mcp-result-schema":{"type":"object","required":["clusters","skipped"],"properties":{"clusters":{"type":"array","items":{"type":"object","required":["members","canonical","confidence"],"properties":{"members":{"type":"array","items":{"type":"integer"},"description":"Indices into the input `records` array"},"canonical":{"type":"object","description":"Merged canonical record for the cluster"},"confidence":{"type":"number","minimum":0,"maximum":1}}}},"skipped":{"type":"array","items":{"type":"object","required":["index","reason"],"properties":{"index":{"type":"integer"},"reason":{"type":"string"}}}}}}}}}},"402":{"description":"Payment Required","content":{"application/json":{"schema":{"type":"object","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"accepts":{"type":"array"}}}}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"protocols":[{"x402":{}}]}}},"/tools/resolve":{"post":{"operationId":"entity-resolve_resolve_http","summary":"Fuzzy-dedupe a list of records into clusters of likely-duplicate entities. Blocks by normalized token prefix, scores with Jaro-Winkler + token-set matching (exact on email/phone), unions matches above threshold, and returns a merged canonical record per cluster with a confidence score. Deterministic, no LLM calls.","tags":["entity-resolve"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{},"minItems":1,"maxItems":10000},"options":{"type":"object","properties":{"threshold":{"type":"number","minimum":0,"maximum":1,"default":0.82},"keys":{"type":"array","items":{"type":"string"},"minItems":1}},"additionalProperties":false}},"required":["records"],"additionalProperties":false},"example":{"records":[{"name":"Acme Corp","email":"info@acme.com"},{"name":"ACME Corporation","email":"info@acme.com"},{"name":"Globex LLC","email":"hello@globex.com"}]}}}},"responses":{"200":{"description":"Tool result (plain JSON, not MCP-wrapped)","content":{"application/json":{"schema":{"type":"object","required":["clusters","skipped"],"properties":{"clusters":{"type":"array","items":{"type":"object","required":["members","canonical","confidence"],"properties":{"members":{"type":"array","items":{"type":"integer"},"description":"Indices into the input `records` array"},"canonical":{"type":"object","description":"Merged canonical record for the cluster"},"confidence":{"type":"number","minimum":0,"maximum":1}}}},"skipped":{"type":"array","items":{"type":"object","required":["index","reason"],"properties":{"index":{"type":"integer"},"reason":{"type":"string"}}}}}},"example":{"clusters":[{"members":[0,1],"canonical":{"name":"ACME Corporation","email":"info@acme.com"},"confidence":0.971},{"members":[2],"canonical":{"name":"Globex LLC","email":"hello@globex.com"},"confidence":1}],"skipped":[]}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}}}}}},"402":{"description":"Payment Required","content":{"application/json":{"schema":{"type":"object","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"accepts":{"type":"array"}}}}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"protocols":[{"x402":{}}]}}}}}