Skip to main content
Glama

Real Estate Analyzer

Analyze a real-estate deal

analyze_deal

Analyze a real-estate investment deal and get a 0-100 score, verdict, cash flow, cap rate, DSCR, stress tests, break-even thresholds, and a shareable report link. Strategies: ltr (long-term rental), str (short-term rental), brrr, multifamily, flip (fix-n-flip), newc (new construction). All rates/percents are FRACTIONS (0.0675 = 6.75%). Omitted operating inputs are filled with documented defaults and listed in assumptions.estimated_fields. Output is a software estimate, not financial, investment, tax or legal advice — figures are projections to verify, not recommendations. Free, no key; the response includes a shareable report_url.

Input Schema

NameRequiredDescriptionDefault
inputsYesDeal inputs in camelCase engine keys. Anything omitted gets a documented default, listed back under assumptions.estimated_fields. Minimum: price + the strategy's income driver (marketRent / adr+occupancy / units / arv / land+build). Call list_strategies for the full per-strategy schema.
strategyYesInvestment strategy to analyze.

Output Schema

NameRequiredDescriptionDefault
scoreYes0-100 deal score.
leversNoTop input changes that would each add ~$1,000/yr cash flow (STR).
stressNoStress scenarios, each with a verdict.
metricsYesHeadline metrics for this strategy.
summaryYesDeterministic one-paragraph summary.
upfrontNoCash-into-the-deal / project-cost stack rows {label, amount, kind}.
verdictYesStrong (85+) / Solid (70+) / Workable (50+) / Risky (25+) / Run Away.
strategyYes
breakdownNoOrdered cash-flow / profit waterfall rows {label, amount, kind}; outflows are negative.
data_noteNoREIzer data tools that can refine this analysis (needs an API key).
disclaimerNoNot financial advice — software estimate only.
report_urlNoShareable public report page (30 days).
thresholdsNo
assumptionsNoestimated_fields lists every input REIzer defaulted.
inputs_usedNoThe resolved input set the analysis ran on — caller values plus documented defaults.
sensitivityNoWhich input drivers move the result most — {driver, range, low_impact, high_impact, swing}, sorted by swing (STR).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / verdict / description
      Previous value: -"Strong / Solid / Thin / Weak."New value: +"Strong (85+) / Solid (70+) / Workable (50+) / Risky (25+) / Run Away."
  2. Changed4 schema fields changed
    • addedOutput schema / properties / breakdown
      Added value: +{
      +  "description": "Ordered cash-flow / profit waterfall rows {label, amount, kind}; outflows are negative.",
      +  "items": {
      +    "additionalProperties": true,
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / levers
      Added value: +{
      +  "description": "Top input changes that would each add ~$1,000/yr cash flow (STR).",
      +  "items": {
      +    "additionalProperties": true,
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / sensitivity
      Added value: +{
      +  "description": "Which input drivers move the result most — {driver, range, low_impact, high_impact, swing}, sorted by swing (STR).",
      +  "items": {
      +    "additionalProperties": true,
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / upfront
      Added value: +{
      +  "description": "Cash-into-the-deal / project-cost stack rows {label, amount, kind}.",
      +  "items": {
      +    "additionalProperties": true,
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  3. Changed1 schema field changed
    • addedOutput schema / properties / inputs_used
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "The resolved input set the analysis ran on — caller values plus documented defaults.",
      +  "type": "object"
      +}
  4. Changed1 schema field changed
    • addedOutput schema / properties / data_note
      Added value: +{
      +  "description": "REIzer data tools that can refine this analysis (needs an API key).",
      +  "type": "string"
      +}
  5. Changed1 schema field changed
    • addedOutput schema / properties / disclaimer
      Added value: +{
      +  "description": "Not financial advice — software estimate only.",
      +  "type": "string"
      +}
  6. Changed4 schema fields changed
    • addedInput schema / properties / inputs / additionalProperties
      Added value: +true
    • changedInput schema / properties / inputs / description
      Previous value: -"Deal inputs (camelCase engine keys — call list_strategies for each strategy's schema). Minimum: price + the income driver (marketRent / adr+occupancy / units / arv / land+build)."New value: +"Deal inputs in camelCase engine keys. Anything omitted gets a documented default, listed back under assumptions.estimated_fields. Minimum: price + the strategy's income driver (marketRent / adr+occupancy / units / arv / land+build). Call list_strategies for the full per-strategy schema."
    • addedInput schema / properties / inputs / properties
      Added value: +{
      +  "adr": {
      +    "description": "Average nightly rate in dollars. Required for str.",
      +    "type": "number"
      +  },
      +  "arv": {
      +    "description": "After-repair value in dollars. Required for brrr and flip.",
      +    "type": "number"
      +  },
      +  "btsArv": {
      +    "description": "Finished build-to-sell value in dollars. Required for newc.",
      +    "type": "number"
      +  },
      +  "buildPsf": {
      +    "description": "Build cost per square foot in dollars. Required for newc.",
      +    "type": "number"
      +  },
      +  "downPct": {
      +    "description": "Down payment. Expressed as a FRACTION (0.0675 = 6.75%), never a percent. Optional — a documented default applies.",
      +    "type": "number"
      +  },
      +  "insurance": {
      +    "description": "Annual insurance in dollars. Optional.",
      +    "type": "number"
      +  },
      +  "landPrice": {
      +    "description": "Land acquisition cost in dollars. Required for newc.",
      +    "type": "number"
      +  },
      +  "livingSqft": {
      +    "description": "Heated living area in square feet. Required for newc.",
      +    "type": "number"
      +  },
      +  "marketRent": {
      +    "description": "Expected monthly rent in dollars. Required for ltr and brrr.",
      +    "type": "number"
      +  },
      +  "occupancy": {
      +    "description": "Expected occupancy. Expressed as a FRACTION (0.0675 = 6.75%), never a percent. Required for str.",
      +    "type": "number"
      +  },
      +  "price": {
      +    "description": "Purchase price in dollars. Required for every strategy except newc.",
      +    "type": "number"
      +  },
      +  "rate": {
      +    "description": "Annual interest rate. Expressed as a FRACTION (0.0675 = 6.75%), never a percent. Optional.",
      +    "type": "number"
      +  },
      +  "rehabBudget": {
      +    "description": "Renovation budget in dollars. Required for brrr and flip.",
      +    "type": "number"
      +  },
      +  "taxes": {
      +    "description": "Annual property taxes in dollars. Optional.",
      +    "type": "number"
      +  },
      +  "term": {
      +    "description": "Loan term in years. Optional.",
      +    "type": "number"
      +  },
      +  "units": {
      +    "description": "Multifamily rent roll — {unitCount, avgRent, marketRent?} or an array of unit objects. Required for multifamily.",
      +    "type": "object"
      +  },
      +  "vacancyPct": {
      +    "description": "Vacancy allowance. Expressed as a FRACTION (0.0675 = 6.75%), never a percent. Optional.",
      +    "type": "number"
      +  }
      +}
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "assumptions": {
      +      "additionalProperties": true,
      +      "description": "estimated_fields lists every input REIzer defaulted.",
      +      "type": "object"
      +    },
      +    "metrics": {
      +      "additionalProperties": true,
      +      "description": "Headline metrics for this strategy.",
      +      "type": "object"
      +    },
      +    "report_url": {
      +      "description": "Shareable public report page (30 days).",
      +      "type": "string"
      +    },
      +    "score": {
      +      "description": "0-100 deal score.",
      +      "type": "number"
      +    },
      +    "strategy": {
      +      "type": "string"
      +    },
      +    "stress": {
      +      "description": "Stress scenarios, each with a verdict.",
      +      "items": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "summary": {
      +      "description": "Deterministic one-paragraph summary.",
      +      "type": "string"
      +    },
      +    "thresholds": {
      +      "additionalProperties": true,
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "verdict": {
      +      "description": "Strong / Solid / Thin / Weak.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "strategy",
      +    "score",
      +    "verdict",
      +    "metrics",
      +    "summary"
      +  ],
      +  "type": "object"
      +}
  7. First observed

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false, so the safety profile is already known. The description adds real behavioral context beyond them: omitted inputs are silently defaulted and surfaced in assumptions.estimated_fields, output is an estimate not advice, and a shareable report_url is included. It doesn't say whether anything is persisted server-side, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and outputs, then strategy list, then unit convention, then default semantics, then disclaimer. Each sentence carries information, though the advice disclaimer is somewhat verbose and could be compressed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the description still previews the payload and explains defaults, fraction units, auth-free access, and the disclaimer. For a nested, multi-strategy tool this is close to complete; the only gap is per-strategy required-field guidance, which is delegated to the schema and to list_strategies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the nested inputs object already documents every field, including the FRACTION convention, per-strategy requirements, and default behavior. The description reinforces the fraction rule and the default-filling semantics but adds little the schema doesn't already state, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Analyze a real-estate investment deal') and enumerates concrete outputs: score, verdict, cash flow, cap rate, DSCR, stress tests, break-even, report link. That is unambiguous. It does not differentiate itself from siblings (best_use, solve_max_offer, list_strategies), so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It tells the agent the context of use (analyzing an investment deal under one of six named strategies) and that no key is needed, which removes an auth prerequisite. However, it never says when NOT to use it or when a sibling like solve_max_offer is the better route, so there are no exclusions or explicit alternatives.

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