Skip to main content
Glama

Server Details

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

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 20 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.4/5.0

Scored across 20 tools

Disambiguation4/5

Every description explicitly names the sibling tools it should not be confused with (e.g. future_value vs project_savings_growth vs missing_variable; investment_return vs compare_*) and states its own boundaries, which is unusually strong. However, real functional overlap remains within two families: single-amount growth math (future_value, present_value, simple_interest, missing_variable, project_savings_growth) and historical-equity tools (investment_return, compare_investment_strategies, compare_two_stocks, compare_time_periods), so an agent can still misselect without careful reading.

Naming Consistency5/5

All 20 tools use the same smartfin_ prefix followed by a consistent verb_noun pattern: calculate_*, compare_*, get_*, and project_*. The verb reflects the operation type and the noun the domain object, with no casing or style drift.

Tool Count4/5

20 tools is on the heavy side but each maps to a genuinely distinct calculator with a different input/output contract, so they largely earn their place rather than being redundant wrappers. It sits at the upper edge of the comfortable band but is defensible for a full financial-calculator suite.

Completeness4/5

The surface covers the major personal-finance lifecycles (loans/mortgage, savings growth, investing history and comparison, retirement drawdown and FIRE, rent vs buy, inflation, plus business ROI/margin) and includes an embed helper. Minor gaps: CAGR and Rule-of-72 calculators are referenced by name/URL inside descriptions and the embed list but are not exposed as tools, and loan products like car/student/refinance exist only implicitly through loan_payment.

Available Tools

20 tools
smartfin_calculate_down_paymentSave for a home down paymentA
Read-onlyIdempotent
Inspect

How long savings take to reach a home down payment, from what is saved so far plus the same amount each month growing at a fixed yearly rate, and, with reach_within_months, the monthly amount that reaches it by then, the way SmartFin's down payment calculator does. Returns the down payment, the loan amount it leaves, the months to reach it (within 50 years), the modeled savings split into saved so far, deposits and growth, and the monthly amount (rounded up to a whole currency unit) that reaches it within the chosen time. Use when someone asks how long it takes to save for a down payment, how much a month reaches one by a date, or what a percentage down is on a price. Do not use for how much to put down (it does not say), mortgage approval, closing costs (not included) or the mortgage payment (use smartfin_calculate_loan_payment). The growth rate is held constant, deposits are made at the end of each month and the home price stays the same. Amounts can be in any one currency; none is converted.

ParametersJSON Schema
NameRequiredDescriptionDefault
currencyNoCurrency for the amounts in the summary and the link. Default USD; amounts are never converted
home_priceYesPrice of the home. 1000 to 100000000
saved_so_farNoAmount saved toward it today. Default 0. 0 to 100000000
growth_rate_pctNoYearly rate the savings grow at, with compounding included (a savings account's APY in the US, AER in the UK), held the same every year. Default 3, an example, not a current rate. 0 to 20
down_payment_pctNoDown payment as % of the price. Give this or down_payment_amount. Default 20. 0 to 100
mortgage_rate_pctNoOptional: the mortgage rate, % a year, with mortgage_term_years, to suggest the follow-up call for the payment on the loan amount
saving_each_monthNoAmount added at the end of every month. Default 0. 0 to 10000000
down_payment_amountNoDown payment as an amount instead of a %; at most the home price. Give this or down_payment_pct
mortgage_term_yearsNoOptional: the mortgage term in years, with mortgage_rate_pct
reach_within_monthsNoA time to reach it by, in months, for the monthly amount that does: 48 is 4 years. 0 or omitted for none. 0 to 600

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the read-only/idempotent/no-destruction profile, and the description goes further by disclosing modeling assumptions an agent could not infer: constant growth rate, deposits at end of each month, unchanging home price, and no currency conversion. These materially affect interpretation of the results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then usage, then caveats, and almost every clause carries information. The opening sentence is a dense run-on that takes effort to parse, and the enumerating of return fields is partly redundant given the output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema and fully covered parameters, the remaining description burden is scope and assumptions, both addressed (exclusions, constant rate, end-of-month deposits, no conversion). Some return-field restatement is unnecessary but harmless; nothing needed to call the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds role-level meaning beyond the schema: reach_within_months switches the tool into solving for the monthly amount, and down_payment_pct is framed as 'what a percentage down is on a price'. It does not add format/units detail beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific computation: time for savings (existing + monthly deposits at a fixed growth rate) to reach a down payment target, plus the reverse solve for a monthly amount given reach_within_months. It is clearly separable from sibling calculators, and it explicitly routes the mortgage-payment need to smartfin_calculate_loan_payment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit triggers ('how long it takes to save for a down payment', 'how much a month reaches one by a date', 'what a percentage down is on a price') and explicit exclusions ('Do not use for how much to put down', mortgage approval, closing costs) with the named alternative for the mortgage payment case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_calculate_fire_numberFIRE number and years to reach itA
Read-onlyIdempotent
Inspect

Works the way SmartFin's FIRE calculator does. The FIRE number today is yearly expenses divided by a withdrawal-rate assumption. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
currencyNoCurrency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD
current_ageNoFor the age at FIRE and Coast FIRE. Default 30
inflation_pctNoYearly inflation in %, applied to expenses. Default 3
annual_savingsNoAdded each year, in the currency chosen (12 x a monthly amount). Default 0
retirement_ageNoOptional: a traditional retirement age, for the Coast FIRE number
annual_expensesYesYearly spending today, in the currency chosen
current_savingsNoInvested today, in the currency chosen. Default 0
expected_return_pctNoAssumed yearly return in %. Default 7
withdrawal_rate_pctNoWithdrawal-rate assumption in %. Default 4

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly, idempotent, closed-world, non-destructive), and the description adds substantive behavior beyond them: the FIRE search is capped at 60 years, returns and inflation are user assumptions rather than facts, taxes are excluded, and the coast FIRE number only appears when a traditional retirement age is supplied. These are real computational limits an agent should know before answering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the mechanism, then usage, then exclusion, then caveats, with no filler sentences. The algorithm walkthrough is somewhat long, but each clause carries information needed to interpret the result.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nine-parameter calculation tool with an output schema and full annotation coverage, the description supplies the model, the search bound, the optional coast FIRE branch, the exclusion, and the assumption caveats. Nothing material is missing for correct invocation or interpretation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (currency, inflation, savings, withdrawal rate, retirement age) is already documented in the schema, and the description mostly restates that the withdrawal rate and return are assumptions. It adds no syntax or unit detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific computation (the FIRE number and the year it is reached) and explains the underlying model: expenses divided by a withdrawal rate, savings growth, inflation on expenses. It also names the sibling it is not (smartfin_calculate_retirement_withdrawal), so an agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use for early retirement / FIRE questions' with concrete user phrasings ('how much do I need to retire', 'when can I retire', 'what's my coast FIRE number'), plus a hard exclusion: 'Do not use to test how long an existing balance lasts (use smartfin_calculate_retirement_withdrawal).' Both the when and the when-not are present with the alternative named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_calculate_future_valueFuture value of an amountA
Read-onlyIdempotent
Inspect

