propose_budget_upsert
Propose creating a new budget or updating an existing one. For create: provide name, allocated, currency. For update: provide envelopeId, allocated; the name and currency are kept from the existing budget. A budget resets weekly or monthly (period, default monthly) and tracks spending one of two ways: trackingMode 'category' counts the linked categories, and ONE budget can cover MANY: pass every category in categoryIds (e.g. rent + groceries + transport + utilities for a single 'Needs' budget); trackingMode 'manual' links no categories and the user tracks it by hand. On update, categoryIds replaces the current list, so pass the whole list. Look category ids up first and never invent them. 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 |
|---|---|---|---|
| name | No | Required when creating a new budget. | |
| period | No | How often the allocation resets. Defaults to 'monthly' on create; left unchanged on update unless you pass it. | |
| currency | Yes | ||
| allocated | Yes | Allocation in MAJOR units (the displayed amount, e.g. 500.00 for $500.00, 5000000 for Rp 5,000,000). The server scales to storage units; never pre-multiply by 100. | |
| categoryId | No | Shorthand for a categoryIds list of one. It is NOT an 'add this one' field: on update it replaces the budget's whole category list, exactly as categoryIds does, so a budget that already covers several would be left with just this one. To add a category to an existing budget, read its current list and pass all of them in categoryIds. | |
| envelopeId | No | Id of an existing budget to update; omit to create a new budget. | |
| categoryIds | No | Every category this budget tracks, e.g. rent + groceries + transport + utilities for one 'Needs' budget. On update this REPLACES the budget's current categories, so pass the full list you want, not just the new ones. Look ids up first; never invent them. | |
| trackingMode | No | 'category' counts spending from the linked categories automatically; 'manual' counts nothing and the user records progress by hand. Omit on create and it follows whether you passed categories. | |
| 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. | |
| includeInvestments | No | Count asset purchases (buys) toward this budget's spending alongside expenses. Defaults to false on create; left unchanged on update unless you pass it. |