AgentWallet MCP Server
AgentWallet MCP Server lets an AI agent manage EVM and Solana wallets, sign/send transactions, and handle x402 payments/paywalls with configurable custody and spend guards.
Create, list, inspect, pause/unpause, and delete wallets, and verify whether signing is local or hosted.
Check native/token balances, token info, allowances, supported chains, token risk, usage, and verification credits.
Send native and ERC-20/SPL tokens; sign or broadcast raw transactions; make read-only contract calls; wrap/unwrap native tokens; approve tokens and Permit2.
Quote, discover, and pay x402 APIs; create, update, list, and delete paywalls; view paywall payments and aggregate x402 revenue.
Enforce spend policies with budgets, host/recipient/chain/tool allowlists, human approvals, hash-chained ledger tracking, receipt export, and transaction simulation.
Get guidance for exporting hosted wallet keys to self-custody.
Enables AI agents to manage wallets, sign and broadcast transactions, and interact with ERC-20 tokens on the Ethereum network, including support for x402 payments and DeFi operations.
Allows AI agents to interact with the Optimism Layer 2 network for wallet management, transaction processing, and ERC-20 token operations.
Supports wallet creation, transaction execution, and token management for AI agents on the Polygon network, including native token and stablecoin transfers.
Provides tools for Solana wallet management, facilitating native SOL and SPL token transfers, account creation, and automated x402 payment processing.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@AgentWallet MCP ServerSend 0.01 ETH to 0x742d35Cc6634C0532925a3b844Bc454e4438f44e on Base"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AgentWallet MCP Server
Permissionless wallet infrastructure for AI agents. Create wallets, sign transactions, and broadcast on-chain, on any EVM chain and Solana. Built-in guards. No KYC. The only AI agent wallet that accepts crypto for its own API fees.
Your keys can stay on your machine. Set one environment variable and every signature happens in your own process. No server sees the key, no company can freeze the wallet, and you can verify that claim by reading src/local-wallet.ts or by running the server with the API pointed at a closed port.
No KYC. No KYT. No approval process. No transaction monitoring. No one can block your wallet. Pay with USDC on-chain, no credit card required.
Two modes
Local (self-custody) | Hosted (custodial) | |
Who holds the key | You, in your own process | Encrypted on AgentWallet servers |
Set up | One env var, no account needed | API key |
Chains | EVM + Solana | EVM + Solana |
Can anyone freeze it | No | Yes, that is what pause is for |
Spend guards |
| Server-side limits, pause, rate limits |
Paywalls, usage, billing | Needs an API key too | Included |
Run wallet_mode at any time and the server will tell you which one you are in, and which address it controls.
Local signing in one variable
{
"mcpServers": {
"agentwallet": {
"command": "npx",
"args": ["-y", "agentwallet-mcp"],
"env": {
"AGENTWALLET_PRIVATE_KEY": "0xyour_key",
"AGENTWALLET_RPC_8453": "https://your-own-rpc",
"AGENTWALLET_MAX_TX_NATIVE": "0.05"
}
}
}
}Use AGENTWALLET_KEYFILE=/path/to/key instead if you would rather keep the key out of your shell config (one or the other: the server refuses to start when both are set). The key is read once, never written to disk, never logged, and never included in an error message.
AGENTWALLET_RPC_<chainId> (or AGENTWALLET_RPC_URL for all chains) points at an endpoint you trust (https; plain http only on localhost). Without it a public RPC is used, and a public RPC can see which addresses you ask about. Decimals for a token outside the registry come from that RPC and are accepted only up to 18; pin anything else with AGENTWALLET_TOKEN_DECIMALS.
AGENTWALLET_MAX_TX_NATIVE is a per-transaction ceiling in native units (ETH, MATIC and so on). In hosted mode the server enforces limits; in local mode there is no server, so these guards are the only ones there are. Set them.
AGENTWALLET_MAX_TX_TOKEN is the equivalent ceiling for ERC-20 movement, in human units of the token. Set this one too if you hold stablecoins. The native cap cannot see a token transfer: an ERC-20 send carries value = 0 with the amount in the calldata, so AGENTWALLET_MAX_TX_NATIVE alone leaves a USDC balance uncapped. AGENTWALLET_MAX_TX_TOKEN covers transfer, transferFrom, approve, increaseAllowance, Permit2 approve, and deposit() / withdraw(uint256) on the chain's own wrapped-native contract (so wrap_eth and unwrap_eth keep working under the cap), the approvals because an unbounded allowance is a drain waiting to happen. Any other calldata sent to a token contract or to Permit2 is refused while the cap is set, because the guard cannot price it; set AGENTWALLET_ALLOW_UNKNOWN_TOKEN_CALLS=1 to allow such calls deliberately. increaseAllowance is judged on the resulting total: the current allowance is read first and the call refuses if it cannot be, so two compliant increments cannot stack a standing allowance above the cap. Calls to other contracts (routers, bridges) pass, since they can only pull what an approval already allowed; a contract counts as "other" only when it demonstrably declines decimals(), so an absurd or malformed answer, or an RPC that cannot be reached, refuses rather than allows. Decimals are resolved locally from the trusted registry, then the token's own decimals(); a token that resolves neither way is evaluated at 0 decimals, the only value that cannot fail open. For a token outside the registry the RPC is the only source of decimals, and an RPC you do not control could scale the amount and the cap together; pin such tokens with AGENTWALLET_TOKEN_DECIMALS (for example 8453:0x<token>=6) and the pin is used everywhere the RPC's answer would have been.
Solana local signing
"env": {
"AGENTWALLET_SOLANA_KEY": "[12,34...]",
"AGENTWALLET_SOLANA_RPC": "https://your-own-rpc",
"AGENTWALLET_MAX_TX_SOL": "1",
"AGENTWALLET_MAX_TX_TOKEN": "25"
}Accepts whichever format you already have: a solana-keygen id.json array, a base58 secret key as exported by Phantom, or base64. Use AGENTWALLET_SOLANA_KEYFILE to point at a file instead. Native SOL and SPL token transfers are both signed locally, and a missing associated token account is created for the recipient automatically.
Set either key, or both. They are independent: run EVM locally and Solana hosted, or the reverse.
An operation with no matching local key is refused, never silently routed to the hosted signer. If you have an EVM key configured and ask for a Solana transfer with no Solana key, the server stops and tells you which variable is missing. Quietly moving funds onto a key you do not hold, while you believe you are in self-custody, is the worst thing this server could do.
About the dependency tree
Local signing uses viem for EVM and @solana/web3.js for Solana, plus bs58 for key parsing. SPL instructions are built by hand rather than with @solana/spl-token, because that package pulls in bigint-buffer, which carries a high severity buffer overflow advisory. A wallet has no business shipping that to save a dozen lines of instruction encoding.
npm audit reports no advisories as of 1.13.5; the overrides in package.json keep two advisories under @solana/web3.js's jayson closed. Earlier releases carried advisories inside @modelcontextprotocol/sdk's HTTP transport dependencies. This server speaks stdio, so that code never loads, and the SDK is not something this package can patch. Run the audit yourself. Publishing a tree you can inspect is the point.
Related MCP server: waiaas
Features
40 MCP tools: create wallets, send transactions, approve tokens, wrap ETH, transfer SPL tokens, quote, discover, pay and accept x402 payments, verify custody mode, and more
Spend policy: rolling daily and monthly budgets, per-host ceilings, host and recipient lists, human approval through MCP elicitation, and a tool allowlist, in one JSON file, enforced from a hash-chained ledger. The key stays yours and the agent still cannot overspend.
EVM + Solana: Ethereum, Base, Polygon, BSC, Arbitrum, Optimism, Avalanche, Zora, PulseChain, Solana, and any other EVM-compatible chain
SOL + SPL tokens: native SOL transfers and SPL token transfers (USDC, USDT, etc.) with automatic account creation
Built-in guards: in hosted mode, daily spending limits, gas price protection, emergency pause and rate limiting are enforced server-side by default. In local mode your protection is the per-transaction caps you set (
AGENTWALLET_MAX_TX_NATIVE,AGENTWALLET_MAX_TX_TOKEN,AGENTWALLET_MAX_TX_SOL,AGENTWALLET_MAX_AUTOPAY). x402 replay protection and on-chain verification apply either wayx402 payments: pay for x402-enabled APIs automatically, or accept x402 payments on your own endpoints (EVM and Solana)
Self-custody option: run local mode and the key never leaves your machine. In hosted mode, keys are encrypted at rest, decrypted only during signing, and zeroed from memory immediately after. Either way you can export and walk away.
Permissionless: No KYC. No KYT. No identity verification. No approval process. No compliance gatekeeping. Sign up, get an API key, and start transacting immediately.
30-second setup: three lines of config. No SDK to install. No dependencies to manage.
Pricing
$0.00345 per operation
6,000 free operations/month
$0.0005 per x402 verification
1,000 free x402 verifications/month
Pay with USDC on-chain via x402, no credit card required
No monthly fee, no tiers, just pay as you go
Competitor comparisons are kept at hifriendbot.com/wallet/#pricing with the date they were last verified. They live there rather than here because a published npm README cannot be corrected when someone else changes their prices.
Quick Start
Get your free API key at hifriendbot.com/wallet, no credit card required, no KYC, no approval wait.
Claude Desktop / OpenClaw
Add to your config:
{
"mcpServers": {
"agentwallet": {
"command": "npx",
"args": ["-y", "agentwallet-mcp"],
"env": {
"AGENTWALLET_USER": "your_username",
"AGENTWALLET_PASS": "your_api_key",
"AGENTWALLET_WALLET_ID": "1"
}
}
}
}
AGENTWALLET_WALLET_IDis optional. Set it to enable x402 auto-pay: when you exceed the free tier without a credit card, the MCP server automatically pays for operations with USDC from this wallet. Only the metered routes (creating a wallet, signing, sending) are paid this way, at mostAGENTWALLET_MAX_AUTOPAY_PER_HOURtimes an hour (default 20), and every automatic payment is reported in the tool result underautopay_payment. A 402 on any other route is reported, never paid.Auto-pay safety cap.
AGENTWALLET_MAX_AUTOPAY(optional, default1) is the most one x402 payment may authorize, in stablecoin units:1means one dollar. It prices registry stablecoins only (USDC, USDT, USDbC, DAI on the supported chains, USDC and USDT on Solana). A requirement in the chain's native asset or in any other token is refused, because "1" measured in ETH is a few thousand dollars; list such assets inAGENTWALLET_AUTOPAY_ASSETS(comma-separated addresses or mints, or the wordnative) to allow them, and the cap then applies in that asset's own units. Any requirement above the cap is rejected instead of paid, so a malformed or tampered payment requirement cannot drain the wallet. This automatic path settlesexactrequirements only; anuptooffer from the API is refused before any wallet call, because paying a usage maximum upfront is not what the offer means (usepay_x402, which signs a Permit2 authorization for it). The cap is the operator's ceiling: amax_paymentargument can lower it for one call but never raise it. Raise the variable itself if you genuinely need larger automatic payments (for example"5"for up to 5 USDC per call).
Claude Code
claude mcp add agentwallet \
-e AGENTWALLET_USER=your_username \
-e AGENTWALLET_PASS=your_api_key \
-e AGENTWALLET_WALLET_ID=1 \
-- npx -y agentwallet-mcpVS Code
Add to your settings:
{
"mcp": {
"servers": {
"agentwallet": {
"command": "npx",
"args": ["-y", "agentwallet-mcp"],
"env": {
"AGENTWALLET_USER": "your_username",
"AGENTWALLET_PASS": "your_api_key",
"AGENTWALLET_WALLET_ID": "1"
}
}
}
}
}Tools
Tool | Description |
| Create a new EVM or Solana wallet |
| List all your wallets |
| Get wallet details by ID |
| Check native token balance on any chain |
| Check ERC-20 or SPL token balance |
| Get ERC-20 token name, symbol, and decimals |
| Send native tokens (ETH, SOL, POL, BNB, etc.) |
| Send ERC-20 or SPL tokens (USDC, USDT, etc.) |
| Sign and broadcast a raw transaction |
| Sign a transaction without broadcasting |
| Read-only contract call (eth_call) |
| Approve ERC-20 token spending for DeFi |
| Check ERC-20 token allowance |
| Wrap native tokens to WETH/WAVAX/etc. |
| Unwrap WETH back to native tokens |
| Pay x402 invoices (exact via EIP-3009, upto via Permit2), with approvals above the cap |
| What an x402 endpoint charges and whether the cap, policy and budgets would allow it; nothing signed |
| Find x402-paid APIs by subject in the public x402 index (the Bazaar) |
| Spends on the ledger with their outcomes, newest first |
| The ledger as CSV or JSONL for expense records |
| The policy in force, its sha256, budgets spent and remaining, ledger integrity |
| Dry-run an EVM transaction: guards, policy, gas estimate, fee, return data, nothing signed |
| Status of a human approval created by an over-cap |
| One-time token approval to Permit2 for |
| Honeypot, tax, owner-power and holder-concentration flags for a token |
| Create an x402 paywall to charge for a resource |
| List all your x402 paywalls |
| Get paywall details by ID |
| Update paywall pricing, resource, or status |
| Delete a paywall |
| View payment history for a paywall |
| Aggregate revenue stats across all paywalls |
| Report whether signing is local (self-custody) or hosted, and which address is in use |
| How to export a hosted wallet key and move to self-custody |
| Buy x402 verification credits with USDC on-chain |
| Check your monthly usage and billing |
| List all supported chains |
| Emergency pause a wallet |
| Resume a paused wallet |
| Delete a wallet |
Supported Chains
Chain | ID | Native Token | Stablecoin |
Ethereum | 1 | ETH | USDC |
Base | 8453 | ETH | USDC |
Polygon | 137 | POL | USDC |
BSC | 56 | BNB | USDT |
Arbitrum | 42161 | ETH | USDC |
Optimism | 10 | ETH | USDC |
Avalanche | 43114 | AVAX | USDC |
Zora | 7777777 | ETH | USDC |
PulseChain | 369 | PLS | USDC |
Solana | 900 | SOL | USDC |
Solana Devnet | 901 | SOL | USDC |
Use Case: GuessMarket
Pair with guessmarket-mcp to let your AI agent trade prediction markets:
Create a wallet on Base
Approve USDC spending
Buy YES/NO shares on prediction markets
Provide liquidity and earn trading fees
Claim winnings
All on-chain. All through MCP. No frontend needed.
x402 Payments
AgentWallet speaks the x402 open payment standard the way the spec defines it. When your Ai agent hits an API that answers HTTP 402, pay_x402 does the whole flow:
Fetches the URL and reads the payment requirements, from the v2
PAYMENT-REQUIREDheader or the v1 JSON body.Picks an
exactoption (you can steer it withprefer_chain).Signs an EIP-3009
TransferWithAuthorizationfor exactly that amount. Nothing is broadcast and no gas is paid by the payer; the endpoint's facilitator settles it on-chain.Retries the request with the payment header (
PAYMENT-SIGNATUREfor v2,X-PAYMENTfor v1).Returns the response, the settlement receipt (
PAYMENT-RESPONSE/X-PAYMENT-RESPONSE) and, if the endpoint declined, its stated reason inretry_error.
Verified against Coinbase's public facilitator (isValid: true for v1 and v2 payloads) and live x402 servers on Base. Works in both custody modes: the local key signs in-process; hosted wallets sign through POST /wallets/{id}/x402/authorize, a narrow endpoint that only ever signs this one struct and runs the same pause and token-cap checks as a transfer.
pay_x402(
url="https://api.example.com/premium-data",
wallet_id=1,
max_payment="1.00"
)max_payment lowers the cap for one call. It cannot raise it: AGENTWALLET_MAX_AUTOPAY (default 1) is the operator's ceiling, and a max_payment above it is ignored and reported back as max_payment_ignored, so neither a malicious 402 endpoint nor a prompt-injected agent can authorize more than the operator allowed. Hosted wallets can go above the ceiling only through an emailed owner approval (below); local mode raises the variable. In local mode AGENTWALLET_MAX_TX_TOKEN applies to authorizations too, because an authorization is a transfer somebody else executes. Authorizations are valid for at most AGENTWALLET_X402_MAX_TIMEOUT seconds (default 3600) however long the endpoint asks for, and a repeat pay_x402 call for the same endpoint, amount and recipient inside that window re-sends the earlier signature instead of signing a second one (its nonce is single-use, so a server that withheld the resource after settling cannot be paid twice; pass fresh_authorization=true to force a new one). The label shown for the asset comes from the registry or the chain, never from the 402 body.
Schemes. exact (EIP-3009, gasless for the payer) is preferred and works on every EVM chain AgentWallet knows. upto (a Permit2 maximum the seller settles at actual usage) is signed as a PermitWitnessTransferFrom bound to the endpoint's facilitator; it needs a one-time approve_permit2 per token (or AGENTWALLET_PERMIT2_AUTO_APPROVE=1). An upto option without extra.facilitatorAddress is refused, never approximated with an upfront transfer. Native-asset and Solana requests, and AgentWallet's own paywalls, are paid by an on-chain transfer proved by transaction hash, which is what those servers verify.
Approvals above the cap. On a hosted wallet, a payment above the cap does not have to fail. With request_approval (default on; AGENTWALLET_APPROVALS=0 turns it off) the wallet owner gets an email with approve and deny links, pay_x402 returns an approval_id, and the agent retries with it once check_approval says approved. An approval is bound to one wallet, chain, asset, recipient and maximum, expires in 24 hours, and is consumed by one signature. Local mode has no approval channel: the caps in your environment are the policy, and an approval_id passed there is refused.
Asset risk. check_token_risk (and every approve_token result) reports honeypot, tax, owner-power, verified-source, holder-concentration and liquidity flags from GoPlus Security, with an on-chain fallback. A warning for the caller to weigh, never a block.
Proof. Real settlements are listed in PAYMENTS.md; the first is a 0.02 USDC exact payment on Base with the facilitator paying the gas.
Pay any x402 API from Claude in three steps
Add the server (one of the snippets under Quick Start). Self-custody: set
AGENTWALLET_PRIVATE_KEYto a key that holds USDC on Base. Hosted:AGENTWALLET_USERandAGENTWALLET_PASSfrom hifriendbot.com/wallet.Ask: "Use pay_x402 to POST https://api.ozdreamtools.de/api/holidays with body {"year":2026,"state":"BY"} and a max_payment of 0.05."
Read the result:
payment_made: true, the amount,payment_method, andsettlement.transaction, the on-chain hash. No ETH needed forexact: the endpoint's facilitator pays the gas.
Token domains. The EIP-712 domain comes from the endpoint's extra.name / extra.version, then a short registry of USDC deployments, then the token contract's own name() / version(). If none of those answer, the payment is refused rather than signed with a guessed domain.
Delegated payers. If the paying address is an EIP-7702 delegated account, pay_x402 reports it in payer_delegation (the delegate and whether it answers ERC-1271). A delegate without ERC-1271 is declined by facilitators that check account code before recovering the signer, and the reason they return reads like a signature fault; the warning names the real cause. Pay from a plain EOA for reliable settlement.
x402 Acceptance
AgentWallet also lets you accept x402 payments. Create a paywall, point it at any resource, and get a public URL that charges agents automatically:
create_paywall(
wallet_id=1,
name="Premium API",
amount="0.01",
token_name="USDC",
token_address="0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
chain_id=8453,
resource_url="https://your-api.com/data"
)When an agent hits the paywall URL:
Gets back HTTP 402 with payment requirements
Pays on-chain using
pay_x402(or any x402-compatible client)Retries with proof of payment
Receives the protected content
On-chain verification ensures every payment is real. Replay protection prevents double-spending. Revenue tracking shows you who paid, how much, and when. 1,000 free verifications/month, then $0.0005 each. See the pricing comparison for how that stacks up.
How We Compare
Feature | Coinbase CDP | AgentWallet |
Setup Time | Install SDK + configure | 3 lines of config |
Approval Process | Identity verification required | None, instant access |
KYC Required | Yes | No |
KYT / Transaction Monitoring | Yes | No |
Can Block Your Wallet | Yes | No |
Built-in Guards | Yes (requires setup) | Yes (hosted: active by default; local: env caps you set) |
Free Operations / Month | 5,000 | 6,000 |
Cost Per Operation | $0.005 | $0.00345 |
x402 Verification Cost | $0.001 | $0.0005 |
Free x402 Verifications / Month | 1,000 | 1,000 |
x402 Acceptance (Paywalls) | No | Yes |
Pay for API Fees with Crypto | No (credit card only) | Yes (USDC via x402) |
Supported Chains | 8 EVM + Solana | Any EVM + Solana |
Token Tools | Yes | ERC-20 + SPL (34 tools) |
MCP Server | Yes | Yes |
Pay with Crypto, No Credit Card Required
AgentWallet is the only AI agent wallet infrastructure that accepts crypto for its own API fees. Every competitor, Coinbase CDP, Circle, MoonPay, Crossmint, Turnkey, requires a credit card or monthly invoice. With AgentWallet, your agent can pay for operations with USDC on-chain via the x402 protocol. No credit card, no invoice, no billing portal. Just on-chain payments.
When your agent exceeds the free tier (6,000 ops/month) without a credit card configured, the API returns HTTP 402 with USDC payment instructions. Your agent pays on-chain, retries with proof of payment, and the operation executes. Fully automated via the MCP server.
You can also pre-purchase x402 verification credits with USDC using the buy_verification_credits tool, keeping your paywalls running beyond the free 1,000 verifications/month without needing a credit card.
Built-in Guards
Which guards apply depends on who holds the key.
Hosted mode (the server holds the key): every guard below is active by default, no configuration required.
Encrypted at rest: private keys encrypted before storage and never leave the server
Memory zeroing: keys wiped from memory immediately after every signing operation
Daily spending limits: set a per-wallet daily cap in USD, enforced by the server on every transaction
Gas price protection: transactions blocked when gas prices spike above safe thresholds
Emergency pause: instantly freeze any wallet or all wallets with one click
Rate limiting: API requests capped per minute to prevent abuse and brute force attacks
Local mode (you hold the key): there is no server in the signing path, so the server-side limits and pause above cannot see or stop a locally signed transaction, and nobody (including us) can freeze a local wallet. Your protection is the per-transaction caps enforced inside your own process before anything is signed. Set them before you fund the wallet; an unset cap means no limit.
AGENTWALLET_MAX_TX_NATIVE: ceiling per transaction in native units (ETH, MATIC, and so on)AGENTWALLET_MAX_FEE_NATIVE: the most one transaction may burn in fees, gas x max fee per gas, in native units (default0.01). The value cap alone did not bound fees: a node answering an absurd tip or gas estimate could take the whole balance as priority fee on a cap-compliant transfer. Caller-suppliedgas_limit/max_fee/priority_feeare honoured and then bounded by this capAGENTWALLET_MAX_TX_TOKEN: ceiling per ERC-20 transfer or approval, in human units of the tokenAGENTWALLET_ALLOW_UNKNOWN_TOKEN_CALLS: set to1to let calldata the token cap cannot price reach a token contract or Permit2 (refused by default while the cap is set)AGENTWALLET_TOKEN_DECIMALS: pin decimals for tokens outside the registry (8453:0x<token>=6,<mint>=9); a pin is used for amounts and caps instead of asking the RPCAGENTWALLET_MAX_TX_SOL: ceiling per native SOL transfer (also charged for the rent of a recipient token account an SPL send has to create). It does not cover SPL token amounts:AGENTWALLET_MAX_TX_TOKENdoes, on Solana as on EVMAGENTWALLET_MAX_AUTOPAY: ceiling per x402 auto-payment in stablecoin units (default1);AGENTWALLET_AUTOPAY_ASSETSopts native or non-stable assets in;AGENTWALLET_X402_MAX_TIMEOUTbounds how long a signed authorization stays valid (default 3600 seconds)AGENTWALLET_SOLANA_RPC_<chainId>(orAGENTWALLET_SOLANA_RPCfor all clusters): the RPC's genesis hash is checked against the chain id before anything is sent, and an EVM RPC'seth_chainIdlikewise, so one URL cannot silently serve a different network than the one requestedAGENTWALLET_TOKEN_RISK=0: skip the GoPlus lookupapprove_tokenperforms (a third-party call that reveals which token you are about to approve)AGENTWALLET_CHAIN_ID: the EVM chain used when a call names none (default 8453)AGENTWALLET_LEGACY_PAYWALL_ORIGINS: comma-separated https origins whose legacy-shaped 402 may be settled by an on-chain transfer proved by hash; every other host gets a signed authorizationAGENTWALLET_POLICY: a spend policy file (see below) that bounds sums, hosts, recipients, chains, assets and tools;AGENTWALLET_LEDGERnames the ledger it is enforced fromAGENTWALLET_KEYFILE_PASSPHRASEorAGENTWALLET_KEYFILE_PASSPHRASE_FILE: opens an encrypted keyfile (see below)AGENTWALLET_WEBHOOK_URL(https, or http on localhost) andAGENTWALLET_WEBHOOK_SECRET: every ledger line is POSTed as JSON, signedX-AgentWallet-Signature: sha256=<hmac>when a secret is set; a webhook never delays or fails a signature
Every AGENTWALLET_* variable is validated at startup: a malformed cap stops the server rather than reading as "no limit", and an unrecognised name (a misspelled cap) stops it too. wallet_mode reports every guard with its parsed value. Tool arguments are strict: an unknown argument name (a typo in max_payment) is an error, never silently ignored. pay_x402 signs one live authorization per resource; a second, different requirement for the same resource is refused until the first expires unless fresh_authorization is passed. Node.js 22.19 or newer is required.
Spend policy: bounding sums, not just single payments
A per-transaction cap bounds one signature. It cannot see that the five hundredth payment of 0.99 under a cap of 1 is the five hundredth. A spend policy can. Point AGENTWALLET_POLICY at a JSON file:
{
"version": 1,
"name": "research agent",
"budget": { "daily": "5", "monthly": "50" },
"native_budget": { "8453": { "daily": "0.01" } },
"hosts": { "allow": ["*.example.com", "api.ozdreamtools.de"], "deny": ["evil.example.com"] },
"per_host": { "*.example.com": { "daily": "2", "per_payment": "0.25" } },
"recipients": { "deny": ["0x0000000000000000000000000000000000000000"] },
"chains": { "allow": [8453, 900] },
"approval": { "above": "0.50", "max": "20" },
"tools": { "allow": ["pay_x402", "quote_x402", "discover_x402", "get_balance", "list_payments", "spend_policy", "wallet_mode"] }
}budget: rolling dollar budgets (last 24 hours, last 30 days, lifetime) across every chain, counting x402 payments, stablecoin transfers and stablecoin approvals in registry stablecoins. A spend the budget cannot price (a token outside the registry) is refused while a budget is set, unless"unpriced_spends": "allow". An SPL send is priced at the mint's own decimals; atoken_decimalshint that disagrees with the mint is refused before any request is made.native_budget: the same per chain, in the chain's own coin, counting native transfers and the native value sent into any contract (wrap_eth,send_transactionwith value and calldata), including value carried on a token transfer or approval call (a payable token contract keeps it, so it is a second spend, to that contract).Approvals are spends. An ERC-20 allowance (
approve_token,approve_permit2,increaseAllowance,approveAndCall, Permit2approve, or the same calldata throughsend_transaction) is what the spender will take later, so it is priced, checked and reserved on the ledger when it is granted, the spender is checked against the recipient lists, and an unlimited approval (2^128 base units or more) is refused outright, since no budget can count it; grant an exact amount. A zero-value call to any other contract (a router, a bridge) reserves nothing: it can only pull what an approval already granted.hosts,per_host: which endpointspay_x402may pay, and how much per host per day, per month and per payment. A denied host is never contacted, not even for a quote. A host is matched by its canonical DNS name (lowercase, the root label's trailing dot removed), soapi.example.com.and its percent-encoded spelling areapi.example.comto every list and to the ledger's per-host sums.recipients: where funds may go (transfers, x402payTo, approval spenders, contracts that receive native value). The allow list covers those funds destinations; the contract a zero-value call is aimed at (a token being approved, a router) is checked against the deny list and the chain list.chains,assets: allow lists; an asset entry can be scoped"8453:0x..."or be the wordnative.approval: aboveabove, every x402 payment is put to the human at the MCP client through elicitation (the client shows the amount, token, recipient and resource and asks yes or no; a client that declared no elicitation support cannot answer, so the payment is refused). In local mode an accepted answer may admit a payment above the per-payment cap, up tomax. Budgets are never lifted by anyone's approval.tools: the tools the model sees. A payer-only deployment exposes seven; the rest are not registered.wallet_modeandspend_policyare always present so the operator can see what the server is.
An unknown key stops the server, so a misspelled budgets cannot run unbounded. spend_policy reports the file, its sha256 (compare it with the file you reviewed), what each budget has spent and has left, and which tools the policy hid. quote_x402 answers "would this be paid?" for a URL before anything is signed.
The ledger. Budgets are enforced from an append-only, hash-chained JSONL file (AGENTWALLET_LEDGER, or the policy's ledger, or agentwallet-ledger.jsonl beside the policy when a budget needs one). A spend is reserved on it before the signature exists; a reservation whose signing fails is voided by a later line; the endpoint's or chain's answer is settled onto it afterwards. A spend that may already be on the wire (a broadcast that failed after the bytes left, a hosted request the API host took and then dropped) is kept counted as unknown rather than voided; a failure before anything left this process, including a policy or local-mode refusal, is always voided and never consumes budget. The chain is verified on every read, and a ledger that does not verify refuses every spend until the operator has looked at it. Several agentwallet-mcp processes may share one ledger (two MCP clients on one wallet): the file is re-read before every check, and the check-and-append step holds an exclusive lock file (<ledger>.lock) across processes, so the budget is one budget however many processes enforce it; a lock older than 30 seconds is treated as left by a dead process. A transaction signed without being broadcast (sign_transaction) is reserved and counted like a send, since whoever holds it can broadcast it. A call that moves two things (a token transfer that also carries native value) is two lines, reserved in turn and released together when either is refused. list_payments reads it, export_receipts turns it into CSV or JSONL, and AGENTWALLET_WEBHOOK_URL receives every line as it is written.
Encrypted keyfiles
A plaintext key in a shell config or a file is readable by anything that can read the disk. Seal it:
npx agentwallet-mcp encrypt-keyfile ./plain.key ./agent.keyfileThe passphrase is asked for on the terminal (or taken from AGENTWALLET_KEYFILE_PASSPHRASE for scripted use); scrypt derives the key and AES-256-GCM seals the material, with Node's own crypto and no new dependency. Point AGENTWALLET_KEYFILE or AGENTWALLET_SOLANA_KEYFILE at the result, set AGENTWALLET_KEYFILE_PASSPHRASE or AGENTWALLET_KEYFILE_PASSPHRASE_FILE, confirm with wallet_mode that the same address appears, then delete the plaintext. A wrong passphrase fails with a fixed message that never includes the key.
Either mode, for x402 paywalls you run through the hosted API:
Replay protection: every x402 payment verified on-chain with unique transaction tracking
On-chain verification: x402 payments verified directly on the blockchain with finalized commitment
Bug bounty program: $50 to $500 for responsible disclosure (details).
Links
Website: hifriendbot.com/wallet
npm: agentwallet-mcp
Security: security@hifriendbot.com, policy and disclosure history in SECURITY.md
Security
pay_x402 validates the target URL before every outbound request and again on
each redirect hop. IP literals are canonicalized (including IPv4-mapped IPv6
such as [::ffff:127.0.0.1]) and hostnames are resolved, with loopback,
private, link-local, carrier-grade NAT, multicast and cloud-metadata
destinations refused.
Validation and connection use the same DNS answer. Each hop resolves once, and
the socket is pinned to an address from that answer, so a hostname cannot
resolve public for the check and private for the connection. The hostname is
still used for the Host header and for TLS SNI and certificate validation, so
pinning is invisible to legitimate endpoints.
Credentials stay with the origin they were given to. If an endpoint redirects
pay_x402 to a different origin, the caller-supplied Authorization, Cookie
and X-PAYMENT headers, and every other custom header, are dropped before the
next hop; only content-negotiation headers (Accept, Accept-Language,
Accept-Encoding, User-Agent, Content-Type) are carried. A redirect that
turns a POST into a GET also sheds the body headers. Same-origin redirects keep
everything, as a browser would.
Report security issues privately to security@hifriendbot.com.
License
MIT
Available Tools
40 toolsapprove_permit2A
One-time ERC-20 approval of a token to the Permit2 contract, needed before paying x402 "upto" endpoints with that token. A normal on-chain transaction (needs gas). By default approves the maximum, the ecosystem norm, so it never has to be repeated; pass amount to grant a bounded allowance instead (required under AGENTWALLET_MAX_TX_TOKEN and under a spend policy, both of which refuse a max approval; under a policy the allowance counts against the budgets). Permit2 itself only moves what each signed authorization allows.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | ERC-20 token address (e.g. USDC on Base) | |
| amount | No | Allowance to grant in human units (e.g. "100"). Omit for unlimited. | |
| chain_id | Yes | Chain ID | |
| wallet_id | Yes | Wallet ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it discloses that this is an on-chain transaction needing gas, that the default is a maximum approval (the ecosystem norm, so no repeat), that max approvals are refused under certain configs, and that allowance under a policy counts against budgets. This is exactly the kind of operational context annotations would otherwise supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then gas, then default behavior, then the amount caveat. It is dense and the trailing sentence about Permit2's own limits borders on tangential, but every sentence carries real information for correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-annotation, no-output-schema mutation tool, the description covers everything needed: what it does, that it costs gas, the default allowance and its policy implications, and the safety mechanism (Permit2 only moves what signed authorizations allow). Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the schema documents all four parameters. The description still adds value beyond it by explaining the semantics of omitting amount (unlimited) versus passing it (bounded allowance) and the policy consequences of each, which goes past the schema's terse 'Omit for unlimited.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (approve) plus a precisely scoped resource (ERC-20 token to the Permit2 contract), and the 'Permit2' qualifier distinguishes it from the sibling approve_token. An agent can tell exactly what operation this performs without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when it is needed ('before paying x402 upto endpoints with that token') and when to deviate ('pass amount ... required under AGENTWALLET_MAX_TX_TOKEN and under a spend policy'). It stops short of naming the alternative tool (approve_token) or when not to use this at all, so it is clear context without explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_tokenA
Approve a spender contract to transfer ERC-20 tokens on your behalf. Required before interacting with any DeFi protocol (DEXs, lending, etc.). Use amount "max" for unlimited approval, or specify an exact amount. Under a spend policy an approval is a spend: it counts against the budgets, the spender is checked as a recipient, and "max" is refused.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | ERC-20 token contract address | |
| amount | Yes | Amount to approve in human-readable format (e.g. "1000"), or "max" for unlimited | |
| spender | Yes | Contract address to approve as spender | |
| chain_id | Yes | Chain ID | |
| decimals | No | Token decimals. Resolved from the registry or the token contract when omitted; if given, it must match | |
| wallet_id | Yes | Wallet ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden and does well: it discloses that an approval counts as a spend against budgets, that the spender is checked as a recipient, and that 'max' is refused under a spend policy. These are non-obvious behavioral constraints beyond the schema. It omits that this is an irreversible on-chain transaction requiring gas, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core action, then usage context, then the amount convention, then policy behavior. Every sentence carries information and there is no filler, though it could be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation with no annotations and no output schema, the description covers purpose, usage trigger, and policy behavior well. It leaves gas/on-chain irreversibility and the absence of a meaningful return value unstated, which are minor gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter including the 'max' convention for amount. The description's mention of 'max' and 'spender contract' largely restates the schema, adding only the spend-policy framing. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Approve a spender contract to transfer ERC-20 tokens on your behalf.' An agent knows exactly what the tool does. It does not, however, distinguish itself from close siblings like approve_permit2 or check_approval, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use context: 'Required before interacting with any DeFi protocol (DEXs, lending, etc.).' This is meaningful routing guidance. It stops short of naming alternatives (e.g. approve_permit2 for Permit2 flows) or stating when this tool is the wrong choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buy_verification_creditsA
Buy x402 verification credits with USDC on-chain. Paywall owners need credits to process verifications beyond the free tier (1,000/month) when they don't have Stripe billing configured. Returns 402 payment instructions — pay on-chain and retry with proof.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of verification credits to purchase (min 100, default 1000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that this is a purchase transaction requiring on-chain payment with USDC and returns payment instructions, but lacks details on costs, rate limits, or error handling. The description adds some behavioral context but is incomplete for a financial transaction tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that are front-loaded with the core action and usage context, with no wasted words. Every sentence adds value by explaining the tool's purpose and behavioral outcome efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description covers the purpose and usage well but lacks details on costs, transaction confirmation, or error cases. For a financial tool with on-chain interactions, this leaves gaps in behavioral transparency, though it's adequate for basic understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the 'count' parameter. The description doesn't add parameter details beyond the schema, but it contextually explains that credits are for verification beyond the free tier, which helps interpret the parameter's purpose. With 1 parameter and high schema coverage, baseline 3 is appropriate, but the added context justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Buy x402 verification credits with USDC on-chain'), identifies the resource ('verification credits'), and distinguishes it from siblings by focusing on credit purchasing for paywall owners, unlike tools like 'create_paywall' or 'get_usage'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool: for paywall owners needing credits beyond the free tier (1,000/month) without Stripe billing. It also implies when not to use it (if within free tier or with Stripe), though it doesn't name specific alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
call_contractA
Execute a read-only call against a smart contract (eth_call). Returns the raw hex result. Does not cost gas or modify state. Useful for reading on-chain data like token balances, prices, positions.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Contract address | |
| data | Yes | ABI-encoded calldata (0x-prefixed hex) | |
| chain_id | Yes | Chain ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does an excellent job disclosing key behavioral traits: it explicitly states the operation is read-only, doesn't cost gas, doesn't modify state, and returns raw hex results. This covers safety, cost, and output format effectively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly front-loaded with the core functionality in the first sentence, followed by important behavioral details, and ends with a practical use case. Every sentence adds value with zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no annotations and no output schema, the description provides excellent context about behavior, safety, and use cases. The only minor gap is not explicitly mentioning potential error cases or limitations, but it's otherwise quite complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description doesn't add any meaningful parameter semantics beyond what's in the schema descriptions, maintaining the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('execute a read-only call against a smart contract'), the resource ('smart contract'), and the method ('eth_call'). It distinguishes from sibling tools like 'send_transaction' or 'sign_transaction' by emphasizing read-only nature and no state modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('useful for reading on-chain data like token balances, prices, positions') and implicitly distinguishes it from write operations. However, it doesn't explicitly name alternatives or specify when not to use it beyond the read-only emphasis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_approvalA
Status of a payment approval created when pay_x402 exceeded the cap on a hosted wallet. Returns pending, approved, denied or expired. Once approved, call pay_x402 again with approval_id.
| Name | Required | Description | Default |
|---|---|---|---|
| approval_id | Yes | Approval id returned by pay_x402 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden, and it discloses the state machine (pending/approved/denied/expired) plus the follow-up call required on approval. It omits whether the call is a safe read, any auth/permission requirement, and polling or expiry timing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler; the lifecycle constraint and the returned states are front-loaded, and the follow-up instruction is last where it belongs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must (and does) enumerate the return states and explain the resulting action per state. Combined with the one documented parameter, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single approval_id parameter, so the baseline is 3. The description reinforces where the id comes from ('call pay_x402 again with approval_id'), but adds no format or validation detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (check the status of a payment approval) and explains the exact origin of that resource: an approval created when pay_x402 exceeded the hosted-wallet cap. This is clearly distinguishable from siblings like pay_x402, approve_token, and list_payments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the operative context (only relevant after pay_x402 hit the cap) and an explicit next action: re-call pay_x402 with approval_id once approved. It stops short of saying whether the agent should poll, how long to wait, or what to do on denial/expiry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_token_riskA
Assess an ERC-20 token before approving or swapping it: honeypot, taxes, owner powers, verified source, holder concentration, DEX liquidity. Uses GoPlus Security (free, no key) with an on-chain fallback. A warning for the caller to weigh, never a block.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | ERC-20 token contract address | |
| chain_id | Yes | Chain ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and provides substantive behavioral context: it uses GoPlus Security (free, no key) with an on-chain fallback, and the result is 'a warning for the caller to weigh, never a block.' This discloses data sources, auth requirements, and the advisory nature of the output. It does not mention rate limits or latency, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then the usage context, followed by implementation details and behavioral caveats. Every sentence earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only advisory tool with two parameters and no output schema, the description covers purpose, data sources, fallback, and output nature ('a warning'). It does not describe the return structure beyond the warning nature or specify supported chains, leaving a small gap since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters well. The description adds nothing beyond what the schema provides about parameter syntax or semantics, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Assess) and resource (ERC-20 token) and enumerates the exact risk dimensions checked: honeypot, taxes, owner powers, verified source, holder concentration, DEX liquidity. This clearly distinguishes it from sibling tools like get_token_info or simulate_transaction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage context: 'before approving or swapping it.' This tells the agent when to invoke the tool. However, it does not name alternatives or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_paywallA
Create an x402 paywall that charges agents/clients for accessing a resource. Returns a public access URL that returns HTTP 402 until paid. Agents pay on-chain, then retry with proof to get the content.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable paywall name (e.g. "Premium API Access") | |
| amount | Yes | Price in human-readable format (e.g. "0.01" for 0.01 USDC) | |
| chain_id | No | Chain ID for payments (8453=Base, 1=Ethereum, etc.) | |
| wallet_id | Yes | Wallet ID to receive payments | |
| token_name | No | Token display name (e.g. "USDC", "ETH") | USDC |
| token_type | No | "erc20" for EVM stablecoins, "spl" for Solana SPL tokens, "native" for ETH/SOL/POL/etc. | erc20 |
| description | No | Description shown in the 402 response | |
| resource_url | Yes | URL of the protected resource to serve after payment verification | |
| resource_mime | No | MIME type of the resource (e.g. "application/json", "text/plain") | application/json |
| token_address | No | Token contract address (ERC-20 for EVM, SPL mint Base58 for Solana). Required if token_type is "erc20" or "spl". Use get_chains to find stablecoin addresses. | |
| token_decimals | No | Token decimals. Defaults to the chain native decimals for "native", else 6 (USDC); set it for any other token |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers real behavioral context: it returns a public access URL that responds HTTP 402 until paid, and describes the on-chain pay-then-retry flow. It omits persistent-record side effects, auth/wallet prerequisites, and error behavior, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the core action front-loaded ('Create an x402 paywall that charges...'). The subsequent sentences on the 402 response and payment flow each add value rather than repeating the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter creation tool with no annotations and no output schema, the description compensates by describing the return value (public access URL) and the 402/retry semantics an agent needs. Gaps remain around prerequisites and side effects, but the essential model is conveyed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 11 parameters are already documented in the schema, including defaults, enum values, and the get_chains cross-reference for token_address. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create an x402 paywall') and clarifies what the artifact does. The verb 'create' separates it from list_paywalls/update_paywall/delete_paywall/get_paywall. It stops short of explicitly naming alternatives, so a 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the payment flow a client follows (pay on-chain, retry with proof), which implies the tool's role. However, it gives no explicit when-to-use guidance or exclusions against siblings like update_paywall or pay_x402. Usage is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_walletA
Create a new EVM or Solana wallet. Returns the wallet ID and address. Private key is encrypted server-side and never exposed.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Friendly name for the wallet | |
| chain_id | No | Default chain ID (1=Ethereum, 8453=Base, 42161=Arbitrum, 10=Optimism, 137=Polygon, 43114=Avalanche, 56=BSC, 7777777=Zora, 369=PulseChain, 900=Solana, 901=Solana Devnet) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and adds valuable behavioral context: it specifies that private keys are encrypted server-side and never exposed, which is critical security information. However, it lacks details on error conditions, rate limits, or authentication requirements, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by a concise security detail. Both sentences earn their place by providing essential information without redundancy, making it efficiently structured and appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is moderately complete: it covers the creation action and security aspect but misses details like return format (beyond mentioning ID and address), error handling, or dependencies. For a tool with 2 parameters and no structured safety hints, it should do more to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the two parameters (label and chain_id). The description adds no additional parameter semantics beyond what's in the schema, meeting the baseline of 3 for high coverage without extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create') and resource ('new EVM or Solana wallet'), specifying it generates wallet ID and address. It distinguishes from siblings like 'get_wallet' or 'list_wallets' by being a creation tool, though it doesn't explicitly contrast with other creation tools (e.g., 'create_paywall').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through context: it's for creating wallets when needed, with no explicit guidance on when to use it versus alternatives like importing or retrieving existing wallets. It doesn't mention prerequisites (e.g., authentication) or exclusions, leaving usage decisions to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_paywallB
Delete an x402 paywall. The access URL will return 404 after deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| paywall_id | Yes | Paywall ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the outcome ('access URL will return 404 after deletion'), which is useful, but fails to mention critical aspects like whether deletion is permanent, requires specific permissions, has rate limits, or what happens to associated data (e.g., payments). This leaves significant gaps for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences with zero wasted words. It front-loads the core action and immediately follows with a key behavioral consequence, making it easy to parse and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations and no output schema, the description is incomplete. It omits details on permissions, irreversibility, error handling, and response format, which are critical for safe and effective use. The provided context is insufficient given the tool's complexity and lack of structured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter 'paywall_id' fully documented in the schema. The description does not add any meaning beyond the schema (e.g., format examples or constraints), so it meets the baseline of 3 where the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Delete') and target resource ('an x402 paywall'), distinguishing it from sibling tools like 'create_paywall', 'update_paywall', 'get_paywall', and 'list_paywalls'. It precisely communicates the tool's function without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'update_paywall' or 'pause_wallet', nor does it mention prerequisites (e.g., needing the paywall ID) or warn about irreversible deletion. It lacks explicit usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_walletA
Delete (soft-delete) a wallet. The wallet will no longer appear in listings and cannot be used for transactions. The wallet is read first and the delete names its address, so a wallet that cannot be read is never deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet_id | Yes | Wallet ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose substantial behavior: it is a soft-delete (data retained), the wallet disappears from listings, transactions are blocked, and there is a read-before-delete safety guard that refuses to delete an unreadable wallet. It omits permission/auth requirements and does not explicitly confirm whether the change is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loading the operation and its key qualifier ('soft-delete') before the behavioral consequences and safety guarantee. Every sentence carries distinct, non-redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations and no output schema, the description covers the mutation's effect and the safety guard reasonably well. It leaves minor gaps around authorization requirements and recoverability, but nothing that would cause an agent to call it incorrectly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single well-described wallet_id, so the structured field already documents the parameter fully. The description adds no syntax, format, or constraint beyond the schema, which is the expected baseline when coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete ... a wallet') and immediately qualifies it as a soft-delete, which distinguishes it from a hypothetical hard delete. Combined with the sibling list, an agent can identify this as the wallet-removal tool without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the consequence of the operation but never states when to choose this over alternatives such as pause_wallet/unpause_wallet, nor when not to use it. Usage is only implied by the mutating verb, leaving the agent to infer the decision context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_x402A
Find x402-paid APIs by subject in the public x402 index (the Bazaar published by the CDP facilitator). Returns resources with their method, price and chain, re-priced from this client's own registry. Listings are sellers' own words. Nothing is paid; follow up with quote_x402 or pay_x402.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many matches to return | |
| query | No | Words that must all appear in the resource URL, service name, description or tags (case-insensitive) | |
| offset | No | Index offset to continue from (use next_offset from the previous call) | |
| chain_id | No | Only resources payable on this chain |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that results are read-only/no-cost, that prices are re-derived from the client's own registry, and that listing text is unverified seller-authored content — a real data-quality caveat. It stops short of describing rate limits, index freshness, or result cap behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the core action, then scope, then return shape, then the routing caveat. No filler; each sentence adds a distinct fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by naming the returned fields (method, price, chain) and flagging the provenance caveat, while the schema itself covers offset/next_offset pagination. Still missing any note on empty-result or truncation behavior, but broadly complete for a read-only search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter (limit, query, offset, chain_id) is already documented in the schema, and the description adds little syntax detail. 'By subject' loosely maps to query and the return fields (method, price, chain) hint at chain_id's purpose, but this is baseline territory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Find') plus a precisely scoped resource ('x402-paid APIs by subject in the public x402 index — the Bazaar published by the CDP facilitator'). It is clearly distinguishable from the payment-oriented siblings quote_x402 and pay_x402.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent this tool does not spend money ('Nothing is paid') and routes to the correct next step ('follow up with quote_x402 or pay_x402'). The when-to-use (discovery) and when-not-to-use (anything involving payment) boundaries are both stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_receiptsA
Every spend in the ledger as CSV or JSONL text (oldest first), for expense records. Returns the text; write it wherever it belongs.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | ISO 8601 lower bound | |
| until | No | ISO 8601 upper bound | |
| format | No | csv |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two real behavioural traits: the result is text rather than a written file ('write it wherever it belongs') and rows are ordered oldest first. It does not state whether the export is complete or paginated when since/until are omitted, nor any permission or rate constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the resource and scope, and the second sentence carries the non-obvious return-behaviour detail. The trailing 'for expense records' is mildly redundant but does add framing, so no significant waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly takes on the return-value burden by stating the export is returned as text and is ordered oldest first. It leaves open what 'every spend' means when both bounds are omitted, but otherwise the agent has what it needs for a zero-required-parameter read export.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%; the since/until ISO 8601 bounds are described in the schema itself. The description compensates for the undocumented format parameter by stating the output is 'CSV or JSONL text', clarifying both the allowed values and that the result is a text payload.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (export) and resource (receipts) plus the content that is exported: every spend in the ledger. This is clear enough to call the tool, but it does not explicitly distinguish itself from near neighbours like list_payments or get_usage, leaving the agent to infer the difference from the word 'export'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for expense records' implies the intended use case, so usage is inferable, but there is no explicit when-to-use, when-not-to-use, or named alternative among the many payment/usage/ledger siblings. An agent must guess whether this or list_payments is the right source.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_wallet_keyA
Explain how to export the private key of a hosted (custodial) AgentWallet so it can be moved to self-custody or any other wallet. Export itself is deliberately human-gated and is not performed by this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet_id | No | Hosted wallet ID to export |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it discloses a critical behavioral trait: the export is 'deliberately human-gated and is not performed by this tool.' That prevents an agent from assuming a key is returned. It does not, however, say what the tool does return (instructions/URL, etc.).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences; the key clarification (that the tool only explains, and export is human-gated) is front-loaded. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-param informational tool with no output schema, the description covers purpose, gating, and scope adequately. The main remaining gap is not describing what the agent gets back, but this is minor given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single documented param ('Hosted wallet ID to export'), so the schema already carries the semantic load. The description adds no format or constraint detail beyond it, which is the baseline case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('explain how') and resource ('private key of a hosted custodial AgentWallet'), and explicitly distinguishes itself from the action its name implies by stating it is educational, not an exporter. It is clear and self-distinguishing, though the name 'export_wallet_key' still risks misleading an agent at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the context of use ('so it can be moved to self-custody or any other wallet') and clarifies the tool does not perform the export. It does not name sibling alternatives, but the purpose-to-context mapping is clear enough to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_allowanceA
Check how many ERC-20 tokens a spender is approved to transfer. Returns the allowance in both raw and human-readable format. Use this to check if an approval is needed before a DeFi transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | ERC-20 token contract address | |
| spender | Yes | Spender contract address to check | |
| chain_id | Yes | Chain ID | |
| decimals | No | Token decimals. Resolved from the registry or the token contract when omitted; if given, it must match | |
| wallet_id | Yes | Wallet ID (used to determine the owner address) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the return shape (raw and human-readable) and implies a read-only operation, but says nothing about required permissions, whether the wallet must be unlocked, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the core action front-loaded and no filler. The return-format sentence and the usage sentence both carry information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with no output schema, the description is nearly sufficient: it explains what is returned and when to reach for it. It falls just short by not resolving its overlap with check_approval or noting any preconditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema. The description only restates the spender concept and adds no syntax, defaults, or edge-case detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — checking the ERC-20 allowance a spender can transfer — which is concrete and easy to act on. However, it does not differentiate itself from the similarly named sibling check_approval, leaving the agent to guess which of the two to use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides one clear usage context ('check if an approval is needed before a DeFi transaction'), which is genuinely helpful. But it never names alternatives or exclusions, so with a near-duplicate sibling (check_approval) present, the routing guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceA
Get the native token balance for a wallet on a specific chain. Returns balance in both wei (or lamports for Solana) and human-readable format.
| Name | Required | Description | Default |
|---|---|---|---|
| chain_id | No | Chain ID to check (defaults to wallet's default chain) | |
| wallet_id | Yes | Wallet ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return format (balance in wei/lamports and human-readable), which is valuable behavioral context. However, it doesn't mention potential errors, rate limits, or authentication requirements, leaving gaps for a tool that queries financial data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose and includes essential behavioral details about return formats. Every word earns its place with zero waste or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description provides good purpose and return format clarity but lacks details on error handling, chain compatibility, or authentication. Given the complexity of blockchain operations, it's adequate but has clear gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters fully. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain wallet_id or chain_id formats or defaults in more detail). Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('native token balance for a wallet on a specific chain'), and distinguishes it from sibling tools like 'get_token_balance' by specifying it's for native tokens only. This provides precise differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by specifying the resource (wallet balance on a chain), but doesn't explicitly state when to use this tool versus alternatives like 'get_token_balance' or 'get_wallet'. It provides some context but lacks explicit guidance on exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chainsA
List all supported chains (EVM + Solana) with their chain IDs, native tokens, stablecoins, and RPC configuration status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'List' implies a non-mutating read, and the description usefully discloses the fields returned, but it says nothing about whether the registry is static or live, whether RPC status can change, or about caching/pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the action and resource, followed by the payload contents. Every clause earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description does the work of describing the return payload (chain IDs, native tokens, stablecoins, RPC config status), which is adequate. Minor gaps remain about list ordering/completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('all supported chains'), then enumerates what each entry contains (chain IDs, native tokens, stablecoins, RPC status). No sibling tool in the list overlaps with chain discovery, so the purpose is unambiguous, though it does not explicitly differentiate itself from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent infers it should call this to discover which chains are supported before doing chain-dependent work. There is no explicit when-to-use statement, but there is also no competing alternative that would need to be excluded.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_paywallB
Get details for a specific x402 paywall by ID. Returns pricing, access URL, payment stats, and configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| paywall_id | Yes | Paywall ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool returns 'pricing, access URL, payment stats, and configuration,' which adds some context about output content. However, it doesn't cover critical aspects like error handling (e.g., what happens with an invalid ID), authentication requirements, rate limits, or whether it's a read-only operation. For a tool with zero annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and well-structured, consisting of two sentences that efficiently convey the tool's purpose and return values. Every sentence earns its place: the first defines the action and input, and the second lists the output details. There is no wasted verbiage, making it easy to parse and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (single parameter, no nested objects) and high schema coverage, the description is adequate but has clear gaps. It lacks an output schema, so the description's mention of return values ('pricing, access URL, payment stats, and configuration') is helpful. However, without annotations, it misses behavioral details like error handling or auth needs, making it incomplete for optimal agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the single parameter 'paywall_id' documented as 'Paywall ID' of type integer. The description adds value by specifying that this ID is used to get details for a 'specific' paywall, reinforcing its purpose. However, it doesn't provide additional semantics beyond what the schema already covers, such as format examples or constraints, so it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get details for a specific x402 paywall by ID.' It specifies the verb ('Get details'), resource ('x402 paywall'), and scope ('by ID'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'list_paywalls' or 'get_paywall_payments', which would require a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It mentions retrieving details for a 'specific' paywall by ID, but doesn't clarify prerequisites (e.g., needing a valid paywall ID) or contrast it with similar tools like 'list_paywalls' (for multiple paywalls) or 'get_paywall_payments' (for payment data). This lack of explicit usage context leaves gaps for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_paywall_paymentsB
Get payment history for a specific x402 paywall. Returns verified payments with TX hashes, payer addresses, amounts, and timestamps.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| per_page | No | Results per page (max 100) | |
| paywall_id | Yes | Paywall ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose that only 'verified payments' are returned and what fields come back. However, it omits pagination behavior, auth/permission requirements, and any rate-limit or ordering context, so the disclosure is partial rather than rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the purpose front-loaded and return contents second; there is essentially no filler. Slightly cursory but well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with a fully documented 3-parameter schema and no output schema, the description covers purpose and enumerates the returned fields, which is what the missing output schema would otherwise need. It stops short of describing pagination semantics and failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so paywall_id, page, and per_page are already documented in the schema. The description adds only the notion that paywall_id scopes results to one paywall; no format, default, or limit details beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Get payment history for a specific x402 paywall' — with a clear scope (single paywall). It does not, however, explicitly distinguish itself from siblings like list_payments or get_x402_revenue, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to use this tool versus alternatives such as list_payments or get_x402_revenue, nor does it state prerequisites. It only describes what the call returns, leaving selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_balanceA
Get the ERC-20 or SPL token balance for a wallet on a specific chain. Returns the raw balance and human-readable balance. Use get_chains to find stablecoin addresses for each chain.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | Token address (0x-prefixed ERC-20 contract for EVM, Base58 mint for Solana) | |
| chain_id | Yes | Chain ID to check on | |
| decimals | No | Token decimals. Taken from the response or the token contract when omitted | |
| wallet_id | Yes | Wallet ID to check |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does reveal the return shape (raw balance plus human-readable balance), which is genuinely useful, but it does not address permissions, rate limits, or behavior when decimals is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, with the core purpose front-loaded and the return contract and helper-tool hint following in priority order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description compensates by stating exactly what is returned (raw and human-readable balance). For a read-only balance lookup with fully documented params, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters in detail. The description's only additive hint is the get_chains pointer for token addresses, which justifies the baseline 3 rather than more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Get the ERC-20 or SPL token balance for a wallet on a specific chain.' The token-standard wording implicitly separates it from the native-balance sibling get_balance, but it never names that sibling, so differentiation is inferred rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one routing hint ('Use get_chains to find stablecoin addresses for each chain'), which helps with the token parameter but says nothing about when to prefer this over get_balance or get_token_info. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_infoA
Get the name, symbol, and decimals of any ERC-20 token by its contract address. Useful for discovering token details before transfers or approvals.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | ERC-20 token contract address | |
| chain_id | Yes | Chain ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively communicates that this is a read-only operation for token metadata discovery, but doesn't mention potential limitations like rate limits, error conditions, or whether it requires authentication. The description adds useful context about the tool's purpose but lacks operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with two sentences that each earn their place: the first states exactly what the tool does, and the second provides valuable usage context. No wasted words, and the information is front-loaded with the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only metadata tool with no annotations and no output schema, the description provides adequate context about what information is returned and when to use it. However, it doesn't describe the return format or structure, which would be helpful given the absence of an output schema. The description covers the essentials but leaves some implementation details unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the input schema already fully documents both parameters (token address and chain ID). The description doesn't add any additional parameter semantics beyond what's in the schema, such as explaining why chain_id matters or providing examples. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get'), resource ('ERC-20 token'), and exact data returned ('name, symbol, and decimals'), distinguishing it from sibling tools like get_balance or get_token_balance which focus on different token attributes. The verb+resource combination is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool ('before transfers or approvals'), which helps differentiate it from other token-related tools. However, it doesn't explicitly state when NOT to use it or name specific alternatives among the sibling tools, though the context implies it's for metadata rather than balance or allowance checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageA
Get the current month's usage statistics. Returns operations count, tier info, remaining quota, and fees.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and 'Get' implies a read-only, zero-parameter call. It usefully discloses the scope limit (current month only, no historical periods) and the returned fields, but says nothing about permissions/auth needs or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the scope and purpose front-loaded before the return-value summary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately enumerates the returned fields (operations count, tier info, remaining quota, fees) and scope. It is nearly complete for a zero-param read tool, missing only auth/permission context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is no parameter syntax the description could add. The description's field listing is return-value information rather than parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (usage statistics) and narrows scope to the current month, plus enumerates what is returned. No sibling tool covers usage/quota, so differentiation is implicit rather than explicit, keeping it just under a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives (e.g., historical usage or per-resource usage tools). Usage is only implied by the phrase 'current month's usage statistics'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_walletB
Get details for a specific wallet by ID. Returns address, label, chain, spending limits, and pause status.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet_id | Yes | Wallet ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the return fields (address, label, etc.) but lacks critical details like whether this is a read-only operation, authentication requirements, error handling, or rate limits. For a tool with zero annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('Get details for a specific wallet by ID') and adds useful return field information. Every word serves a purpose with no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple input schema (1 parameter, 100% coverage) and no output schema, the description adequately covers the basic purpose and return fields. However, as a read operation with no annotations, it should ideally mention safety (e.g., read-only) or authentication context to be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the single parameter 'wallet_id' documented as 'Wallet ID'. The description adds no additional meaning beyond this, such as format examples or constraints, so it meets the baseline score when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get details' and resource 'specific wallet by ID', making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'list_wallets' or 'get_balance', which would require more specific language about scope or data returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'list_wallets' (for multiple wallets) or 'get_balance' (for balance-specific info). It states what it does but offers no context about appropriate use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_x402_revenueA
Get aggregate x402 revenue statistics across all your paywalls. Returns total payments and revenue broken down by chain and token.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses the return shape (totals plus a per-chain and per-token breakdown), which is genuinely useful, but says nothing about auth requirements or any rate/latency behavior for an account-scoped read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler, and the purpose is front-loaded before the return-value detail. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully compensates by stating what is returned (total payments and revenue, broken down by chain and token). For a zero-parameter aggregate read this is nearly complete, though it omits any scoping or auth caveat.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. There are no arguments for the description to clarify, and the empty object schema plus additionalProperties:false leaves nothing ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (get) and resource (x402 revenue statistics) scoped to 'across all your paywalls,' which distinguishes it from the per-paywall get_paywall_payments sibling. It does not name that sibling explicitly, but the aggregate scope makes the distinction clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the aggregate framing: use this for a rolled-up revenue view rather than per-paywall payment listings. However, it never states when to prefer this over get_paywall_payments, list_payments, or get_usage, so the agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_paymentsB
Spends recorded in this wallet's ledger (x402 payments, transfers, auto-pay), newest first, each with its latest outcome (signed, settled, declined, unknown, broadcast, void). The ledger is a hash-chained append-only file when AGENTWALLET_LEDGER or a policy names one; otherwise this process only.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | Only payments to this endpoint host | |
| limit | No | ||
| since | No | ISO 8601 timestamp; only spends at or after it | |
| outcome | No | Only this outcome |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does substantially: it discloses ordering (newest first), per-item outcome semantics (signed, settled, declined, unknown, broadcast, void), and the crucial data-source distinction between a hash-chained append-only ledger file and process-only state based on AGENTWALLET_LEDGER or policy. It still omits read-only confirmation and pagination behavior, but this is solid behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences that front-load what the tool lists before moving to ledger/storage nuance. No filler, though the second sentence is somewhat cryptic about the ledger configuration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no output schema and no annotations, the description covers content, ordering, and outcome values reasonably well, but omits return shape beyond the outcome field and gives no pagination/limit guidance despite a 500-item cap on limit. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema documents most parameters (host, limit, since, outcome). The description complements the outcome filter by enumerating the possible outcome values, but says nothing about host, limit, or since beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Spends recorded in this wallet's ledger') and enumerates the kinds of spends it covers (x402 payments, transfers, auto-pay). It clearly defines what the tool returns, though it never names the sibling it competes with (e.g., export_receipts or get_paywall_payments) to sharpen selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what is listed but gives no when-to-use guidance or exclusion criteria. With siblings like export_receipts, get_paywall_payments, and get_usage in the same namespace, an agent gets no help deciding when this is the right tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_paywallsB
List all your x402 paywalls. Returns paywall IDs, names, pricing, access URLs, payment counts, and revenue totals.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| per_page | No | Results per page (max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the returned fields (IDs, names, pricing, URLs, payment counts, revenue), which partially compensates for the absent output schema, but says nothing about pagination behavior, result limits, or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the operation front-loaded and the return shape following immediately. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description's enumeration of return fields is genuinely valuable and makes the tool callable without guessing the response shape. It is only mildly short of complete because routing against sibling list/get tools and pagination expectations are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so page and per_page are already fully documented with defaults and bounds. The description adds no additional parameter meaning, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (your x402 paywalls) with clear scope ('all your'), which an agent can distinguish from get_paywall or get_paywall_payments. However, it never names those siblings or explains how this differs from a single-paywall or payments lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or alternatives are given. With siblings like get_paywall and get_paywall_payments in scope, the description should route the agent but instead leaves selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_walletsA
List all wallets owned by the authenticated user. Returns wallet IDs, addresses, labels, chain IDs, and status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose auth context ('authenticated user') and enumerates the returned fields, which is genuinely useful with no output schema. However, it says nothing about pagination, ordering, rate limits, or behavior for users with no wallets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the scope constraint is front-loaded. The second sentence substitutes for the missing output schema rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with no output schema, the description covers ownership scope and the returned fields, which is most of what an agent needs. Missing only edge-case behavior (empty results, pagination) to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to disambiguate and the baseline is 4. The description appropriately spends its words on scope and return shape instead of inventing parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (wallets) with an explicit scope: 'owned by the authenticated user'. This distinguishes it from create_wallet/delete_wallet, and the scope phrase implicitly separates it from the singular get_wallet, though it never names that sibling directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no mention of the obvious alternative get_wallet for a single wallet. The only implicit signal is that this returns 'all' wallets, leaving the agent to infer the list-vs-single choice on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_walletA
Emergency pause a wallet. No transactions can be signed while paused.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet_id | Yes | Wallet ID to pause |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the behavioral effect ('No transactions can be signed while paused'), which is useful. However, it lacks details on permissions required, reversibility, or rate limits, leaving gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero waste, front-loading the key action and effect. Every word earns its place, making it highly efficient and easy to understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is adequate but incomplete. It covers the purpose and effect but lacks details on permissions, error cases, or return values, which are important for safe usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the 'wallet_id' parameter fully. The description does not add any additional meaning or context about the parameter beyond what the schema provides, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Emergency pause a wallet') and the resource ('wallet'), distinguishing it from sibling tools like 'unpause_wallet' and 'get_wallet'. It explicitly mentions the effect ('No transactions can be signed while paused'), which adds clarity beyond just the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage in emergency situations ('Emergency pause'), providing clear context for when to use it. However, it does not explicitly state when not to use it or name alternatives (e.g., 'unpause_wallet' for reversing the action), which prevents a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pay_x402A
Handle an x402 payment flow. Fetches a URL, and if the server returns HTTP 402 Payment Required, parses the payment requirements (v1 body or v2 PAYMENT-REQUIRED header), signs an EIP-3009 TransferWithAuthorization for the "exact" scheme (no gas, nothing broadcast by the payer), and retries the request with the payment header. AgentWallet paywalls are paid by on-chain transfer instead. The "upto" scheme is settled with a Permit2 authorization bounded by the cap. Returns the final response and the settlement receipt. Supports the x402 open payment standard (https://x402.org). max_payment can only lower the operator's cap for one call.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to access (will handle 402 payment if required) | |
| body | No | Optional request body for POST/PUT requests | |
| method | No | HTTP method (GET, POST, PUT, DELETE) | GET |
| headers | No | Optional JSON string of additional request headers. Credentials placed here (Authorization, Cookie, API keys) are sent only to the origin in `url`; if the endpoint redirects to a different origin they are dropped, not forwarded. | |
| wallet_id | Yes | Wallet ID to pay from | |
| approval_id | No | An approval id from an earlier over-cap attempt. Once the owner has approved it, pass it here to make that one payment. | |
| max_payment | No | Maximum payment in human-readable format (e.g. "1.00" for 1 USDC). Lowers the operator's AGENTWALLET_MAX_AUTOPAY ceiling (default "1") for this one call; it can never raise it, and a value above the ceiling is ignored and reported as max_payment_ignored. | |
| prefer_chain | No | Preferred chain ID if the server accepts payment on multiple chains (e.g. 8453 for Base, 1 for Ethereum) | |
| request_approval | No | Hosted wallets only. When the payment exceeds the cap, email the wallet owner an approve/deny link instead of refusing, and return an approval_id to retry with. Default true unless AGENTWALLET_APPROVALS=0. | |
| fresh_authorization | No | Sign a new authorization even if one for the same endpoint, amount and recipient is still valid. By default a repeat call within the validity window re-sends the earlier signature (same nonce, so it cannot settle twice) instead of paying again. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that the 'exact' scheme requires no gas and nothing is broadcast by the payer, that 'upto' settles via a cap-bounded Permit2 authorization, that the call retries with a payment header, and that it returns both the final response and a settlement receipt. It also flags the approval flow and the one-way cap semantics of max_payment.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence and the dense technical detail that follows is mostly justified for a complex payment tool. It is somewhat run-on and mixes scheme semantics with cap semantics, but every clause contributes information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with no output schema, the description explains the return value (final response plus settlement receipt) and the safety-relevant flow. Combined with fully documented parameters, it is nearly complete, though it could say more about failure modes and the approval round-trip.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all ten parameters (including max_payment, approval_id, request_approval, fresh_authorization) are already documented in the schema, making 3 the baseline. The description adds some connective context about how the payment schemes relate to these fields, but does not introduce meaning the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: it fetches a URL and, on HTTP 402, completes an x402 payment then retries. It distinguishes itself from siblings like quote_x402 and discover_x402 by describing the actual pay-and-retry flow, and it reconciles the two settlement paths (EIP-3009 'exact' vs Permit2 'upto').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the trigger condition (server returns 402) and notes that AgentWallet paywalls are instead paid by on-chain transfer, and that the 'upto' scheme uses Permit2. It doesn't explicitly route the agent to sibling alternatives (e.g. quote_x402 to preview, discover_x402 to find endpoints) or state when not to use it, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_x402A
Ask what an x402 endpoint charges without paying: fetches the URL, parses the 402 requirements, says which option this wallet would pay (chain, asset, amount, recipient), whether the per-payment cap, the spend policy and the rolling budgets would allow it, and nothing is signed. Call it before pay_x402 when the price is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to quote | |
| body | No | Optional request body, as for pay_x402 | |
| method | No | HTTP method the real request would use | GET |
| headers | No | Optional JSON string of request headers, as for pay_x402 | |
| prefer_chain | No | Preferred chain ID when several are offered |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: 'nothing is signed' is a critical safety disclosure given siblings like sign_transaction and pay_x402, and it reveals the tool evaluates the per-payment cap, spend policy and rolling budgets rather than just reading a price. It stops short of stating auth requirements, rate limits, or failure behavior when the endpoint is not x402, leaving some gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single long sentence, but it is front-loaded with the core action ('Ask what an x402 endpoint charges without paying') before enumerating what gets returned. Dense and mostly waste-free, though the list-heavy clause makes it slightly run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema or annotations, the description compensates by describing what the tool returns (chain, asset, amount, recipient, and policy/budget allowance verdicts) and confirming no signature is produced. That is sufficient for an agent to call and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (url, body, method, headers, prefer_chain) are already documented in the schema. The description adds only indirect context by mentioning chain/asset/amount/recipient as outputs of a preferred-option selection; it does not explain parameter syntax or interactions beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb+resource (fetch a URL and parse its 402 requirements without paying) and explicitly contrasts itself with pay_x402, which performs the actual payment. An agent can distinguish quote_x402 from its payment sibling without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger: 'Call it before pay_x402 when the price is unknown.' The alternative and the condition that selects it are both named, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_transactionA
Sign and broadcast a transaction. Returns the transaction hash (EVM) or signature (Solana) on success. The transaction is signed server-side and broadcast via RPC.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Destination address (0x-prefixed for EVM, Base58 for Solana) | |
| data | No | Hex-encoded calldata (0x-prefixed) for EVM contract calls | |
| value | No | Value in wei/lamports (decimal integer string; no hex, no decimals) | 0 |
| max_fee | No | Max fee per gas in wei — EVM only (auto if omitted) | |
| chain_id | No | Chain ID (defaults to wallet's default) | |
| gas_limit | No | Gas limit — EVM only (auto-estimated if omitted) | |
| wallet_id | Yes | Wallet ID | |
| token_mint | No | SPL token mint address — Solana only (for SPL token transfers) | |
| priority_fee | No | Max priority fee per gas in wei — EVM only (auto if omitted) | |
| token_decimals | No | SPL token decimals, Solana only (6 for USDC) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does disclose key traits: server-side signing (no private key required from the caller), broadcast via RPC, and the cross-chain return format. However, it omits irreversibility, permission or wallet-state prerequisites, and failure behavior, leaving meaningful gaps for a mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and followed by the return format and signing model. Every sentence adds distinct information with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 parameters with 100% schema coverage, no annotations, and no output schema, the description is fairly complete: it explains the server-side signing/broadcast model and the chain-specific return value. It could do slightly more on prerequisites or error conditions, but the schema already covers all inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 10 parameters is already documented in the input schema. The description adds no parameter-level meaning beyond what the schema provides, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Sign and broadcast a transaction.' The inclusion of 'broadcast' distinguishes it from the sibling sign_transaction, which presumably only signs, so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives such as sign_transaction, simulate_transaction, or call_contract. The description implies it is for submitting transactions, but it does not state conditions, prerequisites, or when-not-to-use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sign_transactionA
Sign a transaction with a wallet's private key. For EVM: returns signed raw transaction hex. For Solana: returns base64 signed transaction. Does NOT broadcast. Use send_transaction for sign + broadcast. A signed transaction is a spend: under a spend policy it is checked, reserved on the ledger and counted against the budgets exactly as send_transaction is, because the caller can broadcast it.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Destination address (0x-prefixed for EVM, Base58 for Solana) | |
| data | No | Hex-encoded calldata (0x-prefixed) for EVM contract calls | |
| value | No | Value in wei/lamports (decimal integer string; no hex, no decimals) | 0 |
| max_fee | No | Max fee per gas in wei — EVM only (auto if omitted) | |
| chain_id | No | Chain ID (defaults to wallet's default) | |
| gas_limit | No | Gas limit — EVM only (auto-estimated if omitted) | |
| wallet_id | Yes | Wallet ID | |
| token_mint | No | SPL token mint address — Solana only (for SPL token transfers) | |
| priority_fee | No | Max priority fee per gas in wei — EVM only (auto if omitted) | |
| token_decimals | No | SPL token decimals, Solana only (6 for USDC) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden and does so well: it discloses per-chain return formats (raw hex for EVM, base64 for Solana), the non-broadcast side effect, and the non-obvious policy consequence that a signed tx is treated as a spend (checked, reserved on the ledger, counted against budgets). The spend-policy disclosure is exactly the kind of hidden behavior an agent must know before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core action and return behavior, followed by the crucial exclusions. Every sentence carries distinct, non-redundant information; nothing restates the name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, no-annotation, no-output-schema tool, the description supplies the missing behavioral and return-value context (both chain formats, non-broadcasting, spend-policy accounting) that annotations and schema do not cover. Nothing an agent needs in order to call it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 10 parameters with per-chain notes (EVM-only fields, Solana-only token_mint/token_decimals, value units). The description adds no parameter-level detail beyond the schema, which makes the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb+resource ('Sign a transaction with a wallet's private key') and the rest differentiates it from the closest sibling by explaining exactly what it returns versus what send_transaction does. An agent can route between sign_transaction and send_transaction without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit exclusions and alternatives are given: 'Does NOT broadcast' and 'Use send_transaction for sign + broadcast.' This is the exact when-to-use/when-not split an agent needs, stated with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_transactionA
Dry-run an EVM transaction with nothing signed: the local guards (native cap, token cap, fee cap), the spend policy, the node's gas estimate (which fails when the call would revert), the worst-case fee, whether the balance covers it, and the call's return data. Local mode runs the full check; hosted mode runs the policy and an eth_call.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Destination address | |
| data | No | Optional calldata (0x-prefixed hex) | |
| value | No | Native amount in human units (e.g. "0.01" ETH) | 0 |
| chain_id | Yes | EVM chain ID | |
| wallet_id | Yes | Wallet ID (ignored in local mode) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden - and it discloses rich behavior: the exact guard set checked, the spend policy, that the gas estimate fails on revert, worst-case fee, balance coverage, and the significant local-vs-hosted mode difference. It omits any permission/auth requirements or rate limits, but for a read-only simulation this is close to complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then a dense enumeration of what it verifies, closing with the mode distinction. The first sentence is a long list but every clause earns its place; only the run-on length keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description steps up to describe the returned checks (gas estimate, worst-case fee, balance coverage, return data) so an agent knows what comes back. It does not describe failure/error shape or how to interpret a failing guard, leaving a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every parameter (including that wallet_id is ignored in local mode). The description adds contextual framing (cap checks, spend policy) but no syntax or format detail beyond the schema, so the 3 baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Dry-run/simulate') and resource (EVM transaction) and sharpens the distinction from sign/send siblings with 'with nothing signed'. An agent can immediately tell this is a non-mutating preflight.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Dry-run ... with nothing signed' clearly establishes the preflight context, and the local-vs-hosted mode note signals when each path applies. It stops short of naming alternatives (e.g. send_transaction) or stating the ordering ('call before sending'), so no explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spend_policyA
The spend policy this server enforces (AGENTWALLET_POLICY), its sha256, the rolling budgets with what is spent and what remains, per-host spending, the ledger's path and integrity, and whether the connected client can answer approval questions. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the key behavioral trait: it is read-only. It also compensates for the absent output schema by enumerating the return payload (sha256, rolling budgets spent/remaining, per-host spending, ledger path and integrity). It does not discuss error modes or refresh semantics, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single dense sentence with the core concept ('the spend policy this server enforces') front-loaded, followed by the fields returned. It reads as a field dump rather than prose, but every clause earns its place given the missing output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, non-mutating introspection tool with no output schema and no annotations, the description supplies both the read-only guarantee and a field-level preview of the response. Only minor gaps remain, such as failure behavior and whether the policy can change between calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. No parameter semantics are needed or offered, and none are missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (the server's enforced spend policy, AGENTWALLET_POLICY) and enumerates its contents, which tells an agent what data this returns. It is clear but does not distinguish itself from neighbors like get_usage or get_x402_revenue, and it describes the payload more than the action, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus alternatives such as get_usage, check_approval, or list_wallets. The mention of 'whether the connected client can answer approval questions' touches on approval context but gives no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transferB
Send native tokens (ETH, AVAX, BNB, POL, PLS, SOL) to an address. Specify the amount in human-readable format (e.g. "0.1" for 0.1 ETH). The amount is converted to wei/lamports automatically. Signs and broadcasts the transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Destination address (0x-prefixed for EVM, Base58 for Solana) | |
| amount | Yes | Amount to send in human-readable format (e.g. "0.1" for 0.1 ETH) | |
| chain_id | Yes | Chain ID (1=Ethereum, 8453=Base, 42161=Arbitrum, 10=Optimism, 137=Polygon, 43114=Avalanche, 56=BSC, 7777777=Zora, 369=PulseChain, 900=Solana, 901=Solana Devnet) | |
| wallet_id | Yes | Wallet ID to send from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It does disclose the important behavior that it 'signs and broadcasts' (i.e. a real, irreversible on-chain write that moves funds) and auto-converts to wei/lamports. It omits gas/fee handling, confirmation semantics, failure modes, and wallet state requirements (e.g. paused wallet).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the operation and asset class, followed by the amount convention and the transaction lifecycle. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no annotations and no output schema, the description covers what it does, the amount convention, and that it broadcasts. It lacks fee/confirmation behavior and any hint of what is returned (e.g. tx hash), which leaves meaningful gaps for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the schema already documents the address format, amount format, chain IDs, and wallet_id. The description adds only the conversion behavior ('converted to wei/lamports automatically'), which is a marginal gain over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Send') and resource ('native tokens'), and its enumeration of native assets (ETH, AVAX, BNB, POL, PLS, SOL) implicitly distinguishes it from the sibling transfer_token. It stops short of naming the alternative outright, so an agent must infer the ERC-20 boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the 'native tokens' scope, but there is no explicit when-to-use/when-not statement and no routing to siblings like transfer_token or send_transaction. The amount-format guidance is helpful but is invocation detail rather than a usage rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_tokenB
Send ERC-20 tokens (EVM) or SPL tokens (Solana) to an address. Specify the amount in human-readable format (e.g. "100" for 100 USDC). Signs and broadcasts the transaction. Use get_chains to find stablecoin addresses.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient address (0x-prefixed for EVM, Base58 for Solana) | |
| token | Yes | Token address (0x-prefixed ERC-20 contract for EVM, Base58 mint for Solana) | |
| amount | Yes | Amount in human-readable format (e.g. "100" for 100 USDC) | |
| chain_id | Yes | Chain ID | |
| decimals | No | Token decimals. Resolved from the registry or the token contract when omitted; if given, it must match | |
| wallet_id | Yes | Wallet ID to send from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'Signs and broadcasts the transaction' is a genuinely useful disclosure beyond the schema, but it omits irreversibility, gas/fee source, confirmation behavior, and required permissions for a mutation tool that moves funds.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and resource, with no wasted filler. The trailing 'Use get_chains to find stablecoin addresses' is slightly tangential but still earns its place as a cross-tool pointer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema or annotations exist, so the description must fully inform the agent. It covers the signing/broadcast behavior and amount format but is silent on gas handling, failure modes, and whether a native-token or approval prerequisite applies to a fund-moving tool with six parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters including the human-readable amount format and decimals resolution rule. The description only restates the amount convention, adding no parameter meaning beyond the structured data, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Send) and resource (ERC-20 tokens on EVM / SPL tokens on Solana) with the address target, which is clear. However, it never distinguishes itself from the sibling 'transfer' or 'send_transaction', leaving the agent to infer which tool handles which asset type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an implied usage hint ('Use get_chains to find stablecoin addresses') and the human-readable amount convention, but gives no when-to-use guidance relative to the many sibling transfer/send/sign tools. The distinction between this and 'transfer' or 'send_transaction' is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpause_walletB
Resume a paused wallet so transactions can be signed again.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet_id | Yes | Wallet ID to unpause |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool resumes a paused wallet, implying a state change, but doesn't cover permissions required, whether the operation is reversible, error conditions, or rate limits. This leaves significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action and purpose without unnecessary words. Every part of the sentence contributes directly to understanding the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a mutation (resuming a wallet) with no annotations and no output schema, the description is incomplete. It lacks details on behavioral aspects like side effects, response format, or error handling, which are critical for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with 'wallet_id' clearly documented. The description doesn't add any parameter-specific details beyond what the schema provides, such as format constraints or examples, so it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Resume') and resource ('a paused wallet'), with the specific outcome ('so transactions can be signed again'). It distinguishes from siblings like 'pause_wallet' by indicating the opposite operation, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a wallet is paused and needs to resume signing transactions, but it doesn't provide explicit guidance on when to use this tool versus alternatives like 'create_wallet' or 'get_wallet', nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unwrap_ethA
Unwrap wrapped tokens (WETH, WAVAX, WBNB, etc.) back to native tokens. Specify amount in human-readable format (e.g. "0.5" for 0.5 WETH).
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount to unwrap in human-readable format (e.g. "0.5") | |
| chain_id | Yes | Chain ID | |
| wallet_id | Yes | Wallet ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While it mentions the conversion action and amount format, it lacks critical information such as whether this requires gas fees, what permissions are needed, whether it's reversible, potential rate limits, or what the expected output looks like. For a financial transaction tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in two sentences: the first states the purpose and scope, the second provides specific parameter guidance. Every sentence adds clear value with no wasted words, making it easy to parse and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a financial conversion tool with no annotations and no output schema, the description is incomplete. It covers the basic purpose and parameter format but misses critical behavioral details (e.g., transaction costs, success/failure responses, error conditions). However, it does adequately explain the core functionality for a user familiar with blockchain concepts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (wallet_id, amount, chain_id) with descriptions. The description adds value by clarifying the amount format with an example ('0.5' for 0.5 WETH), but doesn't provide additional context for wallet_id or chain_id beyond what the schema states. Baseline 3 is appropriate when schema does most of the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Unwrap wrapped tokens') and resources involved (WETH, WAVAX, WBNB, etc. back to native tokens). It distinguishes from sibling tools like 'wrap_eth' by specifying the opposite operation, and from other tools like 'transfer' or 'send_transaction' by focusing on token conversion rather than movement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates when to use this tool (to convert wrapped tokens to native tokens) and provides an example format for the amount parameter. However, it doesn't explicitly state when NOT to use it or name specific alternatives (e.g., when to use 'transfer_token' instead for moving wrapped tokens without conversion).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_paywallC
Update an x402 paywall configuration. Can change price, resource URL, active status, or any other field.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New paywall name | |
| amount | No | New price in human-readable format (e.g. "0.05") | |
| is_active | No | Enable (true) or disable (false) the paywall | |
| paywall_id | Yes | Paywall ID to update | |
| description | No | New description | |
| resource_url | No | New resource URL | |
| resource_mime | No | New MIME type | |
| token_decimals | No | Token decimals. Read from the paywall itself when omitted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden for a mutation tool and it does not deliver. It never says whether omitted fields are preserved or wiped, what permissions are required, whether the change is reversible, or what happens on an invalid paywall_id. This is a significant gap for a write operation with zero structured safety metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the action front-loaded in sentence one and the scope in sentence two; nothing is padded. The trailing 'or any other field' is slightly vague but does convey partial-update intent, so it largely earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an eight-parameter mutation tool with no annotations and no output schema, the description plus full schema coverage is minimally adequate — the agent can populate fields. What is missing is the update contract (partial vs. replace), permission requirements, and post-update behavior, which the schema cannot express.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all eight parameters are already documented in the schema with formats, bounds, and defaults (e.g. token_decimals read from the paywall when omitted). The description only restates three fields and adds no syntax, format, or interaction detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Update') and resource ('x402 paywall configuration'), which cleanly separates it from sibling verbs like create_paywall, get_paywall, list_paywalls, and delete_paywall. The second sentence enumerates the changeable fields, so the scope is concrete. It stops short of an explicit sibling reference, but the verb alone is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no stated prerequisites (ownership, wallet context, or whether the paywall must exist), and no clarification of partial vs. full-replacement update semantics. The 'or any other field' phrasing hints at partial updates but never states it, leaving the agent to infer the core usage contract.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wallet_modeA
Report whether this server is signing locally (self-custody, the private key never leaves this machine) or through the hosted AgentWallet API (custodial). Use this to verify custody before moving funds.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose meaningful behavior: in local mode 'the private key never leaves this machine,' which is a real security-relevant trait an agent should know. It omits auth/prerequisite details, but for a zero-argument read-only probe the risk surface is small.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the mechanism named first and the actionable guidance second. Nothing is redundant with the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param read tool with no output schema, the description covers what it does, its two outcomes, and when to call it. It could state the return shape (e.g., a mode/custody value), but the semantics are otherwise sufficient to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document; baseline 4 applies. The description correctly implies a no-input query.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (report) and resource (wallet signing/custody mode) and defines the two possible outcomes precisely: local self-custody versus hosted AgentWallet API. No sibling tool covers custody-mode reporting, so an agent can distinguish it immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger: 'Use this to verify custody before moving funds.' That is a clear context, though it names no alternative or exclusion — acceptable here because no sibling overlaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wrap_ethA
Wrap native tokens (ETH, AVAX, BNB, POL, PLS) into their wrapped ERC-20 version (WETH, WAVAX, etc.). Required for most DeFi protocols that use ERC-20 tokens instead of raw native tokens. Specify amount in human-readable format (e.g. "0.5" for 0.5 ETH).
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount to wrap in human-readable format (e.g. "0.5") | |
| chain_id | Yes | Chain ID | |
| wallet_id | Yes | Wallet ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the action (wrapping tokens) and mentions the requirement for DeFi protocols, but does not cover other behavioral traits such as transaction costs, confirmation times, error conditions, or what happens on failure. It adds some context but is incomplete for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, with three sentences that each earn their place: the first states the purpose, the second provides usage context, and the third clarifies parameter formatting. There is zero waste, and the structure is clear and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a mutation tool with no annotations and no output schema), the description is partially complete. It covers the purpose, usage context, and parameter formatting, but lacks details on behavioral aspects (e.g., transaction outcomes, errors) and does not explain return values. It is adequate but has clear gaps for a tool that modifies blockchain state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters (wallet_id, amount, chain_id). The description adds meaning for 'amount' by specifying the format ('human-readable format') and providing an example ('0.5' for 0.5 ETH), but does not add semantics beyond what the schema provides for 'wallet_id' or 'chain_id'. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Wrap native tokens') and resources involved (ETH, AVAX, BNB, POL, PLS into WETH, WAVAX, etc.). It distinguishes from sibling tools like 'unwrap_eth' by specifying the conversion direction and mentions the purpose ('Required for most DeFi protocols that use ERC-20 tokens instead of raw native tokens'), making it highly specific and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool ('Required for most DeFi protocols that use ERC-20 tokens instead of raw native tokens'), but does not explicitly state when not to use it or name alternatives (e.g., 'unwrap_eth' for the reverse operation). It implies usage for DeFi compatibility but lacks explicit exclusions or comparisons to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
27 tool updates
v1.14.2- Added
approve_permit2 - Changed
approve_token4 fields changed- removed
Input schema / properties / decimals / defaultRemoved value: -18 - changed
Input schema / properties / decimals / descriptionPrevious value: -"Token decimals (6 for USDC, 18 for most tokens)"New value: +"Token decimals. Resolved from the registry or the token contract when omitted; if given, it must match" - added
Input schema / properties / decimals / maximumAdded value: +36 - added
Input schema / properties / decimals / minimumAdded value: +0
- Added
check_approval - Added
check_token_risk - Changed
create_paywall4 fields changed- removed
Input schema / properties / token_decimals / defaultRemoved value: -6 - changed
Input schema / properties / token_decimals / descriptionPrevious value: -"Token decimals (6 for USDC, 18 for ETH/most tokens)"New value: +"Token decimals. Defaults to the chain native decimals for \"native\", else 6 (USDC); set it for any other token" - added
Input schema / properties / token_decimals / maximumAdded value: +36 - added
Input schema / properties / token_decimals / minimumAdded value: +0
- Added
discover_x402 - Added
export_receipts - Added
export_wallet_key - Changed
get_allowance4 fields changed- removed
Input schema / properties / decimals / defaultRemoved value: -18 - changed
Input schema / properties / decimals / descriptionPrevious value: -"Token decimals (6 for USDC, 18 for most tokens)"New value: +"Token decimals. Resolved from the registry or the token contract when omitted; if given, it must match" - added
Input schema / properties / decimals / maximumAdded value: +36 - added
Input schema / properties / decimals / minimumAdded value: +0
- Changed
get_chains1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_paywall_payments2 fields changed- added
Input schema / properties / per_page / maximumAdded value: +100 - added
Input schema / properties / per_page / minimumAdded value: +1
- Changed
get_token_balance4 fields changed- removed
Input schema / properties / decimals / defaultRemoved value: -18 - changed
Input schema / properties / decimals / descriptionPrevious value: -"Token decimals (6 for USDC, 18 for most tokens)"New value: +"Token decimals. Taken from the response or the token contract when omitted" - added
Input schema / properties / decimals / maximumAdded value: +36 - added
Input schema / properties / decimals / minimumAdded value: +0
- Changed
get_usage1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_x402_revenue1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
list_payments - Changed
list_paywalls2 fields changed- added
Input schema / properties / per_page / maximumAdded value: +100 - added
Input schema / properties / per_page / minimumAdded value: +1
- Changed
list_wallets1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
pay_x4025 fields changed- added
Input schema / properties / approval_idAdded value: +{ + "description": "An approval id from an earlier over-cap attempt. Once the owner has approved it, pass it here to make that one payment.", + "type": "string" +} - added
Input schema / properties / fresh_authorizationAdded value: +{ + "description": "Sign a new authorization even if one for the same endpoint, amount and recipient is still valid. By default a repeat call within the validity window re-sends the earlier signature (same nonce, so it cannot settle twice) instead of paying again.", + "type": "boolean" +} - changed
Input schema / properties / headers / descriptionPrevious value: -"Optional JSON string of additional request headers"New value: +"Optional JSON string of additional request headers. Credentials placed here (Authorization, Cookie, API keys) are sent only to the origin in `url`; if the endpoint redirects to a different origin they are dropped, not forwarded." - changed
Input schema / properties / max_payment / descriptionPrevious value: -"Maximum payment in human-readable format (e.g. \"1.00\" for 1 USDC). Rejects payments above this amount. Strongly recommended to prevent overspending."New value: +"Maximum payment in human-readable format (e.g. \"1.00\" for 1 USDC). Lowers the operator's AGENTWALLET_MAX_AUTOPAY ceiling (default \"1\") for this one call; it can never raise it, and a value above the ceiling is ignored and reported as max_payment_ignored." - added
Input schema / properties / request_approvalAdded value: +{ + "description": "Hosted wallets only. When the payment exceeds the cap, email the wallet owner an approve/deny link instead of refusing, and return an approval_id to retry with. Default true unless AGENTWALLET_APPROVALS=0.", + "type": "boolean" +}
- Added
quote_x402 - Changed
send_transaction7 fields changed- added
Input schema / properties / data / patternAdded value: +"^(0x([0-9a-fA-F]{2})*)?$" - added
Input schema / properties / to / patternAdded value: +"^(0x[a-fA-F0-9]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$" - changed
Input schema / properties / token_decimals / descriptionPrevious value: -"SPL token decimals — Solana only (6 for USDC)"New value: +"SPL token decimals, Solana only (6 for USDC)" - added
Input schema / properties / token_decimals / maximumAdded value: +36 - added
Input schema / properties / token_decimals / minimumAdded value: +0 - changed
Input schema / properties / value / descriptionPrevious value: -"Value in wei/lamports (decimal string)"New value: +"Value in wei/lamports (decimal integer string; no hex, no decimals)" - added
Input schema / properties / value / patternAdded value: +"^\\d+$"
- Changed
sign_transaction7 fields changed- added
Input schema / properties / data / patternAdded value: +"^(0x([0-9a-fA-F]{2})*)?$" - added
Input schema / properties / to / patternAdded value: +"^(0x[a-fA-F0-9]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$" - changed
Input schema / properties / token_decimals / descriptionPrevious value: -"SPL token decimals — Solana only (6 for USDC)"New value: +"SPL token decimals, Solana only (6 for USDC)" - added
Input schema / properties / token_decimals / maximumAdded value: +36 - added
Input schema / properties / token_decimals / minimumAdded value: +0 - changed
Input schema / properties / value / descriptionPrevious value: -"Value in wei/lamports (decimal string)"New value: +"Value in wei/lamports (decimal integer string; no hex, no decimals)" - added
Input schema / properties / value / patternAdded value: +"^\\d+$"
- Added
simulate_transaction - Added
spend_policy - Changed
transfer1 field changed- added
Input schema / properties / to / patternAdded value: +"^(0x[a-fA-F0-9]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$"
- Changed
transfer_token5 fields changed- removed
Input schema / properties / decimals / defaultRemoved value: -18 - changed
Input schema / properties / decimals / descriptionPrevious value: -"Token decimals (6 for USDC, 18 for most tokens)"New value: +"Token decimals. Resolved from the registry or the token contract when omitted; if given, it must match" - added
Input schema / properties / decimals / maximumAdded value: +36 - added
Input schema / properties / decimals / minimumAdded value: +0 - added
Input schema / properties / to / patternAdded value: +"^(0x[a-fA-F0-9]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$"
- Changed
update_paywall3 fields changed- changed
Input schema / properties / token_decimals / descriptionPrevious value: -"Token decimals (needed if changing amount)"New value: +"Token decimals. Read from the paywall itself when omitted" - added
Input schema / properties / token_decimals / maximumAdded value: +36 - added
Input schema / properties / token_decimals / minimumAdded value: +0
- Added
wallet_mode
29 tool updates
v1.7.3- First observed
approve_token - First observed
buy_verification_credits - First observed
call_contract - First observed
create_paywall - First observed
create_wallet - First observed
delete_paywall - First observed
delete_wallet - First observed
get_allowance - First observed
get_balance - First observed
get_chains - First observed
get_paywall - First observed
get_paywall_payments - First observed
get_token_balance - First observed
get_token_info - First observed
get_usage - First observed
get_wallet - First observed
get_x402_revenue - First observed
list_paywalls - First observed
list_wallets - First observed
pause_wallet - First observed
pay_x402 - First observed
send_transaction - First observed
sign_transaction - First observed
transfer - First observed
transfer_token - First observed
unpause_wallet - First observed
unwrap_eth - First observed
update_paywall - First observed
wrap_eth
TDQS
Scored across 40 tools
Several overlapping tools exist: sign_transaction/send_transaction/simulate_transaction, transfer/transfer_token, and pay_x402/quote_x402/discover_x402 have intertwined purposes. Descriptions do provide strong guidance, but the boundaries still require careful reading and misselection is plausible.
Mostly consistent verb_noun snake_case (list_wallets, get_balance, create_paywall), with only minor deviations like check_approval and spend_policy that are still readable. No mixing of camelCase or chaotic patterns.
40 tools is heavy for the server's apparent scope, packing wallet management, DeFi helpers, x402 payments, paywalls, and ledger tooling into one surface. This likely forces agents to scan a large registry and increases the chance of poor tool selection.
Coverage is broad and lifecycle-rich: wallet CRUD, transfers, approvals, paywalls, payments, policy, receipts, and custody reporting are all present. Only minor gaps exist, such as no explicit update_wallet for labels/limits and no transaction history listing for broadcasted sends outside the ledger view.
Maintenance
Related MCP Connectors
162 AI agents for Solana crypto intelligence, wallets, and x402 micropayments.
x402 paid API tools for AI agents on Solana: crypto safety, market data, KYB/AML verification.
Bitcoin + Ethereum RPC for AI agents. 44 tools. x402 payments in USDC on Base mainnet.
Machine-native tools for autonomous agents with free routing and x402 USDC pay-per-call.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables AI agents to interact with cryptocurrency ecosystems through wallet management, trading operations (swaps, DCA, limit orders), staking, and multi-chain support starting with Solana.37GPL 3.0
- AlicenseCqualityCmaintenanceSelf-hosted wallet MCP server for AI agents. Provides 42 tools for multi-chain crypto operations: transfers, token management, DeFi (swap, lend, stake, bridge, perp), NFT, smart contracts, and x402 payments. Supports EVM and Solana with policy engine, spending limits, and human approval.6029MIT
- AlicenseAqualityDmaintenanceEnables AI agents to read chain data, execute transactions, swap tokens, and manage wallets on Solana through 38 tools across 7 modules. Supports write operations with a private key and includes built-in prompts for common workflows.381MIT

@coinbase/payments-mcpofficial
AlicenseNot gradedqualityFmaintenanceCombines wallets, onramps, and payments via x402 to enable AI agents to autonomously discover and pay for services without API keys or complex setup.25 npm58Apache 2.0