Data scope:
Recommended tool call sequence
Start from a CLIP. If you only have an address, resolve it first — these tools do not accept addresses.at-get_property_analytics
Required scope: risk:analytics.
Retrieve comprehensive property analytics data — both age of roof and climate risk — for a list of CLIPs in a single call.
When to use:
- You need both roof condition and climate risk data for one or more properties
- Performing full property risk assessments that combine physical condition with climate exposure
- Running portfolio-level analyses where you want all available analytics in one request
- “Get full analytics for CLIPs 123456789 and 987654321”
- “Retrieve roof age and climate risk for CLIP 555555555”
Input schema
Each CLIP must be a non-empty string consisting only of numeric characters (e.g.
["123456789", "987654321"])Example request
Output schema
Each item indata carries clip, a roofAge array of RoofAgeItem, and a climateRisk array of ClimateRiskItem. Both arrays are flat — there is no propertyAnalytics, ageOfRoof, or climateRiskAnalytics wrapper. See Response envelope and Response models.
at-get_property_roof_age
Required scope: risk:age-of-roof.
Retrieve age of roof data only — roof age, construction year, confidence rank, and property address with geocode — for a list of CLIPs.
When to use:
- You only need roof condition data without climate risk scores
- Monitoring roof age across a portfolio for replacement planning
- Validating roof construction year during insurance underwriting
- “Get roof age for CLIP 123456789”
- “Check roof construction year and confidence for CLIPs 111111111 and 222222222”
Input schema
Each CLIP must be a non-empty string consisting only of numeric characters (e.g.
["123456789", "987654321"])Example request
Output schema
Each item indata carries clip and a roofAge array of RoofAgeItem. There is no climateRisk array and no propertyAnalytics or ageOfRoof wrapper. See Response envelope and Roof age models.
at-get_property_climate_risk
Required scope: risk:climate-analytics.
Retrieve climate risk data only — multi-peril loss scores, climate scenario comparisons, and projections by year — for a list of CLIPs.
The server returns one flat perils[] row for every peril, climate scenario, and projection year combination. The same peril therefore appears many times in the array.
The set of perils returned varies by property and by model version. Read perils[].description and perils[].perilId from the response rather than assuming a fixed list.
Climate scenario — a standardised assumption about future greenhouse gas concentrations,
used to project risk forward. Cotality returns Representative Concentration Pathways (RCP 2.6
“favorable”, RCP 4.5 “moderate”, RCP 8.5 “severe”) and Shared Socioeconomic Pathways
(SSP1-2.6, SSP2-4.5, SSP5-8.5), plus a
BASE baseline representing current conditions. See
PerilItem for the exact codes.- You only need climate risk exposure without roof condition data
- Evaluating climate resilience for one or more properties
- Comparing future risk projections across climate scenarios and projection years
- “Get climate risk scores for CLIP 123456789”
- “Compare flood and wildfire risk for CLIPs 111111111 and 222222222”
Input schema
Each CLIP must be a non-empty string consisting only of numeric characters (e.g.
["123456789", "987654321"])Example request
Output schema
Each item indata carries clip and a climateRisk array of ClimateRiskItem. There is no roofAge array and no propertyAnalytics or climateRiskAnalytics wrapper. See Response envelope and Climate risk models.
Response envelope
All three tools return an identical envelope:
Both fields are always present in a successful response. There is no
success or
messages field — failure is signalled by an MCP error carrying a ToolError payload. See
Response envelope and MCP tool errors.
A CLIP that matches no property is not an error. You receive a successful response with
count of 0 and an empty data array. When you submit several CLIPs, only the ones that
matched are returned — compare count against the number you sent.Response models
Each tool returns one flat item per CLIP. The upstreampropertyAnalytics, ageOfRoof, and
climateRiskAnalytics wrappers are removed before the data reaches you, and address, geocode,
and per-scenario values are promoted or flattened. All fields are optional and are omitted when
no value is available.
Roof age models
RoofAgeItem
EachRoofAgeItem holds one roof estimate, with the address and geocode fields promoted to the
top of the item. All fields are optional and are omitted when no value is available.
RoofAgeItem does not repeat clip. Read the CLIP from the parent item in data.RoofAgeAttributes
Theattributes object groups the lower-frequency roof fields. It is omitted entirely when none
of its fields has a value.
Understanding roofConstructedConfidenceRank
Each RoofAgeItem returns a roofConstructedConfidenceRank describing the model’s confidence in the estimated construction year — not in the age itself. Values are case-sensitive and must be compared exactly as returned.
A
Low_modeled estimate is not equivalent to missing data; it means the model produced an estimate but from weaker underlying signals. The field is omitted entirely when no value is available.
Climate risk models
ClimateRiskItem
EachClimateRiskItem holds one climate risk model run, with the structure geocode promoted to
the top of the item. All fields are optional and are omitted when no value is available.
PerilItem
perils is a fully flattened list. The server expands every peril across every climate
scenario and every projection year, and emits one row per combination. The same peril appears
many times — once for each climateScenarioCode and timeHorizon pair.
All fields are optional and are omitted when no value is available.
The peril list varies by property and model version. Read
description and perilId rather
than coding against a fixed set.
Climate scenario codes
PerilAttributes
The return-period loss estimates live insideattributes on each peril row — not directly on the
peril. The object is omitted entirely when none of its fields has a value.
Three concepts run through this object:
The 200-year fields are populated for AR6 SSP scenarios only. Expect them to be absent under
the RCP scenarios.
The AEP fields spell it “Exceedance” and the OEP fields spell it “Exceedence”. That
inconsistency comes from the upstream data model and is reproduced exactly in the tool output —
it is not a typo in this page. Match the field names character for character.
Sample response — full analytics
at-get_property_analytics returns both arrays. This example shows one peril (FLOOD) expanded
across two scenarios, and a second peril (WILDFIRE) under one scenario — four flat rows in
perils for two perils.
Sample response — roof age only
at-get_property_roof_age returns clip and roofAge. There is no climateRisk key.
Sample response — climate risk only
at-get_property_climate_risk returns clip and climateRisk. There is no roofAge key. The
two rows below are the same peril under two scenario-year combinations.
Errors and limits
These tools return the standard MCPToolError object on failure — code, message, and
retryable. Only retry when retryable is true.
There is no
NOT_FOUND code on these tools. A CLIP with no analytics coverage is returned as
a successful response with count of 0 — check count, do not wait for an error.429 handling.
Related
- CLIP tools — resolve an address to a CLIP before calling these tools
- Property characteristics — structural detail for the same CLIP
- Market and trend analytics — market context for the surrounding geography
- Response envelope — the
dataandcountshape