Skip to main content
Glama

Criora: climate & disaster risk for any place

Climate and disaster risk of a place

assess_place
Read-onlyIdempotent

Climate and disaster risk overview of one place or property in a single answer: this week's forecast risk by day, natural hazards happening nearby, the headline long-term exposures (heat, river and coastal flooding, sea level rise, water stress, drought, heavy rain, wildfire, climate zone) and the risk profile of the country it lies in.

Use it first for an open question about one place ("is it safe there", "what are the risks", "should I worry about floods or heat"). For one specific question call the matching tool, which answers it in full: get_forecast, get_hazards_near, get_climate_profile or get_country_profile. To compare places, call get_climate_profile once per place.

Give latitude and longitude, or a place name, which is resolved to its best match and reported back. Returns the forecast days, the hazard events, the headline climate layers with their sources, the country summary and criora_url, the place on the Criora map.

Input Schema

NameRequiredDescriptionDefault
placeNoA place name or address, used only when latitude and longitude are not given. It is resolved to its best match by a geocoder shared by every user and limited to one lookup a second, so pass coordinates when you have them
latitudeNoLatitude of the place asked about, in degrees, WGS84. Give it with longitude, or give place instead
longitudeNoLongitude of the place asked about, in degrees, WGS84. Give it with latitude, or give place instead

Output Schema

