{"serverId":"mcp-registry/finance.laso/laso-finance","tools":[{"name":"add_banking_destination","fixed":{"name":"add_banking_destination","description":"Attach bank details to a recipient\n\nAttaches a bank account or crypto address to a recipient and returns the `destination_id` that `/send-bank-payment` pays out to.\n\nFree.","inputSchema":{"type":"object","required":["recipientId","destination"],"properties":{"nickname":{"type":"string","example":"Rent account","description":"An optional label. The only field editable later, via `updateBankingDestination`."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"destination":{"type":"object","description":"The destination. For a US bank account: `destination_type: \"fiat_us\"` plus `aba_routing_number`, `account_number`, `account_type`, `account_holder_name`, and `bank_name`. Also supports `fiat_iban` and `crypto`."},"recipientId":{"type":"string","description":"The recipient from `createBankingRecipient`."},"recipientAddress":{"type":"object","description":"Sets the recipient's postal address before attaching the destination. Needed when the recipient was created name-only: bank destinations are rejected without one, so supplying it here avoids a dead end."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":333,"tokensAfter":333},{"name":"agent_wallet_transfer","fixed":{"name":"agent_wallet_transfer","description":"Transfer USDC out of your managed agent wallet to any Solana address. Use this to recover funds or move them to another wallet you control.","inputSchema":{"type":"object","required":["destination_address","amount"],"properties":{"amount":{"type":"string","description":"Decimal USDC amount to send, as a string (e.g. 25.50)."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"destination_address":{"type":"string","description":"Solana address to send the USDC to."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":164,"tokensAfter":164},{"name":"cancel_intl_order","fixed":{"name":"cancel_intl_order","description":"Cancel a queued international card order\n\nCancel a previously queued international non-reloadable card order, as long as it has not yet been fulfilled by an admin (`state=queued`). The charged amount is credited back to the account balance.","inputSchema":{"type":"object","required":["card_id"],"properties":{"card_id":{"type":"string","description":"The card ID of the queued order to cancel (returned from `/order-intl-card`)"},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":167,"tokensAfter":167},{"name":"create_agent_api_key","fixed":{"name":"create_agent_api_key","description":"Issue an API key\n\nIssues a durable `lasoak_` API key for the account. **The raw key is returned once** — only its hash is stored, so it cannot be retrieved again. Normally the human does this from the dashboard.\n\nFree.","inputSchema":{"type":"object","properties":{"label":{"type":"string","example":"Claude Code","description":"A label to recognize the key by."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":149,"tokensAfter":149},{"name":"create_agent_wallet","fixed":{"name":"create_agent_wallet","description":"Create your managed agent wallet (one per account; idempotent). Returns the wallet's Solana address. Fund it with USDC to pay for the paid tools.","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":100,"tokensAfter":100},{"name":"create_banking_account","fixed":{"name":"create_banking_account","description":"Open an on-ramp or off-ramp account\n\nOpens a banking rail. An **on-ramp** issues a virtual US bank account: dollars sent to it arrive as USDC in the managed wallet. An **off-ramp** pays out to a bank account you have registered, and is opened automatically by `/send-bank-payment`, so most agents never call this for one directly.\n\nFree.","inputSchema":{"type":"object","required":["accountType"],"properties":{"rail":{"type":"string","description":"The payment rail for the account."},"asset":{"type":"string","example":"USDC","description":"Crypto asset ticker, uppercase."},"networkId":{"type":"string","description":"On-ramp only. Defaults to Solana mainnet."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"accountType":{"enum":["onramp","offramp"],"type":"string","description":"Which rail to open."},"capabilities":{"type":"array","items":{"type":"string"},"description":"On-ramp only. Bank rails to support. Defaults to ACH and wire."},"cryptoAddress":{"type":"string","description":"On-ramp only. Where the converted USDC should land. Defaults to the managed agent wallet."},"fiatDestinationId":{"type":"string","description":"Off-ramp only. The bank destination payouts go to, from `addBankingDestination`."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":375,"tokensAfter":375},{"name":"create_banking_profile","fixed":{"name":"create_banking_profile","description":"Create the banking profile\n\nOpens the banking profile that all other banking calls hang off. Identity verification is required first; if the human has not verified, the reply carries `kycRequired: true` and a `kycUrl` to hand them. **This is the only step an agent cannot complete itself.** Retry once they finish.\n\nFree.","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":151,"tokensAfter":151},{"name":"create_banking_recipient","fixed":{"name":"create_banking_recipient","description":"Create a payout recipient\n\nCreates a person or company money can be sent to. Bank details are attached separately with `addBankingDestination`.\n\nFree.","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","example":"Acme LLC","description":"The recipient's name."},"address":{"type":"object","description":"The recipient's postal address. Required before a bank destination can be attached, so supplying it here avoids a second call."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":180,"tokensAfter":180},{"name":"create_reloadable_card","fixed":{"name":"create_reloadable_card","description":"Create a reloadable card\n\nCreates a **reloadable** card funded from the account holder's balance with the card issuer, and returns it. This is the same card the holder creates in the Laso dashboard, so an agent and a human end up with the same product.\n\nThe card is **reusable by default** (`reusable: true`): it stays open across charges until its limit is spent. Pass `reusable: false` for a single-use card that closes after its first approved charge.\n\n**This route is free** — no x402 payment. Th","inputSchema":{"type":"object","required":["usd_amount"],"properties":{"reusable":{"type":"boolean","description":"Whether the card stays open across charges. Defaults to `true`; `false` closes it after the first approved charge."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"usd_amount":{"type":"number","description":"Amount in US dollars to load onto the card, minimum $1. Sent as dollars, not cents."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":290,"tokensAfter":290},{"name":"delete_address_book_entry","fixed":{"name":"delete_address_book_entry","description":"Remove a saved recipient\n\nThe saved recipient names your human manages on their dashboard, so a request like \"send $20 to the coffee vendor\" can be resolved to an address instead of asking them for it.\n\nFree.\n\nIt operates only on the authenticated account's own book — there is no user parameter to pass.\n\n**A name is a label, not an instruction.** `agentWalletTransfer` takes an address and deliberately does not accept a name: a rename between your human asking and you sending would otherwise move","inputSchema":{"type":"object","properties":{"address":{"type":"string","description":"The address to remove."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":222,"tokensAfter":222},{"name":"delete_banking_recipient","fixed":{"name":"delete_banking_recipient","description":"Delete a recipient\n\nDeletes a recipient, its destinations, and any off-ramp account that paid out to it. Irreversible.\n\nFree.","inputSchema":{"type":"object","required":["recipientId"],"properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"recipientId":{"type":"string","description":"The recipient to delete."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":125,"tokensAfter":125},{"name":"delete_payment_recipient","fixed":{"name":"delete_payment_recipient","description":"Remove a saved recipient (free)\n\nRemoves a saved Venmo or PayPal recipient. Payment history is kept; only the saved entry stops being offered.\n\nThis is not reversible through the API, so prefer archiving (`POST /payment-recipients` with `archived: true`) when the account owner may want the recipient back, and confirm before removing someone they did not ask you to remove.\n\n`platform` and `recipient_id` may be sent in the JSON body or the query string.","inputSchema":{"type":"object","properties":{"platform":{"enum":["venmo","paypal"],"type":"string","description":"Required unless sent in the body."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"recipient_id":{"type":"string","description":"Required unless sent in the body. The entry's `recipient_id` from `GET /payment-recipients` (an opaque id, not the phone number or email)."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":271,"tokensAfter":271},{"name":"delete_webhook","fixed":{"name":"delete_webhook","description":"Delete the notification webhook (free)\n\nRemoves the calling wallet's webhook registration. Notifications keep flowing to the user's other channels (push, SMS, Telegram, in-app); only the webhook deliveries stop. The account owner is notified of the removal.","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"get_account_balance","fixed":{"name":"get_account_balance","description":"Get account balance\n\nReturns the current account balance and total deposits for the authenticated user.","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":89,"tokensAfter":89},{"name":"get_agent_spend_limit","fixed":{"name":"get_agent_spend_limit","description":"Read the per-payment spend limit\n\nReturns the maximum the account owner allows for any single payment from the managed wallet: `maxPerPaymentUsdc`, plus the `min`, `max`, and `default` bounds it can be set within, all in whole USDC. The limit defaults to $1,000 and ranges from $1 to $50,000. It applies to every payment `agentX402Pay` makes, Laso routes and external `url` endpoints alike.\n\nCheck an amount against this **before** attempting a payment rather than waiting to be refused. Compare the ","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":200,"tokensAfter":200},{"name":"get_agent_wallet","fixed":{"name":"get_agent_wallet","description":"Get your managed agent wallet: whether one exists, its Solana address, its USDC balance, and whether it needs funding. Paid tools draw from this wallet, so check it before your first paid call. Fund it by sending USDC (Solana) to wallet_address.","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":127,"tokensAfter":127},{"name":"get_auth_link","fixed":{"name":"get_auth_link","description":"Get a login link for the web dashboard\n\nReturns a URL that a human can open in a browser to log in to the Laso Finance web dashboard as the authenticated user. Useful for humans who want to see what their AI agent has been doing (view cards, transactions, balances, etc.).\n\nThe URL carries a short single-use login code rather than a long token, so relay it to your human verbatim; it passes through tool-output credential filters intact. Do not fetch or open the URL yourself: redeeming the code con","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":198,"tokensAfter":198},{"name":"get_banking_application","fixed":{"name":"get_banking_application","description":"Read the banking application\n\nReads what the application still needs. Returns `ready` (whether it can be submitted), `applicationStatus`, and the outstanding questions. The identity answers carry over from verification; what remains are non-identity questions such as employment status and source of funds, which an agent can answer itself.\n\nFree.","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":159,"tokensAfter":159},{"name":"get_banking_profile_status","fixed":{"name":"get_banking_profile_status","description":"Check the banking profile status\n\nReads the current state of the banking profile: whether it exists, and where its application stands.\n\nFree.","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":102,"tokensAfter":102},{"name":"get_banking_transaction","fixed":{"name":"get_banking_transaction","description":"Read one transaction\n\nReads a single banking transaction — an on-ramp arriving or an off-ramp paying out — with its normalized status.\n\nFree.","inputSchema":{"type":"object","required":["transactionId"],"properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"transactionId":{"type":"string","description":"The transaction to read."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"get_card","fixed":{"name":"get_card","description":"Order a USA prepaid card\n\nPay between $5–$1000 USDC to order a Laso Finance USA prepaid card. By default returns JSON with auth credentials and card info (for AI agents). Pass `format=html` to get an HTML redirect to the card redemption URL (for browser-based flows).\n\nThe JSON response includes a `card.status` of `\"pending\"`. Card details (number, CVV, etc.) take ~7-10 seconds to become available. Poll `getCardData` at the `callableBaseUrl` to check when `status` becomes `\"ready\"`.\n\n**U.S. only.","inputSchema":{"type":"object","required":["amount"],"properties":{"amount":{"type":"number","maximum":1000,"minimum":5,"description":"USD amount to load on the card (min $5, max $1000)"},"format":{"enum":["json","html"],"type":"string","default":"json","description":"Response format. `json` (default) returns auth credentials and card info for agents. `html` returns a redirect page for browsers."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":297,"tokensAfter":297},{"name":"get_card_data","fixed":{"name":"get_card_data","description":"Get card details\n\nReturns the current status and details of card orders. If `card_id` is provided, returns a single card, looked up across U.S. non-reloadable, international non-reloadable, and reloadable cards. If omitted, returns all cards of the given `card_type` for the authenticated user; `card_type` defaults to `Non-Reloadable U.S.` when omitted, so existing callers see unchanged behavior. Pass `card_type=Non-Reloadable International` to list international cards, or `card_type=Reloadable` ","inputSchema":{"type":"object","properties":{"card_id":{"type":"string","description":"The card ID returned from `/get-card` or `/order-intl-card`, or a reloadable card's id from `card_type=Reloadable`. Looked up across all three card types. If omitted, returns all cards of `card_type`."},"card_type":{"enum":["Non-Reloadable U.S.","Non-Reloadable International","Reloadable"],"type":"string","default":"Non-Reloadable U.S.","description":"When listing all cards (no `card_id`), filters by card type. Defaults to `Non-Reloadable U.S.` if omitted (preserves existing client behavior). Pass `Non-Reloadable International` to list international cards, or `Reloadable` to list reloadable cards."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"approval_id":{"type":"string","description":"Reloadable cards only, and only for a card the account holder created in a DIFFERENT app: pass the approval_id from a prior details_approval response once they have approved it. Cards created through /create-reloadable-card are Laso-issued and never require this."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":465,"tokensAfter":465},{"name":"get_card_deposit_address","fixed":{"name":"get_card_deposit_address","description":"Get the reloadable card deposit address\n\nReturns the account holder's own USDC deposit address at the card issuer, and the balance currently on it. **This is how an agent funds a reloadable card balance with crypto.**\n\nFunding is user-funded: the address belongs to the account holder, so USDC sent to it credits their balance and funds their cards. The issuer provisions the address on first read, so simply calling this creates it.\n\n**Base only.** The address takes USDC on Base. USDC sent on anoth","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":202,"tokensAfter":202},{"name":"get_kyc_link","fixed":{"name":"get_kyc_link","description":"Get a KYC verification link (optional)\n\n**KYC is optional.** It is only needed for certain features such as Venmo/PayPal payouts via `/send-payment`, and may be used for additional controls in the future. If you are not using those features, you can ignore the verification endpoints.\n\nReturns a one-time identity-verification link (`kyc_url`) for the calling wallet. Open it (or hand it to the wallet owner) to complete verification. The typical flow is: call `/get-kyc-status`, and only if `kyc_ver","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":198,"tokensAfter":198},{"name":"get_kyc_status","fixed":{"name":"get_kyc_status","description":"Get KYC verification status (optional)\n\n**KYC is optional.** Most endpoints (cards, gift cards, push-to-card, account balance, withdrawals) do not require verification. It is only needed for certain features such as Venmo/PayPal payouts via `/send-payment`, and may be used for additional controls in the future. If you are not using those features, you can ignore the verification endpoints entirely.\n\nReturns the calling wallet's cached KYC verification status. Use this as a free pre-flight check ","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":199,"tokensAfter":199},{"name":"get_payment_status","fixed":{"name":"get_payment_status","description":"Check Venmo and PayPal payout status (free)\n\nReports the state of the Venmo and PayPal payouts this account has sent with `GET /send-payment`. Free: only the payout itself is a paid action.\n\nThree ways to call it: with `payment_id` to fetch one payout, with `recipient_id` (from `GET /payment-recipients`) to list every payout to that saved recipient, or with neither to list every payout this account has sent, newest first.\n\n`state` is `queued` (waiting on account balance), `in-process` (dispatche","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"payment_id":{"type":"string","description":"Fetch one payout by its `id`. Takes precedence over `recipient_id`."},"recipient_id":{"type":"string","description":"List every payout to one saved recipient. This is the `recipient_id` returned by `GET /payment-recipients`, not the phone number or email."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":284,"tokensAfter":284},{"name":"get_signup_status","fixed":{"name":"get_signup_status","description":"Wait for your human to finish the signup\n\nLong-polls until the human opens the claim link and finishes creating the account. Holds the connection open for about 60 seconds and returns **204 No Content** if they have not finished yet.\n\n**Retry on 204 and nothing else.** The call already blocks for you, so add no sleep between attempts. Every other status is final and retrying will not change the answer: 401 means the token is wrong, 410 means the link expired. Both carry `\"terminal\": true` in the","inputSchema":{"type":"object","required":["claim_token","claim_code"],"properties":{"claim_code":{"type":"string","description":"The claim_code from the same POST /signup response."},"claim_token":{"type":"string","description":"The claim_token from POST /signup."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":228,"tokensAfter":228},{"name":"get_version","fixed":{"name":"get_version","description":"Get the current docs version\n\nReturns the current content-hash version of the Laso Finance agent docs (`SKILL.md`, `openapi.json`, `llms.txt`, `llms-full.txt`, `ai-plugin.json`). Free, no auth or payment header.\n\nAgents aggressively cache these docs, so use this to detect a stale cache: if the `docs_version` you last saw differs from the value returned here, refetch the docs. Every API response also carries this value in the `X-Laso-Docs-Version` response header, alongside `X-Laso-Docs-Manifest`","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":165,"tokensAfter":165},{"name":"get_webhook","fixed":{"name":"get_webhook","description":"Get webhook registration & delivery health (free)\n\nReturns the calling wallet's webhook registration and its delivery health. The signing secret is never returned here — it is shown once by `POST /register-webhook`; re-register to rotate it.\n\nA registration is auto-disabled after 50 consecutive failed deliveries (`disabled` becomes `true`); re-register to re-enable it.","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":162,"tokensAfter":162},{"name":"get_withdrawal_status","fixed":{"name":"get_withdrawal_status","description":"Get withdrawal statuses\n\nReturns the status of withdrawals for the authenticated user. If `withdrawal_id` is provided, returns a single withdrawal. If omitted, returns all withdrawals.","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"withdrawal_id":{"type":"string","description":"Get a specific withdrawal by ID. If omitted, returns all withdrawals."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":145,"tokensAfter":145},{"name":"list_address_book","fixed":{"name":"list_address_book","description":"List saved recipients\n\nThe saved recipient names your human manages on their dashboard, so a request like \"send $20 to the coffee vendor\" can be resolved to an address instead of asking them for it.\n\nFree.\n\nIt operates only on the authenticated account's own book — there is no user parameter to pass.\n\n**A name is a label, not an instruction.** `agentWalletTransfer` takes an address and deliberately does not accept a name: a rename between your human asking and you sending would otherwise move mo","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":201,"tokensAfter":201},{"name":"list_bank_recipients","fixed":{"name":"list_bank_recipients","description":"List bank payout recipients (free)\n\nLists the recipients registered on your banking profile and the destinations attached to each, so you can find the `destination_id` that `GET /send-bank-payment` pays out to. Free — only the payout itself is a paid action.\n\nBank account numbers are returned masked to their last four digits; routing numbers are returned in full. Create recipients and destinations with the `createBankingRecipient` and `addBankingDestination` callables, rename a destination's `ni","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":200,"tokensAfter":200},{"name":"list_banking_accounts","fixed":{"name":"list_banking_accounts","description":"List banking accounts\n\nLists the account's banking rails and their details — for an on-ramp, the routing and account numbers to give whoever is paying in. The off-ramp deposit address is deliberately withheld: it is internal payout plumbing, not account detail.\n\nFree.","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":136,"tokensAfter":136},{"name":"list_banking_recipients","fixed":{"name":"list_banking_recipients","description":"List recipients and destinations\n\nLists payout recipients and their destinations, with account numbers masked to the last four digits. This is where `destination_id` values come from. Also available as the free paywalled route `GET /bank-recipients`.\n\nFree.","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":134,"tokensAfter":134},{"name":"list_banking_transactions","fixed":{"name":"list_banking_transactions","description":"List transactions\n\nLists banking transactions for the account: money arriving over the on-ramp and paying out over the off-ramp, with normalized statuses and amounts.\n\nFree.","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":111,"tokensAfter":111},{"name":"list_card_transactions","fixed":{"name":"list_card_transactions","description":"List reloadable card transactions\n\nReturns transactions on the authenticated user's **reloadable** cards, newest first: amount, merchant, status, and timestamps.\n\nPass `card_id` for one card's history, or omit it for every reloadable card on the account. Filter with `status` and cap the page with `limit`.\n\nThis route covers reloadable cards only. The two non-reloadable products keep their history in Laso's own records and are read through `/get-card-data`.\n\nIf the wallet has no card issuer accou","inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"Maximum number of transactions to return. Defaults to the issuer's own page size (20)."},"status":{"type":"string","description":"Filter by status, e.g. `pending`, `settled`, `declined`, `reversed`, `refunded`."},"card_id":{"type":"string","description":"Return only this card's transactions. Omit for every reloadable card on the account."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":308,"tokensAfter":308},{"name":"list_payment_recipients","fixed":{"name":"list_payment_recipients","description":"List saved Venmo and PayPal recipients (free)\n\nLists the Venmo or PayPal recipients this account has paid before, so you can resolve a name your human said (\"send $20 to Jane\") into the `handle` that `GET /send-payment` takes as its `recipient_id`. Free — only the payout itself is a paid action.\n\nTwo different ids are in play. Each entry's `recipient_id` is an opaque saved-entry id: pass it to `POST` and `DELETE /payment-recipients`. Its `handle` is the phone number or email you actually pay: pa","inputSchema":{"type":"object","required":["platform"],"properties":{"platform":{"enum":["venmo","paypal"],"type":"string","description":"Payment platform whose saved recipients to list."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"include_archived":{"enum":["true","false"],"type":"string","description":"Include archived entries. Defaults to false."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":275,"tokensAfter":275},{"name":"order_gift_card","fixed":{"name":"order_gift_card","description":"Order a gift card\n\nPay USDC via x402 to order a gift card. First browse the catalog via `GET /search-gift-cards` to find the `laso_server_id` for the card you want, then call this endpoint with the amount and product ID.\n\n**Pricing:** `amount` is the card's face value in the product's own currency, not USD. Laso converts it to USD at the current exchange rate and adds the product's fee (up to 4.8%); that total is the x402 USDC price. A 100 SAR card costs roughly $28 USDC, not $100. Check the pro","inputSchema":{"type":"object","required":["amount","laso_server_id"],"properties":{"amount":{"type":"number","description":"Gift card face value in the product's own currency (see the product's `currency` field in `GET /search-gift-cards`), not USD. The x402 price is this value converted to USD plus the product fee. After conversion it must be worth at least $5 and at most $9,000 USD.","exclusiveMinimum":0},"country":{"type":"string","default":"US","description":"ISO 3166-1 alpha-2 country code (defaults to \"US\")"},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"laso_server_id":{"type":"string","description":"The product identifier from the gift card catalog (GET /search-gift-cards). Always copy it from a search result; an id that is not in the catalog returns 404 `unknown_laso_server_id`. Amazon is `amazon` for every country, selected with `country`."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":415,"tokensAfter":415},{"name":"order_intl_card","fixed":{"name":"order_intl_card","description":"Order an international prepaid card\n\nOrder an international non-reloadable prepaid card (USD). The order is queued and fulfilled by an admin — after fulfillment, card details become available via `GET /get-card-data` with `card_type=Non-Reloadable International`.\n\nThe x402 payment covers the on-card amount plus a 3.8% fee. Minimum $100, maximum $1,000 on-card amount. Submit a whole dollar amount.\n\nPlacing the order accepts the card issuer's terms on behalf of the account holder: the [Cardholder ","inputSchema":{"type":"object","required":["amount"],"properties":{"amount":{"type":"number","maximum":1000,"minimum":100,"description":"On-card USD amount (min $100, max $1,000). Must be a whole dollar amount: the issuer only issues whole-dollar cards. The x402 payment is this amount plus a 3.8% fee."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":272,"tokensAfter":272},{"name":"pay_x402_endpoint","fixed":{"name":"pay_x402_endpoint","description":"Pay ANY external x402-paywalled endpoint from your managed agent wallet: the target's 402 challenge is settled in USDC and the response body is returned, with the settlement transaction as txHash. The wallet balance can take up to a minute to reflect a payment, so confirm with txHash rather than an immediate balance read. Use the guardrail arguments to pin what you agreed to pay. For Laso's own paid routes, prefer their dedicated tools instead.","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"Full https URL of the x402 endpoint to call and pay."},"body":{"type":"object","description":"JSON request body (for POST/PUT)."},"method":{"type":"string","description":"HTTP method (default GET)."},"params":{"type":"object","description":"Query parameters to append to the URL."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"expected_asset":{"type":"string","description":"Refuse to settle in any other asset (e.g. a USDC mint/contract address)."},"expected_pay_to":{"type":"string","description":"Refuse to settle to any other receiving address."},"max_amount_usdc":{"type":"number","description":"Refuse to settle if the endpoint asks for more USDC than this."},"expected_network":{"type":"string","description":"Refuse to settle on any other network (CAIP-2 id)."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":401,"tokensAfter":401},{"name":"save_address_book_entry","fixed":{"name":"save_address_book_entry","description":"Save or rename a recipient\n\nThe saved recipient names your human manages on their dashboard, so a request like \"send $20 to the coffee vendor\" can be resolved to an address instead of asking them for it.\n\nFree.\n\nIt operates only on the authenticated account's own book — there is no user parameter to pass.\n\n**A name is a label, not an instruction.** `agentWalletTransfer` takes an address and deliberately does not accept a name: a rename between your human asking and you sending would otherwise mo","inputSchema":{"type":"object","required":["address","name"],"properties":{"name":{"type":"string","example":"Coffee vendor","description":"The name to save it under. Sanitized and capped server-side (max 60 characters)."},"address":{"type":"string","example":"7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU","description":"The recipient's Solana address."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":289,"tokensAfter":289},{"name":"search_docs","fixed":{"name":"search_docs","description":"Search the Laso Finance agent docs (SKILL.md and the full API reference). Returns the most relevant sections. Use this for anything the tool descriptions don't answer: auth flows, funding, fees, webhooks, error handling.","inputSchema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","description":"Search terms, e.g. fund managed wallet, or: gift card fees."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":120,"tokensAfter":120},{"name":"search_gift_cards","fixed":{"name":"search_gift_cards","description":"Search the gift card catalog\n\nBrowse and search available gift cards. Returns a list of gift card products with pricing, denomination, and catalog information. Use the `laso_server_id` from the results to order a card via `GET /order-gift-card`.\n\nEvery response includes a `facets` object listing the valid values for the `category`, `currency`, and `country` filters. The facets are computed from the full catalog, so a single unfiltered request (no query parameters) is enough to discover everythin","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"Search query to filter gift cards by name (e.g. \"Amazon\", \"Uber\")"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code to filter by (e.g. \"US\", \"GB\"). Returns gift cards available in that country, including borderless products that have no country restriction."},"category":{"type":"string","description":"Category to filter by (e.g. \"ecommerce\", \"travel\", \"gaming\"). See the `facets.categories` array in any response for the full list of valid values."},"currency":{"type":"string","description":"Currency code to filter by (e.g. \"USD\", \"EUR\")"},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":373,"tokensAfter":373},{"name":"search_merchants","fixed":{"name":"search_merchants","description":"Search merchant spend data\n\nSearch Laso's merchant database for confirmed spend data for a given card type. Returns whether the card was accepted, not accepted, or unknown at each merchant.\n\nUse `card_type` to search by the USA prepaid card (`Non-Reloadable U.S.`, the default) or the international prepaid card (`Non-Reloadable International`). USA searches exclude merchants with non-US country-code TLDs; international searches do not.\n\n**Important:** This database only contains merchants where L","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Search query — the merchant name to search for (e.g. \"amazon\", \"netflix\")"},"card_type":{"enum":["Non-Reloadable U.S.","Non-Reloadable International"],"type":"string","default":"Non-Reloadable U.S.","description":"Which card type to search acceptance for. Defaults to `Non-Reloadable U.S.` if omitted (preserves existing client behavior). Pass `Non-Reloadable International` to search for international prepaid card acceptance."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":335,"tokensAfter":335},{"name":"send_bank_payment","fixed":{"name":"send_bank_payment","description":"Send dollars to a bank account\n\nPay USDC to send dollars to a bank account by ACH. The x402 USDC price is the requested amount plus a 0.25% transfer fee (with a $1.50 minimum fee). On-chain payment credits the calling wallet's Laso account balance via the standard deposit webhook; the callable then debits the gross amount and queues the transfer.\n\n**A bank destination is required first.** `destination_id` comes from the banking callables: create the banking profile with `createBankingProfile`, r","inputSchema":{"type":"object","required":["amount","destination_id"],"properties":{"amount":{"type":"number","maximum":50000,"minimum":10,"description":"USD delivered to the recipient's bank account (min $10, max $50,000). The x402 payment price is this amount plus a 0.25% fee (with a $1.50 minimum)."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"destination_id":{"type":"string","description":"Bank destination to pay out to. Returned by `addBankingDestination`, and listed by `GET /bank-recipients`."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":315,"tokensAfter":315},{"name":"send_feedback","fixed":{"name":"send_feedback","description":"Send feedback about the API\n\nTell the humans running Laso what worked, what was confusing, and what you wish existed. It lands on their dashboard, so it is the best channel for API friction and feature requests.\n\nRequires at least one completed real action (a settled deposit, purchase, or withdrawal); at most 5 entries per 24 hours.","inputSchema":{"type":"object","required":["feedback"],"properties":{"rating":{"type":"integer","example":4,"maximum":5,"minimum":1,"description":"A 1-5 satisfaction rating. Optional; ignored when not an integer in range."},"endpoint":{"type":"string","example":"/order-intl-card","description":"Which API endpoint or route the feedback is about. Optional. Capped at 120 characters."},"feedback":{"type":"string","example":"order-intl-card was smooth but I wanted a way to see the fee before paying","description":"The main free-text feedback. Required. Sanitized and capped server-side (max 2000 characters)."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"how_it_went":{"type":"string","example":"worked, minor confusion on fees","description":"How it went. Optional. Capped at 500 characters."},"what_they_want":{"type":"string","example":"order an international card","description":"What you were trying to do. Optional. Capped at 500 characters."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":392,"tokensAfter":392},{"name":"send_payment","fixed":{"name":"send_payment","description":"Send a payment via Venmo or PayPal\n\nPay USDC to send money to a Venmo or PayPal recipient. The x402 USDC price is the requested amount plus a 4.9% fee (with a $1.50 minimum fee). On-chain payment credits the calling wallet's Laso account balance via the standard deposit webhook; the callable then debits the gross amount and dispatches the payout.\n\n**KYC required.** The first time a wallet sends a Venmo or PayPal payout it must complete identity verification. If the wallet is not yet verified the","inputSchema":{"type":"object","required":["amount","platform","recipient_id","recipient_first_name","recipient_last_name"],"properties":{"amount":{"type":"number","maximum":1000,"minimum":5,"description":"USD amount to send to the recipient (min $5, max $1,000). The x402 payment price is this amount plus a 4.9% fee (with a $1.50 minimum)."},"platform":{"enum":["venmo","paypal"],"type":"string","description":"Payment platform."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"recipient_id":{"type":"string","description":"Recipient identifier. For Venmo: 10-digit U.S. phone number. For PayPal: email address."},"recipient_email":{"type":"string","format":"email","description":"Recipient's email address. Required for Venmo. Optional for PayPal, where it defaults to recipient_id (the PayPal email)."},"recipient_last_name":{"type":"string","description":"Recipient's last name (English letters A-Z and a-z only)."},"recipient_first_name":{"type":"string","description":"Recipient's first name (English letters A-Z and a-z only)."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":461,"tokensAfter":461},{"name":"start_signup","fixed":{"name":"start_signup","description":"Start a signup for a human with no Laso account\n\nBegins account creation for a human who does not have a Laso account yet. Requires no authentication, because the caller has no account.\n\nThis does **not** create the account. An agent cannot: the account is created by Privy in the human's own browser, so it belongs to them and not to their agent. What this returns is a `claim_url` to hand over.\n\nGive your human the `claim_url` verbatim in your very next reply (send `message_for_human` if unsure w","inputSchema":{"type":"object","properties":{"label":{"type":"string","example":"ada-prod","description":"Optional label recorded on the minted API key so your human can tell keys apart."},"agent_name":{"type":"string","example":"Ada","description":"Your name, shown to your human on the claim screen and recorded as the connected agent."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":247,"tokensAfter":247},{"name":"submit_banking_application","fixed":{"name":"submit_banking_application","description":"Submit the application\n\nSubmits the completed application for review. If the partner rejects it as incomplete, the reply says what is still missing rather than failing opaquely.\n\nFree.","inputSchema":{"type":"object","properties":{"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":114,"tokensAfter":114},{"name":"update_banking_application_details","fixed":{"name":"update_banking_application_details","description":"Answer application questions\n\nSubmits answers to the non-identity application questions read from `getBankingApplication`. Call as many times as needed; each call merges.\n\nFree.","inputSchema":{"type":"object","required":["details"],"properties":{"details":{"type":"object","description":"The answers to submit, keyed by the field names `getBankingApplication` reported as outstanding."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":160,"tokensAfter":160},{"name":"update_banking_destination","fixed":{"name":"update_banking_destination","description":"Rename a destination\n\nSets or clears a destination's nickname. This is the only editable field: bank details are immutable at the partner, so anything else wrong means deleting the recipient and creating a new one.\n\nFree.","inputSchema":{"type":"object","required":["destinationId","nickname"],"properties":{"nickname":{"type":"string","example":"Rent account","description":"The new nickname. An empty string clears it."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"destinationId":{"type":"string","description":"The destination to rename."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":189,"tokensAfter":189},{"name":"update_payment_recipient","fixed":{"name":"update_payment_recipient","description":"Rename or archive a saved recipient (free)\n\nRenames a saved Venmo or PayPal recipient, archives it, or both. Provide at least one of `display_name` or `archived`.\n\nArchiving hides an entry from the default list while keeping its history, which is the reversible way to retire a recipient. Prefer it over `DELETE`.","inputSchema":{"type":"object","required":["platform","recipient_id"],"properties":{"archived":{"type":"boolean","description":"Must be a boolean. A wrong type returns a terminal 400 with code `invalid_archived`."},"platform":{"enum":["venmo","paypal"],"type":"string","description":"Payment platform the recipient is saved under."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"display_name":{"type":"string","description":"Must be a string. A wrong type returns a terminal 400 with code `invalid_display_name`."},"recipient_id":{"type":"string","description":"The entry's `recipient_id` from `GET /payment-recipients` (an opaque id, not the phone number or email)."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":310,"tokensAfter":310},{"name":"upload_banking_document","fixed":{"name":"upload_banking_document","description":"Upload a proof-of-address document\n\nAttaches a proof-of-address document to the banking application, for the cases where the partner asks for one. The application must already exist and have an individual on it, so complete the application first.\n\n**Two things reject uploads that otherwise look fine.** A `.jpg` file must be sent as `fileType: \"jpeg\"` — `\"jpg\"` is refused. And the partner caps the *decoded* size at 10MB, even though their own upload page advertises 20MB; oversized files are rejec","inputSchema":{"type":"object","required":["documentType","fileType","fileContent","country"],"properties":{"country":{"type":"string","example":"US","description":"The document's country, ISO 3166-1 alpha-2."},"fileType":{"enum":["pdf","jpeg","png"],"type":"string","example":"jpeg","description":"The file's format. Send a .jpg as `jpeg`."},"filename":{"type":"string","example":"utility-bill.pdf","description":"The file's name."},"auth_token":{"type":"string","description":"Laso credential. Only if the MCP connection has no Authorization header."},"fileContent":{"type":"string","description":"The file, base64-encoded. A `data:` URL is also accepted. Decoded size must be 10MB or less."},"documentType":{"enum":["proof_of_address","bank_statement","utility_bill"],"type":"string","example":"utility_bill","description":"The kind of document."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":393,"tokensAfter":393}],"toolsChanged":53,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}