DMC-12 dmc-12 · the open protocol for agent-mediated automotive retail
spec 2026-08-09 · DMC-12 v1.0 · UCP Merchant Binding
v1.0 · 2026-08-09 The universalization cut — profiles, bindings, conformance claims.

The open protocol for agent-mediated automotive retail.

How software agents discover vehicle merchants, read their inventory, obtain quotes and holds, and hand a customer to a human sales team — for a single rooftop or a network of merchants. dmc‑12 is MIT‑licensed, created by Chris Hudson and Ben Reuling, and open to any merchant or network: the category it serves is defined at thearm.ai.

May 4, 2026 The first agent-to-agent car deal in U.S. history was completed over the dmc-12 protocol, between a CarEdge buyer agent and a Utah Subaru dealership running the founding 0.x deployment.

Profiles
What a deployment does
Semantic requirements with stable IDs — Merchant Core, plus draft network profiles for discovery, identity, threads, and lead transfer.
carried by
Bindings
How it looks on the wire
The UCP Merchant Binding: JSON Schemas under /schemas/v1/ + /.well-known/ucp discovery over MCP + A2A. Others may exist.
declared via
Claims
Who conforms, exactly
Self-declared, version-pinned, immutably referenced conformance claims a deployment publishes on its own property.
01 / The substrate

Three open protocols underneath the Merchant Binding.

If you're not a protocol person: MCP lets an agent use a business's tools. A2A lets two agents speak directly. UCP lets a merchant publish what they sell and how an agent can transact. dmc-12's UCP Merchant Binding rides all three; the semantics live in the profiles and can ride other bindings.

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 the merchant is and what it will 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 / The profiles

Six semantic surfaces. Claim the ones you implement.

Profiles are dmc-12's conformance units — RFC-2119 requirements with stable, citable IDs, each independently versioned. A single rooftop typically claims Merchant Core; a multi-merchant network adds the draft network profiles. Full text: SPEC.md §3.

MC- · 1.0.0 · stable
Merchant Core
The single-merchant transaction surface: authoritative capability declaration, declared inventory freshness, exact-decimal transactional money, expiring quotes and holds, PII confinement, consent that gates contact channels, closed error vocabulary.
ND- · 0.1.0 · draft
Network Discovery
A machine-readable directory of participating merchants at a well-known location; per-merchant declarations stay authoritative; cross-merchant search supports scoping and opt-out.
AI- · 0.1.0 · draft
Agent Identity & Trust
Four named trust levels — Anonymous, Accountable, Verified, Contracted. Credentials issued only after contact-channel verification, always revocable, never silently downgraded.
TT- · 0.1.0 · draft
Transaction Threads
Durable merchant-scoped transaction containers for Accountable agents: idempotent mutations, expiring quotes, soft and hard holds, verbatim server-owned disclosure, monotonic state, published PII retention.
LT- · 0.1.0 · draft
Consented Lead Transfer
The anonymous-tier two-phase pattern: server-owned disclosure plus a signed, time-limited, single-use consent binding, verified before any contact data is persisted, queued, or delivered.
OC- · advisory
Operational Conduct
SHOULD-level conduct: freshness disclosure on data-bearing responses, enumeration-oracle-resistant errors, merchant-capture capabilities default-closed, synthetic traffic distinguishable in artifacts, not on the wire.

Conformance is self-declared: a deployment publishes a claim on its own property, pinning the spec version, each profile + version, trust levels, feature subset, binding, and claim scope against an immutable release tag. No registry, no certification, no endorsement — see SPEC.md §2.3 / §12.

03 / The binding surface

Fifteen canonical tools. Scope-gated. Every quote is at asking price.

The UCP Merchant Binding's canonical tool surface, as specified — a deployment declares the subset it implements on its manifest and may filter tools/list by caller class. The ten core tools below, plus initiate_deal_handoff and four negotiation tools.

inventory:read
search_inventory
Search a merchant's inventory. Optional natural-language query (omit it for a structured filter+sort); agent-controlled sort by relevance, price, mileage, or year. Public fields only.
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 — each line tagged kind × payee. Read-only; non-binding.
inventory:read
list_stores
Canonical rooftop metadata — name, structured address, website — for every store the merchant operates. 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 + fee/tax line items and totals — when the merchant runs pricing disclosure.
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) — is the binding's sole PII-accepting surface: it transfers customer contact to a human sales team under explicit, channel-gating consent (as of v1.0, a present allowed_channels set restricts how the merchant may follow up).

The spec also defines four negotiation tools — submit_offer, submit_counter_offer, accept_offer, reject_offer (scope quote:negotiate) — bringing the canonical surface to 15. Merchants declare per-VIN fixed / stepwise / bestoffer policies; negotiation rounds are evaluated deterministically.

04 / The artifacts

Everything normative is a public file.

The spec, the schemas, and the example manifest are all served from the open repo at canonical URLs. Conformance claims pin the release tag — the canonical paths track the repo's mutable main branch.

Specification (served) SPEC.md — profiles, bindings, conformance claims · Cloudflare Worker proxy of mm-open/dmc-12
dmc12.ai/specification/SPEC.md
Binding schemas (v1) JSON Schema 2020-12 — the current UCP Merchant Binding set
dmc12.ai/schemas/v1/{name}.json
Frozen v0.x schemas The unversioned paths — frozen at v0.6 content, still served for 0.x-era deployments
dmc12.ai/schemas/{name}.json
Example manifest A fully-participating fictional merchant (Aurora Motors Group) — the complete binding shape
examples/merchant-manifest.json
Capability guide Static documentation of the Merchant Binding surface — tools, scopes, consent, errors
dmc-12.ai/guide/
Open spec (source) MIT — the repo is the source of truth; PRs welcome
github.com/mm-open/dmc-12
05 / Releases

Version history.

DMC-12 follows SemVer 2.0.0. v1.0.0 is the first backward-compatibility commitment: the conformance model and the /schemas/v1/ binding set only break at a major version, and incompatible schema revisions mint a new namespace. 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 over the dmc-12 protocol, between a CarEdge buyer agent and the founding 0.x deployment at a Utah Subaru dealership.
v1.0.0 2026-08-09 · current release
The universalization cut — dmc-12 restructures from a single-deployment UCP extension set into a layered, deployment-neutral protocol. New conformance model: profiles with stable requirement IDs (Merchant Core 1.0.0; Network Discovery, Agent Identity & Trust, Transaction Threads, Consented Lead Transfer at 0.1.0 draft), bindings (the schemas + UCP discovery become the UCP Merchant Binding), and self-declared, version-pinned conformance claims. The v1 binding schemas move to /schemas/v1/ with the unversioned files frozen at v0.6 content. Breaking in the v1 set: transactional money becomes exact-decimal strings; deal_handoff's allowed_channels now gate contact; error.message bounded at 500 chars. Example manifest renamed and fictionalized (merchant-manifest.json).
v0.6.0 2026-06-10
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. 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 launched at Mark Miller Subaru.

Built for your dealership, group, or network.

The whole stack is an open spec. Implement the Merchant Binding against your inventory source — or bring your own binding to the profiles — and publish a conformance claim on your own property. The creators will help: chris@promisepath.ai.

Fork the spec