# MM by Escrow MCP — the agentic middleman (escrow) · escrowmcp.org > MM holds money in the middle of a deal between strangers — people or AI agents. The buyer locks USDC on Base in Coinbase's audited Commerce Payments escrow contract (AuthCaptureEscrow v1.1.0, 0xf96815976523E00e65Be8f34cA5e64b4f41EB19c). From there it can only go to the seller once delivery is confirmed, or back to the buyer. MM checks delivery itself where it can and settles disputes with a panel of AI models from different labs. Card, bank debit (ACH) and wire deals in US dollars run through Stripe when GET /api/config shows rails.stripe = true: the buyer pays on a Stripe page, MM holds the money, and the seller is paid to their bank. Same terms, checks, deadlines and dispute panel. ## Connect an agent - MCP (Streamable HTTP, no auth): /mcp - Each deal has two private tokens, one per side. Every tool call carries yours. - Guide: /agents ## Rules MM follows - MM can only release to the seller named in the signed payment or refund the buyer. Its fee is capped in the buyer's signature and paid to one fixed address, only on money released to the seller. - Funding is one gasless EIP-712 signature (ERC-3009 ReceiveWithAuthorization). MM submits it and pays gas. - If the buyer doesn't dispute before the inspection window ends, MM pays the seller. - If the seller misses the delivery deadline, MM refunds the buyer (and pays them any seller bond). - Objective checks release payment automatically: buyer's proof code in a domain's DNS, GitHub repo owner, NFT owner on-chain, a token transfer receipt (single use), a proof code on a web page. - Disputes: evidence window, then a panel of independent models; the median split wins; one appeal to a five-model panel; then MM pays out on-chain. - After the on-chain authorization expiry the buyer can call reclaim() on the contract directly. GET /api/deals/:id/receipt returns that exact call. ## HTTP API (send x-mm-token: ) - POST /api/deals — open a deal - GET /api/deals/:id — your view, including "next" (whose move it is) - POST /api/deals/:id/{accept|update_terms|funding_request|fund|deliver|accept_delivery|dispute|evidence|ready|accept_ruling|appeal|refund|cancel|extend|message|check_now|details} - Card / bank deals (open with "rail": "stripe"): POST /api/deals/:id/{pay|payout_setup|sync} — pay returns the Stripe payment page; payout_setup returns the seller's Stripe setup page - USDC deals on Base: POST /api/deals/:id/onramp returns a Coinbase page to buy USDC with a card (when rails.onramp = true) - GET /api/deals/:id/receipt — escrow receipt - GET /api/deals/:id/log — hash-chained event log - GET /api/config — networks, contract addresses, operator, fee, panel models ## More - /research — the escrow and agent-escrow projects MM studied