{"name":"io.github.VladimirWrites/nestegg-calculators","slug":"vladimirwrites-nestegg-calculators","title":null,"description":"90+ pure finance calculators: loans, investing, bonds, options, tax. Stateless, stores nothing.","url":"https://mcp.market/server/vladimirwrites-nestegg-calculators","rating":null,"grade":"B","score":77,"certified":false,"status":"active","category":"finance","tags":["finance"],"presence":{"score":22,"stars":4,"forks":2,"downloads_week":null,"last_push_at":"2026-08-15T04:53:50.000Z","license":"Apache-2.0"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T05:30:47.877Z","last_ok_at":"2026-11-04T05:30:47.877Z","latency_ms":36},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/VladimirWrites/nestegg.money","website":null,"version":"1.4.0","remotes":[{"type":"streamable-http","url":"https://nestegg.money/mcp"}],"packages":[],"tools":[{"name":"accrued-interest","description":"Accrued interest since the last coupon: the annual coupon pro-rated by days elapsed over the day-count basis.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"faceValue":{"type":"number","description":"Face value."},"couponRatePct":{"type":"number","description":"Annual coupon rate in percent."},"daysSinceLastCoupon":{"type":"number","description":"Days since the last coupon."},"dayCountBasis":{"type":"number","description":"Day-count basis (default 360)."}},"required":["faceValue","couponRatePct","daysSinceLastCoupon"],"additionalProperties":false}},{"name":"after-tax-yield","description":"After-tax yield: a yield reduced by the tax rate. Percents in and out.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"yieldPct":{"type":"number","description":"Pre-tax yield in percent."},"taxRatePct":{"type":"number","description":"Tax rate in percent."}},"required":["yieldPct","taxRatePct"],"additionalProperties":false}},{"name":"amortization","description":"Monthly loan amortization schedule and summary. Supports dated extra principal payments and a rate-fixed period. detail controls output size: 'summary' (default) returns totals plus a per-year breakdown; 'monthly' returns the full schedule (paginate with offset/limit). Returns numbers and schedules; no advice.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"amount":{"type":"number","description":"Loan principal."},"rate":{"type":"number","description":"Annual interest rate in percent (6 = 6%)."},"mode":{"type":"string","enum":["term","payment"],"description":"Fix the term (compute the payment) or fix the payment (compute the term)."},"termYears":{"type":"number","description":"Term in years, used when mode is 'term'."},"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)."},"fixedUntil":{"type":"string","description":"Optional. Rate is certain until this ISO date; beyond it the schedule is an estimate."},"extra":{"type":"array","description":"Optional dated extra principal payments.","items":{"type":"object","properties":{"date":{"type":"string","description":"ISO date."},"amount":{"type":"number","description":"Extra principal."}}}},"detail":{"type":"string","enum":["summary","yearly","monthly"],"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)."},"limit":{"type":"number","description":"Max monthly rows when detail=monthly (default and maximum 360; page with nextOffset)."},"rateSteps":{"type":"array","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.","items":{"type":"object","properties":{"date":{"type":"string","description":"ISO date the new rate starts."},"rate":{"type":"number","description":"New annual rate in percent."}},"required":["date","rate"]}}},"required":["amount","rate","mode","startDate"],"additionalProperties":false}},{"name":"annuity-fv","description":"Future value of an ordinary annuity. rate is the per-period rate in percent.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"payment":{"type":"number","description":"Payment per period."},"ratePct":{"type":"number","description":"Rate per period in percent."},"periods":{"type":"number","description":"Number of periods."}},"required":["payment","ratePct","periods"],"additionalProperties":false}},{"name":"annuity-payment","description":"The level payment that amortizes a present value over n periods (the loan-payment formula). rate is per period.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"presentValue":{"type":"number","description":"Present value / principal."},"ratePct":{"type":"number","description":"Rate per period in percent."},"periods":{"type":"number","description":"Number of periods."}},"required":["presentValue","ratePct","periods"],"additionalProperties":false}},{"name":"annuity-pv","description":"Present value of an ordinary annuity (level payment at each period end). rate is the per-period rate in percent.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"payment":{"type":"number","description":"Payment per period."},"ratePct":{"type":"number","description":"Rate per period in percent."},"periods":{"type":"number","description":"Number of periods."}},"required":["payment","ratePct","periods"],"additionalProperties":false}},{"name":"balloon-loan","description":"Balloon loan: payment based on a long amortization, with the balloon being the balance still due after the shorter balloon term.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"amount":{"type":"number","description":"Loan amount."},"ratePct":{"type":"number","description":"Annual rate in percent."},"balloonMonths":{"type":"number","description":"Months until the balloon is due."},"amortMonths":{"type":"number","description":"Amortization basis in months."}},"required":["amount","ratePct","balloonMonths","amortMonths"],"additionalProperties":false}},{"name":"barista-fire","description":"Barista FIRE: the nest egg needed when part-time income covers part of the spending, so the portfolio only funds the remainder at the safe withdrawal rate.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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)."}},"required":["annualSpend","partTimeIncome"],"additionalProperties":false}},{"name":"biweekly-payoff","description":"Biweekly mortgage acceleration: paying half the monthly payment every two weeks. Returns the biweekly payment and the months and interest saved.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"amount":{"type":"number","description":"Loan amount."},"ratePct":{"type":"number","description":"Annual rate in percent."},"termMonths":{"type":"number","description":"Original term in months."}},"required":["amount","ratePct","termMonths"],"additionalProperties":false}},{"name":"black-scholes","description":"Black-Scholes price of a European call or put option, plus d1/d2. Volatility and rates in percent; optional continuous dividend yield.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"spot":{"type":"number","description":"Current underlying price."},"strike":{"type":"number","description":"Strike price."},"years":{"type":"number","description":"Time to expiry in years."},"volatilityPct":{"type":"number","description":"Annualized volatility in percent."},"riskFreePct":{"type":"number","description":"Risk-free rate in percent."},"dividendYieldPct":{"type":"number","description":"Continuous dividend yield in percent (default 0)."},"type":{"type":"string","enum":["call","put"],"description":"Option type (default call)."}},"required":["spot","strike","years","volatilityPct","riskFreePct"],"additionalProperties":false}},{"name":"bond-duration","description":"Macaulay duration (PV-weighted average time of cashflows, in years) and modified duration (price sensitivity to yield).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"faceValue":{"type":"number","description":"Face value."},"couponRatePct":{"type":"number","description":"Annual coupon rate in percent."},"years":{"type":"number","description":"Years to maturity."},"yieldPct":{"type":"number","description":"Annual yield in percent."},"periodsPerYear":{"type":"number","description":"Coupon periods per year (default 2)."}},"required":["faceValue","couponRatePct","years","yieldPct"],"additionalProperties":false}},{"name":"bond-price","description":"Price of a coupon bond given a yield: present value of the coupons plus the face at maturity.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"faceValue":{"type":"number","description":"Face (par) value."},"couponRatePct":{"type":"number","description":"Annual coupon rate in percent of face."},"years":{"type":"number","description":"Years to maturity."},"yieldPct":{"type":"number","description":"Annual yield in percent."},"periodsPerYear":{"type":"number","description":"Coupon periods per year (default 2)."}},"required":["faceValue","couponRatePct","years","yieldPct"],"additionalProperties":false}},{"name":"break-even-units","description":"Break-even volume: fixed costs divided by the per-unit contribution (price - variable cost), plus the revenue at that volume.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"fixedCosts":{"type":"number","description":"Total fixed costs."},"pricePerUnit":{"type":"number","description":"Selling price per unit."},"variableCostPerUnit":{"type":"number","description":"Variable cost per unit."}},"required":["fixedCosts","pricePerUnit","variableCostPerUnit"],"additionalProperties":false}},{"name":"budget-50-30-20","description":"The 50/30/20 budget split of monthly income into needs, wants, and savings.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"monthlyIncome":{"type":"number","description":"Monthly take-home income."}},"required":["monthlyIncome"],"additionalProperties":false}},{"name":"cagr","description":"Compound annual growth rate between two values over a number of years. Returns a decimal (0.07 means 7%).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"begin":{"type":"number","description":"Starting value."},"end":{"type":"number","description":"Ending value."},"years":{"type":"number","description":"Number of years."}},"required":["begin","end","years"],"additionalProperties":false}},{"name":"cap-rate","description":"Capitalization rate: net operating income as a percent of property value.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"noi":{"type":"number","description":"Net operating income."},"propertyValue":{"type":"number","description":"Property value."}},"required":["noi","propertyValue"],"additionalProperties":false}},{"name":"cash-on-cash","description":"Cash-on-cash return: annual pre-tax cash flow as a percent of the cash invested.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"annualCashFlow":{"type":"number","description":"Annual pre-tax cash flow."},"cashInvested":{"type":"number","description":"Cash invested."}},"required":["annualCashFlow","cashInvested"],"additionalProperties":false}},{"name":"coast-fire","description":"Coast FIRE: whether the current nest egg, left to grow untouched to retirement, already reaches the FIRE target. Returns the target, the projected balance, whether it coasts, and any shortfall.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"currentNestEgg":{"type":"number","description":"Amount invested today."},"annualRatePct":{"type":"number","description":"Expected annual growth in percent."},"yearsToRetirement":{"type":"number","description":"Years until retirement."},"annualSpend":{"type":"number","description":"Yearly spending in retirement."},"withdrawalRatePct":{"type":"number","description":"Safe withdrawal rate in percent (default 4)."}},"required":["currentNestEgg","annualRatePct","yearsToRetirement","annualSpend"],"additionalProperties":false}},{"name":"compound-interest","description":"Compound growth at any frequency, with an optional contribution each period (paid at period end). Generalizes future-value (periodsPerYear 1) and contributions (periodsPerYear 12).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"principal":{"type":"number","description":"Starting amount."},"annualRatePct":{"type":"number","description":"Annual growth rate in percent."},"years":{"type":"number","description":"Number of years."},"periodsPerYear":{"type":"number","description":"Compounding periods per year (default 1)."},"contributionPerPeriod":{"type":"number","description":"Optional. Amount added each period (default 0)."}},"required":["principal","annualRatePct","years"],"additionalProperties":false}},{"name":"contribution-margin","description":"Contribution margin per unit and as a percent of price.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"pricePerUnit":{"type":"number","description":"Selling price per unit."},"variableCostPerUnit":{"type":"number","description":"Variable cost per unit."}},"required":["pricePerUnit","variableCostPerUnit"],"additionalProperties":false}},{"name":"contributions","description":"Future value of a fixed monthly contribution, optionally stepping up each year.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"monthly":{"type":"number","description":"Monthly contribution."},"annualRatePct":{"type":"number","description":"Annual growth rate in percent."},"months":{"type":"number","description":"Number of months."},"contribGrowthPct":{"type":"number","description":"Optional. Contribution step-up percent per year."}},"required":["monthly","annualRatePct","months"],"additionalProperties":false}},{"name":"convexity","description":"Bond convexity (years^2): the curvature of price with respect to yield, used alongside duration.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"faceValue":{"type":"number","description":"Face value."},"couponRatePct":{"type":"number","description":"Annual coupon rate in percent."},"years":{"type":"number","description":"Years to maturity."},"yieldPct":{"type":"number","description":"Annual yield in percent."},"periodsPerYear":{"type":"number","description":"Coupon periods per year (default 2)."}},"required":["faceValue","couponRatePct","years","yieldPct"],"additionalProperties":false}},{"name":"credit-card-payoff","description":"Months to clear a credit-card balance at a fixed monthly payment, plus interest paid. Null when the payment can't cover the first month's interest.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"balance":{"type":"number","description":"Current balance."},"aprPct":{"type":"number","description":"Annual percentage rate in percent."},"monthlyPayment":{"type":"number","description":"Fixed monthly payment."}},"required":["balance","aprPct","monthlyPayment"],"additionalProperties":false}},{"name":"current-ratio","description":"Current ratio: current assets over current liabilities.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"currentAssets":{"type":"number","description":"Current assets."},"currentLiabilities":{"type":"number","description":"Current liabilities."}},"required":["currentAssets","currentLiabilities"],"additionalProperties":false}},{"name":"current-yield","description":"Current yield: the annual coupon as a percent of the bond's current price.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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."}},"required":["price","faceValue","couponRatePct"],"additionalProperties":false}},{"name":"de-abgeltungsteuer","description":"German flat tax on capital income (Abgeltungsteuer, §32d EStG) for tax years 2023-2026 with the year's Sparerpauschbetrag built in. 25% above the allowance, Soli 5.5% on top (no Freigrenze for capital income), and with church tax the statutory reduced rate (e.g. 24.45% at 9%) plus the church tax itself.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"year":{"type":"number","description":"Tax year: 2023, 2024, 2025 or 2026."},"capitalIncome":{"type":"number","description":"Annual capital income (interest, dividends, realized gains) in EUR."},"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)."},"foreignTaxCredit":{"type":"number","description":"Optional. Creditable foreign withholding tax (q in the §32d formula)."}},"required":["year","capitalIncome"],"additionalProperties":false}},{"name":"de-gross-to-net","description":"German net (Netto) salary from gross (Brutto). No tax tables are baked in: look up the current year's statutory figures and pass them in. Income tax (Lohnsteuer) and Soli are amounts; church tax is a percent of the income tax; the four employee social rates and the two contribution ceilings are inputs. Use consistent units (e.g. all annual).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"gross":{"type":"number","description":"Gross salary (Brutto)."},"incomeTax":{"type":"number","description":"Income tax (Lohnsteuer) amount for the period — look up via the §32a / Steuerklasse tables."},"soli":{"type":"number","description":"Solidarity surcharge (Solidaritätszuschlag) amount (often 0 below the threshold)."},"churchTaxPct":{"type":"number","description":"Church tax (Kirchensteuer) rate in percent of income tax (8 or 9, 0 if none)."},"pensionPct":{"type":"number","description":"Employee pension (Rentenversicherung) rate in percent (e.g. 9.3)."},"unemploymentPct":{"type":"number","description":"Employee unemployment (Arbeitslosenversicherung) rate in percent (e.g. 1.3)."},"healthPct":{"type":"number","description":"Employee health (Krankenversicherung incl. Zusatzbeitrag) rate in percent."},"carePct":{"type":"number","description":"Employee long-term care (Pflegeversicherung) rate in percent."},"pensionCeiling":{"type":"number","description":"Contribution ceiling (Beitragsbemessungsgrenze) for pension and unemployment."},"healthCeiling":{"type":"number","description":"Contribution ceiling for health and care."}},"required":["gross"],"additionalProperties":false}},{"name":"de-kindergeld","description":"German child benefit (Kindergeld) for 2023-2026: the year's flat monthly amount per child (uniform since 2023), as monthly and annual totals.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"year":{"type":"number","description":"Year: 2023, 2024, 2025 or 2026."},"children":{"type":"number","description":"Number of children (default 1)."}},"required":["year"],"additionalProperties":false}},{"name":"de-midijob","description":"German Midijob / Uebergangsbereich (paragraph 20 Abs. 2a SGB IV) for 2023-2026: classifies a monthly pay as Minijob / Midijob / regular against the year's thresholds and, inside the Midijob band, computes the reduced contribution bases (Faktor F from the year's rates) and the employee vs employer social-insurance split.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"year":{"type":"number","description":"Year: 2023, 2024, 2025 or 2026."},"monthlyPay":{"type":"number","description":"Gross monthly pay in EUR."},"children":{"type":"number","description":"Children, for the care-insurance rate (default 0)."},"childrenUnder25":{"type":"number","description":"Optional. Children under 25 for the care discounts, when different."},"age":{"type":"number","description":"Optional. Age - under 23 skips the childless care surcharge."},"bundesland":{"type":"string","description":"Optional. State code; SN applies the Saxony care split."},"kvZusatzPct":{"type":"number","description":"Optional. Krankenkasse Zusatzbeitrag in percent; defaults to the year's average."}},"required":["year","monthlyPay"],"additionalProperties":false}},{"name":"de-net-salary","description":"Exact German net (Netto) salary from annual gross (Brutto) for tax years 2023-2026. Income tax and Soli follow the official BMF Programmablaufplan for the year (to the euro; 2024 uses the retroactive December tariff), church tax comes from the PAP's Kirchensteuer base, and employee social insurance uses that year's ceilings and rates (KV Zusatzbeitrag defaults to the year's average). Earlier years are rejected - use de-gross-to-net with self-supplied figures instead.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"year":{"type":"number","description":"Tax year: 2023, 2024, 2025 or 2026."},"grossAnnual":{"type":"number","description":"Annual gross salary (Brutto) in EUR."},"taxClass":{"type":"number","description":"Steuerklasse 1-6 (default 1)."},"children":{"type":"number","description":"Kinderfreibetrag counter (ZKF), halves allowed (default 0). Also drives the care-insurance child discounts."},"childrenUnder25":{"type":"number","description":"Optional. Children under 25 for the care-insurance discounts, when it differs from `children`."},"churchTaxPct":{"type":"number","description":"Church tax rate: 8, 9, or 0 for none (default 0)."},"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."},"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."},"privateHealth":{"type":"object","properties":{"premiumAnnual":{"type":"number","description":"Annual private health+care premium in EUR."}},"required":["premiumAnnual"],"additionalProperties":false},"age":{"type":"number","description":"Optional. Age in years - under 23 skips the childless care surcharge."},"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."}},"required":["year","grossAnnual"],"additionalProperties":false}},{"name":"de-rentenpunkte","description":"German pension points (Entgeltpunkte, paragraph 63 SGB VI) for 2023-2026: points earned from an annual gross via the year's Durchschnittsentgelt (capped at the contribution ceiling), the aktueller Rentenwert for both halves of the year, and optionally the gross monthly state pension for a total point count.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"year":{"type":"number","description":"Year: 2023, 2024, 2025 or 2026."},"grossAnnual":{"type":"number","description":"Annual insured gross salary in EUR."},"bundesland":{"type":"string","description":"Optional. State code - East states use the East ceiling before 2025."},"totalPoints":{"type":"number","description":"Optional. Accumulated points, to project the gross monthly pension at today's Rentenwert."}},"required":["year","grossAnnual"],"additionalProperties":false}},{"name":"debt-payoff","description":"Multi-debt payoff plan under a fixed monthly budget. method 'avalanche' (highest rate first) minimizes interest; 'snowball' (smallest balance first) clears accounts soonest. Returns months, total interest, and payoff order; flags insolvent budgets.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"debts":{"type":"array","description":"The debts to pay off.","items":{"type":"object","properties":{"name":{"type":"string","description":"Optional label."},"balance":{"type":"number","description":"Current balance."},"rate":{"type":"number","description":"Annual interest rate in percent."},"minPayment":{"type":"number","description":"Minimum monthly payment."}},"required":["balance","rate","minPayment"]}},"monthlyBudget":{"type":"number","description":"Total amount available across all debts each month."},"method":{"type":"string","enum":["avalanche","snowball"],"description":"Payoff strategy (default avalanche)."}},"required":["debts","monthlyBudget"],"additionalProperties":false}},{"name":"declining-balance-depreciation","description":"Declining-balance depreciation: a fixed percent of the reducing book value, for a given year. Returns that year's depreciation and the remaining book value.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"value":{"type":"number","description":"Initial cost."},"ratePct":{"type":"number","description":"Annual depreciation rate in percent."},"year":{"type":"number","description":"Year (1-based)."}},"required":["value","ratePct","year"],"additionalProperties":false}},{"name":"depreciate","description":"Value after compounding down (or up) at a yearly percentage rate over a number of years. This is the method the app uses for long-term assets.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"value":{"type":"number","description":"Starting value."},"annualRatePct":{"type":"number","description":"Annual rate in percent."},"years":{"type":"number","description":"Number of years."},"up":{"type":"boolean","description":"false depreciates, true appreciates."}},"required":["value","annualRatePct","years"],"additionalProperties":false}},{"name":"discount","description":"A single percentage discount: the amount off and the final price.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"price":{"type":"number","description":"Original price."},"discountPct":{"type":"number","description":"Discount in percent."}},"required":["price","discountPct"],"additionalProperties":false}},{"name":"discounted-payback","description":"Discounted payback period: like payback-period but each cashflow is discounted at the per-period rate.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"initialCost":{"type":"number","description":"Upfront cost."},"cashflows":{"type":"array","description":"Inflow each period.","items":{"type":"number"}},"ratePct":{"type":"number","description":"Discount rate per period in percent."}},"required":["initialCost","cashflows","ratePct"],"additionalProperties":false}},{"name":"dollar-cost-averaging","description":"Dollar-cost averaging: buying a fixed amount each period at the given prices. Returns units accumulated, total invested, average cost, and final value at the last price.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"prices":{"type":"array","description":"Price at each purchase period.","items":{"type":"number"}},"periodicInvestment":{"type":"number","description":"Fixed amount invested each period."}},"required":["prices","periodicInvestment"],"additionalProperties":false}},{"name":"double-declining-depreciation","description":"Double-declining-balance depreciation: 2/usefulYears of the book value each year, not falling below salvage.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"value":{"type":"number","description":"Initial cost."},"usefulYears":{"type":"number","description":"Useful life in years."},"year":{"type":"number","description":"Year (1-based)."},"salvage":{"type":"number","description":"Salvage value (default 0)."}},"required":["value","usefulYears","year"],"additionalProperties":false}},{"name":"dscr","description":"Debt service coverage ratio: net operating income divided by annual debt service.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"noi":{"type":"number","description":"Net operating income."},"annualDebtService":{"type":"number","description":"Annual debt service."}},"required":["noi","annualDebtService"],"additionalProperties":false}},{"name":"dti","description":"Debt-to-income ratio, percent (monthly debt / gross monthly income).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"monthlyDebt":{"type":"number","description":"Total monthly debt payments."},"grossMonthlyIncome":{"type":"number","description":"Gross monthly income."}},"required":["monthlyDebt","grossMonthlyIncome"],"additionalProperties":false}},{"name":"effective-rate","description":"Convert a nominal annual rate to the effective annual rate (APY) for a compounding frequency, or with toNominal recover the nominal rate from an APY.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ratePct":{"type":"number","description":"The rate in percent (nominal, or effective when toNominal is true)."},"periodsPerYear":{"type":"number","description":"Compounding periods per year (12 monthly, 365 daily)."},"toNominal":{"type":"boolean","description":"false (default) returns the effective rate; true returns the nominal rate."}},"required":["ratePct","periodsPerYear"],"additionalProperties":false}},{"name":"emergency-fund","description":"Months of runway: liquid savings divided by monthly expenses.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"liquidSavings":{"type":"number","description":"Cash and liquid savings on hand."},"monthlyExpenses":{"type":"number","description":"Total monthly expenses."}},"required":["liquidSavings","monthlyExpenses"],"additionalProperties":false}},{"name":"fee-drag","description":"Effect of an annual fee: the compounded balance at the gross rate vs net of the fee, and the amount lost to fees.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"principal":{"type":"number","description":"Starting amount."},"grossAnnualPct":{"type":"number","description":"Gross annual return in percent."},"feePct":{"type":"number","description":"Annual fee in percent."},"years":{"type":"number","description":"Number of years."}},"required":["principal","grossAnnualPct","feePct","years"],"additionalProperties":false}},{"name":"fire-number","description":"FIRE target nest egg from annual spend and a safe withdrawal rate (default 4%), plus the gap from today and the years to reach it given optional savings and growth. No advice.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"annualSpend":{"type":"number","description":"Yearly spending the nest egg must cover."},"withdrawalRatePct":{"type":"number","description":"Safe withdrawal rate in percent (default 4 = the 4% rule)."},"currentNestEgg":{"type":"number","description":"Optional. Amount already saved (default 0)."},"annualContribution":{"type":"number","description":"Optional. Amount saved per year (default 0)."},"annualRatePct":{"type":"number","description":"Optional. Annual portfolio growth in percent (default 0)."}},"required":["annualSpend"],"additionalProperties":false}},{"name":"future-value","description":"Future value of a single lump sum compounded annually.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"principal":{"type":"number","description":"Starting amount."},"annualRatePct":{"type":"number","description":"Annual growth rate in percent."},"years":{"type":"number","description":"Number of years."}},"required":["principal","annualRatePct","years"],"additionalProperties":false}},{"name":"fx-convert","description":"Convert an amount using a rate supplied by the caller (units of target currency per unit of source). No rate is ever looked up.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"amount":{"type":"number","description":"Amount to convert."},"rate":{"type":"number","description":"Rate: target units per source unit."}},"required":["amount","rate"],"additionalProperties":false}},{"name":"gross-rent-multiplier","description":"Gross rent multiplier: price divided by gross annual rent.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"price":{"type":"number","description":"Purchase price."},"grossAnnualRent":{"type":"number","description":"Gross annual rent."}},"required":["price","grossAnnualRent"],"additionalProperties":false}},{"name":"holding-period-return","description":"Holding-period return: (income + capital gain) / starting value, in percent.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"income":{"type":"number","description":"Income received over the period."},"endValue":{"type":"number","description":"Ending value."},"beginValue":{"type":"number","description":"Starting value."}},"required":["income","endValue","beginValue"],"additionalProperties":false}},{"name":"hourly-to-salary","description":"Annualize an hourly rate (and the monthly equivalent).","write_action":false,"price_micros":0,"input_schema":{"type":"object","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)."}},"required":["hourlyRate"],"additionalProperties":false}},{"name":"inflation-adjust","description":"Convert a nominal amount to today's purchasing power (real), or with toNominal inflate a real amount forward, at a given annual inflation rate.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"amount":{"type":"number","description":"Amount to adjust."},"inflationRatePct":{"type":"number","description":"Annual inflation rate in percent."},"years":{"type":"number","description":"Number of years."},"toNominal":{"type":"boolean","description":"false (default) deflates nominal to real; true inflates real to nominal."}},"required":["amount","inflationRatePct","years"],"additionalProperties":false}},{"name":"interest-only-payment","description":"Interest-only monthly payment on a balance.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"amount":{"type":"number","description":"Outstanding balance."},"ratePct":{"type":"number","description":"Annual rate in percent."}},"required":["amount","ratePct"],"additionalProperties":false}},{"name":"intrinsic-time-value","description":"Split an option premium into intrinsic value (in-the-money amount) and time value.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"spot":{"type":"number","description":"Underlying price."},"strike":{"type":"number","description":"Strike price."},"premium":{"type":"number","description":"Option premium."},"type":{"type":"string","enum":["call","put"],"description":"Option type (default call)."}},"required":["spot","strike","premium"],"additionalProperties":false}},{"name":"irr","description":"Internal rate of return: the per-period rate that zeroes the NPV of a cashflow series. Returns a percent, or null when the series never crosses zero.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"cashflows":{"type":"array","description":"Cashflows by period, starting at period 0. Outflows are negative.","items":{"type":"number"}}},"required":["cashflows"],"additionalProperties":false}},{"name":"loan-apr","description":"Effective APR including upfront fees: the note-rate payment priced against the net proceeds (amount - fees). Annual percent.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"amount":{"type":"number","description":"Loan amount."},"ratePct":{"type":"number","description":"Note (nominal) annual rate in percent."},"termMonths":{"type":"number","description":"Term in months."},"fees":{"type":"number","description":"Optional. Upfront fees / points in currency (default 0)."}},"required":["amount","ratePct","termMonths"],"additionalProperties":false}},{"name":"loan-payoff","description":"Time and interest saved by paying a fixed extra amount every month on a loan, versus the baseline schedule.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"amount":{"type":"number","description":"Loan principal."},"rate":{"type":"number","description":"Annual interest rate in percent (6 = 6%)."},"mode":{"type":"string","enum":["term","payment"],"description":"Fix the term (compute the payment) or fix the payment (compute the term)."},"termYears":{"type":"number","description":"Term in years, used when mode is 'term'."},"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)."},"fixedUntil":{"type":"string","description":"Optional. Rate is certain until this ISO date; beyond it the schedule is an estimate."},"extra":{"type":"array","description":"Optional dated extra principal payments.","items":{"type":"object","properties":{"date":{"type":"string","description":"ISO date."},"amount":{"type":"number","description":"Extra principal."}}}},"extraMonthly":{"type":"number","description":"Extra principal paid each month."}},"required":["amount","rate","mode","startDate","extraMonthly"],"additionalProperties":false}},{"name":"ltv","description":"Loan-to-value ratio, percent (loan / property value).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"loanAmount":{"type":"number","description":"Loan amount."},"propertyValue":{"type":"number","description":"Property value."}},"required":["loanAmount","propertyValue"],"additionalProperties":false}},{"name":"margin-markup","description":"Convert between margin and markup. Supply any one of cost/price plus one of marginPct/markupPct (or both cost and price); returns cost, price, profit, marginPct, and markupPct.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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."}},"required":[],"additionalProperties":false}},{"name":"max-drawdown","description":"Maximum drawdown of a value series: the largest peak-to-trough decline, as a positive percent.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"series":{"type":"array","description":"Sequence of values (e.g. portfolio levels).","items":{"type":"number"}}},"required":["series"],"additionalProperties":false}},{"name":"mirr","description":"Modified internal rate of return: negatives financed at financeRate, positives reinvested at reinvestRate. Percents in and out.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"cashflows":{"type":"array","description":"Cashflows by period (index 0 today; outflows negative).","items":{"type":"number"}},"financeRatePct":{"type":"number","description":"Finance rate in percent."},"reinvestRatePct":{"type":"number","description":"Reinvestment rate in percent."}},"required":["cashflows","financeRatePct","reinvestRatePct"],"additionalProperties":false}},{"name":"mortgage-affordability","description":"Maximum loan and home price the income supports: the DTI cap on gross monthly income (less existing debts) sets the payment, whose present value at the rate and term is the loan.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"annualIncome":{"type":"number","description":"Gross annual income."},"dtiPct":{"type":"number","description":"Max share of gross monthly income for the payment, in percent (e.g. 36)."},"rate":{"type":"number","description":"Annual interest rate in percent."},"termYears":{"type":"number","description":"Loan term in years."},"monthlyDebts":{"type":"number","description":"Optional. Existing monthly debt payments (default 0)."},"downPayment":{"type":"number","description":"Optional. Cash down payment, added to the loan for the home price (default 0)."}},"required":["annualIncome","dtiPct","rate","termYears"],"additionalProperties":false}},{"name":"net-worth","description":"Net worth: assets minus liabilities.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"assets":{"type":"number","description":"Total assets."},"liabilities":{"type":"number","description":"Total liabilities."}},"required":["assets","liabilities"],"additionalProperties":false}},{"name":"noi","description":"Net operating income: gross rental income less vacancy and operating expenses.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"grossRentalIncome":{"type":"number","description":"Gross annual rental income."},"vacancyPct":{"type":"number","description":"Vacancy rate in percent."},"operatingExpenses":{"type":"number","description":"Annual operating expenses."}},"required":["grossRentalIncome","vacancyPct","operatingExpenses"],"additionalProperties":false}},{"name":"npv","description":"Net present value of a cashflow series (index 0 is today; outflows negative) discounted at a per-period rate.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"cashflows":{"type":"array","description":"Cashflows by period, starting at period 0. Outflows are negative.","items":{"type":"number"}},"discountRatePct":{"type":"number","description":"Discount rate per period in percent."}},"required":["cashflows","discountRatePct"],"additionalProperties":false}},{"name":"option-breakeven","description":"Break-even underlying price at expiry: strike + premium for a call, strike - premium for a put.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"strike":{"type":"number","description":"Strike price."},"premium":{"type":"number","description":"Option premium paid."},"type":{"type":"string","enum":["call","put"],"description":"Option type (default call)."}},"required":["strike","premium"],"additionalProperties":false}},{"name":"option-greeks","description":"Black-Scholes greeks for a European option: delta, gamma, vega (per 1% vol), theta (per day), rho (per 1% rate).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"spot":{"type":"number","description":"Current underlying price."},"strike":{"type":"number","description":"Strike price."},"years":{"type":"number","description":"Time to expiry in years."},"volatilityPct":{"type":"number","description":"Annualized volatility in percent."},"riskFreePct":{"type":"number","description":"Risk-free rate in percent."},"dividendYieldPct":{"type":"number","description":"Continuous dividend yield in percent (default 0)."},"type":{"type":"string","enum":["call","put"],"description":"Option type (default call)."}},"required":["spot","strike","years","volatilityPct","riskFreePct"],"additionalProperties":false}},{"name":"payback-period","description":"Simple payback period: periods until cumulative cashflows recover the initial cost, interpolated within the crossing period. Null if never.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"initialCost":{"type":"number","description":"Upfront cost."},"cashflows":{"type":"array","description":"Inflow each period.","items":{"type":"number"}}},"required":["initialCost","cashflows"],"additionalProperties":false}},{"name":"percentage-change","description":"Percentage change from one value to another. Null when the starting value is zero.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"from":{"type":"number","description":"Starting value."},"to":{"type":"number","description":"Ending value."}},"required":["from","to"],"additionalProperties":false}},{"name":"perpetuity","description":"Present value of a level or growing perpetuity: payment / (rate - growth). Null when growth is not below the rate.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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)."}},"required":["payment","ratePct"],"additionalProperties":false}},{"name":"points-breakeven","description":"Mortgage points break-even: the upfront cost to buy down the rate, the monthly payment saving, and the whole months to recoup it.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"loanAmount":{"type":"number","description":"Loan amount."},"ratePct":{"type":"number","description":"Base annual rate in percent."},"termMonths":{"type":"number","description":"Term in months."},"pointsPct":{"type":"number","description":"Points paid, percent of the loan."},"reducedRatePct":{"type":"number","description":"Reduced annual rate after buying points."}},"required":["loanAmount","ratePct","termMonths","pointsPct","reducedRatePct"],"additionalProperties":false}},{"name":"portfolio-longevity","description":"How many years a balance lasts while withdrawing from it: the balance grows each year, then the withdrawal (optionally stepping up) is taken. Returns the depletion year, or sustainable=true when it outlasts 200 years.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"balance":{"type":"number","description":"Starting balance."},"annualWithdrawal":{"type":"number","description":"Amount withdrawn in the first year."},"annualRatePct":{"type":"number","description":"Annual portfolio growth in percent."},"withdrawalGrowthPct":{"type":"number","description":"Optional. Yearly step-up of the withdrawal in percent (default 0)."}},"required":["balance","annualWithdrawal","annualRatePct"],"additionalProperties":false}},{"name":"present-value","description":"Present value of a single future amount discounted annually. The inverse of future-value.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"futureAmount":{"type":"number","description":"Amount received in the future."},"annualRatePct":{"type":"number","description":"Annual discount rate in percent."},"years":{"type":"number","description":"Number of years until the amount is received."}},"required":["futureAmount","annualRatePct","years"],"additionalProperties":false}},{"name":"put-call-parity","description":"Put-call parity: given one option price, returns both. Provide call or put, plus spot, strike, years, and the rate.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"call":{"type":"number","description":"Call price (provide call or put)."},"put":{"type":"number","description":"Put price (provide call or put)."},"spot":{"type":"number","description":"Underlying price."},"strike":{"type":"number","description":"Strike price."},"years":{"type":"number","description":"Time to expiry in years."},"riskFreePct":{"type":"number","description":"Risk-free rate in percent."},"dividendYieldPct":{"type":"number","description":"Continuous dividend yield in percent (default 0)."}},"required":["spot","strike","years","riskFreePct"],"additionalProperties":false}},{"name":"quick-ratio","description":"Quick (acid-test) ratio: (current assets - inventory) over current liabilities.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"currentAssets":{"type":"number","description":"Current assets."},"inventory":{"type":"number","description":"Inventory."},"currentLiabilities":{"type":"number","description":"Current liabilities."}},"required":["currentAssets","inventory","currentLiabilities"],"additionalProperties":false}},{"name":"real-return","description":"Real (inflation-adjusted) return from a nominal rate via the Fisher relation: (1+nominal)/(1+inflation) - 1.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"nominalRatePct":{"type":"number","description":"Nominal annual rate in percent."},"inflationRatePct":{"type":"number","description":"Annual inflation in percent."}},"required":["nominalRatePct","inflationRatePct"],"additionalProperties":false}},{"name":"refi-breakeven","description":"Refinance break-even: monthly saving, whole months to recoup closing costs, and (if remainingMonths given) the net saving over the remaining term.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"closingCosts":{"type":"number","description":"Upfront cost to refinance."},"currentPayment":{"type":"number","description":"Current monthly payment."},"newPayment":{"type":"number","description":"New monthly payment after refinancing."},"remainingMonths":{"type":"number","description":"Optional. Months left on the loan, for the lifetime saving."}},"required":["closingCosts","currentPayment","newPayment"],"additionalProperties":false}},{"name":"required-contribution","description":"Inverse of contributions: the fixed monthly amount needed to reach a target future value over a number of months, given an optional starting balance.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"targetValue":{"type":"number","description":"Future value goal."},"annualRatePct":{"type":"number","description":"Annual growth rate in percent."},"months":{"type":"number","description":"Number of months."},"presentValue":{"type":"number","description":"Optional. Starting balance (default 0)."}},"required":["targetValue","annualRatePct","months"],"additionalProperties":false}},{"name":"required-return","description":"Annual return needed to grow a starting value to a target over a number of years, optionally with a fixed annual contribution. With no contribution this equals CAGR. Returns a percent, or null when unreachable.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"begin":{"type":"number","description":"Starting value."},"end":{"type":"number","description":"Target ending value."},"years":{"type":"number","description":"Number of years."},"annualContribution":{"type":"number","description":"Optional. Amount added each year (default 0)."}},"required":["begin","end","years"],"additionalProperties":false}},{"name":"return-stats","description":"Mean, sample variance, and sample standard deviation (n-1) of a series of returns. Pass percents to get a percent stdev (volatility).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"returns":{"type":"array","description":"The return series (e.g. yearly percents).","items":{"type":"number"}}},"required":["returns"],"additionalProperties":false}},{"name":"roa","description":"Return on assets, percent: net income over total assets.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"netIncome":{"type":"number","description":"Net income."},"totalAssets":{"type":"number","description":"Total assets."}},"required":["netIncome","totalAssets"],"additionalProperties":false}},{"name":"roe","description":"Return on equity, percent: net income over shareholders' equity.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"netIncome":{"type":"number","description":"Net income."},"equity":{"type":"number","description":"Shareholders' equity."}},"required":["netIncome","equity"],"additionalProperties":false}},{"name":"roi","description":"Return on investment: total percent gain, plus the annualized rate when a holding period in years is given.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"initial":{"type":"number","description":"Amount invested."},"finalValue":{"type":"number","description":"Ending value."},"years":{"type":"number","description":"Optional. Holding period in years, for the annualized rate."}},"required":["initial","finalValue"],"additionalProperties":false}},{"name":"rule-of-72","description":"Years to double: the rule-of-72 estimate (72/rate) and the exact figure (ln2 / ln(1+rate)).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ratePct":{"type":"number","description":"Growth rate in percent."}},"required":["ratePct"],"additionalProperties":false}},{"name":"salary-to-hourly","description":"Hourly rate implied by an annual salary.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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)."}},"required":["annualSalary"],"additionalProperties":false}},{"name":"savings-rate","description":"Fraction of income saved (savings divided by income). Returns a decimal.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"income":{"type":"number","description":"Income."},"savings":{"type":"number","description":"Amount saved."}},"required":["income","savings"],"additionalProperties":false}},{"name":"sharpe-ratio","description":"Sharpe ratio: excess mean return per unit of volatility, (mean - riskFree) / stdev. Null when volatility is undefined or zero.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"returns":{"type":"array","description":"The return series (percents).","items":{"type":"number"}},"riskFreePct":{"type":"number","description":"Risk-free rate in the same unit (default 0)."}},"required":["returns"],"additionalProperties":false}},{"name":"straight-line-depreciation","description":"Straight-line depreciation: value falling evenly to a salvage value over a useful life.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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."}},"required":["value","salvage","usefulYears","yearsElapsed"],"additionalProperties":false}},{"name":"successive-discounts","description":"Stacked discounts applied in order: the final price and the effective single discount rate.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"price":{"type":"number","description":"Original price."},"discountsPct":{"type":"array","description":"Discounts in percent, applied in order.","items":{"type":"number"}}},"required":["price","discountsPct"],"additionalProperties":false}},{"name":"sum-of-years-digits","description":"Sum-of-the-years'-digits depreciation: the depreciable base weighted toward the early years.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"value":{"type":"number","description":"Initial cost."},"salvage":{"type":"number","description":"Salvage value."},"usefulYears":{"type":"number","description":"Useful life in years."},"year":{"type":"number","description":"Year (1-based)."}},"required":["value","salvage","usefulYears","year"],"additionalProperties":false}},{"name":"tax-equivalent-yield","description":"Tax-equivalent yield: the taxable yield that matches a tax-free (e.g. muni) yield. Percents in and out.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"taxFreeYieldPct":{"type":"number","description":"Tax-free yield in percent."},"taxRatePct":{"type":"number","description":"Marginal tax rate in percent."}},"required":["taxFreeYieldPct","taxRatePct"],"additionalProperties":false}},{"name":"tax-from-brackets","description":"Progressive tax from caller-supplied brackets. No jurisdiction, year, or rates are baked in: pass the brackets yourself. Returns total tax, effective rate, and marginal rate.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"income":{"type":"number","description":"Taxable income."},"brackets":{"type":"array","description":"Ordered tax bands. The final band may omit upTo to run to infinity.","items":{"type":"object","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."}},"required":["ratePct"]}}},"required":["income","brackets"],"additionalProperties":false}},{"name":"tip-split","description":"Tip and split: the tip amount, the total, and the per-person share.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"billAmount":{"type":"number","description":"Bill amount."},"tipPct":{"type":"number","description":"Tip in percent."},"people":{"type":"number","description":"Number of people (default 1)."}},"required":["billAmount","tipPct"],"additionalProperties":false}},{"name":"unit-price","description":"Unit price: price divided by quantity (for comparing pack sizes). Null when quantity is zero.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"price":{"type":"number","description":"Price."},"quantity":{"type":"number","description":"Quantity / size."}},"required":["price","quantity"],"additionalProperties":false}},{"name":"units-of-production-depreciation","description":"Units-of-production depreciation: the depreciable base spread over total expected units, charged by the units used this period.","write_action":false,"price_micros":0,"input_schema":{"type":"object","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."}},"required":["value","salvage","totalUnits","unitsThisPeriod"],"additionalProperties":false}},{"name":"vat","description":"Value-added tax (MwSt/USt, sales tax) on a price. By default adds the tax to a net price; with inclusive=true treats the amount as gross and extracts the tax. The rate is always an input (19 or 7 for Germany, etc.).","write_action":false,"price_micros":0,"input_schema":{"type":"object","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."}},"required":["amount","ratePct"],"additionalProperties":false}},{"name":"wacc","description":"Weighted average cost of capital: equity and after-tax debt weighted by the capital structure. Percents in and out.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"equity":{"type":"number","description":"Market value of equity."},"debt":{"type":"number","description":"Market value of debt."},"costEquityPct":{"type":"number","description":"Cost of equity in percent."},"costDebtPct":{"type":"number","description":"Cost of debt in percent."},"taxRatePct":{"type":"number","description":"Tax rate in percent."}},"required":["equity","debt","costEquityPct","costDebtPct","taxRatePct"],"additionalProperties":false}},{"name":"xirr","description":"Date-aware internal rate of return: the annual rate that zeroes the XNPV of irregular dated cashflows. Null if no rate fits.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"cashflows":{"type":"array","description":"Dated cashflows; the first date is the valuation date.","items":{"type":"object","properties":{"date":{"type":"string","description":"ISO date."},"amount":{"type":"number","description":"Cashflow amount (outflows negative)."}},"required":["date","amount"]}}},"required":["cashflows"],"additionalProperties":false}},{"name":"xnpv","description":"Date-aware net present value: each amount discounted by its fractional years (act/365) from the first cashflow's date. Annual rate in percent.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"cashflows":{"type":"array","description":"Dated cashflows; the first date is the valuation date.","items":{"type":"object","properties":{"date":{"type":"string","description":"ISO date."},"amount":{"type":"number","description":"Cashflow amount (outflows negative)."}},"required":["date","amount"]}},"annualRatePct":{"type":"number","description":"Annual discount rate in percent."}},"required":["cashflows","annualRatePct"],"additionalProperties":false}},{"name":"yield-to-maturity","description":"Bond yield to maturity: the nominal annual yield that prices a bond at the given price, with periodic coupons and face returned at maturity. Solved numerically. Returns a percent, or null.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"price":{"type":"number","description":"Current bond price."},"faceValue":{"type":"number","description":"Face (par) value repaid at maturity."},"couponRatePct":{"type":"number","description":"Annual coupon rate in percent of face."},"years":{"type":"number","description":"Years to maturity."},"periodsPerYear":{"type":"number","description":"Coupon periods per year (default 2 = semiannual)."}},"required":["price","faceValue","couponRatePct","years"],"additionalProperties":false}},{"name":"zero-coupon-price","description":"Price of a zero-coupon bond: face value discounted to today at the yield.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"faceValue":{"type":"number","description":"Face value."},"years":{"type":"number","description":"Years to maturity."},"yieldPct":{"type":"number","description":"Annual yield in percent."},"compoundingPerYear":{"type":"number","description":"Compounding periods per year (default 1)."}},"required":["faceValue","years","yieldPct"],"additionalProperties":false}}],"scan":{"score":77,"grade":"B","scanned_at":"2026-09-26T11:37:53.303Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-26T11:37:53.342Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 284ms"]},"poisoning":{"score":15,"max":15,"notes":["99 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 1 write-action tools with no auth"]},"maintenance":{"score":12,"max":15,"notes":["last push 42 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://nestegg.money/mcp","reachable":true,"authRequired":false,"latencyMs":284,"serverInfo":{"name":"nestegg-calculators","version":"1.0.0"}}],"packages":[],"repo":{"found":true,"owner":"VladimirWrites","repo":"nestegg.money","archived":false,"pushedAt":"2026-08-15T04:53:50Z","stars":4,"forks":2,"openIssues":1,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/5979600?v=4","ownerCreatedAt":"2013-11-19T11:57:38Z","license":"Apache-2.0"},"icon":{"url":"https://nestegg.money/assets/favicon.svg","source":"site"},"presence":{"stars":4,"forks":2,"downloadsWeek":null,"license":"Apache-2.0","lastPushAt":"2026-08-15T04:53:50.000Z","score":22}}}},"grade_history":[],"reviews":[]}