Car Handshake
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Search and compare live vehicles from participating US and Canadian dealers outside Quebec.
| Author | com.carhandshake |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 138 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Car Handshake": {
"url": "https://mcp.carhandshake.com/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (10)
shop_vehiclesread-onlyUse for live US/CA cars/SUVs/trucks/EVs/motorcycles/RVs/trailers by place (near me), budget, mileage, make/model, condition, body, fuel, features, named dealer, or live-listing recommendation. Quebec excluded. Call once; never retry/refine/broaden. Fallback stays in-country; filters exact. Facts only; web only if asked. Named-dealer stock: find_dealerships then shop. Not repair/reliability/facts/MSRP/out-of-market, named-source, web-only, or no-app. Verbatim request; never ask for ZIP/postal.
Parameters:
request(required) — string — Verbatim shopper request.fuels— arraylimit— integermakes— arraytrims— arraybodies— arraycursor— stringmodels— arraycountry— string — US default; CA supported outside Quebec.sort_by— string — Default: relevance.features— array — Classes: third_row, awd_4wd, tow_package, apple_carplay, android_auto, adaptive_cruise, leather, heated_seats, ev_range_200_plus.statuses— array — Omit unless status is explicit; omission searches both available and intransit.year_max— integeryear_min— integerprice_max— integerprice_min— integerconditions— arraydealer_ids— arraydrivelines— arraynationwide— booleanmileage_max— integercharge_ports— arrayradius_miles— number — US miles; CA kilometres. Fallback widens geography only; filters remain exact.location_text— string — Free-text city/place/state/postal exactly as the shopper supplied; never ask for a ZIP code.transmissions— arrayvehicle_types— arraydc_fast_charge— booleansort_direction— stringexterior_colors— arrayinterior_colors— arrayelectric_range_max— numberelectric_range_min— numberdisplacement_cc_max— integerdisplacement_cc_min— integer
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_vehicleread-onlyFor full detail, pass exact shop_vehicles listing_id; returns dealer.dealer_id.
Parameters:
listing_id(required) — string
Hints: read-only yes · destructive no · idempotent yes · open-world no
searchread-onlyCitation only; never shopping/detail/compare. Search once, then fetch exact IDs.
Parameters:
query(required) — string — Vehicle-shopping query, verbatim.
Hints: read-only yes · destructive no · idempotent yes · open-world no
fetchread-onlyCitation only after search; never shopping/detail. Fetch one exact ID.
Parameters:
id(required) — string — Exact listing ID returned by search.
Hints: read-only yes · destructive no · idempotent yes · open-world no
compare_vehiclesread-onlyOnly for explicit comparison: after exactly one shop_vehicles call, pass 2-4 distinct returned listing IDs. Never search or shop again.
Parameters:
listing_ids(required) — array — 2-4 exact IDs returned by shop_vehicles.priorities— array — Shopper priorities, up to eight.
Hints: read-only yes · destructive no · idempotent yes · open-world no
find_dealershipsread-onlyUse this once to find dealerships by name/place with IDs, addresses, and listing counts. Named stock: one shop_vehicles call with a returned dealer_id. For contacts or sales/service hours: get_dealership once.
Parameters:
limit— integerquery— stringcountry— string — US default; CA for Canada. Quebec excluded.location— string — Place or postal text exactly as supplied.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_dealershipread-onlyUse this with an exact dealer_id to return every public rooftop, contact, site, capability, and named sales/service schedule.
Parameters:
dealer_id(required) — string
Hints: read-only yes · destructive no · idempotent yes · open-world no
schedule_test_drivedestructiveAfter explicit consent and confirmation, request a test drive for this listing.
Parameters:
listing_id(required) — string — Exact listing_id from prior results.first_name(required) — string — First name.last_name(required) — string — Last name.consent_text(required) — string — Accepted consent words; never fabricate consent.allowed_channels(required) — array — Consent channels.consent_granted_at(required) — string — Consent timestamp (RFC 3339).idempotency_key(required) — string — Unique retry key.email— string — Email (or phone required).phone— string — E.164 phone (or email required).dry_run— boolean — Validate with no dealer contact.message— string — Dealer note.appointment_at— stringpreferred_contact— string
Hints: read-only no · destructive yes · idempotent yes · open-world yes
request_trade_in_appraisaldestructiveAfter explicit consent and confirmation, request a trade-in appraisal for this listing.
Parameters:
listing_id(required) — string — Exact listing_id from prior results.first_name(required) — string — First name.last_name(required) — string — Last name.trade_in_year(required) — integertrade_in_make(required) — stringtrade_in_model(required) — stringconsent_text(required) — string — Accepted consent words; never fabricate consent.allowed_channels(required) — array — Consent channels.consent_granted_at(required) — string — Consent timestamp (RFC 3339).idempotency_key(required) — string — Unique retry key.email— string — Email (or phone required).phone— string — E.164 phone (or email required).dry_run— boolean — Validate with no dealer contact.message— string — Dealer note.trade_in_trim— stringtrade_in_mileage— integerpreferred_contact— stringtrade_in_condition— string
Hints: read-only no · destructive yes · idempotent yes · open-world yes
submit_vehicle_inquirydestructiveAfter explicit consent and confirmation, send this listing's dealer a question.
Parameters:
listing_id(required) — string — Exact listing_id from prior results.first_name(required) — string — First name.last_name(required) — string — Last name.message(required) — string — Dealer note.consent_text(required) — string — Accepted consent words; never fabricate consent.allowed_channels(required) — array — Consent channels.consent_granted_at(required) — string — Consent timestamp (RFC 3339).idempotency_key(required) — string — Unique retry key.email— string — Email (or phone required).phone— string — E.164 phone (or email required).dry_run— boolean — Validate with no dealer contact.preferred_contact— string
Hints: read-only no · destructive yes · idempotent yes · open-world yes
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.