<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: JustRouting</title>
    <description>The latest articles on DEV Community by JustRouting (@justrouting).</description>
    <link>https://dev.to/justrouting</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4159688%2Fa16ee67a-57af-4443-8f33-578cdbaa1d8e.png</url>
      <title>DEV Community: JustRouting</title>
      <link>https://dev.to/justrouting</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/justrouting"/>
    <language>en</language>
    <item>
      <title>Build a Delivery AI Agent with MCP and Routing APIs</title>
      <dc:creator>JustRouting</dc:creator>
      <pubDate>Mon, 12 Oct 2026 14:47:00 +0000</pubDate>
      <link>https://dev.to/justrouting/build-a-delivery-ai-agent-with-mcp-and-routing-apis-aa4</link>
      <guid>https://dev.to/justrouting/build-a-delivery-ai-agent-with-mcp-and-routing-apis-aa4</guid>
      <description>&lt;p&gt;AI agents are getting better at understanding requests, reasoning about problems, and completing complex tasks.&lt;/p&gt;

&lt;p&gt;But real-world operations need more than language.&lt;/p&gt;

&lt;p&gt;A delivery assistant needs to answer questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which driver should handle this order?&lt;/li&gt;
&lt;li&gt;How long will delivery take?&lt;/li&gt;
&lt;li&gt;What is the most efficient route?&lt;/li&gt;
&lt;li&gt;How should multiple vehicles be assigned?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not text problems.&lt;/p&gt;

&lt;p&gt;They are routing problems.&lt;/p&gt;

&lt;p&gt;In this tutorial, we will build a delivery AI agent that uses the Model Context Protocol (MCP) to access routing capabilities.&lt;/p&gt;

&lt;p&gt;The agent will be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;convert addresses into coordinates&lt;/li&gt;
&lt;li&gt;compare drivers by travel time&lt;/li&gt;
&lt;li&gt;calculate routes&lt;/li&gt;
&lt;li&gt;optimize multiple deliveries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The final architecture:&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    U[User Request]
        --&amp;gt; A[AI Agent]

    A --&amp;gt; M[MCP Server]

    M --&amp;gt; G[Geocoding]
    M --&amp;gt; R[Routing]
    M --&amp;gt; O[Optimization]

    G --&amp;gt; J[JustRouting API]
    R --&amp;gt; J
    O --&amp;gt; J&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;The stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MCP for connecting AI agents with tools&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://justrouting.tech/" rel="noopener noreferrer"&gt;JustRouting&lt;/a&gt; MCP server for routing capabilities&lt;/li&gt;
&lt;li&gt;Southeast Asia routing data&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why delivery agents need routing tools
&lt;/h2&gt;

&lt;p&gt;A language model can understand:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Which driver should deliver this order?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But it does not know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;road distances&lt;/li&gt;
&lt;li&gt;travel times&lt;/li&gt;
&lt;li&gt;geographic relationships&lt;/li&gt;
&lt;li&gt;delivery optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI agent decides what to do.&lt;/p&gt;

&lt;p&gt;The routing system calculates what is physically possible.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LLM = reasoning

Routing engine = transportation intelligence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This separation is important.&lt;/p&gt;

&lt;p&gt;The AI agent handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;user intent&lt;/li&gt;
&lt;li&gt;business rules&lt;/li&gt;
&lt;li&gt;decision making&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The routing layer handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;maps&lt;/li&gt;
&lt;li&gt;distances&lt;/li&gt;
&lt;li&gt;travel time&lt;/li&gt;
&lt;li&gt;optimization&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Install the MCP routing server
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://justrouting.tech/" rel="noopener noreferrer"&gt;JustRouting&lt;/a&gt; provides an MCP server that exposes Southeast Asia routing capabilities to AI clients.&lt;/p&gt;

&lt;p&gt;Install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/justrouting/mcp/main/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure your MCP client:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"justrouting"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"justrouting-mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"JUSTROUTING_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The MCP server provides four tools:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;geocode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Convert addresses into coordinates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;route&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Calculate routes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;table&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Compare travel times&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;optimize&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Plan vehicle routes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Example 1: Assign the closest driver
&lt;/h2&gt;

&lt;p&gt;A dispatcher asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Assign the closest driver to Mondrian Singapore Duxton.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Available drivers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;D1: Marina Bay Sands
D2: Waterford Residence
D3: IKEA Alexandra
D4: VivoCity
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI agent creates a workflow:&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    A[Customer Address]
        --&amp;gt; B[Geocode]

    B --&amp;gt; C[Calculate Travel Times]

    C --&amp;gt; D[Compare Drivers]

    D --&amp;gt; E[Recommend Driver]&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;The routing result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Driver   Location              Distance    Drive time

D1       Marina Bay Sands      3.60 km     ~8 min
D2       Waterford Residence   2.78 km     ~6 min
D3       IKEA Alexandra        5.33 km     ~13 min
D4       VivoCity              3.30 km     ~7 min
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent responds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Assign D2.

Reason:
- Shortest driving distance: 2.78 km
- Estimated arrival: ~6 minutes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI agent handles the business question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Who should deliver this order?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The routing layer provides the transportation intelligence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"These are the actual driving costs."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Example 2: Route planning
&lt;/h2&gt;

&lt;p&gt;A user asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How long does it take to drive from Marina Bay Sands Singapore to Changi Airport?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The AI agent calls the &lt;code&gt;route&lt;/code&gt; tool.&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Distance:
~19.1 km

Duration:
~23 minutes

Main roads:
East Coast Parkway
Airport Boulevard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent can explain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The fastest driving route takes about 23 minutes.

The route uses ECP and Airport Boulevard.
ERP charges may apply.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The user asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if I'm riding a motorcycle?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent changes routing profiles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Car:

Distance: ~19.1 km
Time: ~23.6 min


Motorcycle:

Distance: ~19.1 km
Time: ~26.5 min
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The user adds:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if I want to avoid tolls?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent applies a routing constraint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Motorcycle with tolls:

Distance: ~19.1 km
Time: ~26.5 min


Motorcycle without tolls:

Distance: ~21.6 km
Time: ~35 min
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI agent understands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"drive" → driving profile&lt;/li&gt;
&lt;li&gt;"motorcycle" → motorcycle profile&lt;/li&gt;
&lt;li&gt;"avoid tolls" → routing constraint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The routing layer handles the geography.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example 3: Fleet optimization
&lt;/h2&gt;

&lt;p&gt;Single-driver dispatch is useful.&lt;/p&gt;

&lt;p&gt;But real logistics problems are more complex.&lt;/p&gt;

&lt;p&gt;A dispatcher asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I have two vans and six pickup locations. Create today's routes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vehicles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;V1: 249 Sixth Ave, Singapore

V2: 8 Harlyn Rd, Singapore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Customers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C1: 75 Jln Kelabu Asap

C2: 20 Mount Sinai Rd

C3: 10 Bin Tong Park

C4: 9 Cluny Park

C5: 28 Nassim Rd

C6: 30 Chancery Ln
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI agent calls:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;optimize
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The optimization engine returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Van V1

Start: 249 Sixth Ave

Route: C2 → C1 → C3

Total: ~19.4 minutes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Van V2

Start: 8 Harlyn Rd

Route: C6 → C5 → C4

Total: ~29.0 minutes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Final answer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;All six deliveries assigned.

No customer left unserved.

Combined fleet driving time:

~48.5 minutes.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI agent does not manually solve the vehicle routing problem.&lt;/p&gt;

&lt;p&gt;It delegates mathematical optimization to a specialized routing engine.&lt;/p&gt;




&lt;h2&gt;
  
  
  The complete delivery AI architecture
&lt;/h2&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    U[User]
        --&amp;gt; A[AI Agent]

    A --&amp;gt; M[MCP Server]

    M --&amp;gt; G[Geocode]
    M --&amp;gt; R[Route]
    M --&amp;gt; T[Travel Time Matrix]
    M --&amp;gt; O[Optimize]

    G --&amp;gt; J[JustRouting]
    R --&amp;gt; J
    T --&amp;gt; J
    O --&amp;gt; J&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Each component has a clear responsibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Agent
