TomTom MCP Server
OfficialThe TomTom MCP Server provides seamless access to TomTom's location services for geospatial development and AI workflows.
Geocoding & Reverse Geocoding: Convert addresses to coordinates and coordinates to human-readable addresses with global coverage
Search & Discovery: Find points of interest using fuzzy search with typo tolerance, category-based POI search, and nearby services within a specified radius
Routing & Navigation: Calculate optimal routes between locations with multiple travel modes (car, pedestrian, bicycle, truck), plan multi-stop routes, and determine reachable areas by time/distance (isochrones)
Traffic Information: Access real-time traffic incident data within defined geographic areas
Map Visualization: Generate custom static map images and create advanced dynamic maps with custom markers, routes, and traffic visualization
Backend Flexibility: Choose between standard Genesis TomTom APIs or advanced Orbis backend (Public Preview) for enhanced features
AI Integration: Easily integrate into AI development environments like Claude Desktop, VS Code, Cursor AI, WindSurf, and Smolagents
Supports configuration through .env files for storing API keys and other configuration options.
Allows users to report issues, contribute code, and access documentation through the GitHub repository.
Runs as a Node.js application, enabling developers to incorporate TomTom's geospatial capabilities into Node.js-based AI workflows.
Provides access to TomTom's location services including geocoding, reverse geocoding, fuzzy search, POI search, nearby search, routing, waypoint routing, reachable range, traffic data, and static maps generation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TomTom MCP Serverfind coffee shops near Central Park in New York"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TomTom Maps MCP Server
The TomTom Maps MCP Server simplifies geospatial development by providing seamless access to TomTom’s location services, including search, routing, traffic and static maps data. It enables easy integration of precise and accurate geolocation data into AI workflows and development environments.
Demo

