Optimize Roth conversions
optimize_roth_conversionsFind the best Roth conversion amount for each year of a retirement plan, with living expenses funded from the right accounts and tax paid each year. Returns per-year conversions, taxes and balances, the after-tax wealth at the end with vs without conversions, totals, a plain-language plan narrative and the assumptions used. Advanced options (IRMAA, NIIT, real state brackets) are off by default. Runs in 1-3 seconds (up to ~15 with IRMAA/NIIT on a long horizon). All money in today's dollars. Optimal for the stated assumptions; not tax advice. Call get_conversion_example first if unsure of the shape.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"age": "<age>",
"balances": "<balances>"
},
"name": "optimize_roth_conversions"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| age | Yes | Your age this year. The plan starts now (conversions can begin this year). | |
| filing | No | Tax filing status. Default 'single'. 'married' = one joint return (both spouses assumed the same age). | |
| end_age | No | Plan until this age (default 90; horizon at most 70 years). | |
| advanced | No | Advanced layers, all OFF by default exactly like the web tool. IRMAA and NIIT make the solve a MILP (a few seconds longer; each solve is capped at 5 s, best plan found is returned). | |
| balances | Yes | Current household balances, dollars. Omitted = 0; at least one must be above 0. | |
| assumptions | No | Modeling assumptions; the defaults (same as the web tool) are reported back. | |
| other_income | No | Other steady ordinary income (pension, rental, part-time pay), today's dollars. Omitted = none. | |
| social_security | No | Expected Social Security (household). Omitted = none. | |
| spending_end_age | No | Age spending ends (default: end of plan). | |
| find_max_spending | No | Instead of fixed spending, solve for the highest constant yearly spending the accounts can fund, ending near $0. Default false. | |
| spending_per_year | No | Yearly spending the plan must fund, today's dollars, before income tax. Required unless find_max_spending is true. | |
| spending_start_age | No | Age spending begins (default: now). |