&lt;/h3&gt;

&lt;p&gt;Understands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;user requests&lt;/li&gt;
&lt;li&gt;business rules&lt;/li&gt;
&lt;li&gt;priorities&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  MCP
&lt;/h3&gt;

&lt;p&gt;Provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;standardized tool access&lt;/li&gt;
&lt;li&gt;discoverable capabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Routing API
&lt;/h3&gt;

&lt;p&gt;Handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;maps&lt;/li&gt;
&lt;li&gt;distances&lt;/li&gt;
&lt;li&gt;travel times&lt;/li&gt;
&lt;li&gt;optimization&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why MCP changes application architecture
&lt;/h2&gt;

&lt;p&gt;Before MCP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI application

      |

Custom integration

      |

External services
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every AI application needs to build its own connectors.&lt;/p&gt;

&lt;p&gt;With MCP:&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    A[AI Application]
        --&amp;gt; M[MCP Tools]

    M --&amp;gt; C[Reusable Capabilities]

    C --&amp;gt; R[Routing]
    C --&amp;gt; S[Search]
    C --&amp;gt; P[Payments]&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;A routing server becomes a reusable capability that can be used by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;delivery agents&lt;/li&gt;
&lt;li&gt;fleet assistants&lt;/li&gt;
&lt;li&gt;travel planners&lt;/li&gt;
&lt;li&gt;field service systems&lt;/li&gt;
&lt;li&gt;logistics copilots&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Beyond delivery
&lt;/h2&gt;

&lt;p&gt;The same pattern applies to many physical-world applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ride-hailing
&lt;/h3&gt;

&lt;p&gt;Question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which driver should accept this passenger?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;geocoding&lt;/li&gt;
&lt;li&gt;ETA calculation&lt;/li&gt;
&lt;li&gt;distance comparison&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Field service
&lt;/h3&gt;

&lt;p&gt;Question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which technician should visit this customer?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;location matching&lt;/li&gt;
&lt;li&gt;scheduling&lt;/li&gt;
&lt;li&gt;routing&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Emergency response
&lt;/h3&gt;

&lt;p&gt;Question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which vehicle can arrive fastest?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;route calculation&lt;/li&gt;
&lt;li&gt;travel-time estimation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Build AI applications that understand the physical world
&lt;/h2&gt;

&lt;p&gt;Large language models provide reasoning.&lt;/p&gt;

&lt;p&gt;MCP provides tool access.&lt;/p&gt;

&lt;p&gt;Routing provides location intelligence.&lt;/p&gt;

&lt;p&gt;Together they enable AI systems that can make decisions in the real world.&lt;/p&gt;

&lt;p&gt;A delivery AI agent is not just a chatbot.&lt;/p&gt;

&lt;p&gt;It is a system that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understand a request&lt;/li&gt;
&lt;li&gt;call specialized tools&lt;/li&gt;
&lt;li&gt;evaluate options&lt;/li&gt;
&lt;li&gt;take action&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The next generation of logistics software will not only show routes.&lt;/p&gt;

&lt;p&gt;It will reason about movement.&lt;/p&gt;




&lt;p&gt;Learn more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JustRouting: &lt;a href="https://justrouting.tech" rel="noopener noreferrer"&gt;https://justrouting.tech&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;MCP Server: &lt;a href="https://github.com/justrouting/mcp" rel="noopener noreferrer"&gt;https://github.com/justrouting/mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://docs.justrouting.tech" rel="noopener noreferrer"&gt;https://docs.justrouting.tech&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>mcp</category>
      <category>logistics</category>
    </item>
    <item>
      <title>AI Agents Need a Routing Layer: Building Location Intelligence for Southeast Asia</title>
      <dc:creator>JustRouting</dc:creator>
      <pubDate>Mon, 12 Oct 2026 14:26:49 +0000</pubDate>
      <link>https://dev.to/justrouting/ai-agents-need-a-routing-layer-building-location-intelligence-for-southeast-asia-50gp</link>
      <guid>https://dev.to/justrouting/ai-agents-need-a-routing-layer-building-location-intelligence-for-southeast-asia-50gp</guid>
      <description>&lt;p&gt;AI agents are becoming better at understanding users, planning tasks, and making decisions.&lt;/p&gt;

