DMC-12 Mark Miller Subaru / dmc-12 guide
endpoint live · DMC-12 v0.6 · 11 tools

Inventory

Four read tools, all under one scope: inventory:read. Available to public and partner callers alike. Every tool returns public fields only — never invoice, cost, hold-back, or salesperson data.

VIN format Wherever a VIN is accepted it must match ^[A-HJ-NPR-Z0-9]{17}$ — 17 alphanumeric characters, ISO 3779 (the letters I, O, Q are excluded). VINs are upper-cased and trimmed server-side. See Data formats for VIN, Money, timestamp, and enum conventions used across every tool.

search_inventory

Semantic + structured search across available vehicles. Provide a natural-language query to rank by relevance (a Voyage embedding round-trip), or omit it for a purely structured filter + sort with no embedding cost. Only available (unsold, unreserved) vehicles are returned, up to 25.

FieldTypeConstraints
querystringoptional≤ 500 chars. Blank → structured path.
min_yearintoptional1990–2030
max_yearintoptional1990–2030
min_pricedecimaloptional0–999999
max_pricedecimaloptional0–999999
max_mileageintoptional0–500000
conditionenumoptionalnew | used | cpo | any  (default any)
sort_byenumoptionalrelevance | price | mileage | year  (default relevance)
sort_orderenumoptionalasc | desc  (default asc)
limitintoptional1–25  (default 10)
Relevance → price fallback Relevance ordering needs an embedding. If you ask for sort_by: "relevance" with no query, the service falls back to a deterministic price / asc sort so results are stable and reproducible.

Request

{
  "jsonrpc": "2.0", "id": 1, "method": "tools/call",
  "params": {
    "name": "search_inventory",
    "arguments": {
      "query": "2024 Subaru Outback AWD under 35k, white",
      "max_price": 35000,
      "limit": 5
    }
  }
}

Response

{ "data": {
    "items": [
      {
        "vin": "4S4BTGUD8R3201234",
        "year": 2024, "make": "Subaru", "model": "Outback", "trim": "Premium",
        "condition": "new", "exterior_color": "Crystal White Pearl",
        "mileage": 12, "asking_price": 34187.0, "msrp": 35420.0,
        "status": "available", "photos": ["https://…"],
        "similarity": 0.8123
      }
    ],
    "count": 1
  },
  "_metadata": { "trace_id": "trc_…", "tool": "search_inventory", "protocol": "a2a" }
}

similarity is present only on the relevance path (cosine distance, 4 dp). On the structured path it is absent.

Vehicle record fields

Every inventory tool that returns a vehicle (search_inventory items, list_inventory items, get_vehicle_by_vin.vehicle) uses this shape. Public fields only — never invoice, cost, hold-back, or salesperson data.

FieldTypeDescription
vinstringalways17-char VIN, ^[A-HJ-NPR-Z0-9]{17}$. The stable key for quote / reserve / hand-off.
store_codestringalwaysWhich store holds the unit (e.g. MMS / MMU). Required in the schema.
stock_numberstringoptionalDealer stock number for the unit.
yearintalwaysModel year.
makestringalwaysManufacturer, e.g. Subaru.
modelstringalwaysModel name, e.g. Outback.
trimstringoptionalTrim level, e.g. Premium. May be absent on sparse records.
conditionenumalwaysCanonical Condition: new | used | certified | rental | demo. (The input filter also accepts the legacy alias cpocertified and any.)
body_stylestringoptionalBody style, e.g. SUV / Sedan.
exterior_colorstringoptionalMarketing color name, e.g. Crystal White Pearl.
interior_colorstringoptionalInterior color/trim name.
transmissionstringoptionalTransmission type (enrichment field).
drivetrainstringoptionalDrivetrain, e.g. AWD / FWD.
fuel_typestringoptionalFuel type, e.g. Gas / Hybrid / EV (enrichment field).
mileageintoptionalOdometer miles. Near-zero on new units.
asking_pricenumberalwaysThe listed price in USD. This is what request_quote pins as quoted_price.
msrpnumberoptionalManufacturer's suggested retail price, when known.
statusenumalwaysavailable | pending | sold | off-lot. Search/list return only available. (The separate check_availability map can also report runtime states like reserved / in_transit / unknown.)
days_on_lotintoptionalDays the unit has been in inventory.
stocked_datestringoptionalDate the unit was stocked (ISO 8601).
photosstring[]optionalArray of image URLs; may be empty.
descriptionstringoptionalFree-text marketing/description blurb.
similaritynumber | nulloptionalRelevance score (cosine distance, 4 dp) — present only on the search_inventory relevance path; null/absent on every structured path.

Nullability: every optional field above is typed ["<type>", "null"] in schemas/inventory.json — it may be returned as an explicit null, not just omitted. Only the always fields (vin, store_code, condition, year, make, model, asking_price, status) are non-null and required. Generate your client types accordingly (accept null for the optionals).

list_inventory

Structured-filter, paginated listing — exact-match lookups, year ranges, and price windows. Use this (not search_inventory) when you want deterministic pagination over a filter set. Returns { items, total, limit, offset } where total is the full match count for the filter.

FieldTypeConstraints
yearintoptional1990–2030 (exact match)
min_yearintoptional1990–2030
max_yearintoptional1990–2030
makestringoptional≤ 40 chars (case-insensitive)
modelstringoptional≤ 60 chars (case-insensitive)
trimstringoptional≤ 80 chars (substring match)
conditionenumoptionalnew | used | cpo | any (default any)
min_pricedecimaloptional0–999999
max_pricedecimaloptional0–999999
max_mileageintoptional0–500000
limitintoptional1–100 (default 25)
offsetintoptional0–10000 (default 0)

Request & response

// arguments
{ "make": "Subaru", "model": "Crosstrek", "min_year": 2023, "limit": 25, "offset": 0 }

// data
{ "items": [ { "vin": "…", "year": 2024, "make": "Subaru", "model": "Crosstrek", … } ],
  "total": 41, "limit": 25, "offset": 0 }

get_vehicle_by_vin

Fetch a single vehicle by VIN. Returns { vehicle, found }; vehicle is null and found is false when the VIN is unknown.

FieldTypeConstraints
vinstringrequired^[A-HJ-NPR-Z0-9]{17}$
// arguments
{ "vin": "4S4BTGUD8R3201234" }

// data
{ "found": true,
  "vehicle": { "vin": "4S4BTGUD8R3201234", "year": 2024, "make": "Subaru",
               "model": "Outback", "trim": "Premium", "mileage": 12,
               "asking_price": 34187.0, "msrp": 35420.0, "status": "available",
               "photos": ["https://…"] } }

check_availability

Batch status check for up to 50 VINs at once. Returns a statuses map; any VIN not in inventory maps to unknown.

FieldTypeConstraints
vinsstring[]required1–50 items, each ^[A-HJ-NPR-Z0-9]{17}$
// arguments
{ "vins": ["4S4BTGUD8R3201234", "JF2GTHMC5R8301111"] }

// data
{ "statuses": {
    "4S4BTGUD8R3201234": "available",
    "JF2GTHMC5R8301111": "reserved"
} }

Statuses: available, reserved, sold, pending, in_transit, unknown.

Errors

get_vehicle_by_vin never errors on a miss — it returns found: false. A malformed VIN (or out-of-range numeric filter) fails Pydantic validation and returns VALIDATION_FAILED. See the error taxonomy for the full envelope.

copied