Odel
US State DMV

US State DMV

@pipeworx-ioTypeScriptMITUpdated 1mo ago

US state DMV data: vehicle and EV registrations, office locators, live wait times

Server endpointStreamable HTTPProbe failed

This is the third-party server itself — Odel doesn't run it. Hitting this URL directly talks straight to the upstream server with no auth or proxying. Connect through Odel to front it with managed auth.

@pipeworx/us-dmv

US state DMV data: vehicle and electric-vehicle registrations, DMV office locators with per-office services, live field-office wait times, and California form and insurer lookups. Keyless.

Why coverage is state-by-state

This pack came out of a survey of all 50 states plus DC (2026-07-29). Roughly 30 states publish nothing machine-readable about motor vehicles — annual PDFs at best. So each tool takes a state argument backed by a short, explicit list, and an unsupported state returns { found: false, reason: 'state_unsupported', hint, supported_states } rather than an empty result that reads like a data bug.

Grain differs per state and is not normalisable away, so every response reports grain, as_of, source, and — where a row list can be cut off — truncated.

Tools

ToolStatesWhat it returns
dmv_vehicle_registrationsCA, DE, MD, NY, PA, TX, WARegistered vehicle counts by county, ZIP, fuel, make, model year or class
dmv_ev_adoptionCA, CT, DE, HI, MD, NY, PA, WABattery-electric and plug-in hybrid counts, plus EV share where a denominator exists
dmv_wait_timesNC, ORLive average/max wait, customers queued, open-or-closed per field office
dmv_officesCA, DC, IA, IN, MO, NC, NJ, NY, TN, WIAddresses, hours, coordinates, and which services each office performs
dmv_ca_formsCAOfficial DMV form name, REG/DL number and download page
dmv_ca_insurance_lookupCAInsurer NAIC codes by company name

Auth

None. Every upstream is a public state endpoint. _apiKey is accepted on the Socrata-backed tools and passed as X-App-Token; the public rate limits are ample without it.

Per-state gotchas worth knowing

These are all live-verified behaviours, not guesses:

  • WA registrations count transactions, not fleet size. hmzg-s6q4 publishes registration transactions per month (King County runs ~160k/month), so it cannot answer "how many vehicles are registered here". The tool scopes to one fiscal year or month and says so in grain. For a Washington fleet count of plug-in vehicles use dmv_ev_adoption, which reads the VIN-level EV population file instead.
  • NY mixes vehicle types. w4pv-hbkt holds trailers, boats and snowmobiles alongside road vehicles; the tool defaults to record_type=VEH. County names are unabbreviated, so Brooklyn is KINGS.
  • CA snapshots are one resource per year, 2019–2026, and the rows carry the prior December 31 as their as-of date. Grouping by ZIP surfaces a literal OOS bucket (out-of-state registrants) that outranks every real ZIP — filter it out for a ZIP ranking.
  • CA "OTHER/UNK" make absorbs small-count suppression, so it can outrank real makes.
  • MD spells one county two ways: PRINCE GEORGE'S in the registration dataset, PRINCE GEORGES in the EV dataset. MD also reports the registrant's county of residence, so a few out-of-state counties appear with small counts.
  • PA quarters are columns, not rows (TOTAL_EV_Q1..Q4); the tool picks the latest quarter that actually carries data. TOTAL_EV is BEV + PHEV — conventional hybrids sit in HEV.
  • NC and OR waits read zero and closed outside business hours. That is the agency feed reporting an idle queue, not a missing value, so the response flags it in note rather than erroring. NC's feed is a unit tree (root, districts, then offices); the pack keeps leaf units.
  • OR has no JSON endpoint — the office array is parsed out of the server-rendered page. Upstream also ships per-office ipAddress and machine fields, which are dropped here.
  • TX was last refreshed in 2023 and is statewide-annual only. CT was last refreshed in February 2025. Both report this in note rather than pretending to be current.
  • NJ's dmv_offices entries are inspection and emission-repair facilities, not licensing offices, and the upstream county column disagrees with city on some rows.
  • DC coordinates need reprojection — the layer stores State Plane, so the pack requests outSR=4326 geometry rather than reading XCOORD/YCOORD.
  • CA form search is the website's own relevance ranking, so a query like "title transfer" can put a vessel-title form first.
  • Maryland's WAF is picky about SoQL query shape. opendata.maryland.gov answers both a wildcard like '%x%' clause and a two-condition where with a Cloudflare interstitial (403 "Just a moment...") instead of data — reproducibly, and only on that domain: NY, WA and CT accept the identical clauses. It only reproduces from a deployed Worker, never from a laptop, so local testing will not catch it. All four Maryland paths therefore send the one shape that gets through — a single year_month condition — and narrow to a county or ZIP in code, which is cheap because one month is a few hundred rows.
  • WisDOT's ArcGIS server is intermittently slow — it overran a 12s budget on the first production call and answered in ~1s on retry. Every tool retries once and then returns { error, hint } telling the caller to retry, rather than reporting an upstream stall as missing data.

Data sources

Quick Start

Add to your MCP client (Claude Desktop, Cursor, Windsurf, etc.):

{
  "mcpServers": {
    "us-dmv": {
      "url": "https://gateway.pipeworx.io/us-dmv/mcp"
    }
  }
}

Or connect to the full Pipeworx gateway for access to all 1370+ data sources:

{
  "mcpServers": {
    "pipeworx": {
      "url": "https://gateway.pipeworx.io/mcp"
    }
  }
}

Using with ask_pipeworx

Instead of calling tools directly, you can ask questions in plain English:

ask_pipeworx({ question: "your question about US State DMV data" })

The gateway picks the right tool and fills the arguments automatically.

More

License

MIT