Skip to main content
Glama

Criora: climate & disaster risk for any place

Server Details

Climate and disaster risk for any place or property: flood risk, heat waves, storms and hurricanes, wildfires, earthquakes, sea level rise and 7-day weather risk. Is it safe to go there? Ask about any city, address or coordinates and get this week's weather risk (heat, cold, wind, heavy rain, snow), wildfires, earthquakes, floods and cyclones happening nearby right now, long-term exposure to 2050 and 2080 (flood depth, sea level rise, extreme heat, drought, water stress) and the country's disaster-risk profile and rank among 194 countries. Also compares and ranks countries by risk for ESG and insurance research, and in Claude and other MCP Apps hosts shows an interactive map of the place right in the chat. Every value cites its source: INFORM, ND-GAIN, World Bank, CMIP6, ERA5, IPCC AR6, WRI Aqueduct, GDACS, NASA FIRMS, OpenAQ, ECCC GDPS. Remote, free, no API key, read-only.

Ownership verified
Status
Healthy
Uptime
99.9% over 27 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
thothbot/criora-mcp
GitHub Stars
0

TDQS

A4.1/5.0

Scored across 15 tools

Disambiguation4/5

The set is unusually well-partitioned by scope: get_forecast (this week), get_climate_profile (long-term), get_hazards_near (point events), list_hazards (area events), assess_place (headline composite), with each description explicitly routing agents to the right alternative. The only fuzziness is get_map_event vs get_map_events vs get_map_warnings, three map-internal tools that an agent could plausibly confuse but that are clearly marked as client-driven.

Naming Consistency4/5

Nearly all tools follow a clean verb_noun pattern (get_forecast, get_country_profile, compare_countries, rank_countries, list_hazards, show_risk_map, assess_place, find_place). The two bare verbs `fetch` and `search` are the sole deviations, and they are still readable and semantically apt.

Tool Count4/5

Fifteen tools is at the upper edge of the well-scoped band but each data tool earns its place across the place/country/document/map axes. Three of them (get_map_event, get_map_events, get_map_warnings) exist for the interactive map rather than agent queries, so the effective agent surface is closer to twelve.

Completeness4/5

Coverage is strong: point and area hazards, near-term forecast, long-term climate layers, country depth/compare/rank, plus search+fetch for citing underlying documents and map rendering. Minor gaps are batch multi-place assessment beyond compare_countries and historical/archived hazard queries, but agents can work around these.

Available Tools

15 tools
assess_placeClimate and disaster risk of a placeA
Read-onlyIdempotent
Inspect

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.

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

NameRequiredDescription
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

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.

compare_countriesCompare countries' climate and disaster riskA
Read-onlyIdempotent
Inspect

Climate and disaster risk of two to ten named countries side by side: each one's overall risk score and class, its climate, nature, social, governance and adaptation scores, and its world rank by overall risk.

Use it when the countries are known in advance. To find the countries most or least at risk use rank_countries; for one country's indicators, get_country_profile.

Countries are ISO 3166-1 alpha-3 codes or English names; an unknown one is refused with the expected form. Scores run 0 to 100, higher is riskier, and rank 1 is the highest risk among 194 countries. Sources: INFORM Risk Index, ND-GAIN and the World Bank.

NameRequiredDescriptionDefault
countriesYesISO3 codes or English names of 2 to 10 countries

Output Schema

NameRequiredDescription
countriesYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description goes well beyond them: unknown inputs are refused with the expected form, scores are 0-100 with higher=riskier, rank 1 means highest risk out of 194 countries, and the underlying sources (INFORM, ND-GAIN, World Bank) are named. That is exactly the kind of context annotations cannot express.

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 return contents, then usage routing, then input/scale details and provenance. Every sentence carries information, though the four-sentence block is denser than strictly necessary for a single-parameter tool.

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?

