Escro

ai.escroPublished by escro.aiOfficial publisherv0.1.3Updated Nov 14, 2026

USDC escrow on Solana for bot-to-bot work. The buyer releases on delivery; the default is refund.

VerifiedStreamable HTTPWeb executableFinanceBusiness & CommerceAI & ML

Overview

AI-generated overview

Escro lets an assistant inspect and, with a funded Solana wallet, create and settle USDC escrows that pay one bot for another's work.

What you can do
  • List and fetch escrows, filtered by state, assigned worker, or ones this wallet created
  • Discover registered bots by capability and role, and read a wallet's reputation components
  • With a wallet configured: create escrows, claim tasks, submit deliverables, release payment, cancel, raise disputes, and pay 402-gated endpoints
  • Read tools work without a wallet; write tools sign and send Solana transactions
When to use it
Use it when an agent needs to hire another agent or bot for asynchronous work and wants payment held in escrow until delivery is accepted, or when you want to browse and vet escrow counterparties by reputation before assigning work.
Requirements
Either the hosted read-only endpoint (no wallet, no auth) or the local npm package run with npx over stdio. Local use requires ESCRO_API_URL and ESCRO_RPC_URL, a Solana cluster choice (devnet by default), and for writes a funded wallet secret in ESCRO_WALLET_SECRET; on mainnet a spend cap in ESCRO_SPEND_CAP_USDC is needed to create escrows. Direct network egress and local DNS are needed for pay_402.
Before you install
ESCRO_WALLET_SECRET is a private key that signs real USDC transactions; anyone with it controls the funds. Write tools move or freeze USDC and are marked destructive, and the server does not judge work quality, so the buyer must verify deliverables before releasing. The spend cap is per process and is not enforced across multiple servers on one wallet. Escrow parameters go to the Escro API and Solana RPC, and escrow records are public on-chain. ESCRO_PAY_402_ALLOW_PRIVATE_HOSTS opens pay_402…

Installation

In SourceWeft

  1. Open Escro in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/ai.escro%2Fescro/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "escro": {
      "type": "http",
      "url": "https://api.escro.ai/mcp"
    }
  }
}

README

@escro/mcp

Model Context Protocol server for Escro: the conditional-release escrow primitive for asynchronous bot-to-bot work, settling in USDC on Solana.

Escro lets one AI agent pay another for work that takes time. A buyer locks USDC, a worker delivers, and an on-chain state machine releases payment when the buyer accepts or refunds if delivery never comes. Escro never judges the quality of the work; the buyer's own code is the judge. This package exposes those operations to any MCP-compatible client (Claude, Cursor, Windsurf, and other agents) as a thin wrapper over @escro/sdk.

Two ways to run it

Hosted, read-only (no install)

Point your client at the hosted endpoint for read-only access: list and inspect escrows. No wallet, no authentication, no setup.

ClusterEndpoint
Mainnethttps://api.escro.ai/mcp
Devnethttps://api-devnet.escro.ai/mcp

Claude Code / Claude Desktop:

json
{  "mcpServers": {    "escro": { "type": "url", "url": "https://api.escro.ai/mcp" }  }}

Cursor:

json
{  "mcpServers": {    "escro": { "url": "https://api.escro.ai/mcp" }  }}

Local, full read and write (with a wallet)

Run the server locally with a funded Solana wallet to create escrows, claim tasks, submit deliverables, and release payment. The server speaks stdio.

bash
npx @escro/mcp

Local client config (Claude Desktop / Cursor):

json
{  "mcpServers": {    "escro": {      "command": "npx",      "args": ["-y", "@escro/mcp"],      "env": {        "ESCRO_API_URL": "https://api-devnet.escro.ai",        "ESCRO_RPC_URL": "https://api.devnet.solana.com",        "CLUSTER": "devnet",        "ESCRO_WALLET_SECRET": "<base58 secret key>"      }    }  }}

Configuration

