# US State DMV

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/pipeworx-io/mcp-us-dmv  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/us-state-dmv

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

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "us-state-dmv": {
    "command": "npx",
    "args": ["-y","us-state-dmv"]
  }
}
```

## Documentation & README

# @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

| Tool | States | What it returns |
|---|---|---|
| `dmv_vehicle_registrations` | CA, DE, MD, NY, PA, TX, WA | Registered vehicle counts by county, ZIP, fuel, make, model year or class |
| `dmv_ev_adoption` | CA, CT, DE, HI, MD, NY, PA, WA | Battery-electric and plug-in hybrid counts, plus EV share where a denominator exists |
| `dmv_wait_times` | NC, OR | Live average/max wait, customers queued, open-or-closed per field office |
| `dmv_offices` | CA, DC, IA, IN, MO, NC, NJ, NY, TN, WI | Addresses, hours, coordinates, and which services each office performs |
| `dmv_ca_forms` | CA | Official DMV form name, REG/DL number and download page |
| `dmv_ca_insurance_lookup` | CA | Insurer 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

- California — [data.ca.gov Vehicle Fuel Type Count by Zip Code](https://data.ca.gov/dataset/vehicle-fuel-type-count-by-zip-code) (CKAN `datastore_search_sql`), plus the `dmv.ca.gov` WP REST endpoints for [field offices](https://www.dmv.ca.gov/portal/wp-json/wp/v2/dmv_field-office), forms and the NAIC insurer lookup
- New York — [data.ny.gov](https://data.ny.gov) Socrata `w4pv-hbkt` (registrations), `9upz-c7xg` (offices)
- Washington — [data.wa.gov](https://data.wa.gov) Socrata `f6w7-q2d2` (EV population), `hmzg-s6q4` (registration transactions)
- Maryland — [opendata.maryland.gov](https://opendata.maryland.gov) Socrata `db8v-9ewn`, `qtcv-n3tc`, `tugr-unu9`
- Pennsylvania — [PennDOT ArcGIS EV registrations by county](https://gis.penndot.pa.gov/gis/rest/services/opendata/evregistrationscounty/MapServer/0)
- Delaware — [data.delaware.gov](https://data.delaware.gov) Socrata `ity3-3688`
- Hawaii — [opendata.hawaii.gov](https://opendata.hawaii.gov) DBEDT cumulative hybrid/EV series
- Texas — [data.texas.gov](https://data.texas.gov) Socrata `cbmj-zeje`
- Connecticut — [data.ct.gov](https://data.ct.gov) Socrata `y7ky-5wcz`
- North Carolina — [NCDOT Instant Wait Time service](https://wait.services.ncdot.gov/IWT/IWTWeb/XmlStats.aspx?controller=IWT_UnitsListXML&UnitID=2)
- Oregon — [Oregon DMV wait times](https://dmv2u2.odot.state.or.us/waittimes/home/map)
- Missouri — [data.mo.gov](https://data.mo.gov) Socrata `835g-7keg` · Wisconsin — [WisDOT ArcGIS](https://dotmaps.wi.gov/arcgis/rest/services/agohub/DMV_SERVICE_CENTER/MapServer/0) · Indiana — [BMV branch map](https://www.in.gov/bmv/branch-locations-and-hours/bmv-branch-map/) · Tennessee — [TN SAFETY ArcGIS](https://tnmap.tn.gov/arcgis/rest/services/SAFETY/DriverServiceCenters/MapServer/0) · DC — [opendata.dc.gov](https://opendata.dc.gov) · Iowa — [Iowa DOT ArcGIS](https://data.iowadot.gov) · New Jersey — [data.nj.gov](https://data.nj.gov) Socrata `t6tk-mr48`

## Quick Start

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

```json
{
  "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:

```json
{
  "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

- [All tools and guides](https://github.com/pipeworx-io/examples)
- [pipeworx.io](https://pipeworx.io)

## License

MIT