Related MCP server: mcp-tomtom
Table of Contents
Remote MCP Server (No Installation Required)
Public Preview — The TomTom Maps Remote MCP Server is currently in public preview.
The easiest way to get started is to connect directly to TomTom's hosted MCP Server — no Node.js, Docker, or local setup needed.
Endpoint:
https://mcp.tomtom.com/mapsPrerequisites:
A valid TomTom API key with MCP Server access enabled (see API Key Management)
Generic MCP Client Configuration
Add the following to your MCP client configuration:
{
"mcpServers": {
"tomtom-mcp": {
"type": "http",
"url": "https://mcp.tomtom.com/maps",
"headers": {
"tomtom-api-key": "your_api_key_here"
}
}
}
}Selecting a Map Backend
Add the optional tomtom-maps-backend header to choose your backend:
TomTom Maps (default):
{
"mcpServers": {
"tomtom-mcp": {
"type": "http",
"url": "https://mcp.tomtom.com/maps",
"headers": {
"tomtom-api-key": "your_api_key_here",
"tomtom-maps-backend": "tomtom-maps"
}
}
}
}TomTom Orbis Maps:
{
"mcpServers": {
"tomtom-mcp": {
"type": "http",
"url": "https://mcp.tomtom.com/maps",
"headers": {
"tomtom-api-key": "your_api_key_here",
"tomtom-maps-backend": "tomtom-orbis-maps"
}
}
}
}If the tomtom-maps-backend header is omitted, the server defaults to TomTom Maps.
VS Code (GitHub Copilot)
Create or edit .vscode/mcp.json in your workspace:
{
"servers": {
"tomtom-mcp": {
"type": "http",
"url": "https://mcp.tomtom.com/maps",
"headers": {
"tomtom-api-key": "your_api_key_here"
}
}
}
}Claude Desktop
The quickest option is to install the pre-built extension — see the Claude Desktop Setup guide for details.
Alternatively, configure Claude Desktop to use the remote server directly by editing your configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"tomtom-mcp": {
"type": "http",
"url": "https://mcp.tomtom.com/maps",
"headers": {
"tomtom-api-key": "your_api_key_here"
}
}
}
}Note: If your MCP client does not support remote HTTP connections with custom headers, use the local setup instead.
Security Notice
Keeping local deployments of the TomTom Maps MCP Server up-to-date is the responsibility of the MCP client/operator. TomTom publishes updates to address known vulnerabilities, but failing to apply updates, patches, or recommended security configurations to your local instance may expose it to known vulnerabilities.
Quick Start
Prerequisites
Node.js 22.x
TomTom API key
How to obtain a TomTom API key:
Create a developer account on TomTom Developer Portal and Sign-in
Go to API & SDK Keys in the left-hand menu.
Click the red Create Key button.
Select all available APIs to ensure full access, assign a name to your key, and click Create.
For more details, visit the TomTom API Key Management Documentation.
Installation
npm install @tomtom-org/tomtom-mcp@latest
# or run directly without installing
npx @tomtom-org/tomtom-mcp@latestConfiguration
Set your TomTom API key using one of the following methods:
# Option 1: Use a .env file (recommended)
echo "TOMTOM_API_KEY=your_api_key" > .env
# Option 2: Environment variable
export TOMTOM_API_KEY=your_api_key
# Option 3: Pass as CLI argument
TOMTOM_API_KEY=your_api_key npx @tomtom-org/tomtom-mcp@latestEnvironment Variables
Variable | Description | Default |
| Your TomTom API key | - |
| Backend to use: |
|
| Port for the HTTP server |
|
| Logging level: |
|
Usage
Stdio Mode (Default - for AI assistants like Claude):
# Start MCP server via stdio
npx @tomtom-org/tomtom-mcp@latestHTTP Mode (for web applications and API integration):
pnpm run build # Build first (required)
pnpm run start:http
# or run the built binary directly
node bin/tomtom-mcp-http.jsWhen running in HTTP mode, you need to include your API key in the tomtom-api-key header. You can also optionally set the maps backend per-request using the tomtom-maps-backend header:
tomtom-api-key: <API_KEY>
tomtom-maps-backend: tomtom-maps # or tomtom-orbis-mapsNote: The
tomtom-maps-backendheader is only used when the server is started without theMAPSenv var (dual-backend mode). IfMAPSis set at startup, the header is ignored and the server uses the fixed backend.
For example, to make a request using curl:
curl --location 'http://localhost:3000/mcp' \
--header 'Accept: application/json,text/event-stream' \
--header 'tomtom-api-key: <API KEY>' \
--header 'Content-Type: application/json' \
--data '{
"method": "tools/call",
"params": {
"name": "tomtom-geocode",
"arguments": {
"query": "Amsterdam Central Station"
}
},
"jsonrpc": "2.0",
"id": 24
}'The Docker setup is also configured to use this HTTP mode with the same authentication method.
Docker Mode (recommended):
# Option 1: Using docker run directly
# Note: TomTom Maps is the default backend (same as npm package)
docker run -p 3000:3000 ghcr.io/tomtom-international/tomtom-maps-mcp:latest
# To use TomTom Orbis Maps backend instead:
docker run -p 3000:3000 -e MAPS=tomtom-orbis-maps ghcr.io/tomtom-international/tomtom-maps-mcp:latest
# Option 2: Using Docker Compose (recommended for development)
# Clone the repository first
git clone https://github.com/tomtom-international/tomtom-maps-mcp.git
cd tomtom-maps-mcp
# Start the service (uses TomTom Maps backend by default)
docker compose upBoth Docker options run the server in HTTP mode. Pass your API key via the tomtom-api-key header as shown in the HTTP Mode curl example above.
Integration Guides
TomTom Maps MCP Server can be easily integrated into various AI development environments and tools.
These guides help you integrate the MCP server with your tools and environments:
Claude Desktop Setup - Instructions for configuring Claude Desktop to work with TomTom Maps MCP server
VS Code Setup - Setting up a development environment in Visual Studio Code
Cursor AI Integration - Guide for integrating TomTom Maps MCP server with Cursor AI
Windsurf Integration - Instructions for configuring Windsurf to use TomTom Maps MCP server
Smolagents Integration - Example showing how to connect Smolagents AI agents to TomTom Maps MCP server.
Available Tools
TomTom Orbis Maps (optional backend)
By default the MCP tools use TomTom Maps APIs listed above. We also support using TomTom Orbis Maps for the same tools. To enable TomTom Orbis Maps for all tools set the environment variable MAPS=tomtom-orbis-maps.
Note: The Orbis Maps backend includes all the tools from TomTom Maps plus additional Orbis-exclusive tools:
tomtom-ev-routing,tomtom-search-along-route,tomtom-area-search,tomtom-ev-search, andtomtom-data-viz. Thetomtom-static-maptool is only available with the default TomTom Maps backend.
Tool | Description | TomTom Orbis Maps API (documentation) |
| Forward geocoding: address → coordinates | https://developer.tomtom.com/geocoding-api/documentation/tomtom-orbis-maps/geocode |
| Reverse geocoding: coordinates → address | https://developer.tomtom.com/reverse-geocoding-api/documentation/tomtom-orbis-maps/reverse-geocode |
| General search with typo tolerance and suggestions | https://developer.tomtom.com/search-api/documentation/tomtom-orbis-maps/search-service/fuzzy-search |
| Points of Interest (category-based) search | |
| Find POIs near a coordinate within a radius | https://developer.tomtom.com/search-api/documentation/tomtom-orbis-maps/search-service/nearby-search |
| Calculate optimal route between two points | https://developer.tomtom.com/routing-api/documentation/tomtom-orbis-maps/calculate-route |
| Multi-stop / waypoint route planning | https://developer.tomtom.com/routing-api/documentation/tomtom-orbis-maps/calculate-route |
| Compute coverage area by time or distance budget | https://developer.tomtom.com/routing-api/documentation/tomtom-orbis-maps/calculate-reachable-range |
| Traffic incidents and related details | https://developer.tomtom.com/traffic-api/documentation/tomtom-orbis-maps/incident-details |
| Advanced map rendering with custom markers, routes, and traffic visualization | https://developer.tomtom.com/map-display-api/documentation/tomtom-orbis-maps/raster-tile |
| Plan long-distance EV routes with automatic charging stop optimization | https://developer.tomtom.com/routing-api/documentation/tomtom-orbis-maps/long-distance-ev-routing |
| Find POIs (restaurants, gas stations, hotels, etc.) along a route corridor | |
| Search for places within a geographic area (circle, polygon, or bounding box) | |
| Find EV charging stations with real-time availability and connector types | |
| Visualize custom GeoJSON data on an interactive TomTom basemap (markers, heatmaps, clusters, choropleths) | https://developer.tomtom.com/map-display-api/documentation/tomtom-orbis-maps/raster-tile |
How dynamic map tool works
The dynamic map tool fetches raster tiles from TomTom (either TomTom Maps or TomTom Orbis Maps), then uses skia-canvas (server-side) to:
stitch map tiles into a single canvas at the appropriate zoom level;
add markers, routes, polygons, and other overlays;
render the final composited image.
The server converts the rendered image to PNG and returns it as a Base64 string.
References:
TomTom Map Tile API: https://developer.tomtom.com/map-display-api/documentation/raster/map-tile
TomTom Orbis Maps Tile API: https://developer.tomtom.com/map-display-api/documentation/tomtom-orbis-maps/raster-tile
Debug UI
A built-in debug UI lets you visually test MCP tools and their interactive map widgets without needing an AI client.
Quick Start
pnpm run uiThis starts both the MCP HTTP server (port 3000) and the debug UI host (port 8080). Open http://localhost:8080 in your browser.
Features
Tool browser — searchable sidebar listing all available tools, with icons distinguishing map-enabled tools from plain tools
Pre-filled examples — each tool loads with example parameters (including
show_ui: truefor map widgets)Live map widgets — tools with UI resources render interactive TomTom maps directly in the browser
Response metadata — latency, payload size, estimated token count, content parts, and timestamps for every call
Dark / light mode — toggle with the theme button or follows system preference
Keyboard shortcuts —
Cmd+Enterto run,Cmd+Kto search tools
Requirements
The MCP server must be running in HTTP mode (handled automatically by
pnpm run ui)A valid
TOMTOM_API_KEYin your.envfileTo see map widgets, use the TomTom Orbis Maps backend (
MAPS=tomtom-orbis-mapsin.env)
Building the UI separately
The UI host is a workspace package (tomtom-mcp-app-host in ui/), so the root pnpm install already installed its dependencies.
pnpm run ui:build # Build the UI
pnpm --filter tomtom-mcp-app-host start # Start only the UI host (assumes MCP server is already running)Local Development
This project uses pnpm (
>=11) as its package manager. Install it withnpm install -g pnpmorcorepack enable. Linting and formatting are handled by Biome.
Setup
git clone https://github.com/tomtom-international/tomtom-maps-mcp.git
cd tomtom-maps-mcp
pnpm install
cp .env.example .env # Add your API key in .env
pnpm run build # Build TypeScript files
node ./bin/tomtom-mcp.js # Start the MCP server
Testing
pnpm run build # Build TypeScript
pnpm test # Run all tests
pnpm run test:all # All tests (unit + stdio + http)Testing Requirements
⚠️ Important: All tests require a valid API key in .env as they make real API calls (not mocked). This will consume your API quota.
Project Structure
src/
├── apps/ # MCP App UI resources
├── handlers/ # Request handlers
├── schemas/ # Validation schemas
├── services/ # TomTom API wrappers
├── tools/ # MCP tool definitions
├── types/ # TypeScript type definitions
├── utils/ # Utilities
├── createServer.ts # MCP Server creation logic
├── index.ts # Main entry point (stdio)
└── indexHttp.ts # HTTP server entry pointTroubleshooting
API Key Issues
echo $TOMTOM_API_KEY # Check if setTest Failures
ls -la .env # Verify .env exists
cat .env # Check API keyBuild Issues
pnpm run build # Rebuild
pnpm store prune # Clear cacheForbidden (403) Errors
If you see an error stating "missing permissions", it means your API key does not have access to the TomTom Orbis Maps or EV services.
Note: TomTom Orbis Maps and certain EV routing features are currently in Public Preview. They may not be available on all developer accounts by default.
How to troubleshoot:
Log in to the TomTom Developer Portal.
Ensure all available products are selected for your API key.
If you still encounter 403 errors when using
MAPS=tomtom-orbis-maps, your account may not yet have access to the Orbis preview. You can continue using the standardtomtom-mapsbackend in the meantime.
Contributing & Feedback
We welcome contributions to the TomTom Maps MCP Server! Please see CONTRIBUTING.md for details on how to submit pull requests, report issues, and suggest improvements.
All contributions must adhere to our Code of Conduct and be signed-off according to the Developer Certificate of Origin (DCO).
Open issues on the GitHub repo
Security
Please see our Security Policy for information on reporting security vulnerabilities and our security practices.
License
This project is licensed under the Apache License 2.0 - see the LICENSE.md file for details.
Copyright (C) 2025 TomTom Navigation B.V.
Available Tools
14 toolstomtom-dynamic-mapTomTom Dynamic MapARead-onlyIdempotent
Render a custom map image with markers, drawn lines, polygons, and area overlays using server-side rendering. Intended for map visualization: showing locations on a map, highlighting areas, or combining multiple visual elements in one view. Not intended for route calculations (tomtom-routing) or traffic incidents (tomtom-traffic). The optional routePlans parameter can calculate and draw routes on the map; it is meant for routes combined with other map elements (markers, polygons) in a single image.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | Bounding box in format [west, south, east, north] (min longitude, min latitude, max longitude, max latitude). Alternative to center+zoom. Use this parameter to ensure all map elements are fully visible. EXAMPLE: [4.87, 52.355, 4.915, 52.385] for central Amsterdam area. | |
| zoom | No | Zoom level (0-22). EXAMPLES: 3 (continent), 6 (country), 10 (city), 15 (neighborhood), 18 (street), 20-22 (building detail). Auto-calculated if not provided. NOTE: Zoom levels 20+ are only useful for very small geographic areas. | |
| width | No | Map width in pixels (100-2048). Auto-calculated based on content if not provided. Recommended values: 800 (standard), 1200 (detailed). EXAMPLE: 800 for standard display, 1200 for detailed map. | |
| center | No | Map center coordinates. Optional if bbox provided or if markers/routes are used for auto-calculation. IMPORTANT: If using 'center', also provide 'zoom' for best results. Use either center+zoom OR bbox, not both simultaneously. EXAMPLE: {lat: 52.3676, lon: 4.9041} for Amsterdam Central. | |
| detail | No | Controls the image quality included in the tool response. 'compact' (DEFAULT): Compresses the image to stay under 1MB, using JPEG conversion and/or downscaling as needed. Best for most use cases since the interactive MCP app widget renders the full map separately. 'full': Returns the original full-resolution PNG image. Use when you need maximum image quality in the conversation, but note this may exceed the 1MB response limit for large/detailed maps. | compact |
| height | No | Map height in pixels (100-2048). Auto-calculated based on content if not provided. Recommended values: 600 (standard), 900 (detailed). EXAMPLE: 600 for standard display, 900 for detailed map. | |
| routes | No | Draw straight lines between coordinates — for visualizing custom paths, connections, or external data (e.g. flight paths, supply chains, hiking trails). These are NOT road-following routes and have no distance/time info. For actual driving or walking routes that follow roads, use 'routePlans' instead. EXAMPLE: [{points: [{lat: 52.3676, lon: 4.9041}, {lat: 52.36, lon: 4.8852}], color: '#0000FF', name: 'Flight Path'}]. | |
| markers | No | Array of markers to display on the map. Each marker can have custom color, label, and priority. EXAMPLE: [{lat: 52.3676, lon: 4.9041, color: '#FF4444', label: 'Amsterdam Central', priority: 'high'}]. | |
| show_ui | No | Enable interactive MCP app visualization. When true, the response includes a viz_id that allows an MCP App to render an interactive version of the map with zoom, pan, and click capabilities. Set to false if you only need the static PNG image. DEFAULT: false. | |
| polygons | No | Array of polygons and circles to display on the map. Supports both custom polygon shapes (with coordinate arrays) and circular areas (with center point and radius). Each shape can have custom styling and labels. EXAMPLE for polygon: [{type: 'polygon', coordinates: [[4.9041, 52.3676], [4.8979, 52.3745], [4.8852, 52.36], [4.9041, 52.3676]], fillColor: 'rgba(255,0,0,0.3)', label: 'Tourist Area'}]. EXAMPLE for circle: [{type: 'circle', center: {lat: 52.3676, lon: 4.9041}, radius: 1000, fillColor: 'rgba(0,0,255,0.2)', label: '1km Radius'}]. | |
| routePlans | No | Array of route calculations to draw on the map. Each entry is an independent origin→destination trip calculated via TomTom Routing API. NOTE: For standalone route queries (directions, travel time, distance), prefer the tomtom-routing tool instead. Use routePlans here only when you need to visualize calculated routes alongside other map elements (markers, polygons) in a single map image. Each plan can have its own routeType, travelMode, and color. EXAMPLE: [{origin: {lat: 52.37, lon: 4.89}, destination: {lat: 52.36, lon: 4.89}, label: 'Morning Commute'}, {origin: {lat: 48.86, lon: 2.35}, destination: {lat: 48.85, lon: 2.29}, label: 'Paris Tour'}]. | |
| showLabels | No | Whether to show text labels on markers, routes, and polygons. DEFAULT: false. EXAMPLE: true to display all labels. | |
| routeInfoDetail | No | Level of route information to display when using routePlans. OPTIONS: 'basic' (simple), 'compact' (short), 'detailed' (full), 'distance-time' (time/distance only). DEFAULT: 'basic'. EXAMPLE: 'distance-time' to show just the travel distance and time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior: the detail parameter's 1MB response limit and JPEG/downscaling behavior, the show_ui parameter's interactive viz_id capability, and auto-calculation of dimensions. Minor gap: no explicit statement about the response format/return value, though the description covers most operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main description is efficiently written with purpose front-loaded before exclusions. It avoids redundancy with the schema. However, the overall tool definition is lengthy due to the schema, and the description could be slightly trimmed — the routePlans guidance is repeated in both the description and the parameter schema. Still, it earns a 4 for being well-organized and purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 13 parameters, 0 required, and complex nested objects, the description covers the key operational concerns: auto-calculation behavior, the detail/response-size tradeoff, the show_ui interaction, and the routes vs routePlans distinction. No output schema exists, but the description addresses return behavior through the detail parameter. The main omission is not describing the output image format explicitly, though the detail parameter implies it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds real value with concrete examples (Amsterdam coordinates, hex color codes, priority semantics) and clarifies nuanced distinctions like the routes vs routePlans difference (straight lines vs road-following). However, much of the value is also present in the schema descriptions, so the description doesn't dramatically exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Render) and resource (custom map image) with concrete elements: markers, drawn lines, polygons, and area overlays. Explicitly distinguishes from siblings (tomtom-routing, tomtom-traffic) by naming what it is NOT for, which is rare and highly valuable for agent selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance ('Intended for map visualization') and when-not-to ('Not intended for route calculations (tomtom-routing) or traffic incidents (tomtom-traffic)'). Also clarifies the edge case of routePlans — when it should be used vs. when to prefer tomtom-routing for standalone queries. This is exemplary routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tomtom-fuzzy-searchTomTom Fuzzy SearchBRead-onlyIdempotent
Typo-tolerant search for addresses, points of interest, and geographies
| Name | Required | Description | Default |
|---|---|---|---|
| ext | No | Extended parameters for the search | |
| lat | No | Center latitude for location bias | |
| lon | No | Center longitude for location bias | |
| ofs | No | Offset for pagination of results | |
| view | No | Geopolitical view for disputed territories. Options: 'Unified', 'AR', 'IL', 'IN', 'MA', 'PK', 'RU', 'TR', 'CN' | |
| limit | No | Maximum number of results to return (1-100). Default: 5 | |
| query | Yes | Natural language search query. Works with addresses, POI names, coordinates, or free-form text. Examples: 'restaurants near Central Park', 'IKEA stores', '52.3791,4.8994', 'coffee shops downtown' | |
| idxSet | No | Filter results by index set | |
| radius | No | Search radius in meters when lat/lon provided. Examples: 1000 (neighborhood), 5000 (city area), 20000 (metro area). | |
| fuelSet | No | Fuel types: 'Petrol', 'Diesel', 'LPG', 'Hydrogen', 'E85' | |
| topLeft | No | Top-left coordinates of bounding box (format: 'lat,lon'). Must be used with btmRight | |
| brandSet | No | Filter by brand names. Examples: 'Starbucks,Peet\'s', 'Marriott,Hilton'. Use quotes for brands with commas. | |
| btmRight | No | Bottom-right coordinates of bounding box (format: 'lat,lon'). Must be used with topLeft | |
| language | No | Preferred language for results using IETF language tags. Examples: 'en-US', 'fr-FR', 'de-DE', 'es-ES' | |
| mapcodes | No | 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). | |
| timeZone | No | 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 | |
| typeahead | No | Enable autocomplete mode for partial queries. Use for search-as-you-type interfaces. | |
| countrySet | No | Limit results to specific countries using ISO codes. Examples: 'US', 'FR,GB', 'CA,US' | |
| geometries | No | Include geometries information in the response | |
| maxPowerKW | No | Maximum charging power in kW for EV stations | |
| minPowerKW | No | Minimum charging power in kW for EV stations | |
| categorySet | No | Filter POI per category using category IDs. Examples: '7315' (Restaurant), '9361' (Shop), '7311' (Gas Station), '7321' (Hospital), '7397' (ATM), '7327' (Department Store), '7314' (Hotel/Motel), '9361009' (Convenience Store), '7324' (Post Office), '7383' (Airport), '7380' (Railroad Station), '9942' (Public Transportation Stop), '7313' (Parking Garage), '7369' (Open Parking Area), '7342' (Movie Theater), '9362' (Park & Recreation Area), '7310' (Repair Shop), '9376' (Café/Pub), '9379' (Nightlife), '7318' (Theater), '7317' (Museum), '7312' (Rent-a-Car Facility), '7372' (School), '7322' (Police Station), '7326' (Pharmacy), '9352' (Company), '7376' (Tourist Attraction), '7332005' (Supermarkets & Hypermarkets), '7315015' (Fast Food) | |
| relatedPois | No | Include related points of interest | |
| connectorSet | No | EV connector types: 'IEC62196Type2CableAttached', 'Chademo', 'TeslaConnector' | |
| openingHours | No | List 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 | |
| addressRanges | No | Include address ranges in the response | |
| entityTypeSet | No | 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 | |
| maxFuzzyLevel | No | Maximum fuzzy matching level (1-4) | |
| minFuzzyLevel | No | Minimum fuzzy matching level (1-4) | |
| vehicleTypeSet | No | 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 | |
| response_detail | No | Response detail level. 'compact' (default): trimmed response with essential fields only, saves tokens. 'full': complete API response with all fields including coordinates, classifications, etc. | compact |
| extendedPostalCodesFor | No | Include extended postal codes for specific index types. Examples: 'PAD', 'PAD,Addr', 'POI' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no additional behavioral context such as result format, pagination, or error behavior. It simply restates the purpose without enhancing transparency beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that front-loads the core purpose. It contains no fluff or redundant information, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 32 parameters and no output schema, the one-line description is minimal but sufficient to convey the basic purpose. It doesn't explain return values, but the extensive schema and annotations cover parameters and safety. It could be more complete by noting the output type, but it's adequate for basic understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with every parameter having a detailed description including examples and constraints. The tool description itself contributes no parameter-specific meaning, but the baseline for high schema coverage is 3, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('search') with resource types (addresses, POIs, geographies) and highlights the typo-tolerant aspect, which differentiates it from siblings like geocode and poi-search. However, it doesn't explicitly name alternative tools, so it's not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention that this should be used for free-form, typo-prone queries or that other tools might be more appropriate for exact matches. The schema offers examples, but the description itself lacks usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tomtom-geocodeTomTom GeocodeARead-onlyIdempotent
Convert street addresses to coordinates (does not support points of interest)
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Center latitude for location bias | |
| lon | No | Center longitude for location bias | |
| view | No | Geopolitical view for disputed territories. Options: 'Unified', 'AR', 'IL', 'IN', 'MA', 'PK', 'RU', 'TR', 'CN' | |
| limit | No | Maximum number of results to return (1-100). Default: 5 | |
| query | Yes | Full 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' | |
| radius | No | Search radius in meters when lat/lon provided | |
| topLeft | No | Top-left coordinates of bounding box (format: 'lat,lon'). Must be used with btmRight | |
| btmRight | No | Bottom-right coordinates of bounding box (format: 'lat,lon'). Must be used with topLeft | |
| language | No | Preferred language for results using IETF language tags. Examples: 'en-US', 'fr-FR', 'de-DE', 'es-ES' | |
| mapcodes | No | 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). | |
| timeZone | No | 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 | |
| countrySet | No | Limit results to specific countries using ISO codes. Examples: 'US', 'FR,GB', 'CA,US' | |
| geometries | No | Include geometries information in the response | |
| addressRanges | No | Include address ranges in the response | |
| entityTypeSet | No | 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 | |
| response_detail | No | Response detail level. 'compact' (default): trimmed response with essential fields only, saves tokens. 'full': complete API response with all fields including coordinates, classifications, etc. | compact |
| extendedPostalCodesFor | No | Include extended postal codes for specific index types. Examples: 'PAD', 'PAD,Addr', 'POI' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds one useful behavioral constraint—no POI support—but says nothing about result ambiguity, coordinate format, or response behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence that front-loads the core purpose and includes a meaningful limitation. Every word earns its place, and there is no redundant restating of the tool name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich 100%-covered schema and clear annotations, the description is mostly complete for safe invocation. The main gap is the lack of explicit routing to sibling tools for POI or fuzzy cases, but the core operation and constraints are sufficiently clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 17 parameters with examples and constraints. The tool description adds no parameter-level meaning beyond what the schema provides, matching the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Convert street addresses to coordinates'. It also adds a distinguishing scope constraint, 'does not support points of interest', which separates it from POI-oriented sibling tools like tomtom-poi-search and tomtom-fuzzy-search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for address-to-coordinate conversion and explicitly excludes POI lookups. However, it does not name alternatives or give explicit guidance on when to choose this over tomtom-reverse-geocode or tomtom-fuzzy-search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tomtom-get-api-keyGet TomTom API KeyARead-onlyIdempotent
Internal tool for apps to retrieve the TomTom API key
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description's 'retrieve' is consistent with those. It adds the 'internal' access context but does not disclose operational details such as authentication requirements or secret-handling expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence names the caller, action, and resource with no filler, repetition, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only, idempotent internal lookup, the description covers the essential context. It is slightly incomplete because there is no output schema and no mention of failure behavior if the key is missing or how the key should be handled in responses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema description coverage, so there is no parameter burden for the description to carry. The baseline 4 applies because no parameter ambiguity exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('retrieve'), a specific resource ('TomTom API key'), and an intended caller ('apps'). It is clearly distinguishable from sibling tools like tomtom-get-app-config and tomtom-get-viz-data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Internal tool for apps' provides clear context that this is a back-end credential lookup for applications rather than a general-purpose utility. It does not explicitly name alternatives, but no sibling tool appears to serve this same key-retrieval role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tomtom-get-app-configGet TomTom App ConfigARead-onlyIdempotent
Internal tool for apps to retrieve client configuration such as the attribution user-agent
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, lowering the burden. The description adds useful context by labeling the tool 'internal' and giving an example of returned content, going slightly beyond the structured annotations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the action and resource and includes a concrete example. No filler, redundancy, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description must carry the burden of indicating what the tool returns. The example ('attribution user-agent') hints at the output payload, and while the full set of config fields isn't enumerated, it is adequate for a simple no-arg config getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and schema coverage is 100%, so there are no parameter semantics to document. The description correctly focuses on purpose rather than parameters, meeting the baseline for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb ('retrieve') and resource ('client configuration') with a concrete example ('attribution user-agent'). It is clearly distinct from geocoding/routing/map siblings, but it does not explicitly differentiate from other internal config tools like get-api-key or get-viz-data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for apps needing client configuration, but provides no explicit when/when-not guidance or alternatives. The 'Internal tool for apps' context is present, yet no exclusions or sibling comparisons are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tomtom-get-viz-dataGet Visualization DataARead-onlyIdempotent
Internal tool for apps to retrieve cached visualization data by viz_id
| Name | Required | Description | Default |
|---|---|---|---|
| viz_id | Yes | Unique visualization ID from the tool response _meta |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, establishing a safe read operation. The description adds the behavioral nuance that the data is 'cached', which indicates the tool does not perform fresh computations and may return stale data. This is valuable context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that wastes no words. It conveys the tool's purpose, audience, and required input in under 15 words. Perfectly sized for a simple tool with one parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one required parameter, no output schema, no nested objects) and the description, combined with annotations and schema, covers the essentials. The only omission is an explicit description of the return format, but given it is a retrieval tool, the agent can reasonably infer the response contains the visualization data. This is acceptable for an internal tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a clear description for the sole parameter (viz_id: 'Unique visualization ID from the tool response _meta'), giving 100% coverage. The tool description adds no additional parameter-specific information, so it neither enhances nor detracts from the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (retrieve), the resource (cached visualization data), and the key identifier (viz_id). It explicitly marks the tool as internal, and none of the sibling tools overlap in function (geocoding, routing, etc.), so it is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that this tool is for internal apps and for retrieving cached visualization data. While it doesn't explicitly state when not to use it, the absence of any sibling with similar functionality makes the usage scope self-evident. It also implies it should be used only when a viz_id is available from a prior tool response.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tomtom-nearbyTomTom Nearby SearchCRead-onlyIdempotent
Discover services within a radius
| Name | Required | Description | Default |
|---|---|---|---|
| ext | No | Extended parameters for the search | |
| lat | Yes | Center latitude for nearby search. Use precise coordinates from geocoding. | |
| lon | Yes | Center longitude for nearby search. Use precise coordinates from geocoding. | |
| ofs | No | Offset for pagination of results | |
| view | No | Geopolitical view for disputed territories. Options: 'Unified', 'AR', 'IL', 'IN', 'MA', 'PK', 'RU', 'TR', 'CN' | |
| limit | No | Maximum number of results to return (1-100). Default: 5 | |
| radius | No | Search radius in meters. Default: 1000. Recommended: 500 (walking), 1000 (local), 5000 (driving), 20000 (wide area). | |
| fuelSet | No | Fuel types: 'Petrol', 'Diesel', 'LPG', 'Hydrogen', 'E85' | |
| roadUse | No | Include road usage information | |
| brandSet | No | Filter by brand names. Examples: 'Starbucks,Peet\'s', 'Marriott,Hilton'. Use quotes for brands with commas. | |
| language | No | Preferred language for results using IETF language tags. Examples: 'en-US', 'fr-FR', 'de-DE', 'es-ES' | |
| mapcodes | No | 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). | |
| timeZone | No | 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 | |
| countrySet | No | Limit results to specific countries using ISO codes. Examples: 'US', 'FR,GB', 'CA,US' | |
| geometries | No | Include geometries information in the response | |
| maxPowerKW | No | Maximum charging power in kW for EV stations | |
| minPowerKW | No | Minimum charging power in kW for EV stations | |
| categorySet | No | Filter POI per category using category IDs. Examples: '7315' (Restaurant), '9361' (Shop), '7311' (Gas Station), '7321' (Hospital), '7397' (ATM), '7327' (Department Store), '7314' (Hotel/Motel), '9361009' (Convenience Store), '7324' (Post Office), '7383' (Airport), '7380' (Railroad Station), '9942' (Public Transportation Stop), '7313' (Parking Garage), '7369' (Open Parking Area), '7342' (Movie Theater), '9362' (Park & Recreation Area), '7310' (Repair Shop), '9376' (Café/Pub), '9379' (Nightlife), '7318' (Theater), '7317' (Museum), '7312' (Rent-a-Car Facility), '7372' (School), '7322' (Police Station), '7326' (Pharmacy), '9352' (Company), '7376' (Tourist Attraction), '7332005' (Supermarkets & Hypermarkets), '7315015' (Fast Food) | |
| relatedPois | No | Include related points of interest | |
| connectorSet | No | EV connector types: 'IEC62196Type2CableAttached', 'Chademo', 'TeslaConnector' | |
| openingHours | No | List 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 | |
| addressRanges | No | Include address ranges in the response | |
| entityTypeSet | No | 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 | |
| maxFuzzyLevel | No | Maximum fuzzy matching level (1-4) | |
| minFuzzyLevel | No | Minimum fuzzy matching level (1-4) | |
| vehicleTypeSet | No | 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 | |
| response_detail | No | Response detail level. 'compact' (default): trimmed response with essential fields only, saves tokens. 'full': complete API response with all fields including coordinates, classifications, etc. | compact |
| fuelAvailability | No | Include fuel availability information for gas stations | |
| parkingAvailability | No | Include parking availability information | |
| chargingAvailability | No | Include charging availability information for EV stations | |
| extendedPostalCodesFor | No | Include extended postal codes for specific index types. Examples: 'PAD', 'PAD,Addr', 'POI' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. However, the description adds no behavioral context beyond what annotations and schema provide, such as default radius, response format, or typical usage patterns. It offers no additional disclosure about behavior like pagination, filtering, or data scope, so it adds little value given the existing structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—a single sentence—but it is under-specified rather than optimally concise. It does not front-load key information like the fact that it requires lat/lon, uses a radius, or returns POIs. For a tool with 31 parameters, a one-line generic tagline is not adequate structure; it fails to guide the agent toward understanding the tool's purpose without diving deep into the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (31 parameters, 2 required) and the rich schema, the description is far from complete. It does not explain the core use case (finding POIs near a coordinate), how it relates to sibling search tools, or any typical scenarios. The schema is thorough but the description adds no overview or relational context, leaving an agent to puzzle out the tool's role without a high-level map.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the 31 parameters are all individually documented. The tool description does not supplement parameter understanding at all, but since the baseline for high schema coverage is 3, this score is appropriate. The description's single sentence does not clarify any parameter relationships or defaults, but that is not its responsibility given the schema richness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Discover services within a radius' conveys a nearby search concept, but it is too generic and does not specify that it operates on a center coordinate and radius, nor does it differentiate from sibling tools like tomtom-poi-search or tomtom-fuzzy-search. The verb 'discover' and resource 'services' are present, but the lack of specificity about the exact resource type (e.g., POIs, charging stations) and the lack of comparison to alternatives make it only minimally clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that it is appropriate when coordinates are known and the user wants nearby results, nor does it explicitly contrast with tomtom-geocode, tomtom-poi-search, or tomtom-fuzzy-search. An agent would have to infer usage solely from the schema, which lacks contextual routing advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tomtom-poi-searchTomTom POI SearchCRead-onlyIdempotent
Find specific business categories
| Name | Required | Description | Default |
|---|---|---|---|
| ext | No | Extended parameters for the search | |
| lat | No | Latitude for location context. STRONGLY recommended for relevant local results. | |
| lon | No | Longitude for location context. Must be used with lat parameter. | |
| ofs | No | Offset for pagination of results | |
| view | No | Geopolitical view for disputed territories. Options: 'Unified', 'AR', 'IL', 'IN', 'MA', 'PK', 'RU', 'TR', 'CN' | |
| limit | No | Maximum number of results to return (1-100). Default: 5 | |
| query | Yes | 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. | |
| radius | No | Search radius in meters. Essential for focused local results. Examples: 1000 (walking), 5000 (driving), 20000 (wide area). | |
| fuelSet | No | Fuel types: 'Petrol', 'Diesel', 'LPG', 'Hydrogen', 'E85' | |
| topLeft | No | Top-left coordinates of bounding box (format: 'lat,lon'). Must be used with btmRight | |
| brandSet | No | Filter by brand names. Examples: 'Starbucks,Peet\'s', 'Marriott,Hilton'. Use quotes for brands with commas. | |
| btmRight | No | Bottom-right coordinates of bounding box (format: 'lat,lon'). Must be used with topLeft | |
| language | No | Preferred language for results using IETF language tags. Examples: 'en-US', 'fr-FR', 'de-DE', 'es-ES' | |
| mapcodes | No | 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). | |
| timeZone | No | 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 | |
| typeahead | No | Autocomplete mode for partial queries. Use for search interfaces. | |
| countrySet | No | Limit results to specific countries using ISO codes. Examples: 'US', 'FR,GB', 'CA,US' | |
| geometries | No | Include geometries information in the response | |
| maxPowerKW | No | Maximum charging power in kW for EV stations | |
| minPowerKW | No | Minimum charging power in kW for EV stations | |
| categorySet | No | Filter POI per category using category IDs. Examples: '7315' (Restaurant), '9361' (Shop), '7311' (Gas Station), '7321' (Hospital), '7397' (ATM), '7327' (Department Store), '7314' (Hotel/Motel), '9361009' (Convenience Store), '7324' (Post Office), '7383' (Airport), '7380' (Railroad Station), '9942' (Public Transportation Stop), '7313' (Parking Garage), '7369' (Open Parking Area), '7342' (Movie Theater), '9362' (Park & Recreation Area), '7310' (Repair Shop), '9376' (Café/Pub), '9379' (Nightlife), '7318' (Theater), '7317' (Museum), '7312' (Rent-a-Car Facility), '7372' (School), '7322' (Police Station), '7326' (Pharmacy), '9352' (Company), '7376' (Tourist Attraction), '7332005' (Supermarkets & Hypermarkets), '7315015' (Fast Food) | |
| relatedPois | No | Include related points of interest | |
| connectorSet | No | EV connector types: 'IEC62196Type2CableAttached', 'Chademo', 'TeslaConnector' | |
| openingHours | No | List 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 | |
| addressRanges | No | Include address ranges in the response | |
| entityTypeSet | No | 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 | |
| maxFuzzyLevel | No | Maximum fuzzy matching level (1-4) | |
| minFuzzyLevel | No | Minimum fuzzy matching level (1-4) | |
| vehicleTypeSet | No | 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 | |
| response_detail | No | Response detail level. 'compact' (default): trimmed response with essential fields only, saves tokens. 'full': complete API response with all fields including coordinates, classifications, etc. | compact |
| fuelAvailability | No | Include fuel availability information for gas stations | |
| parkingAvailability | No | Include parking availability information | |
| chargingAvailability | No | Include charging availability information for EV stations | |
| extendedPostalCodesFor | No | Include extended postal codes for specific index types. Examples: 'PAD', 'PAD,Addr', 'POI' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, openWorldHint, idempotentHint, destructiveHint) already disclose the safety profile. The description adds no extra context about response format, pagination, rate limits, or the nature of the search. It is not contradictory, but it contributes nothing beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single vague sentence. While concise, it is under-specified and does not earn its place because it conveys almost no actionable information. It is not structured to front-load critical details, as it lacks any.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 34 parameters, many optional, and no output schema, this description is grossly inadequate. It fails to explain what the tool searches, what inputs are essential (e.g., query or location), or how it differs from similar tools. An agent would struggle to call this tool correctly based on the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with rich parameter descriptions. The description itself adds no parameter-level insight, but the baseline of 3 applies when the schema carries the full burden. No improvement or degradation is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Find specific business categories' is vague and does not specify the resource (POIs) or the scope of the search. It fails to differentiate from siblings like tomtom-fuzzy-search or tomtom-nearby, which also search for places. It is not a tautology but lacks the specificity needed to understand what the tool actually does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as fuzzy search or nearby. It does not mention prerequisites, typical use cases, or exclusions. An agent must infer usage from the name and parameter schema alone, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tomtom-reachable-rangeTomTom Reachable RangeBRead-onlyIdempotent
Determine the area reachable within a specified time or driving distance
| Name | Required | Description | Default |
|---|---|---|---|
| avoid | No | Route features to avoid. May increase travel time. Options: 'tollRoads','motorways','ferries','unpavedRoads','carpools','alreadyUsedRoads'. Accepts array of string(s). | |
| origin | Yes | Starting point for reachable area calculation. Typically current location or point of interest. | |
| report | No | 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 | |
| traffic | No | Include real-time traffic data for more accurate reachable area calculation. | |
| departAt | No | Departure time in ISO format (e.g., '2025-06-24T14:30:00Z'). | |
| hilliness | No | Preference for avoiding hills. Use 'low' for flatter routes. This can be only used when `routeType` parameter is set to `thrilling`. | |
| routeType | No | Route optimization: 'fastest' (time-optimized), 'shortest' (distance-optimized), 'eco' (fuel-efficient). | |
| travelMode | No | Travel mode affects reachable area shape. Default: 'car'. Note: Pedestrian/bicycle modes not supported by API. | |
| windingness | No | Preference for avoiding winding roads. Use 'low' for straighter routes. This can be only used when `routeType` parameter is set to `thrilling`. | |
| vehicleWidth | No | Vehicle width in meters. Used to avoid narrow roads. | |
| vehicleHeight | No | Vehicle height in meters. Used to avoid low bridges. | |
| vehicleLength | No | Vehicle length in meters. Affects maneuverability restrictions. | |
| vehicleWeight | No | Vehicle weight in kg. Important for truck routing restrictions. | |
| maxChargeInkWh | No | Maximum EV battery capacity in kWh. Required for EV routing. | |
| response_detail | No | Response detail level. 'compact' (default): returns center point only, boundary coordinates are trimmed — the MCP App still renders the full reachable range polygon. 'full': includes boundary coordinates in the response, use this when you need to plot or process the boundary data yourself. | compact |
| timeBudgetInSec | No | Maximum travel time in seconds. Examples: 900 (15min), 1800 (30min), 3600 (1h). Use ONLY ONE budget parameter — do not combine with other budget types. | |
| vehicleLoadType | No | Cargo type for hazardous materials routing. | |
| vehicleMaxSpeed | No | Maximum vehicle speed in km/h for commercial routing. | |
| uphillEfficiency | No | Efficiency during uphill driving (0-1). | |
| energyBudgetInkWh | No | Maximum energy budget in kWh for electric vehicles. Example: 10 (10 kWh). REQUIRED companions: vehicleEngineType='electric', constantSpeedConsumptionInkWhPerHundredkm, currentChargeInkWh, maxChargeInkWh. Use ONLY ONE budget parameter — do not combine with other budget types. | |
| vehicleAxleWeight | No | Vehicle axle weight in kg for weight-restricted roads. | |
| vehicleCommercial | No | Commercial vehicle flag. Affects road access restrictions. | |
| vehicleEngineType | No | Engine type for fuel/energy consumption calculation. | |
| auxiliaryPowerInkW | No | Auxiliary power consumption in kW for electric vehicles. | |
| chargeMarginsInkWh | No | Comma-separated charge margins in kWh for route planning. | |
| currentChargeInkWh | No | Current EV battery charge in kWh. Required for EV routing. | |
| downhillEfficiency | No | Efficiency during downhill driving (0-1). | |
| fuelBudgetInLiters | No | Maximum fuel budget in liters for combustion vehicles. Example: 5 (5 liters). REQUIRED companions: vehicleEngineType='combustion' and constantSpeedConsumptionInLitersPerHundredkm (e.g. '50,6.5:130,11.5'). Use ONLY ONE budget parameter — do not combine with other budget types. | |
| currentFuelInLiters | No | Current fuel level in liters for combustion vehicles. | |
| vehicleNumberOfAxles | No | Number of axles on the vehicle. Used for toll calculations and restrictions. | |
| accelerationEfficiency | No | Efficiency during acceleration (0-1). | |
| decelerationEfficiency | No | Efficiency during deceleration (0-1). | |
| distanceBudgetInMeters | No | Maximum travel distance in meters. Examples: 5000 (5km), 10000 (10km), 20000 (20km). Use ONLY ONE budget parameter — do not combine with other budget types. | |
| maxFerryLengthInMeters | No | Maximum allowed ferry length in meters. | |
| auxiliaryPowerInLitersPerHour | No | Auxiliary power consumption for combustion vehicles in L/hr. | |
| vehicleAdrTunnelRestrictionCode | No | ADR tunnel restriction code for hazardous materials. | |
| consumptionInkWhPerkmAltitudeGain | No | Energy used per km of altitude gain. | |
| fuelEnergyDensityInMJoulesPerLiter | No | Fuel energy density in megajoules per liter. | |
| recuperationInkWhPerkmAltitudeLoss | No | Energy recovered per km of altitude loss. | |
| constantSpeedConsumptionInkWhPerHundredkm | No | EV speed-to-consumption mappings format: '50,8.2:130,21.3' (speed in km/h, consumption in kWh/100km). | |
| constantSpeedConsumptionInLitersPerHundredkm | No | Combustion speed-to-consumption mappings: '50,6.3:130,11.5' (speed in km/h, consumption in L/100km). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are rich (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the bar is lower. The description 'determine the area reachable' is consistent with a read-only operation and doesn't contradict the annotations. However, it adds essentially no behavioral context beyond what the annotations already declare — no mention of response format, boundaries, or calculation characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words — efficient and to the point. It's appropriately terse for a tool whose schema carries all the parameter documentation, though it could arguably add one clause about scope without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (41 parameters, no output schema), the one-sentence description is minimal. The schema compensates well by documenting every parameter including budget exclusivity and required companions. However, the description doesn't mention that origin is required or that exactly one budget parameter must be supplied — important usage constraints an agent would benefit from knowing up front.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself documents all 41 parameters thoroughly, including critical constraints like 'Use ONLY ONE budget parameter — do not combine with other budget types' and 'REQUIRED companions' for energy/fuel budgets. With full schema coverage, baseline 3 applies and the description correctly adds no redundant param info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Determine the area reachable within a specified time or driving distance' states a specific verb (determine) and resource (area reachable), clearly conveying the isochrone/reachability concept. However, it doesn't differentiate itself from routing siblings like tomtom-routing or tomtom-waypoint-routing, which could also involve travel time/distance — so it's clear but not distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It never mentions that this is for area-based reachability (isochrones) rather than point-to-point routing, nor names any sibling as an alternative. The 'specified time or driving distance' phrasing could even confuse an agent into choosing this over tomtom-routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tomtom-reverse-geocodeTomTom Reverse GeocodeARead-onlyIdempotent
Convert coordinates to addresses
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Latitude coordinate (-90 to +90). Precision to 4+ decimal places recommended. | |
| lon | Yes | Longitude coordinate (-180 to +180). Precision to 4+ decimal places recommended. | |
| ofs | No | Offset for pagination of results | |
| view | No | Geopolitical view for disputed territories. Options: 'Unified', 'AR', 'IL', 'IN', 'MA', 'PK', 'RU', 'TR', 'CN' | |
| limit | No | Maximum number of results to return (1-100). Default: 5 | |
| radius | No | Search radius in meters. Default: 100 | |
| heading | No | Heading direction in degrees (0-360) for improved accuracy on roads | |
| roadUse | No | Types of road use to include in the results. Examples: 'Arterial', 'Ferry', 'Highway', etc. | |
| language | No | Preferred language for results using IETF language tags. Examples: 'en-US', 'fr-FR', 'de-DE', 'es-ES' | |
| mapcodes | No | 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). | |
| timeZone | No | 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 | |
| countrySet | No | Limit results to specific countries using ISO codes. Examples: 'US', 'FR,GB', 'CA,US' | |
| geometries | No | Include geometries information in the response | |
| maxResults | No | Maximum results to return (alias for limit) | |
| addressRanges | No | Include address ranges in the response | |
| entityTypeSet | No | 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 | |
| returnCommune | No | Include commune information in the results | |
| returnRoadUse | No | Include road use types for street level results | |
| response_detail | No | Response detail level. 'compact' (default): trimmed response with essential fields only, saves tokens. 'full': complete API response with all fields including coordinates, classifications, etc. | compact |
| returnMatchType | No | Include information about the type of geocoding match achieved | |
| returnSpeedLimit | No | Include posted speed limit for street results | |
| returnAddressNames | No | Include address names in the response | |
| allowFreeformNewLine | No | Allow newlines in freeform addresses | |
| extendedPostalCodesFor | No | Include extended postal codes for specific index types. Examples: 'PAD', 'PAD,Addr', 'POI' | |
| returnRoadAccessibility | No | Include road accessibility information |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds no extra behavioral context, but it also does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded with the main action. There is no redundant wording, though for a tool with 25 parameters a bit more orienting context could still be useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core input (coordinates) and output (addresses) are established, which supports a basic successful invocation. However, with no output schema and 25 optional parameters, the description lacks guidance on defaults, result shape, and optional response controls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 25 parameters, so the schema already provides detailed parameter semantics. The description adds no parameter-specific meaning beyond the generic phrase 'coordinates'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific transformation—'Convert coordinates to addresses'—so the tool's purpose is unambiguous. The direction (coordinates → addresses) clearly distinguishes it from sibling tomtom-geocode and other search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: use this when you have latitude/longitude and want an address. However, the description does not explicitly state when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tomtom-routingTomTom RoutingARead-onlyIdempotent
Calculate optimal routes between two locations. The primary tool for directions, routes, travel time, or distance between places (e.g. 'route from Amsterdam to Berlin', 'how long to drive from A to B'). Returns turn-by-turn directions, distance, travel time, and a map image. Multi-stop routes with 3+ waypoints are handled by tomtom-waypoint-routing; visualizing multiple routes or combining routes with markers/polygons on a single map image is handled by tomtom-dynamic-map.
| Name | Required | Description | Default |
|---|---|---|---|
| avoid | No | Route features to avoid. May increase travel time. Options: 'tollRoads','motorways','ferries','unpavedRoads','carpools','alreadyUsedRoads'. Accepts array of string(s). | |
| origin | Yes | Starting point coordinates. Obtain from geocoding for best results. | |
| report | No | 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 | |
| traffic | No | Include real-time traffic data for more accurate ETAs and route suggestions. | |
| arriveAt | No | Arrival time in ISO format (e.g., '2025-06-24T17:00:00Z'). Cannot be used with departAt. | |
| departAt | No | Departure time in ISO format (e.g., '2025-06-24T14:30:00Z'). Cannot be used with arriveAt. | |
| language | No | Language code for instructions (e.g., 'en-US', 'de-DE'). | |
| hilliness | No | Preference for avoiding hills. Use 'low' for flatter routes. | |
| routeType | No | Route optimization: 'fastest' (time-optimized), 'shortest' (distance-optimized), 'eco' (fuel-efficient), 'thrilling' (scenic). | |
| travelMode | No | Transportation mode. Default: 'car'. | |
| destination | Yes | Destination coordinates. Obtain from geocoding for best results. | |
| sectionType | No | 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. | |
| windingness | No | Preference for avoiding winding roads. Use 'low' for straighter routes. | |
| vehicleWidth | No | Vehicle width in meters. Used to avoid narrow roads. | |
| vehicleHeight | No | Vehicle height in meters. Used to avoid low bridges. | |
| vehicleLength | No | Vehicle length in meters. Affects maneuverability restrictions. | |
| vehicleWeight | No | Vehicle weight in kg. Important for truck routing restrictions. | |
| maxChargeInkWh | No | Maximum EV battery capacity in kWh. Required for EV routing. | |
| vehicleHeading | No | Heading of the vehicle in degrees (0-359) for more accurate initial routing. | |
| alternativeType | No | 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` | |
| maxAlternatives | No | Number of alternative routes (0-5). More alternatives = more options but larger response. | |
| response_detail | No | Response detail level. 'compact' (default): trimmed response with essential fields only, saves tokens. 'full': complete API response with all fields including coordinates, classifications, etc. | compact |
| vehicleLoadType | No | Cargo type for hazardous materials routing. | |
| vehicleMaxSpeed | No | Maximum vehicle speed in km/h for commercial routing. | |
| computeBestOrder | No | Reorder waypoints for optimization. Use with multiple waypoints to find the most efficient route order. | |
| instructionsType | No | Instruction format: 'text' (human-readable), 'coded' (machine-readable), 'tagged' (HTML). | |
| supportingPoints | No | Additional coordinates that influence the route shape without being stops (format: 'lat,lon;lat,lon'). | |
| uphillEfficiency | No | Efficiency during uphill driving (0-1). | |
| vehicleAxleWeight | No | Vehicle axle weight in kg for weight-restricted roads. | |
| vehicleCommercial | No | Commercial vehicle flag. Affects road access restrictions. | |
| vehicleEngineType | No | Engine type for fuel/energy consumption calculation. | |
| auxiliaryPowerInkW | No | Auxiliary power consumption in kW for electric vehicles. | |
| chargeMarginsInkWh | No | Comma-separated charge margins in kWh for route planning. | |
| currentChargeInkWh | No | Current EV battery charge in kWh. Required for EV routing. | |
| downhillEfficiency | No | Efficiency during downhill driving (0-1). | |
| currentFuelInLiters | No | Current fuel level in liters for combustion vehicles. | |
| routeRepresentation | No | 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 | |
| computeTravelTimeFor | No | Calculate travel times for all segments ('all') or none ('none'). | |
| vehicleNumberOfAxles | No | Number of axles on the vehicle. Used for toll calculations and restrictions. | |
| accelerationEfficiency | No | Efficiency during acceleration (0-1). | |
| decelerationEfficiency | No | Efficiency during deceleration (0-1). | |
| includeTollPaymentTypes | No | 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 | |
| extendedRouteRepresentation | No | Additional routing data formats to include in the response. | |
| auxiliaryPowerInLitersPerHour | No | Auxiliary power consumption for combustion vehicles in L/hr. | |
| vehicleAdrTunnelRestrictionCode | No | ADR tunnel restriction code for hazardous materials. | |
| consumptionInkWhPerkmAltitudeGain | No | Energy used per km of altitude gain. | |
| fuelEnergyDensityInMJoulesPerLiter | No | Fuel energy density in megajoules per liter. | |
| recuperationInkWhPerkmAltitudeLoss | No | Energy recovered per km of altitude loss. | |
| constantSpeedConsumptionInkWhPerHundredkm | No | EV speed-to-consumption mappings format: '50,8.2:130,21.3' (speed in km/h, consumption in kWh/100km). | |
| constantSpeedConsumptionInLitersPerHundredkm | No | Combustion speed-to-consumption mappings: '50,6.3:130,11.5' (speed in km/h, consumption in L/100km). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral detail beyond annotations: it returns turn-by-turn directions, distance, travel time, and a map image, which matters because there is no output schema. This is meaningful but not exhaustive given the tool's large parameter space.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, starting with the core purpose, then use cases and return values, and ending with sibling routing. Every sentence earns its place, and the examples make intent concrete. It is not maximally lean due to some redundancy between 'primary tool for directions/routes' and 'calculate optimal routes,' but it is efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a highly complex 50-parameter tool with no output schema, the description covers the essential selection criteria: what the tool does, what it returns, and when to route to siblings. It does not explicitly instruct the agent to geocode place names into lat/lon coordinates first, though the schema does say this. Overall the description is complete enough for an agent to invoke it correctly for basic and moderate routing requests.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the schema documents all 50 parameters in detail. The description adds little parameter-level meaning, only examples like 'route from Amsterdam to Berlin' that imply place-name inputs even though origin and destination are coordinate objects. It neither contradicts the schema nor substantially enriches it beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Calculate optimal routes between two locations,' and frames it as 'the primary tool for directions, routes, travel time, or distance between places.' It clearly distinguishes itself from tomtom-waypoint-routing and tomtom-dynamic-map, so an agent can separate it from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names alternative tools and the conditions for using them: 'Multi-stop routes with 3+ waypoints are handled by tomtom-waypoint-routing' and 'visualizing multiple routes or combining routes with markers/polygons on a single map image is handled by tomtom-dynamic-map.' This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tomtom-static-mapTomTom Static MapBRead-onlyIdempotent
Generate custom map images from TomTom Maps with specified center coordinates, zoom levels, and style options
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | Bounding box in format [west, south, east, north]. Alternative to center+zoom. Example: [-122.42, 37.77, -122.40, 37.79] for part of San Francisco. | |
| view | No | Geopolitical view for border disputes and territories. 'Unified' is the international standard view. | |
| zoom | No | Zoom level (0-22). Examples: 3 (continent), 6 (country), 10 (city), 15 (neighborhood), 18 (street). Default: 15. | |
| layer | No | Map layer type: 'basic' (streets), 'labels' (text only, transparent background), 'hybrid' (satellite with labels). | |
| style | No | Map style: 'main' (default daytime), 'night' (dark theme). | |
| width | No | Map width in pixels (50-2048). Examples: 300-500 (preview), 800-1200 (detailed). Default: 512. | |
| center | Yes | Map center coordinates. Use results from geocoding or search operations for best positioning. | |
| format | No | Image format: 'png' (better quality, supports transparency), 'jpg' (smaller file size). | |
| height | No | Map height in pixels (50-2048). Examples: 300-500 (preview), 800-1200 (detailed). Default: 512. | |
| language | No | Language for map labels (IETF language tag). Examples: 'en-US', 'es-ES', 'fr-FR'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds that it generates images but doesn't disclose details like rate limits, image size limits beyond schema, or behavior when both bbox and center are provided. It doesn't contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the core purpose. It's efficient and doesn't waste words, though it could benefit from a brief usage note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 10 parameters and no output schema, the description is adequate but not complete. The schema covers parameters well, but the description doesn't explain return values (image format details), potential conflicts between bbox and center, or when to prefer this over tomtom-dynamic-map. The annotations cover safety, but behavioral context is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 parameters thoroughly. The description adds a general overview but doesn't provide additional meaning beyond what the schema already covers. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: generating custom map images from TomTom Maps with center coordinates, zoom levels, and style options. It distinguishes it from sibling tools like geocoding or routing, though it doesn't explicitly differentiate from the closely related tomtom-dynamic-map sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for generating static map images but provides no explicit guidance on when to choose this tool over tomtom-dynamic-map or other alternatives. The parameter descriptions offer some context (e.g., using geocoding results for center), but there's no direct when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tomtom-trafficTomTom TrafficARead-onlyIdempotent
Find and display traffic incidents in an area. The primary tool for questions about traffic, accidents, road closures, congestion, or dangerous road conditions. Returns detailed incident data including severity, description, delay, and affected roads. Provides complete traffic incident data on its own; plotting incidents as markers with tomtom-dynamic-map is not needed.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | Bounding box for traffic area: 'minLon,minLat,maxLon,maxLat'. Example: '-74.02,40.70,-73.96,40.80' for lower Manhattan. Use smaller areas for better results. | |
| language | No | Language for incident descriptions: 'en-GB', 'de-DE', 'fr-FR', 'es-ES'. Default: 'en-GB'. | |
| maxResults | No | Maximum incidents to return (1-1000). Default: 100. Use 10-20 for readability in high-traffic areas. When more incidents match, the most severe are returned and the response includes an incidentSummary with full totals. | |
| categoryFilter | No | Filter by incident categories (comma-separated): '0' (Accident), '1' (Fog), '2' (Dangerous Conditions), '3' (Rain), '4' (Ice), '5' (Lane Restrictions), '6' (Lane Closure), '7' (Road Closure), '8' (Road Works), '9' (Wind), '10' (Flooding), '11' (Detour), '14' (Cluster). | |
| response_detail | No | Response detail level. 'compact' (default): trimmed response with essential fields only, saves tokens. 'full': complete API response with all fields including coordinates, classifications, etc. | compact |
| timeValidityFilter | No | Time validity filter: 'present' (current), 'future' (upcoming). Default: 'present'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds valuable behavioral context beyond that: it specifies the return content ('severity, description, delay, and affected roads') and asserts self-sufficiency ('Provides complete traffic incident data on its own'), which informs the agent about output expectations without contradicting any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each earning its place: purpose, usage context, return data, and an explicit exclusion. It is front-loaded with the primary function and avoids redundancy, making it efficient and scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming key return fields (severity, description, delay, affected roads). It also clarifies that the tool returns complete data on its own, eliminating the need for a mapping tool. All six parameters are fully documented in the schema, and annotations cover safety, so nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed per-parameter explanations (e.g., bbox example, maxResults bounds and default, categoryFilter enumeration). The description itself adds no parameter-specific meaning, but since the schema already carries the full burden, the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: 'Find and display traffic incidents in an area.' It further differentiates itself as 'The primary tool for questions about traffic, accidents, road closures, congestion, or dangerous road conditions' and explicitly states that plotting with tomtom-dynamic-map is not needed, making its scope and identity unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: it is the primary tool for all traffic-related queries, enumerating example scenarios. It also gives a clear when-not-to-use instruction by stating that tomtom-dynamic-map is not needed for plotting, effectively naming the alternative and the condition that excludes it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tomtom-waypoint-routingTomTom Waypoint RoutingARead-onlyIdempotent
Plan multi-stop routes through 3 or more waypoints. Use when the user needs to visit multiple locations in sequence (e.g. 'route from A to B via C and D'). Returns optimized turn-by-turn directions, total distance, and travel time. For simple A-to-B routes, use tomtom-routing instead.
| Name | Required | Description | Default |
|---|---|---|---|
| avoid | No | Route features to avoid. May increase travel time. Options: 'tollRoads','motorways','ferries','unpavedRoads','carpools','alreadyUsedRoads'. Accepts array of string(s). | |
| report | No | 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 | |
| traffic | No | Include real-time traffic data for more accurate ETAs and route suggestions. | |
| arriveAt | No | Arrival time in ISO format (e.g., '2025-06-24T17:00:00Z'). Cannot be used with departAt. | |
| departAt | No | Departure time in ISO format (e.g., '2025-06-24T14:30:00Z'). Cannot be used with arriveAt. | |
| language | No | Language code for instructions (e.g., 'en-US', 'de-DE'). | |
| hilliness | No | Preference for avoiding hills. Use 'low' for flatter routes. | |
| routeType | No | Route optimization: 'fastest' (time-optimized), 'shortest' (distance-optimized), 'eco' (fuel-efficient), 'thrilling' (scenic). | |
| waypoints | Yes | Ordered array of waypoint coordinates (minimum 2). Route calculated in exact sequence provided. Use geocoding for accurate coordinates. | |
| travelMode | No | Transportation mode. Default: 'car'. | |
| sectionType | No | Road section types to highlight for route analysis. Options: toll (toll roads), motorway (highways), tunnel, urban (city areas), country (rural areas), pedestrian (walking paths), traffic (traffic incidents), toll_road, ferry, travel_mode, important_road_stretch. Accepts array of string(s). | |
| windingness | No | Preference for avoiding winding roads. Use 'low' for straighter routes. | |
| vehicleWidth | No | Vehicle width in meters. Used to avoid narrow roads. | |
| vehicleHeight | No | Vehicle height in meters. Used to avoid low bridges. | |
| vehicleLength | No | Vehicle length in meters. Affects maneuverability restrictions. | |
| vehicleWeight | No | Vehicle weight in kg. Important for truck routing restrictions. | |
| maxChargeInkWh | No | Maximum EV battery capacity in kWh. Required for EV routing. | |
| vehicleHeading | No | Heading of the vehicle in degrees (0-359) for more accurate initial routing. | |
| alternativeType | No | 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` | |
| maxAlternatives | No | Number of alternative routes (0-5). More alternatives = more options but larger response. | |
| response_detail | No | Response detail level. 'compact' (default): trimmed response with essential fields only, saves tokens. 'full': complete API response with all fields including coordinates, classifications, etc. | compact |
| vehicleLoadType | No | Cargo type for hazardous materials routing. | |
| vehicleMaxSpeed | No | Maximum vehicle speed in km/h for commercial routing. | |
| computeBestOrder | No | Reorder waypoints for optimization. Use with multiple waypoints to find the most efficient route order. | |
| instructionsType | No | Instruction format: 'text' (human-readable), 'coded' (machine-readable), 'tagged' (HTML). | |
| supportingPoints | No | Additional coordinates that influence the route shape without being stops (format: 'lat,lon;lat,lon'). | |
| uphillEfficiency | No | Efficiency during uphill driving (0-1). | |
| vehicleAxleWeight | No | Vehicle axle weight in kg for weight-restricted roads. | |
| vehicleCommercial | No | Commercial vehicle flag. Affects road access restrictions. | |
| vehicleEngineType | No | Engine type for fuel/energy consumption calculation. | |
| auxiliaryPowerInkW | No | Auxiliary power consumption in kW for electric vehicles. | |
| chargeMarginsInkWh | No | Comma-separated charge margins in kWh for route planning. | |
| currentChargeInkWh | No | Current EV battery charge in kWh. Required for EV routing. | |
| downhillEfficiency | No | Efficiency during downhill driving (0-1). | |
| currentFuelInLiters | No | Current fuel level in liters for combustion vehicles. | |
| routeRepresentation | No | 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 | |
| computeTravelTimeFor | No | Calculate travel times for all segments ('all') or none ('none'). | |
| vehicleNumberOfAxles | No | Number of axles on the vehicle. Used for toll calculations and restrictions. | |
| accelerationEfficiency | No | Efficiency during acceleration (0-1). | |
| decelerationEfficiency | No | Efficiency during deceleration (0-1). | |
| includeTollPaymentTypes | No | 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 | |
| extendedRouteRepresentation | No | Additional routing data formats to include in the response. | |
| auxiliaryPowerInLitersPerHour | No | Auxiliary power consumption for combustion vehicles in L/hr. | |
| vehicleAdrTunnelRestrictionCode | No | ADR tunnel restriction code for hazardous materials. | |
| consumptionInkWhPerkmAltitudeGain | No | Energy used per km of altitude gain. | |
| fuelEnergyDensityInMJoulesPerLiter | No | Fuel energy density in megajoules per liter. | |
| recuperationInkWhPerkmAltitudeLoss | No | Energy recovered per km of altitude loss. | |
| constantSpeedConsumptionInkWhPerHundredkm | No | EV speed-to-consumption mappings format: '50,8.2:130,21.3' (speed in km/h, consumption in kWh/100km). | |
| constantSpeedConsumptionInLitersPerHundredkm | No | Combustion speed-to-consumption mappings: '50,6.3:130,11.5' (speed in km/h, consumption in L/100km). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that it 'returns optimized turn-by-turn directions, total distance, and travel time,' which is useful. However, there is a minor inconsistency: the description says '3 or more waypoints' while the schema allows minItems=2, which could mislead an agent. No contradiction with annotations, but the added behavioral context is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The primary use case and the key differentiator are front-loaded, and the alternative is named concisely. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 49 parameters, the description adequately covers the core use case and return fields, while the schema handles parameter specifics. It does not mention ordered waypoints or the computeBestOrder option, but those are in the schema. Given annotations and rich schema, nothing critical is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 49 parameters in detail. The description only mentions 'waypoints' generically and does not add syntax, ordering, or constraint nuances beyond what the schema provides. Baseline 3 is appropriate since schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Plan multi-stop routes through 3 or more waypoints.' It clearly distinguishes itself from the sibling 'tomtom-routing' by specifying the multi-stop scenario, so an agent can tell them apart without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use when the user needs to visit multiple locations in sequence' and directs to 'tomtom-routing' for simple A-to-B routes. This gives clear when-to-use and when-not-to-use guidance, naming the alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
14 tool updates
v1.6.8- Added
tomtom-dynamic-map - Changed
tomtom-fuzzy-search8 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / categorySet / descriptionPrevious 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)" - removed
Input schema / properties / connectorsRemoved value: -{ - "description": "Include connector information for EV stations", - "type": "boolean" -} - changed
Input schema / properties / entityTypeSet / descriptionPrevious 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" - removed
Input schema / properties / gomListRemoved value: -{ - "description": "Include geometry-only matches in the result list", - "type": "boolean" -} - added
Input schema / properties / response_detailAdded 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" +} - removed
Input schema / properties / roadUseRemoved value: -{ - "description": "Include road usage information", - "type": "boolean" -} - removed
Input schema / properties / sortRemoved value: -{ - "description": "Sort options for results", - "type": "string" -}
- Changed
tomtom-geocode3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / entityTypeSet / descriptionPrevious 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" - added
Input schema / properties / response_detailAdded 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" +}
- Added
tomtom-get-api-key - Added
tomtom-get-app-config - Added
tomtom-get-viz-data - Changed
tomtom-nearby5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / categorySet / descriptionPrevious value: -"POI category filter. Common: '7315' (restaurants), '7309' (gas), '9663' (EV charging), '7311' (hotels), '9376' (parking)."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)" - changed
Input schema / properties / entityTypeSet / descriptionPrevious 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" - added
Input schema / properties / response_detailAdded 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" +} - removed
Input schema / properties / sortRemoved value: -{ - "description": "Sort options for results", - "type": "string" -}
- Changed
tomtom-poi-search7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / categorySet / descriptionPrevious 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)" - changed
Input schema / properties / entityTypeSet / descriptionPrevious 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" - changed
Input schema / properties / query / descriptionPrevious 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." - added
Input schema / properties / response_detailAdded 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" +} - removed
Input schema / properties / roadUseRemoved value: -{ - "description": "Include road usage information", - "type": "boolean" -} - removed
Input schema / properties / sortRemoved value: -{ - "description": "Sort options for results", - "type": "string" -}
- Changed
tomtom-reachable-range7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / distanceBudgetInMeters / descriptionPrevious value: -"Maximum travel distance in meters. Examples: 5000 (5km), 10000 (10km), 20000 (20km). Either time or distance budget required."New value: +"Maximum travel distance in meters. Examples: 5000 (5km), 10000 (10km), 20000 (20km). Use ONLY ONE budget parameter — do not combine with other budget types." - changed
Input schema / properties / energyBudgetInkWh / descriptionPrevious value: -"Maximum energy budget in kWh for electric vehicles. Example: 10 (10 kWh)."New value: +"Maximum energy budget in kWh for electric vehicles. Example: 10 (10 kWh). REQUIRED companions: vehicleEngineType='electric', constantSpeedConsumptionInkWhPerHundredkm, currentChargeInkWh, maxChargeInkWh. Use ONLY ONE budget parameter — do not combine with other budget types." - changed
Input schema / properties / fuelBudgetInLiters / descriptionPrevious value: -"Maximum fuel budget in liters for combustion vehicles. Example: 5 (5 liters)."New value: +"Maximum fuel budget in liters for combustion vehicles. Example: 5 (5 liters). REQUIRED companions: vehicleEngineType='combustion' and constantSpeedConsumptionInLitersPerHundredkm (e.g. '50,6.5:130,11.5'). Use ONLY ONE budget parameter — do not combine with other budget types." - removed
Input schema / properties / origin / additionalPropertiesRemoved value: -false - added
Input schema / properties / response_detailAdded value: +{ + "default": "compact", + "description": "Response detail level. 'compact' (default): returns center point only, boundary coordinates are trimmed — the MCP App still renders the full reachable range polygon. 'full': includes boundary coordinates in the response, use this when you need to plot or process the boundary data yourself.", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / timeBudgetInSec / descriptionPrevious value: -"Maximum travel time in seconds. Examples: 900 (15min), 1800 (30min), 3600 (1h). Either time or distance budget required."New value: +"Maximum travel time in seconds. Examples: 900 (15min), 1800 (30min), 3600 (1h). Use ONLY ONE budget parameter — do not combine with other budget types."
- Changed
tomtom-reverse-geocode3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / entityTypeSet / descriptionPrevious value: -"Filter by entity types: 'Country', 'Municipality', etc."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" - added
Input schema / properties / response_detailAdded 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" +}
- Changed
tomtom-routing10 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / destination / additionalPropertiesRemoved value: -false - removed
Input schema / properties / destination / properties / lat / $refRemoved value: -"#/properties/origin/properties/lat" - added
Input schema / properties / destination / properties / lat / descriptionAdded value: +"Latitude coordinate (-90 to +90). Use precise coordinates from geocoding for best results." - added
Input schema / properties / destination / properties / lat / typeAdded value: +"number" - removed
Input schema / properties / destination / properties / lon / $refRemoved value: -"#/properties/origin/properties/lon" - added
Input schema / properties / destination / properties / lon / descriptionAdded value: +"Longitude coordinate (-180 to +180). Use precise coordinates from geocoding for best results." - added
Input schema / properties / destination / properties / lon / typeAdded value: +"number" - removed
Input schema / properties / origin / additionalPropertiesRemoved value: -false - added
Input schema / properties / response_detailAdded 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" +}
- Changed
tomtom-static-map2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / center / additionalPropertiesRemoved value: -false
- Changed
tomtom-traffic8 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / incidentTypesRemoved value: -{ - "description": "Filter by incident types (comma-separated): '0' (Accident), '1' (Fog), '4' (Ice), '5' (Lane Restrictions), '7' (Closure), '8' (Roadworks).", - "type": "string" -} - changed
Input schema / properties / language / descriptionPrevious value: -"Language for incident descriptions: 'en-US', 'de-DE', 'fr-FR', 'es-ES'. Default: 'en-US'."New value: +"Language for incident descriptions: 'en-GB', 'de-DE', 'fr-FR', 'es-ES'. Default: 'en-GB'." - changed
Input schema / properties / maxResults / descriptionPrevious value: -"Maximum incidents to return (1-1000). Use 10-20 for readability in high-traffic areas."New value: +"Maximum incidents to return (1-1000). Default: 100. Use 10-20 for readability in high-traffic areas. When more incidents match, the most severe are returned and the response includes an incidentSummary with full totals." - added
Input schema / properties / response_detailAdded 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" +} - removed
Input schema / properties / tRemoved value: -{ - "description": "Unix Timestamp in seconds for traffic model. Use current time if not provided.", - "type": "number" -} - removed
Input schema / properties / timeFilterRemoved value: -{ - "description": "Time validity filter: 'present' (current), 'future' (upcoming), 'all' (both). Default: 'present'.", - "enum": [ - "present", - "future" - ], - "type": "string" -} - added
Input schema / properties / timeValidityFilterAdded value: +{ + "description": "Time validity filter: 'present' (current), 'future' (upcoming). Default: 'present'.", + "enum": [ + "present", + "future" + ], + "type": "string" +}
- Changed
tomtom-waypoint-routing3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / response_detailAdded 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" +} - removed
Input schema / properties / waypoints / items / additionalPropertiesRemoved value: -false
10 tool updates
v1.0.0- First observed
tomtom-fuzzy-search - First observed
tomtom-geocode - First observed
tomtom-nearby - First observed
tomtom-poi-search - First observed
tomtom-reachable-range - First observed
tomtom-reverse-geocode - First observed
tomtom-routing - First observed
tomtom-static-map - First observed
tomtom-traffic - First observed
tomtom-waypoint-routing
TDQS
Scored across 14 tools
Most tools are clearly separated by purpose, with routing vs. waypoint-routing and static-map vs. dynamic-map explicitly disambiguated. Some overlap exists among fuzzy-search, geocode, and poi-search, but the descriptions provide enough contextual boundaries to guide correct selection.
All tools share a consistent tomtom- prefix and lowercase hyphenated style, which makes the set predictable. Verb forms vary across geocode, search, routing, and nearby, so it is not a strict verb_noun pattern, but the deviations are minor and readable.
Fourteen tools is within the ideal scope for a mapping, search, routing, traffic, and visualization server. Each tool covers a distinct operational area, and the three internal tools serve a clear supporting role for apps using the server.
The server provides strong coverage of the core mapping domain: forward and reverse geocoding, fuzzy and category search, nearby discovery, simple and multi-stop routing, reachable range, traffic, and map rendering. There are no obvious dead ends for typical user requests involving locations, directions, traffic, or map images.
Maintenance
Related MCP Connectors
- geoOAuthco.thinair
Geocoding, routing, isochrones, traffic, weather, and place search for AI agents. 19 MCP tools.
Provides AI assistants with direct access to Mapbox developer APIs and documentation.
TomTom MCP — wraps the TomTom Search & Routing APIs (api.tomtom.com)
Geolocate Me turns your phone into location context for any AI assistant. Install the iOS or Android app, connect once with OAuth, and your GPS is queryable in natural language. Ask where you are, where you parked, where you were yesterday at 3pm, or how long you were at the office — the assistant calls the tool and answers with a real street address. https://geolocateme.app
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides AI applications with geospatial intelligence through Mapbox APIs, enabling geocoding, POI search, routing, travel time analysis, isochrone generation, and static map creation for location-aware functionality.1,255 npmBSD 3-Clause
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to query TomTom Search and Routing APIs, including geocoding, places, and route planning.1 npmMIT
- AlicenseNot gradedqualityCmaintenanceProvides geolocation, routing, and navigation tools including geocoding, place search, distance matrix, and turn-by-turn directions via NextBillion.ai APIs.59 npm1MIT

Magic Lane MCP Serverofficial
AlicenseBqualityBmaintenanceEnables AI agents to become geospatially intelligent assistants with tools for location search, smart routing, round trip planning, reverse geocoding, isochrone analysis, route visualization, geofence management, and interactive map display.816 npm7Apache 2.0