Skip to main content
Glama

Criora: climate & disaster risk for any place

Natural disasters happening near a place

get_hazards_near
Read-onlyIdempotent

Natural disasters and hazards happening now or recently near a place, every one the sources hold: wildfires (NASA FIRMS satellite fire detections), every earthquake USGS records with its depth, felt reports, intensity and PAGER alert, tsunami bulletins of the NOAA warning centres, tropical cyclones with the official NHC cone and forecast track, floods, volcanic eruptions and droughts (GDACS), official warnings for every natural hazard from the US National Weather Service and, through WMO WIS2, from MeteoAlarm's national services across Europe (wind, snow and ice, thunderstorms, fog, heat, cold, coastal, rain, flood, fire danger, avalanche), and air quality (OpenAQ reference monitors).

Use it for what is happening there now. For the weather forecast use get_forecast; for long-term exposure, get_climate_profile.

Returns the most severe and most recent events first, each with its kind (occurrence or warning), type, severity (low to critical), distance, bearing and time; a warning also carries its issuer (sender), issued_at, onset_at and expires_at and whether the place lies inside its area (inside), and a moving storm its track. total and counts_by_type cover every event found. radius_km (1 to 500), event_types and days (1 to 30) narrow the search; without radius_km every type is searched at its largest distance, which radius_used_km reports. Give latitude and longitude, or a place name.

Input Schema

NameRequiredDescriptionDefault
daysNoOnly events of the last N days, 1 to 30; all current when omitted
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
radius_kmNoSearch radius in km, 1 to 500; the largest when omitted
event_typesNoOnly these kinds of event; every kind when omitted

Output Schema

NameRequiredDescriptionDefault
dataYesThe most severe and most recent events
totalYes
centerYes
listedYes
generated_atYes
resolved_fromYesWhat a place name was resolved to; null when coordinates were given
counts_by_typeYesEvery event found, by type
radius_used_kmYesThe distance searched for each event type

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / properties / event_types / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "enum": [
      -        "wildfire",
      -        "earthquake",
      -        "flood",
      -        "cyclone",
      -        "volcano",
      -        "drought",
      -        "air_quality"
      -      ],
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "enum": [
      +        "wildfire",
      +        "earthquake",
      +        "flood",
      +        "cyclone",
      +        "volcano",
      +        "drought",
      +        "air_quality",
      +        "wind",
      +        "snow_ice",
      +        "thunderstorm",
      +        "fog",
      +        "heat",
      +        "cold",
      +        "coastal",
      +        "avalanche",
      +        "rain",
      +        "tsunami"
      +      ],
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • 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"
      -}
    • 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 / properties / data / items / $ref
      Previous value: -"#/$defs/HazardEvent"New value: +"#/$defs/NearbyHazardEvent"
  2. Changed5 schema fields changed
    • changedInput schema / properties / radius_km / description
      Previous value: -"Search radius in km, 1 to 500; a distance per event type when omitted"New value: +"Search radius in km, 1 to 500; the largest when omitted"
    • addedOutput schema / $defs
      Added value: +{
      +  "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"
      +  },
      +  "Location": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "lat": {
      +        "title": "Lat",
      +        "type": "number"
      +      },
      +      "lon": {
      +        "title": "Lon",
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "lat",
      +      "lon"
      +    ],
      +    "title": "Location",
      +    "type": "object"
      +  }
      +}
    • addedOutput schema / properties
      Added value: +{
      +  "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"
      +  },
      +  "resolved_from": {
      +    "anyOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "What a place name was resolved to; null when coordinates were given",
      +    "title": "Resolved From"
      +  },
      +  "total": {
      +    "title": "Total",
      +    "type": "integer"
      +  }
      +}
    • addedOutput schema / required
      Added value: +[
      +  "center",
      +  "generated_at",
      +  "radius_used_km",
      +  "counts_by_type",
      +  "data",
      +  "total",
      +  "listed",
      +  "resolved_from"
      +]
    • changedOutput schema / title
      Previous value: -"get_hazards_nearDictOutput"New value: +"HazardsNear"
  3. Changed6 schema fields changed
    • changedInput schema / properties / days / description
      Previous value: -"Only events of the last N days"New value: +"Only events of the last N days, 1 to 30; all current when omitted"
    • changedInput schema / properties / event_types / description
      Previous value: -"Only these kinds of event"New value: +"Only these kinds of event; every kind when omitted"
    • 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"
    • changedInput schema / properties / radius_km / description
      Previous value: -"Search radius in km, 1 to 500"New value: +"Search radius in km, 1 to 500; a distance per event type when omitted"
  4. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, openWorldHint, idempotentHint, destructiveHint=false), so the description is free to add real behavior: results are ordered most-severe and most-recent first, radius_used_km reports the effective radius, and event counts cover every event found. It also warns that place-name lookup goes through a shared geocoder throttled to one lookup per second — a useful non-obvious operational constraint. It does not discuss failure modes or latency across the many upstream feeds, so not a full 5.

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

Conciseness3/5

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

The usage and return-value guidance is well front-loaded and tightly worded, but the opening sentence is a very long run-on with a deeply nested parenthetical list of sources and hazard sub-types (wind, snow and ice, thunderstorms, fog, heat, cold, coastal, rain, flood, fire danger, avalanche). The detail earns its place factually, but the packing hurts scannability and buries the essential 'hazards near a place' claim.

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?

The tool is complex — six parameters, seventeen event types, many upstream feeds — and the description covers location input rules, radius/days narrowing, default behavior, result ordering, and the shape of both occurrences and warnings. With an output schema present, no return-value enumeration is needed, so nothing an agent needs in order 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?

Schema description coverage is 100%, so the baseline is 3; the description earns above that by explaining the coupling between parameters — omitting radius_km searches every type at its largest distance and radius_used_km reports what was applied, and latitude/longitude take precedence over place. Those are semantics the schema alone does not convey.

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 ('Natural disasters and hazards happening now or recently near a place') and goes further by enumerating the underlying sources per hazard family (NASA FIRMS, USGS, NOAA, GDACS, NWS, MeteoAlarm/WIS2, OpenAQ). This is unmistakable against siblings like list_hazards or get_map_events, and the 'now or recently' scope qualifier is explicit.

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?

Explicitly says 'Use it for what is happening there now' and then names the alternatives with the condition that selects them: get_forecast for weather forecasts, get_climate_profile for long-term exposure. This is exactly the when-to-use/when-not/alternative triad.

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.