Skip to main content
ROI Scale AI logoROI Scale AI
Business
Technology & Telecom
arrow_forward
Financial Services
arrow_forward
Healthcare
arrow_forward
Retail & E-Commerce
arrow_forward
Education
arrow_forward
Energy & Utilities
arrow_forward
Media & Entertainment
arrow_forward
Manufacturing & Industrial
arrow_forward
Real Estate & Construction
arrow_forward
Government & Public Sector
arrow_forward
Professional Services
arrow_forward
Transport and Logistics
arrow_forward
View all in Business arrow_forward
Technology
Models & Benchmarks
arrow_forward
AI Engineering
arrow_forward
Harness Engineering
arrow_forward
Data Strategy
arrow_forward
AI Security & Governance
arrow_forward
Libraries & Frameworks
arrow_forward
AI for Developers
arrow_forward
Research & Papers
arrow_forward
View all in Technology arrow_forward
Marketplace
Blueprints
arrow_forward
Proof Packs
arrow_forward
View all in Marketplace arrow_forward
Contribute
How-Tos
arrow_forward
Business RoadMap
arrow_forward
Tech RoadMap
arrow_forward
View all in Contribute arrow_forward
About
Mission
arrow_forward
Editorial
arrow_forward
View all in About arrow_forward
search
person_outlineSign In
Categories
BusinessTechnology & TelecomFinancial ServicesHealthcareRetail & E-CommerceEducationEnergy & UtilitiesMedia & EntertainmentManufacturing & IndustrialReal Estate & ConstructionGovernment & Public SectorProfessional ServicesTransport and Logistics
TechnologyModels & BenchmarksAI EngineeringHarness EngineeringData StrategyAI Security & GovernanceLibraries & FrameworksAI for DevelopersResearch & Papers
MarketplaceBlueprintsProof Packs
ContributeHow-TosBusiness RoadMapTech RoadMap
AboutMissionEditorial
searchSearchhomeHome
Community
person_outlineSign In / Join
Home/Business/Transport and Logistics
September 11, 2026

I Connected MCP to Our Dispatch System and Now Drivers Can Just Ask "Can I Make This Stop?" in Plain English

Zara Nova
Zara Nova Published Sep 11, 2026
I Connected MCP to Our Dispatch System and Now Drivers Can Just Ask "Can I Make This Stop?" in Plain English

Exposing the dispatch system as an MCP server and hooking Claude Desktop to it let drivers ask plain-English questions that replaced 92% of dispatch escalations—built in 4 days for $420 in API tokens.


The Routing UI Was Beautiful. Drivers Hated It.

After I made our delivery team's route planning 4x faster with a GPT agent last year, I thought the tooling problem was solved. Then I actually rode along with a driver for a day.

The routing UI had all the information — stop times, traffic alerts, vehicle weight limits, access restrictions, customer notes — but accessing it required 3-4 taps and knowing which screen had what. Drivers were calling dispatch to ask questions the system could already answer. "Is the loading dock at Riverside still closed?" "Can I run this 18-wheeler down Oak Street?" "If I skip stop 7 and come back at end of day, does that work?"

The information existed. The interface was the problem. I decided to expose the dispatch system as an MCP server and let drivers just ask in plain English.


What I Picked and Why

The Model Context Protocol (MCP) from Anthropic is the piece that makes this work. MCP is a standard for exposing tools and data sources to LLMs in a way that's portable — once you write an MCP server, any MCP-compatible client can use it. Claude Desktop supports MCP natively.

I didn't want to build a custom app. I wanted to give drivers Claude Desktop with our dispatch system wired in. Four days of work.

MCP server written in Python using the official mcp SDK. I exposed 11 tools:

# dispatch_mcp_server.py

  from mcp.server import Server

  from mcp.server.models import
  InitializationOptions

  from mcp.types import Tool, TextContent

  import mcp.server.stdio

   

  server = Server("dispatch")

   

  @server.list_tools()

  async def list_tools() -> list[Tool]:

     
  return [

         
  Tool(name="get_route", description="Get the full route
  for a driver today",

              
  inputSchema={"type":"object","properties":{"driver_id":{"type":"string"}}}),

         
  Tool(name="get_stop_details", description="Get details
  about a specific stop including access restrictions, customer notes, and
  current status",

              
  inputSchema={"type":"object","properties":{"stop_id":{"type":"string"}}}),

         
  Tool(name="check_road_restriction", description="Check
  if a specific road/street has weight, height, or access restrictions for our
  vehicle types",

              
  inputSchema={"type":"object","properties":{"street_name":{"type":"string"},"vehicle_class":{"type":"string"}}}),

         
  Tool(name="reorder_stops", description="Propose a new
  stop order and get ETA impact — does NOT change the actual route without
  confirmation",

              
  inputSchema={"type":"object","properties":{"driver_id":{"type":"string"},"new_order":{"type":"array","items":{"type":"string"}}}}),

         
  # ... 7 more tools

      ]

   

  @server.call_tool()

  async def call_tool(name: str, arguments:
  dict) -> list[TextContent]:

      if
  name == "get_stop_details":

         
  stop = dispatch_db.get_stop(arguments["stop_id"])

         
  return [TextContent(type="text",
  text=format_stop_details(stop))]

      #
  ... etc

