SmartFin

Backtest S&P 500 stocks and ETFs on real prices, plus loan, savings, FIRE and retirement tools.

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
100%
Naming quality
67%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (7)

  • LOWTool 'smartfin_calculate_loan_payment' description lacks action verbin smartfin_calculate_loan_payment
  • LOWTool 'smartfin_compare_investment_strategies' name length outside 3-30 rangein smartfin_compare_investment_strategies
  • LOWTool 'smartfin_calculate_investment_return' name length outside 3-30 rangein smartfin_calculate_investment_return
  • LOWTool 'smartfin_calculate_loan_payment' name length outside 3-30 rangein smartfin_calculate_loan_payment
  • LOWTool 'smartfin_project_savings_growth' name length outside 3-30 rangein smartfin_project_savings_growth
  • LOWTool 'smartfin_calculate_inflation_impact' name length outside 3-30 rangein smartfin_calculate_inflation_impact
  • LOWTool 'smartfin_calculate_retirement_withdrawal' name length outside 3-30 rangein smartfin_calculate_retirement_withdrawal

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~7,178Tokens (tool definitions)
~7.3 KBTypical response size
Significant attention impact (5.61% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "smartfin": {
      "url": "https://smartfin.fyi/mcp"
    }
  }
}

Remote endpoints

https://smartfin.fyi/mcpstreamable-http

What it can do

Tool inventory

Tools (9)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢smartfin_compare_investment_strategies(ticker, amount, start_month, end_month, dip_threshold_pct, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "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."
    },
    "amount": {
      "type": "number",
      "minimum": 1,
      "maximum": 1000000000,
      "description": "Total dollars to invest across the whole period"
    },
    "start_month": {
      "type": "string",
      "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])$",
      "description": "First month, YYYY-MM, e.g. 2016-01"
    },
    "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"
    },
    "dip_threshold_pct": {
      "type": "number",
      "enum": [
        5,
        10,
        15,
        20
      ],
      "description": "Buy-the-dip trigger: a fall of this % from the latest high. Default 10"
    },
    "dip_percent_per_buy": {
      "type": "number",
      "enum": [
        5,
        10,
        15,
        20,
        25,
        30,
        35,
        40,
        45,
        50,
        55,
        60,
        65,
        70
      ],
      "description": "Share of the amount spent on each dip, in %. Default 10"
    },
    "response_format": {
      "type": "string",
      "enum": [
        "concise",
        "detailed"
      ],
      "description": "detailed adds worst fall and Sharpe ratio to the summary. Default concise"
    }
  },
  "required": [
    "ticker",
    "amount",
    "start_month"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "ticker": {
          "type": "string"
        },
        "company": {
          "type": "string"
        },
        "amount": {
          "type": "number"
        },
        "start_date": {
          "type": "string"
        },
        "as_of_date": {
          "type": "string"
        },
        "history_starts": {
          "type": "string"
        },
        "lump_sum": {
          "type": "object",
          "properties": {
            "invested": {
              "type": [
                "number",
                "null"
              ]
            },
            "final_value": {
              "type": [
                "number",
                "null"
              ]
            },
            "total_return_pct": {
              "type": [
                "number",
                "null"
              ]
            },
            "annual_return_pct": {
              "type": [
                "number",
                "null"
              ]
            },
            "annual_return_measure": {
              "type": "string"
            },
            "max_drawdown_pct": {
              "type": [
                "number",
                "null"
              ]
            },
            "sharpe_ratio": {
              "type": [
                "number",
                "null"
              ]
            },
            "error": {
              "type": "string"
            }
          }
        },
        "monthly_investing": {
          "type": "object",
          "properties": {
            "invested": {
              "type": [
                "number",
                "null"
              ]
            },
            "final_value": {
              "type": [
                "number",
                "null"
              ]
            },
            "total_return_pct": {
              "type": [
                "number",
                "null"
              ]
            },
            "annual_return_pct": {
              "type": [
                "number",
                "null"
              ]
            },
            "annual_return_measure": {
              "type": "string"
            },
            "max_drawdown_pct": {
              "type": [
                "number",
                "null"
              ]
            },
            "sharpe_ratio": {
              "type": [
                "number",
                "null"
              ]
            },
            "error": {
              "type": "string"
            }
          }
        },
        "buy_the_dip": {
          "type": "object",
          "properties": {
            "invested": {
              "type": [
                "number",
                "null"
              ]
            },
            "final_value": {
              "type": [
                "number",
                "null"
              ]
            },
            "total_return_pct": {
              "type": [
                "number",
                "null"
              ]
            },
            "annual_return_pct": {
              "type": [
                "number",
                "null"
              ]
            },
            "annual_return_measure": {
              "type": "string"
            },
            "max_drawdown_pct": {
              "type": [
                "number",
                "null"
              ]
            },
            "sharpe_ratio": {
              "type": [
                "number",
                "null"
              ]
            },
            "error": {
              "type": "string"
            }
          }
        },
        "risk_free_rate_pct": {
          "type": "number"
        }
      },
      "required": [
        "ticker",
        "company",
        "amount",
        "start_date",
        "as_of_date",
        "lump_sum",
        "monthly_investing",
        "buy_the_dip"
      ]
    },
    "summary": {
      "type": "string",
      "description": "Plain-language result the assistant can quote"
    },
    "next": {
      "type": "array",
      "description": "Suggested follow-up calls",
      "items": {
        "type": "object",
        "properties": {
          "tool": {
            "type": "string"
          },
          "arguments": {
            "type": "object"
          },
          "why": {
            "type": "string"
          }
        },
        "required": [
          "tool",
          "arguments",
          "why"
        ]
      }
    },
    "links": {
      "type": "object",
      "properties": {
        "smartfin": {
          "type": "string",
          "description": "Open and adjust this result on smartfin.fyi"
        },
        "embed": {
          "type": "string",
          "description": "Free embed code for this calculator, for a site the user runs"
        },
        "page": {
          "type": "string",
          "description": "SmartFin's page for this stock, when it has one"
        }
      },
      "required": [
        "smartfin"
      ]
    },
    "cite": {
      "type": "object",
      "description": "How to credit this result",
      "properties": {
        "text": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "text",
        "url"
      ]
    },
    "how_to": {
      "type": "array",
      "description": "Steps for the user to see or redo this on smartfin.fyi",
      "items": {
        "type": "string"
      }
    },
    "source": {
      "type": "string"
    }
  },
  "required": [
    "data",
    "summary",
    "next",
    "links",
    "cite",
    "how_to",
    "source"
  ]
}
🟢smartfin_calculate_investment_return(ticker, strategy, amount, start_month, end_month, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "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": {
      "type": "string",
      "enum": [
        "lump_sum",
        "monthly",
        "buy_the_dip"
      ],
      "description": "Which way of investing"
    },
    "amount": {
      "type": "number",
      "minimum": 1,
      "maximum": 1000000000,
      "description": "Total dollars invested over the period"
    },
    "start_month": {
      "type": "string",
      "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])$",
      "description": "First month, YYYY-MM"
    },
    "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"
    },
    "dip_threshold_pct": {
      "type": "number",
      "enum": [
        5,
        10,
        15,
        20
      ],
      "description": "For buy_the_dip: trigger fall in %. Default 10"
    },
    "dip_percent_per_buy": {
      "type": "number",
      "enum": [
        5,
        10,
        15,
        20,
        25,
        30,
        35,
        40,
        45,
        50,
        55,
        60,
        65,
        70
      ],
      "description": "For buy_the_dip: % of the amount per buy. Default 10"
    }
  },
  "required": [
    "ticker",
    "strategy",
    "amount",
    "start_month"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "ticker": {
          "type": "string"
        },
        "company": {
          "type": "string"
        },
        "strategy": {
          "type": "string"
        },
        "amount": {
          "type": "number"
        },
        "start_date": {
          "type": "string"
        },
        "as_of_date": {
          "type": "string"
        },
        "result": {
          "type": "object",
          "properties": {
            "invested": {
              "type": [
                "number",
                "null"
              ]
            },
            "final_value": {
              "type": [
                "number",
                "null"
              ]
            },
            "total_return_pct": {
              "type": [
                "number",
                "null"
              ]
            },
            "annual_return_pct": {
              "type": [
                "number",
                "null"
              ]
            },
            "annual_return_measure": {
              "type": "string"
            },
            "max_drawdown_pct": {
              "type": [
                "number",
                "null"
              ]
            },
            "sharpe_ratio": {
              "type": [
                "number",
                "null"
              ]
            },
            "error": {
              "type": "string"
            }
          }
        }
      },
      "required": [
        "ticker",
        "company",
        "strategy",
        "amount",
        "start_date",
        "as_of_date",
        "result"
      ]
    },
    "summary": {
      "type": "string",
      "description": "Plain-language result the assistant can quote"
    },
    "next": {
      "type": "array",
      "description": "Suggested follow-up calls",
      "items": {
        "type": "object",
        "properties": {
          "tool": {
            "type": "string"
          },
          "arguments": {
            "type": "object"
          },
          "why": {
            "type": "string"
          }
        },
        "required": [
          "tool",
          "arguments",
          "why"
        ]
      }
    },
    "links": {
      "type": "object",
      "properties": {
        "smartfin": {
          "type": "string",
          "description": "Open and adjust this result on smartfin.fyi"
        },
        "embed": {
          "type": "string",
          "description": "Free embed code for this calculator, for a site the user runs"
        },
        "page": {
          "type": "string",
          "description": "SmartFin's page for this stock, when it has one"
        }
      },
      "required": [
        "smartfin"
      ]
    },
    "cite": {
      "type": "object",
      "description": "How to credit this result",
      "properties": {
        "text": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "text",
        "url"
      ]
    },
    "how_to": {
      "type": "array",
      "description": "Steps for the user to see or redo this on smartfin.fyi",
      "items": {
        "type": "string"
      }
    },
    "source": {
      "type": "string"
    }
  },
  "required": [
    "data",
    "summary",
    "next",
    "links",
    "cite",
    "how_to",
    "source"
  ]
}
🟢smartfin_compare_time_periods(ticker, amount, periods, as_of_date)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "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."
    },
    "amount": {
      "type": "number",
      "minimum": 1,
      "maximum": 1000000000,
      "description": "Dollars invested in each period. Default 1000"
    },
    "periods": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "dotcom_peak",
          "since_2000",
          "dotcom_low",
          "peak_2007",
          "crash_2009_low",
          "since_2010",
          "covid_low",
          "low_2022",
          "last_10y",
          "last_5y",
          "last_1y"
        ]
      },
      "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"
    }
  },
  "required": [
    "ticker"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "ticker": {
          "type": "string"
        },
        "company": {
          "type": "string"
        },
        "amount": {
          "type": "number"
        },
        "as_of_date": {
          "type": "string"
        },
        "history_starts": {
          "type": "string"
        },
        "periods": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "key": {
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "start_date": {
                "type": "string"
              },
              "lump_sum": {
                "type": "object"
              },
              "monthly_investing": {
                "type": "object"
              },
              "simulation_url": {
                "type": "string"
              }
            }
          }
        },
        "skipped": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "key": {
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "reason": {
                "type": "string"
              }
            }
          }
        }
      },
      "required": [
        "ticker",
        "company",
        "amount",
        "as_of_date",
        "periods",
        "skipped"
      ]
    },
    "summary": {
      "type": "string",
      "description": "Plain-language result the assistant can quote"
    },
    "next": {
      "type": "array",
      "description": "Suggested follow-up calls",
      "items": {
        "type": "object",
        "properties": {
          "tool": {
            "type": "string"
          },
          "arguments": {
            "type": "object"
          },
          "why": {
            "type": "string"
          }
        },
        "required": [
          "tool",
          "arguments",
          "why"
        ]
      }
    },
    "links": {
      "type": "object",
      "properties": {
        "smartfin": {
          "type": "string",
          "description": "Open and adjust this result on smartfin.fyi"
        },
        "embed": {
          "type": "string",
          "description": "Free embed code for this calculator, for a site the user runs"
        },
        "page": {
          "type": "string",
          "description": "SmartFin's page for this stock, when it has one"
        }
      },
      "required": [
        "smartfin"
      ]
    },
    "cite": {
      "type": "object",
      "description": "How to credit this result",
      "properties": {
        "text": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "text",
        "url"
      ]
    },
    "how_to": {
      "type": "array",
      "description": "Steps for the user to see or redo this on smartfin.fyi",
      "items": {
        "type": "string"
      }
    },
    "source": {
      "type": "string"
    }
  },
  "required": [
    "data",
    "summary",
    "next",
    "links",
    "cite",
    "how_to",
    "source"
  ]
}
🟢smartfin_calculate_loan_payment(loan_type, loan_amount, home_price, down_payment_pct, annual_rate_pct, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "loan_type": {
      "type": "string",
      "enum": [
        "mortgage",
        "car",
        "student",
        "personal"
      ],
      "description": "Type of loan; chooses the SmartFin calculator link. Default mortgage"
    },
    "loan_amount": {
      "type": "number",
      "minimum": 0,
      "maximum": 100000000,
      "description": "Amount borrowed, in dollars. Give this or home_price"
    },
    "home_price": {
      "type": "number",
      "minimum": 0,
      "maximum": 100000000,
      "description": "Mortgage only: home price, in dollars, with down_payment_pct"
    },
    "down_payment_pct": {
      "type": "number",
      "minimum": 0,
      "maximum": 100,
      "description": "Mortgage only: down payment as % of home_price. Default 20"
    },
    "annual_rate_pct": {
      "type": "number",
      "minimum": 0,
      "maximum": 100,
      "description": "Annual interest rate in %, e.g. 6.5"
    },
    "term_years": {
      "type": "number",
      "minimum": 1,
      "maximum": 50,
      "description": "Loan term in years, e.g. 30 for a mortgage, 5 for a car loan"
    }
  },
  "required": [
    "annual_rate_pct",
    "term_years"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "loan_amount": {
          "type": "number"
        },
        "annual_rate_pct": {
          "type": "number"
        },
        "term_years": {
          "type": "number"
        },
        "monthly_payment": {
          "type": "number"
        },
        "total_interest": {
          "type": "number"
        },
        "total_paid": {
          "type": "number"
        }
      },
      "required": [
        "loan_amount",
        "monthly_payment",
        "total_interest",
        "total_paid"
      ]
    },
    "summary": {
      "type": "string",
      "description": "Plain-language result the assistant can quote"
    },
    "next": {
      "type": "array",
      "description": "Suggested follow-up calls",
      "items": {
        "type": "object",
        "properties": {
          "tool": {
            "type": "string"
          },
          "arguments": {
            "type": "object"
          },
          "why": {
            "type": "string"
          }
        },
        "required": [
          "tool",
          "arguments",
          "why"
        ]
      }
    },
    "links": {
      "type": "object",
      "properties": {
        "smartfin": {
          "type": "string",
          "description": "Open and adjust this result on smartfin.fyi"
        },
        "embed": {
          "type": "string",
          "description": "Free embed code for this calculator, for a site the user runs"
        },
        "page": {
          "type": "string",
          "description": "SmartFin's page for this stock, when it has one"
        }
      },
      "required": [
        "smartfin"
      ]
    },
    "cite": {
      "type": "object",
      "description": "How to credit this result",
      "properties": {
        "text": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "text",
        "url"
      ]
    },
    "how_to": {
      "type": "array",
      "description": "Steps for the user to see or redo this on smartfin.fyi",
      "items": {
        "type": "string"
      }
    },
    "source": {
      "type": "string"
    }
  },
  "required": [
    "data",
    "summary",
    "next",
    "links",
    "cite",
    "how_to",
    "source"
  ]
}
🟢smartfin_project_savings_growth(principal, monthly_contribution, annual_rate_pct, years, compounds_per_year)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "principal": {
      "type": "number",
      "minimum": 0,
      "maximum": 10000000000,
      "description": "Starting amount in dollars"
    },
    "monthly_contribution": {
      "type": "number",
      "minimum": 0,
      "maximum": 1000000000,
      "description": "Added each month, in dollars. Default 0"
    },
    "annual_rate_pct": {
      "type": "number",
      "minimum": -99,
      "maximum": 1000,
      "description": "Assumed yearly rate in %, e.g. 7"
    },
    "years": {
      "type": "number",
      "minimum": 1,
      "maximum": 100,
      "description": "Number of years"
    },
    "compounds_per_year": {
      "type": "number",
      "enum": [
        1,
        2,
        4,
        12,
        365
      ],
      "description": "1 yearly, 2 twice a year, 4 quarterly, 12 monthly, 365 daily. Default 12"
    }
  },
  "required": [
    "principal",
    "annual_rate_pct",
    "years"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "balance": {
          "type": "number"
        },
        "paid_in": {
          "type": "number"
        },
        "interest_earned": {
          "type": "number"
        },
        "effective_annual_rate_pct": {
          "type": "number"
        },
        "years": {
          "type": "number"
        }
      },
      "required": [
        "balance",
        "paid_in",
        "interest_earned"
      ]
    },
    "summary": {
      "type": "string",
      "description": "Plain-language result the assistant can quote"
    },
    "next": {
      "type": "array",
      "description": "Suggested follow-up calls",
      "items": {
        "type": "object",
        "properties": {
          "tool": {
            "type": "string"
          },
          "arguments": {
            "type": "object"
          },
          "why": {
            "type": "string"
          }
        },
        "required": [
          "tool",
          "arguments",
          "why"
        ]
      }
    },
    "links": {
      "type": "object",
      "properties": {
        "smartfin": {
          "type": "string",
          "description": "Open and adjust this result on smartfin.fyi"
        },
        "embed": {
          "type": "string",
          "description": "Free embed code for this calculator, for a site the user runs"
        },
        "page": {
          "type": "string",
          "description": "SmartFin's page for this stock, when it has one"
        }
      },
      "required": [
        "smartfin"
      ]
    },
    "cite": {
      "type": "object",
      "description": "How to credit this result",
      "properties": {
        "text": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "text",
        "url"
      ]
    },
    "how_to": {
      "type": "array",
      "description": "Steps for the user to see or redo this on smartfin.fyi",
      "items": {
        "type": "string"
      }
    },
    "source": {
      "type": "string"
    }
  },
  "required": [
    "data",
    "summary",
    "next",
    "links",
    "cite",
    "how_to",
    "source"
  ]
}
🟢smartfin_calculate_inflation_impact(amount, annual_inflation_pct, years)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "amount": {
      "type": "number",
      "minimum": 0,
      "maximum": 1000000000000,
      "description": "Amount in dollars"
    },
    "annual_inflation_pct": {
      "type": "number",
      "minimum": -99,
      "maximum": 1000,
      "description": "Yearly inflation rate in %, e.g. 3"
    },
    "years": {
      "type": "number",
      "minimum": 1,
      "maximum": 200,
      "description": "Number of years"
    }
  },
  "required": [
    "amount",
    "annual_inflation_pct",
    "years"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "todays_money": {
          "type": "number"
        },
        "buying_power_lost": {
          "type": "number"
        },
        "future_cost": {
          "type": "number"
        }
      },
      "required": [
        "todays_money",
        "buying_power_lost",
        "future_cost"
      ]
    },
    "summary": {
      "type": "string",
      "description": "Plain-language result the assistant can quote"
    },
    "next": {
      "type": "array",
      "description": "Suggested follow-up calls",
      "items": {
        "type": "object",
        "properties": {
          "tool": {
            "type": "string"
          },
          "arguments": {
            "type": "object"
          },
          "why": {
            "type": "string"
          }
        },
        "required": [
          "tool",
          "arguments",
          "why"
        ]
      }
    },
    "links": {
      "type": "object",
      "properties": {
        "smartfin": {
          "type": "string",
          "description": "Open and adjust this result on smartfin.fyi"
        },
        "embed": {
          "type": "string",
          "description": "Free embed code for this calculator, for a site the user runs"
        },
        "page": {
          "type": "string",
          "description": "SmartFin's page for this stock, when it has one"
        }
      },
      "required": [
        "smartfin"
      ]
    },
    "cite": {
      "type": "object",
      "description": "How to credit this result",
      "properties": {
        "text": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "text",
        "url"
      ]
    },
    "how_to": {
      "type": "array",
      "description": "Steps for the user to see or redo this on smartfin.fyi",
      "items": {
        "type": "string"
      }
    },
    "source": {
      "type": "string"
    }
  },
  "required": [
    "data",
    "summary",
    "next",
    "links",
    "cite",
    "how_to",
    "source"
  ]
}
🟢smartfin_calculate_fire_number(annual_expenses, current_savings, annual_savings, current_age, expected_return_pct, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "annual_expenses": {
      "type": "number",
      "minimum": 0,
      "maximum": 100000000,
      "description": "Yearly spending today, in dollars"
    },
    "current_savings": {
      "type": "number",
      "minimum": 0,
      "maximum": 10000000000,
      "description": "Invested today, in dollars. Default 0"
    },
    "annual_savings": {
      "type": "number",
      "minimum": 0,
      "maximum": 100000000,
      "description": "Added each year, in dollars (12 x a monthly amount). Default 0"
    },
    "current_age": {
      "type": "number",
      "minimum": 0,
      "maximum": 100,
      "description": "For the age at FIRE and Coast FIRE. Default 30"
    },
    "expected_return_pct": {
      "type": "number",
      "minimum": 0,
      "maximum": 100,
      "description": "Assumed yearly return in %. Default 7"
    },
    "withdrawal_rate_pct": {
      "type": "number",
      "enum": [
        3,
        4,
        5
      ],
      "description": "Safe withdrawal rate in %. Default 4"
    },
    "inflation_pct": {
      "type": "number",
      "minimum": 0,
      "maximum": 100,
      "description": "Yearly inflation in %, applied to expenses. Default 3"
    },
    "retirement_age": {
      "type": "number",
      "minimum": 0,
      "maximum": 120,
      "description": "Optional: a traditional retirement age, for the Coast FIRE number"
    }
  },
  "required": [
    "annual_expenses"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "fire_number_today": {
          "type": "number"
        },
        "still_needed": {
          "type": "number"
        },
        "years_to_fire": {
          "type": [
            "number",
            "null"
          ]
        },
        "reached_within_60_years": {
          "type": "boolean"
        },
        "fire_age": {
          "type": [
            "number",
            "null"
          ]
        },
        "fire_number_at_fire": {
          "type": [
            "number",
            "null"
          ]
        },
        "expenses_at_fire": {
          "type": [
            "number",
            "null"
          ]
        },
        "savings_rate_pct": {
          "type": "number"
        },
        "coast_fire_number": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "required": [
        "fire_number_today",
        "years_to_fire",
        "reached_within_60_years",
        "savings_rate_pct"
      ]
    },
    "summary": {
      "type": "string",
      "description": "Plain-language result the assistant can quote"
    },
    "next": {
      "type": "array",
      "description": "Suggested follow-up calls",
      "items": {
        "type": "object",
        "properties": {
          "tool": {
            "type": "string"
          },
          "arguments": {
            "type": "object"
          },
          "why": {
            "type": "string"
          }
        },
        "required": [
          "tool",
          "arguments",
          "why"
        ]
      }
    },
    "links": {
      "type": "object",
      "properties": {
        "smartfin": {
          "type": "string",
          "description": "Open and adjust this result on smartfin.fyi"
        },
        "embed": {
          "type": "string",
          "description": "Free embed code for this calculator, for a site the user runs"
        },
        "page": {
          "type": "string",
          "description": "SmartFin's page for this stock, when it has one"
        }
      },
      "required": [
        "smartfin"
      ]
    },
    "cite": {
      "type": "object",
      "description": "How to credit this result",
      "properties": {
        "text": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "text",
        "url"
      ]
    },
    "how_to": {
      "type": "array",
      "description": "Steps for the user to see or redo this on smartfin.fyi",
      "items": {
        "type": "string"
      }
    },
    "source": {
      "type": "string"
    }
  },
  "required": [
    "data",
    "summary",
    "next",
    "links",
    "cite",
    "how_to",
    "source"
  ]
}
🟢smartfin_calculate_retirement_withdrawal(question, balance, expected_return_pct, frequency, withdrawal_amount, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "question": {
      "type": "string",
      "enum": [
        "how_long",
        "how_much"
      ],
      "description": "how_long needs withdrawal_amount; how_much needs years or lasts_forever"
    },
    "balance": {
      "type": "number",
      "minimum": 0,
      "maximum": 10000000000,
      "description": "Starting balance, in dollars"
    },
    "expected_return_pct": {
      "type": "number",
      "minimum": -99,
      "maximum": 100,
      "description": "Assumed yearly return in %"
    },
    "frequency": {
      "type": "string",
      "enum": [
        "monthly",
        "quarterly",
        "annually"
      ],
      "description": "How often money is withdrawn. Default monthly"
    },
    "withdrawal_amount": {
      "type": "number",
      "minimum": 0,
      "maximum": 1000000000,
      "description": "For how_long: each withdrawal, in dollars, at the chosen frequency"
    },
    "inflation_pct": {
      "type": "number",
      "minimum": 0,
      "maximum": 100,
      "description": "For how_long, optional: the withdrawal rises by this % each year"
    },
    "years": {
      "type": "number",
      "minimum": 1,
      "maximum": 50,
      "description": "For how_much: how many years the money should last"
    },
    "lasts_forever": {
      "type": "boolean",
      "description": "For how_much: the withdrawal that never touches the principal"
    }
  },
  "required": [
    "question",
    "balance",
    "expected_return_pct"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "question": {
          "type": "string"
        },
        "frequency": {
          "type": "string"
        },
        "years_lasts": {
          "type": [
            "number",
            "null"
          ]
        },
        "lasts_indefinitely": {
          "type": "boolean"
        },
        "withdrawal_per_period": {
          "type": "number"
        },
        "withdrawal_per_year": {
          "type": "number"
        },
        "total_withdrawn": {
          "type": [
            "number",
            "null"
          ]
        },
        "extra_from_growth": {
          "type": [
            "number",
            "null"
          ]
        }
      },
      "required": [
        "question",
        "frequency"
      ]
    },
    "summary": {
      "type": "string",
      "description": "Plain-language result the assistant can quote"
    },
    "next": {
      "type": "array",
      "description": "Suggested follow-up calls",
      "items": {
        "type": "object",
        "properties": {
          "tool": {
            "type": "string"
          },
          "arguments": {
            "type": "object"
          },
          "why": {
            "type": "string"
          }
        },
        "required": [
          "tool",
          "arguments",
          "why"
        ]
      }
    },
    "links": {
      "type": "object",
      "properties": {
        "smartfin": {
          "type": "string",
          "description": "Open and adjust this result on smartfin.fyi"
        },
        "embed": {
          "type": "string",
          "description": "Free embed code for this calculator, for a site the user runs"
        },
        "page": {
          "type": "string",
          "description": "SmartFin's page for this stock, when it has one"
        }
      },
      "required": [
        "smartfin"
      ]
    },
    "cite": {
      "type": "object",
      "description": "How to credit this result",
      "properties": {
        "text": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "text",
        "url"
      ]
    },
    "how_to": {
      "type": "array",
      "description": "Steps for the user to see or redo this on smartfin.fyi",
      "items": {
        "type": "string"
      }
    },
    "source": {
      "type": "string"
    }
  },
  "required": [
    "data",
    "summary",
    "next",
    "links",
    "cite",
    "how_to",
    "source"
  ]
}
🟢smartfin_get_embed_code(calculator, currency)

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).

