Crypto escrow for AI agents: quote, open and follow P2P trades; money moves only with human 2FA.
One address for any MCP client. You sign in at api.iescrow.io once, after adding it.
At most: moves money, runs code or commands, deletes data, or sends messages for you.
Odel charges nothing per call. The publisher may charge for its own service.
| Access to | Read | Change |
|---|---|---|
| Profile | ||
| Quotes | ||
| Wallet | ||
| Trades |
From the sign-in at api.iescrow.io, as the endpoint publishes it. You approve it there.
Odel could not list its tools without signing in.
iEscrow is a cryptocurrency escrow platform: in every trade the crypto is held by iEscrow until both sides have delivered, so nobody has to hand over first. This repository documents the iEscrow MCP server, which lets an AI agent (Claude, ChatGPT or any MCP host) operate an iEscrow account on behalf of the user who authorized it.
https://api.iescrow.io/mcphttps://api.iescrow.io), PKCE, dynamic client registrationThe agent can quote, open trades, read balances and states, and prepare marketplace ads. Anything that moves money is not executed by the agent: the tool creates an approval and returns a link. The account owner opens that link, sees exactly what is about to happen, and approves it with their two-factor code.
What the agent can never do, by design:
The API enforces this with an allow-list of routes for agent tokens; the MCP server only wraps those routes.
An iEscrow account with:
The connection screen (/connect) checks the three before issuing a token. Trades can be executed by an agent only in the countries where iEscrow is enabled for agents; get_readiness tells you which.
Settings → Connectors → Add custom connector → name iEscrow, URL https://api.iescrow.io/mcp. Claude discovers the authorization server, opens the iEscrow consent screen, and the connection is ready once you approve it.
claude mcp add --transport http iescrow https://api.iescrow.io/mcp
Then run /mcp inside Claude Code to complete the login.
Settings → Connectors → Create (developer mode) → name iEscrow, MCP server URL https://api.iescrow.io/mcp, authentication OAuth. ChatGPT registers itself as a client and sends you to the iEscrow consent screen.
Point the host to the URL above with the Streamable HTTP transport. The server publishes /.well-known/oauth-protected-resource, and the authorization server publishes /.well-known/oauth-authorization-server; hosts that implement the MCP authorization spec need nothing else. See examples/ for configuration snippets.
| Scope | Grants |
|---|---|
profile:read | who the user is and whether the account is ready to trade |
quotes:read | executable offers and prices on the marketplace |
wallet:read | balances and masked payment accounts |
trades:read | state of the user's trades and ads |
trades:write | open trades, request approvals to lock crypto or confirm payments, cancel own requests |
ads:write | prepare marketplace ads (always subject to the human's approval); not advertised in the resource metadata, requested explicitly by hosts that support it |
Scopes are chosen on the consent screen and can be revoked at any time from Connected apps in the user's iEscrow settings.
Per connection: 60 calls per minute, 10 trade openings per hour, 20 money-moving approval requests per hour. One concurrent long-poll (wait_for_trade_update) per user. A limited call returns error_key and retry_after_s.
get_readiness — confirm the account can trade.get_quote with side=buy, the crypto, the fiat and the amount — pick an offer; note compatible_account_ids.open_trade with the offer id, the amount and a compatible payment_account_id.get_trade — wait until crypto_funded is true. The human must not pay before that.get_proof_upload_link — give the user the link; it shows the exact amount (the cents are the payment key) and the account to pay. The user pays, attaches the receipt and declares the payment there.wait_for_trade_update — the trade moves to released when the seller confirms. The crypto is now in the user's iEscrow balance.Selling is the mirror image: open_trade with side=sell, then fund_escrow (the human approves the lock by link), then confirm_received once the fiat arrives (again approved by link).
Every error is returned as structured content with error: true, an HTTP-like status, a stable error_key and a human-readable message. When an action needs the human, the response carries approval_required: true and approval.approve_url; poll check_approval with approval.public_id to learn the outcome.
The MCP server never opens the database and holds no secrets of its own: it verifies the user's access token (RS256, issuer and audience pinned) and forwards the same bearer to the API. Reports about the agent channel: contact@iescrow.io.
This repository holds the public documentation of the server and the manifest used to list it in MCP registries. The server's source code is not published here.