What a single present amount grows to at a fixed yearly rate with interest added to the balance at a chosen frequency, and the growth over the starting amount (FV = PV x (1 + r/n)^(n x t)). Use for questions about what a lump sum becomes after some years at an assumed rate, or the effect of compounding more often. Do not use for regular contributions (use smartfin_project_savings_growth), for what a real stock did (use smartfin_calculate_investment_return), or for a forecast: one fixed rate is an assumption. To find the starting amount, rate or time instead of the future value, use smartfin_calculate_missing_variable.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearsYesTime in years; a part of a year is a decimal
currencyNoCurrency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD
present_valueYesAmount today in the currency chosen
annual_rate_pctYesYearly rate in %, above -100, e.g. 6
compounding_frequencyYesTimes a year interest is added: 1 annually, 2 semiannually, 4 quarterly, 12 monthly, 52 weekly, 365 daily

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so the description's job is to add context beyond that. It does, by framing the output as an assumption-driven forecast rather than a real outcome ('one fixed rate is an assumption'), which is meaningful framing an agent should repeat to a user. It does not, however, mention constraints like the year cap or rate bounds, which the schema carries instead.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the operation and formula, then routing sentences, with zero filler. It is dense in places (three sibling redirects plus a forecast caveat), but each sentence earns its place by eliminating a specific mis-selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description covers purpose, selection boundaries, and the interpretive caveat. For a five-parameter, fully documented calculation tool, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both enums are documented inline, so the baseline is 3. The description restates the parameter roles ('fixed yearly rate', 'chosen frequency') and the formula clarifies how the four required inputs interact, but it adds no syntax, default, or boundary detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource (what a single present amount grows to) and reinforces it with the exact formula FV = PV x (1 + r/n)^(n x t). It explicitly names the two closest siblings it is not (smartfin_project_savings_growth, smartfin_calculate_investment_return), so an agent can disambiguate without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use cases (a lump sum after some years, effect of compounding more often) and explicit when-not cases with named alternatives: regular contributions → project_savings_growth, actual stock performance → calculate_investment_return, and solving for another variable → calculate_missing_variable. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_calculate_inflation_impactInflation impact over timeA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearsYesNumber of years
amountYesAmount in the currency chosen
currencyNoCurrency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD
annual_inflation_pctYesYearly inflation rate in %, e.g. 3

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered externally. The description adds genuine behavioral context the annotations cannot: the computation assumes one constant inflation rate rather than official index data, which bounds the trustworthiness of the result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, zero filler: what it computes, when to reach for it, when not to. The use-case and the caveat are front-loaded rather than buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is not the description's job, and annotations carry the safety profile. For a four-parameter calculator whose semantics are fully specified in the schema, the description supplies everything an agent needs to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with units, ranges and enum values all documented in the schema itself (e.g. annual_inflation_pct as "Yearly inflation rate in %, e.g. 3", currency as display-only and never converted). The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete computation in both directions (eroded value of a sum, and the future cost of today's price) plus the rate basis, so the resource is unambiguous. It never names the conceptually adjacent siblings (smartfin_calculate_future_value, smartfin_calculate_present_value), which is the only thing keeping it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger ("questions about buying power or future prices at an assumed inflation rate") and an explicit exclusion ("Do not use for historical CPI lookups: this uses one fixed rate, not official index data"). The when-not condition is exactly the kind of routing signal that separates this from index-based tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_calculate_investment_returnReturn of one investment strategyA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesTotal dollars invested over the period
tickerYesStock 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.
strategyYesWhich way of investing
end_monthNoLast month to include, YYYY-MM. Omit for the latest available month
start_monthYesFirst month, YYYY-MM
dip_threshold_pctNoFor buy_the_dip: trigger fall in %. Default 10
dip_percent_per_buyNoFor buy_the_dip: % of the amount per buy. Default 10

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, so safety is covered. The description adds real behavioral context beyond that: data coverage limits (508 US-listed symbols, USD only, month-level periods) and methodology (split-adjusted, dividend-reinvested daily closes). It does not discuss latency, pagination, or failure modes, which keeps it just short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and strategy definitions are front-loaded, then examples, then exclusions, then limits – a logical order. The opening sentence is long and parenthesis-heavy, but nearly every clause carries load-bearing constraint information, so waste is minimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter tool with an output schema and full annotation coverage, the description supplies everything an agent needs: scope, strategy mechanics, exclusions against siblings, and domain limits. Return values are already covered by the output schema, so the brief return summary is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks by defining each strategy enum value (lump_sum = all on first trading day, monthly = nearest trading day to the 1st, buy_the_dip = buys after a set % fall) and clarifying the adjusted-price basis. It does not add detail for dip_threshold_pct or dip_percent_per_buy beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource (what an amount invested became over a past period) and enumerates the three strategies it supports with their mechanics. It explicitly names the siblings it must not be confused with (compare_investment_strategies, project_savings_growth), so an agent can disambiguate without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete trigger examples ('what would $5,000 in Microsoft since 2015 be worth' -> lump_sum, 'if I'd put money into SPY every month since 2010' -> monthly) and explicit when-not routing to two named alternatives. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_calculate_loan_paymentLoan payment and total interestA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
currencyNoCurrency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD
loan_typeNoType of loan; chooses the SmartFin calculator link. Default mortgage
home_priceNoMortgage only: home price, in the currency chosen, with down_payment_pct
term_yearsYesLoan term in years, e.g. 30 for a mortgage, 5 for a car loan
loan_amountNoAmount borrowed, in the currency chosen. Give this or home_price
annual_rate_pctYesAnnual interest rate in %, e.g. 6.5
down_payment_pctNoMortgage only: down payment as % of home_price. Default 20

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely useful scope context that annotations cannot carry: what the figures exclude (taxes, insurance, fees) and which loan products are out of scope. It does not discuss rounding, payment timing, or amortization assumptions, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, each load-bearing: what it computes, how to supply principal, when to invoke, when not to. The result and routing conditions are front-loaded with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and annotations cover the safety profile. For a 7-parameter, 2-required calculation tool the description supplies everything an agent needs: output definition, input-mode rule, positive triggers, and hard exclusions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3, but the description adds cross-parameter meaning: the mutually exclusive loan_amount vs. home_price+down_payment_pct modes for mortgages, which is the main source of caller error. It does not add format or unit detail beyond the schema's own descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb-and-resource outcome (monthly payment, total interest, total paid) plus the exact loan class it covers, and names the distinction from siblings like mortgage_payoff and down_payment by scoping to fixed-rate amortizing loans. An agent can route correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('user asks what a loan costs per month or in total, or how the rate or term changes the cost') and explicit exclusions (variable-rate, interest-only, credit cards). It also states the input-mode rule: 'Give either loan_amount, or home_price with down_payment_pct for a mortgage.' Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_calculate_missing_variableSolve for the missing number: future value, starting amount, rate or timeA
Read-onlyIdempotent
Inspect

Finds the one missing number among four that sit in the same equation, a single amount earning one fixed yearly rate with interest added at a chosen frequency (FV = PV x (1 + r/n)^(n x t)): the future value, the starting amount, the annual rate, or the time in years. Use when the user knows three of the four and wants the fourth, e.g. "what rate turns $10,000 into $20,000 in 10 years", "how many years until $10,000 reaches $20,000 at 6%", or "what do I need to start with to reach $50,000". Do not use for regular contributions (use smartfin_project_savings_growth), for what a real investment did (use smartfin_calculate_investment_return), or for a forecast: one fixed rate is an assumption, and a required rate is the arithmetic, not a return to expect. To only grow an amount forward use smartfin_calculate_future_value.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearsNoTime in years; a part of a year is a decimal. Leave out when solving for years
currencyNoCurrency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD
solve_forYesWhich number to find: future_value, present_value (the starting amount), annual_rate_pct or years
future_valueNoAmount at the end in the currency chosen. Leave out when solving for future_value
present_valueNoStarting amount in the currency chosen. Leave out when solving for present_value
annual_rate_pctNoYearly rate in %, above -100, e.g. 6. Leave out when solving for annual_rate_pct
compounding_frequencyYesTimes a year interest is added: 1 annually, 2 semiannually, 4 quarterly, 12 monthly, 52 weekly, 365 daily

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety profile is covered. The description adds genuine interpretation context beyond that: one fixed rate is an assumption and a solved rate is arithmetic rather than an expected return. It does not discuss precision, rounding, or edge behavior when inputs are inconsistent, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose, formula, and usage trigger are front-loaded in the first two sentences. The exclusion sentence is a long run-on packing three alternatives plus a caveat, which slightly hurts scannability, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation. The description covers the operation, the equation, the trigger condition, examples, and the sibling tools to use instead — everything an agent needs to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all seven parameters including enum meanings, bounds, and the 'leave out when solving for X' pattern. The description restates the four solvable quantities and maps present_value to 'the starting amount,' which is a marginal clarification rather than new information. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (finds the one missing number) and resource (the four variables of FV = PV x (1 + r/n)^(n x t)), and even spells out the equation being solved. It distinguishes itself from siblings by naming smartfin_project_savings_growth, smartfin_calculate_investment_return, and smartfin_calculate_future_value as the wrong tools for adjacent tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger condition ('Use when the user knows three of the four and wants the fourth') backed by three concrete natural-language examples. It also provides explicit exclusions with the replacement tool named for each, so routing decisions require no inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_calculate_mortgage_payoffPay off a mortgage sooner with extra paymentsA
Read-onlyIdempotent
Inspect

How much sooner a fixed-rate mortgage (or other fixed-rate loan paid monthly) ends with an extra amount every month, a one-off payment, or both, from today's balance, the way SmartFin's mortgage payoff calculator does. Give the time left (years_left) or the monthly payment from the statement (monthly_payment), not both. Returns the months on each schedule, how many sooner, the interest on the rest of the loan with and without the extra, the difference, the extra paid, the last payment, the smallest whole extra a month that ends the loan 5 years sooner (1 year sooner when 2 to 10 years are left), and what the loan without extra would still owe when the loan with extra is paid off. Use when someone asks how much sooner or with how much less interest extra payments or a lump sum pay off a mortgage, or how much extra a month ends it some years early. Do not use for the payment on a new loan (use smartfin_calculate_loan_payment), refinancing, adjustable-rate or interest-only loans, or whether to pay off early or invest: it does not compare the two. Principal and interest only; taxes, insurance, escrow and prepayment penalties are not included. Each extra payment is applied to principal on its payment date. Amounts can be in any one currency; none is converted.

ParametersJSON Schema
NameRequiredDescriptionDefault
currencyNoCurrency for the amounts in the summary and the link. Default USD; amounts are never converted
lump_sumNoA one-off extra payment, in the same currency. Default 0. 0 to 100000000
years_leftNoTime left on the loan in years (to the nearest month: 2.5 is 2 years 6 months). Give this or monthly_payment. 1 month to 40
extra_monthlyNoExtra paid with every monthly payment from the next one, in the same currency. Default 0. 0 to 1000000
lump_sum_monthNoWhich payment the one-off amount is paid with: 1 = the next payment. Default 1. 1 to 480
annual_rate_pctYesYearly interest rate, % a year, fixed for the rest of the loan. 0 to 25
current_balanceYesWhat is still owed today, from the statement. 1 to 100000000
monthly_paymentNoThe monthly payment from the statement, principal and interest only (no escrow). Give this or years_left. 0 to 100000000

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real behavioral context beyond them: principal and interest only, taxes/insurance/escrow/prepayment penalties excluded, each extra payment applied to principal on its payment date, and no currency conversion. It also discloses the derived outputs, notably the 5-year/1-year-sooner minimum-extra calculation, which is non-obvious behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and usage guidance are front-loaded and the exclusions are crisp, but the second sentence is a long run-on that enumerates every return value in detail even though a full output schema exists — that enumeration is largely redundant and bloats the definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter financial calculator with an output schema, the description covers what is needed: input mode constraint, unit/currency handling, what is excluded from the calculation, and stated assumptions about when extra payments apply. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already carries ranges, defaults, and the years_left/monthly_payment either-or note, so the baseline is 3. The description reinforces the mutually exclusive constraint ('not both') and frames years_left as 'time left' and monthly_payment as 'principal and interest only (no escrow)', adding marginal interpretive value on top of the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: computes how much sooner a fixed-rate mortgage ends with extra monthly, lump sum, or both, from today's balance. It explicitly names the sibling it is not for ('Do not use for the payment on a new loan (use smartfin_calculate_loan_payment)'), so an agent can separate it from the other calculate_* tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit trigger conditions ('Use when someone asks how much sooner or with how much less interest extra payments or a lump sum pay off a mortgage'), explicit exclusions (refinancing, adjustable-rate/interest-only, pay-off-vs-invest), and the input rule 'Give the time left (years_left) or the monthly payment from the statement (monthly_payment), not both.' Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_calculate_present_valuePresent value of a future amountA
Read-onlyIdempotent
Inspect

What an amount due in the future is worth today at a fixed yearly discount rate, and the discount between the two (PV = FV / (1 + r/n)^(n x t)). Use for questions about the value today of money received later, at a discount rate the user supplies. Do not use to pick a discount rate (the tool has none of its own), for several payments over time, or for a market price: it discounts one amount at one fixed rate. For growth going forward use smartfin_calculate_future_value.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearsYesYears until the amount is due; a part of a year is a decimal
currencyNoCurrency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD
future_valueYesAmount due later, in the currency chosen
annual_rate_pctYesYearly discount rate in %, above -100, e.g. 6
compounding_frequencyYesTimes a year the rate compounds: 1 annually, 2 semiannually, 4 quarterly, 12 monthly, 52 weekly, 365 daily

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description still adds real scope context beyond them: the tool holds no rate of its own and discounts exactly one amount at one fixed rate, which tells the agent this is a bounded single computation rather than a solver. It does not discuss precision or rounding, but the output schema is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the definition and formula, then when-to-use, then exclusions, then the alternative. Three tight sentences with no redundant restatement of the name or title, and every clause carries routing or scope information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only single-formula calculator with a full output schema and 100% parameter documentation, the description supplies everything an agent lacks: the mathematical relationship, the scope limit (one amount, one fixed rate), and the sibling to use for the opposite direction. Nothing needed to select or call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents future_value, annual_rate_pct, compounding_frequency, years and currency in detail. The description only echoes that the discount rate is user-supplied, adding no format or constraint detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (discount to present value) and resource (a single future amount), and even gives the formula PV = FV / (1 + r/n)^(n x t). It is clearly separable from smartfin_calculate_future_value, which it explicitly names as the inverse operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use (questions about the value today of money received later, at a user-supplied rate), three explicit when-not cases (picking a rate, multiple payments, market price), and names the alternative sibling for forward growth. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_calculate_profit_marginProfit marginA
Read-onlyIdempotent
Inspect

The profit and the profit margin percentage from revenue and total costs (margin = (revenue - costs) / revenue x 100). A negative margin is a valid result. Use for questions about profit as a share of sales, from two figures for the same period. Do not use for return on money invested (use smartfin_calculate_roi), for taxes, or to say whether a margin is good: the tool reports the figure only. The cost figure is whatever the user supplies, so it says nothing about gross versus net unless they define it.

ParametersJSON Schema
NameRequiredDescriptionDefault
revenueYesRevenue for the period in the currency chosen, above 0
currencyNoCurrency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD
total_costsYesTotal costs for the same period in the currency chosen; it can be above revenue

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/idempotent/non-destructive, so the description wisely spends its budget on things annotations cannot convey: a negative margin is a valid result, the tool reports the figure without judging it, and the cost input is user-defined so gross vs net is undefined. It stops short of stating precision/rounding or failure behavior, so not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The output and formula lead, then usage, then caveats – properly front-loaded with no filler sentences. It is fairly dense at four sentences, and the closing gross/net sentence could arguably fold into the same-period sentence, keeping it just short of 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and annotations carry the safety profile. The description covers the remaining gaps – scope ambiguity (gross vs net), negative results, currency not being converted per the schema note, and sibling routing – leaving nothing an agent needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3 since the schema already documents revenue, total_costs and currency. The description still adds interpretation the schema lacks: both figures must cover the same period, and the cost figure's gross/net meaning depends entirely on the user, which changes how the result should be described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (compute profit and margin %) and even spells out the formula, so the agent knows exactly what is produced. It explicitly contrasts itself with smartfin_calculate_roi, which is the closest sibling, and notes the required scope (two figures for the same period).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives positive triggers (questions about profit as a share of sales), explicit exclusions (ROI, taxes, judging whether a margin is good), and the period-alignment precondition. This is a genuine when/when-not/alternative routing block rather than vague context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_calculate_retirement_withdrawalRetirement withdrawals: how long or how muchA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearsNoFor how_much: how many years the money should last
balanceYesStarting balance, in the currency chosen
currencyNoCurrency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD
questionYeshow_long needs withdrawal_amount; how_much needs years or lasts_forever
frequencyNoHow often money is withdrawn. Default monthly
inflation_pctNoFor how_long, optional: the withdrawal rises by this % each year
lasts_foreverNoFor how_much: the withdrawal that never touches the principal. At a return of 0% or below no amount qualifies, and withdrawal_per_period is 0
withdrawal_amountNoFor how_long: each withdrawal, in the currency chosen, at the chosen frequency
expected_return_pctYesAssumed yearly return in %

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description still adds real behavioral context: compounding conventions (balance earns a yearly return between withdrawals), frequency options, the lasts_forever edge case where 0% return yields no qualifying amount, and the caveat that returns are an assumption and taxes/fees are excluded.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded: mode definitions precede usage cues and exclusions, and the tax/fee caveat closes cleanly. The opening clause about mirroring SmartFin's calculator is mildly redundant framing, but nothing else is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Nine parameters and two branching modes are handled, an output schema exists so return values need no explanation, and alternatives plus assumptions are covered. An agent has everything needed to select the right mode and required arguments.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so per-parameter meaning is already documented and the baseline would be 3. The description earns above baseline by explaining the cross-parameter dependency structure (how_long requires withdrawal_amount; how_much requires years or lasts_forever), which the individual property descriptions do not state as a whole.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (calculating retirement withdrawals) and enumerates its two modes, how_long and how_much, with a one-line definition of each. It also names the sibling it is not (smartfin_calculate_fire_number), so an agent can disambiguate without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit inclusion cues are given as quoted user phrasings ("how long will my savings last", "how much can I withdraw") plus an explicit exclusion routing to smartfin_calculate_fire_number. This is the when-to-use / when-not-to-use pattern at full strength.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_calculate_roiReturn on investment (ROI)A
Read-onlyIdempotent
Inspect

The profit or loss and the ROI percentage from an initial investment and a final value (ROI = (final - initial) / initial x 100). Negative results are valid. It is not annualized. Use for questions about the total percentage return on money put in, from two values. Do not use for a return per year (use the CAGR calculator at smartfin.fyi/cagr-calculator.html), for what a real stock returned (use smartfin_calculate_investment_return), or for fees and taxes: include them in the final value yourself.

ParametersJSON Schema
NameRequiredDescriptionDefault
currencyNoCurrency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD
final_valueYesFinal value in the currency chosen; it can be below the initial amount
initial_valueYesInitial investment in the currency chosen, above 0

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds genuinely non-obvious behavior: negative results are valid, the figure is not annualized, and fees/taxes are the caller's responsibility to fold into final_value. Return format is left to the output schema, which exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Formula and the 'negative results are valid / not annualized' caveats are front-loaded, then usage boundaries, then the fees/taxes caveat last. Every sentence carries distinct information; nothing is redundant with the title or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-input calculator with a full output schema and complete annotation coverage, the description supplies everything an agent needs: formula, valid-input ranges implied by semantics, edge cases, and routing to alternatives. No material gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds interpretation value beyond the schema by clarifying that final_value may legitimately fall below initial_value and that fees/taxes must be embedded there, plus the non-conversion of currency.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource (calculate ROI), gives the exact formula, and states scope boundaries: 'not annualized', 'two values'. It clearly distinguishes itself from siblings like smartfin_calculate_investment_return and the CAGR calculator without requiring the agent to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('questions about the total percentage return on money put in, from two values') and three explicit when-not-to-use cases, each with the correct alternative named (CAGR calculator link, smartfin_calculate_investment_return) plus handling guidance for fees/taxes. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_calculate_savings_vs_investingCompare saving and investing the same moneyA
Read-onlyIdempotent
Inspect

Compares the modeled balances of a savings account and of an investment after 1 to 50 years, from the same starting amount and the same monthly contribution, the way SmartFin's savings vs investing calculator does. You give the savings rate and the investment return; each is held the same every year. Optional: a yearly increase in the monthly contribution (or one that follows inflation), a yearly fee on investments, and tax on savings interest or investment gains. Returns both modeled balances, money put in, interest, growth, fees and taxes, the difference, the same figures in today's money, the investment return at which both end the same (when a fee or tax is given), and a fixed falling-returns case at −2% a year. Use for questions like "how do 10,000 in savings at 4% and the same amount invested at 7% compare after 20 years" or "how far apart do saving and investing end after 20 years". It reports two modeled balances and does not say which option to choose. Do not use it for historical stock or index returns (use smartfin_compare_investment_strategies) or for account types and their tax rules, which it does not model. Amounts can be in any one currency; none is converted.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearsNoYears to compare, 1 to 50. A decimal is rounded to the nearest whole year. Default 10
currencyNoCurrency for the amounts in the summary and the link. Default USD; amounts are never converted
inflation_pctNoInflation, % a year. Used to show balances in today's money, and to set the yearly increase when step_up_matches_inflation is true. Default 3
starting_amountNoAmount in the account at the start, in the currency chosen below; the same for both paths. Default 10000
savings_rate_pctNoSavings account rate, % a year, with compounding included (APY in the US, AER in the UK). Held the same every year. Default 3
investment_fee_pctNoYearly fee on investments, % a year, subtracted from the return (6% with a 1% fee grows at 5%). Default 0
monthly_contributionNoAmount added to both paths at the end of every month, in the same currency. Default 500
investment_return_pctNoInvestment return before any fee, % a year; may be negative. Held the same every year. Default 6
contribution_step_up_pctNoYearly increase in the monthly contribution, % a year. Year 1 is the amount given; each later year rises by this. Ignored when step_up_matches_inflation is true. Default 0
investment_gains_tax_pctNoTax on investment gains, % of the gains, taken once as if the investments were sold at the end of the years. A simplified assumption, not tax advice. Default 0
savings_interest_tax_pctNoTax on savings interest, % of the interest, taken as the interest is credited. A simplified assumption, not tax advice. Default 0
step_up_matches_inflationNoTrue: each later year's monthly contribution changes by inflation_pct instead of contribution_step_up_pct. Default false

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only establish the safety profile (readOnly, idempotent, closed-world), and the description adds substantial modeling context beyond them: rates are held constant every year, tax is taken as a simplified one-time assumption, fees are subtracted from return, balances are also shown in today's money, a fixed −2%/year case is included, and no currency conversion occurs. For a pure calculator this is unusually rich disclosure of assumptions and limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and scope are front-loaded, and the paragraph follows a logical purpose -> inputs -> outputs -> examples -> exclusions order. It is somewhat long for a calculator, and the detailed enumeration of returned figures ('both modeled balances, money put in, interest, growth, fees and taxes...') partly duplicates the output schema, which costs a point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a 12-parameter tool with an output schema, the description covers everything an agent needs: modeling assumptions, which parameters are optional, the constant-rate simplification, the no-conversion currency rule, sibling alternatives, and the fact that it does not give a recommendation. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already defines every parameter; baseline is 3. The description adds value by grouping the inputs into core (savings rate, investment return, both held constant) versus optional features (contribution step-up or inflation-linked, investment fee, interest/gains tax), which helps an agent understand how the 12 parameters interact before diving into the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Compares the modeled balances of a savings account and of an investment') plus scope (1-50 years, same starting amount and contribution), and explicitly distinguishes itself from siblings by naming smartfin_compare_investment_strategies for historical returns. It also clarifies what it does not do ('does not say which option to choose'), so an agent can select it unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete trigger examples ('how do 10,000 in savings at 4% and the same amount invested at 7% compare after 20 years') and explicit exclusions with the alternative tool named for each (historical index returns -> smartfin_compare_investment_strategies; account types/tax rules -> not modeled). This is textbook when-to-use / when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_calculate_simple_interestSimple interestA
Read-onlyIdempotent
Inspect