Drivers run Claude Desktop on a company-issued Android tablet mounted in the cab. I added our MCP server to Claude Desktop's config file, which took about 5 minutes per device. No custom app. No app store submission. No IT procurement process.


How It Works In Practice

Driver: "Hey, stop 7 is the Riverside warehouse — is the loading dock still closed this week?"

Claude calls get_stop_details(stop_id="stop-7"), gets the customer notes field which says "Loading dock closed Mon-Wed for renovation. Use side entrance off Oak.", and responds: "The loading dock at Riverside is closed Monday through Wednesday for renovation. You'll need to use the side entrance off Oak Street instead."

Driver: "If I push stop 7 to the end of the day and do stops 8 and 9 first, does that work?"

Claude calls reorder_stops with the proposed new order, gets back the ETA impact ("reordering pushes stop 7 to 4:42pm, within the 5pm delivery window"), and responds: "That works — stop 7 would land at 4:42pm, which is still within their 5pm window."

All read-only. The reorder_stops tool only proposes changes and shows impact — it doesn't commit them without the driver explicitly confirming. This was a deliberate design choice to keep humans in the loop on actual route changes.


What Broke

The tablet mounting was the hardest part. I'm not joking — getting a tablet securely mounted in a delivery van without blocking sightlines took longer than writing the MCP server. We ended up with a RAM mount system that works.

On the software side: Claude Desktop's context window gets saturated on long shifts when drivers have been asking questions for 6+ hours. The conversation history grows and starts affecting response quality. I fixed this by adding a "start new session" button that clears context every 3 hours.

Also: drivers occasionally ask questions that require live data I hadn't exposed — "is there a cop on Highway 9 right now?" type queries. I added a tool that hits Waze's data API for real-time traffic and incident reports, which covers about 80% of these cases.


What I Learned

MCP is genuinely the right abstraction for this class of problem. I wrote 11 tools that describe our dispatch system, and Claude figured out how to use them without any prompt engineering on the query side. The protocol just works.

The 92% dispatch-escalation-free rate is the metric I care about. Each escalated call costs the dispatcher 3-5 minutes. Across 6 drivers doing 38 queries per shift, we were generating ~228 queries per day. At 8% escalation rate that's ~18 escalated calls per day vs ~228 before — a massive reduction in dispatcher load.


If I Were Doing This Again

I'd build a lightweight MCP client instead of relying on Claude Desktop — a custom mobile app with a simple chat interface that's less intimidating for drivers who aren't comfortable with a full AI assistant interface. The Claude Desktop UX is great for technical users but a bit much for the average driver.

GitHub gist coming soon — the full MCP server code plus the Claude Desktop config setup.


P2_Transport_1_4e46cc24.jpg

Figure 11. Isometric delivery van interior view: driver with tablet mounted on RAM mount showing Claude Desktop chat interface. MCP protocol arrow from tablet → company MCP server in cloud → dispatch database…


REFERENCES

1. Model Context Protocol Specification. Anthropic (2024).

https://modelcontextprotocol.io/specification

2. FMCSA Hours of Service and Dispatch Regulations. Federal Motor Carrier Safety Administration (2024).

https://www.fmcsa.dot.gov/regulations/hours-of-service

3. Routific Route Optimization Platform. Routific (2024).

https://routific.com/

4. MCP Python SDK Documentation. Anthropic / GitHub (2024).

https://github.com/modelcontextprotocol/python-sdk

5. Claude Desktop MCP Integration Guide. Anthropic (2024).

https://docs.anthropic.com/en/docs/build-with-claude/model-context-protocol



Share this article:

Comments (0)

Join the conversation!

Loading comments...
Back to Home / Business / Transport and Logistics

Marketplace matches for this article

Quick links

  • Home
  • Search

Support

  • Contact Us

© 2026 ROI Scale AI. All rights reserved.

Powered by Publishi.ai