propose_asset_trade
Propose a buy or sell trade for an asset. 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). For sells, validates the user holds enough quantity. The cash account currency must match priceCurrency. Always include a short user-supplied description; optionally include a categoryId.
MCP note: this tool only CREATES a pending proposal; nothing is recorded until confirm_proposal is called.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | YYYY-MM-DD. | |
| fees | No | Transaction fees in MAJOR units (e.g. 1.99 for $1.99, 5000 for Rp 5,000). Pass 0 if none. | |
| action | Yes | ||
| assetId | Yes | Id of the asset being traded. | |
| quantity | Yes | Number of units to buy or sell. | |
| categoryId | No | Optional category id to attach to the cash transaction. | |
| description | Yes | Short user-supplied description, e.g. 'DCA into AAPL'. | |
| pricePerUnit | Yes | Per-unit price in MAJOR units (the displayed amount, e.g. 180.25 for $180.25, 3123.98 for Rp 3,123.98). Fractional values are allowed (e.g. 0.000001 for high-supply crypto). The server scales to storage units; never pre-multiply by 100. | |
| cashAccountId | No | Id of the cash account funding or receiving this trade. Omit only in the email-import pipeline when the source email doesn't make it clear which cash account is involved — 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. | |
| priceCurrency | Yes | 3-letter currency code for the trade price. | |
| 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. |