Kind of Lost Kind of Lost · OR Tools · Roth Conversion Calculator · MCP server · Support

MCP server: the Roth Conversion Calculator inside your AI assistant

Ask your assistant how much to convert each year, and have a real solver answer.
Server URL: https://roth-conversion-calculator.kindoflost.com/mcp
Free, no signup, no API key. Streamable HTTP transport. Version 1.0.0.

What it does

This server gives an AI assistant the same optimizer that runs in the Roth Conversion Calculator. Given your age, your traditional, Roth and brokerage balances, your spending and your Social Security, it solves a linear program over the US federal tax brackets and returns how much to convert to Roth in each year, the tax on it, where the spending comes from, and the ending balances. It also solves the same plan with no conversions at all, so you can see what converting is worth. IRMAA (the Medicare surcharge), the 3.8% NIIT and real state brackets are available as advanced options, off by default just like the web tool. An assistant doing this arithmetic by itself will guess; here a solver does it.

Still working and wondering how to split your savings between Roth and traditional? That is the Roth vs Traditional Calculator, which has its own server.

How to connect

Claude: at https://claude.ai/customize/connectors, add a custom connector with the URL above. No OAuth needed.

Claude Code: claude mcp add --transport http roth-conversion https://roth-conversion-calculator.kindoflost.com/mcp

Other assistants and clients: anything that accepts a remote MCP server over HTTP; use the same URL.

Tools

Three tools, all read-only: none of them changes anything or stores your numbers.

get_conversion_example

Return a complete example input for optimize_roth_conversions with a one-line explanation of every field. No solve. Edit it to the user's situation. kind 'single' (default: a 60-year-old early retiree with a traditional IRA, a brokerage account and Social Security later) or 'married'.

Inputs (* = required):

InputTypeRangeMeaning
kindsingle | married

Returns: A complete example input object (single or married), a one-line explanation of every field (field_notes), the required fields and the next step. Nothing is solved.

optimize_roth_conversions

Find 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.

Inputs (* = required):

