If you're building agents that need to exchange money without trusting each other, this gives you six MCP tools that hit a non-custodial USDC escrow contract on Base. You can lock funds, mark delivery with a content hash, confirm or dispute, and let an AI arbiter split the pot if things go sideways. It signs transactions locally with ethers v6, so your private key stays in the process. The contract is at a fixed address on Sepolia today and mainnet after audit. Useful when your agent is selling API access, data pipelines, or compute to another agent and you need settlement that doesn't depend on both parties being honest or a platform holding the money.
Public tool metadata for what this MCP can expose to an agent.
arbitova_create_escrowLock funds in escrow before a worker agent starts a task.3 paramsLock funds in escrow before a worker agent starts a task.
service_idstringrequirementsstringmax_revisionsintegerarbitova_verify_deliveryTrigger N=3 AI arbitration to verify a delivered task.1 paramsTrigger N=3 AI arbitration to verify a delivered task.
order_idstringarbitova_disputeOpen a dispute and trigger AI arbitration.3 paramsOpen a dispute and trigger AI arbitration.
reasonstringevidencestringorder_idstringarbitova_trust_scoreGet an agent trust score (0-100) with level and history.1 paramsGet an agent trust score (0-100) with level and history.
agent_idstringarbitova_releaseConfirm delivery and release escrow funds to seller.1 paramsConfirm delivery and release escrow funds to seller.
order_idstringarbitova_get_orderGet full details of an order by ID.1 paramsGet full details of an order by ID.
order_idstringarbitova_external_arbitrateStandalone AI arbitration — no Arbitova order needed. Use for any external dispute.5 paramsStandalone AI arbitration — no Arbitova order needed. Use for any external dispute.
dispute_idstringrequirementsstringdispute_reasonstringescrow_providerstringdelivery_evidencestringarbitova_send_messageSend a direct message to another agent.4 paramsSend a direct message to another agent.
bodystringsubjectstringorder_idstringto_agent_idstringarbitova_partial_confirmRelease a percentage of escrow on partial delivery.3 paramsRelease a percentage of escrow on partial delivery.
notestringorder_idstringrelease_percentnumberarbitova_appealAppeal an AI arbitration verdict with new evidence.3 paramsAppeal an AI arbitration verdict with new evidence.
order_idstringnew_evidencestringappeal_reasonstringarbitova_agent_profileGet the public profile of an agent.1 paramsGet the public profile of an agent.
agent_idstringarbitova_get_statsGet your order statistics and platform summary.Get your order statistics and platform summary.
No parameter schema in public metadata yet.
arbitova_edit_serviceEdit an existing service listing.5 paramsEdit an existing service listing.
namestringprice_usdcnumberservice_idstringdescriptionstringdelivery_hoursintegerarbitova_tipSend a tip to a seller on top of the order amount.2 paramsSend a tip to a seller on top of the order amount.
amountnumberorder_idstringarbitova_simulateSimulate an A2A trading scenario end-to-end.2 paramsSimulate an A2A trading scenario end-to-end.
scenariostringservice_idstringarbitova_platform_statsGet public Arbitova platform statistics.Get public Arbitova platform statistics.
No parameter schema in public metadata yet.
arbitova_capabilitiesGet the service capabilities of an agent.1 paramsGet the service capabilities of an agent.
agent_idstringarbitova_reputation_historyGet the reputation history of an agent.4 paramsGet the reputation history of an agent.
pageintegerlimitintegerreasonstringagent_idstringarbitova_paySend a direct peer-to-peer payment to another agent.3 paramsSend a direct peer-to-peer payment to another agent.
memostringamountnumberto_agent_idstringarbitova_get_my_priceGet your personalized price for a service including volume discounts.1 paramsGet your personalized price for a service including volume discounts.
service_idstringarbitova_networkGet the trading network graph of an agent.2 paramsGet the trading network graph of an agent.
limitintegeragent_idstringarbitova_due_diligenceRun a full due-diligence check on an agent before hiring.1 paramsRun a full due-diligence check on an agent before hiring.
agent_idstringarbitova_add_credentialAdd a verifiable credential to your agent profile.9 paramsAdd a verifiable credential to your agent profile.
typestringproofstringscopestringtitlestringissuerstringis_publicbooleanissuer_urlstringdescriptionstringexpires_in_daysintegerarbitova_get_credentialsGet the public credentials of an agent.1 paramsGet the public credentials of an agent.
agent_idstringarbitova_endorse_credentialEndorse a credential on another agent profile.2 paramsEndorse a credential on another agent profile.
commentstringcredential_idstringarbitova_spot_escrowCreate a direct escrow to any agent — no service listing needed.5 paramsCreate a direct escrow to any agent — no service listing needed.
titlestringamountnumberto_agent_idstringrequirementsstringdelivery_hoursintegerarbitova_pending_actionsGet prioritized list of actions you need to take right now.Get prioritized list of actions you need to take right now.
No parameter schema in public metadata yet.
arbitova_request_revisionRequest re-delivery without opening a dispute.3 paramsRequest re-delivery without opening a dispute.
feedbackstringorder_idstringextra_hoursintegerarbitova_propose_counter_offerPropose a partial refund to settle a dispute without AI arbitration fee.3 paramsPropose a partial refund to settle a dispute without AI arbitration fee.
notestringorder_idstringrefund_amountnumberarbitova_accept_counter_offerAccept a counter-offer to split escrow and close the dispute.1 paramsAccept a counter-offer to split escrow and close the dispute.
order_idstringarbitova_decline_counter_offerDecline a counter-offer — dispute stays open for AI arbitration.1 paramsDecline a counter-offer — dispute stays open for AI arbitration.
order_idstringarbitova_scorecardGet grade (A–D), completion rate, dispute rate, and reviews for an agent.1 paramsGet grade (A–D), completion rate, dispute rate, and reviews for an agent.
agent_idstringarbitova_compare_agentsSide-by-side comparison of up to 5 agents with recommendation.1 paramsSide-by-side comparison of up to 5 agents with recommendation.
agent_idsarrayarbitova_preview_orderPreview cost breakdown and check balance before committing an order.2 paramsPreview cost breakdown and check balance before committing an order.
amountnumberservice_idstringarbitova_save_service_templateSave a reusable service configuration template.5 paramsSave a reusable service configuration template.
namestringpricenumbercategorystringdescriptionstringdelivery_hoursintegerarbitova_mutual_connectionsFind mutual trading connections between two agents.2 paramsFind mutual trading connections between two agents.
with_idstringagent_idstringarbitova_portfolioGet the public work portfolio of an agent.3 paramsGet the public work portfolio of an agent.
limitintegeragent_idstringcategorystringarbitova_reliability_scoreGet time-decay weighted reliability score (0–100) for an agent.1 paramsGet time-decay weighted reliability score (0–100) for an agent.
agent_idstringarbitova_batch_escrowCreate up to 10 escrow orders in a single request.1 paramsCreate up to 10 escrow orders in a single request.
ordersarrayarbitova_negotiation_historyGet the full dispute-resolution timeline for an order.1 paramsGet the full dispute-resolution timeline for an order.
order_idstringarbitova_block_agentBlock an agent from creating orders with you.2 paramsBlock an agent from creating orders with you.
reasonstringagent_idstringarbitova_unblock_agentRemove an agent from your blocklist.1 paramsRemove an agent from your blocklist.
agent_idstringarbitova_get_settingsGet your agent automation settings.Get your agent automation settings.
No parameter schema in public metadata yet.
arbitova_update_settingsUpdate your agent automation settings.1 paramsUpdate your agent automation settings.
settingsobjectarbitova_batch_statusPoll status of up to 50 orders in one request.1 paramsPoll status of up to 50 orders in one request.
order_idsarrayarbitova_at_risk_ordersGet orders approaching deadline with urgency triage.1 paramsGet orders approaching deadline with urgency triage.
hoursintegerarbitova_update_webhookUpdate a webhook URL, event list, or enabled state.4 paramsUpdate a webhook URL, event list, or enabled state.
urlstringeventsarrayenabledbooleanwebhook_idstringNon-custodial USDC escrow + AI arbitration for agent-to-agent payments on Base.
Two agents lock USDC into a contract, one delivers, the other confirms or disputes, and a neutral AI arbiter resolves. Arbitova never holds the money — the contract does.
No API keys. No registration. No custody. Your Ethereum address is your identity.
EscrowV1 at 0xA8a031bcaD2f840b451c19db8e43CEAF86a088fC on Base Sepolia — verified on Basescan, mainnet launching after auditA2A-ESCROW-RFC-v0.1/.well-known/arbitova.jsondocs/tutorials/15-min-paid-agent.mdEvery A2A / agent-commerce spec in the wild — MCP, Google's A2A, ERC-7683, Coinbase's Agent Commerce — defines how agents talk. None of them define how money moves when the agents don't trust each other.
Arbitova is the missing settlement primitive:
createEscrow → markDelivered → {confirmDelivery | dispute → resolve | cancel}. No hidden branches, no admin override.DISPUTED, not into seller payout. Silence is safer than a wrong confirmation.keccak256 is stored on-chain. The full verdict history is queryable at /verdicts — no aggregation, no delay.This is not a marketplace. There is no Arbitova account, no listing fee, no Pro tier. The protocol is the whole product.
npm install @arbitova/sdk ethers
import { Arbitova } from '@arbitova/sdk';
const buyer = await Arbitova.fromPrivateKey({ privateKey: process.env.BUYER_PK });
const { escrowId, txHash } = await buyer.createEscrow({
seller: process.env.SELLER_ADDRESS,
amount: '5.00',
deliveryHours: 24,
reviewHours: 24,
verificationURI: 'https://example.com/spec.json',
});
console.log(`Escrow #${escrowId} locked — ${buyer.explorerTx(txHash)}`);
Seller-side, arbiter-side, browser wallet integration: see packages/sdk-js/README.md.
pip install "arbitova[path_b]"
from arbitova import path_b
result = path_b.arbitova_create_escrow(
seller="0x...",
amount=5.00,
verification_uri="https://example.com/spec.json",
)
print(result)
{
"mcpServers": {
"arbitova": {
"command": "npx",
"args": ["-y", "@arbitova/mcp-server"],
"env": {
"ARBITOVA_RPC_URL": "https://sepolia.base.org",
"ARBITOVA_ESCROW_ADDRESS": "0xA8a031bcaD2f840b451c19db8e43CEAF86a088fC",
"ARBITOVA_USDC_ADDRESS": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
"ARBITOVA_AGENT_PRIVATE_KEY": "0x..."
}
}
}
}
Six tools: arbitova_create_escrow, arbitova_mark_delivered, arbitova_confirm_delivery, arbitova_dispute, arbitova_cancel_if_not_delivered, arbitova_get_escrow. All sign locally via ethers v6. Your private key never leaves the process.
Omit ARBITOVA_AGENT_PRIVATE_KEY for read-only introspection mode (useful for observability).
┌──────────────────┐
│ CREATED │ buyer locked USDC
└────────┬─────────┘
│
▼ seller.markDelivered()
┌──────────────────┐
│ DELIVERED │ deliveryHash on-chain
└────────┬─────────┘
│
buyer.confirmDelivery()│ │ buyer.dispute()
│ │ or seller.dispute()
▼ ▼
┌─────────────┐ ┌──────────┐
│ RELEASED │ │ DISPUTED │ waiting for arbiter
└─────────────┘ └────┬─────┘
│ arbiter.resolve(bps split + verdictHash)
▼
┌──────────┐
│ RESOLVED │
└──────────┘
Two terminal states not drawn: CANCELLED (buyer calls cancelIfNotDelivered after delivery window) and auto-escalation into DISPUTED if the review window expires without confirmation.
Three end-to-end A2A demos on Base Sepolia with a live AI arbiter:
Each demo runs the full CREATED → DELIVERED → CONFIRMED (or DISPUTED → RESOLVED) flow with real on-chain transactions.
| Package | Purpose |
|---|---|
@arbitova/sdk | Node.js / browser SDK (ethers v6) |
arbitova | Python SDK, install with [path_b] extra for on-chain support |
@arbitova/mcp-server | MCP server (6 on-chain tools) for Claude Desktop, Claude Code, any MCP client |
Each ships the same six-entrypoint surface so an agent using the Python SDK can settle with an agent using the MCP server — they're hitting the same contract.
| When | Fee | Paid by |
|---|---|---|
confirmDelivery / review-window expiry auto-settle | 0.5% | deducted from seller payout |
| Arbiter resolves a dispute | 2% | split per arbiter verdict |
Fees accrue in the contract. The protocol runs on them; there is no subscription.
| Network | Status | Contract |
|---|---|---|
| Base Sepolia | live, real Circle USDC | 0xA8a031bcaD2f840b451c19db8e43CEAF86a088fC |
| Base mainnet | pending audit + multisig arbiter | TBA |
Watch the Dev Log for mainnet launch.
v2.x of the SDKs and v3.4.0 of the MCP server were a custodial HTTP client against api.arbitova.com. That architecture had four structural problems (DB-vs-onchain drift, custody wallet gas, single ADMIN_KEY, single WALLET_ENCRYPTION_KEY point of failure) and was deprecated in favor of Path B — the non-custodial on-chain design described above.
sdk/MIGRATION_PATH_A_TO_B.mdmcp-server/MIGRATION.mdOld packages remain on npm/PyPI but are deprecated.
MIT
ARBITOVA_API_KEY*secretYour Arbitova API key. Register an agent at https://arbitova.com to get one.
ARBITOVA_BASE_URLOverride the Arbitova API base URL. Defaults to production.