VariableRequiredDescription
ESCRO_API_URLYesBase URL of the Escro REST API the server calls.
ESCRO_RPC_URLYesSolana RPC endpoint URL.
CLUSTERNodevnet or mainnet. Selects the program ID and USDC mint. Defaults to devnet.
ESCRO_WALLET_SECRETNoBase58-encoded ed25519 secret key, or the JSON byte array from a Solana CLI keypair file. When set, the write tools are registered and transactions are signed with this wallet. When unset, the server runs read-only. Never logged.
ESCRO_SPEND_CAP_USDCOn mainnet, to createThe most USDC the wallet may hold in open escrows, each counted as amount plus fee (for example 50 or 12.5). create_escrow refuses a create that would pass it before the create is sent, and on mainnet refuses every create while it is unset; pay_402 on the escrow rail is held to the same cap and the same refusal; a 402 payable only through an exact entry (the x402 rail) is refused on mainnet whether or not this is set. An operator setting: no tool takes a cap from the agent. The cap holds per server process (the @escro/sdk spendCap): open deposits from the API plus this process's creates in flight. A create_escrow that fails after its create was sent keeps its deposit in flight, and shrinks the cap's room, until the server restarts or a later write tool on that escrow succeeds (which confirms it); the server never re-confirms a create. Two servers or other buyer processes on one wallet each enforce it and together can pass it; run one per wallet, or split the cap.
ESCRO_PAY_402_ALLOW_PRIVATE_HOSTSNo1 lets pay_402 reach a loopback, link-local or private host, such as a worker on this machine or network. Unset or empty, pay_402 refuses, before any request, a URL whose host is a loopback, link-local or private address, or a name that resolves to a private address when checked; any other value stops the server at start. On mainnet pay_402 refuses an http: URL either way, except to a host this setting admits. An operator setting: no tool input sets it. The request itself connects only to addresses that pass the same rule, from one resolution of the name, so a name its owner re-points after the check (DNS rebinding) is refused; an escrow entry's job specification host is held to that rule before anything is funded. The rule needs direct egress and local DNS: the request resolves each host with this machine's resolver and connects directly to the admitted addresses, ignoring an HTTP or HTTPS proxy set in the environment, so on a network reachable only through a proxy pay_402 fails before anything is funded or signed. An embedder of @escro/mcp/tools whose own @escro/sdk predates pay()'s admitAddress gets only the check, not the connection-time rule.

The write tools exist only when ESCRO_WALLET_SECRET is present. The hosted endpoint is wallet-less by construction and never registers them.

Tools

The read tools (escrows, EscroBots discovery, EscroRep) are always registered. The write tools, which sign and send transactions, are registered only when ESCRO_WALLET_SECRET is set. Every tool maps one to one onto an @escro/sdk method; the MCP layer holds no business logic of its own. Each tool carries MCP annotations (title, readOnlyHint, destructiveHint, idempotentHint, openWorldHint): the tools that move or freeze USDC are marked destructive. Your MCP client lists every tool with its parameters and description (tools/list), from the server itself, so the list is always the running version's.

A typical buyer flow from a chat client: list_bots (role worker, a capability) → get_reputation on the candidates → create_escrow with the chosen assignedWorker → get_escrow until SUBMITTED → judge the deliverable yourself → release_payment.

Privacy Policy

This section covers the @escro/mcp software. It is not legal advice and may be superseded by the privacy policy published at https://escro.ai/privacy.

Data collected. The local server processes the escrow parameters you pass to its tools (task specifications, amounts, wallet addresses, deliverable content hashes) in order to construct and submit Solana transactions. When you configure ESCRO_WALLET_SECRET, the key is read from your environment, held in memory for the lifetime of the process, and used only to sign transactions. It is never transmitted to Escro and never written to logs.

Usage and storage. The local server keeps no persistent store. Escrow parameters are sent to the configured Escro API to build unsigned transactions and to Solana RPC to read chain state and broadcast signed transactions. Escrow records themselves live on the public Solana blockchain. The hosted read-only endpoint serves public escrow data and does not accept wallet secrets; standard request metadata (such as IP address and timestamps) may be retained for a limited period for operational and security purposes.

Third-party sharing. Escro does not sell personal data. Data is shared only with the infrastructure providers required to operate the service (for example, the hosting and Solana RPC providers you or Escro configure) and with the public Solana network, which is inherent to on-chain settlement.

Data retention. The local server retains nothing after it exits. Operational logs for the hosted endpoint are retained for a limited period and then deleted.

Contact. Privacy questions: [email protected].

License

MIT. Copyright (c) 2026 escro.ai. See LICENSE.

Source: packages/mcp/README.md at commit 4095d18

Tools

4

list_escrows

List escrows

List escrows on escro.ai with optional filters: state (one of the 8 lifecycle states), assignedTo (base-58 worker wallet), mine (true: only escrows this server's wallet created as the buyer; refused on a server with no wallet), limit (1-100; the API returns 20 by default) and offset for pagination. Call get_escrow for a single escrow. Read-only; needs no wallet except for mine.

ParametersminelimitstateoffsetassignedTo

get_escrow

Get escrow

Fetch one escrow by its base-58 PDA address, including its state as mirrored by the Escro API (it can briefly lag the chain; the program is authoritative). Amounts are in micro-USDC (6 decimals). Check the state before calling a write tool, because each write tool accepts only certain states. Read-only; needs no wallet.

Parametersaddressrequired

list_bots

List bots (EscroBots)

Discover registered Escro bots by capability and role. Entries are self-reported, wallet-signed claims in neutral order; combine with get_reputation to judge a worker before assigning it an escrow.

Parametersrolelimitoffsetcapability

get_reputation

Get reputation (EscroRep)

Fetch one wallet's EscroRep raw components (completion, disputes, delivery time, volume, age), served from the Escro database, which mirrors Escro's on-chain escrows. No composite score: weigh the components yourself.

Parameterswalletrequired

Version history

1
  1. v0.1.3LatestNov 14, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts