propose_transfer
Propose a transfer between two of the user's accounts. Same-currency transfers move the amount as-is; cross-currency transfers use the user-supplied exchangeRate or fall back to the latest exchange_rate. Always include a short user-supplied description; optionally include a fee (in fromAccount currency) recorded as a separate expense on the source account. Returns a proposal id — to record it, call the confirm_proposal tool with the returned proposalId after the user approves (there is no UI button or proposal card to click in this context).
MCP note: this tool only CREATES a pending proposal; nothing is recorded until confirm_proposal is called.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| fee | No | Optional transfer fee in fromAccount currency, MAJOR units (e.g. 2.50 for $2.50, 1000 for Rp 1,000). Recorded as a separate expense on the source account. | |
| date | Yes | ||
| amount | Yes | Amount to transfer, in fromAccount currency, MAJOR units (the displayed amount, e.g. 100.00 for $100.00, 50000 for Rp 50,000). The server scales to storage units; never pre-multiply by 100. | |
| toCurrency | No | 3-letter currency for the destination amount. Required when toAccountId is omitted; otherwise inferred from the account. | |
| description | Yes | Short user-supplied description, e.g. 'rent to landlord'. | |
| toAccountId | No | Id of the destination account. Omit only in the email-import pipeline when the email is genuinely ambiguous about the destination account. Do not pass an empty string; omit the field entirely instead. | |
| exchangeRate | No | ||
| fromCurrency | No | 3-letter currency for the source amount. Required when fromAccountId is omitted; otherwise inferred from the account. | |
| fromAccountId | No | Id of the source account. Omit only in the email-import pipeline when the email is genuinely ambiguous about the source account — the user picks one via the Edit button. In chat, always pass a real id. Do not pass an empty string; omit the field entirely instead. | |
| editsProposalId | No | Id of an existing pending proposal to update in place. Pass this when the user asks to modify a proposal you previously made (e.g. 'make it $50 instead'). Look up current ids with listPendingProposals if you're unsure. Omit when proposing something new. |