CommuteScout reads 53 official agency feeds (CHP dispatch, state DOT
closures and incidents, chain controls, cameras, message signs, wildfire
perimeters, road weather, toll prices) and turns them into one live
picture of the road. Look at the map, plan a route and see what is
actually on it, or ask about a drive in plain English. The same data is
served over MCP, so Claude and other AI assistants can use
it as a tool instead of guessing about traffic.
What you get
- A live national map: incidents by type, closures by class, chain
controls, wildfires with real burn footprints, roadside weather
stations, roughly 18,000 traffic cameras, and every message sign
currently displaying something.
- Toll and express-lane pricing: current rates on tolled corridors
and bridges, drawn along the actual carriageway with hand-verified
gantry positions, so a price tag never floats over the wrong road.
- A route planner that knows the roads: autocomplete, route options,
turn-by-turn directions, live conditions along the way, and print,
GPX, KML, or share-link export.
- An assistant that reads the feeds: plan a route, tap a suggested
question, and the answer streams in from the same live data with
per-source timestamps.
- Plain-English incident detail: CHP dispatch logs are translated
from radio shorthand into readable timelines, with each unit's arrival
and clearance in order.
- Watch areas: draw a circle, polygon, or route corridor and get a
push or email alert when an incident, closure, chain control, or
wildfire appears inside it.
- An MCP server: ten tools over curated corridors and regions, with
a closure taxonomy that
keeps a closed on-ramp from reading as a closed highway.
- Turn-by-turn navigation on your phone: native iOS and Android
apps that speak what is ahead on the route, not just the next turn.
Closures, crashes, chain controls and fires are announced by distance
and filtered to your direction of travel, so a northbound ramp closure
stays quiet when you are heading south. See
commutescout-app.
- Plugins, and a protocol for them: Flare is an
open spec any source can implement to put its own alerts on the map.
Plugins appear in a marketplace, are labelled by how far they have
been vetted, and an unreviewed one can never close a road for a
driver. A reference plugin and its conformance tests live in this repo.
- A public API: the same ten tools over plain HTTP, with an OpenAPI
document, one error envelope, and keys with published rate limits.
Nothing to sign up for to try it.
- Public evals: 91 golden questions on recorded fixtures, scored by
an LLM judge that is never one of the evaluated models. The
scorecard is a dated snapshot that names the version it
reflects, not a release gate; it and its full history are committed
to this repo.
 Plan a trip. Autocomplete, route options, directions, print or export. |  Ask about it. One tap on a suggested question; the answer reads the live feeds. |  Or just look. Every layer toggleable, from full closures to blank signs. |
 Add a plugin. Each card says what it covers, what it reports, and whether anyone has reviewed it. |  Or build on it. Ten tools over plain HTTP, one error envelope, published rate limits. | |
Coverage
The map covers 37 states. Coverage is not uniform, because it is
built from what each agency actually publishes: some states offer every
layer keylessly, some publish roadwork only, and a few offer nothing
usable. The map says so directly, shading unsupported states and naming
what is missing rather than showing an empty region.
California is the deepest. It is the only state with CHP dispatch
logs, per-lane closure detail, chain-control levels, and CAL FIRE
perimeters. The assistant and the MCP tools answer for every covered
state, but a California question gets that richer detail, while
elsewhere they answer from the normalized state DOT feeds.
Per-state matrix of what is live and why the gaps exist:
docs/state-coverage.md. States not yet
integrated, with the reason for each:
docs/state-expansion-audit.md.
Get started
Open commutescout.com. Nothing to run,
nothing to sign up for, feeds already warm. The phone apps are in
commutescout-app.
Watch areas and the assistant are free on the hosted app; watch-area
accounts need approval for now, because each one polls on your behalf.
Add to Claude
Give Claude live road data with a custom connector:
https://mcp.commutescout.com/mcp
See it on the site: commutescout.com/mcp.
Local stdio setup and the full tool reference: docs/mcp.md.
Running it yourself
The code is MIT licensed and the repository is complete, so nothing
stops you running a copy. It is worth being straight about what that
takes: a Cloud Run deployment, credentials for a dozen state feeds, a
Firestore database, map snapshot publishing, a scheduler for watch
areas, and a paid map provider. Keeping that current is most of the work
of the project, and it is not a path I recommend or support.
The MCP server alone is the reasonable exception, since it needs no
accounts or keys:
{
"mcpServers": {
"commutescout": {
"command": "uvx",
"args": ["--from", "git+https://github.com/nicglazkov/commutescout", "ca-roads-mcp"]
}
}
}
Read the code, lift what is useful, open an issue if something here is
wrong. docs/deploy.md documents the deployment for the
sake of the record rather than as a recipe to follow.
The data
CHP incidents and dispatch logs; Caltrans and 30-plus other state DOT
closures, incidents, cameras, message signs, and road weather; chain
controls from California and the Pacific Northwest; WFIGS and CAL FIRE
wildfires with perimeters; NWS alerts; USGS quakes; toll and express
lane pricing; and optional TomTom and 511 SF Bay feeds.
Every response carries per-source data_as_of timestamps, and a failing
feed is never silent: the last good data is served, flagged stale, with
the error attached and surfaced all the way to the UI.
Full source table, refresh rates, and the closure taxonomy:
docs/data-sources.md.
How good are the answers?
An eval suite scores the assistant against recorded fixtures: four
scenarios (a Sierra storm day, a fire-closure day, a quiet day, and a
byte-for-byte capture of a real fire-season day), 91 golden questions
with ground truth including traps, and an LLM judge that is never an
evaluated model.
Runs are triggered manually rather than on every release. Firing a full
suite on each release turned out to cost more per month than the hosted
assistant serves, so it now runs when a prompt or tool change actually
warrants re-scoring. Every run appends to a committed history file, so
the trend stays public: EVALS.md.
Under the hood
Three cleanly layered Python packages sharing one data spine: a feed
layer with stale-while-revalidate caches and parsers that salvage
complete records from truncated feeds, the MCP surface, and the web app.
The map does not boot through the API. A publisher builds the whole
coverage area once per cycle and uploads pre-gzipped snapshots to object
storage behind a CDN, so first paint is an edge-cached static file and no
visitor request waits on a server assembling JSON. A map left open on a
wall monitor keeps updating in place indefinitely.
Diagram and design notes: docs/architecture.md.
Contributing
PRs welcome. The test suite is fixture-based and runs without network
access. Start with CONTRIBUTING.md, and see
adding a data source if you want to wire up a
new feed.
License & sustainability
CommuteScout is MIT licensed: the map, the planner, the MCP
server, and every data parser, with no open-core carve-outs. The hosted
app at commutescout.com will soon offer
optional premium features (deeper history, more alerts); that is what
funds the servers and keeps the free tier free.
Disclaimer
Data comes from CHP, Caltrans and the other state DOTs listed in
docs/state-coverage.md, plus WFIGS, CAL FIRE,
NWS, and USGS. Not affiliated with any agency. Conditions change faster
than any feed; verify before you drive (511 or your state DOT, and
quickmap.dot.ca.gov in California).
Routing and place-name lookup come from Stadia Maps, which sees the
coordinates involved. The base map is drawn from this project's own
map files (built from the Protomaps OpenStreetMap build, served from
maps.commutescout.com on Cloudflare R2) on the website and in the
phone apps, so no third party sees where the map is being looked at;
the Positron and Bright styles on the website load their tiles from
OpenFreeMap instead, which sees the viewer's address and map area.
Fonts and map libraries are served locally.