Skip to main content
Glama
TomTom MCP Server

TomTom MCP Server

Official

TomTom Geocode

tomtom-geocode
Read-onlyIdempotent

Convert street addresses into geographic coordinates to support mapping, routing, and location-based AI workflows.

Instructions

Convert street addresses to coordinates.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "query": "<query>"
    },
    "name": "tomtom-geocode"
  }
}

Input Schema

NameRequiredDescriptionDefault
viewNoGeopolitical view for disputed territories.
limitNoMaximum number of results to return (1-100). Default: 10.
queryYesFull address to convert to coordinates. Include as much detail as possible (street, city, country) for accurate results. Examples: '1600 Pennsylvania Ave, Washington DC', 'Eiffel Tower, Paris, France'
cursorNoThe next page of results: the nextCursor of the previous response, with the same other parameters.
radiusNoSearch radius in meters around position; needs position.
show_uiNoRequest the interactive map widget. Only hosts that support MCP Apps render it. It adds no coordinates to the text response. Default: false
languageNoPreferred language for results using IETF language tags. Examples: 'en-US', 'fr-FR', 'de-DE', 'es-ES'
mapcodesNoInclude mapcode information in the response. Mapcodes represent specific locations within a few meters and are designed to be short, easy to recognize and communicate. Options: Local, International, Alternative. Examples: ['Local'] (local mapcode only), ['Local', 'Alternative'] (multiple types).
positionNoCenter position as [longitude, latitude] for location bias (GeoJSON convention). Example: [4.89707, 52.377956] for Amsterdam. Not with boundingBox.
countriesNoLimit results to specific countries using ISO alpha-2 codes. Example: ['US'], ['FR', 'GB'], ['NL', 'DE']
boundingBoxNoBounding box as [minLon, minLat, maxLon, maxLat] (GeoJSON convention). Example: [4.8, 52.3, 4.95, 52.45] for Amsterdam area. Not with position.
entityTypeSetNoFilter results by geographic entity types, comma-separated: Country, CountrySubdivision, CountrySecondarySubdivision, CountryTertiarySubdivision, Municipality, MunicipalitySubdivision, MunicipalitySecondarySubdivision, Neighbourhood, PostalCodeArea. Note: This parameter is for geographic entities only, not POIs. For POI filtering, use poiCategories instead
response_detailNoResponse detail level. 'compact' (default): essential fields and point coordinates, saves tokens. 'full': the raw API response with every field, lossless and much larger.compact
extendedPostalCodesForNoComma-separated index types whose results carry extended postal codes: Geo, PAD, Addr, Str, XStr, and POI for POI results. Default: every type except Geo, so listing types removes the codes from the others. Examples: 'PAD,Addr', 'Geo'.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed21 schema fields changedv1.6.13
    • removedInput schema / properties / addressRanges
      Removed value: -{
      -  "description": "Include address ranges in the response",
      -  "type": "boolean"
      -}
    • addedInput schema / properties / boundingBox
      Added value: +{
      +  "description": "Bounding box as [minLon, minLat, maxLon, maxLat] (GeoJSON convention). Example: [4.8, 52.3, 4.95, 52.45] for Amsterdam area. Not with position.",
      +  "items": {
      +    "type": "number"
      +  },
      +  "maxItems": 4,
      +  "minItems": 4,
      +  "type": "array"
      +}
    • removedInput schema / properties / btmRight
      Removed value: -{
      -  "description": "Bottom-right coordinates of bounding box (format: 'lat,lon'). Must be used with topLeft",
      -  "type": "string"
      -}
    • addedInput schema / properties / countries
      Added value: +{
      +  "description": "Limit results to specific countries using ISO alpha-2 codes. Example: ['US'], ['FR', 'GB'], ['NL', 'DE']",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • removedInput schema / properties / countrySet
      Removed value: -{
      -  "description": "Limit results to specific countries using ISO codes. Examples: 'US', 'FR,GB', 'CA,US'",
      -  "type": "string"
      -}
    • addedInput schema / properties / cursor
      Added value: +{
      +  "description": "The next page of results: the nextCursor of the previous response, with the same other parameters.",
      +  "type": "string"
      +}
    • changedInput schema / properties / entityTypeSet / description
      Previous value: -"Filter results by geographic entity types. Valid values: PostalCodeArea,\n      CountryTertiarySubdivision, CountrySecondarySubdivision, MunicipalitySubdivision,\n      MunicipalitySecondarySubdivision, Country, CountrySubdivision, Neighbourhood, Municipality.\n      Note: This parameter is for geographic entities only, not POIs.\n      For POI filtering, use categorySet instead"New value: +"Filter results by geographic entity types, comma-separated: Country, CountrySubdivision, CountrySecondarySubdivision, CountryTertiarySubdivision, Municipality, MunicipalitySubdivision, MunicipalitySecondarySubdivision, Neighbourhood, PostalCodeArea. Note: This parameter is for geographic entities only, not POIs. For POI filtering, use poiCategories instead"
    • changedInput schema / properties / extendedPostalCodesFor / description
      Previous value: -"Include extended postal codes for specific index types. Examples: 'PAD', 'PAD,Addr', 'POI'"New value: +"Comma-separated index types whose results carry extended postal codes: Geo, PAD, Addr, Str, XStr, and POI for POI results. Default: every type except Geo, so listing types removes the codes from the others. Examples: 'PAD,Addr', 'Geo'."
    • removedInput schema / properties / geometries
      Removed value: -{
      -  "description": "Include geometries information in the response",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / lat
      Removed value: -{
      -  "description": "Center latitude for location bias",
      -  "type": "number"
      -}
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum number of results to return (1-100). Default: 5"New value: +"Maximum number of results to return (1-100). Default: 10."
    • removedInput schema / properties / lon
      Removed value: -{
      -  "description": "Center longitude for location bias",
      -  "type": "number"
      -}
    • changedInput schema / properties / mapcodes / description
      Previous value: -"Include mapcode information in the response. Mapcodes represent specific locations within a few meters and are designed to be short, easy to recognize and communicate. Options: Local, International, Alternative. Examples: 'Local' (local mapcode only), 'Local,Alternative' (multiple types). Accepts array of string(s)."New value: +"Include mapcode information in the response. Mapcodes represent specific locations within a few meters and are designed to be short, easy to recognize and communicate. Options: Local, International, Alternative. Examples: ['Local'] (local mapcode only), ['Local', 'Alternative'] (multiple types)."
    • addedInput schema / properties / position
      Added value: +{
      +  "description": "Center position as [longitude, latitude] for location bias (GeoJSON convention). Example: [4.89707, 52.377956] for Amsterdam. Not with boundingBox.",
      +  "items": {
      +    "type": "number"
      +  },
      +  "maxItems": 2,
      +  "minItems": 2,
      +  "type": "array"
      +}
    • changedInput schema / properties / radius / description
      Previous value: -"Search radius in meters when lat/lon provided"New value: +"Search radius in meters around position; needs position."
    • changedInput schema / properties / response_detail / description
      Previous value: -"Response detail level. 'compact' (default): trimmed response with essential fields only, saves tokens. 'full': complete API response with all fields including coordinates, classifications, etc."New value: +"Response detail level. 'compact' (default): essential fields and point coordinates, saves tokens. 'full': the raw API response with every field, lossless and much larger."
    • addedInput schema / properties / show_ui
      Added value: +{
      +  "default": false,
      +  "description": "Request the interactive map widget. Only hosts that support MCP Apps render it. It adds no coordinates to the text response. Default: false",
      +  "type": "boolean"
      +}
    • removedInput schema / properties / timeZone
      Removed value: -{
      -  "description": "Used to indicate the mode in which the timeZone object should be returned. Values: iana Mode shows the IANA ID which allows the user to determine the current time zone for the POI. Usage examples: timeZone=iana",
      -  "type": "string"
      -}
    • removedInput schema / properties / topLeft
      Removed value: -{
      -  "description": "Top-left coordinates of bounding box (format: 'lat,lon'). Must be used with btmRight",
      -  "type": "string"
      -}
    • changedInput schema / properties / view / description
      Previous value: -"Geopolitical view for disputed territories. Options: 'Unified', 'AR', 'IL', 'IN', 'MA', 'PK', 'RU', 'TR', 'CN'"New value: +"Geopolitical view for disputed territories."
    • addedInput schema / properties / view / enum
      Added value: +[
      +  "Unified",
      +  "AE",
      +  "AR",
      +  "BN",
      +  "CL",
      +  "CN",
      +  "DZ",
      +  "IL",
      +  "IN",
      +  "KR",
      +  "MA",
      +  "MY",
      +  "PH",
      +  "PK",
      +  "RS",
      +  "RU",
      +  "TR",
      +  "TW",
      +  "US",
      +  "VN"
      +]
  2. Changed3 schema fields changedv1.6.8
    • removedInput schema / additionalProperties
      Removed value: -false
    • changedInput schema / properties / entityTypeSet / description
      Previous value: -"Filter results by geographic entity types. Valid values: PostalCodeArea, CountryTertiarySubdivision, CountrySecondarySubdivision, MunicipalitySubdivision, MunicipalitySecondarySubdivision, Country, CountrySubdivision, Neighbourhood, Municipality. Note: This parameter is for geographic entities only, not POIs. For POI filtering, use categorySet instead"New value: +"Filter results by geographic entity types. Valid values: PostalCodeArea,\n      CountryTertiarySubdivision, CountrySecondarySubdivision, MunicipalitySubdivision,\n      MunicipalitySecondarySubdivision, Country, CountrySubdivision, Neighbourhood, Municipality.\n      Note: This parameter is for geographic entities only, not POIs.\n      For POI filtering, use categorySet instead"
    • addedInput schema / properties / response_detail
      Added value: +{
      +  "default": "compact",
      +  "description": "Response detail level. 'compact' (default): trimmed response with essential fields only, saves tokens. 'full': complete API response with all fields including coordinates, classifications, etc.",
      +  "enum": [
      +    "compact",
      +    "full"
      +  ],
      +  "type": "string"
      +}
  3. First observedv1.0.0

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, covering the safety profile. The description adds no behavioral context beyond what the annotations already establish, such as rate limits, pagination, or what happens with ambiguous addresses.

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?

The single sentence is front-loaded and free of waste. It is arguably under-specified for a 14-parameter tool, but it is concise and direct, not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For a complex geocoding tool with 14 parameters and no output schema, the description is too thin. It omits return-shape information, usage context, and guidance on when to use this versus related search tools, leaving the schema and annotations to carry nearly all the burden.

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?

With 14 parameters and 100% schema description coverage, the schema itself fully documents each parameter with examples and constraints. The description contributes no parameter-level meaning beyond the obvious 'address' input, so the baseline 3 is appropriate.

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 states a specific verb+resource ('convert street addresses to coordinates'), so the core purpose is clear. However, it does not explicitly distinguish this tool from siblings like tomtom-reverse-geocode or tomtom-fuzzy-search, leaving differentiation to be inferred.

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

Usage Guidelines2/5

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

It offers no when-to-use guidance, exclusions, or references to alternative tools. An agent must infer from the name and schema that this is for forward geocoding and not for coordinate-to-address lookup or POI search.

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