Skip to main content
Glama

Hire and Pay

hire_and_pay

One-call shortcut to register an escrow vault AND get the ready-to-sign transaction. Free to try: pass network='testnet' (see create_testnet_wallet / try_testnet_demo).

This combines create_escrow_vault() + prepare_escrow() into a single call. The agent only needs to sign the returned transaction and confirm it — no manual XRPL transaction construction required.

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 (require_nft_proof, required_nft_issuer, nft_dvp, required_domain, required_vc_issuer_did).

Structured criteria: pass criteria as a list of strings or typed dicts. Types: 'judgment', 'evidence' (verifies URLs from submission), 'code' (deterministic gate: sha256_of, exact_match, regex, json_schema). INCONCLUSIVE verdicts do not consume an attempt for the first 3 per vault; subsequent INCONCLUSIVEs count as an attempt.

White-label / headless integration:

  • Pass callback_url to receive webhook POSTs on all state changes.

  • Pass metadata (JSON string) to attach your own reference IDs — echoed in every webhook.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "task": "<task>",
      "buyer_address": "<buyer_address>",
      "amount_xrp": "<amount_xrp>",
      "worker_address": "<worker_address>"
    },
    "name": "hire_and_pay"
  }
}

Input Schema

NameRequiredDescriptionDefault
taskYesDetailed description of what the worker must deliver. The AI referee evaluates against this — be precise.
networkNo'mainnet' (default) or 'testnet'. Use 'testnet' for free testing — no real XRP, no fees. Create a testnet wallet first with create_testnet_wallet().mainnet
nft_dvpNoAtomic NFT swap: worker must transfer a specific NFT to the buyer before payment releases. On PASS the vault enters PASS_AWAITING_NFT; worker registers their NFTokenCreateOffer and payment auto-releases when buyer accepts.
criteriaNoOptional list of evaluation criteria. Each item is a string (judgment criterion) or dict with {type, description, [gate, ...]}. Types: 'judgment', 'evidence' (URL verification), 'code' (deterministic gate: sha256_of, exact_match, regex, json_schema). INCONCLUSIVE verdicts do not consume an attempt for the first 3 per vault; subsequent INCONCLUSIVEs count as an attempt.
fee_hashNo64-char hex hash of your $0.10 payment to rmcSrkpZ2i2kuvtCPeTVetee9SixP4djR (XRP or RLUSD on XRPL) or USDC on Base (chain 8453, 0x-prefixed tx hash). Omit to use free tier if eligible (new agent wallets and new Pro accounts get 3 free escrows, each including the AI check).
metadataNoOptional key/value pairs to attach to this escrow and echo back in every webhook payload. Pass as a dict or JSON string. Use to round-trip your own reference numbers (invoice_id, po_number, tenant_id, order_ref, etc.). Example: {"invoice_id": "INV-2026-0042"}.
escrow_idNoUnique receipt code for this escrow, e.g. AT-7X9K-2MQ4. Must be unique. Leave blank to auto-generate.
amount_xrpYesAmount of XRP to lock in escrow as the bounty.
buyer_nameNoYour name or agent identifier.
callback_urlNoHTTPS 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. Payload: {escrow_id, event, verdict, timestamp, metadata}.
external_refNoReference to work found on another platform, e.g. 'upwork:123', 'github:org/repo#45'. Stored on the vault for your own tracking.
external_urlNoURL of the original job listing (must start with https://). Informational — stored on the vault.
proof_policyNoWhen multiple proof gates are set: 'ALL' (default) requires every gate to pass; 'ANY' requires at least one.ALL
release_modeNo'auto' (default): immediate release on PASS. 'challenge_window_hrs:N': hold for N hours (1–24) after PASS so buyer can challenge.auto
buyer_addressYesYour XRPL wallet address (r...) — you are the buyer.
worker_addressYesXRPL address (r...) of the worker to hire directly. Get this from direct_hire() or award_job().
required_domainNoWorker must have their XRPL wallet domain field pointing to this domain. Pass 'ANY' to require any verified domain.
cancel_after_hrsNoHours until escrow auto-cancels if worker doesn't deliver. Default 168 = 7 days.
delegate_addressNoXLS-75 delegated agent XRPL address. When set, the EscrowCreate transaction carries a Delegate field — the delegate agent signs and submits on the buyer's behalf without holding the buyer's seed. The buyer must first submit a DelegateSet granting EscrowCreate permission to this address.
deliverable_typeNoType of deliverable: 'work' (default), 'code', 'data', 'nft'.work
counterparty_typeNoWhether the worker is an 'agent' (default) or 'human'. Affects email copy and worker_url instructions.agent
require_consensusNoRequire consensus between Gemini Flash AND Gemini Pro. Both must agree on PASS; split verdict returns conservative FAIL. Fee: $0.25 (vs $0.10 standard).
require_nft_proofNoWorker must own an NFT from any trusted issuer (or from required_nft_issuer if set) to receive payment.
required_nft_issuerNoRestrict NFT proof to NFTs minted by this XRPL wallet address.
required_vc_issuer_didNoWorker must present a W3C Verifiable Credential JWT issued by this DID.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / fee_hash / description
      Previous value: -"64-char hex hash of your $0.10 payment to rmcSrkpZ2i2kuvtCPeTVetee9SixP4djR (XRP or RLUSD on XRPL) or USDC on Base (chain 8453, 0x-prefixed tx hash). Omit to use free tier (wallets created via create_agent_wallet get 3 free escrows)."New value: +"64-char hex hash of your $0.10 payment to rmcSrkpZ2i2kuvtCPeTVetee9SixP4djR (XRP or RLUSD on XRPL) or USDC on Base (chain 8453, 0x-prefixed tx hash). Omit to use free tier if eligible (new agent wallets and new Pro accounts get 3 free escrows, each including the AI check)."
  2. Changed3 schema fields changed
    • changedInput schema / properties / metadata / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": true,
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / metadata / description
      Previous value: -"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.). Example: '{\"invoice_id\": \"INV-2026-0042\"}'."New value: +"Optional key/value pairs to attach to this escrow and echo back in every webhook payload. Pass as a dict or JSON string. Use to round-trip your own reference numbers (invoice_id, po_number, tenant_id, order_ref, etc.). Example: {\"invoice_id\": \"INV-2026-0042\"}."
    • removedInput schema / properties / metadata / title
      Removed value: -"Metadata (JSON string)"
  3. Changed3 schema fields changed
    • addedInput schema / properties / escrow_id / default
      Added value: +""
    • changedInput schema / properties / escrow_id / description
      Previous value: -"Unique receipt code for this escrow, e.g. AT-7X9K-2MQ4. Must be unique."New value: +"Unique receipt code for this escrow, e.g. AT-7X9K-2MQ4. Must be unique. Leave blank to auto-generate."
    • changedInput schema / required
      Previous value: -[
      -  "task",
      -  "buyer_address",
      -  "amount_xrp",
      -  "worker_address",
      -  "escrow_id"
      -]New value: +[
      +  "task",
      +  "buyer_address",
      +  "amount_xrp",
      +  "worker_address"
      +]
  4. Changed1 schema field changed
    • addedInput schema / properties / network
      Added value: +{
      +  "default": "mainnet",
      +  "description": "'mainnet' (default) or 'testnet'. Use 'testnet' for free testing — no real XRP, no fees. Create a testnet wallet first with create_testnet_wallet().",
      +  "enum": [
      +    "mainnet",
      +    "testnet"
      +  ],
      +  "type": "string"
      +}
  5. Changed1 schema field changed
    • changedInput schema / properties / criteria / description
      Previous value: -"Optional list of evaluation criteria. Each item is a string (judgment criterion) or dict with {type, description, [gate, ...]}. Types: 'judgment', 'evidence' (URL verification), 'code' (deterministic gate). INCONCLUSIVE verdicts do NOT consume attempts."New value: +"Optional list of evaluation criteria. Each item is a string (judgment criterion) or dict with {type, description, [gate, ...]}. Types: 'judgment', 'evidence' (URL verification), 'code' (deterministic gate: sha256_of, exact_match, regex, json_schema). INCONCLUSIVE verdicts do not consume an attempt for the first 3 per vault; subsequent INCONCLUSIVEs count as an attempt."
  6. Changed6 schema fields changed
    • addedInput schema / properties / counterparty_type
      Added value: +{
      +  "default": "agent",
      +  "description": "Whether the worker is an 'agent' (default) or 'human'. Affects email copy and worker_url instructions.",
      +  "enum": [
      +    "agent",
      +    "human"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / criteria
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {},
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Optional list of evaluation criteria. Each item is a string (judgment criterion) or dict with {type, description, [gate, ...]}. Types: 'judgment', 'evidence' (URL verification), 'code' (deterministic gate). INCONCLUSIVE verdicts do NOT consume attempts.",
      +  "title": "Structured Criteria"
      +}
    • addedInput schema / properties / deliverable_type
      Added value: +{
      +  "default": "work",
      +  "description": "Type of deliverable: 'work' (default), 'code', 'data', 'nft'.",
      +  "enum": [
      +    "work",
      +    "code",
      +    "data",
      +    "nft"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / external_ref
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Reference to work found on another platform, e.g. 'upwork:123', 'github:org/repo#45'. Stored on the vault for your own tracking.",
      +  "title": "External Reference"
      +}
    • addedInput schema / properties / external_url
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "URL of the original job listing (must start with https://). Informational — stored on the vault.",
      +  "title": "External Listing URL"
      +}
    • addedInput schema / properties / release_mode
      Added value: +{
      +  "default": "auto",
      +  "description": "'auto' (default): immediate release on PASS. 'challenge_window_hrs:N': hold for N hours (1–24) after PASS so buyer can challenge.",
      +  "type": "string"
      +}
  7. Changed1 schema field changed
    • changedInput schema / properties / fee_hash / description
      Previous value: -"64-char hex hash of your $0.10 payment (XRP/RLUSD/USDC) to rmcSrkpZ2i2kuvtCPeTVetee9SixP4djR. Omit to use free tier (if eligible)."New value: +"64-char hex hash of your $0.10 payment to rmcSrkpZ2i2kuvtCPeTVetee9SixP4djR (XRP or RLUSD on XRPL) or USDC on Base (chain 8453, 0x-prefixed tx hash). Omit to use free tier (wallets created via create_agent_wallet get 3 free escrows)."
  8. Changed1 schema field changed
    • addedInput schema / properties / delegate_address
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "XLS-75 delegated agent XRPL address. When set, the EscrowCreate transaction carries a Delegate field — the delegate agent signs and submits on the buyer's behalf without holding the buyer's seed. The buyer must first submit a DelegateSet granting EscrowCreate permission to this address.",
      +  "title": "Delegate Agent Address (XLS-75)"
      +}
  9. Changed14 schema fields changed
    • addedInput schema / properties / amount_xrp / title
      Added value: +"Bounty (XRP)"
    • addedInput schema / properties / buyer_address / title
      Added value: +"Your XRPL Address"
    • addedInput schema / properties / callback_url / title
      Added value: +"Callback URL"
    • addedInput schema / properties / cancel_after_hrs / title
      Added value: +"Deadline (hours)"
    • addedInput schema / properties / escrow_id / title
      Added value: +"Escrow ID"
    • addedInput schema / properties / fee_hash / title
      Added value: +"Protocol Fee Hash"
    • addedInput schema / properties / metadata / title
      Added value: +"Metadata (JSON string)"
    • addedInput schema / properties / nft_dvp / title
      Added value: +"NFT Delivery-vs-Payment"
    • addedInput schema / properties / require_consensus / title
      Added value: +"Premium Consensus Audit"
    • addedInput schema / properties / require_nft_proof / title
      Added value: +"Require NFT Proof"
    • addedInput schema / properties / required_nft_issuer / title
      Added value: +"Required NFT Issuer"
    • addedInput schema / properties / required_vc_issuer_did / title
      Added value: +"Required VC Issuer DID"
    • addedInput schema / properties / task / title
      Added value: +"Task Description"
    • addedInput schema / properties / worker_address / title
      Added value: +"Worker XRPL Address"
  10. Changed2 schema fields changed
    • addedInput schema / properties / callback_url
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "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. Payload: {escrow_id, event, verdict, timestamp, metadata}."
      +}
    • addedInput schema / properties / metadata
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "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.). Example: '{\"invoice_id\": \"INV-2026-0042\"}'."
      +}
  11. Changed7 schema fields changed
    • addedInput schema / properties / nft_dvp
      Added value: +{
      +  "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 registers their NFTokenCreateOffer and payment auto-releases when buyer accepts.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / proof_policy
      Added value: +{
      +  "default": "ALL",
      +  "description": "When multiple proof gates are set: 'ALL' (default) requires every gate to pass; 'ANY' requires at least one.",
      +  "enum": [
      +    "ALL",
      +    "ANY"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / require_consensus
      Added value: +{
      +  "default": false,
      +  "description": "Require consensus between Gemini Flash AND Gemini Pro. Both must agree on PASS; split verdict returns conservative FAIL. Fee: $0.25 (vs $0.10 standard).",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / require_nft_proof
      Added value: +{
      +  "default": false,
      +  "description": "Worker must own an NFT from any trusted issuer (or from required_nft_issuer if set) to receive payment.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / required_domain
      Added value: +{
      +  "default": "",
      +  "description": "Worker must have their XRPL wallet domain field pointing to this domain. Pass 'ANY' to require any verified domain.",
      +  "type": "string"
      +}
    • addedInput schema / properties / required_nft_issuer
      Added value: +{
      +  "default": "",
      +  "description": "Restrict NFT proof to NFTs minted by this XRPL wallet address.",
      +  "type": "string"
      +}
    • addedInput schema / properties / required_vc_issuer_did
      Added value: +{
      +  "default": "",
      +  "description": "Worker must present a W3C Verifiable Credential JWT issued by this DID.",
      +  "type": "string"
      +}
  12. Changed1 schema field changed
    • changedInput schema / properties / fee_hash / description
      Previous value: -"64-char hex hash of your 0.1 XRP payment to rmcSrkpZ2i2kuvtCPeTVetee9SixP4djR. Omit to use free tier (if eligible)."New value: +"64-char hex hash of your $0.10 payment (XRP/RLUSD/USDC) to rmcSrkpZ2i2kuvtCPeTVetee9SixP4djR. Omit to use free tier (if eligible)."
  13. Added

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses the key operational flow: the agent only needs to sign and confirm the returned transaction, with no manual XRPL construction. It also explains NFT DvP behavior, proof gates, structured criteria types, INCONCLUSIVE attempt accounting, webhook callbacks, and metadata echoing, which are important behaviors not covered by the annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then layers in the signing flow, proof gates, criteria, and webhook behavior. It is appropriately sized for a 25-parameter escrow tool, though some of the criteria and proof-gate wording repeats what the schema already says.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists and annotations cover safety/profile hints, the description supplies enough context to understand the high-level flow and advanced options. It slightly under-specifies the exact post-signing routing, such as which confirmation/submission tool to call next, but overall it is complete enough for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents every parameter in detail. The description adds some useful grouping by naming the proof-gate parameters and restating criteria types, but most of that information is already present in the schema descriptions, so this is a baseline-level contribution rather than substantial extra meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource: it registers an escrow vault and returns a ready-to-sign transaction. It explicitly positions itself as a one-call shortcut combining create_escrow_vault() and prepare_escrow(), so an agent can distinguish it from those siblings immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: use it as a shortcut when you want vault creation plus the prepared transaction in one call, and points testnet users to create_testnet_wallet / try_testnet_demo. It does not explicitly state when to prefer the separate create_escrow_vault + prepare_escrow calls, so the alternative route is implied rather than fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.