The interest earned and the final amount on a principal at a fixed yearly rate over a number of years, when interest is not compounded (interest = principal x rate x time). Use for questions about simple interest on a loan or deposit, such as a short-term note or a bond coupon at a flat rate. Do not use when interest is added back to the balance (use smartfin_calculate_future_value or smartfin_project_savings_growth), for loan payments (use smartfin_calculate_loan_payment), or for taxes and fees: it applies none.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearsYesTime in years; a part of a year is a decimal, e.g. 0.5
currencyNoCurrency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD
principalYesStarting amount in the currency chosen, above 0
annual_rate_pctYesYearly interest rate in %, from 0 to 100, e.g. 5

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds domain behavior beyond annotations: it is non-compounded simple interest and applies no taxes or fees, which helps set expectations for what the calculation includes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the definition, then use cases, then exclusions. Every sentence carries routing or calculation information, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only calculator with annotations and an output schema, the description provides enough context: what it computes, when to use it, when not to use it, and which alternatives handle those cases. Return-value details are appropriately left to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents principal, annual_rate_pct, years, and currency. The description adds the relationship 'interest = principal x rate x time' and clarifies non-compounding, but it does not add per-parameter detail beyond the schema's own descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the exact computation: simple interest and final amount from principal, fixed yearly rate, and years. It also states the formula and distinguishes the tool from compounding, loan-payment, and tax/fee alternatives, so an agent can identify it precisely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit positive use cases (simple interest on a loan or deposit, short-term note, flat-rate bond coupon) and explicit exclusions with named alternatives: compounding tools, loan-payment tool, and taxes/fees. This is exactly the when/when-not routing guidance needed among many sibling calculators.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_compare_investment_strategiesCompare lump sum, monthly and buy-the-dipA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesTotal dollars to invest across the whole period
tickerYesStock 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_monthNoLast month to include, YYYY-MM. Omit for the latest available month
start_monthYesFirst month, YYYY-MM, e.g. 2016-01
response_formatNodetailed adds worst fall and Sharpe ratio to the summary. Default concise
dip_threshold_pctNoBuy-the-dip trigger: a fall of this % from the latest high. Default 10
dip_percent_per_buyNoShare of the amount spent on each dip, in %. Default 10

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, non-open-world behavior, so the safety profile is covered. The description adds genuinely useful context beyond that: the pricing basis (daily closes adjusted for splits and reinvested dividends), the coverage limits (US-listed S&P 500 names plus major ETFs, USD, month-level granularity), and an explicit caveat that results are period-dependent and not a prediction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the three strategies are front-loaded before the usage guidance, and every sentence carries information. It is on the long side for a single paragraph, but the length is justified by three distinct strategies plus sibling routing; no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter analytical tool with an output schema present, the description covers methodology, universe constraints, granularity, usage routing, and interpretation caveats. An agent has everything needed to select and invoke it correctly without needing return-value details, since the output schema supplies those.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning by defining what each strategy does — lump sum on the first trading day, monthly on the trading day nearest the 1st, and buy-the-dip after a set % fall from the latest high — which is exactly the semantics behind dip_threshold_pct and dip_percent_per_buy that the schema only names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (runs one amount through three buying strategies) and resource (US stock/index ETF over a period), and explicitly differentiates from siblings by naming smartfin_calculate_investment_return and smartfin_compare_time_periods. The three strategies are enumerated concretely, so an agent knows exactly what is computed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('user asks which way of investing would have done better for a specific stock or index over a past period') and when-not-to-use cases with named alternatives for single-strategy and multi-period comparisons, plus an exclusion for future projections. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_compare_rent_vs_buyCompare renting and buying a homeA
Read-onlyIdempotent
Inspect

