{"serverId":"mcp-registry/dev.redeal/redeal","tools":[{"name":"compute_commitment_tool","fixed":{"name":"compute_commitment_tool","description":"Compute a commitment string for (input, salt): sha256(JCS(input) ++ salt_bytes), prefixed 'sha256:'. Convenience only — the rule is public and you can compute it yourself.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["input","salt"],"properties":{"salt":{"type":"string","description":"Your hex salt (even length, e.g. 32+ random bytes hex-encoded). Keep it secret until reveal."},"input":{"description":"Your algorithm input (any JSON value).","type":"string"}}}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: input. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":154,"tokensAfter":159},{"name":"create_deal","fixed":{"name":"create_deal","description":"Create a fairness deal. You are party 0 (initiator). Returns a deal id and one invite token per party — give each counterparty their own token. Sealed mode: everyone commits a hash, then reveals; certificate is issued automatically when the deal computes or goes VOID.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["api_key","algorithm","party_labels","commit_deadline","reveal_deadline"],"properties":{"mode":{"type":["string","null"],"description":"\"sealed\" (default, commit/reveal) or \"open\" (single round trip, low stakes)."},"api_key":{"type":"string","description":"Your redeal API key (get one free with create_key — no signup form)."},"algorithm":{"type":"string","description":"Algorithm id from list_algorithms: \"split.v1\" (fixed 1,000-point budget) | \"random.v1\" | \"shapley.v1\" | \"auction.v1\"."},"retention":{"type":["string","null"],"description":"\"standard\" (inputs retained encrypted) or \"purge\" (destroyed 7 days after certification)."},"supersedes":{"type":["string","null"],"description":"Optional: certificate id (c_<16 hex>) this deal's certificate replaces (re-draw after VOID etc.)."},"terms_hash":{"type":["string","null"],"description":"Optional: \"sha256:<hex>\" of the deal's terms (echoed into the certificate; we never see the terms)."},"visibility":{"type":["string","null"],"description":"Optional: \"public\" (default — anyone can fetch the certificate at its id) or \"parties\" (only you and your invite-token holders). Certificates never contain inputs, only the outcome; choose \"parties\" when the outcome itself is sensitive."},"external_ref":{"type":["string","null"],"description":"Optional: your own identifier for this deal, e.g. \"campaign-4821\" (echoed into the certificate)."},"party_labels":{"type":"array","items":true,"description":"One label per party, e.g. [\"alice\", \"bob\"] — or objects {\"label\", \"weight\"?, \"statement_hash\"?} (weight defaults to 1; statement_hash is \"sha256:<hex>\" of a declaration you want bound into the certificate). Party 0 is you (the initiator). Labels go on the public certificate permanently: use nicknames, never real names or emails."},"commit_deadline":{"type":"integer","format":"int64","description":"Commit deadline as unix seconds UTC. Missed → deal EXPIRES (no certificate)."},"idempotency_key":{"type":["string","null"],"description":"Optional: retries with the same key + same arguments replay the original response."},"reveal_deadline":{"type":"integer","format":"int64","description":"Reveal deadline as unix seconds UTC (after commit_deadline). Missed → deal goes VOID and a non-participation certificate names whoever didn't reveal."},"algorithm_params":{"description":"Algorithm-specific params from list_algorithms. split.v1: {\"items\": [...]}; random.v1: {\"drand_round\": N}; shapley.v1: {\"coalition_values\": {...}}; auction.v1: {\"item\": \"...\", \"unit\": \"GBP\", \"reserve\": N}.","type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: algorithm_params. Change to number/boolean/array where that's what you accept.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":835,"tokensAfter":839},{"name":"create_key","fixed":{"name":"create_key","description":"Get a free redeal API key. No signup, no email — this is the entire onboarding. The key is shown once; store it. Use it as api_key in create_deal.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":65,"tokensAfter":65},{"name":"get_certificate","fixed":{"name":"get_certificate","description":"Fetch the signed fairness certificate for a finished deal (state CERTIFIED). Includes the labelled signature (es256 or ed25519) and transparency-log inclusion proof. Verify it with verify_certificate.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["credential","deal_id"],"properties":{"deal_id":{"type":"string","description":"The deal id (d_...)."},"credential":{"type":"string","description":"Your API key (initiator) or any party's invite token for this deal."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":157,"tokensAfter":157},{"name":"get_deal","fixed":{"name":"get_deal","description":"Read a deal's public state: protocol state (OPEN/COMMITTING/REVEALING/CERTIFIED/VOID/EXPIRED), who has committed/revealed, deadlines, result, and certificate_id once issued. Inputs of other parties are never exposed.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["credential","deal_id"],"properties":{"deal_id":{"type":"string","description":"The deal id (d_...)."},"credential":{"type":"string","description":"Your API key (initiator) or any party's invite token for this deal."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":159,"tokensAfter":159},{"name":"get_entropy","fixed":{"name":"get_entropy","description":"Finish a random.v1 deal once every party has revealed: redeal fetches the deal's pre-declared drand round from the public League of Entropy beacon (fixed at creation, publicly cross-checkable), computes the draw, and issues the certificate. Call this after the last reveal_input; the deal rests in REVEALING until you do. Idempotent — safe to retry.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["credential","deal_id"],"properties":{"deal_id":{"type":"string","description":"The deal id (d_...)."},"credential":{"type":"string","description":"Your API key (initiator) or any party's invite token for this deal."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":197,"tokensAfter":197},{"name":"get_public_certificate","fixed":{"name":"get_public_certificate","description":"Fetch a certificate's full JSON (outcome included) by id. Works for public deals (the default). Parties-only deals and unknown ids both return NOT_FOUND. To re-verify the computation itself, use verify_certificate (checks) or the CLI re-runner with the parties' inputs.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["cert_id"],"properties":{"cert_id":{"type":"string","description":"The certificate id (c_...). Verification is free and always will be."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":156,"tokensAfter":156},{"name":"list_algorithms","fixed":{"name":"list_algorithms","description":"List redeal's algorithms (split.v1 fixed-budget fair division, random.v1 verifiable random selection, shapley.v1 Shapley shares, auction.v1 sealed-bid second-price auctions) with their input contracts and the published test vectors (served inline — the same fixtures the engine test suite runs). Read this before creating a deal.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":117,"tokensAfter":117},{"name":"reveal_input","fixed":{"name":"reveal_input","description":"Reveal your committed input. It must hash to your earlier commitment. When the last party reveals, the deal computes and the fairness certificate is issued automatically — fetch it with get_certificate.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["invite_token","deal_id","input"],"properties":{"salt":{"type":["string","null"],"description":"Your hex salt from commitment time. Omit (or empty) for open-mode deals."},"input":{"description":"Your algorithm input exactly as committed (any JSON value). split.v1: {\"valuations\": {...}} — your valuations must sum to exactly 1000; random.v1: {\"nonce\": \"<hex>\"}; shapley.v1: {\"accept\": true|false}; auction.v1: {\"bid\": <integer>}.","type":"string"},"deal_id":{"type":"string","description":"The deal id (d_...)."},"invite_token":{"type":"string","description":"The invite token for YOUR party, from create_deal's response."},"idempotency_key":{"type":["string","null"],"description":"Optional: retries with the same key + same arguments replay the original response."}}}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: input. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":308,"tokensAfter":312},{"name":"validate_input","fixed":{"name":"validate_input","description":"Validate your algorithm input against the deal's contract BEFORE you commit. A commitment binds the exact input bytes — a contract-violating input (e.g. split.v1 valuations not summing to exactly 1000) can never be corrected afterwards and the deal will VOID at the reveal deadline. Always validate first, then compute_commitment_tool, then commit_input. Read-only: nothing is stored or changed.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["invite_token","deal_id","input"],"properties":{"input":{"description":"The algorithm input you plan to commit (e.g. {\"valuations\": {\"<item_id>\": <points>}} for split.v1 — every party's valuations must sum to exactly 1000). Validated against the deal's algorithm and declared params; nothing is stored.","type":"string"},"deal_id":{"type":"string","description":"The deal id (d_...)."},"invite_token":{"type":"string","description":"The invite token for YOUR party, from create_deal's response."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: input. Change to number/boolean/array where that's what you accept.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":285,"tokensAfter":289}],"toolsChanged":10,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}