DMC-12 Mark Miller Subaru / dmc-12
endpoint live · spec 2026-06-10 · DMC-12 v0.6 · UCP v1
SLC, Utah First dealership in North America with a public MCP + A2A + UCP surface.

The first dealership you can talk to as an AI agent.

One production endpoint. Real inventory. Real 30‑minute quotes, real soft holds, and the entry point to an agentic deal that carries forward through PromisePath (coming soon). Connect from Claude, ChatGPT, Gemini, or your own agent, or wire it straight into your partner stack.

May 4, 2026 The first agent-to-agent car deal in U.S. history was completed at Mark Miller Subaru, between a CarEdge buyer agent and Mark Miller Subaru over the dmc-12 protocol.

MCP URL
Agent
Claude · ChatGPT · Gemini · your stack
Authenticates via Auth0 (DCR + PKCE for public, client credentials for partners).
MCP / A2A
Endpoint
mm-inventory-mcp · Cloud Run
11 tools at MM. Scope-gated. 60 RPM burst. 90-day audit trail.
hourly sync
Source of truth
MM live inventory
mm_inventory.vehicles — asking price, status, VINs, photos. Freshness ≤ 3600s.

After the quote, dmc-12 initiates the deal. PromisePath (coming soon) carries it forward.

01 / What's happening here

Three open protocols. One dealership behind them.

If you're not a protocol person: MCP lets an agent use our tools. A2A lets two agents speak directly. UCP lets a merchant publish what they sell and how an agent can transact. We speak all three.

MCP
Model Context Protocol
An open wire protocol for AI agents to discover and call tools on remote servers — the same rail Claude, ChatGPT, and Gemini speak.
A2A v1.0
Agent-to-Agent
A signed Agent Card at a canonical URL that lets another agent verify who we are and what we'll do, before the first request.
UCP v1
Universal Commerce Protocol
A manifest describing what a merchant sells, how fresh inventory is, and which capabilities (quote, reserve, hand-off) are safe for an agent to call.
02 / Tool inventory

Eleven tools at MM. Scope-gated. MM keeps negotiation off — every quote is at asking price.

Public (consumer) agents see the six read tools. Named partners see all ten grid tools plus initiate_deal_handoff. The tool catalog returned by tools/list is filtered by caller class at the server.

inventory:read
search_inventory
Search MM inventory. Optional natural-language query (omit it for a structured filter+sort, no embedding cost); agent-controlled sort by relevance, price, mileage, or year. Up to 25 results, public fields.
inventory:read
get_vehicle_by_vin
Look up one vehicle by VIN. Returns public fields and a found flag.
inventory:read
check_availability
Batch status check for up to 50 VINs — available, reserved, sold, pending, in_transit.
inventory:read
list_inventory
Structured-filter paginated listing — exact year or a min/max year range, make, model, trim, price window, mileage cap.
pricing:read
get_pricing_disclosure
Itemized out-the-door estimate — taxes, doc fee, title, registration. Read-only; non-binding; live at MM.
inventory:read
list_stores
Canonical rooftop metadata — name, structured address, website — for every store. Resolves the store_code on each vehicle to a named, located dealership. No parameters; read-only.
quote:write
request_quote
Issue a 30-minute quote at the listed asking price. No parameter accepts a proposed price. Carries an optional non-binding, itemized out-the-door estimate — vehicle price + doc fee + title + registration + tax line items, plus fee/tax totals — sourced from pricing disclosure, live at MM.
reservation:write
create_reservation
Convert an open quote into a 30-minute soft hold. Non-binding. One active hold per VIN.
reservation:write
release_reservation
Release a reservation you own. Idempotent — safe to call twice.
reservation:write
get_reservation_status
Look up the current state of a reservation your agent created.
read · public + partner write · partner only hand-off · partner only · PII-accepting

An eleventh tool — initiate_deal_handoff (scope deal:handoff, PII-accepting, starts the agentic deal) — is available to internal and named-partner agents only. Not exposed on the public rail. Ask us about it in the partner track below.

The DMC-12 v0.2 spec also defines four partner-only negotiation tools — submit_offer, submit_counter_offer, accept_offer, reject_offer (scope quote:negotiate) — that bring the canonical surface to 15. MM keeps negotiation off: the four tools are not registered on this deployment and the ai.dmc12.automotive.negotiation capability is not advertised on our UCP manifest. Other dealerships forking the open spec can flip them on.

03 / Two tracks

Pick the path that fits.

One endpoint, two authentication rails, two trust models. Consumer agents read. Named partners transact.

1Consumer AI users

Shop MM from your AI.

