# Ny Dmv

> New York State DMV MCP — registered vehicles and EV adoption by county/ZIP/make,

- name: io.github.pipeworx-io/ny-dmv
- version: 0.1.1
- connection class: R0 (autonomous)
- trust: 97/100
- quality: –/100 (not scored)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.pipeworx-io%2Fny-dmv
- tools: https://api.protogrid.dev/v1/servers/io.github.pipeworx-io%2Fny-dmv/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "ny-dmv": {
      "type": "http",
      "url": "https://gateway.pipeworx.io/ny-dmv/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 99
- freshness: 100
- provenance: 90
- drivers: +repository +namespace-matches-repo +website +reachable +uptime-97% +updated-26d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality –/100 (not scored)

Not scored: fewer than three checks apply, usually because no remote answered a credential-free probe or the server is a local package.

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-03-26; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: n/a (weight 30)

- n/a `tools.descriptions`, `tools.description_length`, `tools.schemas`, `tools.annotations`, `tools.directory_hints`, `tools.token_cost`, `tools.api_dump`: tool list unknown (behind auth, not probed, or empty)

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool list unknown

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: unknown
- tools last changed: 2026-10-15T06:20:55.516Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.pipeworx-io/ny-dmv.svg)](https://protogrid.dev/servers/io.github.pipeworx-io/ny-dmv)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-15 `ny_dmv_driving_schools` removed
  - Find driving schools licensed by the New York State DMV, with school name, street address, city, ZIP, phone number, DMV school number, coordinates, and which courses each school is licensed to teach (5-hour pre-licensing, auto, motorcycle, bus, truck, tractor-trailer). Covers 573 licensed schools statewide, answering "licensed driving schools in Brooklyn", "which New York driving schools teach the 5-hour pre-licensing course", "motorcycle driving school near Syracuse", or "CDL tractor-trailer schools in New York".
- 2026-10-15 `ny_dmv_road_test_sites` removed
  - List New York State DMV road test sites — where the driving test is actually administered — with the city, county, ZIP, coordinates, written directions to the starting point, and which tests each site gives (Auto, Motorcycle, CDL A/B/C, Farm, RV). Covers 444 active sites statewide, answering "where can I take my road test near Albany", "which New York road test sites offer the motorcycle test", or "CDL road test sites in Erie County". For the DMV counter that issues the licence use ny_dmv_offices.
- 2026-10-15 `ny_dmv_ev_adoption` removed
  - Measure electric-vehicle adoption in New York State: how many registered vehicles carry the ELECTRIC fuel code in each county, ZIP code, city, make or model year, and what share of all registered vehicles in that scope they represent. Reads the NYS DMV record-level registration file, so it answers "how many EVs are registered in New York", "EV share in Westchester County", "which New York county has the most electric vehicles", "how many electric Teslas are registered in Brooklyn", and how EV registrations break down by model year. New York files every plug-in vehicle under one ELECTRIC code, so battery-electric and plug-in hybrid vehicles arrive combined; Washington separates them, in wa_dmv_ev_population.
- 2026-10-15 `ny_dmv_vehicle_registrations` removed
  - Count vehicles registered in New York State from the NYS DMV record-level registration file, broken down by county, ZIP code, city, make, model year, body type, registration class or fuel type. Each of the 12.6 million source rows is one registration record, so this answers "how many cars are registered in Kings County", "how many Teslas are registered in New York", "how many pickup trucks are registered in ZIP 11201", "which New York county has the most registered vehicles", and how many registrations carry a scofflaw, suspension or revocation flag. County names are unabbreviated and upper case, with Brooklyn filed as KINGS. For electric-vehicle share use ny_dmv_ev_adoption; for a DMV office address use ny_dmv_offices.
- 2026-10-15 `classify_row` removed
  - Cheap categorization: given a company and a list of candidate labels, decide which labels apply — the most common GTM/AI usage shape (tagging a list by industry, ICP fit, etc.), one small model call. Same evidence contract as research_row: each label comes back {label, applies, evidence_url, quote, status: found|inferred|not_established} — "found" only when the model's quote is independently verified as a verbatim substring of the text used. Pass text directly (cheapest — no fetch) or entity.domain to fetch the homepage once as a fallback. No text and no domain means every label is not_established with no model call made.
- 2026-10-15 `research_row` removed
  - Claygent-style per-row research: answer ONE question about ONE company and return a JSON object matching your output_schema, with every field wrapped in its own evidence — {value, evidence_url, quote, status}. status is NEVER self-reported by the model: "found" means this code independently verified the model's quote is a VERBATIM substring of text actually fetched; "inferred" means a value was given but the quote could not be verified; "not_established" means no source answered the field, and its value is always null — never guessed, never a blended score. Sources: "web" fetches the company's own site (entity.domain required — homepage, /about, /leadership) via fetch_url; "catalog" checks entity_profile (SEC EDGAR; resolved:false for a private company is expected, not a failure); "both" (default) tries both. max_cost (USD, default 0.02, max 0.50) scales how many pages are fetched and refuses up front if it is too small to pay for even one extraction call (floor $0.002) — never silently overspends. A row where every source comes back empty costs nothing: every field is mechanically not_established with NO model call made. For a boolean/derived field (e.g. "does this company sell to healthcare"), the quote only has to SUPPORT the value — a descriptive sentence about customers/products counts, the source need not state the answer verbatim. leadership_page_status ("fetched"|"not_found"|"not_attempted", plus leadership_note) says plainly whether a leadership/team page was actually read, so a named-person field (head_of_sales) coming back not_established is distinguishable from "this company just doesn't publish one" vs. "we never checked". model_output_empty:true means the model returned nothing usable (a transport/budget problem) — every field is not_established for THAT reason, never read as 20 individual "no" judgments. Use with a fixed question + schema across many rows for "Claygent over N companies with a hard cost cap" (composes with batch callers). For picking from a fixed label list instead of extracting open fields, use classify_row (cheaper, one model call).
- 2026-10-15 `archive_compare` removed
  - What changed on a web page between two dates? Resolves the archived capture nearest each date (Internet Archive Wayback Machine, Common Crawl, Arquivo.pt), extracts the readable text of both, and returns a text-level diff: the segments removed and added, a similarity score, and both capture timestamps with their gaps from the requested dates. It diffs readable text, not markup, so a restyled page with the same words reads changed:false. Identical captures answer changed:false with the reason (same capture, identical content digest, or identical text), never an empty diff. A date with no capture within max_gap_days (default 30) answers status "no_capture", naming which side is missing and the nearest captures to it. Typical uses: how a privacy policy, terms of service, pricing or product page changed; whether a statement was on a page at a given time.
- 2026-10-15 `archive_evidence` removed
  - What did a web page say on a given date? Finds the archived capture of a URL nearest that date across the Internet Archive Wayback Machine, Common Crawl and Arquivo.pt, reads it, and returns the readable text (HTML stripped) with the capture timestamp, a link to the archived copy, and the GAP between the date asked for and the capture actually used (e.g. "Captured 1.5 day(s) before the requested date"). One call replaces the find-capture, fetch-record, parse-HTML chain. If no archive holds a capture within max_gap_days (default 30) it answers status "no_capture" and names the nearest capture before and after the date with their gaps, so a distant capture is never passed off as the page on that date. Every archive's outcome is listed in sources[]; one that timed out or errored says so with its upstream status, and if all of them failed the answer is error "archives_unavailable", not no_capture. Captures are immutable and cached by capture id; served_from says whether the text came from cache or upstream. Use archive_compare to see what changed between two dates.
- 2026-10-15 `search_within` removed
  - Semantic search INSIDE a fetched record. Pass the text you already pulled (e.g. a SEC 10-K body, an article, a long tool result) plus a natural-language query; get back the top-N passages with character offsets and similarity scores. Use when the record is too big to cram into the prompt — search_within saves context, returns only the passages that matter, and every passage carries an offset so the agent can verify a verbatim quote. Pairs with ask_pipeworx_grounded: fetch with the gateway, ground over the relevant passages instead of the whole document. BGE-base-en embeddings + cosine over 500-char overlapping windows; cap is 200K chars (longer inputs are truncated and flagged).
- 2026-10-15 `ask_pipeworx_grounded` removed
  - Hallucination-resistant answer mode for high-stakes reads. Same routing as ask_pipeworx — picks the right tool from 6,821 across 1796 sources, fills arguments, fetches the data — then EXTRACTS the answer using ONLY what the tool result contains. Returns {answer, evidence (verbatim quote), confidence, source, fetched_at, refusal_reason:null} on success, OR an explicit refusal {answer:null, refusal_reason:"not_in_source"|"no_tool_match"|"tool_error"|"data_truncated"|"llm_error"} when the data doesn't directly answer. Use whenever an answer will be quoted, cited, or acted on, and the agent must not invent facts (financial verdicts, legal claims, medical lookups, public statements). Costs one extra LLM call vs ask_pipeworx — prefer ask_pipeworx for casual lookups.

Full history: https://api.protogrid.dev/v1/servers/io.github.pipeworx-io%2Fny-dmv/changes

## Remotes

- https://gateway.pipeworx.io/ny-dmv/mcp (streamable-http, auth none, reachable true, uptime30d 0.974359)

## Packages

_none_

## Tools (0)

_none observed_
