Skip to main content
The hosted server is at https://harness.chance.cc/api/mcp. It speaks Streamable HTTP over POST only, keeps no session, and answers with JSON. The local stdio package forwards every message to this server, so the tools below are the same in both. Setup: Local MCP and Connectors. Credentials. An API key (x-api-key or Authorization: Bearer) reaches every tool. An OAuth token reaches what its scope allows: mcp covers the verification and account tools and strk20_relay_status; wallet adds every other tool. Without the wallet scope, a wallet tool returns an error asking you to reconnect and approve wallet access. A request with no valid credential gets 401 with a WWW-Authenticate header pointing at /.well-known/oauth-protected-resource. Availability. The wallet, proposal, status and STRK20 tools exist only when the deployment has escrow wallets configured. check_connection reports escrowTools: true when this credential can use them. Results. Each tool returns text. Most end with a fenced JSON block holding the same data. A failure is a result with isError: true, not a protocol error. A wallet parameter accepts the wallet’s id or its name.

Verification

verify_intent

Checks an action against an intent and returns a verdict with its receipt. One credit, refunded if the run fails. Annotations: readOnlyHint: false, destructiveHint: false. Returns the verdict, reasoning, a proof summary, the verification id and the balance, then JSON: id, requestHash, status, verdict, reasoning, mode, venue, actionFamily, proof, creditsRemaining. Field details: Verification request.

get_verification

Fetches a past verification by id (UUID or requestHash). Free. Annotations: readOnlyHint: true. Returns id, requestHash, status, verdict, reasoning, createdAt and proof with anchorStatus, transcriptUri and explorerTx.

Account

check_connection

Confirms the credential works, without spending a credit. No parameters. Free. Annotations: readOnlyHint: true, idempotentHint: true. Returns ok, account (email, else wallet address, else account id), creditsRemaining, escrowTools and authMethod (api_key or oauth).

topup_credits

Buys credits with USDC on Base over x402. Costs no credits. Annotations: readOnlyHint: false, destructiveHint: false. Called without a payment, it returns isError: true with the x402 terms (in the text, in structuredContent and in _meta["x402/payment-required"]), the HTTP endpoint and the guide URL. Called again with a signed x402 v2 PaymentPayload in _meta["x402/payment"], it settles the payment, credits this account and returns the settlement in _meta["x402/payment-response"]. See Credits.

Wallets

These tools need the wallet scope and are free.

create_escrow_wallet

Annotations: readOnlyHint: false, destructiveHint: false. Returns the address to fund, what the wallet needs for gas on its chain, and JSON: id, name, chain, mode, address, mandate, limits.

update_escrow_wallet

Changes a wallet’s name, mandate or limits. Mode and chain cannot change. Annotations: readOnlyHint: false, destructiveHint: false, idempotentHint: true. At least one of name, mandate or limits is required. A change that loosens the rules is applied, not refused, and the reply says what it loosened. Returns JSON: wallet, name, mode, mandate, limits.

list_escrow_wallets

No parameters. Archived wallets are left out. Annotations: readOnlyHint: true. Returns one entry per wallet: id, name, chain, mode, address, mandate, balanceUsd, tokenCount, provider, custody, rules and explorerAddressUrl. rules.limits holds only the limits that are set. rules.enforcement says, per limit, who refuses a violation: signer (the custodian), chance (Chance’s check before signing) or judge (only the judge weighs it).

get_escrow_balances

Annotations: readOnlyHint: true. Returns walletId, name, address, balanceUsd and balances. Each balance has amount in base units and amountFormatted in whole units; the proposal tools take whole units.

list_swap_tokens

Annotations: readOnlyHint: true, idempotentHint: true. Returns ETH (address native) and the token contracts Chance has verified on that chain, each with symbol, name, address, decimals and logoUrl.

quote_escrow_swap

Prices a swap without proposing it. Nothing is simulated, judged, signed or recorded, and the quote is not held. Annotations: readOnlyHint: true. Takes the same parameters as escrow_swap except note. Returns walletId, name, chain, slippageBps and swap (amounts in, out and minimum, price impact, estimated gas, and whether an approval is needed).

Proposals

These tools need the wallet scope. Each one simulates the action, checks the wallet’s limits, and runs the judge against the wallet’s mandate. One credit when the judge runs; a proposal the limits block first is free. Annotations: readOnlyHint: false, destructiveHint: true. Each returns the verdict, the reasoning, a one-line simulation summary, and then one of: the explorer link (executed), an approval link to send to the owner (held, with its expiry), or “not executed”. Then a proof summary, the transaction id, the balance, and JSON with the full proposal result: txId, status, verdict, reasoning, requestHash, simulation, approvalUrl, txHash, scanId, creditsRemaining, proof. An approval link means the funds have not moved. Field details: Escrow wallets API. note on every proposal tool is context for the judge. It is treated as untrusted narration that cannot grant permission, and it is cut at 2,000 characters. A call that times out on the client still creates the proposal on the server. Find it with list_escrow_transactions.

escrow_transfer

Sends a named asset as-is. On Solana it always waits for the owner.

escrow_swap

Quotes on the Uniswap Trading API, builds the batch (an approval for exactly the sell amount when needed, then the swap) and proposes it. Base and Ethereum wallets only. The JSON also carries swap.

escrow_execute

Proposes a raw transaction. Send exactly one of transaction, calls, solanaTransaction or starknetCalls.

escrow_pay_x402

Pays for an HTTP resource that charges with x402, and returns what the resource sends back. Chance requests the URL itself, reads the terms from the 402 response, and puts the exact amount, token and recipient through the gate. EVM wallets only. A self-custodial safe wallet cannot pay this way. When the payment executes, the reply includes up to 8,000 characters of the resource’s response.

Status

These tools need the wallet scope, are free, and are read-only.

list_escrow_transactions

Newest first. Each entry: id, walletId, status, verdict, summary, explorerUrl, approvalUrl (while awaiting the owner), error, createdAt.

get_escrow_transaction

Returns id, walletId, status, verdict, txHash, explorerUrl, approvalUrl (while awaiting the owner), error, createdAt, updatedAt. An approval past its window reads expired.

STRK20 private actions

Starknet wallets only. All free.
strk20_sign_proof_invocation followed by strk20_relay_private_action puts a private action on chain without a proposal: no simulation, no limit check and no verdict. The gated route is escrow_execute with starknetCalls and starknetProof. Until the sign-and-relay path is gated, treat it as ungated.

strk20_relay_status

Whether private actions can be relayed through AVNU’s paymaster: key configured, relay reachable, key accepted. No parameters. Does not need the wallet scope. Annotations: readOnlyHint: true.

strk20_pool_fee

What the relayer charges, as a withdraw action to add to the action set before proving. Annotations: readOnlyHint: true.

strk20_sign_proof_invocation

Signs a private action with the wallet’s key and proves it. The signature authorizes the action. Annotations: readOnlyHint: false, destructiveHint: true. Returns wallet, address, pool, calldata, signature and proof. The proof expires in about five minutes.

strk20_viewing_key_signature

Signs the fixed viewing-key derivation message for the wallet. The client derives the viewing key from it, which decrypts the wallet’s shielded notes. No caller-supplied bytes are signed. Annotations: readOnlyHint: false, destructiveHint: false. Returns wallet, address, signature.

strk20_relay_private_action

Relays a proven apply_actions call through the paymaster. The wallet pays no STRK for gas. Annotations: readOnlyHint: false, destructiveHint: true. Returns txHash and trackingId.