Server definition
- Hash
- sha256:6ac8fce0cc78946a7e5d2410f777ae1475aa293babf81e29f96a51fd19c52de9
- What it is
- What a remote MCP server returned when asked what it offers: 4 tools
The blob, as servednamed by its sha256
{
"instructions": "rentbuy.org rent-vs-buy calculator. Compares 30 years of buying a home against renting and investing, with taxes and one-time costs, using exactly the model behind rentbuy.org (engine 1.3.1, 2026 US federal tax tables).\nUnits: money in USD, rates in percent points (mortgageRate 6.5 means 6.5%). Every input is optional; missing ones take the site defaults ($800k home, 20% down, 6.5% for 30 years, $3,500 rent, 7% return, $200k income married jointly). Giving householdIncome or filingStatus pre-fills federalTaxRate and standardDeduction unless you set them.\nTools: rentbuy_run_scenario (one case, optional yearly detail), rentbuy_compare_scenarios (up to 10 named variants with deltas), rentbuy_sweep (vary one or two inputs, get the crossover). Read resource rentbuy://defaults for field meanings and ranges. All tools are read-only, deterministic and fast; prefer one sweep or compare call over many single runs.\nInteractive UI: rentbuy_open_calculator opens the calculator in the conversation, or in the host's sidebar where it has one. Pass the current scenario inputs and one-time costs when opening it. The UI shares its current resolved inputs and results as model context; use those for follow-up questions, rather than reverting to defaults. Monte Carlo simulations run in the UI and are not included in its deterministic scenario context.\nResults: \"difference\" is buyer minus renter net worth at year 30 after selling costs; yearly net worth is before selling costs. Not modeled: SALT cap, mortgage-interest limit, PMI, capital gains.",
"tools": [
{
"description": "Runs 2 to 10 named scenarios side by side and returns each one's winner, year-30 net worth for both households, break-even year and year-1 cash, plus deltas against the first scenario. Each scenario is an independent set of input overrides and one-time costs on top of the site defaults, so name them by what changes (\"15-year loan\", \"rent $4,500\"). One call replaces many rentbuy_run_scenario calls.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"scenarios": {
"items": {
"additionalProperties": false,
"properties": {
"inputs": {
"additionalProperties": false,
"description": "Any subset of the inputs; missing fields use the rentbuy.org defaults. Money in USD, rates in percent points.",
"properties": {
"adjustedValue": {
"description": "Home value to use in adjustmentYear; 0 disables the adjustment. Unit: USD. Default: 0.",
"maximum": 100000000,
"minimum": 0,
"type": "number"
},
"adjustmentYear": {
"description": "Year in which the home value is reset to adjustedValue; 0 disables it. Unit: year (0 = none). Default: 0.",
"maximum": 30,
"minimum": 0,
"type": "integer"
},
"appreciationRate": {
"description": "Annual home value appreciation (3 = 3%). Unit: % per year. Default: 3.",
"maximum": 30,
"minimum": -20,
"type": "number"
},
"closingCosts": {
"description": "One-time closing costs paid at purchase. Unit: USD. Default: 20000.",
"maximum": 1000000,
"minimum": 0,
"type": "number"
},
"downPayment": {
"description": "Down payment as a percentage of the price (20 = 20%). Unit: % of price. Default: 20.",
"maximum": 100,
"minimum": 0,
"type": "number"
},
"federalTaxRate": {
"description": "Federal marginal rate applied to itemized deductions above the standard deduction. Unit: %. Default: 22.",
"maximum": 60,
"minimum": 0,
"type": "number"
},
"filingStatus": {
"description": "Federal filing status used to pre-fill the tax inputs. Unit: enum. Default: marriedJoint.",
"enum": [
"single",
"marriedJoint",
"headOfHousehold"
],
"type": "string"
},
"hoa": {
"description": "HOA dues, held flat. Unit: USD per month. Default: 0.",
"maximum": 20000,
"minimum": 0,
"type": "number"
},
"homeInsurance": {
"description": "Homeowner insurance premium, held flat. Unit: USD per year. Default: 2400.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"homePrice": {
"description": "Purchase price of the home. Unit: USD. Default: 800000.",
"maximum": 50000000,
"minimum": 10000,
"type": "number"
},
"householdIncome": {
"description": "Household income; with filingStatus it pre-fills federalTaxRate and standardDeduction unless those are given explicitly. Unit: USD per year. Default: 200000.",
"maximum": 100000000,
"minimum": 0,
"type": "number"
},
"interestOnlyPeriod": {
"description": "Interest-only years; only used when mortgageType is interestOnly. Unit: years. Default: 10.",
"maximum": 40,
"minimum": 0,
"type": "integer"
},
"investmentReturn": {
"description": "Effective annual return on invested savings for both households (7 = 7%). Unit: % per year (effective annual). Default: 7.",
"maximum": 30,
"minimum": -20,
"type": "number"
},
"maintenanceRate": {
"description": "Maintenance as a percentage of the current home value. Unit: % of home value per year. Default: 1.",
"maximum": 10,
"minimum": 0,
"type": "number"
},
"monthlyRent": {
"description": "Rent for a comparable home in year 1. Unit: USD per month. Default: 3500.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"mortgageRate": {
"description": "Mortgage interest rate (6.5 = 6.5%). Unit: % per year. Default: 6.5.",
"maximum": 30,
"minimum": 0,
"type": "number"
},
"mortgageTerm": {
"description": "Loan term in years. The analysis horizon is always 30 years. Unit: years. Default: 30.",
"maximum": 40,
"minimum": 1,
"type": "integer"
},
"mortgageType": {
"description": "'amortizing' pays principal and interest; 'interestOnly' pays interest only for interestOnlyPeriod years, then amortizes the balance over the remaining term (a balloon if the period covers the whole term). Unit: enum. Default: amortizing.",
"enum": [
"amortizing",
"interestOnly"
],
"type": "string"
},
"propertyTaxRate": {
"description": "Property tax as a percentage of the current home value. Unit: % of home value per year. Default: 1.25.",
"maximum": 10,
"minimum": 0,
"type": "number"
},
"renovations": {
"description": "One-time renovation spending at purchase; it does not add to the home value. Unit: USD. Default: 0.",
"maximum": 5000000,
"minimum": 0,
"type": "number"
},
"rentIncreaseRate": {
"description": "Annual rent growth (3 = 3%). Unit: % per year. Default: 3.",
"maximum": 30,
"minimum": -10,
"type": "number"
},
"rentersInsurance": {
"description": "Renter insurance; it grows with rent. Unit: USD per year. Default: 300.",
"maximum": 20000,
"minimum": 0,
"type": "number"
},
"sellingCosts": {
"description": "Selling costs subtracted from the headline buy result at year 30. Unit: % of sale price. Default: 6.",
"maximum": 20,
"minimum": 0,
"type": "number"
},
"standardDeduction": {
"description": "Standard deduction the itemized deductions must exceed to save tax. Unit: USD. Default: 32200.",
"maximum": 1000000,
"minimum": 0,
"type": "number"
},
"stateTaxRate": {
"description": "State marginal rate applied the same way. Unit: %. Default: 5.",
"maximum": 30,
"minimum": 0,
"type": "number"
}
},
"type": "object"
},
"name": {
"maxLength": 40,
"minLength": 1,
"type": "string"
},
"oneTimeCosts": {
"description": "Up to 20 one-time costs.",
"items": {
"additionalProperties": false,
"properties": {
"amount": {
"description": "Amount in USD.",
"maximum": 100000000,
"minimum": 0,
"type": "number"
},
"appliesTo": {
"description": "'buy' = a house expense only the buyer pays (the renter invests that amount); 'both' = a general expense both households pay from their investments.",
"enum": [
"buy",
"both"
],
"type": "string"
},
"reason": {
"description": "Label, e.g. \"New roof\".",
"maxLength": 80,
"type": "string"
},
"year": {
"description": "Year of the cost, 1 to 30.",
"maximum": 30,
"minimum": 1,
"type": "integer"
}
},
"required": [
"year",
"amount",
"appliesTo"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
}
},
"required": [
"name"
],
"type": "object"
},
"maxItems": 10,
"minItems": 2,
"type": "array"
}
},
"required": [
"scenarios"
],
"type": "object"
},
"name": "rentbuy_compare_scenarios",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"baseline": {
"description": "Name of the first scenario; deltas are relative to it.",
"type": "string"
},
"meta": {
"additionalProperties": false,
"properties": {
"engineVersion": {
"type": "string"
},
"taxYear": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"engineVersion",
"taxYear"
],
"type": "object"
},
"scenarios": {
"items": {
"additionalProperties": false,
"properties": {
"advantage": {
"type": "number"
},
"breakEvenYear": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
]
},
"buyNetWorthAfterSale": {
"type": "number"
},
"deltaVsBaseline": {
"additionalProperties": false,
"properties": {
"buyNetWorthAfterSale": {
"type": "number"
},
"difference": {
"type": "number"
},
"rentNetWorth": {
"type": "number"
}
},
"required": [
"difference",
"buyNetWorthAfterSale",
"rentNetWorth"
],
"type": "object"
},
"difference": {
"type": "number"
},
"name": {
"type": "string"
},
"rentNetWorth": {
"type": "number"
},
"winner": {
"enum": [
"BUY",
"RENT"
],
"type": "string"
},
"year1MonthlyOwnership": {
"type": "number"
},
"year1MonthlyRent": {
"type": "number"
}
},
"required": [
"name",
"winner",
"advantage",
"difference",
"buyNetWorthAfterSale",
"rentNetWorth",
"breakEvenYear",
"year1MonthlyOwnership",
"year1MonthlyRent",
"deltaVsBaseline"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"baseline",
"scenarios",
"meta"
],
"type": "object"
}
},
{
"description": "Opens an interactive rent-vs-buy calculator with editable inputs, net-worth charts, a year-by-year report and Monte Carlo sensitivity analysis. Use when the user wants to see or adjust a scenario. Pass the inputs and one-time costs from the scenario being discussed; missing inputs use the site defaults. Use the other rentbuy tools for calculations, comparisons and sweeps without opening a new panel.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"inputs": {
"additionalProperties": false,
"description": "Any subset of the inputs; missing fields use the rentbuy.org defaults. Money in USD, rates in percent points.",
"properties": {
"adjustedValue": {
"description": "Home value to use in adjustmentYear; 0 disables the adjustment. Unit: USD. Default: 0.",
"maximum": 100000000,
"minimum": 0,
"type": "number"
},
"adjustmentYear": {
"description": "Year in which the home value is reset to adjustedValue; 0 disables it. Unit: year (0 = none). Default: 0.",
"maximum": 30,
"minimum": 0,
"type": "integer"
},
"appreciationRate": {
"description": "Annual home value appreciation (3 = 3%). Unit: % per year. Default: 3.",
"maximum": 30,
"minimum": -20,
"type": "number"
},
"closingCosts": {
"description": "One-time closing costs paid at purchase. Unit: USD. Default: 20000.",
"maximum": 1000000,
"minimum": 0,
"type": "number"
},
"downPayment": {
"description": "Down payment as a percentage of the price (20 = 20%). Unit: % of price. Default: 20.",
"maximum": 100,
"minimum": 0,
"type": "number"
},
"federalTaxRate": {
"description": "Federal marginal rate applied to itemized deductions above the standard deduction. Unit: %. Default: 22.",
"maximum": 60,
"minimum": 0,
"type": "number"
},
"filingStatus": {
"description": "Federal filing status used to pre-fill the tax inputs. Unit: enum. Default: marriedJoint.",
"enum": [
"single",
"marriedJoint",
"headOfHousehold"
],
"type": "string"
},
"hoa": {
"description": "HOA dues, held flat. Unit: USD per month. Default: 0.",
"maximum": 20000,
"minimum": 0,
"type": "number"
},
"homeInsurance": {
"description": "Homeowner insurance premium, held flat. Unit: USD per year. Default: 2400.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"homePrice": {
"description": "Purchase price of the home. Unit: USD. Default: 800000.",
"maximum": 50000000,
"minimum": 10000,
"type": "number"
},
"householdIncome": {
"description": "Household income; with filingStatus it pre-fills federalTaxRate and standardDeduction unless those are given explicitly. Unit: USD per year. Default: 200000.",
"maximum": 100000000,
"minimum": 0,
"type": "number"
},
"interestOnlyPeriod": {
"description": "Interest-only years; only used when mortgageType is interestOnly. Unit: years. Default: 10.",
"maximum": 40,
"minimum": 0,
"type": "integer"
},
"investmentReturn": {
"description": "Effective annual return on invested savings for both households (7 = 7%). Unit: % per year (effective annual). Default: 7.",
"maximum": 30,
"minimum": -20,
"type": "number"
},
"maintenanceRate": {
"description": "Maintenance as a percentage of the current home value. Unit: % of home value per year. Default: 1.",
"maximum": 10,
"minimum": 0,
"type": "number"
},
"monthlyRent": {
"description": "Rent for a comparable home in year 1. Unit: USD per month. Default: 3500.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"mortgageRate": {
"description": "Mortgage interest rate (6.5 = 6.5%). Unit: % per year. Default: 6.5.",
"maximum": 30,
"minimum": 0,
"type": "number"
},
"mortgageTerm": {
"description": "Loan term in years. The analysis horizon is always 30 years. Unit: years. Default: 30.",
"maximum": 40,
"minimum": 1,
"type": "integer"
},
"mortgageType": {
"description": "'amortizing' pays principal and interest; 'interestOnly' pays interest only for interestOnlyPeriod years, then amortizes the balance over the remaining term (a balloon if the period covers the whole term). Unit: enum. Default: amortizing.",
"enum": [
"amortizing",
"interestOnly"
],
"type": "string"
},
"propertyTaxRate": {
"description": "Property tax as a percentage of the current home value. Unit: % of home value per year. Default: 1.25.",
"maximum": 10,
"minimum": 0,
"type": "number"
},
"renovations": {
"description": "One-time renovation spending at purchase; it does not add to the home value. Unit: USD. Default: 0.",
"maximum": 5000000,
"minimum": 0,
"type": "number"
},
"rentIncreaseRate": {
"description": "Annual rent growth (3 = 3%). Unit: % per year. Default: 3.",
"maximum": 30,
"minimum": -10,
"type": "number"
},
"rentersInsurance": {
"description": "Renter insurance; it grows with rent. Unit: USD per year. Default: 300.",
"maximum": 20000,
"minimum": 0,
"type": "number"
},
"sellingCosts": {
"description": "Selling costs subtracted from the headline buy result at year 30. Unit: % of sale price. Default: 6.",
"maximum": 20,
"minimum": 0,
"type": "number"
},
"standardDeduction": {
"description": "Standard deduction the itemized deductions must exceed to save tax. Unit: USD. Default: 32200.",
"maximum": 1000000,
"minimum": 0,
"type": "number"
},
"stateTaxRate": {
"description": "State marginal rate applied the same way. Unit: %. Default: 5.",
"maximum": 30,
"minimum": 0,
"type": "number"
}
},
"type": "object"
},
"oneTimeCosts": {
"description": "Up to 20 one-time costs.",
"items": {
"additionalProperties": false,
"properties": {
"amount": {
"description": "Amount in USD.",
"maximum": 100000000,
"minimum": 0,
"type": "number"
},
"appliesTo": {
"description": "'buy' = a house expense only the buyer pays (the renter invests that amount); 'both' = a general expense both households pay from their investments.",
"enum": [
"buy",
"both"
],
"type": "string"
},
"reason": {
"description": "Label, e.g. \"New roof\".",
"maxLength": 80,
"type": "string"
},
"year": {
"description": "Year of the cost, 1 to 30.",
"maximum": 30,
"minimum": 1,
"type": "integer"
}
},
"required": [
"year",
"amount",
"appliesTo"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
}
},
"type": "object"
},
"name": "rentbuy_open_calculator",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"advantage": {
"description": "Absolute net worth gap between the two households at year 30, USD.",
"type": "number"
},
"breakEvenYear": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
],
"description": "First year in which the buyer is ahead before selling costs, or null if never within 30 years."
},
"buyNetWorthAfterSale": {
"description": "Buyer net worth at year 30 after selling costs (home equity plus buyer investments minus selling costs).",
"type": "number"
},
"difference": {
"description": "Signed gap: buyNetWorthAfterSale minus rentNetWorth, USD.",
"type": "number"
},
"meta": {
"additionalProperties": false,
"properties": {
"conventions": {
"type": "string"
},
"engineVersion": {
"type": "string"
},
"taxYear": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"engineVersion",
"taxYear",
"conventions"
],
"type": "object"
},
"oneTimeCosts": {
"items": {
"additionalProperties": false,
"properties": {
"amount": {
"description": "Amount in USD.",
"maximum": 100000000,
"minimum": 0,
"type": "number"
},
"appliesTo": {
"description": "'buy' = a house expense only the buyer pays (the renter invests that amount); 'both' = a general expense both households pay from their investments.",
"enum": [
"buy",
"both"
],
"type": "string"
},
"reason": {
"description": "Label, e.g. \"New roof\".",
"maxLength": 80,
"type": "string"
},
"year": {
"description": "Year of the cost, 1 to 30.",
"maximum": 30,
"minimum": 1,
"type": "integer"
}
},
"required": [
"year",
"amount",
"appliesTo"
],
"type": "object"
},
"type": "array"
},
"rentNetWorth": {
"description": "Renter portfolio at year 30.",
"type": "number"
},
"resolvedInputs": {
"additionalProperties": {
"type": [
"number",
"string"
]
},
"description": "The full input set the calculation used, after defaults and tax pre-fill, in the same units as the request.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"totals": {
"additionalProperties": false,
"properties": {
"homeAppreciation": {
"type": "number"
},
"sellingCostAmount": {
"type": "number"
},
"totalInterestPaid": {
"type": "number"
},
"totalPropertyTaxPaid": {
"type": "number"
},
"totalRentPaid": {
"type": "number"
},
"totalTaxSavings": {
"type": "number"
},
"upfrontInvestment": {
"type": "number"
}
},
"required": [
"upfrontInvestment",
"totalInterestPaid",
"totalPropertyTaxPaid",
"totalTaxSavings",
"totalRentPaid",
"homeAppreciation",
"sellingCostAmount"
],
"type": "object"
},
"winner": {
"description": "Which household has more net worth after 30 years, after selling costs on the buy side.",
"enum": [
"BUY",
"RENT"
],
"type": "string"
},
"year1": {
"additionalProperties": false,
"description": "Monthly cash in year 1; ownership includes mortgage, property tax, insurance, maintenance and HOA.",
"properties": {
"afterTaxOwnership": {
"type": "number"
},
"monthlyOwnership": {
"type": "number"
},
"monthlyRent": {
"type": "number"
}
},
"required": [
"monthlyOwnership",
"afterTaxOwnership",
"monthlyRent"
],
"type": "object"
},
"yearly": {
"description": "Present when detail is \"yearly\". Net worth figures here are before selling costs.",
"items": {
"additionalProperties": false,
"properties": {
"afterTaxOwnership": {
"type": "number"
},
"annualInterest": {
"type": "number"
},
"buyNetWorth": {
"type": "number"
},
"buyerInvestments": {
"type": "number"
},
"difference": {
"type": "number"
},
"homeEquity": {
"type": "number"
},
"homeValue": {
"type": "number"
},
"monthlyOwnership": {
"type": "number"
},
"monthlyRent": {
"type": "number"
},
"mortgageBalance": {
"type": "number"
},
"rentNetWorth": {
"type": "number"
},
"taxSavings": {
"type": "number"
},
"year": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"year",
"homeValue",
"mortgageBalance",
"homeEquity",
"buyerInvestments",
"buyNetWorth",
"rentNetWorth",
"difference",
"monthlyOwnership",
"afterTaxOwnership",
"monthlyRent",
"annualInterest",
"taxSavings"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"winner",
"advantage",
"difference",
"buyNetWorthAfterSale",
"rentNetWorth",
"breakEvenYear",
"totals",
"year1",
"resolvedInputs",
"oneTimeCosts",
"meta"
],
"type": "object"
}
},
{
"description": "Runs one 30-year rent-vs-buy comparison with the rentbuy.org model and returns the winner, the net worth of both households at year 30, the break-even year, totals, year-1 monthly cash and the fully resolved inputs. Give only the inputs you want to change; everything else uses the site defaults. Set detail to \"yearly\" to also get the 30 year-by-year rows. Use rentbuy_compare_scenarios or rentbuy_sweep instead of calling this repeatedly.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"detail": {
"description": "\"summary\" (default) or \"yearly\" for the 30 annual rows.",
"enum": [
"summary",
"yearly"
],
"type": "string"
},
"inputs": {
"additionalProperties": false,
"description": "Any subset of the inputs; missing fields use the rentbuy.org defaults. Money in USD, rates in percent points.",
"properties": {
"adjustedValue": {
"description": "Home value to use in adjustmentYear; 0 disables the adjustment. Unit: USD. Default: 0.",
"maximum": 100000000,
"minimum": 0,
"type": "number"
},
"adjustmentYear": {
"description": "Year in which the home value is reset to adjustedValue; 0 disables it. Unit: year (0 = none). Default: 0.",
"maximum": 30,
"minimum": 0,
"type": "integer"
},
"appreciationRate": {
"description": "Annual home value appreciation (3 = 3%). Unit: % per year. Default: 3.",
"maximum": 30,
"minimum": -20,
"type": "number"
},
"closingCosts": {
"description": "One-time closing costs paid at purchase. Unit: USD. Default: 20000.",
"maximum": 1000000,
"minimum": 0,
"type": "number"
},
"downPayment": {
"description": "Down payment as a percentage of the price (20 = 20%). Unit: % of price. Default: 20.",
"maximum": 100,
"minimum": 0,
"type": "number"
},
"federalTaxRate": {
"description": "Federal marginal rate applied to itemized deductions above the standard deduction. Unit: %. Default: 22.",
"maximum": 60,
"minimum": 0,
"type": "number"
},
"filingStatus": {
"description": "Federal filing status used to pre-fill the tax inputs. Unit: enum. Default: marriedJoint.",
"enum": [
"single",
"marriedJoint",
"headOfHousehold"
],
"type": "string"
},
"hoa": {
"description": "HOA dues, held flat. Unit: USD per month. Default: 0.",
"maximum": 20000,
"minimum": 0,
"type": "number"
},
"homeInsurance": {
"description": "Homeowner insurance premium, held flat. Unit: USD per year. Default: 2400.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"homePrice": {
"description": "Purchase price of the home. Unit: USD. Default: 800000.",
"maximum": 50000000,
"minimum": 10000,
"type": "number"
},
"householdIncome": {
"description": "Household income; with filingStatus it pre-fills federalTaxRate and standardDeduction unless those are given explicitly. Unit: USD per year. Default: 200000.",
"maximum": 100000000,
"minimum": 0,
"type": "number"
},
"interestOnlyPeriod": {
"description": "Interest-only years; only used when mortgageType is interestOnly. Unit: years. Default: 10.",
"maximum": 40,
"minimum": 0,
"type": "integer"
},
"investmentReturn": {
"description": "Effective annual return on invested savings for both households (7 = 7%). Unit: % per year (effective annual). Default: 7.",
"maximum": 30,
"minimum": -20,
"type": "number"
},
"maintenanceRate": {
"description": "Maintenance as a percentage of the current home value. Unit: % of home value per year. Default: 1.",
"maximum": 10,
"minimum": 0,
"type": "number"
},
"monthlyRent": {
"description": "Rent for a comparable home in year 1. Unit: USD per month. Default: 3500.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"mortgageRate": {
"description": "Mortgage interest rate (6.5 = 6.5%). Unit: % per year. Default: 6.5.",
"maximum": 30,
"minimum": 0,
"type": "number"
},
"mortgageTerm": {
"description": "Loan term in years. The analysis horizon is always 30 years. Unit: years. Default: 30.",
"maximum": 40,
"minimum": 1,
"type": "integer"
},
"mortgageType": {
"description": "'amortizing' pays principal and interest; 'interestOnly' pays interest only for interestOnlyPeriod years, then amortizes the balance over the remaining term (a balloon if the period covers the whole term). Unit: enum. Default: amortizing.",
"enum": [
"amortizing",
"interestOnly"
],
"type": "string"
},
"propertyTaxRate": {
"description": "Property tax as a percentage of the current home value. Unit: % of home value per year. Default: 1.25.",
"maximum": 10,
"minimum": 0,
"type": "number"
},
"renovations": {
"description": "One-time renovation spending at purchase; it does not add to the home value. Unit: USD. Default: 0.",
"maximum": 5000000,
"minimum": 0,
"type": "number"
},
"rentIncreaseRate": {
"description": "Annual rent growth (3 = 3%). Unit: % per year. Default: 3.",
"maximum": 30,
"minimum": -10,
"type": "number"
},
"rentersInsurance": {
"description": "Renter insurance; it grows with rent. Unit: USD per year. Default: 300.",
"maximum": 20000,
"minimum": 0,
"type": "number"
},
"sellingCosts": {
"description": "Selling costs subtracted from the headline buy result at year 30. Unit: % of sale price. Default: 6.",
"maximum": 20,
"minimum": 0,
"type": "number"
},
"standardDeduction": {
"description": "Standard deduction the itemized deductions must exceed to save tax. Unit: USD. Default: 32200.",
"maximum": 1000000,
"minimum": 0,
"type": "number"
},
"stateTaxRate": {
"description": "State marginal rate applied the same way. Unit: %. Default: 5.",
"maximum": 30,
"minimum": 0,
"type": "number"
}
},
"type": "object"
},
"oneTimeCosts": {
"description": "Up to 20 one-time costs.",
"items": {
"additionalProperties": false,
"properties": {
"amount": {
"description": "Amount in USD.",
"maximum": 100000000,
"minimum": 0,
"type": "number"
},
"appliesTo": {
"description": "'buy' = a house expense only the buyer pays (the renter invests that amount); 'both' = a general expense both households pay from their investments.",
"enum": [
"buy",
"both"
],
"type": "string"
},
"reason": {
"description": "Label, e.g. \"New roof\".",
"maxLength": 80,
"type": "string"
},
"year": {
"description": "Year of the cost, 1 to 30.",
"maximum": 30,
"minimum": 1,
"type": "integer"
}
},
"required": [
"year",
"amount",
"appliesTo"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
}
},
"type": "object"
},
"name": "rentbuy_run_scenario",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"advantage": {
"description": "Absolute net worth gap between the two households at year 30, USD.",
"type": "number"
},
"breakEvenYear": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
],
"description": "First year in which the buyer is ahead before selling costs, or null if never within 30 years."
},
"buyNetWorthAfterSale": {
"description": "Buyer net worth at year 30 after selling costs (home equity plus buyer investments minus selling costs).",
"type": "number"
},
"difference": {
"description": "Signed gap: buyNetWorthAfterSale minus rentNetWorth, USD.",
"type": "number"
},
"meta": {
"additionalProperties": false,
"properties": {
"conventions": {
"type": "string"
},
"engineVersion": {
"type": "string"
},
"taxYear": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"engineVersion",
"taxYear",
"conventions"
],
"type": "object"
},
"oneTimeCosts": {
"items": {
"additionalProperties": false,
"properties": {
"amount": {
"description": "Amount in USD.",
"maximum": 100000000,
"minimum": 0,
"type": "number"
},
"appliesTo": {
"description": "'buy' = a house expense only the buyer pays (the renter invests that amount); 'both' = a general expense both households pay from their investments.",
"enum": [
"buy",
"both"
],
"type": "string"
},
"reason": {
"description": "Label, e.g. \"New roof\".",
"maxLength": 80,
"type": "string"
},
"year": {
"description": "Year of the cost, 1 to 30.",
"maximum": 30,
"minimum": 1,
"type": "integer"
}
},
"required": [
"year",
"amount",
"appliesTo"
],
"type": "object"
},
"type": "array"
},
"rentNetWorth": {
"description": "Renter portfolio at year 30.",
"type": "number"
},
"resolvedInputs": {
"additionalProperties": {
"type": [
"number",
"string"
]
},
"description": "The full input set the calculation used, after defaults and tax pre-fill, in the same units as the request.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"totals": {
"additionalProperties": false,
"properties": {
"homeAppreciation": {
"type": "number"
},
"sellingCostAmount": {
"type": "number"
},
"totalInterestPaid": {
"type": "number"
},
"totalPropertyTaxPaid": {
"type": "number"
},
"totalRentPaid": {
"type": "number"
},
"totalTaxSavings": {
"type": "number"
},
"upfrontInvestment": {
"type": "number"
}
},
"required": [
"upfrontInvestment",
"totalInterestPaid",
"totalPropertyTaxPaid",
"totalTaxSavings",
"totalRentPaid",
"homeAppreciation",
"sellingCostAmount"
],
"type": "object"
},
"winner": {
"description": "Which household has more net worth after 30 years, after selling costs on the buy side.",
"enum": [
"BUY",
"RENT"
],
"type": "string"
},
"year1": {
"additionalProperties": false,
"description": "Monthly cash in year 1; ownership includes mortgage, property tax, insurance, maintenance and HOA.",
"properties": {
"afterTaxOwnership": {
"type": "number"
},
"monthlyOwnership": {
"type": "number"
},
"monthlyRent": {
"type": "number"
}
},
"required": [
"monthlyOwnership",
"afterTaxOwnership",
"monthlyRent"
],
"type": "object"
},
"yearly": {
"description": "Present when detail is \"yearly\". Net worth figures here are before selling costs.",
"items": {
"additionalProperties": false,
"properties": {
"afterTaxOwnership": {
"type": "number"
},
"annualInterest": {
"type": "number"
},
"buyNetWorth": {
"type": "number"
},
"buyerInvestments": {
"type": "number"
},
"difference": {
"type": "number"
},
"homeEquity": {
"type": "number"
},
"homeValue": {
"type": "number"
},
"monthlyOwnership": {
"type": "number"
},
"monthlyRent": {
"type": "number"
},
"mortgageBalance": {
"type": "number"
},
"rentNetWorth": {
"type": "number"
},
"taxSavings": {
"type": "number"
},
"year": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"year",
"homeValue",
"mortgageBalance",
"homeEquity",
"buyerInvestments",
"buyNetWorth",
"rentNetWorth",
"difference",
"monthlyOwnership",
"afterTaxOwnership",
"monthlyRent",
"annualInterest",
"taxSavings"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"winner",
"advantage",
"difference",
"buyNetWorthAfterSale",
"rentNetWorth",
"breakEvenYear",
"totals",
"year1",
"resolvedInputs",
"oneTimeCosts",
"meta"
],
"type": "object"
}
},
{
"description": "Varies one input (or a grid of two) across a range and returns, for every point, the buyer-minus-renter net worth at year 30 after selling costs, the winner, both net worths and the break-even year, plus the interpolated crossover value where the winner flips for single-parameter sweeps. Give values[] or min, max and steps (2 to 50 per axis, at most 400 grid points). Other inputs come from \"base\" or the site defaults. Use it for sensitivity questions such as \"at what rent does buying win?\" or \"how does the result change with the mortgage rate?\".",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"axis": {
"additionalProperties": false,
"properties": {
"max": {
"type": "number"
},
"min": {
"type": "number"
},
"parameter": {
"description": "Input to vary.",
"enum": [
"homePrice",
"downPayment",
"closingCosts",
"renovations",
"mortgageRate",
"mortgageTerm",
"interestOnlyPeriod",
"propertyTaxRate",
"homeInsurance",
"maintenanceRate",
"hoa",
"appreciationRate",
"adjustmentYear",
"adjustedValue",
"sellingCosts",
"monthlyRent",
"rentIncreaseRate",
"rentersInsurance",
"investmentReturn",
"householdIncome",
"federalTaxRate",
"stateTaxRate",
"standardDeduction"
],
"type": "string"
},
"steps": {
"description": "With min and max: number of evenly spaced values (2 to 50).",
"maximum": 50,
"minimum": 2,
"type": "integer"
},
"values": {
"description": "Explicit values to test (2 to 50).",
"items": {
"type": "number"
},
"maxItems": 50,
"minItems": 2,
"type": "array"
}
},
"required": [
"parameter"
],
"type": "object"
},
"base": {
"additionalProperties": false,
"description": "Inputs held fixed during the sweep.",
"properties": {
"adjustedValue": {
"description": "Home value to use in adjustmentYear; 0 disables the adjustment. Unit: USD. Default: 0.",
"maximum": 100000000,
"minimum": 0,
"type": "number"
},
"adjustmentYear": {
"description": "Year in which the home value is reset to adjustedValue; 0 disables it. Unit: year (0 = none). Default: 0.",
"maximum": 30,
"minimum": 0,
"type": "integer"
},
"appreciationRate": {
"description": "Annual home value appreciation (3 = 3%). Unit: % per year. Default: 3.",
"maximum": 30,
"minimum": -20,
"type": "number"
},
"closingCosts": {
"description": "One-time closing costs paid at purchase. Unit: USD. Default: 20000.",
"maximum": 1000000,
"minimum": 0,
"type": "number"
},
"downPayment": {
"description": "Down payment as a percentage of the price (20 = 20%). Unit: % of price. Default: 20.",
"maximum": 100,
"minimum": 0,
"type": "number"
},
"federalTaxRate": {
"description": "Federal marginal rate applied to itemized deductions above the standard deduction. Unit: %. Default: 22.",
"maximum": 60,
"minimum": 0,
"type": "number"
},
"filingStatus": {
"description": "Federal filing status used to pre-fill the tax inputs. Unit: enum. Default: marriedJoint.",
"enum": [
"single",
"marriedJoint",
"headOfHousehold"
],
"type": "string"
},
"hoa": {
"description": "HOA dues, held flat. Unit: USD per month. Default: 0.",
"maximum": 20000,
"minimum": 0,
"type": "number"
},
"homeInsurance": {
"description": "Homeowner insurance premium, held flat. Unit: USD per year. Default: 2400.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"homePrice": {
"description": "Purchase price of the home. Unit: USD. Default: 800000.",
"maximum": 50000000,
"minimum": 10000,
"type": "number"
},
"householdIncome": {
"description": "Household income; with filingStatus it pre-fills federalTaxRate and standardDeduction unless those are given explicitly. Unit: USD per year. Default: 200000.",
"maximum": 100000000,
"minimum": 0,
"type": "number"
},
"interestOnlyPeriod": {
"description": "Interest-only years; only used when mortgageType is interestOnly. Unit: years. Default: 10.",
"maximum": 40,
"minimum": 0,
"type": "integer"
},
"investmentReturn": {
"description": "Effective annual return on invested savings for both households (7 = 7%). Unit: % per year (effective annual). Default: 7.",
"maximum": 30,
"minimum": -20,
"type": "number"
},
"maintenanceRate": {
"description": "Maintenance as a percentage of the current home value. Unit: % of home value per year. Default: 1.",
"maximum": 10,
"minimum": 0,
"type": "number"
},
"monthlyRent": {
"description": "Rent for a comparable home in year 1. Unit: USD per month. Default: 3500.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"mortgageRate": {
"description": "Mortgage interest rate (6.5 = 6.5%). Unit: % per year. Default: 6.5.",
"maximum": 30,
"minimum": 0,
"type": "number"
},
"mortgageTerm": {
"description": "Loan term in years. The analysis horizon is always 30 years. Unit: years. Default: 30.",
"maximum": 40,
"minimum": 1,
"type": "integer"
},
"mortgageType": {
"description": "'amortizing' pays principal and interest; 'interestOnly' pays interest only for interestOnlyPeriod years, then amortizes the balance over the remaining term (a balloon if the period covers the whole term). Unit: enum. Default: amortizing.",
"enum": [
"amortizing",
"interestOnly"
],
"type": "string"
},
"propertyTaxRate": {
"description": "Property tax as a percentage of the current home value. Unit: % of home value per year. Default: 1.25.",
"maximum": 10,
"minimum": 0,
"type": "number"
},
"renovations": {
"description": "One-time renovation spending at purchase; it does not add to the home value. Unit: USD. Default: 0.",
"maximum": 5000000,
"minimum": 0,
"type": "number"
},
"rentIncreaseRate": {
"description": "Annual rent growth (3 = 3%). Unit: % per year. Default: 3.",
"maximum": 30,
"minimum": -10,
"type": "number"
},
"rentersInsurance": {
"description": "Renter insurance; it grows with rent. Unit: USD per year. Default: 300.",
"maximum": 20000,
"minimum": 0,
"type": "number"
},
"sellingCosts": {
"description": "Selling costs subtracted from the headline buy result at year 30. Unit: % of sale price. Default: 6.",
"maximum": 20,
"minimum": 0,
"type": "number"
},
"standardDeduction": {
"description": "Standard deduction the itemized deductions must exceed to save tax. Unit: USD. Default: 32200.",
"maximum": 1000000,
"minimum": 0,
"type": "number"
},
"stateTaxRate": {
"description": "State marginal rate applied the same way. Unit: %. Default: 5.",
"maximum": 30,
"minimum": 0,
"type": "number"
}
},
"type": "object"
},
"oneTimeCosts": {
"description": "Up to 20 one-time costs.",
"items": {
"additionalProperties": false,
"properties": {
"amount": {
"description": "Amount in USD.",
"maximum": 100000000,
"minimum": 0,
"type": "number"
},
"appliesTo": {
"description": "'buy' = a house expense only the buyer pays (the renter invests that amount); 'both' = a general expense both households pay from their investments.",
"enum": [
"buy",
"both"
],
"type": "string"
},
"reason": {
"description": "Label, e.g. \"New roof\".",
"maxLength": 80,
"type": "string"
},
"year": {
"description": "Year of the cost, 1 to 30.",
"maximum": 30,
"minimum": 1,
"type": "integer"
}
},
"required": [
"year",
"amount",
"appliesTo"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"secondAxis": {
"additionalProperties": false,
"description": "Optional second input for a grid.",
"properties": {
"max": {
"type": "number"
},
"min": {
"type": "number"
},
"parameter": {
"description": "Input to vary.",
"enum": [
"homePrice",
"downPayment",
"closingCosts",
"renovations",
"mortgageRate",
"mortgageTerm",
"interestOnlyPeriod",
"propertyTaxRate",
"homeInsurance",
"maintenanceRate",
"hoa",
"appreciationRate",
"adjustmentYear",
"adjustedValue",
"sellingCosts",
"monthlyRent",
"rentIncreaseRate",
"rentersInsurance",
"investmentReturn",
"householdIncome",
"federalTaxRate",
"stateTaxRate",
"standardDeduction"
],
"type": "string"
},
"steps": {
"description": "With min and max: number of evenly spaced values (2 to 50).",
"maximum": 50,
"minimum": 2,
"type": "integer"
},
"values": {
"description": "Explicit values to test (2 to 50).",
"items": {
"type": "number"
},
"maxItems": 50,
"minItems": 2,
"type": "array"
}
},
"required": [
"parameter"
],
"type": "object"
}
},
"required": [
"axis"
],
"type": "object"
},
"name": "rentbuy_sweep",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"crossover": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"note": {
"type": "string"
},
"value": {
"type": "number"
}
},
"required": [
"value",
"note"
],
"type": "object"
},
{
"type": "null"
}
],
"description": "Single-parameter sweeps only: the interpolated value where the winner flips, or null."
},
"meta": {
"additionalProperties": false,
"properties": {
"engineVersion": {
"type": "string"
},
"taxYear": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"engineVersion",
"taxYear"
],
"type": "object"
},
"parameter": {
"type": "string"
},
"points": {
"description": "One row per grid point; difference is buy minus rent at year 30 after selling costs.",
"items": {
"additionalProperties": false,
"properties": {
"breakEvenYear": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
]
},
"buyNetWorthAfterSale": {
"type": "number"
},
"difference": {
"type": "number"
},
"rentNetWorth": {
"type": "number"
},
"secondValue": {
"type": [
"number",
"null"
]
},
"value": {
"type": "number"
},
"winner": {
"enum": [
"BUY",
"RENT"
],
"type": "string"
}
},
"required": [
"value",
"secondValue",
"difference",
"winner",
"buyNetWorthAfterSale",
"rentNetWorth",
"breakEvenYear"
],
"type": "object"
},
"type": "array"
},
"secondParameter": {
"type": [
"string",
"null"
]
},
"secondUnit": {
"type": [
"string",
"null"
]
},
"unit": {
"type": "string"
}
},
"required": [
"parameter",
"unit",
"secondParameter",
"secondUnit",
"points",
"crossover",
"meta"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:6ac8fce0cc78946a7e5d2410f777ae1475aa293babf81e29f96a51fd19c52de9 | sha256sum