AI agents
Ask in plain words. Check every number.
Five tools over the Canadian vehicle record. Your agent turns the question into tool calls, and every answer names the fields it leaned on.
Cardog MCP
3 callsWhat's a 2026 Honda CR-V going for right now?
{ query: "2026 Honda CR-V", domain: "model-year" }
{ ref: "model-year:honda/cr-v/2026", window: "1m" }
The 2026 CR-V is quoting a $46,890 median across 1,200 live listings, down 3.6% over the past month, on an average 76 days on market.
From 5 of 11 returned fields · best.ref, quote.liveCount, quote.priceMedian, quote.avgDomDays, history.medianChangePct
And is anything recalled?
{ ref: "model-year:honda/cr-v/2026" }
Two are open. Transport Canada's 2026274 was filed 2026-06-04; NHTSA's 26V366000 covers 1,048,613 vehicles.
From 6 of 9 returned fields · total, recalls[0].ref, recalls[0].authorityLabel, recalls[0].recallDate, recalls[1].ref, recalls[1].unitsAffected
Recorded from the Cardog MCP server on 18 September 2026 · every number in an answer is a field in the block above it
The tools
Five calls over one record
Text enters through exactly one of them. The other four take the refs it hands back, so a name is never guessed at twice.
A name is not a key
resolve_entity turned “2026 Honda CR-V” into model-year:honda/cr-v/2026 above. The quote and the recall check both spent that ref.
It only states what a tool returned
A fact no call returned stays out of the answer, and the answer says which returned fields it used.
The way free text comes in. Names in, canonical refs out, best first with a confidence.
One VIN into its full identity: every reference the platform keys on, plus spec highlights.
Transport Canada and NHTSA campaigns, fused, with the authority, the number and the date.
The live card for one instrument: listing count, quartiles, days on market, recent cuts.
Live Canadian listings, filtered by refs and canonical spec attributes, with facets.
Unknowns
A field with no source comes back empty
This CR-V decodes to eight refs. The three the pattern cannot determine come back null, which is a different answer from an absent key and a very different one from a guess.
{ "vin": "2HKRS3H24TH001457", "valid": true, "year": 2026, "make": "Honda", "model": "CR-V", "trim": "LX", "refs": { "make": "make:honda", "model": "model:honda/cr-v", "modelYear": "model-year:honda/cr-v/2026", "fuelType": "fuel-type:gasoline", "electrificationLevel": null, "vehicleType": null, "country": null }, "nano": "nano:2HKRS3H2TH", "squish": "squish:2HKRS3H2T" }
# Recalls by VIN ```bashcurl "https://api.cardog.app/v2/recalls/vin/2T3R1RFV7MW180266" \Machine-readable
Docs a machine can read
Every docs page has a Markdown twin. The SDKs and the MCP server come from one API spec.
One spec, three surfaces
A tool an agent calls and a method a developer calls never disagree.
How it works
Ask, call, answer
Call
One tools/call with the ref the agent already resolved. No VIN, no free text, nothing to re-guess.
Answer
Two campaigns come back, each with its authority, its campaign number, its date and how many vehicles it covers.
{
"method": "tools/call",
"params": {
"name": "check_recalls",
"arguments": { "ref": "model-year:honda/cr-v/2026" }
}
}{
"ref": "model-year:honda/cr-v/2026",
"total": 2,
"recalls": [{
"ref": "recall:tc/2026274",
"authority": "tc", "campaignNumber": "2026274",
"recallDate": "2026-06-04",
"unitsAffected": 117350
}]
}Connect an agent today
Create an organization, get a key, connect the MCP server.
