Write MCP tools for payments, transaction categorization, contact management, receipts, and account updates on Moneda
Write tools let your AI assistant make changes on your behalf. All write tools require the appropriate permissions, and payments always require your explicit approval in the Moneda mobile app.
Change your display name shown to other Moneda users.Try asking: “Change my display name to Federico”
set_passkey_label
Give one of your passkeys a nickname so you can tell your devices apart in the security screen. Maximum 40 characters. Pass the passkey id from get_passkeys, or send an empty label to go back to the provider name. Cosmetic only — it cannot add, remove, or weaken a passkey.Try asking: “Rename my hardware key passkey to Backup Yubikey”
Save an external crypto wallet to your account. The wallet must support USDC, EURC, CHFAU, CADD, and MXNB on the Base network. You’ll be asked to confirm this before the wallet is saved.Try asking: “Save this wallet address: 0x…”
add_bank
Save a bank account for withdrawals. Supports EU bank accounts (IBAN) and US bank accounts (ACH routing + account number).Try asking: “Add my bank account”
Register an external (non-Moneda) contact with their wallet address or bank account details. EU Travel Rule requires first name, last name, and country of residence.Try asking: “Add John as an external contact with his wallet address”
add_contact_moneda
Add a Moneda user to your contacts by their username.Try asking: “Add @alice to my contacts”
Payment requests created through MCP are sent to your Moneda mobile app, where you must approve them with biometric authentication. No money moves without your explicit confirmation.
initiate_payment
Create a payment request that requires your approval in the Moneda app. Supports transfers to Moneda users, your own external accounts, or contact bank accounts and wallets.Try asking: “Send $50 to @alice” or “Transfer EUR 100 to my bank account”By default the money comes from your main balance. Pass source to pay from earnings (USD and EUR sends) or from one of your single-signature sub-accounts (wallet recipients on Base only). Paying from a sub-account also needs the write:sub_accounts scope.Wallet payouts go out on Base. Payouts to a contact’s wallet on another chain can’t be requested through an agent yet; make those in the Moneda app.
initiate_currency_exchange
Exchange money between two of your own currency accounts, for example USD to EUR. The money lands in your own account in the target currency, and nothing moves until you approve the request in the Moneda app. Supported currencies: USD, EUR, CHF, CAD, MXN.Try asking: “Exchange $100 into euros”
propose_scheduled_payment
Propose a recurring payment, for example $50 every month to a Moneda user or a contact’s wallet. You review it in the Moneda app, including the most it can ever send, and nothing is scheduled until you approve and sign with your passkey. Proposals you don’t approve expire after 48 hours.Try asking: “Send @alice $50 every month starting October 1”
propose_sub_account_top_up
Propose moving money from your main account into one of your sub-accounts. Nothing moves until you approve and sign in the Moneda app. Requires the write:sub_accounts scope.Try asking: “Put $200 into my Travel vault”
propose_sub_account_withdraw
Propose moving money from a sub-account back to your main account. For joint accounts that need more than one approval, use propose_sub_account_multisig_proposal. Requires the write:sub_accounts scope.Try asking: “Move €50 from my Travel vault back to my account”
propose_sub_account_swap
Propose a swap inside a sub-account, for example USD into Bitcoin. The funds stay in the sub-account, and you see the live price and sign in the Moneda app. Requires the write:sub_accounts scope.Try asking: “Swap $100 to Bitcoin in my Savings vault”
propose_sub_account_freeze
Propose freezing a sub-account you created. You approve it in the Moneda app; unfreezing can only be done in the app. Requires the write:sub_accounts scope.Try asking: “Freeze my Kids vault”
propose_sub_account_multisig_proposal
Open a spend or withdraw proposal on a joint account that needs more than one approval. This only creates the proposal: you and your co-owners still approve and execute it in the Moneda app. Requires the write:sub_accounts scope.Try asking: “Propose paying @landlord $900 from our joint account”
initiate_crypto_trade
Buy or sell a crypto asset (Bitcoin or Ethereum) with your own balance. Moneda picks the route. You see the live price in the Moneda app, and nothing moves until you approve and sign there. Pays from or lands in USD, EUR, CAD or MXN.Try asking: “Buy $100 of Bitcoin”
initiate_token_buy
Buy a token on Base that is not in the crypto-trade catalogue, by its contract address, with your own USD, EUR, CHF or MXN balance. The token must be tradeable on Base. You see how much you get at the live price in the Moneda app, and nothing moves until you approve and sign there.Try asking: “Buy $25 of the token at 0x4ed4…efed”
cancel_conditional_order
Cancel an open crypto limit, stop-loss, take-profit or trailing-stop order. For a repeating rule, every remaining repeat is cancelled too. If the order is already live in the order book, it is withdrawn on-chain first and only then marked cancelled; if that fails the order stays live and you can retry. Filled, cancelled or expired orders can’t be cancelled. Requires write:trades. Creating orders is only possible in the Moneda app.Try asking: “Cancel my ETH take-profit order”
initiate_earnings_move
Move your own money into or out of an earnings vault: Earnings (Morpho, in USD, EUR or MXN) or Smart Earnings (YO, in USD or EUR). A deposit comes from the account in the same currency, and a withdrawal goes back to it. Nothing moves until you approve and sign in the Moneda app.Try asking: “Move $500 into Smart Earnings”
get_payment_status
Check the current status of a pending payment request. Terminal statuses are: completed, failed, expired, or rejected.Try asking: “What’s the status of my last payment?”
pay_x402
Pay an x402 (HTTP 402 Payment Required) invoice to a wallet address. When an API or service replies with HTTP 402, your AI assistant can pay it with USDC or EURC — requiring your approval in the Moneda app before it settles. Then it polls get_payment_status and retries the original request once paid.Try asking: “This API returned a 402 — pay the x402 invoice for me.”
Step 1 of 2 for uploading a local receipt file. Returns a presigned S3 PUT URL, a signed upload key, and a literal curl command for your code sandbox to stage the file. The file bytes go straight to S3 — never through the conversation context. Follow up with finalize_receipt_upload.Try asking: “I want to upload a receipt — what do I do?”
finalize_receipt_upload
Step 2 of 2 for uploading a local receipt file. Pass the upload key from request_receipt_upload after you’ve PUT the file to S3. Runs OCR + LLM extraction, attempts to auto-match to an existing transaction, and persists line items. Returns the receipt id, optional bill id (for invoices), and any matched/suggested transaction.Try asking: (used as a follow-up to request_receipt_upload)
import_receipt_from_url
Import a receipt directly from an https:// URL (S3, Drive shared link, public file host). The server fetches the file behind an SSRF guard, validates it, then runs OCR + matching. Single tool call, no sandbox needed.Try asking: “Import this receipt from this URL”
reparse_receipt
Re-run the OCR / LLM extraction pipeline on an existing receipt and return the refreshed fields. Use when extraction looks wrong or after a model upgrade.Try asking: “Re-scan this receipt — the merchant looks wrong”
attach_receipt
File an unattached receipt against a transaction. A transaction holds at most one receipt, so this reports a conflict if another is already attached — detach that one first.Try asking: “Attach that invoice to my Adobe payment”
detach_receipt
Unlink a receipt from its transaction, leaving the receipt itself intact as an orphan. Use it to correct a wrong match or free the transaction for a different receipt. Deletes nothing.Try asking: “That receipt is on the wrong transaction, unlink it”
confirm_receipt_suggestion
Accept the matcher’s suggested transaction for a receipt, promoting the soft suggestion to a real attachment. Suggestions appear when the match score was too low to attach automatically.Try asking: “Yes, that receipt does belong to the Lufthansa charge”
reject_receipt_suggestion
Dismiss the matcher’s suggested transaction. The receipt stays unattached and stops being offered against that transaction.Try asking: “No, that receipt isn’t for that payment”
delete_receipt
Permanently delete a receipt and its stored file. This is a hard delete — line items and any Bewirtungsbeleg or Eigenbeleg overlay go with it, and there is no undo. To move a receipt to a different transaction, use detach_receipt and attach_receipt instead.Try asking: “Delete that duplicate receipt”
mark_receipt_partial_payment
Mark a receipt as a partial payment: the document covers more than this one payment (a deposit or instalment against a larger invoice), so its total differing from the transaction amount is expected. Clears the amount-mismatch warning and keeps it cleared across a rescan. Amounts are not changed.Try asking: “That invoice was only a deposit, stop flagging the amount”
update_receipt_amounts
Correct a receipt’s total, subtotal, tax amount, tax rate or tip when the scan read them wrong. Omit a field to leave it unchanged, pass null to clear it. The tax rate is a percentage (19 for 19%). Rescanning the receipt re-extracts and overwrites these.Try asking: “The total on that receipt is 47.50, not 4.75”
Agent sessions let you hand your AI a bounded, autonomous spending mandate: a single pinned recipient, a per-payment cap, and a per-period cap, enforced on-chain by a pre-funded dedicated wallet. The funded balance is the hard ceiling on worst-case loss and the recipient is fixed on-chain — the agent can never exceed the limits or redirect funds. These tools need the Manage Agent Sessions permission, which is not granted by default — you opt in at connection time.
create_agent_session
Create a scoped autonomous session bound to your AI agent. You provide the recipient, currency, per-payment and per-period limits, and an optional expiry and funding amount. The tool returns a wallet address and an activation link. The session is not active yet — you open the activation link in the Moneda app and approve with your passkey to install the on-chain spending policy and fund the wallet. Only then can the agent pay within those limits.Try asking: “Set up an agent that can pay my landlord up to $500/month”
agent_execute_payment
Send a payment to an active session’s pinned recipient, within its on-chain limits — no per-payment approval. Rejected automatically if it would exceed the per-payment cap, the remaining period cap, or the funded balance. For safe retries, pass a stable idempotency key — retrying with the same key returns the original transaction instead of sending twice.Try asking: “Pay this month’s rent from my landlord agent session”
revoke_agent_session
Revoke an agent session. This immediately stops all further payments through it. You finish the on-chain teardown in the Moneda app.Try asking: “Stop the landlord agent session”
These tools let your AI sign devices out of your account and disconnect connected agents. Terminating a session takes effect immediately. They need the Manage Active Sessions permission, which is not granted by default — you opt in at connection time.
terminate_session
Sign out one login session by id (from list_active_sessions). The device is signed out immediately and can’t renew.Try asking: “Sign out my old iPhone” or “Terminate that web session”
terminate_all_other_sessions
Sign out all of your login sessions on other devices, keeping the current one. Doesn’t disconnect connected agents.Try asking: “Sign me out of every other device”
disconnect_connected_service
Disconnect a connected agent by id, revoking its access to your account immediately.Try asking: “Disconnect the ChatGPT connection”
AI usage credits are prepaid budget for your AI assistant. You top up by sending a stablecoin payment to Moneda and then redeeming that completed payment for credits. This tool needs the Purchase AI Usage Credits permission, which is not granted by default — you opt in at connection time.
purchase_usage_credits
Redeem a payment you already sent to Moneda for prepaid AI usage credits. You give the transaction hash of the completed top-up, and the amount is read straight from that confirmed payment, converted to your USD credit balance. The payment is already finished, so there’s nothing more to approve — this just turns it into credits. Safe to call again with the same hash: credits are only ever granted once.Try asking: “I sent the credit payment, here’s the transaction hash — add my AI credits.”
set_ai_usage_limit
Set a monthly cap on how much of your prepaid AI credit balance can be spent, or remove the cap entirely. Give a US dollar amount to set the limit, or ask for no limit to make it unlimited. The cap resets at the start of each month. Setting the same value again does nothing.Try asking: “Cap my AI spending at $50 a month.” or “Remove my monthly AI spending limit.”
redeem_points
Turn your Moneda Points into prepaid AI usage credits. Spends the points and adds the matching AI credit balance in one step, subject to a minimum and a monthly limit (check get_points_redemption_config first). Redemptions are final.Try asking: “Redeem 500 points for AI credits.”
create_api_key
Create an API key for a script, the CLI, or an integration. The secret is returned once and can never be retrieved again. A key can only carry permissions the connection creating it already has, and can never be used for payments — those always need your approval in the app.Try asking: “Create a read-only API key for my accounting script”
revoke_api_key
Revoke an API key. It stops working on its very next request, and this can’t be undone — you’d need to create a new key.Try asking: “Revoke the key I made for the old export script”