Rental property analysis your AI can call
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Analyze a US residential property as a rental investment. Give an address or the key facts (price, beds, baths, square feet, ZIP). Add any numbers the user knows, such as their expected rent, tax or insurance; they override our estimates. Returns an investment score, IRR over a 15-year hold, monthly cash flow, cap rate, cash-on-cash return and DSCR, with the source of every input shown. Estimates only, not an appraisal.
Asking or purchase price in US dollars.
5-digit US ZIP code. Needed when no address with a ZIP is given.
Number of units in the building, when known.
Street address, ideally with city, state and ZIP.
Total bedrooms (all units together for a 2- or 3-family).
Monthly HOA fee in dollars; 0 when omitted.
The user's expected total monthly rent; overrides our estimate.
Annual mortgage rate in percent (default: the current 30-year average we use).
Loan term in years (default 30).
Down payment as a percent of price (default 20).
Annual insurance in dollars; overrides our estimate.
Annual property tax in dollars; overrides our estimate.
Analyze a US residential property as a rental investment. Give an address or the key facts (price, beds, baths, square feet, ZIP). Add any numbers the user knows, such as their expected rent, tax or insurance; they override our estimates. Returns an investment score, IRR over a 15-year hold, monthly cash flow, cap rate, cash-on-cash return and DSCR, with the source of every input shown. Estimates only, not an appraisal.
| Argument | Type | Description |
|---|---|---|
| zip | string | 5-digit US ZIP code. Needed when no address with a ZIP is given. |
| units | integer | Number of units in the building, when known. |
| address | string | Street address, ideally with city, state and ZIP. |
| bedrooms | integer | Total bedrooms (all units together for a 2- or 3-family). |
| bathrooms | number | |
| list_price* | number | Asking or purchase price in US dollars. |
| hoa_monthly | number | Monthly HOA fee in dollars; 0 when omitted. |
| square_feet | number | |
| monthly_rent | number | The user's expected total monthly rent; overrides our estimate. |
| interest_rate | number | Annual mortgage rate in percent (default: the current 30-year average we use). |
| property_type | string | |
| loan_term_years | integer | Loan term in years (default 30). |
| down_payment_pct | number | Down payment as a percent of price (default 20). |
| insurance_annual | number | Annual insurance in dollars; overrides our estimate. |
| property_tax_annual | number | Annual property tax in dollars; overrides our estimate. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_price"
],
"properties": {
"zip": {
"type": "string",
"pattern": "^\\d{5}(-\\d{4})?$",
"description": "5-digit US ZIP code. Needed when no address with a ZIP is given."
},
"units": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Number of units in the building, when known."
},
"address": {
"type": "string",
"maxLength": 200,
"minLength": 3,
"description": "Street address, ideally with city, state and ZIP."
},
"bedrooms": {
"type": "integer",
"maximum": 30,
"minimum": 0,
"description": "Total bedrooms (all units together for a 2- or 3-family)."
},
"bathrooms": {
"type": "number",
"maximum": 30,
"minimum": 0
},
"list_price": {
"type": "number",
"maximum": 100000000,
"description": "Asking or purchase price in US dollars.",
"exclusiveMinimum": 0
},
"hoa_monthly": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Monthly HOA fee in dollars; 0 when omitted."
},
"square_feet": {
"type": "number",
"maximum": 100000,
"exclusiveMinimum": 0
},
"monthly_rent": {
"type": "number",
"maximum": 1000000,
"description": "The user's expected total monthly rent; overrides our estimate.",
"exclusiveMinimum": 0
},
"interest_rate": {
"type": "number",
"maximum": 30,
"minimum": 0,
"description": "Annual mortgage rate in percent (default: the current 30-year average we use)."
},
"property_type": {
"enum": [
"single-family",
"condo/townhome",
"2-family",
"3-family",
"multi-family"
],
"type": "string"
},
"loan_term_years": {
"type": "integer",
"maximum": 40,
"minimum": 1,
"description": "Loan term in years (default 30)."
},
"down_payment_pct": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Down payment as a percent of price (default 20)."
},
"insurance_annual": {
"type": "number",
"maximum": 10000000,
"minimum": 0,
"description": "Annual insurance in dollars; overrides our estimate."
},
"property_tax_annual": {
"type": "number",
"maximum": 10000000,
"minimum": 0,
"description": "Annual property tax in dollars; overrides our estimate."
}
}
}Look up NestCalc's independent Deal Score for a for-sale listing, or list the current top deals (WINs) in a covered city. Scores are published for every listing, including low ones, and are never changed for anyone. Covered today: Cincinnati. For any other property, use analyze_rental. Not an appraisal.
| Argument | Type | Description |
|---|---|---|
| city | string | A city, to list its current WINs. |
| limit | integer | How many WINs to list for a city (default 10). |
| address | string | Street address of a for-sale listing, with city or ZIP when known. |
| listing_id | string | The listing's public id (its slug), e.g. 2268-rice-st. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"city": {
"type": "string",
"maxLength": 80,
"minLength": 2,
"description": "A city, to list its current WINs."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "How many WINs to list for a city (default 10)."
},
"address": {
"type": "string",
"maxLength": 200,
"minLength": 3,
"description": "Street address of a for-sale listing, with city or ZIP when known."
},
"listing_id": {
"type": "string",
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
"maxLength": 80,
"description": "The listing's public id (its slug), e.g. 2268-rice-st."
}
}
}