Compares buying a home with a fixed-rate mortgage against renting a similar home and investing the money not spent on the home, over the years someone plans to stay, the way SmartFin's rent vs buy calculator does. Both start with the same cash and spend the same each month; whichever costs less that month invests the difference. Returns the modeled money each choice leaves (home sold and loan paid, or kept as equity, against the investments), the difference, the first year-end at which buying leaves at least as much as renting, the starting rent at which both leave the same, the monthly payment, month-one costs and totals. Use when someone asks how renting and buying compare, how long they would need to stay for the two to cross, or what rent matches buying a home. Do not use for rental-property investing, for how much someone can borrow, for tax planning or for adjustable-rate loans. Rates are held constant; income-tax effects of owning and tax on the home sale are not modeled. It reports modeled money only and does not say whether to rent or buy. Amounts can be in any one currency; none is converted.

ParametersJSON Schema
NameRequiredDescriptionDefault
pmi_pctNoMortgage insurance (PMI), % of loan a year, 0 to 3. Default 0
currencyNoCurrency for the amounts in the summary and the link. Default USD; amounts are never converted
keep_homeNoTrue: the home is kept at the end of the stay and counted as equity, not cash; false: it is sold. Default false
home_priceYesHome price, in the currency chosen, 1000 to 100000000. Default 400000
term_yearsNoLoan term, years, 1 to 40. Default 30
hoa_monthlyNoHOA or condo fees, a month, in the currency chosen, 0 to 10000. Default 0
monthly_rentYesMonthly rent, a month, in the currency chosen, 1 to 1000000. Default 2000
years_to_stayNoYears you plan to stay, whole years, 1 to 40. Default 10
annual_rate_pctNoMortgage rate, % a year, fixed, 0 to 25. Default 6.5
cost_growth_pctNoYearly increase in insurance and HOA, % a year, -5 to 15. Default 3
maintenance_pctNoMaintenance, % of home value a year, 0 to 5. Default 1
buying_costs_pctNoClosing costs when buying, % of price, 0 to 10. Default 3
down_payment_pctNoDown payment, % of price, 0 to 100. Default 20
property_tax_pctNoProperty tax, % of home value a year, 0 to 5. Default 1
rent_increase_pctNoYearly rent increase, % a year, -10 to 15. Default 3
selling_costs_pctNoAgent and closing costs when selling, % of sale price, 0 to 10. Default 6
investment_tax_pctNoTax on investment gains, % of gains, 0 to 50. Default 0
home_insurance_yearlyNoHome insurance, a year, in the currency chosen, 0 to 100000. Default 1500
home_value_growth_pctNoHome value growth, % a year, -10 to 15. Default 3
investment_return_pctNoReturn on invested savings, % a year, -10 to 20. Default 6
renters_insurance_monthlyNoRenter's insurance, a month, in the currency chosen, 0 to 1000. Default 0

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so credit is for added context: it explains the simulation mechanics (same cash, same monthly spend, difference invested), states key modeling limitations (rates held constant, income-tax effects and sale tax not modeled), and clarifies it reports modeled money only rather than a recommendation. The limitations are the valuable additions here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the comparison method and behavior before usage guidance, which is well-ordered. However, the description is dense and lists many return fields (first-year crossover, break-even rent, monthly payment, month-one costs) in one long sentence that could be trimmed, especially since an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a 21-parameter tool with an output schema and full annotations, the description covers the algorithm, limitations, exclusions, currency handling, and the distinction between modeled output and advice. Nothing material for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented with ranges and defaults. The description adds only high-level modeling context (currency never converted, rates fixed) rather than per-parameter meaning. Baseline 3 is correct when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (compares buying vs renting) and immediately distinguishes itself from siblings like calculate_savings_vs_investing by naming the exact methodology: fixed-rate mortgage vs investing the difference. An agent can select this without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives three triggering questions ('how renting and buying compare', 'how long they would need to stay', 'what rent matches buying a home') and four exclusions (rental-property investing, borrowing capacity, tax planning, ARMs). This is model when-to-use/when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_compare_time_periodsOne investment across reference periodsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNoDollars invested in each period. Default 1000
tickerYesStock 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.
periodsNoWhich periods to include. Omit for all
as_of_dateNoEnd date, YYYY-MM-DD. Omit for the latest available price

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds substantive context beyond them: daily closing prices adjusted for splits and reinvested dividends, US-dollar denomination, skipped periods surfaced with a reason, and an explicit 'not a prediction' caveat. It stops short of stating rate limits or latency, which keeps it at a 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core operation, then usage routing, then limits. The long enumeration of periods is justified because the underlying enum values are opaque, but the single dense paragraph could be broken up and a few clauses ('Each row gives lump sum and monthly investing results...') lean toward return-format detail that the output schema already covers.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter read tool with an output schema, the description covers what an agent needs: scope, period definitions, ticker universe expectations, currency, skip behavior, and an explicit not-a-prediction boundary. Return-shape details are present but non-essential, and nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description earns above baseline by decoding the cryptic enum labels into real semantics, mapping dotcom_peak, covid_low, low_2022 etc. to actual dates and explaining that they are S&P 500 closing highs and lows, plus clarifying that event dates are index-level while the ticker drives the result.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: what a fixed amount in a named US stock or index ETF became across defined reference periods ending today or on as_of_date. It explicitly names the sibling it is not (smartfin_compare_investment_strategies) and enumerates the exact period set, so an agent can distinguish it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives positive triggers ('how a stock did over several time frames', or naming a moment like 'from the COVID low') and an explicit exclusion with the correct alternative for custom start months. Nothing about when to reach for this tool is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_compare_two_stocksCompare two stocks over the same datesA
Read-onlyIdempotent
Inspect

Compares two US-listed stocks or index ETFs on identical dates with the same money, on daily closing prices adjusted for stock splits with dividends reinvested, the way SmartFin's Compare Two Stocks page does. Returns, for each, the value of the starting amount and its total and yearly return, the worst fall with its dates and the months back to the high before it (or that it hasn't recovered), and, with monthly_amount, the whole holding (with_monthly: purchases made, money put in, value, and total return on the money put in) with that amount added once for each 1st of a month after the start date and on or before the end date, on the trading day nearest that 1st. Use when someone asks how two stocks or funds did against each other, e.g. "apple vs microsoft stock over 10 years" or "voo vs qqq since 2015". Do not use for one stock (use smartfin_calculate_investment_return), for ways of buying one stock (use smartfin_compare_investment_strategies), for future returns, or to say which to buy: it states both figures and never picks one. Limits: today's S&P 500 companies and major index ETFs only, prices in US dollars; both start on the same trading day, and when one stock's history starts later, both start then and the summary says so.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNoStarting amount invested once in each, in US dollars. Default 1000
end_dateNoEnd date, YYYY-MM-DD; a weekend or holiday uses the nearest trading day. Omit for the latest close
start_dateNoStart date, YYYY-MM-DD; a weekend or holiday uses the nearest trading day (the earlier on a tie). Omit for 10 years before the latest close
first_tickerYesStock 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.
second_tickerYesStock 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.
monthly_amountNoOptional amount added to each every month after the start, in US dollars. Default 0

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description goes well beyond them: it discloses the exact computation basis, that both series start on the same trading day with later-start tickers truncating both, and that the summary flags this. It also clarifies the tool never picks a winner, which is a genuine behavioral constraint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then usage, then limits, and essentially every clause carries information. It is a very long run-on sentence, which slightly hurts scannability, but there is little filler to cut.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite six parameters, a complex return shape, and date-alignment edge cases, the description covers scope limits, alignment rules, monthly-contribution behavior, and the no-recommendation guarantee. With an output schema present, return formatting need not be re-explained, and nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the description nevertheless adds real meaning beyond the schema by explaining the monthly_amount mechanics (added once per 1st of month after start, executed on the nearest trading day) and the shared-start-date alignment behavior, which the schema does not spell out.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (compares two US-listed stocks or index ETFs on identical dates) and pins down the methodology (split-adjusted closing prices, dividends reinvested). It explicitly names the siblings it is not (smartfin_calculate_investment_return, smartfin_compare_investment_strategies), so an agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete positive triggers ('apple vs microsoft stock over 10 years', 'voo vs qqq since 2015') and explicit exclusions with the correct alternative named for each (one stock, buying strategies, future returns, buy recommendations). Limits on coverage (S&P 500 + major ETFs only) are stated up front.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_get_embed_codePut a SmartFin calculator on a websiteA
Read-onlyIdempotent
Inspect

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: compare_two_stocks (Compare Two Stocks), 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), mortgage_payoff (Mortgage payoff calculator), down_payment (Down payment calculator), cagr (CAGR calculator), rule_of_72 (Rule of 72 calculator), inflation (Inflation calculator), fire (FIRE calculator), withdrawal (Withdrawal planner), savings_vs_investing (Savings vs investing calculator), rent_vs_buy (Rent vs buy calculator), simple_interest (Simple interest calculator), future_value (Future value calculator), present_value (Present value calculator), roi (ROI calculator), profit_margin (Profit margin calculator). 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).

