Skip to main content
Glama

Quick turnover estimate (start here)

property_turnover_quick_estimate
Read-onlyIdempotent

Estimates what it costs to turn over a US rental unit after move-out; the first tool for a turnover estimate. Inputs: a 5-digit ZIP, bedrooms, bathrooms and the issues in plain English (e.g. "stained carpet in both bedrooms"), which may come from the user's photos; optional unit type, size, year built. Returns a priced make-ready estimate: repair tasks by trade with low/expected/high costs for the ZIP, priorities, refer-outs to licensed professionals, assumptions and links. An AI model reads the issues; the answer is a draft listing what it read (reading), and words it cannot place bill nothing. Not for: diagnosing hazards, legal advice on deposits, remodel bids, properties outside the US. The same findings under the same ruleset give the same result; AI never sets a number.

Input Schema

NameRequiredDescriptionDefault
zipYesThe user's 5-digit US ZIP code. If it is missing or not exactly 5 digits, ask the user; never guess, pad or correct it.
petsNoDid pets live in the unit? true adds an optional flea treatment.
auditNoAlso return the run record and input/result hashes (an audit trail). Default false.
sq_ftNoInterior sq ft.
carpetNoIs there wall-to-wall carpet?
detailNosummary (default, small) or full (every line).summary
issuesNoWhat was found in plain English, e.g. ['stained carpet in both bedrooms', 'nail holes everywhere', 'oven is filthy']. Read like pasted notes: an entry may hold several conditions ('carpet stained, nail holes'; one finding each); a room before or after the condition sets the location ('Bedroom 2 carpet torn', 'mold in bathroom'); a written count sets the quantity ('3 blinds broken'); an entry saying there is no work ('no mold', 'leak fixed by tenant') is reported as not billed. All the issues together may hold up to 12,000 characters; send longer notes in more than one request.
retainNoOptional (contract 0.5.1). false: keep none of this request's text, so the AI reader's answer for the issues is not stored either. By default the text is kept with contact details and access codes removed, to improve matching; the estimate is the same either way.
profileNominimum (rent-ready basics) | standard | premium (higher finish).standard
bedroomsYes0 for a studio.
bathroomsYesHalf baths count as 0.5.
unit_typeNoSingle-family homes and townhomes get house-sized defaults (floor area, locks).apartment
walk_dateNoThe walk-through date; dated or aged items are judged against it. Omit if unknown.
price_tierNobulk_contract (portfolio contract prices) | pm_vendor (default: a property manager buying turns from local vendors) | retail_one_off (an owner hiring one contractor).pm_vendor
year_builtNoDrives lead-paint (pre-1978) handling.
client_refsNoYour own reference ids (e.g. unit_id, job_id). Echoed back, never used.
serve_pinnedNoOptional, with expect_ruleset. True asks us to answer under the ruleset version you named even when the rules have changed since, from that version's signed bundle; the result says so in served_from_bundle. We refuse a version older than 12 months, one a later correction or law change replaced for your state, or one we have no bundle for. Default false: the call fails whenever the rules have changed.
expect_rulesetNoOptional. The ruleset version you built against, as results carry it in provenance.ruleset_version (e.g. 'sd-2026.11.14'), or its sha256: hash. If the rules have changed since, the call fails (nothing computed, nothing charged) and says what is in force now, so you upgrade on your own schedule. Leave it out to answer under the current rules.

Output Schema

