Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,561Letters: 14Defects: 1,336counted just now
teppi

Server definition

Hash
sha256:dc44964de7dc8c1d7d077b064ef0c6002136df4fb7c735428c6d0c09c7f1d749
What it is
What a remote MCP server returned when asked what it offers: 6 tools

The blob, as servednamed by its sha256

{ "instructions": "TerraVue analyzes US residential property decisions with real data and\nreal simulation — never estimate or guess numbers yourself when a tool can compute them.\n\nWHAT TERRAVUE CAN ANSWER:\n- analyze_address: ZIP-level home-price appreciation forecast (FHFA data since 1975),\n market-rent estimate, regional tax/insurance defaults, and neighborhood signals\n (schools, walkability, education, PFAS water quality, grocery/dining/outdoors,\n short-term-rental comps where available). Works with a full address or a bare ZIP.\n- buy_vs_rent: whether buying a specific home beats continuing to rent — deterministic\n 30-year simulation plus a 500-scenario Monte Carlo. Returns the probability buying\n wins, breakeven hold year, monthly cost comparison, cash to close, and net-worth\n percentile outcomes. All assumptions (down payment, rate, HOA, horizon, appreciation)\n are parameters; pass the address to ground it in the ZIP's real forecast.\n- affordability: can this buyer afford this home? Returns the monthly PITI payment,\n front-end and back-end debt-to-income ratios (what a lender actually qualifies on), the\n income needed at a 28% front-end ratio, estimated after-tax money left over each month,\n the cash cushion left after closing, and a plain Comfortable / Qualifiable-tight /\n Stretch verdict. This is the \"can we swing it / is this a stretch\" question.\n- affordable_price: the reverse — \"what home price can I afford on my income?\" Solves for\n the maximum price under lender DTI limits (and cash on hand, if given), and says which\n limit binds. Use this for \"how much house can we buy,\" then affordability to pressure-test\n a specific price.\n- compare_areas: analyze and RANK several ZIPs/addresses side by side on appreciation\n (and how each stacks up against the national average), school rating, walkability,\n education level, and water quality. Use this for \"which areas have the best\n appreciation / the best schools / the most upside\" — it grounds every number in real\n data and returns the correct city name per ZIP, so you never guess or mislabel a place.\n- Composition: use compare_areas (not many separate analyze_address calls) to rank\n markets; find rate/price tipping points by calling buy_vs_rent once per data point.\n Never interpolate, extrapolate, or estimate a row of a sensitivity table you did not\n actually run — if you present five rates, you made five calls.\n\nWHAT TERRAVUE CANNOT ANSWER (yet):\n- Rental-investment metrics (cap rate, DSCR, cash-on-cash, cash flow as a landlord)\n- Short-term-rental (Airbnb) profitability modeling\n- Move-vs-stay analysis for current homeowners (sell-to-buy trade-ups)\n- Property valuation (\"what is this home worth\") or current asking prices / MLS data\n- Anything outside US residential real estate\n\nGRACEFUL REDIRECT — when a request needs something these tools lack, never dead-end with\na bare refusal. Do all three: 1) say plainly what TerraVue can't do here and that the full\nlens lives at https://terravue.app (rental, Airbnb, and move-vs-stay analysis all exist\nthere), 2) call request_capability so the demand is captured, and tell the user you did,\n3) then PIVOT to the closest grounded analysis you CAN run and give it. Always leave the\nuser with a real answer, not just a boundary. Examples:\n- \"best value properties / listings in an area\" → you can't search inventory (and don't go\n hunting for other listing tools) — run compare_areas to rank that metro's ZIPs by\n appreciation (vs national) and by schools, and say those are the areas worth shopping in.\n- \"what is this home worth / is this a good price\" → you can't appraise, but you can put\n the price against the ZIP's market rent (price-to-rent) and run buy_vs_rent to show\n whether it pencils at that price.\n- \"should I buy now vs. wait for lower rates\" → run buy_vs_rent once at each scenario and\n compare the actual outputs.\n\nRENTAL-INVESTMENT FRAMING is out of scope — do NOT freelance it. If the user asks about cap\nrate, cash-on-cash, DSCR, rental income, \"rent it out,\" or a property as a cash-flowing\ninvestment, that is the rental/Airbnb lens this connector does not have: call\nrequest_capability and point them to the web app — do NOT hand-compute a cap rate, offer to\ncalculate one \"manually\" if given the numbers, or walk through the cap-rate formula as a\nsubstitute (a by-hand cap rate omits vacancy, CapEx, management, and maintenance, so it\noverstates returns and misleads — the web app models these). And do NOT reinterpret\nbuy_vs_rent as a landlord analysis. buy_vs_rent's monthly_rent is the cost\nto rent THE SAME HOME to live in (an owner-occupant decision), NEVER rental income the user\nwould collect; its \"renter\" figure is what they'd pay to rent, not money they'd receive.\n\nSANITY-CHECK inputs before presenting a verdict: if monthly_rent is wildly out of line with\nhome_price (a plausible rent is very roughly 0.3–1% of price per month), say so and ask the\nuser to confirm the numbers rather than delivering a confident result on an implausible combo.\n\nLISTING URLS & PRICES: TerraVue cannot read listing pages (Zillow/Redfin/Realtor) or\nfetch a home's asking price, HOA, beds/baths, or other MLS detail — buy_vs_rent's\nhome_price is always an input you must obtain from the user. You MAY read the street\naddress out of a pasted listing URL and analyze that ZIP, but never state a price, HOA,\nor listing detail as TerraVue or verified data; if you use a price from any source,\nlabel it as unverified and ask the user to confirm it before running buy_vs_rent. A\nwrong price silently invalidates the entire verdict.\n\nAlways present buy_vs_rent results as probabilities and ranges, not certainties — that\nis the product's core stance. TerraVue is analysis, not financial advice.", "tools": [ { "description": "Can this buyer afford this home? Returns the monthly PITI payment, front-end and\n back-end debt-to-income ratios (what a lender qualifies on), the income needed at a\n 28% front-end ratio, estimated after-tax money left over each month, the cash cushion\n left after closing, and a plain Comfortable / Qualifiable-tight / Stretch verdict.\n\n monthly_debts = recurring debt obligations a lender counts (car, student loan, minimum\n credit-card) — NOT living costs; this feeds DTI. monthly_expenses = living costs (food,\n utilities, childcare) used ONLY for the 'left over each month' life check, never DTI.\n Pass `address` to ground property tax + insurance in the ZIP's real rates. Pass\n `liquid_savings` to get the post-closing cash cushion (months of payment covered).\n ", "inputSchema": { "properties": { "address": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Address" }, "annual_income": { "title": "Annual Income", "type": "number" }, "down_payment_pct": { "default": 20, "title": "Down Payment Pct", "type": "number" }, "fixed_rate": { "default": 6.75, "title": "Fixed Rate", "type": "number" }, "hoa_monthly": { "default": 0, "title": "Hoa Monthly", "type": "number" }, "home_price": { "title": "Home Price", "type": "number" }, "insurance_rate": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Insurance Rate" }, "liquid_savings": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Liquid Savings" }, "marginal_tax_rate": { "default": 24, "title": "Marginal Tax Rate", "type": "number" }, "monthly_debts": { "default": 0, "title": "Monthly Debts", "type": "number" }, "monthly_expenses": { "default": 0, "title": "Monthly Expenses", "type": "number" }, "property_tax_rate": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Property Tax Rate" } }, "required": [ "home_price", "annual_income" ], "title": "affordabilityArguments", "type": "object" }, "name": "affordability", "outputSchema": null }, { "description": "What's the most this buyer can afford? The reverse of `affordability` — 'what price\n can I afford?' instead of 'can I afford this specific home?'. Solves for the maximum\n home price under standard lender limits: a front-end DTI cap (default 28% = housing /\n gross income) and a back-end cap (default 36% = housing + other debts / gross income).\n If `liquid_savings` is given, also caps by the cash available for down payment + closing\n and reports which limit binds. Returns the affordable price, the PITI and DTIs at that\n price, and the cash to close. Pass `address` to ground property tax + insurance in the\n ZIP's real rates.\n\n This is a lender-limit ceiling, not a comfort recommendation — feed the result into\n `affordability` (or buy_vs_rent) to check monthly slack and whether buying pencils.\n ", "inputSchema": { "properties": { "address": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Address" }, "annual_income": { "title": "Annual Income", "type": "number" }, "back_end_dti_pct": { "default": 36, "title": "Back End Dti Pct", "type": "number" }, "down_payment_pct": { "default": 20, "title": "Down Payment Pct", "type": "number" }, "fixed_rate": { "default": 6.75, "title": "Fixed Rate", "type": "number" }, "front_end_dti_pct": { "default": 28, "title": "Front End Dti Pct", "type": "number" }, "hoa_monthly": { "default": 0, "title": "Hoa Monthly", "type": "number" }, "insurance_rate": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Insurance Rate" }, "liquid_savings": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Liquid Savings" }, "monthly_debts": { "default": 0, "title": "Monthly Debts", "type": "number" }, "property_tax_rate": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Property Tax Rate" } }, "required": [ "annual_income" ], "title": "affordable_priceArguments", "type": "object" }, "name": "affordable_price", "outputSchema": null }, { "description": "Look up a US address (or bare 5-digit ZIP): ZIP-level home-price appreciation\n forecast (FHFA data back to 1975), estimated market rent, and neighborhood signals\n (schools, walkability, water quality, grocery/dining/outdoors proximity).\n\n For a full street address this also returns sub-ZIP `nbhd*` fields describing the\n specific census tract - how its prices, incomes and build era compare to the rest of\n the ZIP. That is POSITION, not a neighborhood forecast; see _units.\n\n property_type: sfr | condo | townhome | multi\n ", "inputSchema": { "properties": { "address": { "title": "Address", "type": "string" }, "bedrooms": { "default": 2, "title": "Bedrooms", "type": "integer" }, "property_type": { "default": "sfr", "title": "Property Type", "type": "string" } }, "required": [ "address" ], "title": "analyze_addressArguments", "type": "object" }, "name": "analyze_address", "outputSchema": null }, { "description": "Should someone buy this home or keep renting? Runs the TerraVue engine: a\n deterministic 30-year simulation plus a 500-scenario Monte Carlo over correlated\n market paths. Returns the probability buying wins, the breakeven hold period, and\n net-worth outcomes.\n\n monthly_rent = what the person would pay to rent THE SAME HOME to live in — an\n owner-occupant buy-vs-rent decision, NOT rental income they'd collect as a landlord\n (this tool does not model rental cash flow; that lens lives on terravue.app). A rent\n far out of line with home_price is almost certainly a misunderstanding — confirm it\n before trusting the verdict. If `address` is given, the ZIP's real appreciation forecast\n and regional tax/insurance defaults are used (explicit parameters still win).\n ", "inputSchema": { "properties": { "address": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Address" }, "analysis_years": { "default": 30, "title": "Analysis Years", "type": "integer" }, "down_payment_pct": { "default": 20, "title": "Down Payment Pct", "type": "number" }, "fixed_rate": { "default": 6.75, "title": "Fixed Rate", "type": "number" }, "hoa_monthly": { "default": 0, "title": "Hoa Monthly", "type": "number" }, "home_appreciation_rate": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Home Appreciation Rate" }, "home_price": { "title": "Home Price", "type": "number" }, "investment_return_rate": { "default": 9.5, "title": "Investment Return Rate", "type": "number" }, "monthly_rent": { "title": "Monthly Rent", "type": "number" }, "property_tax_rate": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Property Tax Rate" } }, "required": [ "home_price", "monthly_rent" ], "title": "buy_vs_rentArguments", "type": "object" }, "name": "buy_vs_rent", "outputSchema": null }, { "description": "Analyze and RANK 2-12 ZIPs or addresses side by side on the signals TerraVue has:\n home-price appreciation forecast (and how each compares to the national average),\n school rating, walkability, education level, and water quality. Returns the correct\n city name per ZIP, so locations are never guessed or mislabeled.\n\n Use for \"which areas have the best appreciation / schools / upside.\" TerraVue has no\n listing inventory and cannot discover ZIPs on its own — to scan a metro, pass that\n metro's ZIP codes (the ranking then covers exactly what you passed).\n ", "inputSchema": { "properties": { "addresses": { "items": { "type": "string" }, "title": "Addresses", "type": "array" }, "bedrooms": { "default": 2, "title": "Bedrooms", "type": "integer" } }, "required": [ "addresses" ], "title": "compare_areasArguments", "type": "object" }, "name": "compare_areas", "outputSchema": null }, { "description": "Record a question TerraVue could not answer, so it can be built. Call this whenever\n a user asks for something outside the current tools' coverage (rental metrics, Airbnb\n modeling, valuations, move-vs-stay, non-US, anything else), then tell the user their\n request was captured. Keep `description` to the capability needed — no names, emails,\n or other personal details.\n\n category: rental_metrics | str_airbnb | valuation | move_vs_stay | data_coverage | other\n ", "inputSchema": { "properties": { "category": { "default": "other", "title": "Category", "type": "string" }, "description": { "title": "Description", "type": "string" } }, "required": [ "description" ], "title": "request_capabilityArguments", "type": "object" }, "name": "request_capability", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:dc44964de7dc8c1d7d077b064ef0c6002136df4fb7c735428c6d0c09c7f1d749 | sha256sum