Skip to main content
Glama

Location and Timezone MCP Server by RoxyAPI

Search cities worldwide - Geocoding autocomplete with coordinates and timezone

get_location_search
Read-only

Turn a place name into coordinates, an IANA timezone and a DST-aware UTC offset, across 5,180,000+ cities, towns and villages in 240+ countries. Coverage reaches every village on record, whatever its population, so a birthplace outside a major metro resolves as reliably as a capital. Matching is case-insensitive, accent-insensitive and partial, so ber matches Berlin, Bern and Bergen, native scripts are transliterated, and historic names resolve to the current place, so bombay returns Mumbai and peking returns Beijing. A full name typed ranks above its smaller namesakes, a few letters reach the best-known city first, and a state, province or country in the query picks the right one of many places with the same name. A town name that matches nothing returns no match, never the largest town in the region it names. Built for birth chart location pickers, horoscope apps, event scheduling, and any feature that needs place-to-coordinates resolution.

Input Schema

NameRequiredDescriptionDefault
qYesPlace to search for, written the way a person would. Accepts a bare city (berlin), a city plus country (berlin germany), a comma-qualified place (richfield, utah), a fully qualified place (richfield, utah, united states), or a historic name (bombay, peking, constantinople). Commas are optional, and a qualifier the dataset spells differently, such as USA for United States, still resolves. Matched against city name, alternate names, state or province, and country. Add the state or country whenever the name is common, since that is what separates the six Springfields, and Richfield, Utah from Richfield, Minnesota.
limitNoMaximum items to return per page. Range: 1-50, default 10.
offsetNoNumber of items to skip for pagination. Default 0.
compactNoSet true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {"__cols":[names],"__rows":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens.

Output Schema

NameRequiredDescriptionDefault
limitYes
totalYes
citiesYes
offsetYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / offset / default
      Added value: +0
    • addedInput schema / properties / offset / minimum
      Added value: +0
  2. Changed3 schema fields changed
    • removedInput schema / properties / offset / default
      Removed value: -0
    • removedInput schema / properties / offset / minimum
      Removed value: -0
    • changedInput schema / properties / offset / type
      Previous value: -[
      -  "integer",
      -  "null"
      -]New value: +"integer"
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "cities": {
      +      "items": {
      +        "properties": {
      +          "city": {
      +            "type": "string"
      +          },
      +          "country": {
      +            "type": "string"
      +          },
      +          "iso2": {
      +            "type": "string"
      +          },
      +          "latitude": {
      +            "type": "number"
      +          },
      +          "longitude": {
      +            "type": "number"
      +          },
      +          "population": {
      +            "type": "number"
      +          },
      +          "province": {
      +            "type": "string"
      +          },
      +          "timezone": {
      +            "type": "string"
      +          },
      +          "utcOffset": {
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "city",
      +          "province",
      +          "country",
      +          "iso2",
      +          "latitude",
      +          "longitude",
      +          "timezone",
      +          "utcOffset",
      +          "population"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "limit": {
      +      "type": "number"
      +    },
      +    "offset": {
      +      "type": "number"
      +    },
      +    "total": {
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "total",
      +    "limit",
      +    "offset",
      +    "cities"
      +  ],
      +  "type": "object"
      +}
  4. Changed2 schema fields changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "q": "berlin"
      +  }
      +]
    • changedInput schema / properties / compact / description
      Previous value: -"Set true to receive the exact same data in a token-optimized shape that is cheaper for you to read: whitespace is stripped and every array of same-shaped objects is encoded columnar as {\"__cols\":[field names],\"__rows\":[[values]]}, so each field name is sent once instead of once per row. Fully lossless (no field or value is dropped or changed) and typically 40 to 52 percent fewer tokens on large results. Prefer true whenever token or inference cost matters. Default false returns standard indented JSON."New value: +"Set true for the same data in a compact shape: arrays of same-shaped objects arrive columnar as {\"__cols\":[names],\"__rows\":[[values]]}. Lossless, typically 40 to 52 percent fewer tokens."
  5. Changed1 schema field changed
    • changedInput schema / properties / q / description
      Previous value: -"City name to search for. Accepts bare city (\"berlin\"), city plus country (\"berlin germany\"), or comma-qualified (\"berlin, germany\", \"springfield, illinois\") for disambiguation. Matches against city name, province/state, or combined \"city country\" queries. Case-insensitive with partial matching (e.g. \"ber\" matches Berlin, Bern, Bergen)."New value: +"Place to search for, written the way a person would. Accepts a bare city (berlin), a city plus country (berlin germany), a comma-qualified place (richfield, utah), a fully qualified place (richfield, utah, united states), or a historic name (bombay, peking, constantinople). Commas are optional, and a qualifier the dataset spells differently, such as USA for United States, still resolves. Matched against city name, alternate names, state or province, and country. Add the state or country whenever the name is common, since that is what separates the six Springfields, and Richfield, Utah from Richfield, Minnesota."
  6. Changed1 schema field changed
    • changedInput schema / properties / offset / type
      Previous value: -"integer"New value: +[
      +  "integer",
      +  "null"
      +]
  7. Changed1 schema field changed
    • changedInput schema / properties / compact / description
      Previous value: -"Return the same data in a token-optimized compact shape (minified, with same-shaped arrays encoded columnar) to reduce LLM token cost. Lossless: no fields are dropped. Default false."New value: +"Set true to receive the exact same data in a token-optimized shape that is cheaper for you to read: whitespace is stripped and every array of same-shaped objects is encoded columnar as {\"__cols\":[field names],\"__rows\":[[values]]}, so each field name is sent once instead of once per row. Fully lossless (no field or value is dropped or changed) and typically 40 to 52 percent fewer tokens on large results. Prefer true whenever token or inference cost matters. Default false returns standard indented JSON."
  8. Changed1 schema field changed
    • addedInput schema / properties / compact
      Added value: +{
      +  "default": false,
      +  "description": "Return the same data in a token-optimized compact shape (minified, with same-shaped arrays encoded columnar) to reduce LLM token cost. Lossless: no fields are dropped. Default false.",
      +  "type": "boolean"
      +}
  9. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only confirm this is a safe read (readOnlyHint/destructiveHint), and the description adds substantial undisclosed behavior: case/accent-insensitive partial matching, native-script transliteration, historic-name aliasing (bombay→Mumbai), name ranking (full name beats namesakes), and critically the no-match contract ("returns no match, never the largest town in the region it names"). That no-match rule is exactly the kind of failure-mode detail an agent could not infer.

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 and scope are front-loaded in the first sentence, and most sentences carry distinct matching-behavior facts. A few clauses lean promotional ("Coverage reaches every village on record, whatever its population") and repeat the ranking point, costing some density.

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?

With an output schema present, return-shape explanation is unnecessary, and the description covers what remains: query syntax expectations, matching/ranking rules, and the empty-result contract. Pagination and compaction are handled by the fully documented parameter schema, so an agent has everything needed to call this correctly.

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 would be 3; the description still contributes semantics the schema does not state, namely that matching is partial/accent-insensitive and that complete names outrank smaller namesakes. It does not add anything to limit/offset/compact beyond the schema, which already covers them well.

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 opening sentence names a concrete transformation (place name → coordinates, IANA timezone, DST-aware offset) plus scope (5.18M places, 240+ countries). This is clearly a single-place geocoding lookup, which distinguishes it from the sibling country-listing tools without ambiguity.

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?

Usage context is stated explicitly ("Built for birth chart location pickers, horoscope apps, event scheduling") and the description tells the agent how to get good results ("Add the state or country whenever the name is common, since that is what separates the six Springfields"). It stops short of naming the sibling country tools or declaring when not to use this one, so no exclusions or alternatives are offered.

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.

Resources