&lt;p&gt;But there is one important limitation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI agents do not understand the physical world by default.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They know language.&lt;/p&gt;

&lt;p&gt;They can reason about goals.&lt;/p&gt;

&lt;p&gt;They can call tools.&lt;/p&gt;

&lt;p&gt;But they still need external capabilities to answer questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Which driver should deliver this order?"&lt;/li&gt;
&lt;li&gt;"What is the fastest way to visit these five locations?"&lt;/li&gt;
&lt;li&gt;"How long will it take to reach the airport?"&lt;/li&gt;
&lt;li&gt;"Which warehouse is closest to this customer?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not language problems.&lt;/p&gt;

&lt;p&gt;They are routing problems.&lt;/p&gt;

&lt;p&gt;And routing is becoming a fundamental capability for AI agents operating in the real world.&lt;/p&gt;

&lt;h2&gt;
  
  
  From API calls to agent capabilities
&lt;/h2&gt;

&lt;p&gt;Traditional software integration looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application → API → Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A developer writes code:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;collect coordinates&lt;/li&gt;
&lt;li&gt;call a routing API&lt;/li&gt;
&lt;li&gt;parse the response&lt;/li&gt;
&lt;li&gt;implement business logic&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This works well for traditional applications.&lt;/p&gt;

&lt;p&gt;But AI agents introduce a different model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Agent → Tools → Capabilities
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent does not need to know every API detail.&lt;/p&gt;

&lt;p&gt;It needs tools it can discover and use.&lt;/p&gt;

&lt;p&gt;This is where the Model Context Protocol (MCP) becomes interesting.&lt;/p&gt;

&lt;p&gt;MCP provides a standard way for AI applications to connect with external capabilities.&lt;/p&gt;

&lt;p&gt;Instead of building custom integrations for every agent, developers can expose tools that agents can call when needed.&lt;/p&gt;

&lt;p&gt;Routing becomes one of those tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AI agents need routing
&lt;/h2&gt;

&lt;p&gt;Many real-world tasks require spatial reasoning.&lt;/p&gt;

&lt;p&gt;Consider a delivery assistant:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I have 20 orders in Jakarta. Assign them to three drivers and optimize today's routes."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A general-purpose AI model cannot solve this alone.&lt;/p&gt;

&lt;p&gt;It needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;address → coordinates conversion&lt;/li&gt;
&lt;li&gt;road network knowledge&lt;/li&gt;
&lt;li&gt;travel time estimation&lt;/li&gt;
&lt;li&gt;distance matrix calculation&lt;/li&gt;
&lt;li&gt;vehicle routing optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A routing layer provides these capabilities.&lt;/p&gt;

&lt;p&gt;The AI agent handles the reasoning:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We have three drivers, 20 deliveries, and a priority customer."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The routing system handles the geography:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"These are the realistic driving times and optimized sequences."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Together they create a complete workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Southeast Asia needs a specialized routing layer
&lt;/h2&gt;

&lt;p&gt;Most global mapping platforms are designed for global coverage.&lt;/p&gt;

&lt;p&gt;That is useful.&lt;/p&gt;

&lt;p&gt;But Southeast Asia has unique routing challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;motorcycles are a primary transportation mode&lt;/li&gt;
&lt;li&gt;dense urban areas create complex travel patterns&lt;/li&gt;
&lt;li&gt;delivery businesses depend heavily on two-wheel vehicles&lt;/li&gt;
&lt;li&gt;addresses are often less structured than Western markets&lt;/li&gt;
&lt;li&gt;local road access rules matter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A routing layer optimized for Southeast Asia can provide better building blocks for applications such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;food delivery&lt;/li&gt;
&lt;li&gt;last-mile logistics&lt;/li&gt;
&lt;li&gt;fleet management&lt;/li&gt;
&lt;li&gt;ride-hailing&lt;/li&gt;
&lt;li&gt;e-commerce fulfillment&lt;/li&gt;
&lt;li&gt;field service operations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to replace global maps.&lt;/p&gt;

