Skip to main content
Glama

Criora: climate & disaster risk for any place

Interactive climate risk and weather map

show_risk_map
Read-onlyIdempotent

Shows an interactive map in clients that render apps (Claude, ChatGPT): this week's forecast risk, hazard events and official warnings for a place, several places side by side, one event (its area, a storm's cone and track) or the whole world; layer opens it on rain, temperature or wind instead. A client without apps gets a text summary and a link.

Use it when the user wants to see a place, a storm or the world on a map.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "show_risk_map"
  }
}

Input Schema

NameRequiredDescriptionDefault
focusNoWhat a place's map shows: this week's forecast risk, the hazard events nearby, or both; an event's map leaves the events around it out for weekboth
layerNoThe forecast field the map opens on, under the hazard events: the risk (default), or the precipitation, temperature or wind forecast when the question is about the weather itself. The reader can switch between them on the maprisk
placesNo2 to 10 places to set side by side, each a place_name or latitude and longitude
event_idNoAn event's id from list_hazards or get_hazards_near, for the map of that event
languageNoLanguage code for the name of the place found (resolved_from); the rest of the answer is Englishen
latitudeNoLatitude, WGS84; or give place_name
longitudeNoLongitude, WGS84; or give place_name
place_nameNoA place name or street address; add the country after a comma when ambiguous (Portland, Maine)

Output Schema

