Skip to main content
Glama

Senaro Personal Finance

Mortgage Terms Comparison

compare_mortgage_terms
Read-onlyIdempotent

Calculation, not advice. Verify with a professional before acting. Compare two fixed-rate mortgage options side-by-side:

  • 15 vs 30 year,

  • different rates,

  • points vs no points, or

  • any two terms.

Shows total interest, monthly payment breakdown (with tax, insurance, PMI, HOA), equity buildup, and, critically, what happens if you take the cheaper mortgage and invest the monthly savings. Finds the break-even investment return rate.

Includes tax deduction analysis (itemizing vs standard deduction), PMI auto-removal tracking per the Homeowners Protection Act, and, when invest_the_difference is on (the default) and filing_status and annual_gross_income are given, an after-tax net worth comparison.

Pick this to compare two mortgage structures on a purchase, such as 15 versus 30 year or points versus no points; pick calculate_refi_breakeven when the comparison is against your existing loan and a refinance offer, and pick compare_payoff_strategies when the question is payoff strategy on revolving debt, not a mortgage term.

Note: ARM (adjustable-rate) mortgages are not yet supported.

Input Schema

NameRequiredDescriptionDefault
option_aYesThe first fixed-rate mortgage option to compare. Required.
option_bYesThe second fixed-rate mortgage option to compare, same shape as option_a. Required. Must differ from option_a on at least one of term_years, annual_rate_pct, or points.
tax_yearNoTax year, 2025 or 2026, selecting the IRS standard-deduction table for the itemize-vs-standard analysis. The after-tax view counts it as year 1 of the horizon, so the assumed sale of the investments falls in tax year tax_year + time_horizon_years - 1. Optional; defaults to 2026 when omitted.
home_priceYesHome purchase price in dollars. Required. Must be positive and no more than $1,000,000,000.
hoa_monthlyNoMonthly homeowners association dues in dollars. Optional; defaults to 0 when omitted. Must be zero or more and no more than $1,000,000,000.
pmi_monthlyNoMonthly PMI (private mortgage insurance) in dollars, charged when down payment is below 20%. Optional; defaults to 0 when omitted. Must be zero or more and no more than $1,000,000,000.
filing_statusNoTax filing status: 'single', 'married', or 'head_of_household'. Optional; matched case-insensitively. Required, with annual_gross_income, for the after-tax comparison.
full_scheduleNoWhether to return the full month-by-month amortization schedule instead of the compact default. Optional; defaults to false when omitted.
tax_bracket_pctNoMarginal tax bracket as a percentage, 0-50. Optional; values the mortgage-interest deduction (interest_deduction_value) and the yearly deduction savings credited to each option's investments in the after-tax comparison. It is never applied to investment gains.
closing_cost_pctNoClosing costs as a percentage of the loan amount, 0-20, points excluded. Optional; defaults to the Urban Institute loan-size regressive schedule (about 4.6% at a $97K loan down to about 1.4% at a $679K loan) when omitted. Pass 0 to model zero closing costs.
down_payment_pctNoDown payment as a percent of home_price, e.g. 20 for 20%. Optional; defaults to 20 when omitted. Range 0-100 applies only when down_payment_amount is absent; when down_payment_amount is supplied, down_payment_pct is ignored entirely, including in provenance.
standard_deductionNoStandard deduction in dollars, compared against itemized mortgage-interest deductions. Optional; defaults to the IRS basic standard deduction for tax_year and filing_status when omitted (TY2026: 16100 single, 32200 married, 24150 head_of_household; TY2025: 15750 single, 31500 married, 23625 head_of_household; source Rev. Proc. 2025-32). Must be zero or more.
time_horizon_yearsNoNumber of years to project the invest-the-difference comparison, 1-40. Optional; defaults to the maximum of both options' term_years when omitted.
annual_gross_incomeNoAnnual gross income in dollars, used as adjusted gross income for the tax on investment gains at the horizon. Optional; with filing_status it enables the after-tax comparison. Held at this amount in the year of the assumed investment sale. Must be zero or more and no more than $1,000,000,000.
down_payment_amountNoDown payment in dollars. Optional; overrides down_payment_pct entirely, including its provenance row, when supplied. Must be at least $0 and strictly below home_price.
pmi_removal_ltv_pctNoLoan-to-value percentage at which to model borrower-requested PMI removal, 50-100. Optional; when omitted, PMI is modeled as removed at the 78% HPA automatic-termination threshold instead. The rejection guard applies only when pmi_monthly is above 0 and the loan's own initial LTV is above 80 percent, the range where PMI applies: there, a value at or above that initial LTV is rejected, because the requested removal point would already be met at the first payment, so no PMI would be modeled for any month of the loan. When pmi_monthly is omitted or 0, no such check runs, whatever the LTV, and the supplied value is accepted but changes nothing in the response, because no PMI is modeled in that case. Either way PMI also stops at the statutory amortization midpoint of each option's own term (12 U.S.C. §4901(7), §4902(c)), which this value cannot postpone.
property_tax_annualNoAnnual property tax in dollars, for true monthly cost. Optional; defaults to 0 when omitted. Must be zero or more.
extra_monthly_paymentNoExtra principal payment in dollars, applied equally to BOTH options every month. Optional; defaults to 0 when omitted. Must be zero or more and no more than $1,000,000,000.
home_insurance_annualNoAnnual home insurance in dollars. Optional; defaults to 0 when omitted. Must be zero or more.
invest_the_differenceNoWhether both options deploy the same total budget every month: the higher option's P&I plus any extra_monthly_payment plus the month-1 PMI both carry. The cheaper-mortgage holder invests the payment gap each month; an option that stops paying PMI earlier invests the freed cash; the option with the lower upfront points cost invests the difference at month 0; after payoff the full budget goes to investments. See comparison_basis in the response. Optional; defaults to true when omitted.
investment_return_pctNoAssumed investment return on the invested payment gap, as a percentage, an EFFECTIVE ANNUAL rate; the monthly compounding step is (1+pct/100)^(1/12)-1. Optional; defaults to the cited Senaro long-run S&P 500 nominal return, about 10%, when omitted. Range 0-30.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedInput schema / properties / annual_gross_income
      Added value: +{
      +  "default": null,
      +  "description": "Annual gross income in dollars, used as adjusted gross income for the tax on investment gains at the horizon. Optional; with filing_status it enables the after-tax comparison. Held at this amount in the year of the assumed investment sale. Must be zero or more and no more than $1,000,000,000.",
      +  "maximum": 1000000000,
      +  "minimum": 0,
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • changedInput schema / properties / filing_status / description
      Previous value: -"Tax filing status: 'single', 'married', or 'head_of_household'. Optional; matched case-insensitively."New value: +"Tax filing status: 'single', 'married', or 'head_of_household'. Optional; matched case-insensitively. Required, with annual_gross_income, for the after-tax comparison."
    • changedInput schema / properties / tax_bracket_pct / description
      Previous value: -"Marginal tax bracket as a percentage, 0-50. Optional; enables after-tax investment return and mortgage interest deduction analysis when supplied. The after-tax comparison credits each option's annual deduction savings to its investments at year end."New value: +"Marginal tax bracket as a percentage, 0-50. Optional; values the mortgage-interest deduction (interest_deduction_value) and the yearly deduction savings credited to each option's investments in the after-tax comparison. It is never applied to investment gains."
    • changedInput schema / properties / tax_year / description
      Previous value: -"Tax year, 2025 or 2026, selecting the IRS standard-deduction table for the itemize-vs-standard analysis. Optional; defaults to 2026 when omitted."New value: +"Tax year, 2025 or 2026, selecting the IRS standard-deduction table for the itemize-vs-standard analysis. The after-tax view counts it as year 1 of the horizon, so the assumed sale of the investments falls in tax year tax_year + time_horizon_years - 1. Optional; defaults to 2026 when omitted."
  2. Changed7 schema fields changed
    • addedInput schema / properties / filing_status / enum
      Added value: +[
      +  "single",
      +  "married",
      +  "head_of_household",
      +  null
      +]
    • addedInput schema / properties / option_a / properties / label / maxLength
      Added value: +120
    • addedInput schema / properties / option_b / properties / label / maxLength
      Added value: +120
    • addedInput schema / properties / tax_bracket_pct / maximum
      Added value: +50
    • addedInput schema / properties / tax_bracket_pct / minimum
      Added value: +0
    • addedInput schema / properties / tax_year / maximum
      Added value: +2026
    • addedInput schema / properties / tax_year / minimum
      Added value: +2025
  3. Changed1 schema field changed
    • changedInput schema / properties / pmi_removal_ltv_pct / description
      Previous value: -"Loan-to-value percentage at which to model borrower-requested PMI removal, 50-100. Optional; when omitted, PMI is modeled as removed at the 78% HPA automatic-termination threshold instead. When the loan's own initial loan-to-value is above 80 percent, the range where PMI applies, a value at or above that initial LTV is rejected, because the requested removal point would already be met at the first payment, so no PMI would be modeled for any month of the loan. At or below 80 percent, no such check runs. Either way PMI also stops at the statutory amortization midpoint of each option's own term (12 U.S.C. §4901(7), §4902(c)), which this value cannot postpone."New value: +"Loan-to-value percentage at which to model borrower-requested PMI removal, 50-100. Optional; when omitted, PMI is modeled as removed at the 78% HPA automatic-termination threshold instead. The rejection guard applies only when pmi_monthly is above 0 and the loan's own initial LTV is above 80 percent, the range where PMI applies: there, a value at or above that initial LTV is rejected, because the requested removal point would already be met at the first payment, so no PMI would be modeled for any month of the loan. When pmi_monthly is omitted or 0, no such check runs, whatever the LTV, and the supplied value is accepted but changes nothing in the response, because no PMI is modeled in that case. Either way PMI also stops at the statutory amortization midpoint of each option's own term (12 U.S.C. §4901(7), §4902(c)), which this value cannot postpone."
  4. Changed22 schema fields changed
    • addedInput schema / properties / closing_cost_pct
      Added value: +{
      +  "default": null,
      +  "description": "Closing costs as a percentage of the loan amount, 0-20, points excluded. Optional; defaults to the Urban Institute loan-size regressive schedule (about 4.6% at a $97K loan down to about 1.4% at a $679K loan) when omitted. Pass 0 to model zero closing costs.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / down_payment_amount
      Added value: +{
      +  "default": null,
      +  "description": "Down payment in dollars. Optional; overrides down_payment_pct entirely, including its provenance row, when supplied. Must be at least $0 and strictly below home_price.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / down_payment_pct
      Added value: +{
      +  "default": null,
      +  "description": "Down payment as a percent of home_price, e.g. 20 for 20%. Optional; defaults to 20 when omitted. Range 0-100 applies only when down_payment_amount is absent; when down_payment_amount is supplied, down_payment_pct is ignored entirely, including in provenance.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / extra_monthly_payment
      Added value: +{
      +  "default": null,
      +  "description": "Extra principal payment in dollars, applied equally to BOTH options every month. Optional; defaults to 0 when omitted. Must be zero or more and no more than $1,000,000,000.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / filing_status
      Added value: +{
      +  "default": null,
      +  "description": "Tax filing status: 'single', 'married', or 'head_of_household'. Optional; matched case-insensitively.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / full_schedule
      Added value: +{
      +  "default": null,
      +  "description": "Whether to return the full month-by-month amortization schedule instead of the compact default. Optional; defaults to false when omitted.",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / hoa_monthly
      Added value: +{
      +  "default": null,
      +  "description": "Monthly homeowners association dues in dollars. Optional; defaults to 0 when omitted. Must be zero or more and no more than $1,000,000,000.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / home_insurance_annual
      Added value: +{
      +  "default": null,
      +  "description": "Annual home insurance in dollars. Optional; defaults to 0 when omitted. Must be zero or more.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / home_price
      Added value: +{
      +  "description": "Home purchase price in dollars. Required. Must be positive and no more than $1,000,000,000.",
      +  "type": "number"
      +}
    • addedInput schema / properties / invest_the_difference
      Added value: +{
      +  "default": null,
      +  "description": "Whether both options deploy the same total budget every month: the higher option's P&I plus any extra_monthly_payment plus the month-1 PMI both carry. The cheaper-mortgage holder invests the payment gap each month; an option that stops paying PMI earlier invests the freed cash; the option with the lower upfront points cost invests the difference at month 0; after payoff the full budget goes to investments. See comparison_basis in the response. Optional; defaults to true when omitted.",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / investment_return_pct
      Added value: +{
      +  "default": null,
      +  "description": "Assumed investment return on the invested payment gap, as a percentage, an EFFECTIVE ANNUAL rate; the monthly compounding step is (1+pct/100)^(1/12)-1. Optional; defaults to the cited Senaro long-run S&P 500 nominal return, about 10%, when omitted. Range 0-30.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / option_a
      Added value: +{
      +  "description": "The first fixed-rate mortgage option to compare. Required.",
      +  "properties": {
      +    "annual_rate_pct": {
      +      "description": "Annual interest rate for this option, as a percentage, 0-20, e.g. 6.25. Required.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "is_arm": {
      +      "description": "Whether this option is an adjustable-rate mortgage. Optional; defaults to false when omitted. ARM analysis is not yet supported: true on either option is rejected.",
      +      "type": [
      +        "boolean",
      +        "null"
      +      ]
      +    },
      +    "label": {
      +      "description": "Display label for this option, e.g. '30-year fixed'. Optional; auto-generated when omitted. At most 120 characters.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "points": {
      +      "description": "Discount points bought, each equal to 1% of the loan amount, 0-4. Optional; defaults to 0 when omitted.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "points_rate_reduction_pct": {
      +      "description": "Interest-rate reduction per discount point, in percentage points, 0-1.0. Optional; defaults to 0.25 when omitted.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "term_years": {
      +      "description": "Mortgage term in years, 1-40. Required.",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / option_b
      Added value: +{
      +  "description": "The second fixed-rate mortgage option to compare, same shape as option_a. Required. Must differ from option_a on at least one of term_years, annual_rate_pct, or points.",
      +  "properties": {
      +    "annual_rate_pct": {
      +      "description": "Annual interest rate for this option, as a percentage, 0-20, e.g. 6.25. Required.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "is_arm": {
      +      "description": "Whether this option is an adjustable-rate mortgage. Optional; defaults to false when omitted. ARM analysis is not yet supported: true on either option is rejected.",
      +      "type": [
      +        "boolean",
      +        "null"
      +      ]
      +    },
      +    "label": {
      +      "description": "Display label for this option, e.g. '30-year fixed'. Optional; auto-generated when omitted. At most 120 characters.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "points": {
      +      "description": "Discount points bought, each equal to 1% of the loan amount, 0-4. Optional; defaults to 0 when omitted.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "points_rate_reduction_pct": {
      +      "description": "Interest-rate reduction per discount point, in percentage points, 0-1.0. Optional; defaults to 0.25 when omitted.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "term_years": {
      +      "description": "Mortgage term in years, 1-40. Required.",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / pmi_monthly
      Added value: +{
      +  "default": null,
      +  "description": "Monthly PMI (private mortgage insurance) in dollars, charged when down payment is below 20%. Optional; defaults to 0 when omitted. Must be zero or more and no more than $1,000,000,000.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / pmi_removal_ltv_pct
      Added value: +{
      +  "default": null,
      +  "description": "Loan-to-value percentage at which to model borrower-requested PMI removal, 50-100. Optional; when omitted, PMI is modeled as removed at the 78% HPA automatic-termination threshold instead. When the loan's own initial loan-to-value is above 80 percent, the range where PMI applies, a value at or above that initial LTV is rejected, because the requested removal point would already be met at the first payment, so no PMI would be modeled for any month of the loan. At or below 80 percent, no such check runs. Either way PMI also stops at the statutory amortization midpoint of each option's own term (12 U.S.C. §4901(7), §4902(c)), which this value cannot postpone.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / property_tax_annual
      Added value: +{
      +  "default": null,
      +  "description": "Annual property tax in dollars, for true monthly cost. Optional; defaults to 0 when omitted. Must be zero or more.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / standard_deduction
      Added value: +{
      +  "default": null,
      +  "description": "Standard deduction in dollars, compared against itemized mortgage-interest deductions. Optional; defaults to the IRS basic standard deduction for tax_year and filing_status when omitted (TY2026: 16100 single, 32200 married, 24150 head_of_household; TY2025: 15750 single, 31500 married, 23625 head_of_household; source Rev. Proc. 2025-32). Must be zero or more.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / tax_bracket_pct
      Added value: +{
      +  "default": null,
      +  "description": "Marginal tax bracket as a percentage, 0-50. Optional; enables after-tax investment return and mortgage interest deduction analysis when supplied. The after-tax comparison credits each option's annual deduction savings to its investments at year end.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / tax_year
      Added value: +{
      +  "default": null,
      +  "description": "Tax year, 2025 or 2026, selecting the IRS standard-deduction table for the itemize-vs-standard analysis. Optional; defaults to 2026 when omitted.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / time_horizon_years
      Added value: +{
      +  "default": null,
      +  "description": "Number of years to project the invest-the-difference comparison, 1-40. Optional; defaults to the maximum of both options' term_years when omitted.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • removedInput schema / properties / toolArguments
      Removed value: -{
      -  "description": "JSON object with these parameters:\n\nhome_price: decimal > 0, <= 1,000,000,000 (REQUIRED)\ndown_payment_pct: decimal 0-100 as percentage (optional, default 20)\ndown_payment_amount: decimal >= 0 (optional; overrides down_payment_pct if provided)\n\noption_a (REQUIRED object):\n  - label: string (optional; auto-generated if omitted)\n  - annual_rate_pct: decimal 0-20 as percentage, e.g. 6.25 (REQUIRED)\n  - term_years: int 1-40 (REQUIRED)\n  - is_arm: bool (optional, default false; ARM not yet supported)\n  - points: decimal 0-4 (optional, default 0; discount points bought, each = 1% of loan)\n  - points_rate_reduction_pct: decimal 0-1.0, PERCENTAGE POINTS reduction per point (optional, default 0.25)\n\noption_b (REQUIRED object):\n  - same shape as option_a\n  - Must differ from option_a on at least one of: term_years, annual_rate_pct, or points\n\nproperty_tax_annual: decimal >= 0 (optional, default 0; for true monthly cost)\nhome_insurance_annual: decimal >= 0 (optional, default 0)\npmi_monthly: decimal >= 0, <= 1,000,000,000 (optional, default 0; PMI if < 20% down)\npmi_removal_ltv_pct: decimal 50-100 (optional). When omitted, PMI is modeled as removed at the 78% HPA automatic-termination threshold. Provide a value (e.g. 80) to model borrower-requested removal at that LTV (whichever of 78% or your value is reached first). Either way PMI also stops at the statutory amortization midpoint of each option's own term (12 U.S.C. §4901(7), §4902(c)), which this value cannot postpone.\nhoa_monthly: decimal >= 0 (optional, default 0)\n\ninvest_the_difference: bool (optional, default true). When true, both options deploy the same total budget every month: the higher option's P&I plus any extra_monthly_payment plus the month-1 PMI both carry. The cheaper-mortgage holder invests the payment gap each month; an option that stops paying PMI earlier invests the freed cash; the option with the lower upfront points cost invests the difference at month 0; after payoff the full budget goes to investments. See comparison_basis in the response.\ninvestment_return_pct: decimal 0-30 as percentage, an EFFECTIVE ANNUAL rate; the monthly compounding step is (1+pct/100)^(1/12)-1 (optional; defaults to the cited Senaro long-run S&P 500 nominal return, about 10%)\ntax_bracket_pct: decimal 0-50 as percentage (optional; enables after-tax investment return and mortgage interest deduction analysis; the after-tax comparison credits each option's annual deduction savings to its investments at year end)\nstandard_deduction: decimal (optional. Defaults to the IRS basic standard deduction for tax_year + filing_status. TY2026: 16100 single, 32200 married, 24150 head_of_household. TY2025: 15750 single, 31500 married, 23625 head_of_household. Source: Rev. Proc. 2025-32)\nfiling_status: 'single' | 'married' | 'head_of_household' (optional)\ntax_year: int, 2025 or 2026 (optional, default 2026; selects the IRS standard-deduction table for the itemize-vs-standard analysis)\n\nextra_monthly_payment: decimal >= 0, <= 1,000,000,000 (optional, default 0; extra principal applied equally to BOTH options)\ntime_horizon_years: int 1-40 (optional; default: max of both term_years)\nfull_schedule: bool (optional, default false; compact amortization by default)\nclosing_cost_pct: decimal 0-20 as percentage of loan amount (optional, default: Urban Institute loan-size regressive schedule (~4.6% at $97K loan down to ~1.4% at $679K), points excluded. Pass 0 to model zero closing costs)"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "toolArguments"
      -]New value: +[
      +  "home_price",
      +  "option_a",
      +  "option_b"
      +]
  5. First observed

TDQS

A4.9/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 still adds substantial behavior: it is a calculation rather than advice, it emits total interest, monthly payment breakdown, equity buildup, a break-even investment return, tax deduction analysis, HPA-based PMI removal, and an after-tax net worth view gated on invest_the_difference plus filing_status and annual_gross_income. ARM non-support is disclosed rather than left for the agent to discover via a validation error.

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 caveat and one-line purpose, then a scannable bullet list for the supported comparison shapes, then a single routing sentence. For a 21-parameter tool the length is proportionate and no sentence is 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?

Despite 21 parameters, nested objects, and no output schema, the description covers outputs (interest totals, equity, break-even return, after-tax net worth), the key default, the sibling routing, and a hard limitation. An agent has enough to decide whether to call it and how to frame the result.

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 goes modestly beyond the per-field text by explaining the interaction that unlocks the after-tax comparison (invest_the_difference default-on together with filing_status and annual_gross_income), but it does not explain the tax_year horizon arithmetic or PMI removal semantics 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 verb+resource (compare two fixed-rate mortgage options side-by-side) and enumerates the comparison cases (15 vs 30, different rates, points vs no points). It also names the sibling tools it is not, so an agent can distinguish it from calculate_refi_breakeven and compare_payoff_strategies without reading 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 ('Pick this to compare two mortgage structures on a purchase') plus when-not-to-use with the exact alternative for each case: refinance comparisons go to calculate_refi_breakeven, payoff-strategy questions go to compare_payoff_strategies. It also excludes ARM mortgages up front.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources