{
  "markdown": "<div align=\"center\">\n  <img src=\"docs/logo.svg\" width=\"110\" alt=\"CommuteScout logo\">\n  <h1>CommuteScout</h1>\n  <p><b>Live road conditions across 37 states: a map, a route planner, and an\n  AI assistant.<br>Also an MCP server, so your assistant can use it too.</b></p>\n\n[![CI](https://github.com/nicglazkov/commutescout/actions/workflows/ci.yml/badge.svg)](https://github.com/nicglazkov/commutescout/actions/workflows/ci.yml)\n[![Release](https://img.shields.io/github/v/release/nicglazkov/commutescout?color=2f81f7)](https://github.com/nicglazkov/commutescout/releases)\n[![Evals](evals/results/badge.svg)](EVALS.md)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\n  <p>\n    <a href=\"https://commutescout.com\"><b>Open the app</b></a> ·\n    <a href=\"#add-to-claude\">Add to Claude</a> ·\n    <a href=\"#coverage\">Coverage</a> ·\n    <a href=\"#self-hosting-advanced\">Self-hosting</a> ·\n    <a href=\"docs/data-sources.md\">Data</a> ·\n    <a href=\"docs/mcp.md\">MCP tools</a> ·\n    <a href=\"docs/architecture.md\">Architecture</a>\n  </p>\n\n  <p>\n    <a href=\"https://commutescout.com\">\n      <img src=\"docs/try-demo-button.svg\" width=\"230\" alt=\"Open CommuteScout\">\n    </a>\n  </p>\n  <p>\n    No install, no account:\n    <a href=\"https://commutescout.com\"><b>commutescout.com</b></a>\n  </p>\n\n  <a href=\"https://commutescout.com\">\n    <img src=\"docs/demo.gif\" width=\"880\"\n         alt=\"Demo: autocompleting San Jose and San Francisco, planning a route with two traffic-colored options, switching between them, tapping a suggested question for a live AI answer, then flashing the statewide live traffic overlay\">\n  </a>\n</div>\n\nCommuteScout reads 53 official agency feeds (CHP dispatch, state DOT\nclosures and incidents, chain controls, cameras, message signs, wildfire\nperimeters, road weather, toll prices) and turns them into one live\npicture of the road. Look at the map, plan a route and see what is\nactually on it, or ask about a drive in plain English. The same data is\nserved over [MCP](docs/mcp.md), so Claude and other AI assistants can use\nit as a tool instead of guessing about traffic.\n\n## What you get\n\n- **A live national map:** incidents by type, closures by class, chain\n  controls, wildfires with real burn footprints, roadside weather\n  stations, roughly 18,000 traffic cameras, and every message sign\n  currently displaying something.\n- **Toll and express-lane pricing:** current rates on tolled corridors\n  and bridges, drawn along the actual carriageway with hand-verified\n  gantry positions, so a price tag never floats over the wrong road.\n- **A route planner that knows the roads:** autocomplete, route options,\n  turn-by-turn directions, live conditions along the way, and print,\n  GPX, KML, or share-link export.\n- **An assistant that reads the feeds:** plan a route, tap a suggested\n  question, and the answer streams in from the same live data with\n  per-source timestamps.\n- **Plain-English incident detail:** CHP dispatch logs are translated\n  from radio shorthand into readable timelines, with each unit's arrival\n  and clearance in order.\n- **Watch areas:** draw a circle, polygon, or route corridor and get a\n  push or email alert when an incident, closure, chain control, or\n  wildfire appears inside it.\n- **An MCP server:** ten tools over curated corridors and regions, with\n  a [closure taxonomy](docs/data-sources.md#the-closure-taxonomy) that\n  keeps a closed on-ramp from reading as a closed highway.\n- **Public evals:** 91 golden questions on recorded fixtures, scored by\n  an LLM judge that is never one of the evaluated models. The\n  [scorecard](EVALS.md) and its full history are committed to this repo.\n\n<table>\n  <tr>\n    <td width=\"34%\"><img src=\"docs/shots/planner.png\" alt=\"Route planner with two route options, turn-by-turn directions, and suggested questions\"><br><sub><b>Plan a trip.</b> Autocomplete, route options, directions, print or export.</sub></td>\n    <td width=\"34%\"><img src=\"docs/shots/answer.png\" alt=\"An AI answer about a drive, with live speeds and conditions\"><br><sub><b>Ask about it.</b> One tap on a suggested question; the answer reads the live feeds.</sub></td>\n    <td width=\"32%\"><img src=\"docs/shots/map.png\" alt=\"The map with per-layer filters and live counts\"><br><sub><b>Or just look.</b> Every layer toggleable, from full closures to blank signs.</sub></td>\n  </tr>\n</table>\n\n## Coverage\n\nThe map covers **37 states**. Coverage is not uniform, because it is\nbuilt from what each agency actually publishes: some states offer every\nlayer keylessly, some publish roadwork only, and a few offer nothing\nusable. The map says so directly, shading unsupported states and naming\nwhat is missing rather than showing an empty region.\n\n**California is the deepest.** It is the only state with CHP dispatch\nlogs, per-lane closure detail, chain-control levels, and CAL FIRE\nperimeters. The assistant and the MCP tools answer for every covered\nstate, but a California question gets that richer detail, while\nelsewhere they answer from the normalized state DOT feeds.\n\nPer-state matrix of what is live and why the gaps exist:\n**[docs/state-coverage.md](docs/state-coverage.md)**. States not yet\nintegrated, with the reason for each:\n**[docs/state-expansion-audit.md](docs/state-expansion-audit.md)**.\n\n## Get started\n\nThe fastest way to use CommuteScout is the hosted app:\n**[commutescout.com](https://commutescout.com)**. Nothing to run, always\non the latest release, feeds already warm.\n\n|  | [commutescout.com](https://commutescout.com) | Self-hosted |\n|---|---|---|\n| Setup | None, just open it | `pip install` or Cloud Run deploy |\n| Updates & feeds | Always current, managed | You redeploy and manage keys |\n| AI assistant | Included | Bring your own Anthropic API key |\n| Watch-area alerts | Included (invite-only trial) | Extra setup: Firestore, push keys, a scheduler |\n| Upcoming premium features | Land here first | Not planned |\n| Support | Actively maintained | Best effort via issues |\n\n### Add to Claude\n\nGive Claude live road data with a custom connector:\n\n```\nhttps://mcp.commutescout.com/mcp\n```\n\nSee it on the site: [commutescout.com/mcp](https://commutescout.com/mcp).\nLocal stdio setup and the full tool reference: [docs/mcp.md](docs/mcp.md).\n\n### Self-hosting (advanced)\n\nEverything here is MIT licensed and the core runs with zero accounts or\nkeys:\n\n```json\n{\n  \"mcpServers\": {\n    \"commutescout\": {\n      \"command\": \"uvx\",\n      \"args\": [\"--from\", \"git+https://github.com/nicglazkov/commutescout\", \"ca-roads-mcp\"]\n    }\n  }\n}\n```\n\nThe web app is `pip install \".[demo]\"` then `ca-roads-demo` with an\n`ANTHROPIC_API_KEY` in the environment. For your own Cloud Run copy\n(small enough for the free tier most months), optional feed keys, map\nsnapshot publishing, and the watch-areas setup, see\n**[docs/deploy.md](docs/deploy.md)**.\n\nSelf-hosted deployments are supported on a best-effort basis: issues and\nPRs are very welcome, but there is no support guarantee for deployments\nI do not run.\n\n## The data\n\nCHP incidents and dispatch logs; Caltrans and 30-plus other state DOT\nclosures, incidents, cameras, message signs, and road weather; chain\ncontrols from California and the Pacific Northwest; WFIGS and CAL FIRE\nwildfires with perimeters; NWS alerts; USGS quakes; toll and express\nlane pricing; and optional TomTom and 511 SF Bay feeds.\n\nEvery response carries per-source `data_as_of` timestamps, and a failing\nfeed is never silent: the last good data is served, flagged stale, with\nthe error attached and surfaced all the way to the UI.\n\nFull source table, refresh rates, and the closure taxonomy:\n**[docs/data-sources.md](docs/data-sources.md)**.\n\n## How good are the answers?\n\nAn eval suite scores the assistant against recorded fixtures: four\nscenarios (a Sierra storm day, a fire-closure day, a quiet day, and a\nbyte-for-byte capture of a real fire-season day), 91 golden questions\nwith ground truth including traps, and an LLM judge that is never an\nevaluated model.\n\nRuns are triggered manually rather than on every release. Firing a full\nsuite on each release turned out to cost more per month than the hosted\nassistant serves, so it now runs when a prompt or tool change actually\nwarrants re-scoring. Every run appends to a committed history file, so\nthe trend stays public: **[EVALS.md](EVALS.md)**.\n\n## Under the hood\n\nThree cleanly layered Python packages sharing one data spine: a feed\nlayer with stale-while-revalidate caches and parsers that salvage\ncomplete records from truncated feeds, the MCP surface, and the web app.\n\nThe map does not boot through the API. A publisher builds the whole\ncoverage area once per cycle and uploads pre-gzipped snapshots to object\nstorage behind a CDN, so first paint is an edge-cached static file and no\nvisitor request waits on a server assembling JSON. A map left open on a\nwall monitor keeps updating in place indefinitely.\n\nDiagram and design notes: **[docs/architecture.md](docs/architecture.md)**.\n\n## Contributing\n\nPRs welcome. The test suite is fixture-based and runs without network\naccess. Start with **[CONTRIBUTING.md](CONTRIBUTING.md)**, and see\n[adding a data source](docs/adding-a-source.md) if you want to wire up a\nnew feed.\n\n## License & sustainability\n\nCommuteScout is [MIT licensed](LICENSE): the map, the planner, the MCP\nserver, and every data parser, with no open-core carve-outs. The hosted\napp at [commutescout.com](https://commutescout.com) will soon offer\noptional premium features (deeper history, more alerts); that is what\nfunds the servers and keeps the free tier free.\n\n## Disclaimer\n\nData comes from CHP, Caltrans and the other state DOTs listed in\n[docs/state-coverage.md](docs/state-coverage.md), plus WFIGS, CAL FIRE,\nNWS, and USGS. Not affiliated with any agency. Conditions change faster\nthan any feed; verify before you drive (511 or your state DOT, and\n[quickmap.dot.ca.gov](https://quickmap.dot.ca.gov) in California).\n\nMap tiles, routing, and place-name lookup come from Stadia Maps (data\n(c) OpenStreetMap contributors), so that service sees the coordinates\ninvolved. Fonts and map libraries are served locally.\n",
  "bytes": 10107,
  "sha": "1273576374919618d2bb37e73f55974932db83f7e8f9135ecd0b2f37c7fa6a34",
  "repo_slug": "nicglazkov/commutescout",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_nicglazkov_commutescout_25eefb5f/readme"
}