Input Schema

{
  "type": "object",
  "properties": {
    "calculator": {
      "type": "string",
      "enum": [
        "investment",
        "compound_interest",
        "mortgage",
        "car_loan",
        "student_loan",
        "refinance",
        "cagr",
        "rule_of_72",
        "inflation",
        "fire",
        "withdrawal"
      ],
      "description": "Which calculator to embed"
    },
    "currency": {
      "type": "string",
      "enum": [
        "USD",
        "EUR",
        "GBP",
        "CHF",
        "AUD",
        "CAD",
        "SGD",
        "HKD",
        "INR",
        "JPY"
      ],
      "description": "Show this currency to every reader. Omit to let each reader choose"
    }
  },
  "required": [
    "calculator"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "calculator": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "embed_code": {
          "type": "string"
        },
        "height": {
          "type": "number"
        },
        "currency": {
          "type": "string"
        }
      },
      "required": [
        "calculator",
        "title",
        "embed_code"
      ]
    },
    "summary": {
      "type": "string",
      "description": "Plain-language result the assistant can quote"
    },
    "next": {
      "type": "array",
      "description": "Suggested follow-up calls",
      "items": {
        "type": "object",
        "properties": {
          "tool": {
            "type": "string"
          },
          "arguments": {
            "type": "object"
          },
          "why": {
            "type": "string"
          }
        },
        "required": [
          "tool",
          "arguments",
          "why"
        ]
      }
    },
    "links": {
      "type": "object",
      "properties": {
        "smartfin": {
          "type": "string",
          "description": "Open and adjust this result on smartfin.fyi"
        },
        "embed": {
          "type": "string",
          "description": "Free embed code for this calculator, for a site the user runs"
        },
        "page": {
          "type": "string",
          "description": "SmartFin's page for this stock, when it has one"
        }
      },
      "required": [
        "smartfin"
      ]
    },
    "cite": {
      "type": "object",
      "description": "How to credit this result",
      "properties": {
        "text": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "required": [
        "text",
        "url"
      ]
    },
    "how_to": {
      "type": "array",
      "description": "Steps for the user to see or redo this on smartfin.fyi",
      "items": {
        "type": "string"
      }
    },
    "source": {
      "type": "string"
    }
  },
  "required": [
    "data",
    "summary",
    "next",
    "links",
    "cite",
    "how_to",
    "source"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded9 tools