Skip to main content
Glama

QuantCalc Retirement Engine

Server Details

Retirement Monte Carlo, tax-aware withdrawal and Roth-conversion plans, and a 2026 return estimate.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 42 days
Last Tested
Transport
Streamable HTTP ยท MCP 2025-06-18
URL
Repository
quantcalc-app/quantcalc-mcp-plugin
GitHub Stars
0
Server Listing
app.quantcalc/retirement-engine

TDQS

A4/5.0

Scored across 7 tools

Disambiguation4/5

Most tools have clearly distinct purposes: tax return estimation, Social Security claiming optimization, basic vs tax-aware projections, methodology explanation, and assumption listing/comparison. The only mild overlap is between compare_return_assumptions (runs plans under different return sets) and run_retirement_projection (single projection), and between compare_return_assumptions and list_return_assumption_sources, but descriptions make the boundaries clear enough.

Naming Consistency5/5

All seven tools use consistent snake_case with a verb-first pattern (compare_, estimate_, explain_, list_, optimize_, run_, run_). Minor variations like the year in estimate_2026_tax_return and extra descriptors do not break the predictable convention.

Tool Count5/5

Seven tools is well-scoped for a retirement calculation engine. Each tool earns its place by covering a distinct analysis or informational need, with no redundant or filler tools.

Completeness4/5

The surface covers core retirement planning workflows: basic and tax-aware projections, Social Security claiming optimization, return assumption sensitivity, tax return estimation, methodology, and assumption sources. Minor gaps exist (e.g., no plan persistence or year-by-year cash flow retrieval tool), but agents can work around them by passing inputs per call.

Available Tools

7 tools
compare_return_assumptionsCompare published return assumptionsA
Read-only
Inspect

Runs the same plan against several published capital market assumption sets and returns the success rate and median outcome under each, showing how far the answer moves with the return forecast used. Every input is optional: omitted plan inputs use an illustrative plan (age 65, $1,000,000 saved, $40,000 a year spending) which the reply states in its first line.

NameRequiredDescriptionDefault
pensionNoYearly pension income. Default 0.
sourcesNoSource ids to compare. Defaults to all.
allocationsNoPercentages summing to 100: [US stocks, international stocks, bonds, real estate, cash]. Default [60,10,25,5,0].
current_ageNoCurrent age of the primary person.
bucket_yearsNoOnly with withdrawal_strategy bucket: years of spending held in the cash bucket, 1-10.
return_modelNoHow returns are generated. parametric (default): the forward-looking published assumptions. bootstrap: stationary block bootstrap of historical months. historical: replays real months from 1926 in order. The last two need a PRO licence; without one the engine runs parametric and the result says so.
ss_start_ageNoAge Social Security starts. Default 67.
inflation_rateNoAnnual inflation as a percent, e.g. 2.5. Default 2.5.
retirement_ageNoAge work income stops. Defaults to current age.
returns_sourceNoWhich published return set to use (see list_return_assumption_sources). Default jpmorgan.
annual_spendingNoPlanned yearly spending in today's dollars, before income tax (this tool runs the standard engine, which does not model tax).
current_savingsNoTotal invested portfolio today, in dollars.
life_expectancyNoAge the plan must last until. Default 92.
social_securityNoYearly Social Security in today's dollars. Default 0 โ€” and 0 is reported as an explicit assumption, not hidden.
pension_start_ageNoAge the pension starts. Default 65.
withdrawal_strategyNoSpending rule. fixed (default): the planned amount, inflation-adjusted, every year. guyton-klinger: guardrails that cut or raise spending as the portfolio moves. vpw: variable percentage withdrawal. bucket: a cash reserve of bucket_years of spending.
monthly_contributionNoMonthly savings until retirement. Default 0.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint, openWorldHint), and the description adds real context beyond them: the response reports success rate and median outcome per assumption set, omitted inputs fall back to a stated illustrative plan, and that plan is disclosed in the reply's first line. It still doesn't say whether any inputs override the illustrative plan wholesale or how many sources get compared by default.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the operation and its distinguishing purpose, then the default-input behavior. No filler; every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 17-parameter, no-output-schema tool, the description covers the return shape (success rate and median per source) and the default-input path, which is what an agent needs to call it blind. Remaining gaps are minor: no note on runtime cost of running many simulations, and no cross-reference to run_retirement_projection as the single-source alternative.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema doesn't: the no-required-argument calling pattern and the concrete illustrative plan (age 65, $1,000,000, $40,000/yr) that stands in for omitted inputs. It does not add anything about the sources or allocations parameters beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (runs) and resource (the same plan) plus the distinguishing scope: several published capital market assumption sets, returning success rate and median outcome under each. This is clearly separable from run_retirement_projection (single assumption set) and list_return_assumption_sources (just a listing) without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the 'how far the answer moves with the return forecast' framing tells the agent this is a sensitivity/comparison call, and the no-argument default path is described. However, it never says when to prefer this over run_retirement_projection or when a comparison is unnecessary, so the agent must infer the choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

estimate_2026_tax_returnEstimate a 2026 federal and state tax returnA
Read-only
Inspect

Estimates a household's 2026 federal and state income tax return from its 2026 income (wages, Social Security, IRA and 401(k) distributions, pensions, Roth conversions, interest, dividends, capital gains and losses), deductions, withholding and estimated payments, and returns the federal refund or amount owed, the state refund or amount owed, and both together; the main Form 1040 lines (total income, AGI, deduction, taxable income, tax, total tax) and the state's taxable income and tax; and every default assumed, the facts the state engine assumed, and what is not modelled. Computed by QuantCalc's federal and state tax APIs, the engines the website's 2026 Return Preview is checked against to the cent. Requires a connected QuantCalc PRO licence or Tax Season Pass; without one it returns no figures and names the free web calculator. An estimate, not a filed return and not tax advice.

