nestegg-calculators
What this MCP does
Provides stateless financial calculations for loans, amortization, investing, bonds, options, taxes, budgeting, returns, and retirement planning.
Tools
Input schema
{'type': 'object', 'required': ['faceValue', 'couponRatePct', 'daysSinceLastCoupon'], 'properties': {'faceValue': {'type': 'number', 'description': 'Face value.'}, 'couponRatePct': {'type': 'number', 'description': 'Annual coupon rate in percent.'}, 'dayCountBasis': {'type': 'number', 'description': 'Day-count basis (default 360).'}, 'daysSinceLastCoupon': {'type': 'number', 'description': 'Days since the last coupon.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'accrued': {'type': 'number', 'description': 'Accrued interest.'}}}
Input schema
{'type': 'object', 'required': ['yieldPct', 'taxRatePct'], 'properties': {'yieldPct': {'type': 'number', 'description': 'Pre-tax yield in percent.'}, 'taxRatePct': {'type': 'number', 'description': 'Tax rate in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'afterTaxPct': {'type': 'number', 'description': 'After-tax yield, percent.'}}}
Input schema
{'type': 'object', 'required': ['amount', 'rate', 'mode', 'startDate'], 'properties': {'mode': {'enum': ['term', 'payment'], 'type': 'string', 'description': 'Fix the term (compute the payment) or fix the payment (compute the term).'}, 'rate': {'type': 'number', 'description': 'Annual interest rate in percent (6 = 6%).'}, 'extra': {'type': 'array', 'items': {'type': 'object', 'properties': {'date': {'type': 'string', 'description': 'ISO date.'}, 'amount': {'type': 'number', 'description': 'Extra principal.'}}}, 'description': 'Optional dated extra principal payments.'}, 'limit': {'type': 'number', 'description': 'Max monthly rows when detail=monthly (default and maximum 360; page with nextOffset).'}, 'amount': {'type': 'number', 'description': 'Loan principal.'}, 'detail': {'enum': ['summary', 'yearly', 'monthly'], 'type': 'string', 'description': 'Output size. summary (default): totals + yearly breakdown. monthly: full schedule (use offset/limit to paginate).'}, 'offset': {'type': 'number', 'description': 'Monthly schedule start index when detail=monthly (default 0).'}, 'payment': {'type': 'number', 'description': "Monthly payment, used when mode is 'payment'."}, 'rateSteps': {'type': 'array', 'items': {'type': 'object', 'required': ['date', 'rate'], 'properties': {'date': {'type': 'string', 'description': 'ISO date the new rate starts.'}, 'rate': {'type': 'number', 'description': 'New annual rate in percent.'}}}, 'description': 'Optional rate changes (e.g. after a Zinsbindung). The installment is held; from each date the outstanding balance continues at the new annual rate.'}, 'startDate': {'type': 'string', 'description': 'First payment month as an ISO date (YYYY-MM-DD).'}, 'termYears': {'type': 'number', 'description': "Term in years, used when mode is 'term'."}, 'fixedUntil': {'type': 'string', 'description': 'Optional. Rate is certain until this ISO date; beyond it the schedule is an estimate.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'yearly': {'type': 'array', 'description': 'Per-year totals: { year, interest, principal, extra, payments, endBalance }.'}, 'payments': {'type': 'number', 'description': 'Number of payments made.'}, 'schedule': {'type': 'array', 'description': 'Monthly rows (only when detail=monthly).'}, 'totalPaid': {'type': 'number', 'description': 'Total paid (incl. extras).'}, 'nextOffset': {'type': 'number', 'description': 'Next pagination offset, or null.'}, 'payoffDate': {'type': 'string', 'description': 'Payoff date, ISO.'}, 'scheduleTotal': {'type': 'number', 'description': 'Total monthly rows (when detail=monthly).'}, 'totalInterest': {'type': 'number', 'description': 'Total interest paid.'}, 'monthlyPayment': {'type': 'number', 'description': 'Monthly payment.'}, 'scheduledMonths': {'type': 'number', 'description': 'Scheduled months (null if open-ended).'}}}
Input schema
{'type': 'object', 'required': ['payment', 'ratePct', 'periods'], 'properties': {'payment': {'type': 'number', 'description': 'Payment per period.'}, 'periods': {'type': 'number', 'description': 'Number of periods.'}, 'ratePct': {'type': 'number', 'description': 'Rate per period in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'fv': {'type': 'number', 'description': 'Future value.'}}}
Input schema
{'type': 'object', 'required': ['presentValue', 'ratePct', 'periods'], 'properties': {'periods': {'type': 'number', 'description': 'Number of periods.'}, 'ratePct': {'type': 'number', 'description': 'Rate per period in percent.'}, 'presentValue': {'type': 'number', 'description': 'Present value / principal.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'payment': {'type': 'number', 'description': 'Level payment (null if periods<=0).'}}}
Input schema
{'type': 'object', 'required': ['payment', 'ratePct', 'periods'], 'properties': {'payment': {'type': 'number', 'description': 'Payment per period.'}, 'periods': {'type': 'number', 'description': 'Number of periods.'}, 'ratePct': {'type': 'number', 'description': 'Rate per period in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'pv': {'type': 'number', 'description': 'Present value.'}}}
Input schema
{'type': 'object', 'required': ['amount', 'ratePct', 'balloonMonths', 'amortMonths'], 'properties': {'amount': {'type': 'number', 'description': 'Loan amount.'}, 'ratePct': {'type': 'number', 'description': 'Annual rate in percent.'}, 'amortMonths': {'type': 'number', 'description': 'Amortization basis in months.'}, 'balloonMonths': {'type': 'number', 'description': 'Months until the balloon is due.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'balloon': {'type': 'number', 'description': 'Balloon balance due.'}, 'payment': {'type': 'number', 'description': 'Monthly payment.'}}}
Input schema
{'type': 'object', 'required': ['annualSpend', 'partTimeIncome'], 'properties': {'annualSpend': {'type': 'number', 'description': 'Yearly spending.'}, 'partTimeIncome': {'type': 'number', 'description': 'Yearly part-time income.'}, 'withdrawalRatePct': {'type': 'number', 'description': 'Safe withdrawal rate in percent (default 4).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'target': {'type': 'number', 'description': 'Nest egg needed (null if withdrawal rate<=0).'}}}
Input schema
{'type': 'object', 'required': ['amount', 'ratePct', 'termMonths'], 'properties': {'amount': {'type': 'number', 'description': 'Loan amount.'}, 'ratePct': {'type': 'number', 'description': 'Annual rate in percent.'}, 'termMonths': {'type': 'number', 'description': 'Original term in months.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'monthsSaved': {'type': 'number', 'description': 'Months saved.'}, 'interestSaved': {'type': 'number', 'description': 'Interest saved.'}, 'biweeklyPayment': {'type': 'number', 'description': 'Biweekly payment.'}}}
Input schema
{'type': 'object', 'required': ['spot', 'strike', 'years', 'volatilityPct', 'riskFreePct'], 'properties': {'spot': {'type': 'number', 'description': 'Current underlying price.'}, 'type': {'enum': ['call', 'put'], 'type': 'string', 'description': 'Option type (default call).'}, 'years': {'type': 'number', 'description': 'Time to expiry in years.'}, 'strike': {'type': 'number', 'description': 'Strike price.'}, 'riskFreePct': {'type': 'number', 'description': 'Risk-free rate in percent.'}, 'volatilityPct': {'type': 'number', 'description': 'Annualized volatility in percent.'}, 'dividendYieldPct': {'type': 'number', 'description': 'Continuous dividend yield in percent (default 0).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'d1': {'type': 'number', 'description': 'd1.'}, 'd2': {'type': 'number', 'description': 'd2.'}, 'price': {'type': 'number', 'description': 'Option price (null if degenerate).'}}}
Input schema
{'type': 'object', 'required': ['faceValue', 'couponRatePct', 'years', 'yieldPct'], 'properties': {'years': {'type': 'number', 'description': 'Years to maturity.'}, 'yieldPct': {'type': 'number', 'description': 'Annual yield in percent.'}, 'faceValue': {'type': 'number', 'description': 'Face value.'}, 'couponRatePct': {'type': 'number', 'description': 'Annual coupon rate in percent.'}, 'periodsPerYear': {'type': 'number', 'description': 'Coupon periods per year (default 2).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'macaulay': {'type': 'number', 'description': 'Macaulay duration, years.'}, 'modified': {'type': 'number', 'description': 'Modified duration.'}}}
Input schema
{'type': 'object', 'required': ['faceValue', 'couponRatePct', 'years', 'yieldPct'], 'properties': {'years': {'type': 'number', 'description': 'Years to maturity.'}, 'yieldPct': {'type': 'number', 'description': 'Annual yield in percent.'}, 'faceValue': {'type': 'number', 'description': 'Face (par) value.'}, 'couponRatePct': {'type': 'number', 'description': 'Annual coupon rate in percent of face.'}, 'periodsPerYear': {'type': 'number', 'description': 'Coupon periods per year (default 2).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'price': {'type': 'number', 'description': 'Bond price (null if degenerate).'}}}
Input schema
{'type': 'object', 'required': ['fixedCosts', 'pricePerUnit', 'variableCostPerUnit'], 'properties': {'fixedCosts': {'type': 'number', 'description': 'Total fixed costs.'}, 'pricePerUnit': {'type': 'number', 'description': 'Selling price per unit.'}, 'variableCostPerUnit': {'type': 'number', 'description': 'Variable cost per unit.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'units': {'type': 'number', 'description': 'Break-even units (null if no contribution).'}, 'revenue': {'type': 'number', 'description': 'Revenue at break-even (null if none).'}}}
Input schema
{'type': 'object', 'required': ['monthlyIncome'], 'properties': {'monthlyIncome': {'type': 'number', 'description': 'Monthly take-home income.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'needs': {'type': 'number', 'description': '50% needs.'}, 'wants': {'type': 'number', 'description': '30% wants.'}, 'savings': {'type': 'number', 'description': '20% savings.'}}}
Input schema
{'type': 'object', 'required': ['begin', 'end', 'years'], 'properties': {'end': {'type': 'number', 'description': 'Ending value.'}, 'begin': {'type': 'number', 'description': 'Starting value.'}, 'years': {'type': 'number', 'description': 'Number of years.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'value': {'type': 'number', 'description': 'Result value.'}}}
Input schema
{'type': 'object', 'required': ['noi', 'propertyValue'], 'properties': {'noi': {'type': 'number', 'description': 'Net operating income.'}, 'propertyValue': {'type': 'number', 'description': 'Property value.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'capRatePct': {'type': 'number', 'description': 'Cap rate, percent (null if value<=0).'}}}
Input schema
{'type': 'object', 'required': ['annualCashFlow', 'cashInvested'], 'properties': {'cashInvested': {'type': 'number', 'description': 'Cash invested.'}, 'annualCashFlow': {'type': 'number', 'description': 'Annual pre-tax cash flow.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'cashOnCashPct': {'type': 'number', 'description': 'Cash-on-cash return, percent (null if invested<=0).'}}}
Input schema
{'type': 'object', 'required': ['currentNestEgg', 'annualRatePct', 'yearsToRetirement', 'annualSpend'], 'properties': {'annualSpend': {'type': 'number', 'description': 'Yearly spending in retirement.'}, 'annualRatePct': {'type': 'number', 'description': 'Expected annual growth in percent.'}, 'currentNestEgg': {'type': 'number', 'description': 'Amount invested today.'}, 'withdrawalRatePct': {'type': 'number', 'description': 'Safe withdrawal rate in percent (default 4).'}, 'yearsToRetirement': {'type': 'number', 'description': 'Years until retirement.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'gap': {'type': 'number', 'description': 'Shortfall in future-value terms.'}, 'projected': {'type': 'number', 'description': 'Projected balance at retirement.'}, 'fireTarget': {'type': 'number', 'description': 'FIRE target.'}, 'isCoasting': {'type': 'boolean', 'description': 'True if it already coasts.'}}}
Input schema
{'type': 'object', 'required': ['principal', 'annualRatePct', 'years'], 'properties': {'years': {'type': 'number', 'description': 'Number of years.'}, 'principal': {'type': 'number', 'description': 'Starting amount.'}, 'annualRatePct': {'type': 'number', 'description': 'Annual growth rate in percent.'}, 'periodsPerYear': {'type': 'number', 'description': 'Compounding periods per year (default 1).'}, 'contributionPerPeriod': {'type': 'number', 'description': 'Optional. Amount added each period (default 0).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'value': {'type': 'number', 'description': 'Result value.'}}}
Input schema
{'type': 'object', 'required': ['pricePerUnit', 'variableCostPerUnit'], 'properties': {'pricePerUnit': {'type': 'number', 'description': 'Selling price per unit.'}, 'variableCostPerUnit': {'type': 'number', 'description': 'Variable cost per unit.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'ratioPct': {'type': 'number', 'description': 'Contribution margin ratio, percent (null if price=0).'}, 'contributionMargin': {'type': 'number', 'description': 'Contribution per unit.'}}}
Input schema
{'type': 'object', 'required': ['monthly', 'annualRatePct', 'months'], 'properties': {'months': {'type': 'number', 'description': 'Number of months.'}, 'monthly': {'type': 'number', 'description': 'Monthly contribution.'}, 'annualRatePct': {'type': 'number', 'description': 'Annual growth rate in percent.'}, 'contribGrowthPct': {'type': 'number', 'description': 'Optional. Contribution step-up percent per year.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'value': {'type': 'number', 'description': 'Result value.'}}}
Input schema
{'type': 'object', 'required': ['faceValue', 'couponRatePct', 'years', 'yieldPct'], 'properties': {'years': {'type': 'number', 'description': 'Years to maturity.'}, 'yieldPct': {'type': 'number', 'description': 'Annual yield in percent.'}, 'faceValue': {'type': 'number', 'description': 'Face value.'}, 'couponRatePct': {'type': 'number', 'description': 'Annual coupon rate in percent.'}, 'periodsPerYear': {'type': 'number', 'description': 'Coupon periods per year (default 2).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'convexity': {'type': 'number', 'description': 'Convexity, years^2.'}}}
Input schema
{'type': 'object', 'required': ['balance', 'aprPct', 'monthlyPayment'], 'properties': {'aprPct': {'type': 'number', 'description': 'Annual percentage rate in percent.'}, 'balance': {'type': 'number', 'description': 'Current balance.'}, 'monthlyPayment': {'type': 'number', 'description': 'Fixed monthly payment.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'months': {'type': 'number', 'description': 'Months to clear (null if never).'}, 'totalPaid': {'type': 'number', 'description': 'Total paid (null if never).'}, 'totalInterest': {'type': 'number', 'description': 'Total interest (null if never).'}}}
Input schema
{'type': 'object', 'required': ['currentAssets', 'currentLiabilities'], 'properties': {'currentAssets': {'type': 'number', 'description': 'Current assets.'}, 'currentLiabilities': {'type': 'number', 'description': 'Current liabilities.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'currentRatio': {'type': 'number', 'description': 'Current ratio (null if liabilities<=0).'}}}
Input schema
{'type': 'object', 'required': ['price', 'faceValue', 'couponRatePct'], 'properties': {'price': {'type': 'number', 'description': 'Current bond price.'}, 'faceValue': {'type': 'number', 'description': 'Face value.'}, 'couponRatePct': {'type': 'number', 'description': 'Annual coupon rate in percent of face.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'currentYieldPct': {'type': 'number', 'description': 'Current yield, percent (null if price<=0).'}}}
Input schema
{'type': 'object', 'required': ['year', 'capitalIncome'], 'properties': {'year': {'type': 'number', 'description': 'Tax year: 2023, 2024, 2025 or 2026.'}, 'joint': {'type': 'boolean', 'description': 'true for jointly assessed couples (doubles the Sparerpauschbetrag).'}, 'churchTaxPct': {'type': 'number', 'description': 'Church tax rate: 8, 9, or 0 for none (default 0).'}, 'capitalIncome': {'type': 'number', 'description': 'Annual capital income (interest, dividends, realized gains) in EUR.'}, 'foreignTaxCredit': {'type': 'number', 'description': 'Optional. Creditable foreign withholding tax (q in the §32d formula).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'net': {'type': 'number', 'description': 'Income after taxes.'}, 'soli': {'type': 'number', 'description': 'Soli (5.5%).'}, 'year': {'type': 'number', 'description': 'Tax year.'}, 'taxable': {'type': 'number', 'description': 'Taxable after allowance.'}, 'totalTax': {'type': 'number', 'description': 'All taxes.'}, 'allowance': {'type': 'number', 'description': 'Sparerpauschbetrag applied.'}, 'churchTax': {'type': 'number', 'description': 'Church tax.'}, 'incomeTax': {'type': 'number', 'description': 'Flat tax (25% or church-reduced).'}, 'capitalIncome': {'type': 'number', 'description': 'Income.'}, 'effectiveRatePct': {'type': 'number', 'description': 'Total tax / income, percent.'}}}
Input schema
{'type': 'object', 'required': ['debts', 'monthlyBudget'], 'properties': {'debts': {'type': 'array', 'items': {'type': 'object', 'required': ['balance', 'rate', 'minPayment'], 'properties': {'name': {'type': 'string', 'description': 'Optional label.'}, 'rate': {'type': 'number', 'description': 'Annual interest rate in percent.'}, 'balance': {'type': 'number', 'description': 'Current balance.'}, 'minPayment': {'type': 'number', 'description': 'Minimum monthly payment.'}}}, 'description': 'The debts to pay off.'}, 'method': {'enum': ['avalanche', 'snowball'], 'type': 'string', 'description': 'Payoff strategy (default avalanche).'}, 'monthlyBudget': {'type': 'number', 'description': 'Total amount available across all debts each month.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'months': {'type': 'number', 'description': 'Months to debt-free (null if insolvent).'}, 'insolvent': {'type': 'boolean', 'description': "True if the budget can't keep up."}, 'payoffOrder': {'type': 'array', 'description': 'Debt names in payoff order.'}, 'totalInterest': {'type': 'number', 'description': 'Total interest (null if insolvent).'}}}
Input schema
{'type': 'object', 'required': ['value', 'ratePct', 'year'], 'properties': {'year': {'type': 'number', 'description': 'Year (1-based).'}, 'value': {'type': 'number', 'description': 'Initial cost.'}, 'ratePct': {'type': 'number', 'description': 'Annual depreciation rate in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'bookValue': {'type': 'number', 'description': 'Book value at year end.'}, 'depreciation': {'type': 'number', 'description': 'Depreciation this year.'}}}
Input schema
{'type': 'object', 'required': ['gross'], 'properties': {'soli': {'type': 'number', 'description': 'Solidarity surcharge (Solidaritätszuschlag) amount (often 0 below the threshold).'}, 'gross': {'type': 'number', 'description': 'Gross salary (Brutto).'}, 'carePct': {'type': 'number', 'description': 'Employee long-term care (Pflegeversicherung) rate in percent.'}, 'healthPct': {'type': 'number', 'description': 'Employee health (Krankenversicherung incl. Zusatzbeitrag) rate in percent.'}, 'incomeTax': {'type': 'number', 'description': 'Income tax (Lohnsteuer) amount for the period — look up via the §32a / Steuerklasse tables.'}, 'pensionPct': {'type': 'number', 'description': 'Employee pension (Rentenversicherung) rate in percent (e.g. 9.3).'}, 'churchTaxPct': {'type': 'number', 'description': 'Church tax (Kirchensteuer) rate in percent of income tax (8 or 9, 0 if none).'}, 'healthCeiling': {'type': 'number', 'description': 'Contribution ceiling for health and care.'}, 'pensionCeiling': {'type': 'number', 'description': 'Contribution ceiling (Beitragsbemessungsgrenze) for pension and unemployment.'}, 'unemploymentPct': {'type': 'number', 'description': 'Employee unemployment (Arbeitslosenversicherung) rate in percent (e.g. 1.3).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'net': {'type': 'number', 'description': 'Net.'}, 'soli': {'type': 'number', 'description': 'Soli.'}, 'gross': {'type': 'number', 'description': 'Gross.'}, 'churchTax': {'type': 'number', 'description': 'Church tax.'}, 'incomeTax': {'type': 'number', 'description': 'Income tax.'}, 'contributions': {'type': 'object', 'description': '{ pension, unemployment, health, care, total }.'}, 'totalDeductions': {'type': 'number', 'description': 'Total deductions.'}}}
Input schema
{'type': 'object', 'required': ['year'], 'properties': {'year': {'type': 'number', 'description': 'Year: 2023, 2024, 2025 or 2026.'}, 'children': {'type': 'number', 'description': 'Number of children (default 1).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'year': {'type': 'number', 'description': 'Year.'}, 'annual': {'type': 'number', 'description': 'Total annual.'}, 'monthly': {'type': 'number', 'description': 'Total monthly.'}, 'children': {'type': 'number', 'description': 'Children.'}, 'perChildMonthly': {'type': 'number', 'description': 'Monthly amount per child.'}}}
Input schema
{'type': 'object', 'required': ['year', 'monthlyPay'], 'properties': {'age': {'type': 'number', 'description': 'Optional. Age - under 23 skips the childless care surcharge.'}, 'year': {'type': 'number', 'description': 'Year: 2023, 2024, 2025 or 2026.'}, 'children': {'type': 'number', 'description': 'Children, for the care-insurance rate (default 0).'}, 'bundesland': {'type': 'string', 'description': 'Optional. State code; SN applies the Saxony care split.'}, 'monthlyPay': {'type': 'number', 'description': 'Gross monthly pay in EUR.'}, 'kvZusatzPct': {'type': 'number', 'description': "Optional. Krankenkasse Zusatzbeitrag in percent; defaults to the year's average."}, 'childrenUnder25': {'type': 'number', 'description': 'Optional. Children under 25 for the care discounts, when different.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'year': {'type': 'number', 'description': 'Year.'}, 'zone': {'type': 'string', 'description': 'minijob | midijob | regular | none.'}, 'rates': {'type': 'object', 'description': '{ employee, total } percent rates.'}, 'faktorF': {'type': 'number', 'description': 'Faktor F (midijob only).'}, 'employee': {'type': 'object', 'description': '{ pension, unemployment, health, care, total }.'}, 'employer': {'type': 'object', 'description': '{ total }.'}, 'monthlyPay': {'type': 'number', 'description': 'Pay.'}, 'thresholds': {'type': 'object', 'description': '{ minijobMonthly, midijobUpper }.'}, 'savingsVsFull': {'type': 'number', 'description': 'Employee saving vs full contributions.'}, 'contributionBase': {'type': 'object', 'description': '{ total, employee } reduced bases.'}}}
Input schema
{'type': 'object', 'required': ['year', 'grossAnnual'], 'properties': {'age': {'type': 'number', 'description': 'Optional. Age in years - under 23 skips the childless care surcharge.'}, 'year': {'type': 'number', 'description': 'Tax year: 2023, 2024, 2025 or 2026.'}, 'faktor': {'type': 'number', 'description': 'Optional. Tax-class-4 Faktorverfahren factor, default 1.0 (no factor). Only the small minority of married IV/IV couples who applied for it have one; it is assigned by the Finanzamt and printed on the payslip / ELStAM (e.g. 0.921, always <= 1). Leave unset unless the payslip shows a Faktor.'}, 'children': {'type': 'number', 'description': 'Kinderfreibetrag counter (ZKF), halves allowed (default 0). Also drives the care-insurance child discounts.'}, 'taxClass': {'type': 'number', 'description': 'Steuerklasse 1-6 (default 1).'}, 'bundesland': {'type': 'string', 'description': 'Optional. State code (BW, BY, BE, ... SN, TH). Drives the Saxony care-insurance split and the pre-2025 East pension ceiling.'}, 'grossAnnual': {'type': 'number', 'description': 'Annual gross salary (Brutto) in EUR.'}, 'kvZusatzPct': {'type': 'number', 'description': "Optional. The Krankenkasse's own Zusatzbeitrag in percent — pass the actual rate for exact results (rates change yearly, e.g. TK 2025: 2.45, 2026: 2.69). Defaults to the year's official average, which is only right for generic estimates."}, 'churchTaxPct': {'type': 'number', 'description': 'Church tax rate: 8, 9, or 0 for none (default 0).'}, 'privateHealth': {'type': 'object', 'required': ['premiumAnnual'], 'properties': {'premiumAnnual': {'type': 'number', 'description': 'Annual private health+care premium in EUR.'}}, 'additionalProperties': False}, 'childrenUnder25': {'type': 'number', 'description': 'Optional. Children under 25 for the care-insurance discounts, when it differs from `children`.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'net': {'type': 'object', 'description': '{ annual, monthly }.'}, 'soli': {'type': 'number', 'description': 'Solidaritätszuschlag.'}, 'year': {'type': 'number', 'description': 'Tax year.'}, 'gross': {'type': 'object', 'description': '{ annual, monthly }.'}, 'totalTax': {'type': 'number', 'description': 'All taxes.'}, 'churchTax': {'type': 'number', 'description': 'Kirchensteuer.'}, 'incomeTax': {'type': 'number', 'description': 'Lohnsteuer (annual).'}, 'assumptions': {'type': 'object', 'description': 'Inputs as applied (tax class, Zusatzbeitrag, PAP basis, ...).'}, 'contributions': {'type': 'object', 'description': '{ pension, unemployment, health, care, total, rates, ceilingsApplied }.'}, 'totalDeductions': {'type': 'number', 'description': 'Taxes + contributions.'}}}
Input schema
{'type': 'object', 'required': ['value', 'annualRatePct', 'years'], 'properties': {'up': {'type': 'boolean', 'description': 'false depreciates, true appreciates.'}, 'value': {'type': 'number', 'description': 'Starting value.'}, 'years': {'type': 'number', 'description': 'Number of years.'}, 'annualRatePct': {'type': 'number', 'description': 'Annual rate in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'value': {'type': 'number', 'description': 'Result value.'}}}
Input schema
{'type': 'object', 'required': ['year', 'grossAnnual'], 'properties': {'year': {'type': 'number', 'description': 'Year: 2023, 2024, 2025 or 2026.'}, 'bundesland': {'type': 'string', 'description': 'Optional. State code - East states use the East ceiling before 2025.'}, 'grossAnnual': {'type': 'number', 'description': 'Annual insured gross salary in EUR.'}, 'totalPoints': {'type': 'number', 'description': "Optional. Accumulated points, to project the gross monthly pension at today's Rentenwert."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'year': {'type': 'number', 'description': 'Year.'}, 'points': {'type': 'number', 'description': 'Points earned this year.'}, 'projection': {'type': 'object', 'description': '{ totalPoints, monthlyPension, note } when totalPoints given.'}, 'rentenwert': {'type': 'object', 'description': '{ janToJun, fromJuly } EUR per point per month.'}, 'grossAnnual': {'type': 'number', 'description': 'Gross.'}, 'insuredGross': {'type': 'number', 'description': 'Gross after the ceiling.'}, 'ceilingApplied': {'type': 'boolean', 'description': 'True if capped.'}, 'maxPointsThisYear': {'type': 'number', 'description': 'Ceiling / average.'}, 'durchschnittsentgelt': {'type': 'number', 'description': 'Average earnings divisor.'}, 'monthlyPensionPerPoint': {'type': 'number', 'description': 'Current EUR per point.'}}}
Input schema
{'type': 'object', 'required': ['price', 'discountPct'], 'properties': {'price': {'type': 'number', 'description': 'Original price.'}, 'discountPct': {'type': 'number', 'description': 'Discount in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'discount': {'type': 'number', 'description': 'Amount off.'}, 'finalPrice': {'type': 'number', 'description': 'Final price.'}}}
Input schema
{'type': 'object', 'required': ['initialCost', 'cashflows', 'ratePct'], 'properties': {'ratePct': {'type': 'number', 'description': 'Discount rate per period in percent.'}, 'cashflows': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Inflow each period.'}, 'initialCost': {'type': 'number', 'description': 'Upfront cost.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'years': {'type': 'number', 'description': 'Discounted payback in periods (null if never).'}}}
Input schema
{'type': 'object', 'required': ['prices', 'periodicInvestment'], 'properties': {'prices': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Price at each purchase period.'}, 'periodicInvestment': {'type': 'number', 'description': 'Fixed amount invested each period.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'units': {'type': 'number', 'description': 'Units accumulated.'}, 'avgCost': {'type': 'number', 'description': 'Average cost per unit (null if none).'}, 'invested': {'type': 'number', 'description': 'Total invested.'}, 'finalValue': {'type': 'number', 'description': 'Value at the last price.'}}}
Input schema
{'type': 'object', 'required': ['value', 'usefulYears', 'year'], 'properties': {'year': {'type': 'number', 'description': 'Year (1-based).'}, 'value': {'type': 'number', 'description': 'Initial cost.'}, 'salvage': {'type': 'number', 'description': 'Salvage value (default 0).'}, 'usefulYears': {'type': 'number', 'description': 'Useful life in years.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'bookValue': {'type': 'number', 'description': 'Book value at year end.'}, 'depreciation': {'type': 'number', 'description': 'Depreciation this year.'}}}
Input schema
{'type': 'object', 'required': ['noi', 'annualDebtService'], 'properties': {'noi': {'type': 'number', 'description': 'Net operating income.'}, 'annualDebtService': {'type': 'number', 'description': 'Annual debt service.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'dscr': {'type': 'number', 'description': 'Debt service coverage ratio (null if debt<=0).'}}}
Input schema
{'type': 'object', 'required': ['monthlyDebt', 'grossMonthlyIncome'], 'properties': {'monthlyDebt': {'type': 'number', 'description': 'Total monthly debt payments.'}, 'grossMonthlyIncome': {'type': 'number', 'description': 'Gross monthly income.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'dtiPct': {'type': 'number', 'description': 'Debt-to-income, percent (null if income<=0).'}}}
Input schema
{'type': 'object', 'required': ['ratePct', 'periodsPerYear'], 'properties': {'ratePct': {'type': 'number', 'description': 'The rate in percent (nominal, or effective when toNominal is true).'}, 'toNominal': {'type': 'boolean', 'description': 'false (default) returns the effective rate; true returns the nominal rate.'}, 'periodsPerYear': {'type': 'number', 'description': 'Compounding periods per year (12 monthly, 365 daily).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'nominalRatePct': {'type': 'number', 'description': 'Nominal rate, percent (when toNominal).'}, 'effectiveRatePct': {'type': 'number', 'description': 'Effective annual rate (APY), percent.'}}}
Input schema
{'type': 'object', 'required': ['liquidSavings', 'monthlyExpenses'], 'properties': {'liquidSavings': {'type': 'number', 'description': 'Cash and liquid savings on hand.'}, 'monthlyExpenses': {'type': 'number', 'description': 'Total monthly expenses.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'months': {'type': 'number', 'description': 'Months of runway (null if expenses<=0).'}}}
Input schema
{'type': 'object', 'required': ['principal', 'grossAnnualPct', 'feePct', 'years'], 'properties': {'years': {'type': 'number', 'description': 'Number of years.'}, 'feePct': {'type': 'number', 'description': 'Annual fee in percent.'}, 'principal': {'type': 'number', 'description': 'Starting amount.'}, 'grossAnnualPct': {'type': 'number', 'description': 'Gross annual return in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'net': {'type': 'number', 'description': 'Net of fees.'}, 'gross': {'type': 'number', 'description': 'Gross balance.'}, 'lostToFees': {'type': 'number', 'description': 'Amount lost to fees.'}}}
Input schema
{'type': 'object', 'required': ['annualSpend'], 'properties': {'annualSpend': {'type': 'number', 'description': 'Yearly spending the nest egg must cover.'}, 'annualRatePct': {'type': 'number', 'description': 'Optional. Annual portfolio growth in percent (default 0).'}, 'currentNestEgg': {'type': 'number', 'description': 'Optional. Amount already saved (default 0).'}, 'withdrawalRatePct': {'type': 'number', 'description': 'Safe withdrawal rate in percent (default 4 = the 4% rule).'}, 'annualContribution': {'type': 'number', 'description': 'Optional. Amount saved per year (default 0).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'gap': {'type': 'number', 'description': 'Gap from today.'}, 'target': {'type': 'number', 'description': 'Target nest egg.'}, 'yearsToFI': {'type': 'number', 'description': 'Years to FI (null if unreachable).'}}}
Input schema
{'type': 'object', 'required': ['principal', 'annualRatePct', 'years'], 'properties': {'years': {'type': 'number', 'description': 'Number of years.'}, 'principal': {'type': 'number', 'description': 'Starting amount.'}, 'annualRatePct': {'type': 'number', 'description': 'Annual growth rate in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'value': {'type': 'number', 'description': 'Result value.'}}}
Input schema
{'type': 'object', 'required': ['amount', 'rate'], 'properties': {'rate': {'type': 'number', 'description': 'Rate: target units per source unit.'}, 'amount': {'type': 'number', 'description': 'Amount to convert.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'value': {'type': 'number', 'description': 'Result value.'}}}
Input schema
{'type': 'object', 'required': ['price', 'grossAnnualRent'], 'properties': {'price': {'type': 'number', 'description': 'Purchase price.'}, 'grossAnnualRent': {'type': 'number', 'description': 'Gross annual rent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'grm': {'type': 'number', 'description': 'Gross rent multiplier (null if rent<=0).'}}}
Input schema
{'type': 'object', 'required': ['income', 'endValue', 'beginValue'], 'properties': {'income': {'type': 'number', 'description': 'Income received over the period.'}, 'endValue': {'type': 'number', 'description': 'Ending value.'}, 'beginValue': {'type': 'number', 'description': 'Starting value.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'hprPct': {'type': 'number', 'description': 'Holding-period return, percent (null if begin=0).'}}}
Input schema
{'type': 'object', 'required': ['hourlyRate'], 'properties': {'hourlyRate': {'type': 'number', 'description': 'Hourly rate.'}, 'hoursPerWeek': {'type': 'number', 'description': 'Hours per week (default 40).'}, 'weeksPerYear': {'type': 'number', 'description': 'Weeks per year (default 52).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'annual': {'type': 'number', 'description': 'Annual salary.'}, 'monthly': {'type': 'number', 'description': 'Monthly equivalent.'}}}
Input schema
{'type': 'object', 'required': ['amount', 'inflationRatePct', 'years'], 'properties': {'years': {'type': 'number', 'description': 'Number of years.'}, 'amount': {'type': 'number', 'description': 'Amount to adjust.'}, 'toNominal': {'type': 'boolean', 'description': 'false (default) deflates nominal to real; true inflates real to nominal.'}, 'inflationRatePct': {'type': 'number', 'description': 'Annual inflation rate in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'value': {'type': 'number', 'description': 'Result value.'}}}
Input schema
{'type': 'object', 'required': ['amount', 'ratePct'], 'properties': {'amount': {'type': 'number', 'description': 'Outstanding balance.'}, 'ratePct': {'type': 'number', 'description': 'Annual rate in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'payment': {'type': 'number', 'description': 'Monthly interest payment.'}}}
Input schema
{'type': 'object', 'required': ['spot', 'strike', 'premium'], 'properties': {'spot': {'type': 'number', 'description': 'Underlying price.'}, 'type': {'enum': ['call', 'put'], 'type': 'string', 'description': 'Option type (default call).'}, 'strike': {'type': 'number', 'description': 'Strike price.'}, 'premium': {'type': 'number', 'description': 'Option premium.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'intrinsic': {'type': 'number', 'description': 'Intrinsic value.'}, 'timeValue': {'type': 'number', 'description': 'Time value.'}}}
Input schema
{'type': 'object', 'required': ['cashflows'], 'properties': {'cashflows': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Cashflows by period, starting at period 0. Outflows are negative.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'irrPct': {'type': 'number', 'description': 'Internal rate of return, percent (null if none).'}}}
Input schema
{'type': 'object', 'required': ['amount', 'ratePct', 'termMonths'], 'properties': {'fees': {'type': 'number', 'description': 'Optional. Upfront fees / points in currency (default 0).'}, 'amount': {'type': 'number', 'description': 'Loan amount.'}, 'ratePct': {'type': 'number', 'description': 'Note (nominal) annual rate in percent.'}, 'termMonths': {'type': 'number', 'description': 'Term in months.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'aprPct': {'type': 'number', 'description': 'Effective APR, percent (null if degenerate).'}}}
Input schema
{'type': 'object', 'required': ['amount', 'rate', 'mode', 'startDate', 'extraMonthly'], 'properties': {'mode': {'enum': ['term', 'payment'], 'type': 'string', 'description': 'Fix the term (compute the payment) or fix the payment (compute the term).'}, 'rate': {'type': 'number', 'description': 'Annual interest rate in percent (6 = 6%).'}, 'extra': {'type': 'array', 'items': {'type': 'object', 'properties': {'date': {'type': 'string', 'description': 'ISO date.'}, 'amount': {'type': 'number', 'description': 'Extra principal.'}}}, 'description': 'Optional dated extra principal payments.'}, 'amount': {'type': 'number', 'description': 'Loan principal.'}, 'payment': {'type': 'number', 'description': "Monthly payment, used when mode is 'payment'."}, 'startDate': {'type': 'string', 'description': 'First payment month as an ISO date (YYYY-MM-DD).'}, 'termYears': {'type': 'number', 'description': "Term in years, used when mode is 'term'."}, 'fixedUntil': {'type': 'string', 'description': 'Optional. Rate is certain until this ISO date; beyond it the schedule is an estimate.'}, 'extraMonthly': {'type': 'number', 'description': 'Extra principal paid each month.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'baseline': {'type': 'object', 'description': 'Baseline { months, totalInterest, payoffDate }.'}, 'accelerated': {'type': 'object', 'description': 'Accelerated { months, totalInterest, payoffDate }.'}, 'monthsSaved': {'type': 'number', 'description': 'Months saved.'}, 'interestSaved': {'type': 'number', 'description': 'Interest saved.'}}}
Input schema
{'type': 'object', 'required': ['loanAmount', 'propertyValue'], 'properties': {'loanAmount': {'type': 'number', 'description': 'Loan amount.'}, 'propertyValue': {'type': 'number', 'description': 'Property value.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'ltvPct': {'type': 'number', 'description': 'Loan-to-value, percent (null if value<=0).'}}}
Input schema
{'type': 'object', 'required': [], 'properties': {'cost': {'type': 'number', 'description': 'Unit cost.'}, 'price': {'type': 'number', 'description': 'Selling price.'}, 'marginPct': {'type': 'number', 'description': 'Profit as a percent of price.'}, 'markupPct': {'type': 'number', 'description': 'Profit as a percent of cost.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'cost': {'type': 'number', 'description': 'Cost.'}, 'price': {'type': 'number', 'description': 'Price.'}, 'profit': {'type': 'number', 'description': 'Profit.'}, 'marginPct': {'type': 'number', 'description': 'Margin, percent.'}, 'markupPct': {'type': 'number', 'description': 'Markup, percent.'}}}
Input schema
{'type': 'object', 'required': ['series'], 'properties': {'series': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Sequence of values (e.g. portfolio levels).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'maxDrawdownPct': {'type': 'number', 'description': 'Largest peak-to-trough decline, percent.'}}}
Input schema
{'type': 'object', 'required': ['cashflows', 'financeRatePct', 'reinvestRatePct'], 'properties': {'cashflows': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Cashflows by period (index 0 today; outflows negative).'}, 'financeRatePct': {'type': 'number', 'description': 'Finance rate in percent.'}, 'reinvestRatePct': {'type': 'number', 'description': 'Reinvestment rate in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'mirrPct': {'type': 'number', 'description': 'Modified IRR, percent (null if degenerate).'}}}
Input schema
{'type': 'object', 'required': ['annualIncome', 'dtiPct', 'rate', 'termYears'], 'properties': {'rate': {'type': 'number', 'description': 'Annual interest rate in percent.'}, 'dtiPct': {'type': 'number', 'description': 'Max share of gross monthly income for the payment, in percent (e.g. 36).'}, 'termYears': {'type': 'number', 'description': 'Loan term in years.'}, 'downPayment': {'type': 'number', 'description': 'Optional. Cash down payment, added to the loan for the home price (default 0).'}, 'annualIncome': {'type': 'number', 'description': 'Gross annual income.'}, 'monthlyDebts': {'type': 'number', 'description': 'Optional. Existing monthly debt payments (default 0).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'maxLoan': {'type': 'number', 'description': 'Max loan.'}, 'maxHomePrice': {'type': 'number', 'description': 'Max home price.'}, 'maxMonthlyPayment': {'type': 'number', 'description': 'Max payment.'}}}
Input schema
{'type': 'object', 'required': ['assets', 'liabilities'], 'properties': {'assets': {'type': 'number', 'description': 'Total assets.'}, 'liabilities': {'type': 'number', 'description': 'Total liabilities.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'netWorth': {'type': 'number', 'description': 'Assets minus liabilities.'}}}
Input schema
{'type': 'object', 'required': ['grossRentalIncome', 'vacancyPct', 'operatingExpenses'], 'properties': {'vacancyPct': {'type': 'number', 'description': 'Vacancy rate in percent.'}, 'grossRentalIncome': {'type': 'number', 'description': 'Gross annual rental income.'}, 'operatingExpenses': {'type': 'number', 'description': 'Annual operating expenses.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'noi': {'type': 'number', 'description': 'Net operating income.'}}}
Input schema
{'type': 'object', 'required': ['cashflows', 'discountRatePct'], 'properties': {'cashflows': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Cashflows by period, starting at period 0. Outflows are negative.'}, 'discountRatePct': {'type': 'number', 'description': 'Discount rate per period in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'npv': {'type': 'number', 'description': 'Net present value.'}}}
Input schema
{'type': 'object', 'required': ['strike', 'premium'], 'properties': {'type': {'enum': ['call', 'put'], 'type': 'string', 'description': 'Option type (default call).'}, 'strike': {'type': 'number', 'description': 'Strike price.'}, 'premium': {'type': 'number', 'description': 'Option premium paid.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'breakeven': {'type': 'number', 'description': 'Break-even underlying price.'}}}
Input schema
{'type': 'object', 'required': ['spot', 'strike', 'years', 'volatilityPct', 'riskFreePct'], 'properties': {'spot': {'type': 'number', 'description': 'Current underlying price.'}, 'type': {'enum': ['call', 'put'], 'type': 'string', 'description': 'Option type (default call).'}, 'years': {'type': 'number', 'description': 'Time to expiry in years.'}, 'strike': {'type': 'number', 'description': 'Strike price.'}, 'riskFreePct': {'type': 'number', 'description': 'Risk-free rate in percent.'}, 'volatilityPct': {'type': 'number', 'description': 'Annualized volatility in percent.'}, 'dividendYieldPct': {'type': 'number', 'description': 'Continuous dividend yield in percent (default 0).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'rho': {'type': 'number', 'description': 'Rho per 1% rate.'}, 'vega': {'type': 'number', 'description': 'Vega per 1% vol.'}, 'delta': {'type': 'number', 'description': 'Delta.'}, 'gamma': {'type': 'number', 'description': 'Gamma.'}, 'theta': {'type': 'number', 'description': 'Theta per day.'}}}
Input schema
{'type': 'object', 'required': ['initialCost', 'cashflows'], 'properties': {'cashflows': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Inflow each period.'}, 'initialCost': {'type': 'number', 'description': 'Upfront cost.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'years': {'type': 'number', 'description': 'Payback in periods (null if never).'}}}
Input schema
{'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'number', 'description': 'Ending value.'}, 'from': {'type': 'number', 'description': 'Starting value.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'changePct': {'type': 'number', 'description': 'Percentage change (null if from=0).'}}}
Input schema
{'type': 'object', 'required': ['payment', 'ratePct'], 'properties': {'payment': {'type': 'number', 'description': 'Periodic payment.'}, 'ratePct': {'type': 'number', 'description': 'Discount rate in percent.'}, 'growthPct': {'type': 'number', 'description': 'Optional. Payment growth rate in percent (default 0).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'pv': {'type': 'number', 'description': 'Present value (null if growth>=rate).'}}}
Input schema
{'type': 'object', 'required': ['loanAmount', 'ratePct', 'termMonths', 'pointsPct', 'reducedRatePct'], 'properties': {'ratePct': {'type': 'number', 'description': 'Base annual rate in percent.'}, 'pointsPct': {'type': 'number', 'description': 'Points paid, percent of the loan.'}, 'loanAmount': {'type': 'number', 'description': 'Loan amount.'}, 'termMonths': {'type': 'number', 'description': 'Term in months.'}, 'reducedRatePct': {'type': 'number', 'description': 'Reduced annual rate after buying points.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'cost': {'type': 'number', 'description': 'Upfront cost of points.'}, 'monthlySaving': {'type': 'number', 'description': 'Monthly payment saving.'}, 'breakevenMonths': {'type': 'number', 'description': 'Whole months to recoup (null if no saving).'}}}
Input schema
{'type': 'object', 'required': ['balance', 'annualWithdrawal', 'annualRatePct'], 'properties': {'balance': {'type': 'number', 'description': 'Starting balance.'}, 'annualRatePct': {'type': 'number', 'description': 'Annual portfolio growth in percent.'}, 'annualWithdrawal': {'type': 'number', 'description': 'Amount withdrawn in the first year.'}, 'withdrawalGrowthPct': {'type': 'number', 'description': 'Optional. Yearly step-up of the withdrawal in percent (default 0).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'years': {'type': 'number', 'description': 'Depletion year (null if sustainable).'}, 'sustainable': {'type': 'boolean', 'description': 'True if it outlasts 200 years.'}}}
Input schema
{'type': 'object', 'required': ['futureAmount', 'annualRatePct', 'years'], 'properties': {'years': {'type': 'number', 'description': 'Number of years until the amount is received.'}, 'futureAmount': {'type': 'number', 'description': 'Amount received in the future.'}, 'annualRatePct': {'type': 'number', 'description': 'Annual discount rate in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'pv': {'type': 'number', 'description': 'Present value.'}}}
Input schema
{'type': 'object', 'required': ['spot', 'strike', 'years', 'riskFreePct'], 'properties': {'put': {'type': 'number', 'description': 'Put price (provide call or put).'}, 'call': {'type': 'number', 'description': 'Call price (provide call or put).'}, 'spot': {'type': 'number', 'description': 'Underlying price.'}, 'years': {'type': 'number', 'description': 'Time to expiry in years.'}, 'strike': {'type': 'number', 'description': 'Strike price.'}, 'riskFreePct': {'type': 'number', 'description': 'Risk-free rate in percent.'}, 'dividendYieldPct': {'type': 'number', 'description': 'Continuous dividend yield in percent (default 0).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'put': {'type': 'number', 'description': 'Put price.'}, 'call': {'type': 'number', 'description': 'Call price.'}}}
Input schema
{'type': 'object', 'required': ['currentAssets', 'inventory', 'currentLiabilities'], 'properties': {'inventory': {'type': 'number', 'description': 'Inventory.'}, 'currentAssets': {'type': 'number', 'description': 'Current assets.'}, 'currentLiabilities': {'type': 'number', 'description': 'Current liabilities.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'quickRatio': {'type': 'number', 'description': 'Quick ratio (null if liabilities<=0).'}}}
Input schema
{'type': 'object', 'required': ['nominalRatePct', 'inflationRatePct'], 'properties': {'nominalRatePct': {'type': 'number', 'description': 'Nominal annual rate in percent.'}, 'inflationRatePct': {'type': 'number', 'description': 'Annual inflation in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'realPct': {'type': 'number', 'description': 'Real return, percent.'}}}
Input schema
{'type': 'object', 'required': ['closingCosts', 'currentPayment', 'newPayment'], 'properties': {'newPayment': {'type': 'number', 'description': 'New monthly payment after refinancing.'}, 'closingCosts': {'type': 'number', 'description': 'Upfront cost to refinance.'}, 'currentPayment': {'type': 'number', 'description': 'Current monthly payment.'}, 'remainingMonths': {'type': 'number', 'description': 'Optional. Months left on the loan, for the lifetime saving.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'monthlySaving': {'type': 'number', 'description': 'Monthly saving.'}, 'lifetimeSaving': {'type': 'number', 'description': 'Net lifetime saving (null if no term).'}, 'breakevenMonths': {'type': 'number', 'description': 'Whole months to recoup (null if no saving).'}}}
Input schema
{'type': 'object', 'required': ['targetValue', 'annualRatePct', 'months'], 'properties': {'months': {'type': 'number', 'description': 'Number of months.'}, 'targetValue': {'type': 'number', 'description': 'Future value goal.'}, 'presentValue': {'type': 'number', 'description': 'Optional. Starting balance (default 0).'}, 'annualRatePct': {'type': 'number', 'description': 'Annual growth rate in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'monthly': {'type': 'number', 'description': 'Monthly contribution needed (null if horizon<=0).'}}}
Input schema
{'type': 'object', 'required': ['begin', 'end', 'years'], 'properties': {'end': {'type': 'number', 'description': 'Target ending value.'}, 'begin': {'type': 'number', 'description': 'Starting value.'}, 'years': {'type': 'number', 'description': 'Number of years.'}, 'annualContribution': {'type': 'number', 'description': 'Optional. Amount added each year (default 0).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'ratePct': {'type': 'number', 'description': 'Annual rate, percent (null if unreachable).'}}}
Input schema
{'type': 'object', 'required': ['returns'], 'properties': {'returns': {'type': 'array', 'items': {'type': 'number'}, 'description': 'The return series (e.g. yearly percents).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'mean': {'type': 'number', 'description': 'Mean return.'}, 'count': {'type': 'number', 'description': 'Number of returns.'}, 'stdev': {'type': 'number', 'description': 'Sample stdev / volatility (null if <2).'}, 'variance': {'type': 'number', 'description': 'Sample variance (null if <2).'}}}
Input schema
{'type': 'object', 'required': ['netIncome', 'totalAssets'], 'properties': {'netIncome': {'type': 'number', 'description': 'Net income.'}, 'totalAssets': {'type': 'number', 'description': 'Total assets.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'roaPct': {'type': 'number', 'description': 'Return on assets, percent (null if assets<=0).'}}}
Input schema
{'type': 'object', 'required': ['netIncome', 'equity'], 'properties': {'equity': {'type': 'number', 'description': "Shareholders' equity."}, 'netIncome': {'type': 'number', 'description': 'Net income.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'roePct': {'type': 'number', 'description': 'Return on equity, percent (null if equity<=0).'}}}
Input schema
{'type': 'object', 'required': ['initial', 'finalValue'], 'properties': {'years': {'type': 'number', 'description': 'Optional. Holding period in years, for the annualized rate.'}, 'initial': {'type': 'number', 'description': 'Amount invested.'}, 'finalValue': {'type': 'number', 'description': 'Ending value.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'roiPct': {'type': 'number', 'description': 'Total return, percent.'}, 'annualizedPct': {'type': 'number', 'description': 'Annualized return, percent (null if no years).'}}}
Input schema
{'type': 'object', 'required': ['ratePct'], 'properties': {'ratePct': {'type': 'number', 'description': 'Growth rate in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'years72': {'type': 'number', 'description': '72/rate estimate.'}, 'exactYears': {'type': 'number', 'description': 'Exact doubling time.'}}}
Input schema
{'type': 'object', 'required': ['annualSalary'], 'properties': {'annualSalary': {'type': 'number', 'description': 'Annual salary.'}, 'hoursPerWeek': {'type': 'number', 'description': 'Hours per week (default 40).'}, 'weeksPerYear': {'type': 'number', 'description': 'Weeks per year (default 52).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'hourly': {'type': 'number', 'description': 'Hourly rate (null if hours<=0).'}}}
Input schema
{'type': 'object', 'required': ['income', 'savings'], 'properties': {'income': {'type': 'number', 'description': 'Income.'}, 'savings': {'type': 'number', 'description': 'Amount saved.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'value': {'type': 'number', 'description': 'Result value.'}}}
Input schema
{'type': 'object', 'required': ['returns'], 'properties': {'returns': {'type': 'array', 'items': {'type': 'number'}, 'description': 'The return series (percents).'}, 'riskFreePct': {'type': 'number', 'description': 'Risk-free rate in the same unit (default 0).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'sharpe': {'type': 'number', 'description': 'Sharpe ratio (null if no volatility).'}, 'meanPct': {'type': 'number', 'description': 'Mean return.'}, 'stdevPct': {'type': 'number', 'description': 'Volatility.'}}}
Input schema
{'type': 'object', 'required': ['value', 'salvage', 'usefulYears', 'yearsElapsed'], 'properties': {'value': {'type': 'number', 'description': 'Starting value.'}, 'salvage': {'type': 'number', 'description': 'Salvage value.'}, 'usefulYears': {'type': 'number', 'description': 'Useful life in years.'}, 'yearsElapsed': {'type': 'number', 'description': 'Years elapsed.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'value': {'type': 'number', 'description': 'Result value.'}}}
Input schema
{'type': 'object', 'required': ['price', 'discountsPct'], 'properties': {'price': {'type': 'number', 'description': 'Original price.'}, 'discountsPct': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Discounts in percent, applied in order.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'finalPrice': {'type': 'number', 'description': 'Final price.'}, 'effectivePct': {'type': 'number', 'description': 'Effective single discount, percent (null if price=0).'}}}
Input schema
{'type': 'object', 'required': ['value', 'salvage', 'usefulYears', 'year'], 'properties': {'year': {'type': 'number', 'description': 'Year (1-based).'}, 'value': {'type': 'number', 'description': 'Initial cost.'}, 'salvage': {'type': 'number', 'description': 'Salvage value.'}, 'usefulYears': {'type': 'number', 'description': 'Useful life in years.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'bookValue': {'type': 'number', 'description': 'Book value at year end.'}, 'depreciation': {'type': 'number', 'description': 'Depreciation this year.'}}}
Input schema
{'type': 'object', 'required': ['taxFreeYieldPct', 'taxRatePct'], 'properties': {'taxRatePct': {'type': 'number', 'description': 'Marginal tax rate in percent.'}, 'taxFreeYieldPct': {'type': 'number', 'description': 'Tax-free yield in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'taxEquivalentPct': {'type': 'number', 'description': 'Tax-equivalent yield, percent (null if tax>=100%).'}}}
Input schema
{'type': 'object', 'required': ['income', 'brackets'], 'properties': {'income': {'type': 'number', 'description': 'Taxable income.'}, 'brackets': {'type': 'array', 'items': {'type': 'object', 'required': ['ratePct'], 'properties': {'upTo': {'type': 'number', 'description': 'Upper bound of this band (omit on the top band).'}, 'ratePct': {'type': 'number', 'description': 'Marginal rate for this band in percent.'}}}, 'description': 'Ordered tax bands. The final band may omit upTo to run to infinity.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'tax': {'type': 'number', 'description': 'Total tax.'}, 'marginalRatePct': {'type': 'number', 'description': 'Marginal rate, percent.'}, 'effectiveRatePct': {'type': 'number', 'description': 'Effective rate, percent.'}}}
Input schema
{'type': 'object', 'required': ['billAmount', 'tipPct'], 'properties': {'people': {'type': 'number', 'description': 'Number of people (default 1).'}, 'tipPct': {'type': 'number', 'description': 'Tip in percent.'}, 'billAmount': {'type': 'number', 'description': 'Bill amount.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'tip': {'type': 'number', 'description': 'Tip amount.'}, 'total': {'type': 'number', 'description': 'Total with tip.'}, 'perPerson': {'type': 'number', 'description': 'Per-person share.'}}}
Input schema
{'type': 'object', 'required': ['price', 'quantity'], 'properties': {'price': {'type': 'number', 'description': 'Price.'}, 'quantity': {'type': 'number', 'description': 'Quantity / size.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'unitPrice': {'type': 'number', 'description': 'Price per unit (null if quantity=0).'}}}
Input schema
{'type': 'object', 'required': ['value', 'salvage', 'totalUnits', 'unitsThisPeriod'], 'properties': {'value': {'type': 'number', 'description': 'Initial cost.'}, 'salvage': {'type': 'number', 'description': 'Salvage value.'}, 'totalUnits': {'type': 'number', 'description': 'Total expected units over the life.'}, 'unitsThisPeriod': {'type': 'number', 'description': 'Units produced this period.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'depreciation': {'type': 'number', 'description': 'Depreciation this period (null if totalUnits<=0).'}}}
Input schema
{'type': 'object', 'required': ['amount', 'ratePct'], 'properties': {'amount': {'type': 'number', 'description': 'The price.'}, 'ratePct': {'type': 'number', 'description': 'VAT rate in percent (e.g. 19 or 7).'}, 'inclusive': {'type': 'boolean', 'description': 'false (default): amount is net, add the tax. true: amount is gross, extract the tax.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'net': {'type': 'number', 'description': 'Net price.'}, 'tax': {'type': 'number', 'description': 'Tax amount.'}, 'gross': {'type': 'number', 'description': 'Gross price.'}}}
Input schema
{'type': 'object', 'required': ['equity', 'debt', 'costEquityPct', 'costDebtPct', 'taxRatePct'], 'properties': {'debt': {'type': 'number', 'description': 'Market value of debt.'}, 'equity': {'type': 'number', 'description': 'Market value of equity.'}, 'taxRatePct': {'type': 'number', 'description': 'Tax rate in percent.'}, 'costDebtPct': {'type': 'number', 'description': 'Cost of debt in percent.'}, 'costEquityPct': {'type': 'number', 'description': 'Cost of equity in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'waccPct': {'type': 'number', 'description': 'WACC, percent (null if no capital).'}}}
Input schema
{'type': 'object', 'required': ['cashflows'], 'properties': {'cashflows': {'type': 'array', 'items': {'type': 'object', 'required': ['date', 'amount'], 'properties': {'date': {'type': 'string', 'description': 'ISO date.'}, 'amount': {'type': 'number', 'description': 'Cashflow amount (outflows negative).'}}}, 'description': 'Dated cashflows; the first date is the valuation date.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'xirrPct': {'type': 'number', 'description': 'Date-aware IRR, percent (null if none).'}}}
Input schema
{'type': 'object', 'required': ['cashflows', 'annualRatePct'], 'properties': {'cashflows': {'type': 'array', 'items': {'type': 'object', 'required': ['date', 'amount'], 'properties': {'date': {'type': 'string', 'description': 'ISO date.'}, 'amount': {'type': 'number', 'description': 'Cashflow amount (outflows negative).'}}}, 'description': 'Dated cashflows; the first date is the valuation date.'}, 'annualRatePct': {'type': 'number', 'description': 'Annual discount rate in percent.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'npv': {'type': 'number', 'description': 'Date-aware net present value.'}}}
Input schema
{'type': 'object', 'required': ['price', 'faceValue', 'couponRatePct', 'years'], 'properties': {'price': {'type': 'number', 'description': 'Current bond price.'}, 'years': {'type': 'number', 'description': 'Years to maturity.'}, 'faceValue': {'type': 'number', 'description': 'Face (par) value repaid at maturity.'}, 'couponRatePct': {'type': 'number', 'description': 'Annual coupon rate in percent of face.'}, 'periodsPerYear': {'type': 'number', 'description': 'Coupon periods per year (default 2 = semiannual).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'yieldPct': {'type': 'number', 'description': 'Nominal annual yield, percent (null if none).'}}}
Input schema
{'type': 'object', 'required': ['faceValue', 'years', 'yieldPct'], 'properties': {'years': {'type': 'number', 'description': 'Years to maturity.'}, 'yieldPct': {'type': 'number', 'description': 'Annual yield in percent.'}, 'faceValue': {'type': 'number', 'description': 'Face value.'}, 'compoundingPerYear': {'type': 'number', 'description': 'Compounding periods per year (default 1).'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'price': {'type': 'number', 'description': 'Zero-coupon price.'}}}
Recent tool changes
Similar MCP servers
MaCalculatriceEnLigne
Provides calculators for French and Belgian taxes, salaries, pensions, VAT, loans, health metrics, education scores, fitness, and…
Lovie Company Formation
Supports company formation and business administration with bank accounts, cards, invoicing, bookkeeping, accounting periods, and…
AlpineDataWorks Intelligence Server
Provides economic, market, supply-chain, real-estate, energy, consumer, labor, and other scored intelligence indices with histori…
The Stall
Provides pay-per-call tools for YouTube keyword research and research on stocks, crypto, DeFi, options, and macroeconomic data.
Stratalize Finance
Provides financial, macroeconomic, banking, credit, commodities, M&A, ESG, labor, and regulatory benchmarks for analysis and plan…
Crank Protocol
Provides non-custodial Solana and EVM tools for swaps, derivatives, lending, staking, tokenized equities, bridging, and strategy …
Red by Big Red Cloud
Connects to Big Red Cloud accounting for customers, suppliers, products, invoices, purchases, payments, receipts, journals, quote…
x402-services
Provides on-chain, trading, and AI tools for Robinhood Chain.