NameRequiredDescriptionDefault
daysNo
eventNo
layerYes
placeNo
placesNo
subjectYes
countriesNo
radius_kmNo
criora_urlYes
unresolvedNo
events_totalNo
resolved_fromNo
counts_by_typeNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed56 schema fields changed
    • removedOutput schema / $defs / ComparedPlace / properties / days / description
      Removed value: -"This week's forecast risk by day; null where there is none"
    • removedOutput schema / $defs / ComparedPlace / properties / resolved_from / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / $defs / ComparedPlace / properties / resolved_from / description
      Removed value: -"What a place name was resolved to; null when coordinates were given"
    • addedOutput schema / $defs / ComparedPlace / properties / resolved_from / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / $defs / MapCountry / properties / hazard / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / $defs / MapCountry / properties / hazard / description
      Removed value: -"The hazard that holds most of them then"
    • addedOutput schema / $defs / MapCountry / properties / hazard / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / $defs / MapCountry / properties / level / description
      Removed value: -"The worst forecast risk class any of its people reach this week"
    • removedOutput schema / $defs / MapCountry / properties / name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / $defs / MapCountry / properties / name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / $defs / MapCountry / properties / people / description
      Removed value: -"Its people at that class or above, at the week's worst hour for it"
    • removedOutput schema / $defs / MapDay / properties / date / description
      Removed value: -"The local day"
    • removedOutput schema / $defs / MapDay / properties / hazard / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / $defs / MapDay / properties / hazard / description
      Removed value: -"The hazard behind the class; null at the lowest"
    • addedOutput schema / $defs / MapDay / properties / hazard / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / $defs / MapDay / properties / level / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / $defs / MapDay / properties / level / description
      Removed value: -"The day's forecast risk class; null when no step of it is graded"
    • addedOutput schema / $defs / MapDay / properties / level / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / $defs / MapFocus / properties / official_level / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / $defs / MapFocus / properties / official_level / description
      Removed value: -"The issuer's own level; null where it gives none"
    • addedOutput schema / $defs / MapFocus / properties / official_level / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / $defs / MapPlace / properties / country / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / $defs / MapPlace / properties / country / description
      Removed value: -"The country the place lies in; null at sea"
    • addedOutput schema / $defs / MapPlace / properties / country / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / $defs / MapPlace / properties / name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / $defs / MapPlace / properties / name / description
      Removed value: -"The place name the map is labelled with; null when coordinates were given"
    • addedOutput schema / $defs / MapPlace / properties / name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / countries / default
      Removed value: -null
    • removedOutput schema / properties / countries / description
      Removed value: -"The world's map: the countries this week's forecast puts most people at risk in"
    • removedOutput schema / properties / counts_by_type / default
      Removed value: -null
    • removedOutput schema / properties / counts_by_type / description
      Removed value: -"Every event found, by type"
    • removedOutput schema / properties / criora_url / description
      Removed value: -"The map on Criora's own site"
    • removedOutput schema / properties / days / default
      Removed value: -null
    • removedOutput schema / properties / days / description
      Removed value: -"The place's forecast risk by day this week"
    • removedOutput schema / properties / event / default
      Removed value: -null
    • removedOutput schema / properties / event / description
      Removed value: -"The event the map is of"
    • removedOutput schema / properties / events_total / anyOf
      Removed value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / events_total / default
      Removed value: -null
    • removedOutput schema / properties / events_total / description
      Removed value: -"Hazard events found around the place or the event, or in force in the world"
    • addedOutput schema / properties / events_total / type
      Added value: +[
      +  "integer",
      +  "null"
      +]
    • removedOutput schema / properties / layer / description
      Removed value: -"The forecast field the map opens on: risk, precipitation, temperature or wind"
    • removedOutput schema / properties / place / default
      Removed value: -null
    • removedOutput schema / properties / place / description
      Removed value: -"The place the map is of; null for another subject"
    • removedOutput schema / properties / places / default
      Removed value: -null
    • removedOutput schema / properties / places / description
      Removed value: -"The places side by side, as asked"
    • removedOutput schema / properties / radius_km / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / radius_km / default
      Removed value: -null
    • removedOutput schema / properties / radius_km / description
      Removed value: -"How far the search for events reached"
    • addedOutput schema / properties / radius_km / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / resolved_from / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedOutput schema / properties / resolved_from / default
      Removed value: -null
    • removedOutput schema / properties / resolved_from / description
      Removed value: -"What a place name was resolved to; null when coordinates were given"
    • addedOutput schema / properties / resolved_from / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / subject / description
      Removed value: -"What the map is of: a place, the world, one event, or several places side by side"
    • removedOutput schema / properties / unresolved / default
      Removed value: -null
    • removedOutput schema / properties / unresolved / description
      Removed value: -"Places asked for that were not found, and why"
  2. Changed66 schema fields changed
    • addedInput schema / $defs
      Added value: +{
      +  "PlaceGiven": {
      +    "additionalProperties": false,
      +    "description": "One place, by its name or its coordinates.",
      +    "properties": {
      +      "latitude": {
      +        "description": "Latitude, WGS84; or give place_name",
      +        "maximum": 90,
      +        "minimum": -90,
      +        "type": "number"
      +      },
      +      "longitude": {
      +        "description": "Longitude, WGS84; or give place_name",
      +        "maximum": 180,
      +        "minimum": -180,
      +        "type": "number"
      +      },
      +      "place_name": {
      +        "description": "A place name or street address; add the country after a comma when ambiguous (Portland, Maine)",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  }
      +}
    • addedInput schema / properties / event_id
      Added value: +{
      +  "description": "An event's id from list_hazards or get_hazards_near, for the map of that event",
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • changedInput schema / properties / focus / description
      Previous value: -"What the map shows: this week's forecast risk, the hazard events nearby, or both"New value: +"What a place's map shows: this week's forecast risk, the hazard events nearby, or both; an event's map leaves the events around it out for week"
    • removedInput schema / properties / focus / title
      Removed value: -"Focus"
    • addedInput schema / properties / language
      Added value: +{
      +  "default": "en",
      +  "description": "Language code for the name of the place found (resolved_from); the rest of the answer is English",
      +  "enum": [
      +    "en",
      +    "de",
      +    "fr",
      +    "it",
      +    "es",
      +    "nl",
      +    "pl",
      +    "uk",
      +    "ro",
      +    "sr",
      +    "ru"
      +  ],
      +  "type": "string"
      +}
    • removedInput schema / properties / latitude / anyOf
      Removed value: -[
      -  {
      -    "maximum": 90,
      -    "minimum": -90,
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / latitude / default
      Removed value: -null
    • changedInput schema / properties / latitude / description
      Previous value: -"Latitude of the place asked about, in degrees, WGS84. Give it with longitude, or give place instead"New value: +"Latitude, WGS84; or give place_name"
    • addedInput schema / properties / latitude / maximum
      Added value: +90
    • addedInput schema / properties / latitude / minimum
      Added value: +-90
    • removedInput schema / properties / latitude / title
      Removed value: -"Latitude"
    • addedInput schema / properties / latitude / type
      Added value: +"number"
    • removedInput schema / properties / layer / title
      Removed value: -"Layer"
    • removedInput schema / properties / longitude / anyOf
      Removed value: -[
      -  {
      -    "maximum": 180,
      -    "minimum": -180,
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / longitude / default
      Removed value: -null
    • changedInput schema / properties / longitude / description
      Previous value: -"Longitude of the place asked about, in degrees, WGS84. Give it with latitude, or give place instead"New value: +"Longitude, WGS84; or give place_name"
    • addedInput schema / properties / longitude / maximum
      Added value: +180
    • addedInput schema / properties / longitude / minimum
      Added value: +-180
    • removedInput schema / properties / longitude / title
      Removed value: -"Longitude"
    • addedInput schema / properties / longitude / type
      Added value: +"number"
    • removedInput schema / properties / place
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "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",
      -  "title": "Place"
      -}
    • addedInput schema / properties / place_name
      Added value: +{
      +  "description": "A place name or street address; add the country after a comma when ambiguous (Portland, Maine)",
      +  "type": "string"
      +}
    • addedInput schema / properties / places
      Added value: +{
      +  "description": "2 to 10 places to set side by side, each a place_name or latitude and longitude",
      +  "items": {
      +    "$ref": "#/$defs/PlaceGiven"
      +  },
      +  "maxItems": 10,
      +  "minItems": 2,
      +  "type": "array"
      +}
    • removedInput schema / title
      Removed value: -"show_risk_mapArguments"
    • addedOutput schema / $defs / ComparedPlace
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "days": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "$ref": "#/$defs/MapDay"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "This week's forecast risk by day; null where there is none"
      +    },
      +    "place": {
      +      "$ref": "#/$defs/MapPlace"
      +    },
      +    "resolved_from": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "What a place name was resolved to; null when coordinates were given"
      +    }
      +  },
      +  "required": [
      +    "resolved_from",
      +    "place",
      +    "days"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / MapCountry
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "hazard": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "The hazard that holds most of them then"
      +    },
      +    "level": {
      +      "description": "The worst forecast risk class any of its people reach this week",
      +      "type": "string"
      +    },
      +    "name": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "people": {
      +      "description": "Its people at that class or above, at the week's worst hour for it",
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "name",
      +    "level",
      +    "people",
      +    "hazard"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / $defs / MapDay / properties / date / title
      Removed value: -"Date"
    • removedOutput schema / $defs / MapDay / properties / hazard / title
      Removed value: -"Hazard"
    • addedOutput schema / $defs / MapDay / properties / level / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / $defs / MapDay / properties / level / description
      Previous value: -"The day's forecast risk class"New value: +"The day's forecast risk class; null when no step of it is graded"
    • removedOutput schema / $defs / MapDay / properties / level / title
      Removed value: -"Level"
    • removedOutput schema / $defs / MapDay / properties / level / type
      Removed value: -"string"
    • removedOutput schema / $defs / MapDay / title
      Removed value: -"MapDay"
    • addedOutput schema / $defs / MapFocus
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "id": {
      +      "type": "integer"
      +    },
      +    "label": {
      +      "type": "string"
      +    },
      +    "official_level": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "The issuer's own level; null where it gives none"
      +    },
      +    "severity": {
      +      "type": "string"
      +    },
      +    "type": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "label",
      +    "type",
      +    "severity",
      +    "official_level"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / $defs / MapPlace / properties / country / title
      Removed value: -"Country"
    • removedOutput schema / $defs / MapPlace / properties / latitude / title
      Removed value: -"Latitude"
    • removedOutput schema / $defs / MapPlace / properties / longitude / title
      Removed value: -"Longitude"
    • removedOutput schema / $defs / MapPlace / properties / name / title
      Removed value: -"Name"
    • removedOutput schema / $defs / MapPlace / title
      Removed value: -"MapPlace"
    • addedOutput schema / properties / countries
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "$ref": "#/$defs/MapCountry"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The world's map: the countries this week's forecast puts most people at risk in"
      +}
    • addedOutput schema / properties / counts_by_type / default
      Added value: +null
    • changedOutput schema / properties / counts_by_type / description
      Previous value: -"Every event found, by type; null when not asked for"New value: +"Every event found, by type"
    • removedOutput schema / properties / counts_by_type / title
      Removed value: -"Counts By Type"
    • changedOutput schema / properties / criora_url / description
      Previous value: -"The place on Criora's own map"New value: +"The map on Criora's own site"
    • removedOutput schema / properties / criora_url / title
      Removed value: -"Criora Url"
    • addedOutput schema / properties / days / default
      Added value: +null
    • changedOutput schema / properties / days / description
      Previous value: -"This week's forecast risk by day; null when not asked for"New value: +"The place's forecast risk by day this week"
    • removedOutput schema / properties / days / title
      Removed value: -"Days"
    • addedOutput schema / properties / event
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/MapFocus"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The event the map is of"
      +}
    • addedOutput schema / properties / events_total / default
      Added value: +null
    • changedOutput schema / properties / events_total / description
      Previous value: -"Hazard events found near the place; null when not asked for"New value: +"Hazard events found around the place or the event, or in force in the world"
    • removedOutput schema / properties / events_total / title
      Removed value: -"Events Total"
    • removedOutput schema / properties / layer / title
      Removed value: -"Layer"
    • removedOutput schema / properties / place / $ref
      Removed value: -"#/$defs/MapPlace"
    • addedOutput schema / properties / place / anyOf
      Added value: +[
      +  {
      +    "$ref": "#/$defs/MapPlace"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / place / default
      Added value: +null
    • addedOutput schema / properties / place / description
      Added value: +"The place the map is of; null for another subject"
    • addedOutput schema / properties / places
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "$ref": "#/$defs/ComparedPlace"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The places side by side, as asked"
      +}
    • addedOutput schema / properties / radius_km / default
      Added value: +null
    • removedOutput schema / properties / radius_km / title
      Removed value: -"Radius Km"
    • addedOutput schema / properties / resolved_from / default
      Added value: +null
    • removedOutput schema / properties / resolved_from / title
      Removed value: -"Resolved From"
    • addedOutput schema / properties / subject
      Added value: +{
      +  "description": "What the map is of: a place, the world, one event, or several places side by side",
      +  "enum": [
      +    "place",
      +    "world",
      +    "event",
      +    "places"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / unresolved
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Places asked for that were not found, and why"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "resolved_from",
      -  "place",
      -  "days",
      -  "events_total",
      -  "counts_by_type",
      -  "radius_km",
      -  "criora_url",
      -  "layer"
      -]New value: +[
      +  "subject",
      +  "criora_url",
      +  "layer"
      +]
    • removedOutput schema / title
      Removed value: -"RiskMap"
  3. Added

TDQS

A3.9/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, but the description adds genuinely new behavior: rendering depends on the client (interactive map in Claude/ChatGPT, text summary plus link elsewhere), and the reader can switch layers on the map. It stops short of covering rate limits, response shape, or what happens with zero arguments (global map).

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-loads the core action and the client-rendering caveat, then enumerates the scope variants compactly, followed by a one-line usage trigger. The first sentence is long and clause-heavy, but nearly every clause carries information an agent needs.

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?

Output schema and annotations carry the return-value and safety burdens, and the description covers the client-capability caveat, the mode variants, and layer meaning. The remaining gap is combinatorial: it never states whether places, event_id and single-place coordinates are mutually exclusive or how conflicts resolve.

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 enum and place parameters are already well documented, which sets the baseline at 3. The description does add some framing — that layer controls which forecast field the map opens on and that several places render side by side — but it doesn't clarify the implied exclusivity between places, event_id and a single latitude/place_name.

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

Purpose4/5

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

States a specific verb and resource (shows an interactive map) plus the exact scope variants: a place, several places side by side, a single event with cone/track, or the whole world. What's missing is differentiation from overlapping siblings like get_map_event, get_map_events and get_map_warnings, which an agent cannot distinguish from this one using the description alone.

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

Usage Guidelines4/5

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

Ends with an explicit trigger: 'Use it when the user wants to see a place, a storm or the world on a map,' which is a clear selection condition. It offers no when-not guidance and never names the map-related alternatives, so an agent facing get_map_event or get_map_warnings gets no routing help beyond the generic trigger.

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.