InputTypeRangeMeaning
filingsingle | marriedTax filing status. Default 'single'. 'married' = one joint return (both spouses assumed the same age).
age *integer18 to 90Your age this year. The plan starts now (conversions can begin this year).
end_ageintegermax 110Plan until this age (default 90; horizon at most 70 years).
balances *objectCurrent household balances, dollars. Omitted = 0; at least one must be above 0.
balances.traditionalnumbermin 0Traditional IRA / 401(k) (pre-tax) balance: the money that can be converted.
balances.rothnumbermin 0Roth IRA / 401(k) balance.
balances.roth_penalty_freenumbermin 0Of the Roth balance, the part that can be withdrawn penalty-free before 59.5 (contributions and conversions at least 5 years old). Default 0; cannot exceed 'roth'.
balances.brokeragenumbermin 0Taxable brokerage and cash.
balances.brokerage_gain_long_termnumbermin 0Unrealized LONG-term gain inside the brokerage balance.
balances.brokerage_gain_short_termnumbermin 0Unrealized SHORT-term gain inside the brokerage balance (long + short cannot exceed the balance).
spending_per_yearnumber0 to 5,000,000Yearly spending the plan must fund, today's dollars, before income tax. Required unless find_max_spending is true.
spending_start_ageintegerAge spending begins (default: now).
spending_end_ageintegerAge spending ends (default: end of plan).
find_max_spendingbooleanInstead of fixed spending, solve for the highest constant yearly spending the accounts can fund, ending near $0. Default false.
social_securityobjectExpected Social Security (household). Omitted = none.
social_security.annualnumbermin 0Yearly benefit in today's dollars.
social_security.start_ageinteger62 to 70Age benefits start. Default 70.
social_security.taxable_pctnumber0 to 85Share of benefits taxed as ordinary income, whole percent. Default 85.
other_incomeobjectOther steady ordinary income (pension, rental, part-time pay), today's dollars. Omitted = none.
other_income.annualnumber0 to 5,000,000Yearly amount.
other_income.start_ageintegerFirst age it is received (default: now).
other_income.end_ageintegerLast age it is received (default: end of plan).
assumptionsobjectModeling assumptions; the defaults (same as the web tool) are reported back.
assumptions.real_return_pctnumber-5 to 15Investment return above inflation, whole percent. Default 5.
assumptions.retirement_tax_rate_pctnumber0 to 60Income tax rate applied to leftover traditional money at the end of the plan (heirs' or your own). Default 24.
assumptions.terminal_ltcg_pctnumber0 to 40Capital-gains rate on leftover brokerage gain at the end. Default 15.
assumptions.ltcg_pctnumber0 to 40Flat capital-gains rate on gains realized during the plan. Default 15.
advancedobjectAdvanced 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).
advanced.irmaabooleanModel the Medicare Part B/D income surcharge (IRMAA) so conversions can avoid or accept tiers. Default false.
advanced.niitbooleanModel the 3.8% Net Investment Income Tax. Default false.
advanced.stateobjectState income tax. Default: none (0%).
advanced.state.codestringTwo-letter state code (e.g. 'KS'): uses that state's real 2026 brackets, standard deduction and credit.
advanced.state.flat_rate_pctnumber0 to 20Flat state rate, whole percent. Without 'code' it is the whole state model; with 'code' it only overrides the end-of-plan rate (default: the state's top rate).
advanced.state.exempts_social_securitybooleanThe state does not tax Social Security. Default false.
advanced.state.retirement_exclusionnumbermin 0Yearly cap on IRA distributions the state excludes, dollars. Default 0.

Returns: A short plain-text summary plus structured data: the conversion amount for every year (conversion_schedule), a year-by-year table (conversion, income tax, marginal rate, withdrawals from each account, start-of-year balances), the after-tax wealth at the end of the plan with the optimal conversions against the same plan with none, total tax, ending balances, a plain-language plan narrative, the assumptions used (defaults included) and the disclaimer.

check_request

Say in plain words what the user wants (e.g. 'I'm still working and want to know Roth vs traditional 401k'). Returns whether this optimizer can do it and, if not, the closest thing it can do (or the sister server that can). Fast, no solve.

Inputs (* = required):

InputTypeRangeMeaning
description *stringThe user's question in a sentence or two.

Returns: Whether the request fits (supported), the unsupported parts with the closest thing the server can do (or the sister server that can), and what the server does.

Example

Prompt:

I'm 60, single and retired. I have $900,000 in a traditional IRA, $60,000 in a Roth IRA and $350,000 in a brokerage account (about $120,000 of it is long-term gain). I spend about $60,000 a year, and I expect $36,000 a year of Social Security from 70. Assume a 5% real return and plan to age 92. How much should I convert to Roth each year, and what does it add compared with not converting?

The assistant calls get_conversion_example, fills in your numbers and calls optimize_roth_conversions. The text the tool returns for that example (generated live from the server):

Optimal for these assumptions (age 60, single, plan to 92).
Convert to Roth, by age: 60: $90,014, 61: $66,500, 62: $66,500, 63: $28,127, 64: $700, 65: $2,750, 66: $2,750, 67: $2,750, 68: $2,750, 69: $2,750. Total $265,591 over ages 60-69.
After-tax wealth at 92 (today's dollars): with conversions $896,838; with none $818,935 (conversions add +9.5%, $77,903).
Income tax over the plan: $264,738 with conversions, $269,601 without. Ending balances at 92: traditional $0, Roth $896,838, brokerage $0.
Assumes 5% real return, 24% tax on leftover traditional money, state: none (0%), IRMAA off, NIIT off.
Note: Nothing is left in the traditional IRA
Note: Your conversion window is ages 60–63
Note: It stops at the 22% bracket
Optimal for these assumptions only; not tax advice. Results depend on the assumed real return, the future tax rate and current tax law.
See every year and adjust inputs: https://roth-conversion-calculator.kindoflost.com

And the start of the structured data, trimmed:

{
  "status": "ok",
  "optimal_for_these_assumptions": true,
  "summary": {
    "metric": "after_tax_terminal_wealth (today's dollars, at age 92)",
    "with_optimal_conversions": 896838,
    "with_no_conversions": 818935,
    "conversions_add": {
      "dollars": 77903,
      "pct": 9.5
    },
    "total_converted_to_roth": 265591,
    "conversion_ages": "60-69",
    "total_income_tax_with_conversions": 264738,
    "total_income_tax_without_conversions": 269601,
    "of_which_state_tax": 0,
    "niit_paid": 0,
    "irmaa_surcharges_paid": 0
  },
  "conversion_schedule": [
    {
      "age": 60,
      "amount": 90014
    },
    {
      "age": 61,
      "amount": 66500
    },
    {
      "age": 62,
      "amount": 66500
    },
    {
      "age": 63,
      "amount": 28127
    },
    {
      "...": "more years"
    }
  ],
  "...": "plan_by_year, end_of_plan, plan_notes, assumptions, note"
}

Limits

Honest note

The plan is optimal for the stated assumptions (the real return, the future tax rate, current tax law and the other inputs), not for the future. Change the return or the tax rate on what is left and the answer can change. “Without conversions” is the same model with every conversion forced to zero. This is not tax advice, and I'm not a CPA: use the result as a starting point to bring to one. Money is in today's dollars.

Try it yourself

Prefer a form with charts and every year laid out? Use the calculator. Details on what is stored are in the privacy policy.

Support: mario@kindoflost.com.