Skip to main content

JustRouting MCP

JustRouting MCP lets AI assistants such as Claude and Cursor use JustRouting for road routing, geocoding, distance and travel-time comparison, and multi-vehicle route optimization. Designed for Southeast Asia.

What you can do

The tools are designed around three simple tasks:
  • route — calculate
  • table — compare
  • optimize — decide

Installation

One-line installer

On macOS or Linux:
The installer downloads the latest prebuilt binary for your OS and architecture, verifies its checksum, and installs justrouting-mcp. To install a specific version:
No Go installation is required.

From source

If you have Go installed:
Requires Go 1.25+. Make sure justrouting-mcp is available in your PATH. Prebuilt binaries for supported platforms are also available from GitHub Releases.

Configuration

The server reads the JustRouting API key from the JUSTROUTING_API_KEY environment variable:
You can get an API key from JustRouting.

Which tool should I use?

Use the simplest tool that matches the user’s task: A simple rule:
  • One route → route
  • Many routes to compare → table
  • Many jobs to assign and order → optimize
  • Place name or address → geocode first

Tools

route

Calculate a route between two locations. Use this tool when the user needs to:
  • calculate driving distance
  • estimate travel time
  • get a route between two locations
  • get route geometry
  • understand which roads a route uses
  • avoid specific road types
Do not use it for comparing many origin-destination pairs. Use table instead. Do not use it for assigning jobs to vehicles or ordering multiple stops. Use optimize instead.

Input

Coordinates must use:
For example:

Motorcycle routing

profile is optional. Set it to "motorcycle" when the user explicitly asks for a motorcycle or motorbike route. Otherwise, omit profile to use the default driving profile.

Avoiding roads

Use exclude when the user explicitly asks to avoid a road type. Supported values:
  • toll
  • motorway
  • ferry
For example:
Road avoidance is a preference, not a guarantee. The engine avoids the specified road type when a reasonable alternative exists.

Output

  • distance_meters — route distance in meters
  • duration_seconds — estimated travel time in seconds
  • profile — routing profile used
  • geometry — simplified encoded polyline for the route
  • summary.roads — main roads used by the route
  • summary.tolls — whether the route uses toll roads
  • summary.ferry — whether the route includes a ferry crossing
If the user provides place names or addresses instead of coordinates, call geocode first.

table

Calculate a distance and/or travel-time matrix between multiple locations. Use this tool when the user needs to:
  • find the nearest driver, vehicle, store, or facility
  • compare several destinations
  • compare multiple origin-destination pairs
  • build a distance or travel-time matrix
Do not use it for a single route between two locations. Use route instead.

Input

Each coordinate has a stable zero-based index based on its position in the coordinates array. For example:
Matrix rows correspond to sources. Matrix columns correspond to destinations. A matrix value at [row][column] represents the route from that source to that destination. For example:
means the travel time from coordinate 0 to coordinate 2. The response includes sources and destinations with the original coordinate indices so the matrix can be mapped back to the user’s locations.

Sources and destinations

Optional sources and destinations restrict the matrix to subsets of the coordinate indices. For example:
This calculates routes from coordinate 0 to coordinates 1 and 2.

Annotations

Use:
for travel times. Use:
for distances. Use:
for both. If omitted, both are returned.
  • duration — travel time in seconds
  • distance — distance in meters

Motorcycle routing

Set:
when the user explicitly asks for motorcycle or motorbike routing. Otherwise, omit profile.

Nearest-driver example

For a question such as:
Which driver is closest to the customer?
Keep the locations in a fixed order:
Then:
  1. Use [0] as the source.
  2. Use the driver indices as destinations.
  3. Read the corresponding values from the first matrix row.
  4. Ignore null values.
  5. Choose the smallest distance or duration, depending on the user’s request.
For example:

Output

durations are in seconds. distances are in meters. A matrix value of null means that the origin-destination pair is unreachable. Never interpret null as zero. If the user provides place names or addresses instead of coordinates, call geocode first for every place. Keep the locations in the same order when constructing the matrix request.