NameRequiredDescriptionDefault
ageYesThe age the filer reaches in 2026 (18-110).
stateYesTwo-letter state of residence for all of 2026, or DC. States with no income tax (e.g. TX, FL) return a state tax of 0.
wagesNoThe filer's 2026 wages (Form W-2 box 1). Default 0.
pensionNoTaxable 2026 pension and annuity income, the household's total. Default 0.
spouse_ageNoJoint return only: the age the spouse reaches in 2026. Default: the same as age, stated in the result.
birth_monthNoFiler's birth month, 1-12, optional. With it the 10% early-withdrawal tax applies only to the part of the year before 59 and a half; without it, through the year the filer reaches 59.
pension_typeNoWhether the pension is a private pension or a government (public) pension, for the state's retirement-income rules. Default private, stated in the result when a pension is given.
spouse_splitNoJoint return only: whose the IRA distributions, pension and Roth conversion are on the state return: even (half each), filer, spouse, or custom (the spouse's own amounts in spouse_ira_distributions, spouse_pension and spouse_roth_conversion, the rest the filer's). Arkansas, Delaware, Maryland, Minnesota, Missouri, North Dakota, Ohio and Virginia tax a couple by each spouse's own income, so there it can change the state tax; federal tax does not depend on it. Default even, stated in the result.
spouse_wagesNoJoint return only: the spouse's 2026 wages. Default 0.
filing_statusYes2026 filing status: single, married filing jointly (mfj), married filing separately (mfs) or head of household (hoh).
prior_year_agiNo2025 adjusted gross income, used with prior_year_tax: above $150,000 ($75,000 married filing separately) the prior-year safe harbor is 110%.
prior_year_taxNoTotal tax on the 2025 return. With it the underpayment penalty (Form 2210) is figured and subtracted; without it the penalty is not figured, stated in the result.
qualified_tipsNoQualified tips included in the wages, deducted on Schedule 1-A (IRC 224, up to $25,000, phased out above $150,000 / $300,000 MAGI; none married filing separately). Not more than the wages. Default 0.
spouse_pensionNospouse_split custom only: the spouse's part of pension.
charitable_cashNoCash gifts to charity in 2026. The engine figures the return with the standard deduction (with the 2026 deduction for non-itemizers' cash gifts) and with the itemized deductions given, and keeps the lower tax. Default 0.
long_term_gainsNo2026 net long-term capital gain; negative for a net loss. Default 0.
roth_conversionNoTaxable amount converted to Roth in 2026, the household's total. Default 0.
social_securityNoGross 2026 Social Security benefits of the household (Form SSA-1099 box 5); the engine figures the taxable part. Default 0.
medical_expensesNoItemized deduction input: medical and dental expenses paid in 2026, before the AGI floor. Default 0.
short_term_gainsNo2026 net short-term capital gain; negative for a net loss. Default 0.
taxable_interestNoTaxable interest (Form 1040 line 2b). Default 0.
ira_distributionsNoTaxable 2026 IRA, 401(k) and 403(b) distributions (not Roth conversions), the household's total. Default 0.
mortgage_interestNoItemized deduction input: home mortgage interest paid in 2026. Default 0.
state_withholdingNoState income tax withheld in 2026. Default 0.
estimated_paymentsNoThe 2026 federal estimated tax payments, up to four installments in order (April, June, September, January). Default none.
ordinary_dividendsNoOrdinary dividends, Form 1099-DIV box 1a (line 3b), including the qualified part. Default 0.
qualified_overtimeNoQualified overtime compensation included in the wages: the FLSA overtime premium only (the half in time-and-a-half), deducted on Schedule 1-A (IRC 225, up to $12,500, $25,000 joint, phased out above $150,000 / $300,000 MAGI; none married filing separately). Not more than the wages. Default 0.
spouse_birth_monthNoJoint return only: the spouse's birth month, 1-12, optional.
federal_withholdingNoFederal income tax withheld in 2026 from wages, pensions, IRA distributions and Social Security. Default 0, stated in the result.
qualified_dividendsNoThe qualified part of ordinary_dividends (box 1b, line 3a), taxed at the capital-gains rates; not more than ordinary_dividends. Default 0.
tax_exempt_interestNoTax-exempt (municipal bond) interest (line 2a): not taxed, but counts toward the taxable part of Social Security. Default 0.
marketplace_coverageNoTrue if the household had Marketplace (ACA) health coverage in 2026: the premium tax credit is not reconciled by this estimate and the result says so.
real_estate_tax_paidNoItemized deduction input: real estate tax paid in 2026. Default 0.
other_ordinary_incomeNoOther ordinary income that is not investment income (Schedule 1). Default 0.
spouse_roth_conversionNospouse_split custom only: the spouse's part of roth_conversion.
spouse_ira_distributionsNospouse_split custom only: the spouse's part of ira_distributions.
state_estimated_paymentsNoState estimated tax paid for 2026, the total. Default 0.
capital_gain_distributionsNoCapital gain distributions from funds (Form 1099-DIV box 2a). Default 0.
state_local_income_tax_paidNoItemized deduction input: state and local income tax paid in 2026 (Schedule A line 5a). Default 0.
capital_loss_carryover_long_termNoLong-term capital loss carried over from 2025, as a positive number. Default 0.
capital_loss_carryover_short_termNoShort-term capital loss carried over from 2025, as a positive number. Default 0.

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint and openWorldHint; the description goes well beyond them by disclosing the licence gate and its failure mode, that the numbers come from the same engines the website's Return Preview is checked against to the cent, exactly what the result contains including assumed defaults and unmodelled items, and the 'estimate, not a filed return, not tax advice' limitation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and outputs are front-loaded, and the sentence chain is dense but each clause maps to real function (outputs, engine provenance, licence gate, disclaimer). The long parenthetical listing income types is partly redundant with the 41-parameter schema and could be trimmed without loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 41-parameter tool with no output schema, the description compensates well: it enumerates the returned figures and Form 1040 lines, states that defaults and state-engine assumptions are reported, flags the unmodelled Marketplace premium tax credit reconciliation, and covers the licence prerequisite. Little an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across 41 parameters, so the schema already documents each field including defaults, phases-outs and constraints. The description's enumeration of income sources adds narrative framing but no syntax or edge-case detail beyond what the schema already carries, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (estimates) and resource (a 2026 federal and state income tax return) with the exact input categories and the exact outputs (federal/state refund or owed, main Form 1040 lines, defaults assumed, what is not modelled). It never names a sibling tool, so an agent must infer for itself why it would pick this over run_tax_aware_projection or explain_methodology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the name and by boundary statements ('An estimate, not a filed return and not tax advice'), and it does surface a real prerequisite: a connected QuantCalc PRO licence or Tax Season Pass, without which it returns no figures and names the free calculator. There is no explicit 'use this instead of X when Y' routing to the five sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explain_methodologyWhat the engine models, and what it does notA
Read-only
Inspect

Returns what the QuantCalc engine models and what it deliberately leaves out, including the tax provisions that are out of scope, and links to the published methodology.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description is not required to restate safety. It adds value by disclosing the tool returns both included and excluded items, specifically tax provisions, and provides links. This goes beyond the annotations and gives clear behavioral context about the output content.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that packs essential information: what is returned, what is excluded, and that links are provided. There is no filler, and the core purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter informational tool with no output schema, the description fully covers what the agent needs to know to call it correctly: the nature of the returned information and the presence of links. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema is empty with 100% coverage. Per the baseline for no parameters, a score of 4 is appropriate; the description does not need to explain parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a summary of what the QuantCalc engine models and excludes, including tax provisions out of scope, and links to methodology. This is a specific verb ('Returns') and resource (engine scope), and it differentiates from sibling tools that focus on assumptions, sources, or projections.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used to understand modeling scope, but it does not explicitly state when to use it versus alternatives, nor does it provide any exclusion criteria. An agent can infer the purpose, but there is no direct guidance on selecting this tool over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_return_assumption_sourcesList available return assumption setsA
Read-only
Inspect

Returns the published capital market assumption sets the engine carries and which components each publisher provides (returns, volatilities, correlations).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, covering safety and scope. The description adds specific behavioral context by specifying what the return includes (which components each publisher provides), going slightly beyond the annotations. It does not contradict annotations and provides useful detail about the operation's output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the main action ('Returns the published capital market assumption sets') and then adds the key detail about components. Every word contributes to clarity, with no wasted phrasing or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool with annotations covering safety and open-world behavior, the description provides all necessary context. It tells the agent what the tool returns and what information is included, which is sufficient for correct invocation. No output schema exists, so the description adequately explains the return value.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema trivially covers 100% of parameters. Per rubric, a baseline of 4 is given for 0 parameters. The description does not need to add parameter meaning since there are none, and it correctly focuses on the output semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Returns') and a specific resource ('the published capital market assumption sets the engine carries'), and adds detail about the returned components (returns, volatilities, correlations). This distinguishes it from siblings like compare_return_assumptions (which compares) and run_retirement_projection (which runs projections).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context about when to use the tool: to retrieve the list of available assumption sets and their components. However, it does not explicitly mention alternatives or exclusions relative to sibling tools. The purpose is obvious enough that an agent can infer when to call it, but there is no explicit 'use this when' or 'not for comparing' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

optimize_social_security_claimingSocial Security claiming age search (tax-aware, PRO)A
Read-only
Inspect

Searches every Social Security claiming age from 62 (or today's age) to 70 for the household's tax-aware plan: each age's benefit is the given benefit restated by the SSA reduction and delayed-retirement-credit rules, and each age runs the full tax-aware plan on the same simulated markets as the plan's own age. The score of a path is the after-tax estate minus unfunded spending (today's dollars); the result gives each age's success rate and median paired difference against the plan, the best age, and the 10th-90th percentile range. Requires a connected QuantCalc PRO licence. Long searches return a job_id: call again with only job_id to fetch the result.

NameRequiredDescriptionDefault
stateNoTwo-letter state of residence (or DC) for state income tax with that state's retirement-income rules. When absent the result states that no state tax was modelled.
job_idNoOnly to fetch a search a previous call started: the job_id it returned. With it, no other input is read.
annuityNoOptional: a single-life immediate annuity bought at purchase_age with premium (today's dollars) from the traditional IRA (a qualified annuity: payments fully taxable) or the taxable account (non-qualified: each payment is tax-free up to the premium over the IRS Table V multiple until the premium is recovered). Payments start in the purchase year and stop at death.
pensionNoYearly pension income. Default 0.
lifespanNofixed (default): the plan runs to its end age. stochastic: each path draws your death year from the SSA period life table and ends after it (the estate is held at its value at death; success = the money lasted while you were alive). Not on a joint return.
ira_basisNoOptional: your Form 8606 basis (nondeductible traditional IRA contributions not yet recovered); that share of each traditional withdrawal and conversion is tax-free. Not with a per-owner traditional balance.
annual_qcdNoYearly qualified charitable distribution from the traditional account, in today's dollars, counted against required minimum distributions. Default 0.
birth_yearNoYear of birth, optional. Must match current_age: 2026 minus current_age, or 2025 minus current_age when this year's birthday is still to come (then every tax rule uses the age reached in each calendar year). Sets the RMD start age (73 if born 1951-1959, 75 if born 1960 or later). Default: 2026 minus current_age, stated in the result.
dependentsNoOptional: up to 8 people you claim, each {age (at the end of 2026; negative = born later), student, disabled}. Each retirement year counts the qualifying children that year for the child tax credit (under 17), the credit for other dependents and the earned income credit, and gives them to the state return.
spouse_ageNoSpouse's current age, for married filing jointly: sets the second aged deduction and Medicare surcharge. Default: the same as current_age, stated in the result.
allocationsNoPercentages summing to 100: [US stocks, international stocks, bonds, real estate, cash]. Default [60,10,25,5,0].
birth_monthNoMonth of birth, 1-12, optional. Times the half-year rules: the early-withdrawal penalty ends at 59 and a half, charitable distributions start at 70 and a half, Medicare starts in the birthday month. Default: not given, stated in the result.
current_ageNoCurrent age of the primary person.
bucket_yearsNoOnly with withdrawal_strategy bucket: years of spending held in the cash bucket, 1-10.
pension_typeNoWhether the pension is private or a government (public) pension, which several states exempt from state income tax. Only affects the tax-aware tool. Default private, and the tax-aware result states it.
return_modelNoHow returns are generated. parametric (default): the forward-looking published assumptions. bootstrap: stationary block bootstrap of historical months. historical: replays real months from 1926 in order. The last two need a PRO licence; without one the engine runs parametric and the result says so.
roth_balanceNoRoth IRA and Roth 401(k) balance today, in dollars. 0 if none.
spouse_splitNoMarried filing jointly with a state: whose IRA withdrawals, pension and Roth conversions they are on the state return: even (half each), filer (all the filer's) or spouse (all the spouse's). Arkansas, Delaware, Maryland, Minnesota, Missouri, North Dakota, Ohio and Virginia tax a couple by each spouse's own income, so there it can change the state tax; federal tax does not depend on it. Default on a joint return with a state: even (the spouse's age is then needed; when spouse_age is not given it is current_age), stated in the result. Not used off a joint return or without a state.
ss_start_ageNoAge Social Security starts. Default 67.
filing_statusNoFederal filing status: single, married filing jointly (mfj), married filing separately (mfs) or head of household (hoh).
inflation_rateNoAnnual inflation as a percent, e.g. 2.5. Default 2.5.
retirement_ageNoAge work income stops. Defaults to current age.
returns_sourceNoWhich published return set to use (see list_return_assumption_sources). Default jpmorgan.
aca_marketplaceNoOptional: the household buys marketplace (ACA) health coverage in the retirement years before Medicare. Each path's premium tax credit is figured each year by the federal engine's Form 8962 at that path's own income (no credit above 400% of the poverty line; Medicaid below 138% in expansion states), and the premium after the credit is funded each year and counted by the withdrawal-order search. Needs state.
annual_spendingNoPlanned yearly spending in today's dollars, after tax: what the household keeps. The engine withdraws enough each year to fund this plus that year's federal, state, Medicare-surcharge and penalty tax.
life_expectancyNoAge the plan must last until. Default 92.
roth_conversionNoThe household's own Roth-conversion plan: a fixed amount per year between two ages. When given, the engine applies it on every path and searches withdrawal orders around it instead of searching its own conversion programmes.
social_securityNoYearly Social Security in today's dollars. Default 0 โ€” and 0 is reported as an explicit assumption, not hidden.
taxable_balanceNoTaxable brokerage and savings today, in dollars. 0 if none. The three balances together are the portfolio.
cost_basis_ratioNoPercentage of the taxable account that is cost basis, 0-100. Default 40, and the result says so when it is assumed.
pension_start_ageNoAge the pension starts. Default 65.
medicare_start_ageNoAge Medicare (and its IRMAA income surcharges) begins. Default 65. The year it begins is charged only for the months from the birthday month.
itemized_deductionsNoOptional Schedule A amounts, in today's dollars a year: each year the engine adds that year's own state and local income tax (capped with the property tax by the SALT limit), takes gifts over 0.5% of AGI and medical costs over 7.5% of AGI, and itemizes when that gives the lower tax; otherwise the standard deduction. They are deductions only, assumed to be inside annual_spending already. Mortgage interest stays fixed in dollars until its end year, property tax rises 3.5% a year, giving with inflation, medical costs with inflation. Do not include QCDs in charitable_giving. Default: none, stated in the result.
tax_exempt_interestNoYearly municipal-bond interest, which counts toward Social Security taxability and IRMAA income but is not itself taxed. Default 0.
traditional_balanceNoPre-tax retirement accounts today (traditional IRA, 401(k), 403(b)), in dollars. 0 if none.
withdrawal_strategyNoSpending rule. fixed (default): the planned amount, inflation-adjusted, every year. guyton-klinger: guardrails that cut or raise spending as the portfolio moves. vpw: variable percentage withdrawal. bucket: a cash reserve of bucket_years of spending.
monthly_contributionNoMonthly savings until retirement. Default 0.
roth_contribution_basisNoOptional: the part of roth_balance that is your own regular Roth IRA contributions (withdrawn first, tax-free). Giving it, roth_first_contribution_year or ira_basis turns on the Roth ordering and 5-year rules on Roth withdrawals (earnings before 59 1/2 or inside the 5-year clock are taxed, with the 10% additional tax before 59 1/2) and the Form 8606 pro-rata rule on traditional withdrawals and conversions. Default: all of roth_balance.
roth_first_contribution_yearNoOptional: the first year you contributed to or converted into any Roth IRA (the 5-year clock), 1998-2026. Default: 2021 when roth_balance > 0.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=true, openWorldHint=true), and the description adds real behavioral context beyond them: the PRO-licence entitlement requirement and the long-search job_id round-trip. It also discloses the scoring method (after-tax estate minus unfunded spending) and result shape. It stops short of noting cost/runtime expectations of the full search.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Roughly five sentences, front-loaded with the core action and scope, then mechanics, result contents, licence and async handling in a sensible order. The second sentence is dense and runs long, but each clause carries information an agent needs rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 39-parameter simulation tool with no output schema, the description is close to complete: it enumerates the returned statistics (success rate, median paired difference, best age, 10th-90th percentile range), the licence gate and the job_id recall. It omits any note on which inputs are effectively required to get a meaningful search, which the schema (0 required params) cannot supply.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 39 parameters, including nested annuity, ACA and itemized-deduction objects, are already documented. The description adds no parameter-level meaning (e.g. how social_security feeds the restatement) and instead spends its words on mechanics, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource with explicit scope: 'Searches every Social Security claiming age from 62 (or today's age) to 70 for the household's tax-aware plan.' It also states the scoring rule and what the result contains, so an agent can distinguish this age-search tool from the plain projections in the sibling list without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the purpose ('for the household's tax-aware plan', 'Requires a connected QuantCalc PRO licence'), and the async job_id recall path is explained. However, it never states when to reach for this instead of run_tax_aware_projection or run_retirement_projection, nor any precondition on inputs beyond the licence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_retirement_projectionRun a retirement projectionA
Read-only
Inspect

Runs a Monte Carlo retirement projection on the QuantCalc engine and returns the success rate, the ending-portfolio distribution, and the assumptions that produced them. The result states the return model that ran, the number of paths, and the income assumptions it used, including when there are none. Income tax is not modelled by this tool; run_tax_aware_projection models it.

NameRequiredDescriptionDefault
pensionNoYearly pension income. Default 0.
allocationsNoPercentages summing to 100: [US stocks, international stocks, bonds, real estate, cash]. Default [60,10,25,5,0].
current_ageYesCurrent age of the primary person.
bucket_yearsNoOnly with withdrawal_strategy bucket: years of spending held in the cash bucket, 1-10.
return_modelNoHow returns are generated. parametric (default): the forward-looking published assumptions. bootstrap: stationary block bootstrap of historical months. historical: replays real months from 1926 in order. The last two need a PRO licence; without one the engine runs parametric and the result says so.
ss_start_ageNoAge Social Security starts. Default 67.
inflation_rateNoAnnual inflation as a percent, e.g. 2.5. Default 2.5.
retirement_ageNoAge work income stops. Defaults to current age.
returns_sourceNoWhich published return set to use (see list_return_assumption_sources). Default jpmorgan.
annual_spendingYesPlanned yearly spending in today's dollars, before income tax (this tool runs the standard engine, which does not model tax).
current_savingsYesTotal invested portfolio today, in dollars.
life_expectancyNoAge the plan must last until. Default 92.
social_securityNoYearly Social Security in today's dollars. Default 0 โ€” and 0 is reported as an explicit assumption, not hidden.
pension_start_ageNoAge the pension starts. Default 65.
withdrawal_strategyNoSpending rule. fixed (default): the planned amount, inflation-adjusted, every year. guyton-klinger: guardrails that cut or raise spending as the portfolio moves. vpw: variable percentage withdrawal. bucket: a cash reserve of bucket_years of spending.
monthly_contributionNoMonthly savings until retirement. Default 0.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnlyHint/openWorldHint annotations: it discloses the PRO-licence requirement for bootstrap and historical return models, the silent fallback to parametric without one, and the fact that the result self-reports the return model, path count, and income assumptions including the zero case. This is exactly the kind of behavioural context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the verb and outputs, then the routing and output-content detail. No filler. Slightly dense phrasing ('including when there are none') costs a point but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating the return payload (success rate, distribution, assumptions, return model, path count) and the licence-dependent behaviour of two of the three return models. For a 16-parameter simulation tool, an agent has what it needs to call it and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all 16 parameters, including enums and defaults, so the schema does the heavy lifting. The description reinforces the tax caveat on annual_spending but adds no syntax, format, or interaction detail beyond what the schema already documents. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Runs a Monte Carlo retirement projection') plus the engine it runs on and the three outputs it produces (success rate, ending-portfolio distribution, assumptions). It also names the sibling it is not, run_tax_aware_projection, so an agent can separate the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the exclusion condition ('Income tax is not modelled by this tool') and routes to the alternative that does model it. It does not address the other plausible siblings (optimize_social_security_claiming, list_return_assumption_sources, compare_return_assumptions), so the routing is clear but partial.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_tax_aware_projectionTax-aware projection with the recommended withdrawal orderB
Read-only
Inspect

Runs the retirement projection with the household's accounts split by tax type and returns the withdrawal order and Roth-conversion programme the engine selected, its present-value advantage and range against drawing traditional first, and the after-tax success rate. Federal and state income tax (50 states and DC), Social Security taxability, required minimum distributions, Medicare IRMAA surcharges and the early-withdrawal penalty are paid from the portfolio year by year; spending is what the household keeps after tax. The result states every assumption it used, including the defaults for inputs that were not given, and what the engine does not model.

NameRequiredDescriptionDefault
stateNoTwo-letter state of residence (or DC) for state income tax with that state's retirement-income rules. When absent the result states that no state tax was modelled.
annuityNoOptional: a single-life immediate annuity bought at purchase_age with premium (today's dollars) from the traditional IRA (a qualified annuity: payments fully taxable) or the taxable account (non-qualified: each payment is tax-free up to the premium over the IRS Table V multiple until the premium is recovered). Payments start in the purchase year and stop at death.
pensionNoYearly pension income. Default 0.
lifespanNofixed (default): the plan runs to its end age. stochastic: each path draws your death year from the SSA period life table and ends after it (the estate is held at its value at death; success = the money lasted while you were alive). Not on a joint return.
ira_basisNoOptional: your Form 8606 basis (nondeductible traditional IRA contributions not yet recovered); that share of each traditional withdrawal and conversion is tax-free. Not with a per-owner traditional balance.
annual_qcdNoYearly qualified charitable distribution from the traditional account, in today's dollars, counted against required minimum distributions. Default 0.
birth_yearNoYear of birth, optional. Must match current_age: 2026 minus current_age, or 2025 minus current_age when this year's birthday is still to come (then every tax rule uses the age reached in each calendar year). Sets the RMD start age (73 if born 1951-1959, 75 if born 1960 or later). Default: 2026 minus current_age, stated in the result.
dependentsNoOptional: up to 8 people you claim, each {age (at the end of 2026; negative = born later), student, disabled}. Each retirement year counts the qualifying children that year for the child tax credit (under 17), the credit for other dependents and the earned income credit, and gives them to the state return.
spouse_ageNoSpouse's current age, for married filing jointly: sets the second aged deduction and Medicare surcharge. Default: the same as current_age, stated in the result.
allocationsNoPercentages summing to 100: [US stocks, international stocks, bonds, real estate, cash]. Default [60,10,25,5,0].
birth_monthNoMonth of birth, 1-12, optional. Times the half-year rules: the early-withdrawal penalty ends at 59 and a half, charitable distributions start at 70 and a half, Medicare starts in the birthday month. Default: not given, stated in the result.
current_ageYesCurrent age of the primary person.
bucket_yearsNoOnly with withdrawal_strategy bucket: years of spending held in the cash bucket, 1-10.
pension_typeNoWhether the pension is private or a government (public) pension, which several states exempt from state income tax. Only affects the tax-aware tool. Default private, and the tax-aware result states it.
return_modelNoHow returns are generated. parametric (default): the forward-looking published assumptions. bootstrap: stationary block bootstrap of historical months. historical: replays real months from 1926 in order. The last two need a PRO licence; without one the engine runs parametric and the result says so.
roth_balanceYesRoth IRA and Roth 401(k) balance today, in dollars. 0 if none.
spouse_splitNoMarried filing jointly with a state: whose IRA withdrawals, pension and Roth conversions they are on the state return: even (half each), filer (all the filer's) or spouse (all the spouse's). Arkansas, Delaware, Maryland, Minnesota, Missouri, North Dakota, Ohio and Virginia tax a couple by each spouse's own income, so there it can change the state tax; federal tax does not depend on it. Default on a joint return with a state: even (the spouse's age is then needed; when spouse_age is not given it is current_age), stated in the result. Not used off a joint return or without a state.
ss_start_ageNoAge Social Security starts. Default 67.
filing_statusYesFederal filing status: single, married filing jointly (mfj), married filing separately (mfs) or head of household (hoh).
inflation_rateNoAnnual inflation as a percent, e.g. 2.5. Default 2.5.
retirement_ageNoAge work income stops. Defaults to current age.
returns_sourceNoWhich published return set to use (see list_return_assumption_sources). Default jpmorgan.
aca_marketplaceNoOptional: the household buys marketplace (ACA) health coverage in the retirement years before Medicare. Each path's premium tax credit is figured each year by the federal engine's Form 8962 at that path's own income (no credit above 400% of the poverty line; Medicaid below 138% in expansion states), and the premium after the credit is funded each year and counted by the withdrawal-order search. Needs state.
annual_spendingYesPlanned yearly spending in today's dollars, after tax: what the household keeps. The engine withdraws enough each year to fund this plus that year's federal, state, Medicare-surcharge and penalty tax.
life_expectancyNoAge the plan must last until. Default 92.
roth_conversionNoThe household's own Roth-conversion plan: a fixed amount per year between two ages. When given, the engine applies it on every path and searches withdrawal orders around it instead of searching its own conversion programmes.
social_securityNoYearly Social Security in today's dollars. Default 0 โ€” and 0 is reported as an explicit assumption, not hidden.
taxable_balanceYesTaxable brokerage and savings today, in dollars. 0 if none. The three balances together are the portfolio.
cost_basis_ratioNoPercentage of the taxable account that is cost basis, 0-100. Default 40, and the result says so when it is assumed.
pension_start_ageNoAge the pension starts. Default 65.
medicare_start_ageNoAge Medicare (and its IRMAA income surcharges) begins. Default 65. The year it begins is charged only for the months from the birthday month.
itemized_deductionsNoOptional Schedule A amounts, in today's dollars a year: each year the engine adds that year's own state and local income tax (capped with the property tax by the SALT limit), takes gifts over 0.5% of AGI and medical costs over 7.5% of AGI, and itemizes when that gives the lower tax; otherwise the standard deduction. They are deductions only, assumed to be inside annual_spending already. Mortgage interest stays fixed in dollars until its end year, property tax rises 3.5% a year, giving with inflation, medical costs with inflation. Do not include QCDs in charitable_giving. Default: none, stated in the result.
tax_exempt_interestNoYearly municipal-bond interest, which counts toward Social Security taxability and IRMAA income but is not itself taxed. Default 0.
traditional_balanceYesPre-tax retirement accounts today (traditional IRA, 401(k), 403(b)), in dollars. 0 if none.
withdrawal_strategyNoSpending rule. fixed (default): the planned amount, inflation-adjusted, every year. guyton-klinger: guardrails that cut or raise spending as the portfolio moves. vpw: variable percentage withdrawal. bucket: a cash reserve of bucket_years of spending.
monthly_contributionNoMonthly savings until retirement. Default 0.
roth_contribution_basisNoOptional: the part of roth_balance that is your own regular Roth IRA contributions (withdrawn first, tax-free). Giving it, roth_first_contribution_year or ira_basis turns on the Roth ordering and 5-year rules on Roth withdrawals (earnings before 59 1/2 or inside the 5-year clock are taxed, with the 10% additional tax before 59 1/2) and the Form 8606 pro-rata rule on traditional withdrawals and conversions. Default: all of roth_balance.
roth_first_contribution_yearNoOptional: the first year you contributed to or converted into any Roth IRA (the 5-year clock), 1998-2026. Default: 2021 when roth_balance > 0.

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover only readOnly/openWorld, so the description carries real weight and delivers: taxes, Social Security taxability, RMDs, IRMAA and early-withdrawal penalties are paid from the portfolio year by year, and spending is defined as what the household keeps after tax. It further discloses that the result reports every assumption including defaults and what the engine does not model, which is unusually candid scope disclosure. It stops short of runtime/cost hints for a stochastic search.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences, front-loaded with the action and followed by the returned artifacts and tax mechanics; nothing is padded. Given the size of the tool, this is efficiently packaged, though the second sentence is long enough that a clause could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, 38 parameters and nested objects, the description does describe the returned content and the modelled/not-modelled boundary, which is the right coverage for a computation tool. However, it omits the one thing an agent most needs at selection time: how this differs from run_retirement_projection and when it is worth the heavier modelling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across 38 parameters, several with enums and nested objects, so the schema already documents all input semantics including defaults. The description adds only the framing that accounts are split by tax type; it does not clarify interaction between, say, roth_conversion, withdrawal_strategy and pension_type. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource (runs the retirement projection with accounts split by tax type) and enumerates the return payload: withdrawal order, Roth-conversion programme, present-value advantage and range vs drawing traditional first, and after-tax success rate. That is far clearer than a generic 'projection' tool. It never names or contrasts the near-identical sibling run_retirement_projection, so an agent cannot tell the two apart from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance is present; the description only says what the engine computes. The critical routing decision against run_retirement_projection is left entirely to inference, even though the schema's own pension_type field refers to 'the tax-aware tool' as a distinct thing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedcompare_return_assumptions1 field changed
      • changedInput schema / required
        Previous value: -[
        -  "current_age",
        -  "current_savings",
        -  "annual_spending"
        -]New value: +[]
  2. 4 tool updates
    • Changedcompare_return_assumptions3 fields changed
      • addedInput schema / properties / bucket_years
        Added value: +{
        +  "description": "Only with withdrawal_strategy bucket: years of spending held in the cash bucket, 1-10.",
        +  "type": "integer"
        +}
      • addedInput schema / properties / return_model
        Added value: +{
        +  "description": "How returns are generated. parametric (default): the forward-looking published assumptions. bootstrap: stationary block bootstrap of historical months. historical: replays real months from 1926 in order. The last two need a PRO licence; without one the engine runs parametric and the result says so.",
        +  "enum": [
        +    "parametric",
        +    "bootstrap",
        +    "historical"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / withdrawal_strategy
        Added value: +{
        +  "description": "Spending rule. fixed (default): the planned amount, inflation-adjusted, every year. guyton-klinger: guardrails that cut or raise spending as the portfolio moves. vpw: variable percentage withdrawal. bucket: a cash reserve of bucket_years of spending.",
        +  "enum": [
        +    "fixed",
        +    "guyton-klinger",
        +    "vpw",
        +    "bucket"
        +  ],
        +  "type": "string"
        +}
    • Addedoptimize_social_security_claiming
    • Changedrun_retirement_projection3 fields changed
      • addedInput schema / properties / bucket_years
        Added value: +{
        +  "description": "Only with withdrawal_strategy bucket: years of spending held in the cash bucket, 1-10.",
        +  "type": "integer"
        +}
      • addedInput schema / properties / return_model
        Added value: +{
        +  "description": "How returns are generated. parametric (default): the forward-looking published assumptions. bootstrap: stationary block bootstrap of historical months. historical: replays real months from 1926 in order. The last two need a PRO licence; without one the engine runs parametric and the result says so.",
        +  "enum": [
        +    "parametric",
        +    "bootstrap",
        +    "historical"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / withdrawal_strategy
        Added value: +{
        +  "description": "Spending rule. fixed (default): the planned amount, inflation-adjusted, every year. guyton-klinger: guardrails that cut or raise spending as the portfolio moves. vpw: variable percentage withdrawal. bucket: a cash reserve of bucket_years of spending.",
        +  "enum": [
        +    "fixed",
        +    "guyton-klinger",
        +    "vpw",
        +    "bucket"
        +  ],
        +  "type": "string"
        +}
    • Changedrun_tax_aware_projection12 fields changed
      • addedInput schema / properties / aca_marketplace
        Added value: +{
        +  "description": "Optional: the household buys marketplace (ACA) health coverage in the retirement years before Medicare. Each path's premium tax credit is figured each year by the federal engine's Form 8962 at that path's own income (no credit above 400% of the poverty line; Medicaid below 138% in expansion states), and the premium after the credit is funded each year and counted by the withdrawal-order search. Needs state.",
        +  "properties": {
        +    "benchmark_premium": {
        +      "description": "The household's 2026 annual benchmark (second-lowest-cost silver) premium at its 2026 ages, from healthcare.gov or the state's marketplace. Default: the state-average model, stated in the result.",
        +      "type": "number"
        +    },
        +    "cover_spouse": {
        +      "description": "Joint return: the spouse is on the plan too. Default true.",
        +      "type": "boolean"
        +    },
        +    "household_size": {
        +      "description": "Tax family size for the poverty line (you, a spouse on a joint return, dependents). Default 2 on a joint return, else 1.",
        +      "type": "integer"
        +    },
        +    "spending_includes_premium": {
        +      "description": "Required. true: annual_spending already includes the full, unsubsidized benchmark premium (it is taken out and the premium after the credit paid instead); false: the premium after the credit is paid on top of annual_spending.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "spending_includes_premium"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / annuity
        Added value: +{
        +  "description": "Optional: a single-life immediate annuity bought at purchase_age with premium (today's dollars) from the traditional IRA (a qualified annuity: payments fully taxable) or the taxable account (non-qualified: each payment is tax-free up to the premium over the IRS Table V multiple until the premium is recovered). Payments start in the purchase year and stop at death.",
        +  "properties": {
        +    "cola": {
        +      "description": "Fixed yearly increase of the payment in percent. Default 0.",
        +      "type": "number"
        +    },
        +    "payout_rate": {
        +      "description": "First year's payments as a percent of the premium (from a quote).",
        +      "type": "number"
        +    },
        +    "premium": {
        +      "description": "Single premium in today's dollars.",
        +      "type": "number"
        +    },
        +    "purchase_age": {
        +      "description": "Age at purchase, in retirement.",
        +      "type": "integer"
        +    },
        +    "source": {
        +      "enum": [
        +        "traditional",
        +        "taxable"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "purchase_age",
        +    "premium",
        +    "source",
        +    "payout_rate"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / bucket_years
        Added value: +{
        +  "description": "Only with withdrawal_strategy bucket: years of spending held in the cash bucket, 1-10.",
        +  "type": "integer"
        +}
      • addedInput schema / properties / dependents
        Added value: +{
        +  "description": "Optional: up to 8 people you claim, each {age (at the end of 2026; negative = born later), student, disabled}. Each retirement year counts the qualifying children that year for the child tax credit (under 17), the credit for other dependents and the earned income credit, and gives them to the state return.",
        +  "items": {
        +    "properties": {
        +      "age": {
        +        "type": "integer"
        +      },
        +      "disabled": {
        +        "type": "boolean"
        +      },
        +      "student": {
        +        "type": "boolean"
        +      }
        +    },
        +    "required": [
        +      "age"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / ira_basis
        Added value: +{
        +  "description": "Optional: your Form 8606 basis (nondeductible traditional IRA contributions not yet recovered); that share of each traditional withdrawal and conversion is tax-free. Not with a per-owner traditional balance.",
        +  "type": "number"
        +}
      • addedInput schema / properties / itemized_deductions
        Added value: +{
        +  "description": "Optional Schedule A amounts, in today's dollars a year: each year the engine adds that year's own state and local income tax (capped with the property tax by the SALT limit), takes gifts over 0.5% of AGI and medical costs over 7.5% of AGI, and itemizes when that gives the lower tax; otherwise the standard deduction. They are deductions only, assumed to be inside annual_spending already. Mortgage interest stays fixed in dollars until its end year, property tax rises 3.5% a year, giving with inflation, medical costs with inflation. Do not include QCDs in charitable_giving. Default: none, stated in the result.",
        +  "properties": {
        +    "charitable_giving": {
        +      "description": "Cash gifts to charity per year, not counting QCDs.",
        +      "type": "number"
        +    },
        +    "medical_expenses": {
        +      "description": "Unreimbursed medical and dental costs per year, before the 7.5% floor.",
        +      "type": "number"
        +    },
        +    "mortgage_interest": {
        +      "description": "Deductible home mortgage interest per year.",
        +      "type": "number"
        +    },
        +    "mortgage_interest_end_year": {
        +      "description": "Last calendar year with mortgage interest. Default: every year.",
        +      "type": "integer"
        +    },
        +    "property_tax": {
        +      "description": "Real estate tax on the home per year.",
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / lifespan
        Added value: +{
        +  "description": "fixed (default): the plan runs to its end age. stochastic: each path draws your death year from the SSA period life table and ends after it (the estate is held at its value at death; success = the money lasted while you were alive). Not on a joint return.",
        +  "enum": [
        +    "fixed",
        +    "stochastic"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / pension_type
        Added value: +{
        +  "description": "Whether the pension is private or a government (public) pension, which several states exempt from state income tax. Only affects the tax-aware tool. Default private, and the tax-aware result states it.",
        +  "enum": [
        +    "private",
        +    "public"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / return_model
        Added value: +{
        +  "description": "How returns are generated. parametric (default): the forward-looking published assumptions. bootstrap: stationary block bootstrap of historical months. historical: replays real months from 1926 in order. The last two need a PRO licence; without one the engine runs parametric and the result says so.",
        +  "enum": [
        +    "parametric",
        +    "bootstrap",
        +    "historical"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / roth_contribution_basis
        Added value: +{
        +  "description": "Optional: the part of roth_balance that is your own regular Roth IRA contributions (withdrawn first, tax-free). Giving it, roth_first_contribution_year or ira_basis turns on the Roth ordering and 5-year rules on Roth withdrawals (earnings before 59 1/2 or inside the 5-year clock are taxed, with the 10% additional tax before 59 1/2) and the Form 8606 pro-rata rule on traditional withdrawals and conversions. Default: all of roth_balance.",
        +  "type": "number"
        +}
      • addedInput schema / properties / roth_first_contribution_year
        Added value: +{
        +  "description": "Optional: the first year you contributed to or converted into any Roth IRA (the 5-year clock), 1998-2026. Default: 2021 when roth_balance > 0.",
        +  "type": "integer"
        +}
      • addedInput schema / properties / withdrawal_strategy
        Added value: +{
        +  "description": "Spending rule. fixed (default): the planned amount, inflation-adjusted, every year. guyton-klinger: guardrails that cut or raise spending as the portfolio moves. vpw: variable percentage withdrawal. bucket: a cash reserve of bucket_years of spending.",
        +  "enum": [
        +    "fixed",
        +    "guyton-klinger",
        +    "vpw",
        +    "bucket"
        +  ],
        +  "type": "string"
        +}
  3. 1 tool update
    • Changedestimate_2026_tax_return2 fields changed
      • addedInput schema / properties / qualified_overtime
        Added value: +{
        +  "description": "Qualified overtime compensation included in the wages: the FLSA overtime premium only (the half in time-and-a-half), deducted on Schedule 1-A (IRC 225, up to $12,500, $25,000 joint, phased out above $150,000 / $300,000 MAGI; none married filing separately). Not more than the wages. Default 0.",
        +  "type": "number"
        +}
      • addedInput schema / properties / qualified_tips
        Added value: +{
        +  "description": "Qualified tips included in the wages, deducted on Schedule 1-A (IRC 224, up to $25,000, phased out above $150,000 / $300,000 MAGI; none married filing separately). Not more than the wages. Default 0.",
        +  "type": "number"
        +}
  4. 1 tool update
    • Addedestimate_2026_tax_return
  5. 1 tool update
    • Changedrun_tax_aware_projection1 field changed
      • addedInput schema / properties / spouse_split
        Added value: +{
        +  "description": "Married filing jointly with a state: whose IRA withdrawals, pension and Roth conversions they are on the state return: even (half each), filer (all the filer's) or spouse (all the spouse's). Arkansas, Delaware, Maryland, Minnesota, Missouri, North Dakota, Ohio and Virginia tax a couple by each spouse's own income, so there it can change the state tax; federal tax does not depend on it. Default on a joint return with a state: even (the spouse's age is then needed; when spouse_age is not given it is current_age), stated in the result. Not used off a joint return or without a state.",
        +  "enum": [
        +    "even",
        +    "filer",
        +    "spouse"
        +  ],
        +  "type": "string"
        +}
  6. 1 tool update
    • Changedrun_tax_aware_projection3 fields changed
      • addedInput schema / properties / birth_month
        Added value: +{
        +  "description": "Month of birth, 1-12, optional. Times the half-year rules: the early-withdrawal penalty ends at 59 and a half, charitable distributions start at 70 and a half, Medicare starts in the birthday month. Default: not given, stated in the result.",
        +  "type": "integer"
        +}
      • addedInput schema / properties / birth_year
        Added value: +{
        +  "description": "Year of birth, optional. Must match current_age: 2026 minus current_age, or 2025 minus current_age when this year's birthday is still to come (then every tax rule uses the age reached in each calendar year). Sets the RMD start age (73 if born 1951-1959, 75 if born 1960 or later). Default: 2026 minus current_age, stated in the result.",
        +  "type": "integer"
        +}
      • changedInput schema / properties / medicare_start_age / description
        Previous value: -"Age Medicare (and its IRMAA income surcharges) begins. Default 65."New value: +"Age Medicare (and its IRMAA income surcharges) begins. Default 65. The year it begins is charged only for the months from the birthday month."
  7. 1 tool update
    • Addedrun_tax_aware_projection
  8. 1 tool update
    • Removedrun_tax_aware_projection
  9. 1 tool update
    • Addedrun_tax_aware_projection
  10. 2 tool updates
    • Changedcompare_return_assumptions1 field changed
      • changedInput schema / properties / annual_spending / description
        Previous value: -"Planned yearly spending in today's dollars."New value: +"Planned yearly spending in today's dollars, before income tax (this tool runs the standard engine, which does not model tax)."
    • Changedrun_retirement_projection1 field changed
      • changedInput schema / properties / annual_spending / description
        Previous value: -"Planned yearly spending in today's dollars."New value: +"Planned yearly spending in today's dollars, before income tax (this tool runs the standard engine, which does not model tax)."
  11. 4 tool updates
    • First observedcompare_return_assumptions
    • First observedexplain_methodology
    • First observedlist_return_assumption_sources
    • First observedrun_retirement_projection

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Tax-aware retirement planning for Canada and the US. CPP/OAS and Social Security timing, RRSP/TFSA/401k/IRA projections, Monte Carlo simulation, withdrawal order optimization, and historical backtesting against 150 years of market data.
    2
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides retirement planning computations for AI agents, including Monte Carlo simulations, tax burden modeling across all US states, Social Security claiming optimization, and cost-of-living comparisons.
    7 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Deterministic US equity-compensation tax optimizer. Six tools cover ISO/AMT exercise scheduling, NSO sell-vs-hold, RSU vest-and-sell, single-stock concentration, protective put / zero-cost collar pricing, and Section 1202 QSBS qualification. Federal plus 50-state plus DC tax math.
    8
    12 npm
    5
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.