NameRequiredDescriptionDefault
runNo
linksNo
resultYes
reviewNo
readingNo
signatureNo
input_hashNo
client_refsNo
deprecationNo
result_hashNo
request_hashNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed35 schema fields changed
    • removedOutput schema / $defs
      Removed value: -{
      -  "CostRange": {
      -    "properties": {
      -      "expected": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      -            "type": "string"
      -          }
      -        ]
      -      },
      -      "high": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      -            "type": "string"
      -          }
      -        ]
      -      },
      -      "low": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      -            "type": "string"
      -          }
      -        ]
      -      }
      -    },
      -    "required": [
      -      "low",
      -      "expected",
      -      "high"
      -    ],
      -    "type": "object"
      -  },
      -  "Deprecation": {
      -    "properties": {
      -      "field": {
      -        "type": "string"
      -      },
      -      "until": {
      -        "format": "date",
      -        "type": "string"
      -      },
      -      "use": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "field",
      -      "until",
      -      "use"
      -    ],
      -    "type": "object"
      -  },
      -  "Extent": {
      -    "enum": [
      -      "spot",
      -      "partial",
      -      "full"
      -    ],
      -    "type": "string"
      -  },
      -  "FindingResolution": {
      -    "properties": {
      -      "code": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "confidence": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "confirmed": {
      -        "default": false,
      -        "type": "boolean"
      -      },
      -      "extent": {
      -        "anyOf": [
      -          {
      -            "$ref": "#/$defs/Extent"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "finding_id": {
      -        "type": "string"
      -      },
      -      "issue_name": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "line_ids": {
      -        "default": [],
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "location": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "match_note": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "model": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "needs_review": {
      -        "default": false,
      -        "type": "boolean"
      -      },
      -      "not_billed_reason": {
      -        "anyOf": [
      -          {
      -            "enum": [
      -              "none",
      -              "ok",
      -              "done",
      -              "no_condition"
      -            ],
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "resolution": {
      -        "enum": [
      -          "exact",
      -          "alias",
      -          "ai",
      -          "unmapped",
      -          "not_billed"
      -        ],
      -        "type": "string"
      -      },
      -      "suggested_codes": {
      -        "default": [],
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "suggestions": {
      -        "items": {
      -          "$ref": "#/$defs/Suggestion"
      -        },
      -        "type": "array"
      -      },
      -      "text": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "uncertain": {
      -        "default": false,
      -        "type": "boolean"
      -      }
      -    },
      -    "required": [
      -      "finding_id",
      -      "resolution",
      -      "code",
      -      "extent"
      -    ],
      -    "type": "object"
      -  },
      -  "Links": {
      -    "properties": {
      -      "downloads": {
      -        "additionalProperties": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "how_to_get_files": {
      -        "type": "string"
      -      },
      -      "web_tool": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "web_tool_prefilled": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      }
      -    },
      -    "required": [
      -      "how_to_get_files"
      -    ],
      -    "type": "object"
      -  },
      -  "Note": {
      -    "properties": {
      -      "code": {
      -        "type": "string"
      -      },
      -      "finding_ids": {
      -        "default": [],
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "line_ids": {
      -        "default": [],
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "message": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "code",
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  "Phase": {
      -    "enum": [
      -      "assess",
      -      "trash_out",
      -      "repairs",
      -      "paint",
      -      "flooring",
      -      "appliances",
      -      "cleaning",
      -      "punch",
      -      "rekey"
      -    ],
      -    "type": "string"
      -  },
      -  "PriceBasis": {
      -    "enum": [
      -      "rate_card",
      -      "unit_price",
      -      "labor_derived",
      -      "placeholder"
      -    ],
      -    "type": "string"
      -  },
      -  "PriceTier": {
      -    "enum": [
      -      "bulk_contract",
      -      "pm_vendor",
      -      "retail_one_off"
      -    ],
      -    "type": "string"
      -  },
      -  "Priority": {
      -    "enum": [
      -      "must",
      -      "should",
      -      "could"
      -    ],
      -    "type": "string"
      -  },
      -  "Profile": {
      -    "enum": [
      -      "minimum",
      -      "standard",
      -      "premium"
      -    ],
      -    "type": "string"
      -  },
      -  "Provenance": {
      -    "properties": {
      -      "rules_as_of": {
      -        "anyOf": [
      -          {
      -            "format": "date",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "ruleset_hash": {
      -        "type": "string"
      -      },
      -      "ruleset_id": {
      -        "type": "string"
      -      },
      -      "ruleset_version": {
      -        "type": "string"
      -      },
      -      "sources": {
      -        "items": {
      -          "$ref": "#/$defs/SourceRef"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "ruleset_id",
      -      "ruleset_version",
      -      "ruleset_hash",
      -      "sources"
      -    ],
      -    "type": "object"
      -  },
      -  "RateCardUse": {
      -    "properties": {
      -      "entry": {
      -        "type": "integer"
      -      },
      -      "lines": {
      -        "default": [],
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "note": {
      -        "type": "string"
      -      },
      -      "target": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "entry",
      -      "target",
      -      "note"
      -    ],
      -    "type": "object"
      -  },
      -  "Reading": {
      -    "properties": {
      -      "counts": {
      -        "$ref": "#/$defs/ReadingCounts"
      -      },
      -      "findings": {
      -        "items": {
      -          "additionalProperties": true,
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "kind": {
      -        "enum": [
      -          "notes",
      -          "document"
      -        ],
      -        "type": "string"
      -      },
      -      "model": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "notes": {
      -        "items": {
      -          "$ref": "#/$defs/ReadingNote"
      -        },
      -        "type": "array"
      -      },
      -      "prompt_version": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "kind",
      -      "counts",
      -      "findings"
      -    ],
      -    "type": "object"
      -  },
      -  "ReadingCounts": {
      -    "properties": {
      -      "ai": {
      -        "type": "integer"
      -      },
      -      "parser": {
      -        "type": "integer"
      -      },
      -      "total": {
      -        "type": "integer"
      -      },
      -      "unmatched": {
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "total",
      -      "ai",
      -      "parser",
      -      "unmatched"
      -    ],
      -    "type": "object"
      -  },
      -  "ReadingNote": {
      -    "properties": {
      -      "code": {
      -        "type": "string"
      -      },
      -      "finding_ids": {
      -        "default": [],
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "kind": {
      -        "enum": [
      -          "warning",
      -          "assumption"
      -        ],
      -        "type": "string"
      -      },
      -      "message": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "kind",
      -      "code",
      -      "message"
      -    ],
      -    "type": "object"
      -  },
      -  "ReferOutNote": {
      -    "properties": {
      -      "blocks_phases": {
      -        "items": {
      -          "$ref": "#/$defs/Phase"
      -        },
      -        "type": "array"
      -      },
      -      "finding_ids": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "kind": {
      -        "enum": [
      -          "assessment",
      -          "compliance"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "type": "string"
      -      },
      -      "professional": {
      -        "type": "string"
      -      },
      -      "reason": {
      -        "type": "string"
      -      },
      -      "sources": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "unconfirmed": {
      -        "default": false,
      -        "type": "boolean"
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "name",
      -      "professional",
      -      "reason",
      -      "kind",
      -      "finding_ids",
      -      "blocks_phases",
      -      "sources"
      -    ],
      -    "type": "object"
      -  },
      -  "Region": {
      -    "properties": {
      -      "basis": {
      -        "enum": [
      -          "metro",
      -          "nonmetro",
      -          "national"
      -        ],
      -        "type": "string"
      -      },
      -      "cbsa": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "cbsa_name": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "vintage": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "zip3": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "zip3",
      -      "basis"
      -    ],
      -    "type": "object"
      -  },
      -  "Responsibility": {
      -    "enum": [
      -      "normal_wear",
      -      "likely_damage",
      -      "elective",
      -      "undetermined",
      -      "mixed"
      -    ],
      -    "type": "string"
      -  },
      -  "ResultSignature": {
      -    "properties": {
      -      "jws": {
      -        "type": "string"
      -      },
      -      "payload": {
      -        "$ref": "#/$defs/ResultSignaturePayload"
      -      },
      -      "verify_code": {
      -        "type": "string"
      -      },
      -      "verify_url": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "jws",
      -      "payload",
      -      "verify_code",
      -      "verify_url"
      -    ],
      -    "type": "object"
      -  },
      -  "ResultSignaturePayload": {
      -    "properties": {
      -      "capability": {
      -        "type": "string"
      -      },
      -      "engine_version": {
      -        "type": "string"
      -      },
      -      "issued_at": {
      -        "type": "string"
      -      },
      -      "kid": {
      -        "type": "string"
      -      },
      -      "operation": {
      -        "type": "string"
      -      },
      -      "result_hash": {
      -        "type": "string"
      -      },
      -      "ruleset_hash": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "ruleset_version": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "v": {
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "v",
      -      "kid",
      -      "capability",
      -      "operation",
      -      "ruleset_version",
      -      "ruleset_hash",
      -      "engine_version",
      -      "result_hash",
      -      "issued_at"
      -    ],
      -    "type": "object"
      -  },
      -  "Review": {
      -    "properties": {
      -      "ai_read": {
      -        "default": 0,
      -        "type": "integer"
      -      },
      -      "note": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "reading_id": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "status": {
      -        "default": "verified",
      -        "enum": [
      -          "draft",
      -          "verified"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  "RunInfo": {
      -    "properties": {
      -      "capability": {
      -        "type": "string"
      -      },
      -      "contract_version": {
      -        "type": "string"
      -      },
      -      "duration_ms": {
      -        "type": "integer"
      -      },
      -      "engine_version": {
      -        "type": "string"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "operation": {
      -        "type": "string"
      -      },
      -      "received_at": {
      -        "format": "date-time",
      -        "type": "string"
      -      },
      -      "ruleset_hash": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "ruleset_version": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "capability",
      -      "operation",
      -      "contract_version",
      -      "engine_version",
      -      "ruleset_version",
      -      "ruleset_hash",
      -      "received_at",
      -      "duration_ms"
      -    ],
      -    "type": "object"
      -  },
      -  "ScopeLine": {
      -    "properties": {
      -      "allowance": {
      -        "anyOf": [
      -          {
      -            "$ref": "#/$defs/CostRange"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "confidence": {
      -        "enum": [
      -          "sourced",
      -          "industry_typical",
      -          "assumed"
      -        ],
      -        "type": "string"
      -      },
      -      "cost": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "decision": {
      -        "anyOf": [
      -          {
      -            "enum": [
      -              "approve",
      -              "decline",
      -              "defer"
      -            ],
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "finding_ids": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "line_id": {
      -        "type": "string"
      -      },
      -      "location": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "type": "string"
      -      },
      -      "needs_review": {
      -        "default": false,
      -        "type": "boolean"
      -      },
      -      "phase": {
      -        "$ref": "#/$defs/Phase"
      -      },
      -      "price_basis": {
      -        "$ref": "#/$defs/PriceBasis"
      -      },
      -      "priority": {
      -        "$ref": "#/$defs/Priority"
      -      },
      -      "quantity": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      -            "type": "string"
      -          }
      -        ]
      -      },
      -      "quantity_source": {
      -        "enum": [
      -          "given",
      -          "converted",
      -          "derived",
      -          "fixed"
      -        ],
      -        "type": "string"
      -      },
      -      "refer_out": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "responsibility_by_finding": {
      -        "additionalProperties": {
      -          "$ref": "#/$defs/Responsibility"
      -        },
      -        "type": "object"
      -      },
      -      "responsibility_hint": {
      -        "$ref": "#/$defs/Responsibility"
      -      },
      -      "rule_ids": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "task_id": {
      -        "type": "string"
      -      },
      -      "to_confirm": {
      -        "default": false,
      -        "type": "boolean"
      -      },
      -      "trade": {
      -        "$ref": "#/$defs/Trade"
      -      },
      -      "unit_price": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "uom": {
      -        "$ref": "#/$defs/Uom"
      -      },
      -      "vendor_note": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      }
      -    },
      -    "required": [
      -      "line_id",
      -      "task_id",
      -      "name",
      -      "trade",
      -      "phase",
      -      "priority",
      -      "location",
      -      "finding_ids",
      -      "quantity",
      -      "uom",
      -      "quantity_source",
      -      "price_basis",
      -      "unit_price",
      -      "cost",
      -      "confidence",
      -      "responsibility_hint",
      -      "rule_ids"
      -    ],
      -    "type": "object"
      -  },
      -  "ScopeResult": {
      -    "properties": {
      -      "assumptions": {
      -        "items": {
      -          "$ref": "#/$defs/Note"
      -        },
      -        "type": "array"
      -      },
      -      "detail": {
      -        "enum": [
      -          "summary",
      -          "full"
      -        ],
      -        "type": "string"
      -      },
      -      "disclaimer": {
      -        "type": "string"
      -      },
      -      "findings": {
      -        "items": {
      -          "$ref": "#/$defs/FindingResolution"
      -        },
      -        "type": "array"
      -      },
      -      "lines": {
      -        "items": {
      -          "$ref": "#/$defs/ScopeLine"
      -        },
      -        "type": "array"
      -      },
      -      "lines_omitted": {
      -        "type": "integer"
      -      },
      -      "omitted_note": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "price_tier": {
      -        "$ref": "#/$defs/PriceTier",
      -        "default": "pm_vendor"
      -      },
      -      "profile": {
      -        "$ref": "#/$defs/Profile"
      -      },
      -      "provenance": {
      -        "$ref": "#/$defs/Provenance"
      -      },
      -      "rate_card_applied": {
      -        "items": {
      -          "$ref": "#/$defs/RateCardUse"
      -        },
      -        "type": "array"
      -      },
      -      "rate_card_ignored": {
      -        "items": {
      -          "$ref": "#/$defs/RateCardUse"
      -        },
      -        "type": "array"
      -      },
      -      "refer_outs": {
      -        "items": {
      -          "$ref": "#/$defs/ReferOutNote"
      -        },
      -        "type": "array"
      -      },
      -      "region": {
      -        "$ref": "#/$defs/Region"
      -      },
      -      "summary": {
      -        "type": "string"
      -      },
      -      "totals": {
      -        "$ref": "#/$defs/Totals"
      -      },
      -      "trade_scopes": {
      -        "items": {
      -          "$ref": "#/$defs/TradeScope"
      -        },
      -        "type": "array"
      -      },
      -      "unknowns": {
      -        "items": {
      -          "$ref": "#/$defs/Note"
      -        },
      -        "type": "array"
      -      },
      -      "warnings": {
      -        "items": {
      -          "$ref": "#/$defs/Note"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "summary",
      -      "disclaimer",
      -      "warnings",
      -      "totals",
      -      "refer_outs",
      -      "trade_scopes",
      -      "lines",
      -      "lines_omitted",
      -      "findings",
      -      "assumptions",
      -      "unknowns",
      -      "detail",
      -      "region",
      -      "profile",
      -      "provenance"
      -    ],
      -    "type": "object"
      -  },
      -  "SourceRef": {
      -    "properties": {
      -      "accessed": {
      -        "anyOf": [
      -          {
      -            "format": "date",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "title": {
      -        "type": "string"
      -      },
      -      "url": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "title"
      -    ],
      -    "type": "object"
      -  },
      -  "Suggestion": {
      -    "properties": {
      -      "code": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "code",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  "Totals": {
      -    "properties": {
      -      "allowances": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "approved": {
      -        "anyOf": [
      -          {
      -            "$ref": "#/$defs/CostRange"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "could": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "must": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "note": {
      -        "default": "must, should and could are work lines only. visit_charges (minimum call-out and trip fees, once per trade) are added on top: subtotal = must + should + could + visit_charges; total = subtotal + tax. allowances and to_confirm (uncertain items) are outside the total.",
      -        "type": "string"
      -      },
      -      "should": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "subtotal": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "tax": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "to_confirm": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "total": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "visit_charges": {
      -        "$ref": "#/$defs/CostRange"
      -      }
      -    },
      -    "required": [
      -      "must",
      -      "should",
      -      "could",
      -      "visit_charges",
      -      "subtotal",
      -      "tax",
      -      "total"
      -    ],
      -    "type": "object"
      -  },
      -  "Trade": {
      -    "enum": [
      -      "hauling",
      -      "handyman",
      -      "drywall",
      -      "painter",
      -      "flooring",
      -      "carpet_cleaning",
      -      "cleaning",
      -      "appliance",
      -      "plumber",
      -      "electrician",
      -      "hvac",
      -      "locksmith",
      -      "pest_control",
      -      "landscaping",
      -      "window_glass",
      -      "environmental",
      -      "structural"
      -    ],
      -    "type": "string"
      -  },
      -  "TradeScope": {
      -    "properties": {
      -      "line_ids": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "lines_cost": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "phase": {
      -        "$ref": "#/$defs/Phase"
      -      },
      -      "total": {
      -        "$ref": "#/$defs/CostRange"
      -      },
      -      "trade": {
      -        "$ref": "#/$defs/Trade"
      -      },
      -      "vendor": {
      -        "anyOf": [
      -          {
      -            "$ref": "#/$defs/Vendor"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "visit_charges": {
      -        "$ref": "#/$defs/CostRange"
      -      }
      -    },
      -    "required": [
      -      "trade",
      -      "vendor",
      -      "phase",
      -      "line_ids",
      -      "lines_cost",
      -      "visit_charges",
      -      "total"
      -    ],
      -    "type": "object"
      -  },
      -  "Uom": {
      -    "enum": [
      -      "each",
      -      "sq_ft",
      -      "sq_ft_floor",
      -      "sq_yd",
      -      "linear_ft",
      -      "room",
      -      "unit",
      -      "bedroom",
      -      "bathroom",
      -      "hour",
      -      "cu_yd",
      -      "visit"
      -    ],
      -    "type": "string"
      -  },
      -  "Vendor": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "contact": {
      -        "anyOf": [
      -          {
      -            "maxLength": 200,
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "name": {
      -        "maxLength": 120,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "name"
      -    ],
      -    "type": "object"
      -  }
      -}
    • removedOutput schema / properties / client_refs / anyOf
      Removed value: -[
      -  {
      -    "additionalProperties": true,
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / client_refs / default
      Removed value: -null
    • addedOutput schema / properties / client_refs / type
      Added value: +[
      +  "object",
      +  "null"
      +]
    • removedOutput schema / properties / deprecation / anyOf
      Removed value: -[
      -  {
      -    "items": {
      -      "$ref": "#/$defs/Deprecation"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / deprecation / default
      Removed value: -null
    • addedOutput schema / properties / deprecation / type
      Added value: +[
      +  "array",
      +  "null"
      +]
    • removedOutput schema / properties / input_hash / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / input_hash / default
      Removed value: -null
    • addedOutput schema / properties / input_hash / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / links / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/Links"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / links / default
      Removed value: -null
    • addedOutput schema / properties / links / type
      Added value: +[
      +  "object",
      +  "null"
      +]
    • removedOutput schema / properties / reading / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/Reading"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / reading / default
      Removed value: -null
    • addedOutput schema / properties / reading / type
      Added value: +[
      +  "object",
      +  "null"
      +]
    • removedOutput schema / properties / request_hash / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / request_hash / default
      Removed value: -null
    • addedOutput schema / properties / request_hash / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / result / $ref
      Removed value: -"#/$defs/ScopeResult"
    • addedOutput schema / properties / result / properties
      Added value: +{
      +  "assumptions": {
      +    "type": "array"
      +  },
      +  "detail": {
      +    "type": "string"
      +  },
      +  "disclaimer": {
      +    "type": "string"
      +  },
      +  "findings": {
      +    "type": "array"
      +  },
      +  "lines": {
      +    "type": "array"
      +  },
      +  "lines_omitted": {
      +    "type": "integer"
      +  },
      +  "omitted_note": {
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "price_tier": {
      +    "type": "string"
      +  },
      +  "profile": {
      +    "type": "string"
      +  },
      +  "provenance": {
      +    "type": "object"
      +  },
      +  "rate_card_applied": {
      +    "type": "array"
      +  },
      +  "rate_card_ignored": {
      +    "type": "array"
      +  },
      +  "refer_outs": {
      +    "type": "array"
      +  },
      +  "region": {
      +    "type": "object"
      +  },
      +  "summary": {
      +    "type": "string"
      +  },
      +  "totals": {
      +    "type": "object"
      +  },
      +  "trade_scopes": {
      +    "type": "array"
      +  },
      +  "unknowns": {
      +    "type": "array"
      +  },
      +  "warnings": {
      +    "type": "array"
      +  }
      +}
    • addedOutput schema / properties / result / required
      Added value: +[
      +  "summary",
      +  "disclaimer",
      +  "warnings",
      +  "totals",
      +  "refer_outs",
      +  "trade_scopes",
      +  "lines",
      +  "lines_omitted",
      +  "findings",
      +  "assumptions",
      +  "unknowns",
      +  "detail",
      +  "region",
      +  "profile",
      +  "provenance"
      +]
    • addedOutput schema / properties / result / type
      Added value: +"object"
    • removedOutput schema / properties / result_hash / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / result_hash / default
      Removed value: -null
    • addedOutput schema / properties / result_hash / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / review / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/Review"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / review / default
      Removed value: -null
    • addedOutput schema / properties / review / type
      Added value: +[
      +  "object",
      +  "null"
      +]
    • removedOutput schema / properties / run / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/RunInfo"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / run / default
      Removed value: -null
    • addedOutput schema / properties / run / type
      Added value: +[
      +  "object",
      +  "null"
      +]
    • removedOutput schema / properties / signature / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/ResultSignature"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / signature / default
      Removed value: -null
    • addedOutput schema / properties / signature / type
      Added value: +[
      +  "object",
      +  "null"
      +]
  2. Changed1 schema field changed
    • addedInput schema / properties / pets
      Added value: +{
      +  "description": "Did pets live in the unit? true adds an optional flea treatment.",
      +  "type": "boolean"
      +}
  3. Changed6 schema fields changed
    • changedInput schema / properties / issues / description
      Previous value: -"What was found in plain English, e.g. ['stained carpet in both bedrooms', 'nail holes everywhere', 'oven is filthy']. Read like pasted notes: an entry may hold several conditions ('carpet stained, nail holes'; one finding each); a room before or after the condition sets the location ('Bedroom 2 carpet torn', 'mold in bathroom'); a written count sets the quantity ('3 blinds broken'); an entry saying there is no work ('no mold', 'leak fixed by tenant') is reported as not billed."New value: +"What was found in plain English, e.g. ['stained carpet in both bedrooms', 'nail holes everywhere', 'oven is filthy']. Read like pasted notes: an entry may hold several conditions ('carpet stained, nail holes'; one finding each); a room before or after the condition sets the location ('Bedroom 2 carpet torn', 'mold in bathroom'); a written count sets the quantity ('3 blinds broken'); an entry saying there is no work ('no mold', 'leak fixed by tenant') is reported as not billed. All the issues together may hold up to 12,000 characters; send longer notes in more than one request."
    • addedInput schema / properties / walk_date
      Added value: +{
      +  "description": "The walk-through date; dated or aged items are judged against it. Omit if unknown.",
      +  "format": "date",
      +  "type": "string"
      +}
    • addedOutput schema / $defs / Deprecation
      Added value: +{
      +  "properties": {
      +    "field": {
      +      "type": "string"
      +    },
      +    "until": {
      +      "format": "date",
      +      "type": "string"
      +    },
      +    "use": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "field",
      +    "until",
      +    "use"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / Provenance / properties / rules_as_of
      Added value: +{
      +  "anyOf": [
      +    {
      +      "format": "date",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / $defs / SourceRef / properties / accessed
      Added value: +{
      +  "anyOf": [
      +    {
      +      "format": "date",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / properties / deprecation
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "$ref": "#/$defs/Deprecation"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  4. Changed10 schema fields changed
    • addedInput schema / properties / retain
      Added value: +{
      +  "default": true,
      +  "description": "Optional (contract 0.5.1). false: keep none of this request's text, so the AI reader's answer for the issues is not stored either. By default the text is kept with contact details and access codes removed, to improve matching; the estimate is the same either way.",
      +  "type": "boolean"
      +}
    • addedOutput schema / $defs / FindingResolution / properties / confirmed
      Added value: +{
      +  "default": false,
      +  "type": "boolean"
      +}
    • changedOutput schema / $defs / FindingResolution / properties / not_billed_reason / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "none",
      -      "ok",
      -      "done"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "none",
      +      "ok",
      +      "done",
      +      "no_condition"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / $defs / Reading
      Added value: +{
      +  "properties": {
      +    "counts": {
      +      "$ref": "#/$defs/ReadingCounts"
      +    },
      +    "findings": {
      +      "items": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "id": {
      +      "type": "string"
      +    },
      +    "kind": {
      +      "enum": [
      +        "notes",
      +        "document"
      +      ],
      +      "type": "string"
      +    },
      +    "model": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null
      +    },
      +    "notes": {
      +      "items": {
      +        "$ref": "#/$defs/ReadingNote"
      +      },
      +      "type": "array"
      +    },
      +    "prompt_version": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "kind",
      +    "counts",
      +    "findings"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / ReadingCounts
      Added value: +{
      +  "properties": {
      +    "ai": {
      +      "type": "integer"
      +    },
      +    "parser": {
      +      "type": "integer"
      +    },
      +    "total": {
      +      "type": "integer"
      +    },
      +    "unmatched": {
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "total",
      +    "ai",
      +    "parser",
      +    "unmatched"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / ReadingNote
      Added value: +{
      +  "properties": {
      +    "code": {
      +      "type": "string"
      +    },
      +    "finding_ids": {
      +      "default": [],
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "kind": {
      +      "enum": [
      +        "warning",
      +        "assumption"
      +      ],
      +      "type": "string"
      +    },
      +    "message": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "kind",
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / Review
      Added value: +{
      +  "properties": {
      +    "ai_read": {
      +      "default": 0,
      +      "type": "integer"
      +    },
      +    "note": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null
      +    },
      +    "reading_id": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null
      +    },
      +    "status": {
      +      "default": "verified",
      +      "enum": [
      +        "draft",
      +        "verified"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / reading
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/Reading"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / properties / request_hash
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / properties / review
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/Review"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  5. Changed5 schema fields changed
    • addedInput schema / properties / expect_ruleset
      Added value: +{
      +  "description": "Optional. The ruleset version you built against, as results carry it in provenance.ruleset_version (e.g. 'sd-2026.11.14'), or its sha256: hash. If the rules have changed since, the call fails (nothing computed, nothing charged) and says what is in force now, so you upgrade on your own schedule. Leave it out to answer under the current rules.",
      +  "type": "string"
      +}
    • addedInput schema / properties / serve_pinned
      Added value: +{
      +  "default": false,
      +  "description": "Optional, with expect_ruleset. True asks us to answer under the ruleset version you named even when the rules have changed since, from that version's signed bundle; the result says so in served_from_bundle. We refuse a version older than 12 months, one a later correction or law change replaced for your state, or one we have no bundle for. Default false: the call fails whenever the rules have changed.",
      +  "type": "boolean"
      +}
    • addedOutput schema / $defs / ResultSignature
      Added value: +{
      +  "properties": {
      +    "jws": {
      +      "type": "string"
      +    },
      +    "payload": {
      +      "$ref": "#/$defs/ResultSignaturePayload"
      +    },
      +    "verify_code": {
      +      "type": "string"
      +    },
      +    "verify_url": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "jws",
      +    "payload",
      +    "verify_code",
      +    "verify_url"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / ResultSignaturePayload
      Added value: +{
      +  "properties": {
      +    "capability": {
      +      "type": "string"
      +    },
      +    "engine_version": {
      +      "type": "string"
      +    },
      +    "issued_at": {
      +      "type": "string"
      +    },
      +    "kid": {
      +      "type": "string"
      +    },
      +    "operation": {
      +      "type": "string"
      +    },
      +    "result_hash": {
      +      "type": "string"
      +    },
      +    "ruleset_hash": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "ruleset_version": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "v": {
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "v",
      +    "kid",
      +    "capability",
      +    "operation",
      +    "ruleset_version",
      +    "ruleset_hash",
      +    "engine_version",
      +    "result_hash",
      +    "issued_at"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / signature
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/ResultSignature"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  6. Changed10 schema fields changed
    • addedInput schema / properties / bathrooms / description
      Added value: +"Half baths count as 0.5."
    • addedInput schema / properties / bedrooms / description
      Added value: +"0 for a studio."
    • addedInput schema / properties / price_tier / description
      Added value: +"bulk_contract (portfolio contract prices) | pm_vendor (default: a property manager buying turns from local vendors) | retail_one_off (an owner hiring one contractor)."
    • addedInput schema / properties / price_tier / type
      Added value: +"string"
    • addedInput schema / properties / profile / description
      Added value: +"minimum (rent-ready basics) | standard | premium (higher finish)."
    • addedInput schema / properties / profile / type
      Added value: +"string"
    • addedInput schema / properties / unit_type / description
      Added value: +"Single-family homes and townhomes get house-sized defaults (floor area, locks)."
    • addedInput schema / properties / unit_type / type
      Added value: +"string"
    • addedInput schema / properties / year_built / description
      Added value: +"Drives lead-paint (pre-1978) handling."
    • addedInput schema / properties / zip / description
      Added value: +"The user's 5-digit US ZIP code. If it is missing or not exactly 5 digits, ask the user; never guess, pad or correct it."
  7. Changed188 schema fields changed
    • removedInput schema / $defs / PriceTier / title
      Removed value: -"PriceTier"
    • removedInput schema / $defs / Profile / title
      Removed value: -"Profile"
    • removedInput schema / $defs / UnitType / title
      Removed value: -"UnitType"
    • removedInput schema / properties / audit / title
      Removed value: -"Audit"
    • removedInput schema / properties / bathrooms / title
      Removed value: -"Bathrooms"
    • removedInput schema / properties / bedrooms / title
      Removed value: -"Bedrooms"
    • removedInput schema / properties / carpet / anyOf
      Removed value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / carpet / default
      Removed value: -null
    • removedInput schema / properties / carpet / title
      Removed value: -"Carpet"
    • addedInput schema / properties / carpet / type
      Added value: +"boolean"
    • addedInput schema / properties / client_refs / additionalProperties
      Added value: +{
      +  "type": "string"
      +}
    • removedInput schema / properties / client_refs / anyOf
      Removed value: -[
      -  {
      -    "additionalProperties": {
      -      "type": "string"
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / client_refs / default
      Removed value: -null
    • removedInput schema / properties / client_refs / title
      Removed value: -"Client Refs"
    • addedInput schema / properties / client_refs / type
      Added value: +"object"
    • removedInput schema / properties / detail / title
      Removed value: -"Detail"
    • changedInput schema / properties / issues / description
      Previous value: -"What was found, one plain-English item per entry, e.g. ['stained carpet in both bedrooms', 'nail holes everywhere', 'oven is filthy']. A room at the start sets the location ('Bedroom 2 carpet torn')."New value: +"What was found in plain English, e.g. ['stained carpet in both bedrooms', 'nail holes everywhere', 'oven is filthy']. Read like pasted notes: an entry may hold several conditions ('carpet stained, nail holes'; one finding each); a room before or after the condition sets the location ('Bedroom 2 carpet torn', 'mold in bathroom'); a written count sets the quantity ('3 blinds broken'); an entry saying there is no work ('no mold', 'leak fixed by tenant') is reported as not billed."
    • removedInput schema / properties / issues / title
      Removed value: -"Issues"
    • removedInput schema / properties / sq_ft / anyOf
      Removed value: -[
      -  {
      -    "maximum": 20000,
      -    "minimum": 150,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / sq_ft / default
      Removed value: -null
    • addedInput schema / properties / sq_ft / maximum
      Added value: +20000
    • addedInput schema / properties / sq_ft / minimum
      Added value: +150
    • removedInput schema / properties / sq_ft / title
      Removed value: -"Sq Ft"
    • addedInput schema / properties / sq_ft / type
      Added value: +"integer"
    • removedInput schema / properties / year_built / anyOf
      Removed value: -[
      -  {
      -    "maximum": 2100,
      -    "minimum": 1700,
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / year_built / default
      Removed value: -null
    • addedInput schema / properties / year_built / maximum
      Added value: +2100
    • addedInput schema / properties / year_built / minimum
      Added value: +1700
    • removedInput schema / properties / year_built / title
      Removed value: -"Year Built"
    • addedInput schema / properties / year_built / type
      Added value: +"integer"
    • removedInput schema / properties / zip / title
      Removed value: -"Zip"
    • removedInput schema / title
      Removed value: -"property_turnover_quick_estimateArguments"
    • removedOutput schema / $defs / CostRange / description
      Removed value: -"A low / expected / high estimate. Invariant: low <= expected <= high."
    • removedOutput schema / $defs / CostRange / properties / expected / title
      Removed value: -"Expected"
    • removedOutput schema / $defs / CostRange / properties / high / title
      Removed value: -"High"
    • removedOutput schema / $defs / CostRange / properties / low / title
      Removed value: -"Low"
    • removedOutput schema / $defs / CostRange / title
      Removed value: -"CostRange"
    • removedOutput schema / $defs / Extent / title
      Removed value: -"Extent"
    • removedOutput schema / $defs / FindingResolution / properties / code / title
      Removed value: -"Code"
    • addedOutput schema / $defs / FindingResolution / properties / confidence
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • removedOutput schema / $defs / FindingResolution / properties / finding_id / title
      Removed value: -"Finding Id"
    • removedOutput schema / $defs / FindingResolution / properties / issue_name / description
      Removed value: -"Readable name of `code`."
    • removedOutput schema / $defs / FindingResolution / properties / issue_name / title
      Removed value: -"Issue Name"
    • removedOutput schema / $defs / FindingResolution / properties / line_ids / title
      Removed value: -"Line Ids"
    • removedOutput schema / $defs / FindingResolution / properties / location / description
      Removed value: -"Where, as shown on the lines."
    • removedOutput schema / $defs / FindingResolution / properties / location / title
      Removed value: -"Location"
    • removedOutput schema / $defs / FindingResolution / properties / match_note / description
      Removed value: -"Set when the match left a fixture word unexplained: check this finding."
    • removedOutput schema / $defs / FindingResolution / properties / match_note / title
      Removed value: -"Match Note"
    • addedOutput schema / $defs / FindingResolution / properties / model
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / $defs / FindingResolution / properties / needs_review
      Added value: +{
      +  "default": false,
      +  "type": "boolean"
      +}
    • addedOutput schema / $defs / FindingResolution / properties / not_billed_reason
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "none",
      +        "ok",
      +        "done"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • changedOutput schema / $defs / FindingResolution / properties / resolution / enum
      Previous value: -[
      -  "exact",
      -  "alias",
      -  "unmapped"
      -]New value: +[
      +  "exact",
      +  "alias",
      +  "ai",
      +  "unmapped",
      +  "not_billed"
      +]
    • removedOutput schema / $defs / FindingResolution / properties / resolution / title
      Removed value: -"Resolution"
    • removedOutput schema / $defs / FindingResolution / properties / suggested_codes / title
      Removed value: -"Suggested Codes"
    • removedOutput schema / $defs / FindingResolution / properties / suggestions / description
      Removed value: -"Suggested codes with readable names, best first."
    • removedOutput schema / $defs / FindingResolution / properties / suggestions / title
      Removed value: -"Suggestions"
    • removedOutput schema / $defs / FindingResolution / properties / text / description
      Removed value: -"The finding as given (description, else code), for tracing."
    • removedOutput schema / $defs / FindingResolution / properties / text / title
      Removed value: -"Text"
    • removedOutput schema / $defs / FindingResolution / properties / uncertain / description
      Removed value: -"The description hedges ('mold?', 'maybe', 'possible'). Refer-outs from uncertain findings are check-first: they add a warning instead of holding phases."
    • removedOutput schema / $defs / FindingResolution / properties / uncertain / title
      Removed value: -"Uncertain"
    • removedOutput schema / $defs / FindingResolution / title
      Removed value: -"FindingResolution"
    • removedOutput schema / $defs / Links / description
      Removed value: -"Where the user gets files. MCP results only; the estimate itself is not stored."
    • removedOutput schema / $defs / Links / properties / downloads / description
      Removed value: -"Format -> URL. POST the property_turnover_scope arguments as JSON."
    • removedOutput schema / $defs / Links / properties / downloads / title
      Removed value: -"Downloads"
    • removedOutput schema / $defs / Links / properties / how_to_get_files / title
      Removed value: -"How To Get Files"
    • removedOutput schema / $defs / Links / properties / web_tool / description
      Removed value: -"The free web tool."
    • removedOutput schema / $defs / Links / properties / web_tool / title
      Removed value: -"Web Tool"
    • removedOutput schema / $defs / Links / properties / web_tool_prefilled / description
      Removed value: -"Opens the web tool with these inputs filled in and estimates them; the user can download the Excel workbook and owner estimate there. Give this link to the user."
    • removedOutput schema / $defs / Links / properties / web_tool_prefilled / title
      Removed value: -"Web Tool Prefilled"
    • removedOutput schema / $defs / Links / title
      Removed value: -"Links"
    • removedOutput schema / $defs / Note / properties / code / title
      Removed value: -"Code"
    • removedOutput schema / $defs / Note / properties / finding_ids / title
      Removed value: -"Finding Ids"
    • removedOutput schema / $defs / Note / properties / line_ids / title
      Removed value: -"Line Ids"
    • removedOutput schema / $defs / Note / properties / message / title
      Removed value: -"Message"
    • removedOutput schema / $defs / Note / title
      Removed value: -"Note"
    • removedOutput schema / $defs / Phase / description
      Removed value: -"Make-ready order. Values sort in sequence order via PHASE_ORDER."
    • removedOutput schema / $defs / Phase / title
      Removed value: -"Phase"
    • removedOutput schema / $defs / PriceBasis / title
      Removed value: -"PriceBasis"
    • removedOutput schema / $defs / PriceTier / description
      Removed value: -"Purchasing channel. Library prices are pm_vendor (a PM buying turns from a local vendor)."
    • removedOutput schema / $defs / PriceTier / title
      Removed value: -"PriceTier"
    • removedOutput schema / $defs / Priority / title
      Removed value: -"Priority"
    • removedOutput schema / $defs / Profile / title
      Removed value: -"Profile"
    • removedOutput schema / $defs / Provenance / properties / ruleset_hash / title
      Removed value: -"Ruleset Hash"
    • removedOutput schema / $defs / Provenance / properties / ruleset_id / title
      Removed value: -"Ruleset Id"
    • removedOutput schema / $defs / Provenance / properties / ruleset_version / title
      Removed value: -"Ruleset Version"
    • removedOutput schema / $defs / Provenance / properties / sources / title
      Removed value: -"Sources"
    • removedOutput schema / $defs / Provenance / title
      Removed value: -"Provenance"
    • removedOutput schema / $defs / RateCardUse / properties / entry / description
      Removed value: -"0-based index into the request's rate_card."
    • removedOutput schema / $defs / RateCardUse / properties / entry / title
      Removed value: -"Entry"
    • removedOutput schema / $defs / RateCardUse / properties / lines / title
      Removed value: -"Lines"
    • removedOutput schema / $defs / RateCardUse / properties / note / title
      Removed value: -"Note"
    • removedOutput schema / $defs / RateCardUse / properties / target / description
      Removed value: -"The entry's task_id or trade."
    • removedOutput schema / $defs / RateCardUse / properties / target / title
      Removed value: -"Target"
    • removedOutput schema / $defs / RateCardUse / title
      Removed value: -"RateCardUse"
    • removedOutput schema / $defs / ReferOutNote / properties / blocks_phases / title
      Removed value: -"Blocks Phases"
    • removedOutput schema / $defs / ReferOutNote / properties / finding_ids / title
      Removed value: -"Finding Ids"
    • removedOutput schema / $defs / ReferOutNote / properties / id / title
      Removed value: -"Id"
    • removedOutput schema / $defs / ReferOutNote / properties / kind / title
      Removed value: -"Kind"
    • removedOutput schema / $defs / ReferOutNote / properties / name / title
      Removed value: -"Name"
    • removedOutput schema / $defs / ReferOutNote / properties / professional / title
      Removed value: -"Professional"
    • removedOutput schema / $defs / ReferOutNote / properties / reason / title
      Removed value: -"Reason"
    • removedOutput schema / $defs / ReferOutNote / properties / sources / title
      Removed value: -"Sources"
    • removedOutput schema / $defs / ReferOutNote / properties / unconfirmed / description
      Removed value: -"Every triggering finding was hedged ('maybe', '?'): check first; no phase is held until the condition is confirmed (see warnings)."
    • removedOutput schema / $defs / ReferOutNote / properties / unconfirmed / title
      Removed value: -"Unconfirmed"
    • removedOutput schema / $defs / ReferOutNote / title
      Removed value: -"ReferOutNote"
    • removedOutput schema / $defs / Region / properties / basis / title
      Removed value: -"Basis"
    • removedOutput schema / $defs / Region / properties / cbsa / title
      Removed value: -"Cbsa"
    • removedOutput schema / $defs / Region / properties / cbsa_name / title
      Removed value: -"Cbsa Name"
    • removedOutput schema / $defs / Region / properties / vintage / title
      Removed value: -"Vintage"
    • removedOutput schema / $defs / Region / properties / zip3 / title
      Removed value: -"Zip3"
    • removedOutput schema / $defs / Region / title
      Removed value: -"Region"
    • removedOutput schema / $defs / Responsibility / title
      Removed value: -"Responsibility"
    • removedOutput schema / $defs / RunInfo / properties / capability / title
      Removed value: -"Capability"
    • removedOutput schema / $defs / RunInfo / properties / contract_version / title
      Removed value: -"Contract Version"
    • removedOutput schema / $defs / RunInfo / properties / duration_ms / title
      Removed value: -"Duration Ms"
    • removedOutput schema / $defs / RunInfo / properties / engine_version / title
      Removed value: -"Engine Version"
    • removedOutput schema / $defs / RunInfo / properties / id / title
      Removed value: -"Id"
    • removedOutput schema / $defs / RunInfo / properties / operation / title
      Removed value: -"Operation"
    • removedOutput schema / $defs / RunInfo / properties / received_at / title
      Removed value: -"Received At"
    • removedOutput schema / $defs / RunInfo / properties / ruleset_hash / title
      Removed value: -"Ruleset Hash"
    • removedOutput schema / $defs / RunInfo / properties / ruleset_version / title
      Removed value: -"Ruleset Version"
    • removedOutput schema / $defs / RunInfo / title
      Removed value: -"RunInfo"
    • removedOutput schema / $defs / ScopeLine / properties / allowance / description
      Removed value: -"Quote-required lines only: a non-binding budget range. NOT included in any total; summed separately in totals.allowances."
    • removedOutput schema / $defs / ScopeLine / properties / confidence / title
      Removed value: -"Confidence"
    • removedOutput schema / $defs / ScopeLine / properties / decision / title
      Removed value: -"Decision"
    • removedOutput schema / $defs / ScopeLine / properties / finding_ids / title
      Removed value: -"Finding Ids"
    • removedOutput schema / $defs / ScopeLine / properties / line_id / title
      Removed value: -"Line Id"
    • removedOutput schema / $defs / ScopeLine / properties / location / title
      Removed value: -"Location"
    • removedOutput schema / $defs / ScopeLine / properties / name / title
      Removed value: -"Name"
    • addedOutput schema / $defs / ScopeLine / properties / needs_review
      Added value: +{
      +  "default": false,
      +  "type": "boolean"
      +}
    • removedOutput schema / $defs / ScopeLine / properties / quantity / title
      Removed value: -"Quantity"
    • removedOutput schema / $defs / ScopeLine / properties / quantity_source / title
      Removed value: -"Quantity Source"
    • removedOutput schema / $defs / ScopeLine / properties / refer_out / title
      Removed value: -"Refer Out"
    • removedOutput schema / $defs / ScopeLine / properties / responsibility_by_finding / description
      Removed value: -"Set when the hint is 'mixed': the hint of each finding the line carries."
    • removedOutput schema / $defs / ScopeLine / properties / responsibility_by_finding / title
      Removed value: -"Responsibility By Finding"
    • removedOutput schema / $defs / ScopeLine / properties / rule_ids / title
      Removed value: -"Rule Ids"
    • removedOutput schema / $defs / ScopeLine / properties / task_id / title
      Removed value: -"Task Id"
    • addedOutput schema / $defs / ScopeLine / properties / to_confirm
      Added value: +{
      +  "default": false,
      +  "type": "boolean"
      +}
    • removedOutput schema / $defs / ScopeLine / properties / vendor_note / title
      Removed value: -"Vendor Note"
    • removedOutput schema / $defs / ScopeLine / title
      Removed value: -"ScopeLine"
    • removedOutput schema / $defs / ScopeResult / description
      Removed value: -"Field order puts the answer first (summary, disclaimer, totals, refer-outs, vendor\nscopes), because agents and truncating clients read from the top."
    • removedOutput schema / $defs / ScopeResult / properties / assumptions / title
      Removed value: -"Assumptions"
    • removedOutput schema / $defs / ScopeResult / properties / detail / title
      Removed value: -"Detail"
    • removedOutput schema / $defs / ScopeResult / properties / disclaimer / title
      Removed value: -"Disclaimer"
    • removedOutput schema / $defs / ScopeResult / properties / findings / title
      Removed value: -"Findings"
    • removedOutput schema / $defs / ScopeResult / properties / lines / title
      Removed value: -"Lines"
    • removedOutput schema / $defs / ScopeResult / properties / lines_omitted / description
      Removed value: -"Lines left out in summary detail."
    • removedOutput schema / $defs / ScopeResult / properties / lines_omitted / title
      Removed value: -"Lines Omitted"
    • removedOutput schema / $defs / ScopeResult / properties / omitted_note / description
      Removed value: -"Summary detail: what the omitted lines are (routine turn tasks) and their cost."
    • removedOutput schema / $defs / ScopeResult / properties / omitted_note / title
      Removed value: -"Omitted Note"
    • removedOutput schema / $defs / ScopeResult / properties / rate_card_applied / description
      Removed value: -"Rate card entries that changed a price."
    • removedOutput schema / $defs / ScopeResult / properties / rate_card_applied / title
      Removed value: -"Rate Card Applied"
    • removedOutput schema / $defs / ScopeResult / properties / rate_card_ignored / description
      Removed value: -"Rate card entries that changed nothing, with why."
    • removedOutput schema / $defs / ScopeResult / properties / rate_card_ignored / title
      Removed value: -"Rate Card Ignored"
    • removedOutput schema / $defs / ScopeResult / properties / refer_outs / title
      Removed value: -"Refer Outs"
    • removedOutput schema / $defs / ScopeResult / properties / summary / title
      Removed value: -"Summary"
    • removedOutput schema / $defs / ScopeResult / properties / trade_scopes / title
      Removed value: -"Trade Scopes"
    • removedOutput schema / $defs / ScopeResult / properties / unknowns / title
      Removed value: -"Unknowns"
    • removedOutput schema / $defs / ScopeResult / properties / warnings / title
      Removed value: -"Warnings"
    • removedOutput schema / $defs / ScopeResult / title
      Removed value: -"ScopeResult"
    • removedOutput schema / $defs / SourceRef / properties / id / title
      Removed value: -"Id"
    • removedOutput schema / $defs / SourceRef / properties / title / title
      Removed value: -"Title"
    • removedOutput schema / $defs / SourceRef / properties / url / title
      Removed value: -"Url"
    • removedOutput schema / $defs / SourceRef / title
      Removed value: -"SourceRef"
    • removedOutput schema / $defs / Suggestion / properties / code / title
      Removed value: -"Code"
    • removedOutput schema / $defs / Suggestion / properties / name / title
      Removed value: -"Name"
    • removedOutput schema / $defs / Suggestion / title
      Removed value: -"Suggestion"
    • removedOutput schema / $defs / Totals / properties / allowances / description
      Removed value: -"Budget allowance for quote-required lines (refer-outs, manual quotes). Shown outside the totals: subtotal and total never include it."
    • changedOutput schema / $defs / Totals / properties / note / default
      Previous value: -"must, should and could are work lines only. visit_charges (minimum call-out and trip fees, once per trade) are added on top: subtotal = must + should + could + visit_charges; total = subtotal + tax. allowances are outside the total."New value: +"must, should and could are work lines only. visit_charges (minimum call-out and trip fees, once per trade) are added on top: subtotal = must + should + could + visit_charges; total = subtotal + tax. allowances and to_confirm (uncertain items) are outside the total."
    • removedOutput schema / $defs / Totals / properties / note / description
      Removed value: -"How the totals add up."
    • removedOutput schema / $defs / Totals / properties / note / title
      Removed value: -"Note"
    • addedOutput schema / $defs / Totals / properties / to_confirm
      Added value: +{
      +  "$ref": "#/$defs/CostRange"
      +}
    • removedOutput schema / $defs / Totals / title
      Removed value: -"Totals"
    • removedOutput schema / $defs / Trade / title
      Removed value: -"Trade"
    • removedOutput schema / $defs / TradeScope / properties / line_ids / title
      Removed value: -"Line Ids"
    • removedOutput schema / $defs / TradeScope / title
      Removed value: -"TradeScope"
    • removedOutput schema / $defs / Uom / title
      Removed value: -"Uom"
    • removedOutput schema / $defs / Vendor / properties / contact / title
      Removed value: -"Contact"
    • removedOutput schema / $defs / Vendor / properties / name / title
      Removed value: -"Name"
    • removedOutput schema / $defs / Vendor / title
      Removed value: -"Vendor"
    • removedOutput schema / properties / client_refs / description
      Removed value: -"Your own ids, echoed when you sent client_refs."
    • removedOutput schema / properties / client_refs / title
      Removed value: -"Client Refs"
    • removedOutput schema / properties / input_hash / description
      Removed value: -"Only with audit=true."
    • removedOutput schema / properties / input_hash / title
      Removed value: -"Input Hash"
    • removedOutput schema / properties / result_hash / description
      Removed value: -"Only with audit=true."
    • removedOutput schema / properties / result_hash / title
      Removed value: -"Result Hash"
    • removedOutput schema / properties / run / description
      Removed value: -"Only with audit=true."
    • removedOutput schema / title
      Removed value: -"PropertyTurnoverQuickEstimateMcpResult"
  8. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/non-destructive, and the description still adds real behavioral context: an AI model reads the free-text issues, the answer is a draft of what was read, unplaceable words bill nothing, and the same findings under the same ruleset yield the same result with the AI never setting a number. That determinism and trust caveat is exactly the kind of disclosure annotations cannot carry.

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, then inputs, then returns, then exclusions — a sensible order with no filler. It is dense with clause-heavy sentences and repeats some return detail the output schema already provides, but nothing is wasted.

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

Completeness5/5

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

For an 18-parameter, nested-schema tool with an output schema and full annotation coverage, the description supplies what structured data cannot: domain limits (US only, post move-out), the AI-reading caveat, determinism guarantees, and explicit exclusions. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

With 100% schema description coverage across 18 parameters, the baseline is 3; the description goes slightly beyond by framing the inputs (ZIP, beds, baths, plain-English issues, optional unit type/size/year) and noting the issues may be derived from the user's photos, a provenance detail the schema does not state.

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

Purpose5/5

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

States a specific verb and resource ("estimates what it costs to turn over a US rental unit after move-out") plus the entry-point role ("the first tool for a turnover estimate"). The explicit "Not for" list (hazard diagnosis, deposit legal advice, remodel bids, non-US properties) carves it away from the deposit_settlement_* siblings and from scope/issue-code reference tools.

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?

Clear when-to-use (post move-out turnover costing, call this first) and explicit when-not-to-use exclusions. It does not name property_turnover_scope or property_turnover_issue_codes as alternatives or explain the handoff to them, so routing across the turnover family is only implied.

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.