ParametersJSON Schema
NameRequiredDescriptionDefault
currencyNoShow this currency to every reader. Omit to let each reader choose
calculatorYesWhich calculator to embed

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, not open-world), so the bar is lower; the description still adds real context: free, no sign-up, no cookies or tracking, the widget fills its container width, and it follows the reader's light/dark mode. What it does not cover is the exact shape of the returned HTML or any sizing/attribute caveats, which is the only remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The value proposition (one iframe line, free, no sign-up, no tracking) and the routing rules are front-loaded, and the closing exclusion sentence is well placed. The 21-item calculator enumeration is bulky, but it is partly justified because it annotates bare enum keys with display names.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value explanation is not required, and the description covers purpose, trigger, exclusion, embed properties, and the calculator catalogue. Currency behavior is left entirely to the schema, and no guidance is given on placement or sizing caveats beyond width-filling, leaving a small completeness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters have enums, so the schema carries the syntax burden (baseline 3). The description adds value by mapping every cryptic enum key to a human-readable calculator name (e.g. rule_of_72 → 'Rule of 72 calculator'), which helps the agent pick the right one; the currency parameter itself is not elaborated in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific deliverable ('The HTML to put one of SmartFin's free calculators on a website') and immediately differentiates from the sibling smartfin_calculate_* tools by declaring it is not for computing anything. An agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit positive trigger ('Use when the user wants a calculator on their own site or asks how to add one') and an explicit exclusion with the alternative ('Do not use to calculate anything (use the other smartfin_ tools)'). Both when-to-use and when-not-to-use are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smartfin_project_savings_growthProject savings growthA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearsYesNumber of years
currencyNoCurrency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD
principalYesStarting amount in the currency chosen
annual_rate_pctYesAssumed yearly rate in %, e.g. 7
compounds_per_yearNo1 yearly, 2 twice a year, 4 quarterly, 12 monthly, 365 daily. Default 12
monthly_contributionNoAdded each month, in the currency chosen. Default 0