NameRequiredDescriptionDefault
climateYes
countryYesNull where the point lies in no country the Atlas covers
forecastYesNull when the current run publishes no point data
locationYes
criora_urlYes
country_urlYes
resolved_fromYesWhat a place name was resolved to; null when coordinates were given
hazards_nearbyYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • addedOutput schema / $defs / Driver
      Added value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "air_temperature_max": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "For heat and cold, the highest air temperature beside the UTCI; null otherwise",
      +      "title": "Air Temperature Max"
      +    },
      +    "limit": {
      +      "anyOf": [
      +        {
      +          "enum": [
      +            "at_least",
      +            "at_most"
      +          ],
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Set where the value is past the end of the ladder and is only a bound",
      +      "title": "Limit"
      +    },
      +    "threshold": {
      +      "$ref": "#/$defs/Threshold"
      +    },
      +    "unit": {
      +      "title": "Unit",
      +      "type": "string"
      +    },
      +    "value": {
      +      "description": "The value that set the class",
      +      "title": "Value",
      +      "type": "number"
      +    },
      +    "value_max": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "The highest value the stored class allows; null when open",
      +      "title": "Value Max"
      +    },
      +    "value_min": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "The lowest value the stored class allows; null when open",
      +      "title": "Value Min"
      +    },
      +    "variable": {
      +      "description": "utci, the felt temperature in full sun; wind_gust_10m; or precip_intensity_mmh",
      +      "title": "Variable",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "variable",
      +    "value",
      +    "value_min",
      +    "value_max",
      +    "limit",
      +    "unit",
      +    "threshold",
      +    "air_temperature_max"
      +  ],
      +  "title": "Driver",
      +  "type": "object"
      +}
    • removedOutput schema / $defs / HazardEvent
      Removed value: -{
      -  "additionalProperties": true,
      -  "properties": {
      -    "bearing_deg": {
      -      "description": "Degrees clockwise from north, from the place to the event",
      -      "title": "Bearing Deg",
      -      "type": "number"
      -    },
      -    "country_name": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "title": "Country Name"
      -    },
      -    "distance_km": {
      -      "title": "Distance Km",
      -      "type": "number"
      -    },
      -    "event_date": {
      -      "title": "Event Date",
      -      "type": "string"
      -    },
      -    "id": {
      -      "anyOf": [
      -        {
      -          "type": "integer"
      -        },
      -        {
      -          "type": "string"
      -        }
      -      ],
      -      "title": "Id"
      -    },
      -    "label": {
      -      "title": "Label",
      -      "type": "string"
      -    },
      -    "lat": {
      -      "title": "Lat",
      -      "type": "number"
      -    },
      -    "lon": {
      -      "title": "Lon",
      -      "type": "number"
      -    },
      -    "metadata": {
      -      "additionalProperties": true,
      -      "title": "Metadata",
      -      "type": "object"
      -    },
      -    "severity": {
      -      "title": "Severity",
      -      "type": "string"
      -    },
      -    "source": {
      -      "title": "Source",
      -      "type": "string"
      -    },
      -    "type": {
      -      "title": "Type",
      -      "type": "string"
      -    },
      -    "value": {
      -      "anyOf": [
      -        {
      -          "type": "number"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "title": "Value"
      -    },
      -    "value_text": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "title": "Value Text"
      -    },
      -    "value_unit": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "title": "Value Unit"
      -    }
      -  },
      -  "required": [
      -    "id",
      -    "type",
      -    "lat",
      -    "lon",
      -    "label",
      -    "severity",
      -    "event_date",
      -    "source",
      -    "distance_km",
      -    "bearing_deg",
      -    "metadata"
      -  ],
      -  "title": "HazardEvent",
      -  "type": "object"
      -}
    • changedOutput schema / $defs / HazardsNearby / properties / data / items / $ref
      Previous value: -"#/$defs/HazardEvent"New value: +"#/$defs/NearbyHazardEvent"
    • addedOutput schema / $defs / NearbyHazardEvent
      Added value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "active_at": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "The latest moment the source reports it active",
      +      "title": "Active At"
      +    },
      +    "bearing_deg": {
      +      "description": "Degrees clockwise from north, from the place to the event",
      +      "title": "Bearing Deg",
      +      "type": "number"
      +    },
      +    "country_name": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Country Name"
      +    },
      +    "distance_km": {
      +      "title": "Distance Km",
      +      "type": "number"
      +    },
      +    "event_date": {
      +      "title": "Event Date",
      +      "type": "string"
      +    },
      +    "expires_at": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "When the source says it ends; null when it states none",
      +      "title": "Expires At"
      +    },
      +    "id": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "string"
      +        }
      +      ],
      +      "title": "Id"
      +    },
      +    "inside": {
      +      "anyOf": [
      +        {
      +          "type": "boolean"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Whether the place lies in the area the record covers, such as a warning's: a warning's position is a point inside its area, so its distance says little. Null for a record with no area",
      +      "title": "Inside"
      +    },
      +    "issued_at": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "When the source issued this record",
      +      "title": "Issued At"
      +    },
      +    "issuer_text": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "A warning's headline, description and instruction as the issuing service published them for the public, attributed to its sender. Null when the source gives none",
      +      "title": "Issuer Text"
      +    },
      +    "kind": {
      +      "default": "occurrence",
      +      "description": "occurrence (something happening), warning (an authority's message about an area) or status",
      +      "title": "Kind",
      +      "type": "string"
      +    },
      +    "label": {
      +      "title": "Label",
      +      "type": "string"
      +    },
      +    "lat": {
      +      "title": "Lat",
      +      "type": "number"
      +    },
      +    "lon": {
      +      "title": "Lon",
      +      "type": "number"
      +    },
      +    "metadata": {
      +      "additionalProperties": true,
      +      "description": "What the source says beyond the value. A USGS earthquake carries depth_km, magnitude_type, felt_reports (Did You Feel It? reports), cdi and mmi (felt and ShakeMap intensity), pager_alert and review_status; a NOAA tsunami bulletin its centre, magnitude, origin_time and depth_km; an NHC storm its max_wind_kt, pressure_mb and movement; a MeteoAlarm warning its awareness_level (yellow, orange, red) and awareness_type",
      +      "title": "Metadata",
      +      "type": "object"
      +    },
      +    "onset_at": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "When a warned hazard begins",
      +      "title": "Onset At"
      +    },
      +    "sender": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "The issuing authority, when the source relays many",
      +      "title": "Sender"
      +    },
      +    "severity": {
      +      "title": "Severity",
      +      "type": "string"
      +    },
      +    "source": {
      +      "title": "Source",
      +      "type": "string"
      +    },
      +    "track": {
      +      "description": "A moving event's positions, oldest first: kind observed where it was seen, forecast where the source expects it",
      +      "items": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "title": "Track",
      +      "type": "array"
      +    },
      +    "type": {
      +      "title": "Type",
      +      "type": "string"
      +    },
      +    "value": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Value"
      +    },
      +    "value_text": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Value Text"
      +    },
      +    "value_unit": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Value Unit"
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "type",
      +    "lat",
      +    "lon",
      +    "label",
      +    "severity",
      +    "event_date",
      +    "source",
      +    "metadata",
      +    "distance_km",
      +    "bearing_deg"
      +  ],
      +  "title": "NearbyHazardEvent",
      +  "type": "object"
      +}
    • changedOutput schema / $defs / Reading / properties / variable / description
      Previous value: -"utci, the felt temperature; gust; or the precipitation rate"New value: +"utci, the felt temperature; wind_gust_10m; or precip_intensity_mmh"
    • addedOutput schema / $defs / Risk / properties / driver
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/Driver"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The value, threshold and air temperature behind the class"
      +}
    • addedOutput schema / $defs / Risk / properties / explanation
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The class in words, built from the driver",
      +  "title": "Explanation"
      +}
    • addedOutput schema / $defs / Threshold
      Added value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "class": {
      +      "description": "The class the value falls in, as risk_scale names it",
      +      "title": "Class",
      +      "type": "string"
      +    },
      +    "from": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Where the class begins",
      +      "title": "From"
      +    },
      +    "to": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Where the next class begins; null at the top class",
      +      "title": "To"
      +    }
      +  },
      +  "required": [
      +    "class",
      +    "from",
      +    "to"
      +  ],
      +  "title": "Threshold",
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • addedOutput schema / $defs / ClimateLayer / properties / name
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "What the layer measures, in plain words",
      +  "title": "Name"
      +}
  3. Changed4 schema fields changed
    • addedOutput schema / $defs
      Added value: +{
      +  "ClimateLayer": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "applicable": {
      +        "anyOf": [
      +          {
      +            "type": "boolean"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Given only on a layer without readings",
      +        "title": "Applicable"
      +      },
      +      "available": {
      +        "anyOf": [
      +          {
      +            "type": "boolean"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Given only on a layer without readings",
      +        "title": "Available"
      +      },
      +      "category": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "title": "Category"
      +      },
      +      "cell_km": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "The size of the cell the value is read on",
      +        "title": "Cell Km"
      +      },
      +      "dataset": {
      +        "title": "Dataset",
      +        "type": "string"
      +      },
      +      "description": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Absent where datasets gives it for the dataset",
      +        "title": "Description"
      +      },
      +      "note": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Note"
      +      },
      +      "read_at": {
      +        "anyOf": [
      +          {
      +            "$ref": "#/$defs/Location"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Where the value was read, when the point's own cell holds no data"
      +      },
      +      "source": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "A key of sources",
      +        "title": "Source"
      +      },
      +      "source_detail": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": true,
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "What this layer's source says that its other layers' do not",
      +        "title": "Source Detail"
      +      },
      +      "unit": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "The unit every reading of the layer shares",
      +        "title": "Unit"
      +      },
      +      "values": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": {
      +              "$ref": "#/$defs/LayerValue"
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "The readings, by band",
      +        "title": "Values"
      +      },
      +      "variant": {
      +        "title": "Variant",
      +        "type": "string"
      +      },
      +      "year": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "The year an ERA5 layer describes",
      +        "title": "Year"
      +      }
      +    },
      +    "required": [
      +      "dataset",
      +      "variant",
      +      "category"
      +    ],
      +    "title": "ClimateLayer",
      +    "type": "object"
      +  },
      +  "CountryMeta": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "continent": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "title": "Continent"
      +      },
      +      "income_group": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "title": "Income Group"
      +      },
      +      "iso2": {
      +        "title": "Iso2",
      +        "type": "string"
      +      },
      +      "iso3": {
      +        "title": "Iso3",
      +        "type": "string"
      +      },
      +      "name": {
      +        "title": "Name",
      +        "type": "string"
      +      },
      +      "name_long": {
      +        "title": "Name Long",
      +        "type": "string"
      +      },
      +      "region": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "title": "Region"
      +      },
      +      "subregion": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "title": "Subregion"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "name_long",
      +      "iso2",
      +      "iso3",
      +      "region",
      +      "subregion",
      +      "continent",
      +      "income_group"
      +    ],
      +    "title": "CountryMeta",
      +    "type": "object"
      +  },
      +  "CountrySummary": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "adaptation_level": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The score's risk class, very_low to critical",
      +        "title": "Adaptation Level"
      +      },
      +      "adaptation_score": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "0 to 100; higher means more risk; null where there is no score",
      +        "title": "Adaptation Score"
      +      },
      +      "climate_level": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The score's risk class, very_low to critical",
      +        "title": "Climate Level"
      +      },
      +      "climate_score": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "0 to 100; higher means more risk; null where there is no score",
      +        "title": "Climate Score"
      +      },
      +      "country_code": {
      +        "title": "Country Code",
      +        "type": "string"
      +      },
      +      "governance_level": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The score's risk class, very_low to critical",
      +        "title": "Governance Level"
      +      },
      +      "governance_score": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "0 to 100; higher means more risk; null where there is no score",
      +        "title": "Governance Score"
      +      },
      +      "meta": {
      +        "$ref": "#/$defs/CountryMeta"
      +      },
      +      "nature_level": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The score's risk class, very_low to critical",
      +        "title": "Nature Level"
      +      },
      +      "nature_score": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "0 to 100; higher means more risk; null where there is no score",
      +        "title": "Nature Score"
      +      },
      +      "overall_level": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The score's risk class, very_low to critical",
      +        "title": "Overall Level"
      +      },
      +      "overall_score": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "0 to 100; higher means more risk; null where there is no score",
      +        "title": "Overall Score"
      +      },
      +      "social_level": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The score's risk class, very_low to critical",
      +        "title": "Social Level"
      +      },
      +      "social_score": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "0 to 100; higher means more risk; null where there is no score",
      +        "title": "Social Score"
      +      },
      +      "sources_updated": {
      +        "additionalProperties": {
      +          "type": "string"
      +        },
      +        "title": "Sources Updated",
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "country_code",
      +      "overall_score",
      +      "overall_level",
      +      "climate_score",
      +      "climate_level",
      +      "nature_score",
      +      "nature_level",
      +      "social_score",
      +      "social_level",
      +      "governance_score",
      +      "governance_level",
      +      "adaptation_score",
      +      "adaptation_level",
      +      "sources_updated",
      +      "meta"
      +    ],
      +    "title": "CountrySummary",
      +    "type": "object"
      +  },
      +  "Forecast": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "criora_url": {
      +        "title": "Criora Url",
      +        "type": "string"
      +      },
      +      "days": {
      +        "items": {
      +          "$ref": "#/$defs/ForecastDay"
      +        },
      +        "title": "Days",
      +        "type": "array"
      +      },
      +      "issued": {
      +        "title": "Issued",
      +        "type": "string"
      +      },
      +      "location": {
      +        "$ref": "#/$defs/Location"
      +      },
      +      "notes": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Notes",
      +        "type": "array"
      +      },
      +      "precision": {
      +        "additionalProperties": true,
      +        "title": "Precision",
      +        "type": "object"
      +      },
      +      "risk_scale": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Risk Scale",
      +        "type": "array"
      +      },
      +      "run": {
      +        "title": "Run",
      +        "type": "string"
      +      },
      +      "source": {
      +        "$ref": "#/$defs/ForecastSource"
      +      },
      +      "steps": {
      +        "anyOf": [
      +          {
      +            "items": {
      +              "$ref": "#/$defs/ForecastStep"
      +            },
      +            "type": "array"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Every forecast step, with hourly=true",
      +        "title": "Steps"
      +      },
      +      "units": {
      +        "additionalProperties": {
      +          "additionalProperties": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "title": "Units",
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "location",
      +      "run",
      +      "issued",
      +      "source",
      +      "units",
      +      "precision",
      +      "risk_scale",
      +      "days",
      +      "criora_url",
      +      "notes"
      +    ],
      +    "title": "Forecast",
      +    "type": "object"
      +  },
      +  "ForecastDay": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "date": {
      +        "description": "The local day",
      +        "title": "Date",
      +        "type": "string"
      +      },
      +      "partial": {
      +        "description": "True when the forecast window starts or ends inside the day",
      +        "title": "Partial",
      +        "type": "boolean"
      +      },
      +      "precipitation_rate_max": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "title": "Precipitation Rate Max"
      +      },
      +      "risk": {
      +        "$ref": "#/$defs/Risk",
      +        "description": "The day's highest risk"
      +      },
      +      "risk_by_hazard": {
      +        "additionalProperties": {
      +          "type": "string"
      +        },
      +        "title": "Risk By Hazard",
      +        "type": "object"
      +      },
      +      "step_hours": {
      +        "description": "Hours between the day's steps: 1, 3 or 6",
      +        "title": "Step Hours",
      +        "type": "integer"
      +      },
      +      "steps": {
      +        "title": "Steps",
      +        "type": "integer"
      +      },
      +      "temperature_max": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "title": "Temperature Max"
      +      },
      +      "temperature_min": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "title": "Temperature Min"
      +      },
      +      "wind_speed_max": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "title": "Wind Speed Max"
      +      }
      +    },
      +    "required": [
      +      "date",
      +      "temperature_min",
      +      "temperature_max",
      +      "precipitation_rate_max",
      +      "wind_speed_max",
      +      "risk",
      +      "risk_by_hazard",
      +      "steps",
      +      "step_hours",
      +      "partial"
      +    ],
      +    "title": "ForecastDay",
      +    "type": "object"
      +  },
      +  "ForecastSource": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "attribution": {
      +        "title": "Attribution",
      +        "type": "string"
      +      },
      +      "institution": {
      +        "title": "Institution",
      +        "type": "string"
      +      },
      +      "licence": {
      +        "title": "Licence",
      +        "type": "string"
      +      },
      +      "model": {
      +        "title": "Model",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "model",
      +      "institution",
      +      "attribution",
      +      "licence"
      +    ],
      +    "title": "ForecastSource",
      +    "type": "object"
      +  },
      +  "ForecastStep": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "local_time": {
      +        "title": "Local Time",
      +        "type": "string"
      +      },
      +      "precipitation": {
      +        "additionalProperties": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "title": "Precipitation",
      +        "type": "object"
      +      },
      +      "risk": {
      +        "$ref": "#/$defs/Risk"
      +      },
      +      "step": {
      +        "title": "Step",
      +        "type": "integer"
      +      },
      +      "temperature": {
      +        "additionalProperties": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "title": "Temperature",
      +        "type": "object"
      +      },
      +      "valid_time": {
      +        "title": "Valid Time",
      +        "type": "string"
      +      },
      +      "wind": {
      +        "additionalProperties": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "title": "Wind",
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "step",
      +      "valid_time",
      +      "local_time",
      +      "temperature",
      +      "precipitation",
      +      "wind",
      +      "risk"
      +    ],
      +    "title": "ForecastStep",
      +    "type": "object"
      +  },
      +  "HazardEvent": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "bearing_deg": {
      +        "description": "Degrees clockwise from north, from the place to the event",
      +        "title": "Bearing Deg",
      +        "type": "number"
      +      },
      +      "country_name": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Country Name"
      +      },
      +      "distance_km": {
      +        "title": "Distance Km",
      +        "type": "number"
      +      },
      +      "event_date": {
      +        "title": "Event Date",
      +        "type": "string"
      +      },
      +      "id": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "string"
      +          }
      +        ],
      +        "title": "Id"
      +      },
      +      "label": {
      +        "title": "Label",
      +        "type": "string"
      +      },
      +      "lat": {
      +        "title": "Lat",
      +        "type": "number"
      +      },
      +      "lon": {
      +        "title": "Lon",
      +        "type": "number"
      +      },
      +      "metadata": {
      +        "additionalProperties": true,
      +        "title": "Metadata",
      +        "type": "object"
      +      },
      +      "severity": {
      +        "title": "Severity",
      +        "type": "string"
      +      },
      +      "source": {
      +        "title": "Source",
      +        "type": "string"
      +      },
      +      "type": {
      +        "title": "Type",
      +        "type": "string"
      +      },
      +      "value": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Value"
      +      },
      +      "value_text": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Value Text"
      +      },
      +      "value_unit": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Value Unit"
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "type",
      +      "lat",
      +      "lon",
      +      "label",
      +      "severity",
      +      "event_date",
      +      "source",
      +      "distance_km",
      +      "bearing_deg",
      +      "metadata"
      +    ],
      +    "title": "HazardEvent",
      +    "type": "object"
      +  },
      +  "HazardsNearby": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "center": {
      +        "$ref": "#/$defs/Location"
      +      },
      +      "counts_by_type": {
      +        "additionalProperties": {
      +          "type": "integer"
      +        },
      +        "description": "Every event found, by type",
      +        "title": "Counts By Type",
      +        "type": "object"
      +      },
      +      "data": {
      +        "description": "The most severe and most recent events",
      +        "items": {
      +          "$ref": "#/$defs/HazardEvent"
      +        },
      +        "title": "Data",
      +        "type": "array"
      +      },
      +      "generated_at": {
      +        "title": "Generated At",
      +        "type": "string"
      +      },
      +      "listed": {
      +        "title": "Listed",
      +        "type": "integer"
      +      },
      +      "radius_used_km": {
      +        "additionalProperties": {
      +          "type": "number"
      +        },
      +        "description": "The distance searched for each event type",
      +        "title": "Radius Used Km",
      +        "type": "object"
      +      },
      +      "total": {
      +        "title": "Total",
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "center",
      +      "generated_at",
      +      "radius_used_km",
      +      "counts_by_type",
      +      "data",
      +      "total",
      +      "listed"
      +    ],
      +    "title": "HazardsNearby",
      +    "type": "object"
      +  },
      +  "HeadlineClimate": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "datasets": {
      +        "additionalProperties": {
      +          "type": "string"
      +        },
      +        "description": "The description the layers of one dataset share",
      +        "title": "Datasets",
      +        "type": "object"
      +      },
      +      "layers": {
      +        "items": {
      +          "$ref": "#/$defs/ClimateLayer"
      +        },
      +        "title": "Layers",
      +        "type": "array"
      +      },
      +      "more": {
      +        "title": "More",
      +        "type": "string"
      +      },
      +      "notes": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Notes",
      +        "type": "array"
      +      },
      +      "sources": {
      +        "additionalProperties": {
      +          "$ref": "#/$defs/Source"
      +        },
      +        "description": "Each source by name, with what its layers share",
      +        "title": "Sources",
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "datasets",
      +      "layers",
      +      "sources",
      +      "notes",
      +      "more"
      +    ],
      +    "title": "HeadlineClimate",
      +    "type": "object"
      +  },
      +  "LayerValue": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "description": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Description"
      +      },
      +      "label": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "The class a categorical value names",
      +        "title": "Label"
      +      },
      +      "unit": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Given here only where the readings' units differ",
      +        "title": "Unit"
      +      },
      +      "value": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Null where the layer has no value for this band",
      +        "title": "Value"
      +      }
      +    },
      +    "required": [
      +      "value"
      +    ],
      +    "title": "LayerValue",
      +    "type": "object"
      +  },
      +  "Location": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "lat": {
      +        "title": "Lat",
      +        "type": "number"
      +      },
      +      "lon": {
      +        "title": "Lon",
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "lat",
      +      "lon"
      +    ],
      +    "title": "Location",
      +    "type": "object"
      +  },
      +  "Reading": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "description": {
      +        "title": "Description",
      +        "type": "string"
      +      },
      +      "unit": {
      +        "title": "Unit",
      +        "type": "string"
      +      },
      +      "value": {
      +        "title": "Value",
      +        "type": "number"
      +      },
      +      "variable": {
      +        "description": "utci, the felt temperature; gust; or the precipitation rate",
      +        "title": "Variable",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "variable",
      +      "value",
      +      "unit",
      +      "description"
      +    ],
      +    "title": "Reading",
      +    "type": "object"
      +  },
      +  "Risk": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "class": {
      +        "description": "The class's place in risk_scale, from 0",
      +        "title": "Class",
      +        "type": "integer"
      +      },
      +      "hazard": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The hazard behind the class; null at the lowest",
      +        "title": "Hazard"
      +      },
      +      "hazard_code": {
      +        "title": "Hazard Code",
      +        "type": "integer"
      +      },
      +      "level": {
      +        "description": "The class, as risk_scale names it",
      +        "title": "Level",
      +        "type": "string"
      +      },
      +      "local_time": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "When in the day the class peaks",
      +        "title": "Local Time"
      +      },
      +      "reading": {
      +        "anyOf": [
      +          {
      +            "$ref": "#/$defs/Reading"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "The physical reading behind the class"
      +      }
      +    },
      +    "required": [
      +      "class",
      +      "level",
      +      "hazard",
      +      "hazard_code"
      +    ],
      +    "title": "Risk",
      +    "type": "object"
      +  },
      +  "Source": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "doi": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Doi"
      +      },
      +      "institution": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Institution"
      +      },
      +      "licence": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Licence"
      +      },
      +      "notes": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Notes"
      +      },
      +      "url": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Url"
      +      },
      +      "year": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Year"
      +      }
      +    },
      +    "title": "Source",
      +    "type": "object"
      +  }
      +}
    • addedOutput schema / properties
      Added value: +{
      +  "climate": {
      +    "$ref": "#/$defs/HeadlineClimate"
      +  },
      +  "country": {
      +    "anyOf": [
      +      {
      +        "$ref": "#/$defs/CountrySummary"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "Null where the point lies in no country the Atlas covers"
      +  },
      +  "country_url": {
      +    "anyOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "title": "Country Url"
      +  },
      +  "criora_url": {
      +    "title": "Criora Url",
      +    "type": "string"
      +  },
      +  "forecast": {
      +    "anyOf": [
      +      {
      +        "$ref": "#/$defs/Forecast"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "Null when the current run publishes no point data"
      +  },
      +  "hazards_nearby": {
      +    "$ref": "#/$defs/HazardsNearby"
      +  },
      +  "location": {
      +    "$ref": "#/$defs/Location"
      +  },
      +  "resolved_from": {
      +    "anyOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "What a place name was resolved to; null when coordinates were given",
      +    "title": "Resolved From"
      +  }
      +}
    • addedOutput schema / required
      Added value: +[
      +  "resolved_from",
      +  "location",
      +  "forecast",
      +  "hazards_nearby",
      +  "climate",
      +  "country",
      +  "country_url",
      +  "criora_url"
      +]
    • changedOutput schema / title
      Previous value: -"assess_placeDictOutput"New value: +"PlaceAssessment"
  4. Changed3 schema fields changed
    • changedInput schema / properties / latitude / description
      Previous value: -"Latitude in degrees, WGS84"New value: +"Latitude of the place asked about, in degrees, WGS84. Give it with longitude, or give place instead"
    • changedInput schema / properties / longitude / description
      Previous value: -"Longitude in degrees, WGS84"New value: +"Longitude of the place asked about, in degrees, WGS84. Give it with latitude, or give place instead"
    • changedInput schema / properties / place / description
      Previous value: -"A place name or address, used when latitude and longitude are not given"New value: +"A place name or address, used only when latitude and longitude are not given. It is resolved to its best match by a geocoder shared by every user and limited to one lookup a second, so pass coordinates when you have them"
  5. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the description rightly focuses on behavior: it discloses that a place name is resolved by a geocoder and reported back, and that results include sources and a criora_url map link. It does not add much about latency, coverage limits, or failure modes for unresolvable places, which keeps it below a 5.

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

Conciseness4/5

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

Front-loaded with the capability and then the routing rule; three short paragraphs, each serving a purpose. The final 'Returns the forecast days, the hazard events...' sentence partially duplicates the output schema, so it is not perfectly waste-free.

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

Completeness4/5

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

For a read-only, open-world aggregator with an output schema and fully documented parameters, the description covers purpose, routing, input conventions and return shape. Only edge cases such as ambiguous or unresolvable place names go unmentioned.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3: the schema already explains the place/coordinates exclusivity and the one-lookup-per-second geocoder limit. The description only adds that the resolved match is 'reported back', a minor increment over the schema.

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 ('Climate and disaster risk overview of one place or property') and enumerates exactly what is covered (daily forecast risk, nearby hazards, long-term layers, country profile). This makes it clearly distinguishable from siblings like get_forecast or get_climate_profile without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('use it first for an open question... "is it safe there"'), when-not ('for one specific question call the matching tool'), and names each alternative with its scope: get_forecast, get_hazards_near, get_climate_profile, get_country_profile. It even routes the comparison case (get_climate_profile once per place).

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.