Skip to main content
Glama
tomtom-international

TomTom MCP Server

Official

TomTom Routing

tomtom-routing
Read-onlyIdempotent

Calculate optimal routes between an origin, stops, and a destination. Get distance, travel time, and traffic delays for simple A-to-B or multi-stop trips.

Instructions

Calculate optimal routes through an ordered list of locations [origin, ...stops, destination]. The primary tool for directions, routes, travel time, or distance between places — whether a simple A-to-B or a multi-stop itinerary (e.g. 'route from Amsterdam to Berlin', 'drive from A to B via C and D'). Returns distance, travel time and traffic delay, with a summary per leg. Turn-by-turn instructions are not available. Route polylines are omitted unless response_detail is 'geometry'.

Input Schema

NameRequiredDescriptionDefault
avoidNoRoute features to avoid. May increase travel time.
show_uiNoRequest the interactive map widget. Only hosts that support MCP Apps render it. It adds no coordinates to the text response. Default: false
trafficNoTraffic consideration: 'live' (real-time + historical), 'historical' (historical only).
arriveAtNoArrival time in ISO format (e.g., '2025-06-24T17:00:00Z'). Cannot be used with departAt.
departAtNoDeparture time in ISO format (e.g., '2025-06-24T14:30:00Z'). Cannot be used with arriveAt.
locationsYesOrdered list of coordinates [origin, ...intermediateStops, destination]. Minimum 2 (origin + destination); add intermediate positions for multi-stop routes. Use geocoding for accurate coordinates.
routeTypeNoRoute optimization: 'fast' (time-optimized), 'short' (distance-optimized), 'efficient' (fuel-efficient), 'thrilling' (scenic). Default: 'fast'.
travelModeNoTransportation mode. Default: 'car'.
sectionTypeNoKeep only these section types in the route, besides leg. Default: all types the route has. Compact responses drop the map-rendering types (urban, tunnel, motorway, lowEmissionZone, pedestrian, speedLimit, roadShields, vehicleRestricted); they appear only with response_detail 'full'.
vehicleWeightNoVehicle weight in kg.
vehicleHeadingNoHeading of the vehicle at the origin, in degrees clockwise from north (0-359), for a route that starts in the direction of travel.
maxAlternativesNoNumber of alternative routes (0-5). More alternatives = more options but larger response.
response_detailNoResponse detail level. 'compact' (default): essential fields and point coordinates, no geometry. 'geometry': compact plus a 'geometry' key holding a GeoJSON FeatureCollection ([lon, lat], at most 1,000 vertices per feature); use this to get coordinates to draw or process. 'full': the raw API response, lossless and many times larger.compact
vehicleMaxSpeedNoMaximum vehicle speed in km/h for commercial routing.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed59 schema fields changedv1.6.13
    • removedInput schema / properties / accelerationEfficiency
      Removed value: -{
      -  "description": "Efficiency during acceleration (0-1).",
      -  "type": "number"
      -}
    • removedInput schema / properties / alternativeType
      Removed value: -{
      -  "description": "When maxAlternatives is greater than 0, it allows the definition of computing alternative routes: finding routes that are significantly different from the reference route, or finding routes that are better than the reference route. Possible values are: `anyRoute` (returns alternative routes that are significantly different from the reference route.), `betterRoute` (only returns alternative routes that are better than the reference route, according to the given planning criteria (set by routeType). If there is a road block on the reference route, then any alternative that does not contain any blockages will be considered a better route. The summary in the route response will contain information (see the planningReason parameter) about the reason for the better alternative.) Note: The betterRoute value can only be used when reconstructing a reference route. Default value: `anyRoute` Other values: `betterRoute`",
      -  "enum": [
      -    "anyRoute",
      -    "betterRoute"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / auxiliaryPowerInLitersPerHour
      Removed value: -{
      -  "description": "Auxiliary power consumption for combustion vehicles in L/hr.",
      -  "type": "number"
      -}
    • removedInput schema / properties / auxiliaryPowerInkW
      Removed value: -{
      -  "description": "Auxiliary power consumption in kW for electric vehicles.",
      -  "type": "number"
      -}
    • changedInput schema / properties / avoid / description
      Previous value: -"Route features to avoid. May increase travel time. Options: 'tollRoads','motorways','ferries','unpavedRoads','carpools','alreadyUsedRoads'. Accepts array of string(s)."New value: +"Route features to avoid. May increase travel time."
    • addedInput schema / properties / avoid / items / enum
      Added value: +[
      +  "tollRoads",
      +  "motorways",
      +  "ferries",
      +  "unpavedRoads",
      +  "carpools",
      +  "alreadyUsedRoads",
      +  "borderCrossings",
      +  "tunnels",
      +  "carTrains",
      +  "lowEmissionZones"
      +]
    • removedInput schema / properties / chargeMarginsInkWh
      Removed value: -{
      -  "description": "Comma-separated charge margins in kWh for route planning.",
      -  "type": "string"
      -}
    • removedInput schema / properties / computeBestOrder
      Removed value: -{
      -  "description": "Reorder waypoints for optimization. Use with multiple waypoints to find the most efficient route order.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / computeTravelTimeFor
      Removed value: -{
      -  "description": "Calculate travel times for all segments ('all') or none ('none').",
      -  "enum": [
      -    "all",
      -    "none"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / constantSpeedConsumptionInLitersPerHundredkm
      Removed value: -{
      -  "description": "Combustion speed-to-consumption mappings: '50,6.3:130,11.5' (speed in km/h, consumption in L/100km).",
      -  "type": "string"
      -}
    • removedInput schema / properties / constantSpeedConsumptionInkWhPerHundredkm
      Removed value: -{
      -  "description": "EV speed-to-consumption mappings format: '50,8.2:130,21.3' (speed in km/h, consumption in kWh/100km).",
      -  "type": "string"
      -}
    • removedInput schema / properties / consumptionInkWhPerkmAltitudeGain
      Removed value: -{
      -  "description": "Energy used per km of altitude gain.",
      -  "type": "number"
      -}
    • removedInput schema / properties / currentChargeInkWh
      Removed value: -{
      -  "description": "Current EV battery charge in kWh. Required for EV routing.",
      -  "type": "number"
      -}
    • removedInput schema / properties / currentFuelInLiters
      Removed value: -{
      -  "description": "Current fuel level in liters for combustion vehicles.",
      -  "type": "number"
      -}
    • removedInput schema / properties / decelerationEfficiency
      Removed value: -{
      -  "description": "Efficiency during deceleration (0-1).",
      -  "type": "number"
      -}
    • removedInput schema / properties / destination
      Removed value: -{
      -  "description": "Destination coordinates. Obtain from geocoding for best results.",
      -  "properties": {
      -    "lat": {
      -      "description": "Latitude coordinate (-90 to +90). Use precise coordinates from geocoding for best results.",
      -      "type": "number"
      -    },
      -    "lon": {
      -      "description": "Longitude coordinate (-180 to +180). Use precise coordinates from geocoding for best results.",
      -      "type": "number"
      -    }
      -  },
      -  "required": [
      -    "lat",
      -    "lon"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / properties / downhillEfficiency
      Removed value: -{
      -  "description": "Efficiency during downhill driving (0-1).",
      -  "type": "number"
      -}
    • removedInput schema / properties / extendedRouteRepresentation
      Removed value: -{
      -  "description": "Additional routing data formats to include in the response.",
      -  "type": "string"
      -}
    • removedInput schema / properties / fuelEnergyDensityInMJoulesPerLiter
      Removed value: -{
      -  "description": "Fuel energy density in megajoules per liter.",
      -  "type": "number"
      -}
    • removedInput schema / properties / hilliness
      Removed value: -{
      -  "description": "Preference for avoiding hills. Use 'low' for flatter routes.",
      -  "enum": [
      -    "low",
      -    "normal",
      -    "high"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / includeTollPaymentTypes
      Removed value: -{
      -  "description": "Include toll payment types in the toll section. If a toll section has different toll payment types in its subsections, this toll section is split into multiple toll sections with the toll payment types. Possible values: all(Include toll payment types in the toll section.), none (Do not include toll payment types in the toll section). The value `all` must be used together with sectionType=toll. Default value: none",
      -  "type": "string"
      -}
    • removedInput schema / properties / instructionsType
      Removed value: -{
      -  "description": "Instruction format: 'text' (human-readable), 'coded' (machine-readable), 'tagged' (HTML).",
      -  "enum": [
      -    "coded",
      -    "text",
      -    "tagged"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / language
      Removed value: -{
      -  "description": "Language code for instructions (e.g., 'en-US', 'de-DE').",
      -  "type": "string"
      -}
    • addedInput schema / properties / locations
      Added value: +{
      +  "description": "Ordered list of coordinates [origin, ...intermediateStops, destination]. Minimum 2 (origin + destination); add intermediate positions for multi-stop routes. Use geocoding for accurate coordinates.",
      +  "items": {
      +    "description": "Position as [longitude, latitude] (GeoJSON convention, lng first). Example: [4.89707, 52.377956] for Amsterdam, [13.404954, 52.520008] for Berlin.",
      +    "items": {
      +      "type": "number"
      +    },
      +    "maxItems": 2,
      +    "minItems": 2,
      +    "type": "array"
      +  },
      +  "minItems": 2,
      +  "type": "array"
      +}
    • removedInput schema / properties / maxChargeInkWh
      Removed value: -{
      -  "description": "Maximum EV battery capacity in kWh. Required for EV routing.",
      -  "type": "number"
      -}
    • removedInput schema / properties / origin
      Removed value: -{
      -  "description": "Starting point coordinates. Obtain from geocoding for best results.",
      -  "properties": {
      -    "lat": {
      -      "description": "Latitude coordinate (-90 to +90). Use precise coordinates from geocoding for best results.",
      -      "type": "number"
      -    },
      -    "lon": {
      -      "description": "Longitude coordinate (-180 to +180). Use precise coordinates from geocoding for best results.",
      -      "type": "number"
      -    }
      -  },
      -  "required": [
      -    "lat",
      -    "lon"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / properties / recuperationInkWhPerkmAltitudeLoss
      Removed value: -{
      -  "description": "Energy recovered per km of altitude loss.",
      -  "type": "number"
      -}
    • removedInput schema / properties / report
      Removed value: -{
      -  "description": "Specifies which data should be reported for diagnostic purposes. A possible value is: `effectiveSettings`. Reports the effective parameters or data used when calling the API. In the case of defaulted parameters, the default will be reflected where the parameter was not specified by the caller. Default value: effectiveSettings",
      -  "type": "string"
      -}
    • 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, no geometry. 'geometry': compact plus a 'geometry' key holding a GeoJSON FeatureCollection ([lon, lat], at most 1,000 vertices per feature); use this to get coordinates to draw or process. 'full': the raw API response, lossless and many times larger."
    • changedInput schema / properties / response_detail / enum
      Previous value: -[
      -  "compact",
      -  "full"
      -]New value: +[
      +  "compact",
      +  "geometry",
      +  "full"
      +]
    • removedInput schema / properties / routeRepresentation
      Removed value: -{
      -  "description": "Representation of routes in response: 'polyline' (default, includes points), 'encodedPolyline' (compressed format), 'summaryOnly' (no points), 'none' (with computeBestOrder only). It cannot be used when `maxAlternatives` is set",
      -  "enum": [
      -    "polyline",
      -    "summaryOnly",
      -    "encodedPolyline",
      -    "none"
      -  ],
      -  "type": "string"
      -}
    • changedInput schema / properties / routeType / description
      Previous value: -"Route optimization: 'fastest' (time-optimized), 'shortest' (distance-optimized), 'eco' (fuel-efficient), 'thrilling' (scenic)."New value: +"Route optimization: 'fast' (time-optimized), 'short' (distance-optimized), 'efficient' (fuel-efficient), 'thrilling' (scenic). Default: 'fast'."
    • changedInput schema / properties / routeType / enum
      Previous value: -[
      -  "fastest",
      -  "shortest",
      -  "eco",
      -  "thrilling"
      -]New value: +[
      +  "fast",
      +  "short",
      +  "efficient",
      +  "thrilling"
      +]
    • changedInput schema / properties / sectionType / description
      Previous value: -"Highlight specific road section types in response for route analysis: toll (toll roads), motorway (highways), tunnel, urban (city areas), country (rural areas), pedestrian (walking paths), etc."New value: +"Keep only these section types in the route, besides leg. Default: all types the route has. Compact responses drop the map-rendering types (urban, tunnel, motorway, lowEmissionZone, pedestrian, speedLimit, roadShields, vehicleRestricted); they appear only with response_detail 'full'."
    • addedInput schema / properties / sectionType / items / enum
      Added value: +[
      +  "carpool",
      +  "carTrain",
      +  "country",
      +  "ferry",
      +  "importantRoadStretch",
      +  "lowEmissionZone",
      +  "motorway",
      +  "pedestrian",
      +  "roadShields",
      +  "speedLimit",
      +  "toll",
      +  "tollRoad",
      +  "tollVignette",
      +  "traffic",
      +  "tunnel",
      +  "unpaved",
      +  "urban",
      +  "vehicleRestricted"
      +]
    • 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 / supportingPoints
      Removed value: -{
      -  "description": "Additional coordinates that influence the route shape without being stops (format: 'lat,lon;lat,lon').",
      -  "type": "string"
      -}
    • changedInput schema / properties / traffic / description
      Previous value: -"Include real-time traffic data for more accurate ETAs and route suggestions."New value: +"Traffic consideration: 'live' (real-time + historical), 'historical' (historical only)."
    • addedInput schema / properties / traffic / enum
      Added value: +[
      +  "live",
      +  "historical"
      +]
    • changedInput schema / properties / traffic / type
      Previous value: -"boolean"New value: +"string"
    • changedInput schema / properties / travelMode / enum
      Previous value: -[
      -  "car",
      -  "pedestrian",
      -  "bicycle",
      -  "truck",
      -  "taxi",
      -  "bus",
      -  "van"
      -]New value: +[
      +  "car"
      +]
    • removedInput schema / properties / uphillEfficiency
      Removed value: -{
      -  "description": "Efficiency during uphill driving (0-1).",
      -  "type": "number"
      -}
    • removedInput schema / properties / vehicleAdrTunnelRestrictionCode
      Removed value: -{
      -  "description": "ADR tunnel restriction code for hazardous materials.",
      -  "type": "string"
      -}
    • removedInput schema / properties / vehicleAxleWeight
      Removed value: -{
      -  "description": "Vehicle axle weight in kg for weight-restricted roads.",
      -  "type": "number"
      -}
    • removedInput schema / properties / vehicleCommercial
      Removed value: -{
      -  "description": "Commercial vehicle flag. Affects road access restrictions.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / vehicleEngineType
      Removed value: -{
      -  "description": "Engine type for fuel/energy consumption calculation.",
      -  "enum": [
      -    "combustion",
      -    "electric"
      -  ],
      -  "type": "string"
      -}
    • changedInput schema / properties / vehicleHeading / description
      Previous value: -"Heading of the vehicle in degrees (0-359) for more accurate initial routing."New value: +"Heading of the vehicle at the origin, in degrees clockwise from north (0-359), for a route that starts in the direction of travel."
    • addedInput schema / properties / vehicleHeading / maximum
      Added value: +359
    • addedInput schema / properties / vehicleHeading / minimum
      Added value: +0
    • removedInput schema / properties / vehicleHeight
      Removed value: -{
      -  "description": "Vehicle height in meters. Used to avoid low bridges.",
      -  "type": "number"
      -}
    • removedInput schema / properties / vehicleLength
      Removed value: -{
      -  "description": "Vehicle length in meters. Affects maneuverability restrictions.",
      -  "type": "number"
      -}
    • removedInput schema / properties / vehicleLoadType
      Removed value: -{
      -  "description": "Cargo type for hazardous materials routing.",
      -  "type": "string"
      -}
    • addedInput schema / properties / vehicleMaxSpeed / exclusiveMinimum
      Added value: +0
    • removedInput schema / properties / vehicleNumberOfAxles
      Removed value: -{
      -  "description": "Number of axles on the vehicle. Used for toll calculations and restrictions.",
      -  "type": "number"
      -}
    • changedInput schema / properties / vehicleWeight / description
      Previous value: -"Vehicle weight in kg. Important for truck routing restrictions."New value: +"Vehicle weight in kg."
    • addedInput schema / properties / vehicleWeight / exclusiveMinimum
      Added value: +0
    • removedInput schema / properties / vehicleWidth
      Removed value: -{
      -  "description": "Vehicle width in meters. Used to avoid narrow roads.",
      -  "type": "number"
      -}
    • removedInput schema / properties / windingness
      Removed value: -{
      -  "description": "Preference for avoiding winding roads. Use 'low' for straighter routes.",
      -  "enum": [
      -    "low",
      -    "normal",
      -    "high"
      -  ],
      -  "type": "string"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "origin",
      -  "destination"
      -]New value: +[
      +  "locations"
      +]
  2. Changed10 schema fields changedv1.6.8
    • removedInput schema / additionalProperties
      Removed value: -false
    • removedInput schema / properties / destination / additionalProperties
      Removed value: -false
    • removedInput schema / properties / destination / properties / lat / $ref
      Removed value: -"#/properties/origin/properties/lat"
    • addedInput schema / properties / destination / properties / lat / description
      Added value: +"Latitude coordinate (-90 to +90). Use precise coordinates from geocoding for best results."
    • addedInput schema / properties / destination / properties / lat / type
      Added value: +"number"
    • removedInput schema / properties / destination / properties / lon / $ref
      Removed value: -"#/properties/origin/properties/lon"
    • addedInput schema / properties / destination / properties / lon / description
      Added value: +"Longitude coordinate (-180 to +180). Use precise coordinates from geocoding for best results."
    • addedInput schema / properties / destination / properties / lon / type
      Added value: +"number"
    • removedInput schema / properties / origin / additionalProperties
      Removed value: -false
    • 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

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/openWorld, and the description goes further by describing what comes back (distance, travel time, traffic delay, per-leg summary) and the important gating that polylines are omitted unless response_detail='geometry'. It does not cover cost, rate limits, or failure behavior, so it earns a 4 rather than 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.

Conciseness5/5

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

Four compact sentences, front-loaded with the core verb and resource, then usage contexts, then return shape, then the key limitation and gating flag. No restatement of the title or schema, and every sentence carries actionable information.

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 14 parameters and no output schema, the description correctly compensates by summarizing the return payload and the geometry/compact/full detail levels, which is the main risk area for an agent. Minor gaps remain around deprecated/exclusive parameters and traffic-mode selection, but nothing an agent needs 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 description coverage is 100%, so the schema already documents every parameter's format, enums, and defaults. The description reinforces the ordering semantics of locations and explains the response_detail trade-off, but adds little else (e.g. no guidance on when to set traffic='live' vs 'historical' or on maxAlternatives). 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 ('Calculate optimal routes through an ordered list of locations') and explicitly positions itself as 'the primary tool for directions, routes, travel time, or distance between places.' This clearly separates it from siblings like tomtom-geocode, tomtom-traffic, and tomtom-search-along-route without requiring the agent to open 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 Guidelines4/5

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

Gives concrete invocation contexts, including example utterances ('route from Amsterdam to Berlin', 'drive from A to B via C and D') and the A-to-B vs multi-stop distinction. It also sets a boundary with 'Turn-by-turn instructions are not available.' It stops short of naming which sibling to use instead for geocoding or traffic-only queries, so routing guidance is implied rather than explicit.

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