&lt;p&gt;The goal is to provide the right routing capability for the region where your users actually operate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing JustRouting MCP Server
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://justrouting.tech/" rel="noopener noreferrer"&gt;JustRouting&lt;/a&gt; provides an MCP server that exposes Southeast Asia routing capabilities to AI agents.&lt;/p&gt;

&lt;p&gt;The server provides four core tools:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;route&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Calculate a route between locations.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How long does it take to drive from Marina Bay Sands to Changi Airport?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent can geocode the locations and request the driving route.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;code&gt;geocode&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Convert human places into coordinates.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Find the location of this customer address."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent does not need users to provide latitude and longitude manually.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;code&gt;table&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Calculate travel-time matrices.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Which warehouse is closest to these five customers?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent can compare multiple origins and destinations efficiently.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;code&gt;optimize&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Solve vehicle routing problems.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Plan today's delivery routes for five drivers."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent can use optimization tools instead of manually reasoning through hundreds of possible routes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing the MCP server
&lt;/h2&gt;

&lt;p&gt;Installation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/justrouting/mcp/main/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure your MCP client:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"justrouting"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"justrouting-mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"JUSTROUTING_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now an MCP-compatible AI client can access routing capabilities directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three examples: from answering questions to making decisions
&lt;/h2&gt;

&lt;p&gt;A routing layer becomes more valuable when an AI agent can use it as a tool.&lt;/p&gt;

&lt;p&gt;The agent does not need to understand road graphs, coordinates, or optimization algorithms.&lt;/p&gt;

&lt;p&gt;It only needs to understand the user's intent and call the right capability.&lt;/p&gt;

&lt;p&gt;Here are three examples.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Route: answering real-world travel questions
&lt;/h3&gt;

&lt;p&gt;User:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How long does it take to drive from Marina Bay Sands Singapore to Changi Airport?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The AI agent can use the &lt;code&gt;route&lt;/code&gt; tool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User request
      |
      v
  geocode places
      |
      v
  calculate route
      |
      v
  explain result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Driving from Marina Bay Sands to Changi Airport takes about
23-24 minutes, covering roughly 19 km.

Route details:
- Main roads: East Coast Parkway (ECP), Airport Boulevard
- Distance: ~19.1 km
- Time: ~23 min 36 s
- Tolls: Yes (ERP charges may apply)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same question can include transportation preferences:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if I'm riding a motorcycle?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent can switch routing profiles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;Car&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;Distance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;~19.1 km&lt;/span&gt;
  &lt;span class="na"&gt;Time&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;~23.6 min&lt;/span&gt;

&lt;span class="na"&gt;Motorcycle&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;Distance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;~19.1 km&lt;/span&gt;
  &lt;span class="na"&gt;Time&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;~26.5 min&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or apply constraints:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if I want to avoid tolls?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent can request a different route:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;Motorcycle with tolls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;Distance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;~19.1 km&lt;/span&gt;
  &lt;span class="na"&gt;Time&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;~26.5 min&lt;/span&gt;

&lt;span class="na"&gt;Motorcycle without tolls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;Distance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;~21.6 km&lt;/span&gt;
  &lt;span class="na"&gt;Time&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;~35 min&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part is not the API call.&lt;/p&gt;

&lt;p&gt;The agent understands the intent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"drive" → driving profile&lt;/li&gt;
&lt;li&gt;"motorcycle" → motorcycle profile&lt;/li&gt;
&lt;li&gt;"avoid tolls" → routing constraint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The routing layer handles the geography.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Dispatch: making operational decisions
&lt;/h3&gt;

&lt;p&gt;Now consider a logistics assistant.&lt;/p&gt;

&lt;p&gt;A dispatcher asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I need to assign a delivery to the closest available driver by driving distance.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Customer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Mondrian Singapore Duxton
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Available drivers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;D1: Marina Bay Sands
D2: Waterford Residence
D3: IKEA Alexandra
D4: VivoCity
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A human might estimate based on a map.&lt;/p&gt;

&lt;p&gt;An AI agent can calculate the actual driving distance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Driver  Location              Distance    Drive time

D1      Marina Bay Sands      3.60 km     ~8 min
D2      Waterford Residence   2.78 km     ~6 min
D3      IKEA Alexandra        5.33 km     ~13 min
D4      VivoCity              3.30 km     ~7 min
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recommendation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Assign D2.

Reason:
- Shortest driving distance: 2.78 km
- Fastest estimated arrival: ~6 minutes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI agent handles the business reasoning:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Find the closest available driver."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The routing layer provides the transportation intelligence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"These are the real driving costs."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This pattern applies to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;food delivery&lt;/li&gt;
&lt;li&gt;courier dispatch&lt;/li&gt;
&lt;li&gt;field service&lt;/li&gt;
&lt;li&gt;ride-hailing&lt;/li&gt;
&lt;li&gt;emergency response&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  3. Optimize: planning an entire fleet
&lt;/h3&gt;

&lt;p&gt;The next level is multi-vehicle optimization.&lt;/p&gt;

&lt;p&gt;User:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I have two vans available to pick up packages from six customers. How should these pickup tasks be assigned and ordered?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vehicles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;V1:
249 Sixth Ave, Singapore

V2:
8 Harlyn Rd, Singapore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Customers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C1: 75 Jln Kelabu Asap
C2: 20 Mount Sinai Rd
C3: 10 Bin Tong Park
C4: 9 Cluny Park
C5: 28 Nassim Rd
C6: 30 Chancery Ln
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI agent calls the &lt;code&gt;optimize&lt;/code&gt; tool.&lt;/p&gt;

&lt;p&gt;The routing optimizer returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Van V1

Start:
249 Sixth Ave

Route:
C2 → C1 → C3

Total:
~19.4 minutes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Van V2

Start:
8 Harlyn Rd

Route:
C6 → C5 → C4

Total:
~29.0 minutes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Final plan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;All 6 jobs assigned.
No customer left unserved.

Combined fleet driving time:
~48.5 minutes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI agent did not manually solve the vehicle routing problem.&lt;/p&gt;

&lt;p&gt;It delegated the mathematical optimization to a specialized routing engine.&lt;/p&gt;

&lt;p&gt;That is the future architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Agent
    |
    |
    +---- Understand user goal
    |
    +---- Call routing tools
              |
              +---- Geocode
              |
              +---- Route
              |
              +---- Matrix
              |
              +---- Optimize
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Large language models are good at reasoning.&lt;/p&gt;

&lt;p&gt;Routing engines are good at transportation mathematics.&lt;/p&gt;

&lt;p&gt;Together they create AI systems that can operate in the physical world.&lt;/p&gt;

&lt;h2&gt;
  
  
  The future architecture: AI + specialized infrastructure
&lt;/h2&gt;

&lt;p&gt;The future of AI applications will not be one giant model doing everything.&lt;/p&gt;

&lt;p&gt;It will look more like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 AI Agent

                    |
        ---------------------------
        |            |            |
    Routing       Payments      Search
      Tool          Tool         Tool

        |
  Specialized Infrastructure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Large language models provide reasoning.&lt;/p&gt;

&lt;p&gt;Specialized services provide reliable capabilities.&lt;/p&gt;

&lt;p&gt;Routing is one of those capabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the physical world layer for AI
&lt;/h2&gt;

&lt;p&gt;The next generation of AI applications will interact with the real world:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;robots&lt;/li&gt;
&lt;li&gt;delivery systems&lt;/li&gt;
&lt;li&gt;transportation networks&lt;/li&gt;
&lt;li&gt;warehouses&lt;/li&gt;
&lt;li&gt;field operations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They will need more than text generation.&lt;/p&gt;

&lt;p&gt;They will need location intelligence.&lt;/p&gt;

&lt;p&gt;A routing layer gives AI agents the ability to understand movement, distance, and time.&lt;/p&gt;

