ai.agenttrust/mcp
create_escrow_vault
Create an XRPL escrow vault. Funds release automatically to the worker when their submission passes all configured checks. Buyers can require NFT ownership, an atomic NFT Delivery-vs-Payment swap, domain verification, or W3C Verifiable Credentials before a PASS releases escrow — set the relevant proof-gate params below. Two release modes: - AI audit (default): worker submits text/files; AI referee scores against task_description. - Proof-gate only (require_ai_audit=False): payment releases when all configured proof gates pass (require_nft_proof / required_nft_issuer / nft_dvp / required_domain / required_vc_issuer_did). No AI call. Requires at least one proof gate. White-label / headless integration: - Pass callback_url to receive webhook POSTs on all state changes. AgentTrust operates as a silent settlement rail; your platform handles all user-facing surfaces. - Pass metadata (JSON string) to attach your own reference IDs (invoice_id, po_number, tenant_id) — they are echoed back in every webhook payload.
Remote (network-hosted)
Other tools also called create_escrow_vault?
See providers with this name
Input Schema
{
"type": "object",
"properties": {
"nft_dvp": {
"type": "boolean",
"title": "NFT Delivery-vs-Payment",
"default": false,
"description": "Atomic NFT swap: worker must transfer a specific NFT to the buyer before payment releases. On PASS the vault enters PASS_AWAITING_NFT; worker then registers their NFTokenCreateOffer via POST /escrow/{id}/nft-offer and payment auto-releases when buyer accepts. Mutually exclusive with require_nft_proof."
},
"category": {
"enum": [
"default",
"creative",
"code",
"data",
"data_analysis",
"bug_bounty",
"legal",
"supply_chain"
],
"type": "string",
"title": "Job Category",
"default": "default",
"description": "Marketplace category for this job. One of: default, creative, code, data, data_analysis, bug_bounty, legal, supply_chain."
},
"currency": {
"type": "string",
"default": "XRP",
"description": "Currency to lock. Use \"XRP\" (no trustline needed) or \"RLUSD\" (USD-pegged stablecoin)."
},
"fee_hash": {
"type": "string",
"title": "XRPL Payment Hash",
"default": "",
"description": "64-character hex transaction hash of the $0.10 payment (XRP/RLUSD) to rmcSrkpZ2i2kuvtCPeTVetee9SixP4djR. Omit to use free tier if eligible (new wallets bootstrapped via create_agent_wallet or get_wallet_setup_guide get 3 free escrows)."
},
"metadata": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Metadata (JSON string)",
"default": null,
"description": "Optional JSON string of key/value pairs to attach to this escrow and echo back in every webhook payload. Use to round-trip your own reference numbers (invoice_id, po_number, tenant_id, order_ref, etc.) without storing them on AgentTrust's side. Example: '{\"invoice_id\": \"INV-2026-0042\", \"po_number\": \"PO-9981\"}'."
},
"escrow_id": {
"type": "string",
"title": "Escrow ID",
"description": "Unique receipt code for this vault, e.g. AT-7X9K-2MQ4. Used to reference the vault in subsequent calls."
},
"amount_xrp": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "XRP Amount",
"default": null,
"description": "Amount of XRP to lock in escrow. Required when currency is XRP. Minimum: 0.000001 XRP (1 drop — XRPL EscrowCreate minimum). Practically, ensure the bounty exceeds the $0.10 protocol fee."
},
"buyer_name": {
"type": "string",
"description": "Name or identifier of the buyer posting the job."
},
"amount_rlusd": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "RLUSD Amount",
"default": null,
"description": "Amount of RLUSD to lock in escrow. Required when currency is RLUSD."
},
"callback_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Callback URL",
"default": null,
"description": "HTTPS endpoint on your server to receive webhook POST notifications on escrow state changes (funded, PASS, FAIL, expired). Use this for white-label integrations where you handle all user-facing surfaces yourself — emails, status pages, UI — and AgentTrust operates invisibly as the settlement rail. Payload: {escrow_id, event, verdict, timestamp, metadata}."
},
"proof_policy": {
"enum": [
"ALL",
"ANY"
],
"type": "string",
"default": "ALL",
"description": "When multiple proof gates are set: 'ALL' (default) requires every gate to pass; 'ANY' requires at least one gate to pass."
},
"buyer_address": {
"type": "string",
"title": "Buyer XRPL Address",
"description": "XRPL wallet address (r...) of the buyer."
},
"project_label": {
"type": "string",
"default": "",
"description": "Optional human-readable label for the job, shown in the marketplace."
},
"worker_address": {
"type": "string",
"title": "Worker XRPL Address",
"description": "XRPL wallet address (r...) of the worker who will receive payment on approval. Use the address returned by award_job()."
},
"max_submissions": {
"type": "integer",
"default": 3,
"description": "Number of work submission attempts the worker is allowed before the vault is locked. Default 3 (included in the $0.10 creation fee). Each slot above 3 costs an extra $0.05 at creation time (e.g. max_submissions=5 → $0.10 + 2×$0.05 = $0.20). Range 1–10."
},
"required_domain": {
"type": "string",
"default": "",
"description": "Worker must have their XRPL wallet domain field pointing to this domain (verified via xrp-ledger.toml). Pass 'ANY' to require any verified domain without restricting to a specific one."
},
"cancel_after_hrs": {
"type": "integer",
"title": "Cancel After (hours)",
"default": 168,
"description": "Hours until the buyer can reclaim funds if the worker does not deliver. Default 168 = 7 days."
},
"require_ai_audit": {
"type": "boolean",
"title": "Require AI Audit",
"default": true,
"description": "Default True. Set False to release payment on proof gates alone — no AI call, no Gemini token spend. Requires at least one proof gate (require_nft_proof, required_nft_issuer, required_domain, or required_vc_issuer_did). Use for machine-verifiable deliverables: NFT delivery, domain verification, W3C credentials."
},
"required_vc_type": {
"type": "string",
"title": "Required VC Type",
"default": "",
"description": "If set alongside required_vc_issuer_did, the VC must also have this credential type (e.g. 'CertifiedDeveloper'). Leave blank to accept any credential type from the issuer."
},
"task_description": {
"type": "string",
"description": "Detailed specification the worker must fulfil to be paid. Be precise — the AI referee evaluates against this."
},
"require_consensus": {
"type": "boolean",
"title": "Premium Consensus Audit",
"default": false,
"description": "Require consensus between Gemini Flash AND Gemini Pro before a PASS is issued. Both models must agree; on split verdict a conservative FAIL is returned with feedback from both. Fee: $0.25 (vs $0.10 standard). Ignored when require_ai_audit=False."
},
"require_nft_proof": {
"type": "boolean",
"title": "Require NFT Proof",
"default": false,
"description": "Worker must own an NFT from any verified issuer (or from required_nft_issuer if set) to receive payment. Set required_nft_issuer to restrict to a specific issuer wallet."
},
"required_nft_issuer": {
"type": "string",
"title": "Required NFT Issuer",
"default": "",
"description": "Restrict NFT proof to NFTs minted by this XRPL wallet address. Also implicitly sets require_nft_proof=True. Leave blank to accept NFTs from any trusted issuer."
},
"required_vc_issuer_did": {
"type": "string",
"title": "Required VC Issuer DID",
"default": "",
"description": "Worker must present a W3C Verifiable Credential JWT issued by this DID (e.g. did:web:issuer.example.com). Used for accreditation, certifications, or KYB checks."
}
}
}