Skip to main content
Data capabilities: Data scope:
Start from a CLIP. If you only have an address, resolve it first — these tools do not accept addresses.
Prefer at-get_property_analytics when you want both datasets — it is one request against your quota instead of two. Use the single-dataset tools when your token holds only one of the two scopes.

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
Examples:
  • “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 in data 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
Examples:
  • “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 in data 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.
When to use:
  • 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
Examples:
  • “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 in data 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 upstream propertyAnalytics, 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.
Do not look for propertyAnalytics, ageOfRoof, climateRiskAnalytics, craStructureGeocode, rcpScenarios, or timeHorizons in the response. Those names belong to the upstream data model, not to the MCP tool output.

Roof age models

RoofAgeItem

Each RoofAgeItem 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

The attributes 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.
Match these values exactly, including capitalization and the _modeled suffix. Uppercase forms such as HIGH, MEDIUM, or LOW are never returned, and a comparison against them silently fails.

Climate risk models

ClimateRiskItem

Each ClimateRiskItem 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.
Do not assume one row per peril. Group or filter perils on perilId + climateScenarioCode
  • timeHorizon before you compare or aggregate. Reading perils[0] gives you one arbitrary scenario-year combination, not the peril’s overall risk.
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

Do not parse climateScenarioCode as a number. "RCP45" means RCP 4.5, not 45. Match the code as a string against the table above.

PerilAttributes

The return-period loss estimates live inside attributes 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 MCP ToolError 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.
See MCP tool errors for the full contract and input limits, and Rate limits for 429 handling.