For anyone in Claude.ai, Claude Code, Cursor, ChatGPT Connectors, or Gemini who wants their agent to shop real vehicles at Mark Miller Subaru live.

  • Search real inventory — semantic or structured. Filter by year, price, mileage, trim.
  • Check price & availability by VIN. Batch up to 50 at a time.
  • Ask for a 30-minute quote at the listed asking price (no negotiation — it's the real number).
  • Kick off the deal when you're ready. Your quote becomes the entry point to an agentic deal flow, carried forward through PromisePath (coming soon).
Copy MCP URL into your client

Paste the URL into your AI client's connector settings. Authentication is automatic — DCR + PKCE, open registration. You'll see a one-screen Auth0 consent for inventory:read on mmbrain-prod.us.auth0.com and you're live. No account to create, no key to manage.

2Named B2B partners

For Cox, Dealer.com, CDK, and brokers.

A signed Agent Card, full write surface, per-partner rate limits, 90-day audit trail, and a direct line to Ben Reuling, our technical owner.

  • Signed A2A v1.0 Agent Card — JWS over JCS-canonicalized payload, verifiable against our public JWKS.
  • Full 10-tool surface at MM — read (inventory + pricing disclosure), quote, reservation, plus initiate_deal_handoff on request.
  • Quote / reservation semantics — 30-min TTL, non-binding soft holds, idempotent release, per-agent reservation budget.
  • 90-day audit trail with trace IDs surfaced on every envelope — correlate incidents against mm_inventory.audit_log.
  • Per-partner rate limits tuned in mm_inventory.agents. Default 60 RPM burst; higher tiers on request.
scopes you can request inventory:read pricing:read quote:write reservation:write deal:handoff
Email Ben to onboard Read the integration guide

We'll issue you an Auth0 M2M client on mmbrain-prod.us.auth0.com (audience mm-inventory-mcp), seed a row in mm_inventory.agents, and point you at the partner onboarding guide. Typical turnaround: same day.

04 / Verify us

Don't trust us. Check the well-knowns.

Every claim on this page is backed by a public document at a canonical URL. All four are unauthenticated, cacheable, and safe to fetch programmatically.

Agent Card A2A v1.0 — signed JWS over JCS canonicalization
/.well-known/agent-card.json
MCP server card SEP-1960 — endpoints, scopes, auth methods
/.well-known/mcp
UCP manifest UCP v1 — merchant, capabilities (ai.dmc12.automotive.*, v0.6), freshness SLA
/.well-known/ucp
Protected-resource metadata RFC 9728 — resource, authorization servers, scopes
/.well-known/oauth-protected-resource
Agent Card JWKS Public key for Agent Card signature verification
/.well-known/jwks.json
Open spec (source) DMC-12 capability spec + reference materials
github.com/mm-open/dmc-12
Specification (served) Service-level + capability spec — Cloudflare Worker proxy of mm-open/dmc-12
dmc12.ai/specification/SPEC.md
Schemas (served) JSON Schema 2020-12 — one file per capability under /schemas/
dmc12.ai/schemas/{capability}.json
05 / Releases

Version history.

DMC-12 follows SemVer 2.0.0. Breaking changes are allowed at any minor bump during the 0.x series; v1.0.0 will be the first backward-compatibility commitment. Each version below is tagged in mm-open/dmc-12.

Milestone · 2026-05-04
The first agent-to-agent car deal in U.S. history was completed at Mark Miller Subaru, between a CarEdge buyer agent and Mark Miller Subaru over the dmc-12 protocol.
v0.6.0 2026-06-10 · current release
Additive, non-breaking. New ai.dmc12.automotive.stores capability (0.1.0) — a read-only list_stores tool publishing the canonical name + structured address + website for every rooftop, so the store_code on each vehicle record resolves to a named, located dealership instead of an opaque code. Reuses the inventory:read scope — no new OAuth scope. The manifest's merchant.locations are enriched with the same address + website (and the MMS display name is corrected from "Salt Lake" to "Midtown"). No transport, auth, or breaking change.
v0.5.0 2026-05-29
The optional out_the_door estimate on the request_quote output is now itemized — it changes from a bare total to an OutTheDoorEstimate (new in common.json 0.2.0) carrying price_lines (vehicle price + each fee/tax line), fees_total, taxes_total, and disclosure metadata (capability quote → 0.4.0). subtotal is omitted (derivable). No new tools, scopes, or fee-math change. Additive for payloads that omit the OTD; for payloads that carried it the field's shape changes (a breaking change to that one optional field, but field-access compatibleamount/currency stay at the top level).
v0.4.0 2026-05-26
Additive, non-breaking. search_inventory ergonomics — optional natural-language query (omit it for a structured filter+sort), agent-controlled sort_by / sort_order, and a min_price floor (capability inventory → 0.2.0); a min_year / max_year range on list_inventory; and an optional, non-binding out_the_door estimate on the request_quote output (capability quote → 0.3.0), sourced from pricing disclosure (live at MM). No new tools.
v0.3.0 2026-05-26
Additive, non-breaking. A cross-cutting errors taxonomy — every tool error gains an error_code, a retryable flag, and a correlation error_id, layered over the legacy error string. Channel-scoped consent on initiate_deal_handoff (v0.1.2) — authorized channels + enforced expiry + verbatim text; the bare customer_consent boolean is unchanged. Both informed by the Auto Agent Protocol (AAP).
v0.2.0 2026-04-26
Namespace migration org.dmc12.*ai.dmc12.automotive.*; adds the negotiation and pricing_disclosure capabilities (itemized price lines with kind × payee tagging plus an out-the-door estimate). Canonical surface grows to 14 tools.
v0.1.1 2026-05-20
Optional structured trade_in object on initiate_deal_handoff (8 fields, including a partner-supplied appraisal hint). Additive and non-breaking.
v0.1.0 2026-04-21 · initial release
First DMC-12 cut: an automotive extension set over UCP — VIN-level inventory, asking-price quotes, soft reservations, and deal hand-off to a live sales team. Reference implementation live at Mark Miller Subaru.

Built for your dealership too.

Run another store? The whole stack is an open spec. Fork mm-open/dmc-12, point it at your inventory source, and publish your own MCP + A2A + UCP surface. We'll help.

Fork the spec
copied