MCP Server

SmartFin

fyi.smartfin/smartfin
Finance & Investing Public & reachable MCP 2025-11-25

What this MCP does

Provides investment backtests and comparisons along with loan, savings, inflation, FIRE, retirement, and withdrawal calculations.

smartfin_calculate_fire_number
FIRE number and years to reach it
Works the way SmartFin's FIRE calculator does. The FIRE number today is yearly expenses divided by a safe withdrawal rate. Each year savings grow at an assumed return with the yearly savings added, while expenses (and so the FIRE number) rise with inflation; FIRE is the first year savings reach that year's FIRE number, searched up to 60 years. Also gives the savings rate and, with a traditional retirement age, the Coast FIRE number. Use for early retirement / FIRE questions: "how much do I need to retire", "when can I retire", "what's my coast FIRE number". Do not use to test how long an existing balance lasts (use smartfin_calculate_retirement_withdrawal). Returns and inflation are assumptions; excludes taxes.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['annual_expenses'], 'properties': {'current_age': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'For the age at FIRE and Coast FIRE. Default 30'}, 'inflation_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Yearly inflation in %, applied to expenses. Default 3'}, 'annual_savings': {'type': 'number', 'maximum': 100000000, 'minimum': 0, 'description': 'Added each year, in dollars (12 x a monthly amount). Default 0'}, 'retirement_age': {'type': 'number', 'maximum': 120, 'minimum': 0, 'description': 'Optional: a traditional retirement age, for the Coast FIRE number'}, 'annual_expenses': {'type': 'number', 'maximum': 100000000, 'minimum': 0, 'description': 'Yearly spending today, in dollars'}, 'current_savings': {'type': 'number', 'maximum': 10000000000, 'minimum': 0, 'description': 'Invested today, in dollars. Default 0'}, 'expected_return_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Assumed yearly return in %. Default 7'}, 'withdrawal_rate_pct': {'enum': [3, 4, 5], 'type': 'number', 'description': 'Safe withdrawal rate in %. Default 4'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['data', 'summary', 'next', 'links', 'cite', 'how_to', 'source'], 'properties': {'cite': {'type': 'object', 'required': ['text', 'url'], 'properties': {'url': {'type': 'string'}, 'text': {'type': 'string'}}, 'description': 'How to credit this result'}, 'data': {'type': 'object', 'required': ['fire_number_today', 'years_to_fire', 'reached_within_60_years', 'savings_rate_pct'], 'properties': {'fire_age': {'type': ['number', 'null']}, 'still_needed': {'type': 'number'}, 'years_to_fire': {'type': ['number', 'null']}, 'expenses_at_fire': {'type': ['number', 'null']}, 'savings_rate_pct': {'type': 'number'}, 'coast_fire_number': {'type': ['number', 'null']}, 'fire_number_today': {'type': 'number'}, 'fire_number_at_fire': {'type': ['number', 'null']}, 'reached_within_60_years': {'type': 'boolean'}}}, 'next': {'type': 'array', 'items': {'type': 'object', 'required': ['tool', 'arguments', 'why'], 'properties': {'why': {'type': 'string'}, 'tool': {'type': 'string'}, 'arguments': {'type': 'object'}}}, 'description': 'Suggested follow-up calls'}, 'links': {'type': 'object', 'required': ['smartfin'], 'properties': {'page': {'type': 'string', 'description': "SmartFin's page for this stock, when it has one"}, 'embed': {'type': 'string', 'description': 'Free embed code for this calculator, for a site the user runs'}, 'smartfin': {'type': 'string', 'description': 'Open and adjust this result on smartfin.fyi'}}}, 'how_to': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Steps for the user to see or redo this on smartfin.fyi'}, 'source': {'type': 'string'}, 'summary': {'type': 'string', 'description': 'Plain-language result the assistant can quote'}}}
smartfin_calculate_inflation_impact
Inflation impact over time
What an amount will be worth in today's money after years of inflation at a fixed yearly rate, and what something costing that amount today will cost then. Use for questions about buying power or future prices at an assumed inflation rate. Do not use for historical CPI lookups: this uses one fixed rate, not official index data.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['amount', 'annual_inflation_pct', 'years'], 'properties': {'years': {'type': 'number', 'maximum': 200, 'minimum': 1, 'description': 'Number of years'}, 'amount': {'type': 'number', 'maximum': 1000000000000, 'minimum': 0, 'description': 'Amount in dollars'}, 'annual_inflation_pct': {'type': 'number', 'maximum': 1000, 'minimum': -99, 'description': 'Yearly inflation rate in %, e.g. 3'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['data', 'summary', 'next', 'links', 'cite', 'how_to', 'source'], 'properties': {'cite': {'type': 'object', 'required': ['text', 'url'], 'properties': {'url': {'type': 'string'}, 'text': {'type': 'string'}}, 'description': 'How to credit this result'}, 'data': {'type': 'object', 'required': ['todays_money', 'buying_power_lost', 'future_cost'], 'properties': {'future_cost': {'type': 'number'}, 'todays_money': {'type': 'number'}, 'buying_power_lost': {'type': 'number'}}}, 'next': {'type': 'array', 'items': {'type': 'object', 'required': ['tool', 'arguments', 'why'], 'properties': {'why': {'type': 'string'}, 'tool': {'type': 'string'}, 'arguments': {'type': 'object'}}}, 'description': 'Suggested follow-up calls'}, 'links': {'type': 'object', 'required': ['smartfin'], 'properties': {'page': {'type': 'string', 'description': "SmartFin's page for this stock, when it has one"}, 'embed': {'type': 'string', 'description': 'Free embed code for this calculator, for a site the user runs'}, 'smartfin': {'type': 'string', 'description': 'Open and adjust this result on smartfin.fyi'}}}, 'how_to': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Steps for the user to see or redo this on smartfin.fyi'}, 'source': {'type': 'string'}, 'summary': {'type': 'string', 'description': 'Plain-language result the assistant can quote'}}}
smartfin_calculate_investment_return
Return of one investment strategy
What an amount invested in a US stock or index ETF became over a past period under one strategy: lump_sum (all on the first trading day), monthly (spread on the trading day nearest the 1st of each month) or buy_the_dip (bought after falls of a set % from the latest high), on real daily closing prices (adjusted for splits and reinvested dividends). Returns final value, total and yearly return, worst fall and Sharpe ratio. Use when the user asks about one specific approach, e.g. "what would $5,000 in Microsoft since 2015 be worth" (lump_sum) or "if I'd put money into SPY every month since 2010" (monthly). Do not use to compare strategies (use smartfin_compare_investment_strategies) or for future projections (use smartfin_project_savings_growth). Limits: US-listed S&P 500 companies and major index ETFs only, US dollars, month-level periods.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['ticker', 'strategy', 'amount', 'start_month'], 'properties': {'amount': {'type': 'number', 'maximum': 1000000000, 'minimum': 1, 'description': 'Total dollars invested over the period'}, 'ticker': {'type': 'string', 'pattern': '^[A-Za-z][A-Za-z.\\-]{0,9}$', 'description': 'Stock or ETF symbol, not a company name: AAPL not Apple. Covers 508 symbols: the S&P 500 companies plus the index ETFs SPY, VOO, IVV, QQQ, DIA, IWM, VTI.'}, 'strategy': {'enum': ['lump_sum', 'monthly', 'buy_the_dip'], 'type': 'string', 'description': 'Which way of investing'}, 'end_month': {'type': 'string', 'pattern': '^[0-9]{4}-(0[1-9]|1[0-2])$', 'description': 'Last month to include, YYYY-MM. Omit for the latest available month'}, 'start_month': {'type': 'string', 'pattern': '^[0-9]{4}-(0[1-9]|1[0-2])$', 'description': 'First month, YYYY-MM'}, 'dip_threshold_pct': {'enum': [5, 10, 15, 20], 'type': 'number', 'description': 'For buy_the_dip: trigger fall in %. Default 10'}, 'dip_percent_per_buy': {'enum': [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70], 'type': 'number', 'description': 'For buy_the_dip: % of the amount per buy. Default 10'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['data', 'summary', 'next', 'links', 'cite', 'how_to', 'source'], 'properties': {'cite': {'type': 'object', 'required': ['text', 'url'], 'properties': {'url': {'type': 'string'}, 'text': {'type': 'string'}}, 'description': 'How to credit this result'}, 'data': {'type': 'object', 'required': ['ticker', 'company', 'strategy', 'amount', 'start_date', 'as_of_date', 'result'], 'properties': {'amount': {'type': 'number'}, 'result': {'type': 'object', 'properties': {'error': {'type': 'string'}, 'invested': {'type': ['number', 'null']}, 'final_value': {'type': ['number', 'null']}, 'sharpe_ratio': {'type': ['number', 'null']}, 'max_drawdown_pct': {'type': ['number', 'null']}, 'total_return_pct': {'type': ['number', 'null']}, 'annual_return_pct': {'type': ['number', 'null']}, 'annual_return_measure': {'type': 'string'}}}, 'ticker': {'type': 'string'}, 'company': {'type': 'string'}, 'strategy': {'type': 'string'}, 'as_of_date': {'type': 'string'}, 'start_date': {'type': 'string'}}}, 'next': {'type': 'array', 'items': {'type': 'object', 'required': ['tool', 'arguments', 'why'], 'properties': {'why': {'type': 'string'}, 'tool': {'type': 'string'}, 'arguments': {'type': 'object'}}}, 'description': 'Suggested follow-up calls'}, 'links': {'type': 'object', 'required': ['smartfin'], 'properties': {'page': {'type': 'string', 'description': "SmartFin's page for this stock, when it has one"}, 'embed': {'type': 'string', 'description': 'Free embed code for this calculator, for a site the user runs'}, 'smartfin': {'type': 'string', 'description': 'Open and adjust this result on smartfin.fyi'}}}, 'how_to': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Steps for the user to see or redo this on smartfin.fyi'}, 'source': {'type': 'string'}, 'summary': {'type': 'string', 'description': 'Plain-language result the assistant can quote'}}}
smartfin_calculate_loan_payment
Loan payment and total interest
Monthly payment, total interest and total paid for a fixed-rate loan with monthly payments: mortgage, car, student or personal loan. Give either loan_amount, or home_price with down_payment_pct for a mortgage. Use when the user asks what a loan costs per month or in total, or how the rate or term changes the cost. Do not use for variable-rate loans, interest-only loans, or credit cards. Excludes taxes, insurance and fees.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['annual_rate_pct', 'term_years'], 'properties': {'loan_type': {'enum': ['mortgage', 'car', 'student', 'personal'], 'type': 'string', 'description': 'Type of loan; chooses the SmartFin calculator link. Default mortgage'}, 'home_price': {'type': 'number', 'maximum': 100000000, 'minimum': 0, 'description': 'Mortgage only: home price, in dollars, with down_payment_pct'}, 'term_years': {'type': 'number', 'maximum': 50, 'minimum': 1, 'description': 'Loan term in years, e.g. 30 for a mortgage, 5 for a car loan'}, 'loan_amount': {'type': 'number', 'maximum': 100000000, 'minimum': 0, 'description': 'Amount borrowed, in dollars. Give this or home_price'}, 'annual_rate_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Annual interest rate in %, e.g. 6.5'}, 'down_payment_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Mortgage only: down payment as % of home_price. Default 20'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['data', 'summary', 'next', 'links', 'cite', 'how_to', 'source'], 'properties': {'cite': {'type': 'object', 'required': ['text', 'url'], 'properties': {'url': {'type': 'string'}, 'text': {'type': 'string'}}, 'description': 'How to credit this result'}, 'data': {'type': 'object', 'required': ['loan_amount', 'monthly_payment', 'total_interest', 'total_paid'], 'properties': {'term_years': {'type': 'number'}, 'total_paid': {'type': 'number'}, 'loan_amount': {'type': 'number'}, 'total_interest': {'type': 'number'}, 'annual_rate_pct': {'type': 'number'}, 'monthly_payment': {'type': 'number'}}}, 'next': {'type': 'array', 'items': {'type': 'object', 'required': ['tool', 'arguments', 'why'], 'properties': {'why': {'type': 'string'}, 'tool': {'type': 'string'}, 'arguments': {'type': 'object'}}}, 'description': 'Suggested follow-up calls'}, 'links': {'type': 'object', 'required': ['smartfin'], 'properties': {'page': {'type': 'string', 'description': "SmartFin's page for this stock, when it has one"}, 'embed': {'type': 'string', 'description': 'Free embed code for this calculator, for a site the user runs'}, 'smartfin': {'type': 'string', 'description': 'Open and adjust this result on smartfin.fyi'}}}, 'how_to': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Steps for the user to see or redo this on smartfin.fyi'}, 'source': {'type': 'string'}, 'summary': {'type': 'string', 'description': 'Plain-language result the assistant can quote'}}}
smartfin_calculate_retirement_withdrawal
Retirement withdrawals: how long or how much
Works the way SmartFin's withdrawal calculator does, with withdrawals monthly, quarterly or annually and the balance earning a yearly return between them. how_long: how many years a balance lasts at a set withdrawal, optionally rising each year with inflation. how_much: the withdrawal that lasts a given number of years, or that never touches the principal (lasts_forever). Use for "how long will my savings last" or "how much can I withdraw". Do not use to find a savings target (use smartfin_calculate_fire_number). Returns are an assumption; excludes taxes and fees.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['question', 'balance', 'expected_return_pct'], 'properties': {'years': {'type': 'number', 'maximum': 50, 'minimum': 1, 'description': 'For how_much: how many years the money should last'}, 'balance': {'type': 'number', 'maximum': 10000000000, 'minimum': 0, 'description': 'Starting balance, in dollars'}, 'question': {'enum': ['how_long', 'how_much'], 'type': 'string', 'description': 'how_long needs withdrawal_amount; how_much needs years or lasts_forever'}, 'frequency': {'enum': ['monthly', 'quarterly', 'annually'], 'type': 'string', 'description': 'How often money is withdrawn. Default monthly'}, 'inflation_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'For how_long, optional: the withdrawal rises by this % each year'}, 'lasts_forever': {'type': 'boolean', 'description': 'For how_much: the withdrawal that never touches the principal'}, 'withdrawal_amount': {'type': 'number', 'maximum': 1000000000, 'minimum': 0, 'description': 'For how_long: each withdrawal, in dollars, at the chosen frequency'}, 'expected_return_pct': {'type': 'number', 'maximum': 100, 'minimum': -99, 'description': 'Assumed yearly return in %'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['data', 'summary', 'next', 'links', 'cite', 'how_to', 'source'], 'properties': {'cite': {'type': 'object', 'required': ['text', 'url'], 'properties': {'url': {'type': 'string'}, 'text': {'type': 'string'}}, 'description': 'How to credit this result'}, 'data': {'type': 'object', 'required': ['question', 'frequency'], 'properties': {'question': {'type': 'string'}, 'frequency': {'type': 'string'}, 'years_lasts': {'type': ['number', 'null']}, 'total_withdrawn': {'type': ['number', 'null']}, 'extra_from_growth': {'type': ['number', 'null']}, 'lasts_indefinitely': {'type': 'boolean'}, 'withdrawal_per_year': {'type': 'number'}, 'withdrawal_per_period': {'type': 'number'}}}, 'next': {'type': 'array', 'items': {'type': 'object', 'required': ['tool', 'arguments', 'why'], 'properties': {'why': {'type': 'string'}, 'tool': {'type': 'string'}, 'arguments': {'type': 'object'}}}, 'description': 'Suggested follow-up calls'}, 'links': {'type': 'object', 'required': ['smartfin'], 'properties': {'page': {'type': 'string', 'description': "SmartFin's page for this stock, when it has one"}, 'embed': {'type': 'string', 'description': 'Free embed code for this calculator, for a site the user runs'}, 'smartfin': {'type': 'string', 'description': 'Open and adjust this result on smartfin.fyi'}}}, 'how_to': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Steps for the user to see or redo this on smartfin.fyi'}, 'source': {'type': 'string'}, 'summary': {'type': 'string', 'description': 'Plain-language result the assistant can quote'}}}
smartfin_compare_investment_strategies
Compare lump sum, monthly and buy-the-dip
Runs one amount through three ways of buying the same US stock or index ETF over a chosen period, on real daily closing prices (adjusted for splits and reinvested dividends): all at once on the first trading day (lump sum), spread evenly on the trading day nearest the 1st of each month, or bought after the price falls a set % from its latest high. Returns each strategy's final value, total and yearly return, worst fall and Sharpe ratio. Use when the user asks which way of investing would have done better for a specific stock or index over a past period, or what an amount would be worth under each approach. Do not use for one strategy only (use smartfin_calculate_investment_return), for several reference periods at once (use smartfin_compare_time_periods), or for future projections. Limits: US-listed S&P 500 companies and major index ETFs only, prices in US dollars, month-level start and end; results depend on the period and are not a prediction.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['ticker', 'amount', 'start_month'], 'properties': {'amount': {'type': 'number', 'maximum': 1000000000, 'minimum': 1, 'description': 'Total dollars to invest across the whole period'}, 'ticker': {'type': 'string', 'pattern': '^[A-Za-z][A-Za-z.\\-]{0,9}$', 'description': 'Stock or ETF symbol, not a company name: AAPL not Apple. Covers 508 symbols: the S&P 500 companies plus the index ETFs SPY, VOO, IVV, QQQ, DIA, IWM, VTI.'}, 'end_month': {'type': 'string', 'pattern': '^[0-9]{4}-(0[1-9]|1[0-2])$', 'description': 'Last month to include, YYYY-MM. Omit for the latest available month'}, 'start_month': {'type': 'string', 'pattern': '^[0-9]{4}-(0[1-9]|1[0-2])$', 'description': 'First month, YYYY-MM, e.g. 2016-01'}, 'response_format': {'enum': ['concise', 'detailed'], 'type': 'string', 'description': 'detailed adds worst fall and Sharpe ratio to the summary. Default concise'}, 'dip_threshold_pct': {'enum': [5, 10, 15, 20], 'type': 'number', 'description': 'Buy-the-dip trigger: a fall of this % from the latest high. Default 10'}, 'dip_percent_per_buy': {'enum': [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70], 'type': 'number', 'description': 'Share of the amount spent on each dip, in %. Default 10'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['data', 'summary', 'next', 'links', 'cite', 'how_to', 'source'], 'properties': {'cite': {'type': 'object', 'required': ['text', 'url'], 'properties': {'url': {'type': 'string'}, 'text': {'type': 'string'}}, 'description': 'How to credit this result'}, 'data': {'type': 'object', 'required': ['ticker', 'company', 'amount', 'start_date', 'as_of_date', 'lump_sum', 'monthly_investing', 'buy_the_dip'], 'properties': {'amount': {'type': 'number'}, 'ticker': {'type': 'string'}, 'company': {'type': 'string'}, 'lump_sum': {'type': 'object', 'properties': {'error': {'type': 'string'}, 'invested': {'type': ['number', 'null']}, 'final_value': {'type': ['number', 'null']}, 'sharpe_ratio': {'type': ['number', 'null']}, 'max_drawdown_pct': {'type': ['number', 'null']}, 'total_return_pct': {'type': ['number', 'null']}, 'annual_return_pct': {'type': ['number', 'null']}, 'annual_return_measure': {'type': 'string'}}}, 'as_of_date': {'type': 'string'}, 'start_date': {'type': 'string'}, 'buy_the_dip': {'type': 'object', 'properties': {'error': {'type': 'string'}, 'invested': {'type': ['number', 'null']}, 'final_value': {'type': ['number', 'null']}, 'sharpe_ratio': {'type': ['number', 'null']}, 'max_drawdown_pct': {'type': ['number', 'null']}, 'total_return_pct': {'type': ['number', 'null']}, 'annual_return_pct': {'type': ['number', 'null']}, 'annual_return_measure': {'type': 'string'}}}, 'history_starts': {'type': 'string'}, 'monthly_investing': {'type': 'object', 'properties': {'error': {'type': 'string'}, 'invested': {'type': ['number', 'null']}, 'final_value': {'type': ['number', 'null']}, 'sharpe_ratio': {'type': ['number', 'null']}, 'max_drawdown_pct': {'type': ['number', 'null']}, 'total_return_pct': {'type': ['number', 'null']}, 'annual_return_pct': {'type': ['number', 'null']}, 'annual_return_measure': {'type': 'string'}}}, 'risk_free_rate_pct': {'type': 'number'}}}, 'next': {'type': 'array', 'items': {'type': 'object', 'required': ['tool', 'arguments', 'why'], 'properties': {'why': {'type': 'string'}, 'tool': {'type': 'string'}, 'arguments': {'type': 'object'}}}, 'description': 'Suggested follow-up calls'}, 'links': {'type': 'object', 'required': ['smartfin'], 'properties': {'page': {'type': 'string', 'description': "SmartFin's page for this stock, when it has one"}, 'embed': {'type': 'string', 'description': 'Free embed code for this calculator, for a site the user runs'}, 'smartfin': {'type': 'string', 'description': 'Open and adjust this result on smartfin.fyi'}}}, 'how_to': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Steps for the user to see or redo this on smartfin.fyi'}, 'source': {'type': 'string'}, 'summary': {'type': 'string', 'description': 'Plain-language result the assistant can quote'}}}
smartfin_compare_time_periods
One investment across reference periods
What a fixed amount in a US stock or index ETF became across reference periods ending today (or on as_of_date): since 2000, since the dot-com peak (24 Mar 2000), since the dot-com crash low (9 Oct 2002), since the 2007 peak (9 Oct 2007), since the 2008 crash low (9 Mar 2009), since 2010, since the COVID low (23 Mar 2020), since the 2022 low (12 Oct 2022), and the last 10, 5 and 1 years. Each row gives lump sum and monthly investing results on daily closing prices adjusted for splits and reinvested dividends. Event dates are S&P 500 closing highs and lows. Use when the user asks how a stock did over several time frames, or names one of these moments ("from the COVID low", "since 2000"). Do not use for a custom start month (use smartfin_compare_investment_strategies). Limits: periods that start before the ticker's price history are skipped and listed with the reason; US dollars; not a prediction.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['ticker'], 'properties': {'amount': {'type': 'number', 'maximum': 1000000000, 'minimum': 1, 'description': 'Dollars invested in each period. Default 1000'}, 'ticker': {'type': 'string', 'pattern': '^[A-Za-z][A-Za-z.\\-]{0,9}$', 'description': 'Stock or ETF symbol, not a company name: AAPL not Apple. Covers 508 symbols: the S&P 500 companies plus the index ETFs SPY, VOO, IVV, QQQ, DIA, IWM, VTI.'}, 'periods': {'type': 'array', 'items': {'enum': ['dotcom_peak', 'since_2000', 'dotcom_low', 'peak_2007', 'crash_2009_low', 'since_2010', 'covid_low', 'low_2022', 'last_10y', 'last_5y', 'last_1y'], 'type': 'string'}, 'description': 'Which periods to include. Omit for all'}, 'as_of_date': {'type': 'string', 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$', 'description': 'End date, YYYY-MM-DD. Omit for the latest available price'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['data', 'summary', 'next', 'links', 'cite', 'how_to', 'source'], 'properties': {'cite': {'type': 'object', 'required': ['text', 'url'], 'properties': {'url': {'type': 'string'}, 'text': {'type': 'string'}}, 'description': 'How to credit this result'}, 'data': {'type': 'object', 'required': ['ticker', 'company', 'amount', 'as_of_date', 'periods', 'skipped'], 'properties': {'amount': {'type': 'number'}, 'ticker': {'type': 'string'}, 'company': {'type': 'string'}, 'periods': {'type': 'array', 'items': {'type': 'object', 'properties': {'key': {'type': 'string'}, 'label': {'type': 'string'}, 'lump_sum': {'type': 'object'}, 'start_date': {'type': 'string'}, 'simulation_url': {'type': 'string'}, 'monthly_investing': {'type': 'object'}}}}, 'skipped': {'type': 'array', 'items': {'type': 'object', 'properties': {'key': {'type': 'string'}, 'label': {'type': 'string'}, 'reason': {'type': 'string'}}}}, 'as_of_date': {'type': 'string'}, 'history_starts': {'type': 'string'}}}, 'next': {'type': 'array', 'items': {'type': 'object', 'required': ['tool', 'arguments', 'why'], 'properties': {'why': {'type': 'string'}, 'tool': {'type': 'string'}, 'arguments': {'type': 'object'}}}, 'description': 'Suggested follow-up calls'}, 'links': {'type': 'object', 'required': ['smartfin'], 'properties': {'page': {'type': 'string', 'description': "SmartFin's page for this stock, when it has one"}, 'embed': {'type': 'string', 'description': 'Free embed code for this calculator, for a site the user runs'}, 'smartfin': {'type': 'string', 'description': 'Open and adjust this result on smartfin.fyi'}}}, 'how_to': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Steps for the user to see or redo this on smartfin.fyi'}, 'source': {'type': 'string'}, 'summary': {'type': 'string', 'description': 'Plain-language result the assistant can quote'}}}
smartfin_get_embed_code
Put a SmartFin calculator on a website
The HTML to put one of SmartFin's free calculators on a website the user runs: a blog post, a class or library page, a client resources page. One iframe line, free, no sign-up, no cookies or tracking; the widget fills the width it's given and follows the reader's light or dark mode. Calculators: investment (Investment growth calculator), compound_interest (Compound interest calculator), mortgage (Mortgage calculator), car_loan (Car loan calculator), student_loan (Student loan calculator), refinance (Refinance calculator), cagr (CAGR calculator), rule_of_72 (Rule of 72 calculator), inflation (Inflation calculator), fire (FIRE calculator), withdrawal (Withdrawal planner). Use when the user wants a calculator on their own site or asks how to add one. Do not use to calculate anything (use the other smartfin_ tools).
Read only Idempotent
Input schema
{'type': 'object', 'required': ['calculator'], 'properties': {'currency': {'enum': ['USD', 'EUR', 'GBP', 'CHF', 'AUD', 'CAD', 'SGD', 'HKD', 'INR', 'JPY'], 'type': 'string', 'description': 'Show this currency to every reader. Omit to let each reader choose'}, 'calculator': {'enum': ['investment', 'compound_interest', 'mortgage', 'car_loan', 'student_loan', 'refinance', 'cagr', 'rule_of_72', 'inflation', 'fire', 'withdrawal'], 'type': 'string', 'description': 'Which calculator to embed'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['data', 'summary', 'next', 'links', 'cite', 'how_to', 'source'], 'properties': {'cite': {'type': 'object', 'required': ['text', 'url'], 'properties': {'url': {'type': 'string'}, 'text': {'type': 'string'}}, 'description': 'How to credit this result'}, 'data': {'type': 'object', 'required': ['calculator', 'title', 'embed_code'], 'properties': {'title': {'type': 'string'}, 'height': {'type': 'number'}, 'currency': {'type': 'string'}, 'calculator': {'type': 'string'}, 'embed_code': {'type': 'string'}}}, 'next': {'type': 'array', 'items': {'type': 'object', 'required': ['tool', 'arguments', 'why'], 'properties': {'why': {'type': 'string'}, 'tool': {'type': 'string'}, 'arguments': {'type': 'object'}}}, 'description': 'Suggested follow-up calls'}, 'links': {'type': 'object', 'required': ['smartfin'], 'properties': {'page': {'type': 'string', 'description': "SmartFin's page for this stock, when it has one"}, 'embed': {'type': 'string', 'description': 'Free embed code for this calculator, for a site the user runs'}, 'smartfin': {'type': 'string', 'description': 'Open and adjust this result on smartfin.fyi'}}}, 'how_to': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Steps for the user to see or redo this on smartfin.fyi'}, 'source': {'type': 'string'}, 'summary': {'type': 'string', 'description': 'Plain-language result the assistant can quote'}}}
smartfin_project_savings_growth
Project savings growth
Future balance of savings or an investment growing at a fixed yearly rate, with optional monthly contributions and a chosen compounding frequency. Returns the balance, total paid in and interest earned. Use for forward-looking "how much will I have" questions at an assumed rate. Do not use for what a real stock did in the past (use smartfin_calculate_investment_return). A fixed rate is an assumption, not a forecast.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['principal', 'annual_rate_pct', 'years'], 'properties': {'years': {'type': 'number', 'maximum': 100, 'minimum': 1, 'description': 'Number of years'}, 'principal': {'type': 'number', 'maximum': 10000000000, 'minimum': 0, 'description': 'Starting amount in dollars'}, 'annual_rate_pct': {'type': 'number', 'maximum': 1000, 'minimum': -99, 'description': 'Assumed yearly rate in %, e.g. 7'}, 'compounds_per_year': {'enum': [1, 2, 4, 12, 365], 'type': 'number', 'description': '1 yearly, 2 twice a year, 4 quarterly, 12 monthly, 365 daily. Default 12'}, 'monthly_contribution': {'type': 'number', 'maximum': 1000000000, 'minimum': 0, 'description': 'Added each month, in dollars. Default 0'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['data', 'summary', 'next', 'links', 'cite', 'how_to', 'source'], 'properties': {'cite': {'type': 'object', 'required': ['text', 'url'], 'properties': {'url': {'type': 'string'}, 'text': {'type': 'string'}}, 'description': 'How to credit this result'}, 'data': {'type': 'object', 'required': ['balance', 'paid_in', 'interest_earned'], 'properties': {'years': {'type': 'number'}, 'balance': {'type': 'number'}, 'paid_in': {'type': 'number'}, 'interest_earned': {'type': 'number'}, 'effective_annual_rate_pct': {'type': 'number'}}}, 'next': {'type': 'array', 'items': {'type': 'object', 'required': ['tool', 'arguments', 'why'], 'properties': {'why': {'type': 'string'}, 'tool': {'type': 'string'}, 'arguments': {'type': 'object'}}}, 'description': 'Suggested follow-up calls'}, 'links': {'type': 'object', 'required': ['smartfin'], 'properties': {'page': {'type': 'string', 'description': "SmartFin's page for this stock, when it has one"}, 'embed': {'type': 'string', 'description': 'Free embed code for this calculator, for a site the user runs'}, 'smartfin': {'type': 'string', 'description': 'Open and adjust this result on smartfin.fyi'}}}, 'how_to': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Steps for the user to see or redo this on smartfin.fyi'}, 'source': {'type': 'string'}, 'summary': {'type': 'string', 'description': 'Plain-language result the assistant can quote'}}}
Added
smartfin_get_embed_code
Sept. 30, 2026, 2:40 a.m.
Added
smartfin_calculate_retirement_withdrawal
Sept. 30, 2026, 2:40 a.m.
Added
smartfin_calculate_fire_number
Sept. 30, 2026, 2:40 a.m.
Added
smartfin_calculate_inflation_impact
Sept. 30, 2026, 2:40 a.m.
Added
smartfin_project_savings_growth
Sept. 30, 2026, 2:40 a.m.
Added
smartfin_calculate_loan_payment
Sept. 30, 2026, 2:40 a.m.
Added
smartfin_compare_time_periods
Sept. 30, 2026, 2:40 a.m.
Added
smartfin_calculate_investment_return
Sept. 30, 2026, 2:40 a.m.
Added
smartfin_compare_investment_strategies
Sept. 30, 2026, 2:40 a.m.