Output Schema

ParametersJSON Schema
NameRequiredDescription
citeYesHow to credit this result
dataYes
nextYesSuggested follow-up calls
linksYes
how_toYesSteps for the user to see or redo this on smartfin.fyi
sourceYes
summaryYesPlain-language result the assistant can quote

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/idempotent/non-destructive, and an output schema exists, so the description's remaining burden is light. It still adds genuine value by calling out what the result contains (balance, total paid in, interest earned) and, importantly, framing the fixed rate as an assumption rather than a forecast — a real interpretive caveat. It stops short of behavioral detail like sign conventions for negative rates, but that is minor here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each earning its place: purpose, output, use-case routing, and a caution. The scoping and the sibling alternative are front-loaded rather than buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A read-only, idempotent calculator with a full output schema and 100% parameter documentation. Purpose, routing, and the interpretive caveat are all present; nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and two parameters carry enums with defaults, so the schema does the heavy lifting. The description echoes 'monthly contributions' and 'compounding frequency' but adds no format, default, or interaction detail beyond what the schema already provides. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific computation — future balance of savings/investment at a fixed yearly rate with optional contributions and compounding — and the exclusion clause names the sibling it must not be confused with (smartfin_calculate_investment_return). An agent can distinguish this from the ~19 other calculators without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('forward-looking how much will I have questions at an assumed rate') and when-not ('what a real stock did in the past'), with the alternative tool named. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 15 tool updates
    • Addedsmartfin_calculate_down_payment
    • Changedsmartfin_calculate_fire_number4 fields changed
      • changedInput schema / properties / annual_expenses / description
        Previous value: -"Yearly spending today, in dollars"New value: +"Yearly spending today, in the currency chosen"
      • changedInput schema / properties / annual_savings / description
        Previous value: -"Added each year, in dollars (12 x a monthly amount). Default 0"New value: +"Added each year, in the currency chosen (12 x a monthly amount). Default 0"
      • addedInput schema / properties / currency
        Added value: +{
        +  "description": "Currency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD",
        +  "enum": [
        +    "USD",
        +    "EUR",
        +    "GBP",
        +    "CHF",
        +    "AUD",
        +    "CAD",
        +    "SGD",
        +    "HKD",
        +    "INR",
        +    "JPY"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / current_savings / description
        Previous value: -"Invested today, in dollars. Default 0"New value: +"Invested today, in the currency chosen. Default 0"
    • Changedsmartfin_calculate_future_value2 fields changed
      • addedInput schema / properties / currency
        Added value: +{
        +  "description": "Currency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD",
        +  "enum": [
        +    "USD",
        +    "EUR",
        +    "GBP",
        +    "CHF",
        +    "AUD",
        +    "CAD",
        +    "SGD",
        +    "HKD",
        +    "INR",
        +    "JPY"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / present_value / description
        Previous value: -"Amount today in dollars"New value: +"Amount today in the currency chosen"
    • Changedsmartfin_calculate_inflation_impact2 fields changed
      • changedInput schema / properties / amount / description
        Previous value: -"Amount in dollars"New value: +"Amount in the currency chosen"
      • addedInput schema / properties / currency
        Added value: +{
        +  "description": "Currency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD",
        +  "enum": [
        +    "USD",
        +    "EUR",
        +    "GBP",
        +    "CHF",
        +    "AUD",
        +    "CAD",
        +    "SGD",
        +    "HKD",
        +    "INR",
        +    "JPY"
        +  ],
        +  "type": "string"
        +}
    • Changedsmartfin_calculate_loan_payment3 fields changed
      • addedInput schema / properties / currency
        Added value: +{
        +  "description": "Currency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD",
        +  "enum": [
        +    "USD",
        +    "EUR",
        +    "GBP",
        +    "CHF",
        +    "AUD",
        +    "CAD",
        +    "SGD",
        +    "HKD",
        +    "INR",
        +    "JPY"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / home_price / description
        Previous value: -"Mortgage only: home price, in dollars, with down_payment_pct"New value: +"Mortgage only: home price, in the currency chosen, with down_payment_pct"
      • changedInput schema / properties / loan_amount / description
        Previous value: -"Amount borrowed, in dollars. Give this or home_price"New value: +"Amount borrowed, in the currency chosen. Give this or home_price"
    • Changedsmartfin_calculate_missing_variable3 fields changed
      • addedInput schema / properties / currency
        Added value: +{
        +  "description": "Currency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD",
        +  "enum": [
        +    "USD",
        +    "EUR",
        +    "GBP",
        +    "CHF",
        +    "AUD",
        +    "CAD",
        +    "SGD",
        +    "HKD",
        +    "INR",
        +    "JPY"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / future_value / description
        Previous value: -"Amount at the end in dollars. Leave out when solving for future_value"New value: +"Amount at the end in the currency chosen. Leave out when solving for future_value"
      • changedInput schema / properties / present_value / description
        Previous value: -"Starting amount in dollars. Leave out when solving for present_value"New value: +"Starting amount in the currency chosen. Leave out when solving for present_value"
    • Addedsmartfin_calculate_mortgage_payoff
    • Changedsmartfin_calculate_present_value2 fields changed
      • addedInput schema / properties / currency
        Added value: +{
        +  "description": "Currency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD",
        +  "enum": [
        +    "USD",
        +    "EUR",
        +    "GBP",
        +    "CHF",
        +    "AUD",
        +    "CAD",
        +    "SGD",
        +    "HKD",
        +    "INR",
        +    "JPY"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / future_value / description
        Previous value: -"Amount due later, in dollars"New value: +"Amount due later, in the currency chosen"
    • Changedsmartfin_calculate_profit_margin3 fields changed
      • addedInput schema / properties / currency
        Added value: +{
        +  "description": "Currency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD",
        +  "enum": [
        +    "USD",
        +    "EUR",
        +    "GBP",
        +    "CHF",
        +    "AUD",
        +    "CAD",
        +    "SGD",
        +    "HKD",
        +    "INR",
        +    "JPY"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / revenue / description
        Previous value: -"Revenue for the period in dollars, above 0"New value: +"Revenue for the period in the currency chosen, above 0"
      • changedInput schema / properties / total_costs / description
        Previous value: -"Total costs for the same period in dollars; it can be above revenue"New value: +"Total costs for the same period in the currency chosen; it can be above revenue"
    • Changedsmartfin_calculate_retirement_withdrawal4 fields changed
      • changedInput schema / properties / balance / description
        Previous value: -"Starting balance, in dollars"New value: +"Starting balance, in the currency chosen"
      • addedInput schema / properties / currency
        Added value: +{
        +  "description": "Currency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD",
        +  "enum": [
        +    "USD",
        +    "EUR",
        +    "GBP",
        +    "CHF",
        +    "AUD",
        +    "CAD",
        +    "SGD",
        +    "HKD",
        +    "INR",
        +    "JPY"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / lasts_forever / description
        Previous value: -"For how_much: the withdrawal that never touches the principal"New value: +"For how_much: the withdrawal that never touches the principal. At a return of 0% or below no amount qualifies, and withdrawal_per_period is 0"
      • changedInput schema / properties / withdrawal_amount / description
        Previous value: -"For how_long: each withdrawal, in dollars, at the chosen frequency"New value: +"For how_long: each withdrawal, in the currency chosen, at the chosen frequency"
    • Changedsmartfin_calculate_roi3 fields changed
      • addedInput schema / properties / currency
        Added value: +{
        +  "description": "Currency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD",
        +  "enum": [
        +    "USD",
        +    "EUR",
        +    "GBP",
        +    "CHF",
        +    "AUD",
        +    "CAD",
        +    "SGD",
        +    "HKD",
        +    "INR",
        +    "JPY"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / final_value / description
        Previous value: -"Final value in dollars; it can be below the initial amount"New value: +"Final value in the currency chosen; it can be below the initial amount"
      • changedInput schema / properties / initial_value / description
        Previous value: -"Initial investment in dollars, above 0"New value: +"Initial investment in the currency chosen, above 0"
    • Changedsmartfin_calculate_simple_interest2 fields changed
      • addedInput schema / properties / currency
        Added value: +{
        +  "description": "Currency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD",
        +  "enum": [
        +    "USD",
        +    "EUR",
        +    "GBP",
        +    "CHF",
        +    "AUD",
        +    "CAD",
        +    "SGD",
        +    "HKD",
        +    "INR",
        +    "JPY"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / principal / description
        Previous value: -"Starting amount in dollars, above 0"New value: +"Starting amount in the currency chosen, above 0"
    • Addedsmartfin_compare_two_stocks
    • Changedsmartfin_get_embed_code1 field changed
      • changedInput schema / properties / calculator / enum
        Previous value: -[
        -  "investment",
        -  "compound_interest",
        -  "mortgage",
        -  "car_loan",
        -  "student_loan",
        -  "refinance",
        -  "cagr",
        -  "rule_of_72",
        -  "inflation",
        -  "fire",
        -  "withdrawal",
        -  "savings_vs_investing",
        -  "rent_vs_buy",
        -  "simple_interest",
        -  "future_value",
        -  "present_value",
        -  "roi",
        -  "profit_margin"
        -]New value: +[
        +  "compare_two_stocks",
        +  "investment",
        +  "compound_interest",
        +  "mortgage",
        +  "car_loan",
        +  "student_loan",
        +  "refinance",
        +  "mortgage_payoff",
        +  "down_payment",
        +  "cagr",
        +  "rule_of_72",
        +  "inflation",
        +  "fire",
        +  "withdrawal",
        +  "savings_vs_investing",
        +  "rent_vs_buy",
        +  "simple_interest",
        +  "future_value",
        +  "present_value",
        +  "roi",
        +  "profit_margin"
        +]
    • Changedsmartfin_project_savings_growth3 fields changed
      • addedInput schema / properties / currency
        Added value: +{
        +  "description": "Currency symbol for the amounts in the summary only; amounts are never converted. The link opens the page in US dollars, and how_to says to pick the currency there. Default USD",
        +  "enum": [
        +    "USD",
        +    "EUR",
        +    "GBP",
        +    "CHF",
        +    "AUD",
        +    "CAD",
        +    "SGD",
        +    "HKD",
        +    "INR",
        +    "JPY"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / monthly_contribution / description
        Previous value: -"Added each month, in dollars. Default 0"New value: +"Added each month, in the currency chosen. Default 0"
      • changedInput schema / properties / principal / description
        Previous value: -"Starting amount in dollars"New value: +"Starting amount in the currency chosen"
  2. 9 tool updates
    • Addedsmartfin_calculate_future_value
    • Addedsmartfin_calculate_missing_variable
    • Addedsmartfin_calculate_present_value
    • Addedsmartfin_calculate_profit_margin
    • Addedsmartfin_calculate_roi
    • Addedsmartfin_calculate_savings_vs_investing
    • Addedsmartfin_calculate_simple_interest
    • Addedsmartfin_compare_rent_vs_buy
    • Changedsmartfin_get_embed_code1 field changed
      • changedInput schema / properties / calculator / enum
        Previous value: -[
        -  "investment",
        -  "compound_interest",
        -  "mortgage",
        -  "car_loan",
        -  "student_loan",
        -  "refinance",
        -  "cagr",
        -  "rule_of_72",
        -  "inflation",
        -  "fire",
        -  "withdrawal"
        -]New value: +[
        +  "investment",
        +  "compound_interest",
        +  "mortgage",
        +  "car_loan",
        +  "student_loan",
        +  "refinance",
        +  "cagr",
        +  "rule_of_72",
        +  "inflation",
        +  "fire",
        +  "withdrawal",
        +  "savings_vs_investing",
        +  "rent_vs_buy",
        +  "simple_interest",
        +  "future_value",
        +  "present_value",
        +  "roi",
        +  "profit_margin"
        +]
  3. 1 tool update
    • Changedsmartfin_calculate_fire_number1 field changed
      • changedInput schema / properties / withdrawal_rate_pct / description
        Previous value: -"Safe withdrawal rate in %. Default 4"New value: +"Withdrawal-rate assumption in %. Default 4"
  4. 9 tool updates
    • Changedsmartfin_calculate_fire_number1 field changed
      • addedOutput schema / properties / links / properties / page
        Added value: +{
        +  "description": "SmartFin's page for this stock, when it has one",
        +  "type": "string"
        +}
    • Changedsmartfin_calculate_inflation_impact1 field changed
      • addedOutput schema / properties / links / properties / page
        Added value: +{
        +  "description": "SmartFin's page for this stock, when it has one",
        +  "type": "string"
        +}
    • Changedsmartfin_calculate_investment_return1 field changed
      • addedOutput schema / properties / links / properties / page
        Added value: +{
        +  "description": "SmartFin's page for this stock, when it has one",
        +  "type": "string"
        +}
    • Changedsmartfin_calculate_loan_payment1 field changed
      • addedOutput schema / properties / links / properties / page
        Added value: +{
        +  "description": "SmartFin's page for this stock, when it has one",
        +  "type": "string"
        +}
    • Changedsmartfin_calculate_retirement_withdrawal1 field changed
      • addedOutput schema / properties / links / properties / page
        Added value: +{
        +  "description": "SmartFin's page for this stock, when it has one",
        +  "type": "string"
        +}
    • Changedsmartfin_compare_investment_strategies1 field changed
      • addedOutput schema / properties / links / properties / page
        Added value: +{
        +  "description": "SmartFin's page for this stock, when it has one",
        +  "type": "string"
        +}
    • Changedsmartfin_compare_time_periods1 field changed
      • addedOutput schema / properties / links / properties / page
        Added value: +{
        +  "description": "SmartFin's page for this stock, when it has one",
        +  "type": "string"
        +}
    • Changedsmartfin_get_embed_code1 field changed
      • addedOutput schema / properties / links / properties / page
        Added value: +{
        +  "description": "SmartFin's page for this stock, when it has one",
        +  "type": "string"
        +}
    • Changedsmartfin_project_savings_growth1 field changed
      • addedOutput schema / properties / links / properties / page
        Added value: +{
        +  "description": "SmartFin's page for this stock, when it has one",
        +  "type": "string"
        +}
  5. 9 tool updates
    • First observedsmartfin_calculate_fire_number
    • First observedsmartfin_calculate_inflation_impact
    • First observedsmartfin_calculate_investment_return
    • First observedsmartfin_calculate_loan_payment
    • First observedsmartfin_calculate_retirement_withdrawal
    • First observedsmartfin_compare_investment_strategies
    • First observedsmartfin_compare_time_periods
    • First observedsmartfin_get_embed_code
    • First observedsmartfin_project_savings_growth

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Tax-aware retirement planning for Canada and the US. CPP/OAS and Social Security timing, RRSP/TFSA/401k/IRA projections, Monte Carlo simulation, withdrawal order optimization, and historical backtesting against 150 years of market data.
    2
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides market-data and quant-research tools including live stock prices, price history, moving averages, and SMA-crossover backtesting, with a synthetic-data fallback when external data is unavailable.
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables point-in-time backtesting on daily bars with declarative strategy specs and deterministic simulated runs, offering two tool surfaces without needing API keys or network access.
    10
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Provides 77 deterministic financial calculators, live market data, and a meta-advisor that chains tools into prioritized plans from plain-language descriptions.
    77
    20 PyPI
    6
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources