# TerraVue

> Analyze any US home: buy vs rent Monte Carlo, affordability, and ZIP-level appreciation data.

- name: app.terravue/terravue
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 80/100 flags: no-repository
- quality: 83/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/app.terravue%2Fterravue
- tools: https://api.protogrid.dev/v1/servers/app.terravue%2Fterravue/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "terravue": {
      "type": "http",
      "url": "https://api.terravue.app/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 85
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% ~updated-30d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 83/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 6 of 6 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 1 of 6 tools declare all four hints; missing: affordability (destructiveHint, idempotentHint); compare_areas (destructiveHint, idempotentHint); buy_vs_rent (destructiveHint, idempotentHint); …
- pass `tools.token_cost`: about 3,513 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 6 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 6, about 3,513 tokens to load them all
- tool set hash: 3ff6aff75c12e5aed6a02082116e4a61
- tools last changed: 2026-10-10T23:04:45.153Z
- badge: [![protogrid quality](https://protogrid.dev/badge/app.terravue/terravue.svg)](https://protogrid.dev/servers/app.terravue/terravue)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-10 `affordable_price` changed (inputSchema)
- 2026-10-10 `compare_areas` changed (inputSchema)
- 2026-10-10 `affordability` changed (inputSchema)
- 2026-10-10 `buy_vs_rent` changed (inputSchema)
- 2026-10-10 `request_capability` changed (inputSchema)
- 2026-10-10 `analyze_address` changed (inputSchema)

Full history: https://api.protogrid.dev/v1/servers/app.terravue%2Fterravue/changes

## Remotes

- https://api.terravue.app/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (6)

- `affordability`: Can this buyer afford this home? Returns the monthly PITI payment, front-end and
    back-end debt-to-income ratios (what a lender qualifies on), the income needed at a
    28% front-end ratio, estimated after-tax money left over each month, the cash cushion
    left after closing, and a plain Comfortable / Qualifiable-tight / Stretch verdict.

    monthly_debts = recurring debt obligations a lender counts (car, student loan, minimum
    credit-card) — NOT living costs; this feeds DTI. monthly_expenses = living costs (food,
    utilities, childcare) used ONLY for the 'left over each month' life check, never DTI.
    Pass `address` to ground property tax + insurance in the ZIP's real rates. Pass
    `liquid_savings` to get the post-closing cash cushion (months of payment covered).
    
- `affordable_price`: What's the most this buyer can afford? The reverse of `affordability` — 'what price
    can I afford?' instead of 'can I afford this specific home?'. Solves for the maximum
    home price under standard lender limits: a front-end DTI cap (default 28% = housing /
    gross income) and a back-end cap (default 36% = housing + other debts / gross income).
    If `liquid_savings` is given, also caps by the cash available for down payment + closing
    and reports which limit binds. Returns the affordable price, the PITI and DTIs at that
    price, and the cash to close. Pass `address` to ground property tax + insurance in the
    ZIP's real rates.

    This is a lender-limit ceiling, not a comfort recommendation — feed the result into
    `affordability` (or buy_vs_rent) to check monthly slack and whether buying pencils.
    
- `analyze_address`: Look up a US address (or bare 5-digit ZIP): ZIP-level home-price appreciation
    forecast (FHFA data back to 1975), estimated market rent, and neighborhood signals
    (schools, walkability, water quality, grocery/dining/outdoors proximity).

    For a full street address this also returns sub-ZIP `nbhd*` fields describing the
    specific census tract - how its prices, incomes and build era compare to the rest of
    the ZIP. That is POSITION, not a neighborhood forecast; see _units.

    property_type: sfr | condo | townhome | multi
    
- `buy_vs_rent`: Should someone buy this home or keep renting? Runs the TerraVue engine: a
    deterministic 30-year simulation plus a 500-scenario Monte Carlo over correlated
    market paths. Returns the probability buying wins, the breakeven hold period, and
    net-worth outcomes.

    monthly_rent = what the person would pay to rent THE SAME HOME to live in — an
    owner-occupant buy-vs-rent decision, NOT rental income they'd collect as a landlord
    (this tool does not model rental cash flow; that lens lives on terravue.app). A rent
    far out of line with home_price is almost certainly a misunderstanding — confirm it
    before trusting the verdict. If `address` is given, the ZIP's real appreciation forecast
    and regional tax/insurance defaults are used (explicit parameters still win).
    
- `compare_areas`: Analyze and RANK 2-12 ZIPs or addresses side by side on the signals TerraVue has:
    home-price appreciation forecast (and how each compares to the national average),
    school rating, walkability, education level, and water quality. Returns the correct
    city name per ZIP, so locations are never guessed or mislabeled.

    Use for "which areas have the best appreciation / schools / upside." TerraVue has no
    listing inventory and cannot discover ZIPs on its own — to scan a metro, pass that
    metro's ZIP codes (the ranking then covers exactly what you passed).
    
- `request_capability`: Record a question TerraVue could not answer, so it can be built. Call this whenever
    a user asks for something outside the current tools' coverage (rental metrics, Airbnb
    modeling, valuations, move-vs-stay, non-US, anything else), then tell the user their
    request was captured. Keep `description` to the capability needed — no names, emails,
    or other personal details.

    category: rental_metrics | str_airbnb | valuation | move_vs_stay | data_coverage | other
    