geocode

Search for a place or address and convert it into coordinates. Use this tool when the user provides:
  • a place name
  • a landmark
  • a business
  • a street address
  • another location description
Do not use it when the user already provides coordinates in longitude,latitude format.

Structured input

The search is structured. Parse the user’s location into the fields that can be determined:
  • name — place, landmark, or business name
  • housenumber — house or building number
  • street — street name
  • postcode — postal or ZIP code
  • city — city or locality
  • country — country
Only provide fields that are known from the user’s request. Do not invent or guess missing address components. For example:
When the user’s context provides a country or city, include it to disambiguate common, abbreviated, or misspelled place names.

Limit and filters

limit is optional and defaults to 1. The maximum value is 10. Use a larger limit when the location is ambiguous or the user asks for alternatives. filters can optionally restrict the search. For example:

Output

Results are ordered by relevance. By default, the best matching result is returned. If multiple results are requested, choose the result that best matches the user’s intended location. The coordinates value is in longitude,latitude format and can be passed directly to route, table, or optimize. When using geocode as part of a routing workflow, verify that the selected result matches the user’s intended place before passing its coordinates to the next tool. If no result matches, the tool returns an error so the assistant can refine the search.

optimize

Assign jobs to vehicles and determine the order in which each vehicle should visit its assigned jobs. Use this tool when the user needs to:
  • assign multiple deliveries or pickups to vehicles
  • plan routes for a fleet
  • determine the order of multiple stops
  • optimize a multi-vehicle routing solution
Do not use it for a single route. Use route. Do not use it only to compare distances or travel times between locations. Use table.

Input

Every vehicle must have a unique id. Every job must have a unique id and a location. Locations must use:
Each vehicle must have at least a start or an end. For a round trip, set both start and end to the same location:
If start or end is omitted, the vehicle may start or end anywhere.

Vehicle profiles

Each vehicle can use its own routing profile. Use:
when the user explicitly asks for a motorcycle or motorbike route. Otherwise, omit profile to use the default driving profile. For example:

Output

A simplified result looks like:
Use routes[].steps to determine:
  • which vehicle serves each job
  • the order in which jobs are visited
  • when each job is reached
A job step contains the job ID, arrival time, travel duration, and travel distance for reaching that job. Always check unassigned. Do not assume that every job will be assigned. If the user provides place names or addresses instead of coordinates, call geocode first for every location and use the selected coordinates in the optimization request.

Agent workflows

JustRouting MCP is designed so that AI assistants can combine the tools into larger workflows.

Route between two places

For:
How long does it take to drive from Marina Bay Sands to Changi Airport?
Use:
  1. Geocode the origin.
  2. Geocode the destination.
  3. Verify the selected results match the intended places.
  4. Pass their coordinates values to route.
If the user already provides coordinates, skip geocoding.

Find the nearest driver

For:
Which driver is closest to this customer?
Use:
  1. Geocode the customer.
  2. Geocode each driver.
  3. Keep the locations in a fixed order.
  4. Put the customer in sources.
  5. Put the drivers in destinations.
  6. Compare the corresponding distance or duration values.
  7. Ignore unreachable null values.

Plan multiple vehicles

For:
I have two vans and six customers. Assign the customers to the vans and determine the stop order.
Use:
  1. Geocode each vehicle’s start/end location.
  2. Geocode every job location.
  3. Create one vehicle entry per vehicle.
  4. Create one job entry per customer.
  5. Call optimize.
  6. Read routes[].steps to determine each vehicle’s itinerary.
  7. Check unassigned for jobs that could not be served.

Coordinate format

All routing tools use:
For example:
This means:
Do not reverse the order.

Claude

Claude Code

Add JustRouting MCP with:

Claude Desktop

Add the server to claude_desktop_config.json:
Restart Claude Desktop after changing the configuration.

Cursor

Add JustRouting MCP from Settings → MCP → Add new MCP server. Use:
Once connected, Cursor can use the JustRouting tools directly.