MCP 서버

calculators

com.retirecrunch/calculators
데이터 및 분석 금융 및 투자 공개 · 연결 가능 MCP 2025-11-25

이 MCP로 할 수 있는 일

Calculates FIRE targets, wealth projections, portfolio rebalancing trades, historical return assumptions, and Swiss property tax estimates.

calculate_coast_fire
Compute the Coast FIRE milestone — the capital required today such that, with no further contributions, a portfolio compounds to the user's retirement target by their target age.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['current_age', 'target_retirement_age', 'current_savings', 'annual_expenses_in_retirement'], 'properties': {'currency': {'enum': ['USD', 'EUR', 'GBP', 'CHF', 'JPY', 'CAD', 'AUD', 'DKK'], 'type': 'string', 'default': 'USD'}, 'current_age': {'type': 'integer', 'maximum': 80, 'minimum': 18}, 'inflation_rate': {'type': 'number', 'default': 3, 'maximum': 30, 'minimum': 0}, 'current_savings': {'type': 'number', 'minimum': 0}, 'monthly_savings': {'type': 'number', 'default': 0, 'minimum': 0}, 'expected_return_rate': {'type': 'number', 'default': 7, 'maximum': 30, 'minimum': 0}, 'portfolio_volatility': {'type': 'number', 'default': 0, 'maximum': 50, 'minimum': 0}, 'safe_withdrawal_rate': {'type': 'number', 'default': 4, 'maximum': 10, 'minimum': 1}, 'target_retirement_age': {'type': 'integer', 'maximum': 100, 'minimum': 30}, 'annual_expenses_in_retirement': {'type': 'number', 'minimum': 1}}, 'additionalProperties': False}
calculate_fire_target
Estimate the savings target needed for Financial Independence / Early Retirement. Runs Monte Carlo simulation and returns the probability the portfolio survives the planning horizon.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['annual_expense', 'years'], 'properties': {'years': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Planning horizon in years.'}, 'currency': {'enum': ['USD', 'EUR', 'GBP', 'CHF', 'JPY', 'CAD', 'AUD', 'DKK'], 'type': 'string', 'default': 'USD'}, 'annual_expense': {'type': 'number', 'maximum': 100000000, 'minimum': 0, 'description': 'Projected annual spending in retirement (in selected currency).'}, 'inflation_rate': {'type': 'number', 'default': 3, 'maximum': 30, 'minimum': 0}, 'apply_inflation': {'type': 'boolean', 'default': True}, 'current_savings': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Current liquid + invested assets.'}, 'portfolio_volatility': {'type': 'number', 'default': 12, 'maximum': 50, 'minimum': 0, 'description': 'Annual return standard deviation %.'}, 'portfolio_return_rate': {'type': 'number', 'default': 5, 'maximum': 30, 'minimum': 0, 'description': 'Expected real annual return %.'}}, 'additionalProperties': False}
compute_swiss_property_tax
Estimate the Swiss cantonal real-estate capital gains tax (Grundstückgewinnsteuer) for a property sale. Covers all 26 cantons with holding-period adjustments and Ersatzbeschaffung (replacement-residence) deferral. Educational estimate; commune surcharges and value-enhancing-improvement deductions are not modeled.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['canton', 'sale_price', 'purchase_price', 'years_held'], 'properties': {'canton': {'enum': ['ZH', 'BE', 'LU', 'UR', 'SZ', 'OW', 'NW', 'GL', 'ZG', 'FR', 'SO', 'BS', 'BL', 'SH', 'AR', 'AI', 'SG', 'GR', 'AG', 'TG', 'TI', 'VD', 'VS', 'NE', 'GE', 'JU'], 'type': 'string', 'description': 'Canton code (ZH, BE, ..., JU).'}, 'sale_price': {'type': 'number', 'minimum': 0}, 'years_held': {'type': 'number', 'minimum': 0}, 'purchase_price': {'type': 'number', 'minimum': 0}, 'ersatzbeschaffung': {'type': 'boolean', 'default': False, 'description': 'Reinvest proceeds into a replacement primary residence.'}, 'ersatzbeschaffung_amount': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Amount reinvested (caps the tax deferral).'}}, 'additionalProperties': False}
get_portfolio_returns
Return RetireCrunch's historical portfolio return profiles for a currency. Each profile is a (return %, volatility %) pair derived from real index data — useful for grounding the assumptions in calculate_fire_target / project_wealth_plan in something defensible rather than guessing.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['currency'], 'properties': {'currency': {'enum': ['USD', 'EUR', 'GBP', 'CHF', 'JPY', 'CAD', 'AUD', 'DKK'], 'type': 'string', 'description': 'Currency code; the historical return profiles are denominated in this currency.'}}, 'additionalProperties': False}
project_wealth_plan
Run RetireCrunch's full year-by-year Wealth Plan projection for a household. Models earned income, pensions, expenses, portfolio growth, optional growth→income phase switch, mortgage amortization, optional property sale, and region-aware tax (US uses 2026 federal+state brackets; other regions use a flat rate). Returns a compact summary with 5-year milestones by default, or the full annual array when yearly_detail=true.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['start_year', 'retirement_year'], 'properties': {'region': {'enum': ['US', 'CH', 'GB', 'EU', 'JP', 'GENERIC'], 'type': 'string', 'default': 'GENERIC', 'description': 'Country regime â\x80\x94 drives tax model (US uses bracket-based federal/state; others a flat rate).'}, 'currency': {'enum': ['USD', 'EUR', 'GBP', 'CHF', 'JPY', 'CAD', 'AUD', 'DKK'], 'type': 'string', 'default': 'USD'}, 'start_year': {'type': 'integer', 'maximum': 2200, 'minimum': 1900, 'description': 'First year of the projection (typically the current year).'}, 'yearly_detail': {'type': 'boolean', 'default': False, 'description': 'When true, include the full year-by-year array in the response. When false (default), return a compact summary plus 5-year milestones.'}, 'household_type': {'enum': ['single', 'couple'], 'type': 'string', 'default': 'single'}, 'inflation_rate': {'type': 'number', 'default': 2, 'maximum': 20, 'minimum': 0, 'description': 'Annual inflation %.'}, 'retirement_year': {'type': 'integer', 'maximum': 2200, 'minimum': 1900, 'description': 'Year retirement begins.'}, 'current_mortgage': {'type': 'number', 'default': 0, 'minimum': 0}, 'current_property': {'type': 'number', 'default': 0, 'minimum': 0}, 'current_liquidity': {'type': 'number', 'default': 0, 'minimum': 0}, 'income_yield_rate': {'type': 'number', 'default': 3.5, 'maximum': 20, 'minimum': 0, 'description': 'Annual yield % during the income phase.'}, 'estimated_tax_rate': {'type': 'number', 'default': 20, 'maximum': 60, 'minimum': 0, 'description': 'Pre-retirement effective tax rate (%).'}, 'plan_horizon_years': {'type': 'integer', 'default': 50, 'maximum': 80, 'minimum': 1, 'description': 'Total years to project from start_year.'}, 'property_sale_year': {'type': 'integer', 'maximum': 2200, 'minimum': 1900}, 'current_living_costs': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Annual general living expenses today.'}, 'portfolio_volatility': {'type': 'number', 'default': 0, 'maximum': 50, 'minimum': 0, 'description': 'Return std dev %; 0 = deterministic.'}, 'current_earned_income': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Annual gross earned income today.'}, 'portfolio_return_rate': {'type': 'number', 'default': 5, 'maximum': 30, 'minimum': 0, 'description': 'Annual real portfolio return %.'}, 'portfolio_switch_year': {'type': 'integer', 'maximum': 2200, 'minimum': 1900, 'description': 'Year to switch from growth to income phase. Defaults to retirement_year if omitted.'}, 'property_sale_enabled': {'type': 'boolean', 'default': False}, 'current_other_expenses': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Annual other expenses today.'}, 'current_housing_expenses': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Annual housing expenses today.'}, 'portfolio_switch_enabled': {'type': 'boolean', 'default': True}, 'post_retirement_tax_rate': {'type': 'number', 'default': 10, 'maximum': 60, 'minimum': 0, 'description': 'Post-retirement effective tax rate (%).'}, 'property_sale_destination': {'enum': ['liquidity', 'investmentPortfolio'], 'type': 'string', 'default': 'liquidity'}, 'current_investment_portfolio': {'type': 'number', 'default': 0, 'minimum': 0}, 'partner_survivor_expense_factor': {'type': 'number', 'default': 0.7, 'maximum': 1, 'minimum': 0.3}, 'partner_early_death_years_before_end': {'type': 'integer', 'default': 5, 'maximum': 10, 'minimum': 0}}, 'additionalProperties': False}
rebalance_portfolio
Rebalance a multi-currency portfolio: given holdings, per-holding (or per-asset-class) target weights, cash and FX rates, return the exact BUY/SELL trades to reach the targets, the per-currency cash movements (flagging foreign-cash overdrafts), and a summary. Planning math only — no transaction costs or taxes.
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['holdings'], 'properties': {'fx_rates': {'type': 'object', 'default': {}, 'description': 'Value of 1 unit of each currency in the base currency (base currency itself is 1).', 'additionalProperties': {'type': 'number', 'exclusiveMinimum': 0}}, 'holdings': {'type': 'array', 'items': {'type': 'object', 'required': ['symbol', 'quantity', 'price', 'currency', 'target_pct'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable instrument name.'}, 'price': {'type': 'number', 'minimum': 0, 'description': 'Current price per unit, in the holding currency.'}, 'locked': {'type': 'boolean', 'default': False, 'description': 'Pin to current weight â\x80\x94 never traded.'}, 'symbol': {'type': 'string', 'description': 'Ticker symbol.'}, 'currency': {'type': 'string', 'description': 'ISO currency code the instrument trades in (e.g. "USD").'}, 'quantity': {'type': 'number', 'description': 'Units/shares held.'}, 'cost_basis': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Average acquisition price per unit (for P/L only).'}, 'risk_level': {'type': 'string', 'default': 'Medium', 'description': 'Low, Medium or High.'}, 'target_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Target weight as % of the whole portfolio (incl. cash).'}, 'asset_class': {'type': 'string', 'default': 'Equity', 'description': 'Equity, Bond, Cash, Real estate, Commodity, Alternative, Crypto or Other.'}}, 'additionalProperties': False}, 'minItems': 1, 'description': 'The portfolio holdings to rebalance.'}, 'base_currency': {'type': 'string', 'default': 'USD', 'description': 'Base currency the portfolio is valued in.'}, 'class_targets': {'type': 'object', 'description': 'Optional per-asset-class goal % (incl. "Cash"). When given, unlocked holdings are retargeted to hit each class goal before computing trades.', 'additionalProperties': {'type': 'number', 'maximum': 100, 'minimum': 0}}, 'available_cash': {'type': 'object', 'default': {}, 'description': 'Cash held per currency, keyed by ISO code.', 'additionalProperties': {'type': 'number'}}}, 'additionalProperties': False}
추가됨
rebalance_portfolio
2026년 9월 17일 12:37 PM
추가됨
get_portfolio_returns
2026년 9월 17일 12:37 PM
추가됨
project_wealth_plan
2026년 9월 17일 12:37 PM
추가됨
compute_swiss_property_tax
2026년 9월 17일 12:37 PM
추가됨
calculate_coast_fire
2026년 9월 17일 12:37 PM
추가됨
calculate_fire_target
2026년 9월 17일 12:37 PM