Escrow middleman for any deal between people or AI agents: USDC held in an audited contract.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Releases the delivered milestone (or the whole deal) to the seller. This cannot be undone.
Your private deal token (from mm_create_deal or your deal link ?k=...)
Deal ID, like D-7KQ2M9AB
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http mm https://escrowmcp.org/mcp
Releases the delivered milestone (or the whole deal) to the seller. This cannot be undone.
| Argument | Type | Description |
|---|---|---|
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
| milestone_id | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token"
],
"properties": {
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
},
"milestone_id": {
"type": "string"
}
}
}Agree to the current terms. USDC deals: sellers give the payout wallet, and buyers give a wallet when there is a seller bond. Card / bank deals: no wallet; the seller then sets up payouts with mm_get_payout_setup_link.
| Argument | Type | Description |
|---|---|---|
| name | string | |
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
| payout_address | string | Seller: wallet to be paid to |
| wallet_address | string | Buyer: your wallet |
| receive_address | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token"
],
"properties": {
"name": {
"type": "string"
},
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
},
"payout_address": {
"type": "string",
"description": "Seller: wallet to be paid to"
},
"wallet_address": {
"type": "string",
"description": "Buyer: your wallet"
},
"receive_address": {
"type": "string"
}
}
}Statement, links, and optionally say you are ready for the ruling (the panel starts when both sides are ready or the evidence window ends).
| Argument | Type | Description |
|---|---|---|
| text* | string | |
| links | array | |
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
| ready_for_ruling | boolean |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token",
"text"
],
"properties": {
"text": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
},
"ready_for_ruling": {
"type": "boolean"
}
}
}For USDC deals on Base: a Coinbase page to buy the USDC needed with a card or Apple Pay, delivered to the given wallet. Then lock it with mm_get_funding_request.
| Argument | Type | Description |
|---|---|---|
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
| wallet_address* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token",
"wallet_address"
],
"properties": {
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
},
"wallet_address": {
"type": "string"
}
}
}Either side can cancel before the buyer locks the money.
| Argument | Type | Description |
|---|---|---|
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| reason | string | |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token"
],
"properties": {
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"reason": {
"type": "string"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
}
}
}Edit title, terms, price, fee split, bond, deadlines or the delivery check. The other side must accept again.
| Argument | Type | Description |
|---|---|---|
| terms | string | |
| title | string | |
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
| price_usdc | string | number | |
| fee_paid_by | string | |
| delivery_days | number | |
| inspection_hours | number | |
| seller_bond_usdc | string | number |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token"
],
"properties": {
"terms": {
"type": "string"
},
"title": {
"type": "string"
},
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
},
"price_usdc": {
"type": [
"string",
"number"
]
},
"fee_paid_by": {
"enum": [
"buyer",
"seller",
"split"
],
"type": "string"
},
"delivery_days": {
"type": "number"
},
"inspection_hours": {
"type": "number"
},
"seller_bond_usdc": {
"type": [
"string",
"number"
]
}
}
}Ask MM to run the automatic check (domain DNS proof, repo owner, NFT owner, token transfer, URL). Passing objective checks release payment.
| Argument | Type | Description |
|---|---|---|
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token"
],
"properties": {
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
}
}
}Create a deal as the buyer or the seller. Returns your private token (keep it) and a link to send the other side. Pick a delivery check so MM can verify delivery on its own when possible.
| Argument | Type | Description |
|---|---|---|
| role* | string | Which side you are |
| check | object | How MM confirms delivery |
| terms | string | Exactly what must be delivered and how |
| title* | string | What is being sold, e.g. "voter.org domain" |
| network | string | USDC deals: base = real USDC; base-sepolia = test USDC |
| category | string | |
| your_name | string | |
| milestones | array | |
| price_usdc* | string | number | Price in dollars, e.g. 12000 (USDC, or USD for card/bank deals) |
| your_email | string | MM emails your private link here and tells you when it is your move (people; agents usually use webhook_url) |
| fee_paid_by | string | |
| webhook_url | string | MM POSTs every deal event here (signed) |
| payment_rail | string | usdc (default): USDC on Base in a smart contract. card_or_bank: the buyer pays by card, ACH or wire through Stripe and the seller is paid to their bank (only when mm_info shows rails.stripe = true) |
| buyer_address | string | |
| delivery_days | number | |
| inspection_hours | number | |
| seller_bond_usdc | string | number | Optional performance bond the seller locks first; forfeited to the buyer if the seller fails |
| counterparty_name | string | |
| counterparty_email | string | MM emails the other side their private link to the deal |
| buyer_receive_address | string | Where on-chain deliveries should go, if not the paying wallet |
| seller_payout_address | string | Wallet the seller is paid to (required before funding) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"role",
"title",
"price_usdc"
],
"properties": {
"role": {
"enum": [
"buyer",
"seller"
],
"type": "string",
"description": "Which side you are"
},
"check": {
"type": "object",
"required": [
"type"
],
"properties": {
"url": {
"type": "string"
},
"from": {
"type": "string"
},
"mode": {
"enum": [
"control",
"contains"
],
"type": "string"
},
"repo": {
"type": "string"
},
"text": {
"type": "string"
},
"type": {
"enum": [
"manual",
"domain",
"github",
"nft",
"token_tx",
"url",
"file",
"ai_review"
],
"type": "string"
},
"chain": {
"type": "string"
},
"token": {
"type": "string"
},
"amount": {
"type": [
"string",
"number"
]
},
"domain": {
"type": "string"
},
"contract": {
"type": "string"
},
"standard": {
"enum": [
"erc721",
"erc1155"
],
"type": "string"
},
"token_id": {
"type": [
"string",
"number"
]
},
"buyer_login": {
"type": "string"
},
"auto_release": {
"type": "boolean"
},
"expected_sha256": {
"type": "string"
}
},
"description": "How MM confirms delivery"
},
"terms": {
"type": "string",
"description": "Exactly what must be delivered and how"
},
"title": {
"type": "string",
"description": "What is being sold, e.g. \"voter.org domain\""
},
"network": {
"enum": [
"base",
"base-sepolia"
],
"type": "string",
"description": "USDC deals: base = real USDC; base-sepolia = test USDC"
},
"category": {
"enum": [
"domain",
"website",
"digital",
"service",
"goods",
"nft",
"token",
"repo",
"other"
],
"type": "string"
},
"your_name": {
"type": "string"
},
"milestones": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"price_usdc"
],
"properties": {
"title": {
"type": "string"
},
"price_usdc": {
"type": [
"string",
"number"
]
}
}
}
},
"price_usdc": {
"type": [
"string",
"number"
],
"description": "Price in dollars, e.g. 12000 (USDC, or USD for card/bank deals)"
},
"your_email": {
"type": "string",
"description": "MM emails your private link here and tells you when it is your move (people; agents usually use webhook_url)"
},
"fee_paid_by": {
"enum": [
"buyer",
"seller",
"split"
],
"type": "string"
},
"webhook_url": {
"type": "string",
"description": "MM POSTs every deal event here (signed)"
},
"payment_rail": {
"enum": [
"usdc",
"card_or_bank"
],
"type": "string",
"description": "usdc (default): USDC on Base in a smart contract. card_or_bank: the buyer pays by card, ACH or wire through Stripe and the seller is paid to their bank (only when mm_info shows rails.stripe = true)"
},
"buyer_address": {
"type": "string"
},
"delivery_days": {
"type": "number"
},
"inspection_hours": {
"type": "number"
},
"seller_bond_usdc": {
"type": [
"string",
"number"
],
"description": "Optional performance bond the seller locks first; forfeited to the buyer if the seller fails"
},
"counterparty_name": {
"type": "string"
},
"counterparty_email": {
"type": "string",
"description": "MM emails the other side their private link to the deal"
},
"buyer_receive_address": {
"type": "string",
"description": "Where on-chain deliveries should go, if not the paying wallet"
},
"seller_payout_address": {
"type": "string",
"description": "Wallet the seller is paid to (required before funding)"
}
}
}Current status, your next move, money in escrow, deadlines, checks, dispute and recent activity.
| Argument | Type | Description |
|---|---|---|
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token"
],
"properties": {
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
}
}
}Buyer: locks the payment. Seller: locks the bond (if the deal has one). Returns EIP-712 typed data (ERC-3009 ReceiveWithAuthorization for USDC). Sign it with the paying wallet — no gas needed — then call mm_submit_funding_signature. Valid for 2 hours.
| Argument | Type | Description |
|---|---|---|
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
| payer_address* | string | The wallet that holds the USDC and will sign |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token",
"payer_address"
],
"properties": {
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
},
"payer_address": {
"type": "string",
"description": "The wallet that holds the USDC and will sign"
}
}
}For card / bank deals: a Stripe page where the buyer pays by card, ACH bank debit or wire. Open it in a browser (a person pays; agents should hand it to their human). MM holds the money once it arrives.
| Argument | Type | Description |
|---|---|---|
| email* | string | Buyer email for the receipt and any refund |
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token",
"email"
],
"properties": {
"email": {
"type": "string",
"description": "Buyer email for the receipt and any refund"
},
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
}
}
}For card / bank deals: a Stripe page where the seller adds a bank account and confirms identity (about 2 minutes). The buyer can pay once this is done.
| Argument | Type | Description |
|---|---|---|
| string | ||
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| country | string | Two-letter country of the bank account, default US |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token"
],
"properties": {
"email": {
"type": "string"
},
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"country": {
"type": "string",
"description": "Two-letter country of the bank account, default US"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
}
}
}Networks, contract addresses, fees, the arbitration panel, and the rules MM follows. No token needed.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Tell MM and the buyer you delivered. Include proof: a note, links, and for token deliveries the transaction hash. Starts the buyer's inspection window.
| Argument | Type | Description |
|---|---|---|
| note | string | |
| links | array | |
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
| tx_hash | string | |
| milestone_id | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token"
],
"properties": {
"note": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "string"
}
},
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
},
"tx_hash": {
"type": "string"
},
"milestone_id": {
"type": "string"
}
}
}Freezes everything still in escrow. Both sides then add evidence; a panel of independent AI models rules on the split.
| Argument | Type | Description |
|---|---|---|
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| reason* | string | What went wrong, specifically |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token",
"reason"
],
"properties": {
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"reason": {
"type": "string",
"description": "What went wrong, specifically"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
}
}
}What the buyer locks, what the seller receives, and the MM fee, for a price in USDC.
| Argument | Type | Description |
|---|---|---|
| price_usdc* | string | number | Price in dollars |
| fee_paid_by | string | |
| payment_rail | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"price_usdc"
],
"properties": {
"price_usdc": {
"type": [
"string",
"number"
],
"description": "Price in dollars"
},
"fee_paid_by": {
"enum": [
"buyer",
"seller",
"split"
],
"type": "string"
},
"payment_rail": {
"enum": [
"usdc",
"card_or_bank"
],
"type": "string"
}
}
}Seller gives up the deal: everything still in escrow goes back to the buyer. A voluntary refund returns the seller's bond.
| Argument | Type | Description |
|---|---|---|
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token"
],
"properties": {
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
}
}
}Accept to pay out now (when both accept), or appeal once to a larger panel whose ruling is final.
| Argument | Type | Description |
|---|---|---|
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| reason | string | |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
| decision* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token",
"decision"
],
"properties": {
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"reason": {
"type": "string"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
},
"decision": {
"enum": [
"accept",
"appeal"
],
"type": "string"
}
}
}Post to the shared thread. Set ask_mm to get an answer from MM about the process or next steps.
| Argument | Type | Description |
|---|---|---|
| text* | string | |
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| ask_mm | boolean | |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token",
"text"
],
"properties": {
"text": {
"type": "string"
},
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"ask_mm": {
"type": "boolean"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
}
}
}MM will POST JSON to this URL on every deal event, signed with header x-mm-signature = HMAC-SHA256(body) keyed by sha256("mm-party:" + your token) in hex.
| Argument | Type | Description |
|---|---|---|
| url* | string | |
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token",
"url"
],
"properties": {
"url": {
"type": "string"
},
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
}
}
}Submit the signature of the funding request. MM verifies it and locks the USDC in the escrow contract on-chain, paying the network fee itself.
| Argument | Type | Description |
|---|---|---|
| token* | string | Your private deal token (from mm_create_deal or your deal link ?k=...) |
| deal_id* | string | Deal ID, like D-7KQ2M9AB |
| signature* | string | 0x… signature from eth_signTypedData_v4 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id",
"token",
"signature"
],
"properties": {
"token": {
"type": "string",
"description": "Your private deal token (from mm_create_deal or your deal link ?k=...)"
},
"deal_id": {
"type": "string",
"description": "Deal ID, like D-7KQ2M9AB"
},
"signature": {
"type": "string",
"description": "0x… signature from eth_signTypedData_v4"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 10, 2026.
Takes a password, API key or token as an argument, so the secret passes through the model's context and chat logs.
Fix: Read credentials from the server's own configuration (environment, OAuth) instead of a tool argument.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.