Skip to main content
Glama
TomTom MCP Server

TomTom MCP Server

Official

TomTom POI Search

tomtom-poi-search
Read-onlyIdempotent

Search for a business or point of interest by name, or list all places in a POI category, with optional location bias for nearby results.

Instructions

Search for a specific business or POI by name, or browse an entire POI category. Best for finding a known place (e.g. 'Starbucks') or listing all businesses of a type (e.g. the 'ITALIAN_RESTAURANT' category code from tomtom-poi-categories). Supports optional location bias but does not constrain results to a strict geographic boundary — tomtom-area-search does that.

Input Schema

NameRequiredDescriptionDefault
viewNoGeopolitical view for disputed territories.
limitNoMaximum number of results to return (1-100). Default: 10.
queryYesName of the POI to search for. If the intended query is a POI category like 'restaurant', provide an empty string for this param and use the category filter parameter to apply the desired category filter.
cursorNoThe next page of results: the nextCursor of the previous response, with the same other parameters.
radiusNoSearch radius in meters around position; needs position. Examples: 1000 (walking), 5000 (driving), 20000 (wide area).
fuelSetNoFuel types, comma-separated: Petrol, LPG, Diesel, Biodiesel, DieselForCommercialVehicles, E85, LNG, CNG, Hydrogen, AdBlue.
show_uiNoRequest the interactive map widget. Only hosts that support MCP Apps render it. It adds no coordinates to the text response. Default: false
brandSetNoFilter by brand names, comma-separated. Examples: 'Starbucks', 'Marriott,Hilton'.
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.
timeZoneNoUsed 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
countriesNoLimit results to specific countries using ISO alpha-2 codes. Example: ['US'], ['FR', 'GB'], ['NL', 'DE']
typeaheadNoAutocomplete mode for partial queries. Use for search interfaces.
maxPowerKWNoMaximum charging power in kW for EV stations
minPowerKWNoMinimum charging power in kW for EV stations
boundingBoxNoBounding box as [minLon, minLat, maxLon, maxLat] (GeoJSON convention). Example: [4.8, 52.3, 4.95, 52.45] for Amsterdam area. Not with position.
relatedPoisNoInclude related points of interest: 'off', 'child', 'parent' or 'all'. Default: 'off'.
connectorSetNoEV connector types, comma-separated. Examples: 'IEC62196Type2CCS', 'IEC62196Type2CableAttached,Chademo', 'Tesla'.
openingHoursNoList of opening hours for a POI (Points of Interest).Value: `nextSevenDays` Mode shows the opening hours for next week, starting with the current day in the local time of the POI. Usage example: openingHours=nextSevenDays
poiCategoriesNoFilter POI results by UPPER_SNAKE_CASE text category codes (e.g. 'RESTAURANT', 'PARKING_GARAGE'), NOT numeric IDs. IMPORTANT: Never guess codes — always call tomtom-poi-categories first with the user's intent as keywords to discover valid codes.
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. Changed34 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"
      +}
    • changedInput schema / properties / brandSet / description
      Previous value: -"Filter by brand names. Examples: 'Starbucks,Peet\\'s', 'Marriott,Hilton'. Use quotes for brands with commas."New value: +"Filter by brand names, comma-separated. Examples: 'Starbucks', 'Marriott,Hilton'."
    • removedInput schema / properties / btmRight
      Removed value: -{
      -  "description": "Bottom-right coordinates of bounding box (format: 'lat,lon'). Must be used with topLeft",
      -  "type": "string"
      -}
    • removedInput schema / properties / categorySet
      Removed value: -{
      -  "description": "Filter POI per category using category IDs.\n      Examples: \n      '7315' (Restaurant), '9361' (Shop), '7311' (Gas Station), '7321' (Hospital),\n      '7397' (ATM), '7327' (Department Store), '7314' (Hotel/Motel), '9361009' (Convenience Store),\n      '7324' (Post Office), '7383' (Airport), '7380' (Railroad Station), '9942' (Public Transportation Stop),\n      '7313' (Parking Garage), '7369' (Open Parking Area), '7342' (Movie Theater),\n      '9362' (Park & Recreation Area), '7310' (Repair Shop), '9376' (Café/Pub), '9379' (Nightlife),\n      '7318' (Theater), '7317' (Museum), '7312' (Rent-a-Car Facility), '7372' (School),\n      '7322' (Police Station), '7326' (Pharmacy), '9352' (Company), '7376' (Tourist Attraction),\n      '7332005' (Supermarkets & Hypermarkets), '7315015' (Fast Food)",
      -  "type": "string"
      -}
    • removedInput schema / properties / chargingAvailability
      Removed value: -{
      -  "description": "Include charging availability information for EV stations",
      -  "type": "boolean"
      -}
    • changedInput schema / properties / connectorSet / description
      Previous value: -"EV connector types: 'IEC62196Type2CableAttached', 'Chademo', 'TeslaConnector'"New value: +"EV connector types, comma-separated. Examples: 'IEC62196Type2CCS', 'IEC62196Type2CableAttached,Chademo', 'Tesla'."
    • 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"
      +}
    • removedInput schema / properties / entityTypeSet
      Removed value: -{
      -  "description": "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",
      -  "type": "string"
      -}
    • removedInput schema / properties / ext
      Removed value: -{
      -  "description": "Extended parameters for the search",
      -  "type": "string"
      -}
    • 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 / fuelAvailability
      Removed value: -{
      -  "description": "Include fuel availability information for gas stations",
      -  "type": "boolean"
      -}
    • changedInput schema / properties / fuelSet / description
      Previous value: -"Fuel types: 'Petrol', 'Diesel', 'LPG', 'Hydrogen', 'E85'"New value: +"Fuel types, comma-separated: Petrol, LPG, Diesel, Biodiesel, DieselForCommercialVehicles, E85, LNG, CNG, Hydrogen, AdBlue."
    • removedInput schema / properties / geometries
      Removed value: -{
      -  "description": "Include geometries information in the response",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / lat
      Removed value: -{
      -  "description": "Latitude for location context. STRONGLY recommended for relevant local results.",
      -  "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": "Longitude for location context. Must be used with lat parameter.",
      -  "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)."
    • removedInput schema / properties / maxFuzzyLevel
      Removed value: -{
      -  "description": "Maximum fuzzy matching level (1-4)",
      -  "type": "number"
      -}
    • removedInput schema / properties / minFuzzyLevel
      Removed value: -{
      -  "description": "Minimum fuzzy matching level (1-4)",
      -  "type": "number"
      -}
    • removedInput schema / properties / ofs
      Removed value: -{
      -  "description": "Offset for pagination of results",
      -  "type": "number"
      -}
    • removedInput schema / properties / parkingAvailability
      Removed value: -{
      -  "description": "Include parking availability information",
      -  "type": "boolean"
      -}
    • addedInput schema / properties / poiCategories
      Added value: +{
      +  "description": "Filter POI results by UPPER_SNAKE_CASE text category codes (e.g. 'RESTAURANT', 'PARKING_GARAGE'), NOT numeric IDs. IMPORTANT: Never guess codes — always call tomtom-poi-categories first with the user's intent as keywords to discover valid codes.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 10,
      +  "type": "array"
      +}
    • 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. Essential for focused local results. Examples: 1000 (walking), 5000 (driving), 20000 (wide area)."New value: +"Search radius in meters around position; needs position. Examples: 1000 (walking), 5000 (driving), 20000 (wide area)."
    • changedInput schema / properties / relatedPois / description
      Previous value: -"Include related points of interest"New value: +"Include related points of interest: 'off', 'child', 'parent' or 'all'. Default: 'off'."
    • 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 / topLeft
      Removed value: -{
      -  "description": "Top-left coordinates of bounding box (format: 'lat,lon'). Must be used with btmRight",
      -  "type": "string"
      -}
    • removedInput schema / properties / vehicleTypeSet
      Removed value: -{
      -  "description": "A comma-separated list of vehicle types that could be used to restrict the result to the Points Of Interest of specific vehicles. If vehicleTypeSet is specified, the query can remain empty. Only POIs with a proper vehicle type will be returned. Value: A comma-separated list of vehicle type identifiers (in any order). When multiple vehicles types are provided, only POIs that belong to (at least) one of the vehicle types from the provided list will be returned. Available vehicle types: Car , Truck",
      -  "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. Changed7 schema fields changedv1.6.8
    • removedInput schema / additionalProperties
      Removed value: -false
    • changedInput schema / properties / categorySet / description
      Previous value: -"Filter by POI categories. Common IDs: '7315' (restaurants), '7309' (gas), '7311' (hotels), '9663' (EV charging)."New value: +"Filter POI per category using category IDs.\n      Examples: \n      '7315' (Restaurant), '9361' (Shop), '7311' (Gas Station), '7321' (Hospital),\n      '7397' (ATM), '7327' (Department Store), '7314' (Hotel/Motel), '9361009' (Convenience Store),\n      '7324' (Post Office), '7383' (Airport), '7380' (Railroad Station), '9942' (Public Transportation Stop),\n      '7313' (Parking Garage), '7369' (Open Parking Area), '7342' (Movie Theater),\n      '9362' (Park & Recreation Area), '7310' (Repair Shop), '9376' (Café/Pub), '9379' (Nightlife),\n      '7318' (Theater), '7317' (Museum), '7312' (Rent-a-Car Facility), '7372' (School),\n      '7322' (Police Station), '7326' (Pharmacy), '9352' (Company), '7376' (Tourist Attraction),\n      '7332005' (Supermarkets & Hypermarkets), '7315015' (Fast Food)"
    • changedInput schema / properties / entityTypeSet / description
      Previous value: -"Filter results by entity types"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"
    • changedInput schema / properties / query / description
      Previous value: -"Specific POI category search. Best for finding types of businesses: 'restaurants', 'gas stations', 'hotels', 'parking', 'ATMs', 'hospitals'"New value: +"Name of the POI to search for. If the intended query is a POI category like 'restaurant', provide an empty string for this param and use the category filter parameter to apply the desired category filter."
    • 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"
      +}
    • removedInput schema / properties / roadUse
      Removed value: -{
      -  "description": "Include road usage information",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / sort
      Removed value: -{
      -  "description": "Sort options for results",
      -  "type": "string"
      -}
  3. First observedv1.0.0

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: position only biases results and does not constrain them to a boundary, and category codes must be discovered first rather than guessed. Pagination/rate behavior is left to the schema's cursor parameter.

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?

Two sentences, front-loaded with what the tool does, followed by usage and the key constraint. Every clause carries information; nothing is repeated from the schema.

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 23-parameter open-world search tool with no output schema, the description covers purpose, mode selection, the sibling alternative, and the bias-vs-boundary behavior well. It does not mention the compact/full response detail choice or the map widget toggle, though both are fully documented in the schema, so the gap is minor.

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 schema already documents all 23 parameters in detail, including enum values and format examples. The description adds only the query-vs-category interaction nuance, which the schema duplicates. Baseline 3 is appropriate 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.

Purpose5/5

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

States a specific verb and resource (search for a business/POI) plus the two supported modes: name lookup and category browsing. It explicitly distinguishes itself from tomtom-area-search, so an agent can route between them 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 clear context for when to use it ('finding a known place' vs 'listing all businesses of a type') and names tomtom-area-search as the alternative for strict geographic boundaries. It also points at tomtom-poi-categories for category codes. It does not disambiguate from other overlapping siblings such as tomtom-fuzzy-search, tomtom-nearby, or tomtom-ev-search, which keeps it short of a 5.

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