&lt;p&gt;For Southeast Asia, that means providing routing capabilities designed around the region's transportation reality.&lt;/p&gt;

&lt;p&gt;The future AI agent will not only answer questions.&lt;/p&gt;

&lt;p&gt;It will make decisions in the physical world.&lt;/p&gt;

&lt;p&gt;And every physical decision needs a map.&lt;/p&gt;




&lt;p&gt;Learn more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JustRouting: &lt;a href="https://justrouting.tech" rel="noopener noreferrer"&gt;https://justrouting.tech&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;MCP Server: &lt;a href="https://github.com/justrouting/mcp" rel="noopener noreferrer"&gt;https://github.com/justrouting/mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href="https://docs.justrouting.tech" rel="noopener noreferrer"&gt;https://docs.justrouting.tech&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>mcp</category>
      <category>routing</category>
    </item>
    <item>
      <title>Route planning for Southeast Asia without self-hosting OSRM</title>
      <dc:creator>JustRouting</dc:creator>
      <pubDate>Sat, 03 Oct 2026 12:05:28 +0000</pubDate>
      <link>https://dev.to/justrouting/route-planning-for-southeast-asia-without-self-hosting-osrm-33b1</link>
      <guid>https://dev.to/justrouting/route-planning-for-southeast-asia-without-self-hosting-osrm-33b1</guid>
      <description>&lt;p&gt;Ask anyone who has operated OSRM in production and they will tell you the same thing: the routing engine is excellent, but running the infrastructure behind it is not trivial.&lt;/p&gt;

&lt;p&gt;A global OpenStreetMap graph can require serious hardware and long preprocessing times. Even a Southeast Asia extract — the region many applications actually need — still means managing large map files, running &lt;code&gt;osrm-extract&lt;/code&gt; and &lt;code&gt;osrm-contract&lt;/code&gt;, monitoring memory usage, and rebuilding everything whenever OpenStreetMap data changes.&lt;/p&gt;

&lt;p&gt;The hidden cost is not only the server.&lt;/p&gt;

&lt;p&gt;Someone has to maintain the pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;download updated OSM extracts&lt;/li&gt;
&lt;li&gt;rebuild routing graphs&lt;/li&gt;
&lt;li&gt;monitor failed preprocessing jobs&lt;/li&gt;
&lt;li&gt;keep production instances healthy&lt;/li&gt;
&lt;li&gt;remember how everything works months later&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For many teams, routing is not the product. It is just a capability inside a logistics app, delivery platform, marketplace, or AI agent.&lt;/p&gt;

&lt;p&gt;You need routes. You do not want to become a routing infrastructure company.&lt;/p&gt;

&lt;h2&gt;
  
  
  The alternative: managed routing infrastructure
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://justrouting.tech" rel="noopener noreferrer"&gt;JustRouting&lt;/a&gt; is a hosted routing API focused on Southeast Asia.&lt;/p&gt;

&lt;p&gt;Instead of running your own routing stack, you get ready-to-use APIs for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;directions&lt;/li&gt;
&lt;li&gt;distance matrices&lt;/li&gt;
&lt;li&gt;map matching&lt;/li&gt;
&lt;li&gt;nearest-road lookup&lt;/li&gt;
&lt;li&gt;geocoding&lt;/li&gt;
&lt;li&gt;fleet optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The underlying routing engines are powered by open-source technology, but the infrastructure work — servers, preprocessing, updates, and operations — is handled for you.&lt;/p&gt;

&lt;p&gt;The important parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Driving and motorcycle profiles.&lt;/strong&gt; Motorcycle routing matters in Southeast Asia, where two-wheel delivery and transportation are everywhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A simple REST API.&lt;/strong&gt; Use it from any language with JSON requests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Official SDKs for Python, JavaScript/TypeScript, and Go.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A free tier for experiments and small projects.&lt;/strong&gt; No credit card required.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Five lines of Python
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;justrouting&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;justrouting&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;route&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;justrouting&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;RouteRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;origin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;106.8146&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6.1352&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;       &lt;span class="c1"&gt;# Jakarta Kota
&lt;/span&gt;    &lt;span class="n"&gt;destination&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;107.6191&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6.9175&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;  &lt;span class="c1"&gt;# Bandung
&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;distance&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; km, &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;duration&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; min&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Need a motorcycle route?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;route&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;justrouting&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;RouteRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;origin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;106.8146&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6.1352&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;destination&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;107.6191&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6.9175&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;motorcycle&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Distance matrices are also available:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;matrix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;justrouting&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;MatrixRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;coordinates&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;depot&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stop_a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stop_b&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;sources&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;destinations&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can request only the rows and columns you need instead of calculating a full N×N matrix.&lt;/p&gt;

