Skip to main content
Glama

Criora: climate & disaster risk for any place

Rank countries by climate and disaster risk

rank_countries
Read-onlyIdempotent

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.

Input Schema

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

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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed12 schema 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"
  2. Added

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.