An output schema exists so return values need not be re-explained, yet the description summarizes them helpfully; inputs, valid formats, size bounds, error behavior, and score/rank interpretation are all covered. Nothing an agent needs to call this 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 coverage is 100% and the schema already documents ISO3/English names and the 2-10 bound, so baseline is 3. The description adds genuinely new semantics: the accepted code standard (ISO 3166-1 alpha-3) and the failure behavior for an unrecognized country, which the schema does not state.

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 (compare) and resource (countries' climate and disaster risk), enumerates exactly which fields come back (overall risk score/class, climate, nature, social, governance, adaptation scores, world rank), and names two siblings it is distinct from. An agent can identify this tool's scope without opening the 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 an explicit positive condition ('use it when the countries are known in advance') plus two named alternatives with their selecting conditions: rank_countries for finding most/least at risk, get_country_profile for a single country. Nothing about routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetchRead a Criora documentA
Read-onlyIdempotent
Inspect

One Criora document as markdown, with its title, the Criora page to cite and the sources it draws on, by an id search returned.

country: (country:BGD) gives the country's risk score, class and rank, each dimension with its class, and its most notable indicators against the world and regional medians. place:, (place:23.8103,90.4125) gives this week's forecast risk by day, the most notable hazard events nearby, the headline climate exposures and the country. page:methodology and page:sources are those pages of the site; catalog:layers lists every climate layer and catalog:indicators every country indicator.

Use it to read a document for research and cite it. The specific tools answer with every figure as data, through get_country_profile, assess_place and the rest. An id of another form is refused with the forms it takes. A long text is cut at a paragraph, with the page that has the rest.

NameRequiredDescriptionDefault
idYesAn id search returned: country:<ISO3>, place:<latitude>,<longitude>, page:<name> or catalog:layers / catalog:indicators

Output Schema

NameRequiredDescription
idYes
urlYesThe Criora page the document is about, for citing
textYesThe document as markdown
titleYes
metadataYes

TDQS

A3.8/5.0
Behavior4/5

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

Beyond the readOnly/idempotent/openWorld annotations, it discloses two behaviors an agent could not infer: an id of another form is refused with the accepted forms, and long text is truncated at a paragraph with a pointer to the page holding the rest. It does not mention pagination limits or rate behavior, but the safety and idempotency profile is already carried by the annotations.

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 description is not front-loaded: it leads with the return payload, then devotes a dense run-on paragraph to id forms that duplicates the schema, and only afterwards states the primary use case. That redundant middle block dilutes the sentences that actually earn their place.

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?

With an output schema present, the description needn't explain return values, and it still covers the gaps that matter: accepted id shapes, refusal on malformed ids, truncation of long text, and the citation purpose. Nothing needed to invoke it correctly is missing.

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 coverage is 100% and the schema already enumerates country:/place:/page:/catalog: forms, so the long id paragraph largely restates structured data. The concrete examples (country:BGD, place:23.8103,90.4125) add small value in showing exact formatting, which lifts it just to the baseline rather than above it.

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?

The opening names the exact resource and return shape: 'One Criora document as markdown, with its title, the Criora page to cite and the sources it draws on.' It also separates itself from the data siblings ('The specific tools answer with every figure as data, through get_country_profile, assess_place and the rest'), though the opening is a noun fragment rather than a clean verb+resource statement.

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?

'Use it to read a document for research and cite it' gives a clear use case, and the tool explicitly hands numeric lookups to get_country_profile, assess_place 'and the rest.' That is a real when/when-not split, though the alternatives are named loosely rather than matched to specific conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_placeFind a placeA
Read-onlyIdempotent
Inspect

Candidate coordinates for a place name or address, best match first, each with its full name and kind (city, state, road and so on).

Call it when a name is ambiguous (several Springfields) and the right candidate must be chosen, or when one place is the subject of several calls and its coordinates should be looked up once. The other place tools take a name themselves and use its best match, so a single question about an unambiguous place needs no find_place first.

It queries OpenStreetMap Nominatim (ODbL) through Criora's geocoder, which every user shares and which sends one request a second: a burst of calls waits its turn, and a name looked up in the last week is answered from a cache. A name that matches nothing returns an empty list. A city resolves to its centre as OpenStreetMap maps it.

NameRequiredDescriptionDefault
limitNoHow many candidates to return
queryYesA place name or address, in any language

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, and the description still adds substantial context: a shared Nominatim-backed geocoder rate-limited to one request per second, burst calls queueing, a one-week cache, an empty list on no match, and city results resolving to the OSM centre. That is real behavioral disclosure beyond the structured fields.

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

Conciseness5/5

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

Three short paragraphs, front-loaded with the return shape, then routing guidance, then operational caveats. No sentence is filler: even the geocoder provenance sentence carries the licensing, rate-limit and cache facts an agent needs.

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?

An output schema exists, so return values need not be described in prose. Combined with the disambiguation guidance, empty-result behavior, rate limiting and cache semantics, the definition covers everything needed to invoke this tool correctly in an agent loop.

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%, with both 'query' and 'limit' documented in the schema itself, so the baseline is 3. The description adds only an implicit ordering guarantee ('best match first') and does not elaborate on the limit cap or accepted address formats beyond what the schema states.

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?

The first sentence names a specific verb-equivalent (return candidate coordinates) and resource (a place name or address), plus the ordering and payload (best match first, full name and kind). It also distinguishes itself from the sibling place tools, which geocode internally, so an agent can separate find_place from assess_place or get_forecast without opening a 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 triggers (ambiguous name with several Springfields; one place reused across several calls) and an explicit when-not-to ('a single question about an unambiguous place needs no find_place first'). It also identifies the alternative behavior of the other place tools, which is exactly the routing information an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_climate_profileLong-term climate risk: floods, heat, drought, sea levelA
Read-onlyIdempotent
Inspect

Long-term climate risk and environmental data of a place or property, read at the point from 55 global layers: river and coastal flood depth of a 100-year flood now and in 2050 and 2080, sea level rise, extreme heat and cold days, heavy rain, drought (SPI-12, aridity, WRI drought risk), water stress, wind and storm days, warming and rainfall change to 2050 and 2080 (CMIP6), NDVI vegetation index and leaf area, wildfire burned area, soil moisture, snow, surface water, elevation, slope, land subsidence, land cover, built-up share and the Köppen climate zone.

Use it for what a place is exposed to over years, and once per place to compare places; assess_place has only the headline layers. For this week's weather use get_forecast; for events happening now, get_hazards_near.

Narrow it with categories, or with layers by id: the resource criora://layers, or fetch catalog:layers, lists every layer with its unit, years and source. Returns each layer's readings by band with its unit, year, cell size and source (ERA5, CMIP6, WRI Aqueduct, IPCC AR6, MODIS, JRC, Copernicus DEM and others). Give latitude and longitude, or a place name.

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
layersNoOnly these layers, by id, e.g. ndvi/annual for the NDVI vegetation index or flood_riverine/inundation for river flood depth; every id with what it measures is in the resource criora://layers. Combined with categories, both are given
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
categoriesNoOnly the layers of these categories; every layer when omitted. temperature: hottest day of the year, coldest night of the year, hot days over 35 °C, summer days, tropical nights, frost nights, ice days, mean temperature with the coldest and warmest month, UTCI felt temperature (heat and cold stress), warming to 2050 and 2080 (CMIP6), change in the warmest month's maximum to 2050 and 2080, change in the coldest month's minimum to 2050 and 2080; precipitation: heavy-rain days (10 to 100 mm) and the wettest day, precipitation with the driest and wettest month, daily rain of the wettest month, change in annual rainfall to 2050 and 2080, change in the wettest quarter's rainfall, change in the driest quarter's rainfall, drought risk (WRI Aqueduct), SPI-12 drought index, aridity index, snow cover, snow water equivalent, snowmelt, snow albedo; wind: strongest wind gust of the year, gale, storm and hurricane-force gust days, mean wind speed, CAPE, the energy of thunderstorms; water: baseline water stress (WRI Aqueduct), water stress in 2050 and 2080 (WRI Aqueduct), soil moisture, relative humidity, vapour pressure deficit, potential evaporation, surface water occurrence from 38 years of Landsat (JRC), share of lakes, rivers and wetlands, lake or wetland type, distance to the coast; flooding: river flood depth of a 100-year flood, now and in 2050 and 2080 (WRI Aqueduct), coastal flood depth of a 100-year flood, now and in 2050 and 2080 (WRI Aqueduct), GloFAS 30-day flood forecast, sea level rise to 2050 and 2100 (IPCC AR6); vegetation: NDVI vegetation index, annual mean, minimum and maximum (MODIS satellite), leaf area index of trees and shrubs, leaf area index of grass and crops, area burned by wildfire last year (GFED, satellite), area burned by wildfire each year since 2002 (GFED, satellite); terrain: elevation (Copernicus DEM), slope, terrain ruggedness, probability of land subsidence over 1 cm a year, land subsidence rate class; landcover: land cover class (MODIS satellite), built-up share of the land (JRC GHSL, Sentinel-2 and Landsat); misc: Köppen climate zone, now and in 2050 and 2080, solar radiation, solar radiation of the sunniest month, surface runoff

Output Schema

NameRequiredDescription
notesYes
layersYes
sourcesYesEach source by name, with what its layers share
datasetsYesThe description the layers of one dataset share
locationYes
criora_urlYes
resolved_fromYesWhat a place name was resolved to; null when coordinates were given

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds genuinely useful context beyond that: the layer catalog resource (criora://layers / fetch catalog:layers), the data provenance (ERA5, CMIP6, WRI Aqueduct, IPCC AR6, MODIS, JRC, Copernicus DEM), and that readings come per band with unit, year, cell size and source.

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 correctly: purpose, then layer scope, then sibling routing, then inputs. It is long, and the enumerated layer list partially duplicates the exhaustive category descriptions already in the schema's categories enum, so some content does not strictly earn its place, but the structure is clean and every section is actionable.

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?

For a five-parameter, layer-rich tool with an output schema already describing return values, the description covers selection criteria, alternatives, how to narrow by id or category, and where to look up ids. An agent has everything needed to call it correctly on the first attempt.

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 baseline is 3; the description earns a 4 by adding meaning the schema cannot: it points to criora://layers as the authoritative id reference, explains that categories and layers combine additively, and states the coordinate-vs-place-name tradeoff. The geocoder rate limit is documented in the place param's schema, not the description.

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 ('Long-term climate risk and environmental data of a place or property') and immediately enumerates the concrete layer families covered (flood depth, sea level rise, heat days, drought indices, vegetation, terrain, etc.). It also distinguishes itself from siblings by naming what it is not: assess_place has 'only the headline layers'.

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?

Explicit routing: use for multi-year exposure and cross-place comparison, with named alternatives for the other temporal scopes ('For this week's weather use get_forecast; for events happening now, get_hazards_near') and the sibling it complements (assess_place). Both when-to-use and when-not are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_country_profileCountry climate and disaster risk profileA
Read-onlyIdempotent
Inspect

Climate and disaster risk of one country, of 194, for ESG, investment, insurance and humanitarian screening: the overall risk score (0 to 100, higher is riskier), class and world rank, and the climate, nature, social, governance and adaptation scores and classes, with its region and income group.

Use it for one country in depth. For named countries side by side use compare_countries; for the countries most or least at risk, rank_countries; for a place inside a country, assess_place.

include_indicators=true adds the indicators behind each dimension from the INFORM Risk Index, ND-GAIN and the World Bank (flood, earthquake and drought risk, water stress, food security, health, governance and about 150 more), those furthest from the world median first, each with its value, year, source and the medians of the world, region, subregion and income group; indicators_limit caps them per dimension, and criora://indicators lists them all. The country is an ISO 3166-1 alpha-3 code or its English name; an unknown one is refused with the expected form.

NameRequiredDescriptionDefault
countryYesISO 3166-1 alpha-3 code (e.g. BGD) or English country name
indicators_limitNoWith include_indicators, how many indicators to list per dimension
include_indicatorsNoAdd the underlying indicators, the furthest from the world median first, each with its world and regional medians; the scores alone when false

Output Schema

NameRequiredDescription
metaYes
sourcesNoWith include_indicators
indicatorsNoWith include_indicators
country_urlYes
country_codeYes
nature_levelYesThe score's risk class, very_low to critical
nature_scoreYes0 to 100; higher means more risk; null where there is no score
social_levelYesThe score's risk class, very_low to critical
social_scoreYes0 to 100; higher means more risk; null where there is no score
climate_levelYesThe score's risk class, very_low to critical
climate_scoreYes0 to 100; higher means more risk; null where there is no score
overall_levelYesThe score's risk class, very_low to critical
overall_scoreYes0 to 100; higher means more risk; null where there is no score
sources_updatedYes
adaptation_levelYesThe score's risk class, very_low to critical
adaptation_scoreYes0 to 100; higher means more risk; null where there is no score
governance_levelYesThe score's risk class, very_low to critical
governance_scoreYes0 to 100; higher means more risk; null where there is no score
rank_by_overall_riskYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety bar is low, yet the description still adds real behavioral context: unknown country input is refused with the expected form, indicators are ordered furthest-from-median first, and the data provenance (INFORM Risk Index, ND-GAIN, World Bank) is disclosed. It stops short of describing latency, coverage limits of the 194-country set, or how missing dimensions are represented.

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 purpose and output shape, then routing, then parameter behavior — a sensible order. It is dense and the long parenthetical indicator list plus the four-median enumeration make the second paragraph heavy, but almost 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.

Completeness5/5

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

For a read-only profile tool with a full output schema and three well-documented parameters, the description supplies everything left open: routing to siblings, provenance of the numbers, indicator ordering and capping, and input validation behavior. Nothing an agent needs to call this 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, but the description goes beyond the schema by explaining the ordering semantics of include_indicators (furthest from world median first, each with world/region/subregion/income-group medians), what indicators_limit measures, and by pointing at the criora://indicators resource that enumerates all ~150 indicators. That is genuine added meaning rather than restatement.

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+resource (climate and disaster risk profile of one country) and enumerates the returned fields — overall score 0-100, class, world rank, plus climate/nature/social/governance/adaptation scores, region and income group. It immediately distinguishes itself from assess_place, compare_countries and rank_countries, so an agent can pick it 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?

Names three alternatives with the exact condition that selects each: compare_countries for named countries side by side, rank_countries for most/least at risk, assess_place for a place inside a country. 'Use it for one country in depth' states the positive case explicitly. No inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_forecast7-day weather forecast and extreme-weather riskA
Read-onlyIdempotent
Inspect

This week's weather and extreme-weather risk at a place: heat waves and cold (graded on the UTCI felt temperature), storms and wind gusts, heavy rain, snow and freezing rain, by local day, with each day's risk class from Very low to Critical and the hazard behind it.

Use it for the weather or the weather risk in the next seven days. For disasters already happening use get_hazards_near; for what a place is exposed to over years, get_climate_profile.

Returns for each day the minimum and maximum temperature, peak precipitation rate, peak wind gust and the risk with its driver (the value that set the class, the class's threshold and, for heat and cold, the air temperature beside the UTCI) and an explanation in words; hourly=true adds every forecast step. Steps are hourly on the first day, then 3-hourly, then 6-hourly from the fourth day, so a day's true peak can fall between two steps; a day marked partial is cut by the forecast window. Source: Environment and Climate Change Canada GDPS model, read at its 15 km cell. Give latitude and longitude, or a place name.

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
hourlyNoAdd every forecast step, hour by hour where the model has them, to the daily summary
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

NameRequiredDescription
runYes
daysYes
notesYes
stepsNoEvery forecast step, with hourly=true
unitsYes
issuedYes
sourceYes
locationYes
precisionYes
criora_urlYes
risk_scaleYes
resolved_fromYesWhat a place name was resolved to; null when coordinates were given

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the description is free to add operational context, and it does: data source (ECCC GDPS at a 15 km cell), degrading temporal resolution (hourly → 3-hourly → 6-hourly), the 'true peak can fall between steps' caveat, and partial days cut by the forecast window. These are real limitations an agent must know to interpret results. It does not restate the geocoder rate limit as a calling constraint beyond the schema's wording, keeping it just short of 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 purpose and routing before the return-value detail, and every clause about resolution caps and partial days earns its place. The returns paragraph is dense and duplicates some of what the output schema already exposes, which keeps it from a 5.

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?

Given an output schema exists, the description need not describe return values at all, yet it still explains the risk driver and threshold structure so the agent can reason about the numbers rather than just pass them through. Combined with source, resolution limits and sibling routing, nothing needed to call or interpret this tool is missing.

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 coverage is 100%, so all four parameters are already documented, and the description largely repeats them ('hourly=true adds every forecast step', 'Give latitude and longitude, or a place name'). It adds a little framing by tying hourly output to the step-resolution caveat, but no new syntax or precedence rules beyond what the schema states, so the baseline 3 applies.

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?

Opens with a specific verb+resource+scope: this week's weather and extreme-weather risk at a place, enumerating the hazards covered (heat/cold on UTCI, storms, gusts, rain, snow, freezing rain) and the graded risk class. An agent can distinguish it from get_hazards_near and 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?

States the selection rule explicitly ('Use it for the weather or the weather risk in the next seven days') and names both alternatives with the condition that selects each: get_hazards_near for disasters already happening, get_climate_profile for multi-year exposure. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_hazards_nearNatural disasters happening near a placeA
Read-onlyIdempotent
Inspect

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.

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

NameRequiredDescription
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

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.

get_map_eventOne hazard event for the mapA
Read-onlyIdempotent
Inspect

One hazard event the interactive map opens when the reader taps a warning's area or a storm's cone: the event, or none when it is no longer listed. The map calls it in clients that display it; to list the hazards near a place, use get_hazards_near.

NameRequiredDescriptionDefault
idYesThe event's id, as a warning's area on the map lists it

Output Schema

NameRequiredDescription
eventsYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds the useful non-obvious trait that a stale id yields none rather than an error, plus the client-side calling context, though it says nothing about error handling or lookup cost.

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?

Two sentences, front-loaded with what is returned and followed by the alternative. The opening clause about the reader tapping a warning's area or a storm's cone is slightly ornate but still earns its place by grounding the use case.

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?

For a single-parameter read with an output schema and full annotation coverage, the description supplies the purpose, the empty-result behavior, and the correct alternative. Nothing an agent needs in order to invoke it correctly is missing.

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 coverage is 100% and the single id parameter is already documented as coming from a warning's area on the map. The description restates that provenance but adds no format, range, or sourcing detail beyond the schema, so the baseline 3 applies.

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: fetches one hazard event by id, so the map can open the tapped warning area or storm cone. It also names the sibling it is not — listing hazards near a place — so the agent can route without opening either schema.

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?

Gives a clear when-to-use context (the interactive map opening an event after a tap) and names get_hazards_near as the alternative for proximity listing. It does not explicitly distinguish from the plural sibling get_map_events, leaving that inference to the id-versus-list shape.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_map_eventsHazard events in the map's viewA
Read-onlyIdempotent
Inspect

The hazard events the interactive map loads when the reader pans or zooms to a new view. The map calls it in clients that display it; to list the hazards near a place, use get_hazards_near.

NameRequiredDescriptionDefault
latitudeYesLatitude of the view's centre
longitudeYesLongitude of the view's centre
radius_kmYesHow far the view reaches from its centre, in km

Output Schema

NameRequiredDescription
eventsYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so safety is covered. The description adds real behavioral context beyond that: this tool is viewport-driven, invoked repeatedly on pan/zoom, which signals a high-frequency-per-view usage pattern. It stops short of mentioning pagination, result caps, or caching behavior for repeated viewport calls.

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?

Two compact sentences with the resource and scope front-loaded and the alternative routing at the end. The clause "The map calls it in clients that display it" is slightly redundant padding, but overall there is little waste.

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?

An output schema exists, annotations cover the safety profile, and all three parameters are fully described in the schema, so the description need only establish purpose, usage mode, and sibling routing. It does all three; remaining gaps (rate limits, distinction from get_map_event/get_map_warnings) are marginal given the structured coverage.

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 latitude, longitude, and radius_km are fully documented with bounds and meanings in the schema. The description adds only the loose framing of "the view's centre and reach" via the pan/zoom language, which the schema already conveys; baseline 3 applies when the schema does the heavy lifting.

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?

The description names a specific resource (hazard events) and scope (the map's current viewport as the reader pans or zooms), and explicitly distinguishes it from get_hazards_near. However, it is phrased as a noun phrase describing what the map does rather than a direct verb stating what the tool returns to the caller, leaving a small ambiguity.

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

Usage Guidelines3/5

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

One alternative is named and conditionally routed ("to list the hazards near a place, use get_hazards_near"), which helps. But the primary guidance is "the map calls it in clients that display it," which describes an internal client behavior rather than telling the agent when it should or should not call this tool, and it never differentiates from the closely named siblings get_map_event or get_map_warnings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_map_warningsOfficial warnings in the map's viewA
Read-onlyIdempotent
Inspect

The official warnings the interactive map draws over a view: each hazard's edge at each class and its symbols, at the view's zoom. The map calls it in clients that display it; to list the warnings near a place, use get_hazards_near.

NameRequiredDescriptionDefault
eastYesThe view's east edge, unwrapped past 180
westYesThe view's west edge, unwrapped past 180
zoomYesThe zoom the view is drawn at
northYesThe view's north edge
southYesThe view's south edge

Output Schema

NameRequiredDescription
zoomYesThe zoom the pixels are counted at: the world is 512 times 2 to it across
edgesYes
tracksYes
symbolsYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false. The description adds useful context that this is for clients displaying map warnings at a given view zoom, but it does not add further behavioral details such as limits, authentication, or rendering constraints beyond what annotations and schema provide.

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

Conciseness5/5

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

The definition uses two focused sentences: the first front-loads what the tool returns in map-rendering terms, and the second provides the only necessary routing guidance. There is no wasted text.

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 has five required parameters, complete schema descriptions, rich annotations, and an output schema. The description supplies the missing conceptual context: that the tool is for map clients drawing warnings over a viewport at a zoom, and points elsewhere for near-place listing.

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%, with each viewport edge and zoom parameter already documented. The description reinforces that the view and zoom matter but does not add syntax or edge-case guidance beyond the schema, so baseline 3 is appropriate.

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?

The description states a specific resource and return shape: official warnings rendered over a map view, including each hazard's edge at each class and its symbols at the view's zoom. It also explicitly distinguishes this tool from get_hazards_near, which lists warnings near a place.

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?

It says the map calls this in clients that display warnings, establishing the map-rendering context, and directly routes place-based listing to get_hazards_near. The when-to-use condition and the alternative are both explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_hazardsNatural disasters and warnings in a country, a region or the worldA
Read-onlyIdempotent
Inspect

Natural disasters, hazards and official warnings in force across a country, a region or the whole world, from the same sources as get_hazards_near: wildfires, earthquakes, tsunami bulletins, tropical cyclones, floods, volcanic eruptions, droughts, official weather warnings (US National Weather Service, MeteoAlarm services across Europe) and air quality.

Use it for questions about an area rather than a point: what is happening in Japan, which red warnings are in force in Europe, the strongest earthquakes in the world this week. For what is near one place use get_hazards_near; for one country's long-term risk, get_country_profile.

Give country, or bbox for a region, or neither for the whole world. Every type, kind and severity is included unless event_types, kinds (occurrence, warning, status), min_severity or days narrow it. Returns the most severe events first and then the most recently active, limit of them; total and the counts by type, severity and kind cover every event that matched. A warning carries its issuer (sender), onset_at and expires_at; metadata holds the source's own facts, such as an earthquake's depth or a storm's wind. A country or a bbox holds an event by its point: a warning whose area reaches in from outside is not listed, and get_hazards_near answers for a place inside any area.

NameRequiredDescriptionDefault
bboxNoA region as [west, south, east, north] in degrees. A region across 180 gives its east past 180, at any width ([120, -50, 300, 30] runs from 120 east across the Pacific to 60 west); west above east also crosses 180, for a region less than half the world across
daysNoOnly events active in the last N days, 1 to 30; all current when omitted
kindsNoOnly occurrences, warnings or statuses; all of them when omitted
limitNoHow many events to list
countryNoOnly events in this country or territory: its ISO 3166-1 alpha-3 code (e.g. JPN, PRI) or its English name
event_typesNoOnly these types of event; every type when omitted
min_severityNoOnly events at least this severe; every severity when omitted

Output Schema

NameRequiredDescription
dataYesThe most severe first, then the most recently active
scopeYes
totalYesEvery event that matched; data lists the first of them
listedYes
generated_atYes
counts_by_kindYesEvery match, as occurrence, warning or status
counts_by_typeYesEvery match, by type
counts_by_severityYesEvery match, by severity

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare read-only, open-world, idempotent and non-destructive, so the safety bar is covered. The description adds genuinely non-derivable behavior: severe-then-recent ordering, the limit/total plus per-type, per-severity and per-kind counts, what a warning record carries (issuer, onset_at, expires_at), what metadata holds, and the important containment caveat that a warning reaching into a country from outside is not listed. It stops short of describing truncation consequences or rate limits, which keeps it off 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?

Purpose, examples and alternatives are front-loaded in the first two sentences, with operational detail after. The final paragraph is dense — several distinct facts (sort order, limit, counts, warning fields, metadata, containment rule) packed into two long sentences — but almost 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.

Completeness5/5

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

For a seven-parameter, optional-everything query tool with an output schema present, this is complete: location alternatives, filter defaults, ordering, limit behavior, and the geographic containment rule are all covered, and return-value shape is legitimately left to the output schema. An agent could call this correctly on the first attempt.

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 coverage is 100%, so the baseline is 3; the description still earns above that by spelling out the mutual exclusivity and defaults of the location parameters ('give country, or bbox for a region, or neither for the whole world') and by framing the filters as narrowing from an all-inclusive default (every type, kind and severity included unless event_types, kinds, min_severity or days narrow it). That combination semantics is real value the schema does not state. It does not restate the antimeridian or range details, which the schema already handles.

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?

The description opens with a specific resource set (wildfires, earthquakes, tsunami bulletins, cyclones, floods, volcanoes, droughts, official warnings, air quality) and an explicit scope (country, region, or world). It names the data sources and directly differentiates itself from get_hazards_near and get_country_profile, so an agent can tell the three apart 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?

It states the selecting condition plainly — 'questions about an area rather than a point' — with concrete examples (Japan, European red warnings, strongest earthquakes this week). It then names both alternatives and their conditions: get_hazards_near for a point, get_country_profile for long-term risk. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rank_countriesRank countries by climate and disaster riskA
Read-onlyIdempotent
Inspect

The countries most or least at climate and disaster risk, overall or on one dimension (climate, nature, social, governance, adaptation), each with its score, risk class and rank, optionally only those in a region, subregion or income group.

Answers "which countries are most exposed to climate risk", "the riskiest countries in Southern Asia" or "low-income countries with the lowest adaptation score". For countries named in advance use compare_countries; for one country in depth, get_country_profile.

Regions, subregions and income groups are named as the countries' meta names them; a name no country has is refused with the names there are. The filters combine, and a combination that matches nothing returns an empty list; limit cuts the list, while matched counts every country that passed the filters. Scores run 0 to 100, higher is riskier. A country's rank is among all 194 countries, 1 being the highest risk: a filter narrows the list but not the rank. Countries without a score on the dimension are counted in no_score.

NameRequiredDescriptionDefault
limitNoHow many countries to list
orderNoMost at risk first, or least at risk firsthighest_risk
regionNoOnly countries in this UN region, e.g. Asia
dimensionNoThe score to rank byoverall
subregionNoOnly countries in this UN M49 subregion, e.g. Southern Asia
income_groupNoOnly countries in this World Bank income group, e.g. Low income

Output Schema

NameRequiredDescription
orderYes
listedYes
filtersYes
matchedYesEvery country that passed the filters
no_scoreYesCountries that passed the filters but have no score on the dimension
countriesYes
dimensionYes

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent/non-destructive annotations: unknown region names are refused with the valid names returned, filters combine and may yield an empty list, limit truncates while matched counts all passers, scores are 0-100 with higher = riskier, and rank is always global across 194 countries regardless of filters. Countries lacking a dimension score are tracked in no_score.

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 core operation and then behavior, with no filler sentences. Some sentences are long and clause-stacked (the rank/no_score sentence), which costs a little readability but every clause carries information.

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?

For a six-parameter, zero-required filter tool with an output schema and full annotation coverage, nothing material is missing: filtering semantics, empty-result behavior, rank semantics, score scale, and the no_score edge case are all covered, so return-shape details can stay in the output schema.

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 coverage is 100% and the enums are self-documenting, so the baseline is 3; the description adds real semantics by clarifying that region/subregion/income_group values must match the countries' meta names, and by distinguishing limit from matched counts.

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 (rank) and resource (countries by climate/disaster risk) with scope: overall or per dimension, optionally filtered by region/subregion/income group. It is clearly distinguishable from compare_countries and get_country_profile, both of which it names.

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 routes to alternatives: 'For countries named in advance use compare_countries; for one country in depth, get_country_profile.' It also anchors usage with natural-language question examples ('which countries are most exposed to climate risk').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

show_risk_mapInteractive climate risk and weather mapA
Read-onlyIdempotent
Inspect

Shows an interactive map of a place in clients that render apps, such as Claude and ChatGPT: this week's forecast risk over the area, hazard events nearby as markers, and the risk by day, which the reader can pan, zoom and open full screen. Instead of the risk, the map can lay the precipitation, temperature or wind forecast under the events (layer), hour by hour over the week, and the reader can switch between all four. A client without apps gets the same summary as text, with a link to the place on Criora's own map.

Use it when the user wants to see the place, the week's risk or the hazards around it on a map, or when a map makes an answer clearer than a list. The figures come from the same sources as get_forecast and get_hazards_near, which give them in full.

Give latitude and longitude, or place, which costs a lookup in the shared geocoder. With both, the coordinates are used and place only names the map, at no lookup: pass the name the user knows the place by, or the map is titled by its coordinates and country.

NameRequiredDescriptionDefault
focusNoWhat the map shows: this week's forecast risk, the hazard events nearby, or bothboth
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
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

NameRequiredDescription
daysYesThis week's forecast risk by day; null when not asked for
layerYesThe forecast field the map opens on: risk, precipitation, temperature or wind
placeYes
radius_kmYesHow far the search for events reached
criora_urlYesThe place on Criora's own map
events_totalYesHazard events found near the place; null when not asked for
resolved_fromYesWhat a place name was resolved to; null when coordinates were given
counts_by_typeYesEvery event found, by type; null when not asked for

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), but the description adds behavioral context they cannot express: interactivity (pan, zoom, open full screen), the reader switching layers, the degraded text mode for clients that don't render apps, and the shared geocoder's one-lookup-per-second rate limit. That is substantial beyond-annotation disclosure.

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 core capability in the first clause, then layers, then fallback, then usage, then parameters. Every sentence carries information, though the opening sentence is dense and slightly overlong with appending the layer list and interaction modes before the fallback. Slight verbosity, no dead weight.

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?

An output schema exists so return values needn't be described, and the annotations cover the safety profile. For a five-parameter, all-optional, rendering-oriented tool, the description supplies everything an agent needs: rendering context, fallback behavior, precedence between place and coordinates, and the geocoder constraint.

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 coverage is 100%, so the baseline would be 3, but the description adds real meaning: it explains the precedence rule when both coordinates and place are supplied ('the coordinates are used and place only names the map, at no lookup'), the cost of a geocoder lookup, and the layer behavior (map opens on `layer`, reader can switch). This is more than a restatement of the enum titles.

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 ('Shows an interactive map of a place') and enumerates exactly what appears on it: this week's risk, hazard markers, day-by-day risk, plus alternate layers. It also distinguishes itself from siblings by noting the figures come from the same sources as get_forecast and get_hazards_near, 'which give them in full.' An agent can tell this apart from the data-returning tools without opening either 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 an explicit when-to-use clause ('when the user wants to see the place, the week's risk or the hazards around it on a map, or when a map makes an answer clearer than a list') and routes competition to the sibling tools that return the same figures in full. The client-capability fallback (text summary plus link when no apps) is genuine addition/exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updates
    • Changedassess_place8 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"
        +}
    • Changedget_forecast5 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"
        +}
      • 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"
        +}
    • Changedget_hazards_near4 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"
    • Addedget_map_event
    • Changedget_map_events17 fields changed
      • addedOutput schema / $defs / MapEvent / description
        Added value: +"An event as the page draws it, from whichever read found it: a search near a place gives its\ndistance, a tapped warning read by its id gives none."
      • addedOutput schema / $defs / MapEvent / properties / active_at
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "The latest moment the source reports it active",
        +  "title": "Active At"
        +}
      • addedOutput schema / $defs / MapEvent / properties / area
        Added value: +{
        +  "default": false,
        +  "description": "Whether the event covers an area (a warning's, a storm's cone)",
        +  "title": "Area",
        +  "type": "boolean"
        +}
      • addedOutput schema / $defs / MapEvent / properties / distance_km / default
        Added value: +null
      • addedOutput schema / $defs / MapEvent / properties / distance_km / description
        Added value: +"From the place the map is of; none for a tapped event"
      • addedOutput schema / $defs / MapEvent / properties / event_date / default
        Added value: +null
      • addedOutput schema / $defs / MapEvent / properties / expires_at
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "When the source says it ends; null when it states none",
        +  "title": "Expires At"
        +}
      • addedOutput schema / $defs / MapEvent / properties / kind
        Added value: +{
        +  "default": "occurrence",
        +  "description": "occurrence, warning or status",
        +  "title": "Kind",
        +  "type": "string"
        +}
      • addedOutput schema / $defs / MapEvent / properties / label / default
        Added value: +null
      • addedOutput schema / $defs / MapEvent / properties / nature / default
        Added value: +null
      • addedOutput schema / $defs / MapEvent / properties / severity / default
        Added value: +null
      • addedOutput schema / $defs / MapEvent / properties / source / default
        Added value: +null
      • addedOutput schema / $defs / MapEvent / properties / value / default
        Added value: +null
      • addedOutput schema / $defs / MapEvent / properties / value_normalized / default
        Added value: +null
      • addedOutput schema / $defs / MapEvent / properties / value_text / default
        Added value: +null
      • addedOutput schema / $defs / MapEvent / properties / value_unit / default
        Added value: +null
      • changedOutput schema / $defs / MapEvent / required
        Previous value: -[
        -  "id",
        -  "type",
        -  "nature",
        -  "lat",
        -  "lon",
        -  "severity",
        -  "value",
        -  "value_unit",
        -  "value_normalized",
        -  "value_text",
        -  "event_date",
        -  "source",
        -  "label",
        -  "distance_km"
        -]New value: +[
        +  "id",
        +  "type",
        +  "lat",
        +  "lon"
        +]
    • Addedget_map_warnings
    • Addedlist_hazards
  2. 4 tool updates
    • Changedassess_place1 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"
        +}
    • Changedfetch2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"An id search returned: country:<ISO3>, place:<latitude>,<longitude> or page:<name>"New value: +"An id search returned: country:<ISO3>, place:<latitude>,<longitude>, page:<name> or catalog:layers / catalog:indicators"
      • changedOutput schema / $defs / DocumentMetadata / properties / kind / enum
        Previous value: -[
        -  "country",
        -  "place",
        -  "page"
        -]New value: +[
        +  "country",
        +  "place",
        +  "page",
        +  "catalog"
        +]
    • Changedget_climate_profile3 fields changed
      • changedInput schema / properties / categories / description
        Previous value: -"Only the layers of these categories, e.g. flooding for flood depth and sea level rise, temperature for heat; every layer when omitted"New value: +"Only the layers of these categories; every layer when omitted. temperature: hottest day of the year, coldest night of the year, hot days over 35 °C, summer days, tropical nights, frost nights, ice days, mean temperature with the coldest and warmest month, UTCI felt temperature (heat and cold stress), warming to 2050 and 2080 (CMIP6), change in the warmest month's maximum to 2050 and 2080, change in the coldest month's minimum to 2050 and 2080; precipitation: heavy-rain days (10 to 100 mm) and the wettest day, precipitation with the driest and wettest month, daily rain of the wettest month, change in annual rainfall to 2050 and 2080, change in the wettest quarter's rainfall, change in the driest quarter's rainfall, drought risk (WRI Aqueduct), SPI-12 drought index, aridity index, snow cover, snow water equivalent, snowmelt, snow albedo; wind: strongest wind gust of the year, gale, storm and hurricane-force gust days, mean wind speed, CAPE, the energy of thunderstorms; water: baseline water stress (WRI Aqueduct), water stress in 2050 and 2080 (WRI Aqueduct), soil moisture, relative humidity, vapour pressure deficit, potential evaporation, surface water occurrence from 38 years of Landsat (JRC), share of lakes, rivers and wetlands, lake or wetland type, distance to the coast; flooding: river flood depth of a 100-year flood, now and in 2050 and 2080 (WRI Aqueduct), coastal flood depth of a 100-year flood, now and in 2050 and 2080 (WRI Aqueduct), GloFAS 30-day flood forecast, sea level rise to 2050 and 2100 (IPCC AR6); vegetation: NDVI vegetation index, annual mean, minimum and maximum (MODIS satellite), leaf area index of trees and shrubs, leaf area index of grass and crops, area burned by wildfire last year (GFED, satellite), area burned by wildfire each year since 2002 (GFED, satellite); terrain: elevation (Copernicus DEM), slope, terrain ruggedness, probability of land subsidence over 1 cm a year, land subsidence rate class; landcover: land cover class (MODIS satellite), built-up share of the land (JRC GHSL, Sentinel-2 and Landsat); misc: Köppen climate zone, now and in 2050 and 2080, solar radiation, solar radiation of the sunniest month, surface runoff"
      • addedInput schema / properties / layers
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "era5_extremum/temperature_max",
        +          "era5_extremum/temperature_min",
        +          "era5_extremum/climate_days",
        +          "era5_monthly/temperature",
        +          "era5_monthly/utci",
        +          "cmip6_climate_delta/tmean",
        +          "cmip6_climate_delta/tmax_warm",
        +          "cmip6_climate_delta/tmin_cold",
        +          "era5_extremum/extreme_precip",
        +          "era5_monthly/precipitation",
        +          "era5_monthly/precipitation_max",
        +          "cmip6_climate_delta/precip_annual",
        +          "cmip6_climate_delta/precip_wet",
        +          "cmip6_climate_delta/precip_dry",
        +          "aqueduct_water_stress/drr",
        +          "spi_12/observed",
        +          "aridity_index/annual",
        +          "era5_monthly/snow_cover",
        +          "era5_monthly/snow_water_equivalent",
        +          "era5_monthly/snowmelt",
        +          "era5_monthly/snow_albedo",
        +          "era5_extremum/wind_max",
        +          "era5_extremum/storm_days",
        +          "era5_monthly/wind",
        +          "era5_monthly/cape",
        +          "aqueduct_water_stress/bws",
        +          "aqueduct_water_future/ws",
        +          "era5_monthly/soil_moisture",
        +          "era5_monthly/humidity",
        +          "era5_monthly/vpd",
        +          "era5_monthly/potential_evapotranspiration",
        +          "jrc_surface_water/occurrence",
        +          "glwd/coverage",
        +          "glwd/classification",
        +          "distance_to_coast/distance",
        +          "flood_riverine/inundation",
        +          "flood_coastal/inundation",
        +          "flood_forecast/glofas",
        +          "slr_projections/projections",
        +          "ndvi/annual",
        +          "era5_monthly/lai_high",
        +          "era5_monthly/lai_low",
        +          "burned_area/annual",
        +          "burned_area/climatology_22yr",
        +          "dem/elevation",
        +          "dem/slope",
        +          "dem/tri",
        +          "subsidence/probability",
        +          "subsidence/prediction",
        +          "modis_land_cover/igbp",
        +          "ghsl_built_up/built_up",
        +          "koppen/climate",
        +          "era5_monthly/solar_radiation",
        +          "era5_monthly/solar_radiation_max",
        +          "era5_monthly/runoff"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Only these layers, by id, e.g. ndvi/annual for the NDVI vegetation index or flood_riverine/inundation for river flood depth; every id with what it measures is in the resource criora://layers. Combined with categories, both are given",
        +  "title": "Layers"
        +}
      • 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"
        +}
    • Changedsearch1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"A country, a place name, or a subject such as methodology or data sources"New value: +"A country, a place name, or a subject: methodology, data sources, or the data catalogue (layers, NDVI, satellite, indicators)"
  3. 2 tool updates
    • Addedget_map_events
    • Addedshow_risk_map
  4. 10 tool updates
    • Changedassess_place4 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"
    • Changedcompare_countries5 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "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"
        +  },
        +  "Rank": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "note": {
        +        "title": "Note",
        +        "type": "string"
        +      },
        +      "of": {
        +        "title": "Of",
        +        "type": "integer"
        +      },
        +      "rank": {
        +        "title": "Rank",
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "rank",
        +      "of",
        +      "note"
        +    ],
        +    "title": "Rank",
        +    "type": "object"
        +  },
        +  "RankedSummary": {
        +    "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"
        +      },
        +      "country_url": {
        +        "title": "Country Url",
        +        "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"
        +      },
        +      "rank_by_overall_risk": {
        +        "$ref": "#/$defs/Rank"
        +      },
        +      "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",
        +      "rank_by_overall_risk",
        +      "country_url"
        +    ],
        +    "title": "RankedSummary",
        +    "type": "object"
        +  }
        +}
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +false
      • addedOutput schema / properties
        Added value: +{
        +  "countries": {
        +    "items": {
        +      "$ref": "#/$defs/RankedSummary"
        +    },
        +    "title": "Countries",
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "countries"
        +]
      • changedOutput schema / title
        Previous value: -"compare_countriesDictOutput"New value: +"CountryComparison"
    • Addedfetch
    • Changedfind_place4 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "Place": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "display_name": {
        +        "description": "The full name, with the region and country",
        +        "title": "Display Name",
        +        "type": "string"
        +      },
        +      "kind": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "What the name is: city, state, road and so on",
        +        "title": "Kind"
        +      },
        +      "latitude": {
        +        "title": "Latitude",
        +        "type": "number"
        +      },
        +      "longitude": {
        +        "title": "Longitude",
        +        "type": "number"
        +      },
        +      "name": {
        +        "title": "Name",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "name",
        +      "display_name",
        +      "latitude",
        +      "longitude",
        +      "kind"
        +    ],
        +    "title": "Place",
        +    "type": "object"
        +  }
        +}
      • addedOutput schema / properties / result / items / $ref
        Added value: +"#/$defs/Place"
      • removedOutput schema / properties / result / items / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / result / items / type
        Removed value: -"object"
    • Changedget_climate_profile5 fields changed
      • changedInput schema / properties / categories / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "flooding",
        -        "landcover",
        -        "misc",
        -        "precipitation",
        -        "temperature",
        -        "terrain",
        -        "vegetation",
        -        "water",
        -        "wind"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "enum": [
        +        "temperature",
        +        "precipitation",
        +        "wind",
        +        "water",
        +        "flooding",
        +        "vegetation",
        +        "misc",
        +        "terrain",
        +        "landcover"
        +      ],
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • 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"
        +  },
        +  "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"
        +  },
        +  "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: +{
        +  "criora_url": {
        +    "title": "Criora Url",
        +    "type": "string"
        +  },
        +  "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"
        +  },
        +  "location": {
        +    "$ref": "#/$defs/Location"
        +  },
        +  "notes": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "title": "Notes",
        +    "type": "array"
        +  },
        +  "resolved_from": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "What a place name was resolved to; null when coordinates were given",
        +    "title": "Resolved From"
        +  },
        +  "sources": {
        +    "additionalProperties": {
        +      "$ref": "#/$defs/Source"
        +    },
        +    "description": "Each source by name, with what its layers share",
        +    "title": "Sources",
        +    "type": "object"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "datasets",
        +  "layers",
        +  "sources",
        +  "notes",
        +  "resolved_from",
        +  "location",
        +  "criora_url"
        +]
      • changedOutput schema / title
        Previous value: -"get_climate_profileDictOutput"New value: +"ClimateProfile"
    • Changedget_country_profile6 fields changed
      • changedInput schema / properties / include_indicators / description
        Previous value: -"Add about 160 underlying indicators, each with its world and regional benchmark; the scores alone when false"New value: +"Add the underlying indicators, the furthest from the world median first, each with its world and regional medians; the scores alone when false"
      • addedInput schema / properties / indicators_limit
        Added value: +{
        +  "default": 8,
        +  "description": "With include_indicators, how many indicators to list per dimension",
        +  "maximum": 60,
        +  "minimum": 1,
        +  "title": "Indicators Limit",
        +  "type": "integer"
        +}
      • addedOutput schema / $defs
        Added value: +{
        +  "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"
        +  },
        +  "DimensionIndicators": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "indicators": {
        +        "description": "The furthest from the world median first",
        +        "items": {
        +          "$ref": "#/$defs/Indicator"
        +        },
        +        "title": "Indicators",
        +        "type": "array"
        +      },
        +      "total": {
        +        "description": "How many indicators the dimension has",
        +        "title": "Total",
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "total",
        +      "indicators"
        +    ],
        +    "title": "DimensionIndicators",
        +    "type": "object"
        +  },
        +  "Indicator": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "benchmark": {
        +        "additionalProperties": {
        +          "$ref": "#/$defs/Median"
        +        },
        +        "description": "The medians of the world and of the country's own region, subregion and income group",
        +        "title": "Benchmark",
        +        "type": "object"
        +      },
        +      "data_year": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "title": "Data Year"
        +      },
        +      "indicator_name": {
        +        "title": "Indicator Name",
        +        "type": "string"
        +      },
        +      "raw_unit": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "title": "Raw Unit"
        +      },
        +      "raw_value": {
        +        "anyOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "title": "Raw Value"
        +      },
        +      "score": {
        +        "anyOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "title": "Score"
        +      },
        +      "source": {
        +        "description": "A source of sources",
        +        "title": "Source",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "indicator_name",
        +      "score",
        +      "raw_value",
        +      "raw_unit",
        +      "data_year",
        +      "source",
        +      "benchmark"
        +    ],
        +    "title": "Indicator",
        +    "type": "object"
        +  },
        +  "IndicatorSource": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "country_url": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "title": "Country Url"
        +      },
        +      "homepage": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "title": "Homepage"
        +      },
        +      "label": {
        +        "title": "Label",
        +        "type": "string"
        +      },
        +      "source": {
        +        "title": "Source",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "source",
        +      "label"
        +    ],
        +    "title": "IndicatorSource",
        +    "type": "object"
        +  },
        +  "Median": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "count": {
        +        "description": "How many countries the median is of",
        +        "title": "Count",
        +        "type": "integer"
        +      },
        +      "raw": {
        +        "anyOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "title": "Raw"
        +      },
        +      "score": {
        +        "title": "Score",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "score",
        +      "count"
        +    ],
        +    "title": "Median",
        +    "type": "object"
        +  },
        +  "Rank": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "note": {
        +        "title": "Note",
        +        "type": "string"
        +      },
        +      "of": {
        +        "title": "Of",
        +        "type": "integer"
        +      },
        +      "rank": {
        +        "title": "Rank",
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "rank",
        +      "of",
        +      "note"
        +    ],
        +    "title": "Rank",
        +    "type": "object"
        +  }
        +}
      • addedOutput schema / properties
        Added value: +{
        +  "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"
        +  },
        +  "country_url": {
        +    "title": "Country Url",
        +    "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"
        +  },
        +  "indicators": {
        +    "anyOf": [
        +      {
        +        "additionalProperties": {
        +          "$ref": "#/$defs/DimensionIndicators"
        +        },
        +        "type": "object"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null,
        +    "description": "With include_indicators",
        +    "title": "Indicators"
        +  },
        +  "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"
        +  },
        +  "rank_by_overall_risk": {
        +    "$ref": "#/$defs/Rank"
        +  },
        +  "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": {
        +    "anyOf": [
        +      {
        +        "items": {
        +          "$ref": "#/$defs/IndicatorSource"
        +        },
        +        "type": "array"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null,
        +    "description": "With include_indicators",
        +    "title": "Sources"
        +  },
        +  "sources_updated": {
        +    "additionalProperties": {
        +      "type": "string"
        +    },
        +    "title": "Sources Updated",
        +    "type": "object"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "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",
        +  "rank_by_overall_risk",
        +  "country_url"
        +]
      • changedOutput schema / title
        Previous value: -"get_country_profileDictOutput"New value: +"CountryProfile"
    • Changedget_forecast4 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "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"
        +  },
        +  "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"
        +  }
        +}
      • addedOutput schema / properties
        Added value: +{
        +  "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"
        +  },
        +  "resolved_from": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "What a place name was resolved to; null when coordinates were given",
        +    "title": "Resolved From"
        +  },
        +  "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"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "location",
        +  "run",
        +  "issued",
        +  "source",
        +  "units",
        +  "precision",
        +  "risk_scale",
        +  "days",
        +  "criora_url",
        +  "notes",
        +  "resolved_from"
        +]
      • changedOutput schema / title
        Previous value: -"get_forecastDictOutput"New value: +"ForecastAnswer"
    • Changedget_hazards_near5 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"
    • Changedrank_countries12 fields changed
      • changedInput schema / properties / income_group / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "Low income",
        -      "Lower middle income",
        -      "Upper middle income",
        -      "High income: OECD",
        -      "High income: nonOECD"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / income_group / description
        Previous value: -"Only countries in this World Bank income group"New value: +"Only countries in this World Bank income group, e.g. Low income"
      • removedInput schema / properties / limit / maximum
        Removed value: -194
      • changedInput schema / properties / region / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "Africa",
        -      "Americas",
        -      "Asia",
        -      "Europe",
        -      "Oceania"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / region / description
        Previous value: -"Only countries in this region"New value: +"Only countries in this UN region, e.g. Asia"
      • changedInput schema / properties / subregion / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "Australia and New Zealand",
        -      "Caribbean",
        -      "Central America",
        -      "Central Asia",
        -      "Eastern Africa",
        -      "Eastern Asia",
        -      "Eastern Europe",
        -      "Melanesia",
        -      "Micronesia",
        -      "Middle Africa",
        -      "Northern Africa",
        -      "Northern America",
        -      "Northern Europe",
        -      "Polynesia",
        -      "South America",
        -      "South-Eastern Asia",
        -      "Southern Africa",
        -      "Southern Asia",
        -      "Southern Europe",
        -      "Western Africa",
        -      "Western Asia",
        -      "Western Europe"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / subregion / description
        Previous value: -"Only countries in this UN M49 subregion"New value: +"Only countries in this UN M49 subregion, e.g. Southern Asia"
      • addedOutput schema / $defs
        Added value: +{
        +  "Filters": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "income_group": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "title": "Income Group"
        +      },
        +      "region": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "title": "Region"
        +      },
        +      "subregion": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "title": "Subregion"
        +      }
        +    },
        +    "required": [
        +      "region",
        +      "subregion",
        +      "income_group"
        +    ],
        +    "title": "Filters",
        +    "type": "object"
        +  },
        +  "Rank": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "note": {
        +        "title": "Note",
        +        "type": "string"
        +      },
        +      "of": {
        +        "title": "Of",
        +        "type": "integer"
        +      },
        +      "rank": {
        +        "title": "Rank",
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "rank",
        +      "of",
        +      "note"
        +    ],
        +    "title": "Rank",
        +    "type": "object"
        +  },
        +  "RankedCountry": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "country_code": {
        +        "title": "Country Code",
        +        "type": "string"
        +      },
        +      "country_url": {
        +        "title": "Country Url",
        +        "type": "string"
        +      },
        +      "income_group": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "title": "Income Group"
        +      },
        +      "level": {
        +        "title": "Level",
        +        "type": "string"
        +      },
        +      "name": {
        +        "title": "Name",
        +        "type": "string"
        +      },
        +      "rank_by_dimension": {
        +        "$ref": "#/$defs/Rank"
        +      },
        +      "region": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "title": "Region"
        +      },
        +      "score": {
        +        "title": "Score",
        +        "type": "number"
        +      },
        +      "subregion": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "title": "Subregion"
        +      }
        +    },
        +    "required": [
        +      "country_code",
        +      "name",
        +      "score",
        +      "level",
        +      "rank_by_dimension",
        +      "region",
        +      "subregion",
        +      "income_group",
        +      "country_url"
        +    ],
        +    "title": "RankedCountry",
        +    "type": "object"
        +  }
        +}
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +false
      • addedOutput schema / properties
        Added value: +{
        +  "countries": {
        +    "items": {
        +      "$ref": "#/$defs/RankedCountry"
        +    },
        +    "title": "Countries",
        +    "type": "array"
        +  },
        +  "dimension": {
        +    "title": "Dimension",
        +    "type": "string"
        +  },
        +  "filters": {
        +    "$ref": "#/$defs/Filters"
        +  },
        +  "listed": {
        +    "title": "Listed",
        +    "type": "integer"
        +  },
        +  "matched": {
        +    "description": "Every country that passed the filters",
        +    "title": "Matched",
        +    "type": "integer"
        +  },
        +  "no_score": {
        +    "description": "Countries that passed the filters but have no score on the dimension",
        +    "title": "No Score",
        +    "type": "integer"
        +  },
        +  "order": {
        +    "enum": [
        +      "highest_risk",
        +      "lowest_risk"
        +    ],
        +    "title": "Order",
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "dimension",
        +  "order",
        +  "filters",
        +  "matched",
        +  "listed",
        +  "no_score",
        +  "countries"
        +]
      • changedOutput schema / title
        Previous value: -"rank_countriesDictOutput"New value: +"CountryRanking"
    • Addedsearch
  5. 6 tool updates
    • Changedassess_place3 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"
    • Changedget_climate_profile4 fields changed
      • changedInput schema / properties / categories / description
        Previous value: -"Limit the answer to these layer categories; all of them when omitted"New value: +"Only the layers of these categories, e.g. flooding for flood depth and sea level rise, temperature for heat; every layer 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"
    • Changedget_country_profile1 field changed
      • changedInput schema / properties / include_indicators / description
        Previous value: -"Add every underlying indicator with its world and regional benchmark"New value: +"Add about 160 underlying indicators, each with its world and regional benchmark; the scores alone when false"
    • Changedget_forecast4 fields changed
      • changedInput schema / properties / hourly / description
        Previous value: -"Include every forecast step, not only the daily summary"New value: +"Add every forecast step, hour by hour where the model has them, to the daily summary"
      • 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"
    • Changedget_hazards_near6 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"
    • Addedrank_countries
  6. 7 tool updates
    • First observedassess_place
    • First observedcompare_countries
    • First observedfind_place
    • First observedget_climate_profile
    • First observedget_country_profile
    • First observedget_forecast
    • First observedget_hazards_near

Publisher details

Operator
Criora · Publisher source
Operator website
https://criora.com
Vendor relationship
First-party · Publisher source
Trust center
Not available
Restrictions
None. Free, no account, no API key, no OAuth; read-only. Place-name lookups (OpenStreetMap Nominatim) are limited to about one per second across all users, so pass latitude and longitude where possible. · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables interaction with climate metrics via Riskthinking.AI's CDT Express API, supporting climate exposure, impact, and distribution metrics, as well as physical assets, companies, and markets data. Integrates with AI chat experiences like Claude desktop app.
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides 25 geophysical intelligence tools for multi-hazard risk scoring, earthquake/volcano/tsunami/sinkhole prediction, weather intelligence, insurance underwriting, climate migration, and parametric triggers.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI agents with access to CO2 emissions data, climate projections, and risk assessments for heat, flooding, and drought, supporting ESG analysis and CSRD compliance.
    21 PyPI
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Assesses natural hazard exposure (flood, wildfire, earthquake, coastal proximity) for a single US property address using only free, keyless public data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.