&lt;p&gt;For delivery fleets, use optimization:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;plan&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;optimization&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;solve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;justrouting&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OptimizationRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;vehicles&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;justrouting&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Vehicle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;106.8146&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6.1352&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;106.8146&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6.1352&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;jobs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;justrouting&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Job&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;101&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;106.8451&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6.2146&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The API returns the optimized sequence for each vehicle.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same routing capability from Node.js
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Client&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@justrouting/client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;route&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;106.8146&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6.1352&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;107.6191&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;6.9175&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${(&lt;/span&gt;&lt;span class="nx"&gt;route&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;distance&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt; km`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both SDKs are lightweight and dependency-free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Routing for AI agents: introducing MCP
&lt;/h2&gt;

&lt;p&gt;Traditional applications call routing APIs directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application → Routing API → Route result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But AI applications work differently.&lt;/p&gt;

&lt;p&gt;An AI agent needs tools it can discover and call dynamically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Agent → Tools → Routing capability
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is where the Model Context Protocol (MCP) becomes interesting.&lt;/p&gt;

&lt;p&gt;Instead of writing custom glue code that converts addresses into coordinates, calls geocoding, builds matrices, and parses routing responses, an MCP-compatible agent can use routing as a native capability.&lt;/p&gt;

&lt;p&gt;JustRouting provides an official &lt;a href="https://github.com/justrouting/mcp" rel="noopener noreferrer"&gt;MCP server&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Install it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/justrouting/mcp/main/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure your MCP client:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"justrouting"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"justrouting-mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"JUSTROUTING_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server provides four tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;route&lt;/code&gt; — calculate driving routes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;geocode&lt;/code&gt; — convert places into coordinates&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;table&lt;/code&gt; — calculate travel-time matrices&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;optimize&lt;/code&gt; — solve vehicle routing problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now an AI assistant can reason about real-world transportation problems.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Which driver should deliver this order in Jakarta?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;geocode the customer's address&lt;/li&gt;
&lt;li&gt;calculate travel times from multiple drivers&lt;/li&gt;
&lt;li&gt;compare routes&lt;/li&gt;
&lt;li&gt;select the closest driver&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No manual coordinate lookup.&lt;br&gt;
No custom API integration.&lt;br&gt;
No routing-specific code.&lt;/p&gt;

&lt;p&gt;Routing becomes a capability that AI agents can use directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it before building infrastructure
&lt;/h2&gt;

&lt;p&gt;The interactive demo in &lt;a href="https://justrouting.tech" rel="noopener noreferrer"&gt;JustRouting&lt;/a&gt; lets you test routes, matrices, and fleet optimization directly from your browser.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://docs.justrouting.tech" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; includes API references and examples.&lt;/p&gt;

&lt;p&gt;A free API key takes about thirty seconds.&lt;/p&gt;

&lt;p&gt;To be clear about the trade-off:&lt;/p&gt;

&lt;p&gt;If you need global coverage, offline routing, or complete control over your routing graph, self-hosting OSRM is still a great option.&lt;/p&gt;

&lt;p&gt;But if your users are in Southeast Asia and you simply need reliable routing capabilities, a managed API removes a large amount of operational work.&lt;/p&gt;

&lt;p&gt;Keep the open-source routing technology.&lt;/p&gt;

&lt;p&gt;Skip the server farm.&lt;/p&gt;

&lt;p&gt;Build your product.&lt;/p&gt;

</description>
      <category>osrm</category>
      <category>routing</category>
      <category>api</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
