OmniaAuto — Canadian Vehicle Listings
Server Details
Live Canadian vehicle listings, VIN decode and market valuations, province by province.
- Status
- Healthy
- Uptime
- 24.1% over 77 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- Omnia Auto — Vehicle Listings & Market Data
TDQS
Scored across 7 tools
Most tools are distinct, but coverage vs market_stats (both return vehicle counts) and market_stats vs valuation (both return price statistics) have overlapping boundaries that descriptions only partially clarify. decode_vin (free specs for any VIN) vs get_vin (live listing for a VIN) are close in name and purpose, though the credit cost and output differences help.
Six of seven names use snake_case verb_noun or noun_noun patterns (decode_vin, get_vin, search_listings, market_stats, my_usage), but bare nouns 'coverage' and 'valuation' break the pattern, making them slightly less predictable.
Seven tools is well-scoped for a vehicle listings API, covering search, lookup, decoding, valuation, stats and account usage. Each tool earns its place without redundancy.
Core workflows (search, VIN lookup/decode, valuation, market stats, coverage, usage) are all covered. Minor gaps exist: search caps at 10 results with no pagination or filter-metadata tool, and there's no direct brand/model enumeration.
Available Tools
7 toolscoverageCoverageARead-onlyInspect
COST: 1 credit per call.
Returns the number of distinct vehicles currently listed in Canada, the number of brands and the last update date.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| unit | No | Always vehicle |
| error | No | Set on a refusal, e.g. out_of_credits, not_found; result fields are then absent |
| brands | No | Number of makes |
| vehicles | No | Distinct vehicles currently listed |
| latest_update | No | Date of the latest data update, YYYY-MM-DD |
| credits_remaining | No | Credits left in the current period |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the description's main contribution is the 'COST: 1 credit per call' disclosure — billing behavior that structured fields cannot express and that materially affects invocation frequency. It doesn't discuss rate limits or caching, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. Front-loading the credit cost is defensible because it is the most decision-relevant fact for a paid call, and the return-content sentence follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value structure needn't be restated, and the description still summarizes the returned fields plus cost. For a zero-parameter read-only metric call this is essentially complete; only sibling differentiation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline this is a 4. There is nothing further the description could meaningfully clarify about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: it returns distinct vehicle counts, brand counts and a last-update date for Canada. An agent knows exactly what data comes back. It doesn't explicitly separate itself from the sibling market_stats, which sounds like an overlapping statistics endpoint, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no reference to alternatives, despite market_stats and my_usage sitting in the same family. The only decision-relevant cue is the credit cost, which informs cost/benefit but not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decode_vinDecode VINARead-onlyIdempotentInspect
COST: free (no credits).
Returns the specs for any VIN, listed or not: year, make, model, trim, body, drivetrain and engine.
| Name | Required | Description | Default |
|---|---|---|---|
| vin | Yes | 17-character VIN, letters and digits without I, O or Q; any case |
Output Schema
| Name | Required | Description |
|---|---|---|
| vin | No | |
| make | No | |
| note | No | |
| trim | No | |
| year | No | |
| error | No | Set on a refusal, e.g. out_of_credits, not_found; result fields are then absent |
| model | No | |
| decode_ok | No | False when the VIN could not be decoded |
| body_class | No | |
| drive_type | No | |
| credits_remaining | No | Credits left in the current period |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the bar is lower. The description adds genuinely new context the annotations do not: this call costs no credits, which matters next to paid siblings like valuation. It stops short of noting failure behavior for invalid VINs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two lines, cost notice front-loaded where an agent will see it before deciding to call, and the return contents summarized compactly. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the return-field list is somewhat redundant, but the free-vs-credit distinction is essential context for choosing among siblings. The only real gap is the absence of any routing cue against get_vin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema's own description already specifies the 17-character format, the excluded letters I/O/Q, and case insensitivity. The description adds nothing about the parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (returns) and resource (specs for a VIN) with scope ('listed or not'), so the agent knows what it does. However, it never contrasts with the sibling get_vin, leaving the agent to guess why two VIN tools exist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'listed or not' faintly implies this is the fallback for VINs not in the catalog, which is the only usage signal present. There is no explicit when-to-use, no mention of get_vin as the alternative, and no prerequisite guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vinGet Vehicle by VINARead-onlyInspect
COST: 1 credit per call.
Returns the latest live listing for one VIN: price, mileage, location and listing_url.
| Name | Required | Description | Default |
|---|---|---|---|
| vin | Yes | 17-character VIN, letters and digits without I, O or Q; any case |
Output Schema
| Name | Required | Description |
|---|---|---|
| MY | No | Model year |
| vin | No | |
| City | No | |
| Make | No | |
| Trim | No | |
| note | No | |
| error | No | Set on a refusal, e.g. out_of_credits, not_found; result fields are then absent |
| model | No | |
| price | No | Asking price, CAD; null when none is advertised |
| mileage | No | Odometer, km |
| Province | No | |
| Condition | No | |
| listing_url | No | Link to show the user; null means no link |
| credits_remaining | No | Credits left in the current period |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), so the bar is lower. The description adds a genuinely useful behavioral trait beyond the annotations: the 1-credit cost per call, and 'latest live' implies freshness-sensitive, time-varying results that explain the non-idempotent hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, cost front-loaded so the agent sees the billing implication first, then the return content. No filler or restated fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be enumerated; the description's listing of fields is mild redundancy but harmless. What an agent needs to call it is present, though sibling routing (decode_vin vs this) remains unresolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, whose schema description is fully covered (100%) and already specifies the 17-character format and excluded letters. The description adds no syntax or format detail beyond 'one VIN', so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns the latest live listing for one VIN') and enumerates what comes back (price, mileage, location, listing_url). It is clearly distinct from a decode tool by virtue of returning 'live listing' data, but it never names a sibling to disambiguate from decode_vin or search_listings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Discloses the cost (1 credit per call), which is useful context, but gives no when-to-use guidance: nothing tells the agent when to call get_vin instead of decode_vin or search_listings for VIN-based lookups, and no prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_statsMarket StatsARead-onlyInspect
COST: 1 credit per call.
Returns vehicle counts and average and median price and mileage for a slice of Canadian listings, with optional group_by breakdowns.
| Name | Required | Description | Default |
|---|---|---|---|
| make | No | Make, e.g. Toyota; exact match, any case | |
| near | No | Centre of a radius search: city, postal code or lat,lng (e.g. 53.54,-113.49); radius_km sets its size | |
| sort | No | n = largest groups first (default); sold_30d = most sold in 30 days, needs group_by and condition Used or New | |
| model | No | Model, e.g. RAV4; exact match, any case | |
| group_by | No | Up to 2 of city, trim, year, condition, model (largest 25 groups, rest as Other); city needs province or near, trim needs make and model | |
| province | No | 2-letter province code, e.g. AB, ON, QC; empty = all Canada | |
| year_max | No | Latest model year, e.g. 2024; 0 = any | |
| year_min | No | Earliest model year, e.g. 2020; 0 = any | |
| body_type | No | SUV, Sedan, Pickup, Hatchback, Minivan, Coupe, Van, Convertible or Wagon; empty = any | |
| condition | No | New, Used, Certified or Demo; empty = any | |
| radius_km | No | Radius around near, in km (default 25, max 500); requires near | |
| seller_type | No | dealer (default) or private: private-seller listings, a separate segment (seller Private, city and province only, no link or VIN) |
Output Schema
| Name | Required | Description |
|---|---|---|
| geo | No | Resolved near anchor and radius_km, on a radius search |
| note | No | |
| unit | No | Always vehicle |
| error | No | Set on a refusal, e.g. out_of_credits, not_found; result fields are then absent |
| detail | No | |
| groups | No | One object per group, with n and price figures |
| allowed | No | Accepted values, on an invalid_* error |
| pricing | No | |
| summary | No | n, unique_vins, avg_price, median_price, min_price, max_price, avg_mileage, priced |
| group_by | No | Breakdown dimensions applied |
| by_province | No | |
| by_condition | No | |
| by_certification | No | |
| credits_remaining | No | Credits left in the current period |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely new context the annotations lack: the cost of 1 credit per call, which is essential for an agent managing a budget. It stops short of describing aggregation edge cases (e.g. thin data or the separate private-seller segment).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the cost warning front-loaded ahead of the functional summary. Every clause carries information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 12 optional parameters, an output schema and full annotation coverage, the definition supplies what the structured fields cannot: cost and the aggregate nature of the result. The main remaining gap is sibling disambiguation against valuation and search_listings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each of the 12 parameters documented in detail including group_by constraints and sort/condition dependencies. The description only echoes 'group_by breakdowns' and adds no format or syntax detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific output (vehicle counts, average and median price and mileage) over a defined scope (a slice of Canadian listings) with optional group_by breakdowns. An agent can tell it produces aggregates rather than individual listings. It does not explicitly distinguish itself from siblings such as valuation or search_listings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: returning counts and price/mileage aggregates signals market-analysis use rather than listing retrieval, and group_by implies segment comparison. There is no explicit statement of when to prefer this over valuation or coverage, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
my_usageMy UsageARead-onlyIdempotentInspect
COST: free (no credits).
Returns the account's OmniaAuto plan, credits used and remaining, reset date and per-tool credit costs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| plan | No | |
| error | No | Set on a refusal, e.g. out_of_credits, not_found; result fields are then absent |
| plans_url | No | |
| resets_on | No | Date credits reset, YYYY-MM-DD; null when they do not refill |
| plan_label | No | |
| tool_costs | No | Credits per call, by tool |
| credits_used | No | |
| rows_per_search | No | Maximum vehicles per search_listings call |
| credits_included | No | Credits in the current period; null on an account with no limit |
| credits_remaining | No | Credits left in the current period |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is low. The description adds genuinely useful context they do not: the operation is free and consumes no credits, plus what data categories come back (plan, credits used/remaining, reset date, per-tool costs).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler; the cost constraint is front-loaded before the description of the returned data, which is the right ordering for an agent deciding whether to call it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be spelled out, and the description still summarizes it. The only minor gap is that it never states the authentication/account-binding requirement implied by 'the account's plan', which an agent should know before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 and the description has nothing to document. It adds no parameter detail, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource and verb: returns the account's OmniaAuto plan, credits used/remaining, reset date, and per-tool credit costs. No sibling (coverage, decode_vin, get_vin, market_stats, search_listings, valuation) touches account/usage data, so an agent can distinguish it at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use statement or named alternative, but the leading 'COST: free (no credits)' line gives practical guidance that this call is cheap and safe to invoke. That is implied usage context rather than real routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_listingsSearch ListingsARead-onlyInspect
COST: 3 credits per call.
Returns up to 10 live Canadian vehicle listings matching the filters (specs, price, mileage, location, listing_url) and the total match count.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City name, e.g. Calgary; exact match, any case | |
| make | No | Make, e.g. Toyota; exact match, any case | |
| near | No | Centre of a radius search: city, postal code or lat,lng (e.g. 53.54,-113.49); radius_km sets its size | |
| sort | No | price, mileage, year, last_seen (default), first_seen or distance (requires near) | |
| limit | No | Vehicles to return, 1-10; larger values are capped at 10 | |
| model | No | Model, e.g. RAV4; exact match, any case | |
| order | No | asc or desc; default is asc for price, mileage and distance, desc otherwise | |
| province | No | 2-letter province code, e.g. AB, ON, QC; empty = all Canada | |
| year_min | No | Earliest model year, e.g. 2020; 0 = any | |
| body_type | No | SUV, Sedan, Pickup, Hatchback, Minivan, Coupe, Van, Convertible or Wagon; empty = any | |
| condition | No | New, Used, Certified or Demo; empty = any | |
| price_max | No | Max price in CAD; 0 = no limit | |
| price_min | No | Min price in CAD; 0 = no limit | |
| radius_km | No | Radius around near, in km (default 25, max 500); requires near | |
| mileage_max | No | Max odometer in km; 0 = no limit | |
| seller_type | No | dealer (default) or private: private-seller listings, a separate segment (seller Private, city and province only, no link or VIN) |
Output Schema
| Name | Required | Description |
|---|---|---|
| geo | No | Resolved near anchor and radius_km, on a radius search |
| note | No | |
| unit | No | Always vehicle |
| error | No | Set on a refusal, e.g. out_of_credits, not_found; result fields are then absent |
| total | No | Vehicles matching the filters |
| results | No | One object per vehicle: vin, MY, Make, model, Trim, Condition, mileage, price, City, Province, listing_url, distance_km on a radius search |
| returned | No | Vehicles in results |
| total_exact | No | |
| pricing_note | No | |
| credits_remaining | No | Credits left in the current period |
| allowance_exhausted | No | True when the plan's vehicle limit is reached: total is returned, results is empty |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, non-destructive, closed-world behavior. The description adds meaningful context beyond those annotations by disclosing the 3-credit cost per call, the 10-listing cap, and the total match count return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the cost, then explains the result size and content. Every sentence carries useful information with no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter search tool, the description plus the fully documented schema and existing output schema give the agent enough to invoke it correctly. The main gap is the absence of sibling-tool routing guidance, not missing parameter or return details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 16 parameters in detail. The description only groups them into categories such as specs, price, mileage, and location, adding little parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource and scope: up to 10 live Canadian vehicle listings matching filters, plus total match count. It does not explicitly differentiate from siblings such as valuation or market_stats, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the available alternatives like valuation or market_stats. The description only covers cost and return shape, leaving usage context to inference from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valuationVehicle ValuationARead-onlyInspect
COST: 1 credit per call.
Returns a low, average, median and high price estimate for one year, make, model and condition from recent Canadian comparable listings, with province and mileage breakdowns.
| Name | Required | Description | Default |
|---|---|---|---|
| make | Yes | Make, e.g. Toyota; any case | |
| trim | No | Trim, e.g. XLE, to narrow the estimate; empty = all trims | |
| year | Yes | Model year, e.g. 2020 | |
| model | Yes | Model, e.g. RAV4; a common alternate spelling is resolved | |
| mileage | No | Odometer in km; compares similar-mileage cars (band widened if few); 0 = ignore mileage | |
| province | No | 2-letter province code, e.g. AB, ON, QC; empty = all Canada | |
| condition | Yes | New, Used, Certified or Demo (required) | |
| seller_type | No | dealer (default) or private: private-seller listings, a separate segment (seller Private, city and province only, no link or VIN) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| error | No | Set on a refusal, e.g. out_of_credits, not_found; result fields are then absent |
| notes | No | Caveats to relay with the figures |
| query | No | The year, make, model, condition, province, trim and mileage priced |
| detail | No | |
| allowed | No | Accepted values, on an invalid_* error |
| valuation | No | low, average, median, high (CAD), sample_size, avg_mileage, mileage_band |
| confidence | No | low, medium or high, from the sample size |
| sold_comps | No | |
| by_province | No | |
| total_comps | No | Comparables found |
| window_days | No | Age of the comparables window, days |
| by_mileage_band | No | |
| credits_remaining | No | Credits left in the current period |
| by_province_mileage_band | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, non-destructive and closed-world behaviour, so the description rightly focuses on things annotations cannot express: the 1-credit cost per call, the Canadian comparable-listing data source, and the shape of the returned price bands with province/mileage breakdowns. It does not say what happens when no comparables exist, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words, and the cost constraint is front-loaded where an agent will see it first. The second sentence is dense but every clause (price bands, data source, breakdowns) carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and annotations cover the safety profile; what remains for the description — cost, data provenance, and the price-band summary — is fully provided. An agent has everything needed to decide to call it and interpret the result set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in detail (trim narrowing, mileage banding, province codes, seller_type segmentation). The description only restates year/make/model/condition and adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific output (low, average, median and high price estimate) for a specific input (one year/make/model/condition) drawn from recent Canadian comparable listings. That is enough to separate it from search_listings or market_stats, though it never explicitly names those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the single-vehicle pricing tool and the others are not, but there is no explicit 'use this when…' statement, no mention of when market_stats or search_listings is the better call, and no guidance on prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- Changed
market_stats1 field changed- added
Input schema / properties / seller_typeAdded value: +{ + "default": "", + "description": "dealer (default) or private: private-seller listings, a separate segment (seller Private, city and province only, no link or VIN)", + "title": "Seller Type", + "type": "string" +}
- Changed
search_listings1 field changed- added
Input schema / properties / seller_typeAdded value: +{ + "default": "", + "description": "dealer (default) or private: private-seller listings, a separate segment (seller Private, city and province only, no link or VIN)", + "title": "Seller Type", + "type": "string" +}
- Changed
valuation1 field changed- added
Input schema / properties / seller_typeAdded value: +{ + "default": "", + "description": "dealer (default) or private: private-seller listings, a separate segment (seller Private, city and province only, no link or VIN)", + "title": "Seller Type", + "type": "string" +}
7 tool updates
- Changed
coverage1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "brands": { + "description": "Number of makes", + "type": [ + "integer", + "null" + ] + }, + "credits_remaining": { + "description": "Credits left in the current period", + "type": [ + "integer", + "null" + ] + }, + "error": { + "description": "Set on a refusal, e.g. out_of_credits, not_found; result fields are then absent", + "type": [ + "string", + "null" + ] + }, + "latest_update": { + "description": "Date of the latest data update, YYYY-MM-DD", + "type": [ + "string", + "null" + ] + }, + "note": { + "type": [ + "string", + "null" + ] + }, + "unit": { + "description": "Always vehicle", + "type": [ + "string", + "null" + ] + }, + "vehicles": { + "description": "Distinct vehicles currently listed", + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" +}
- Changed
decode_vin2 fields changed- changed
Input schema / properties / vin / descriptionPrevious value: -"17-character VIN"New value: +"17-character VIN, letters and digits without I, O or Q; any case" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "body_class": { + "type": [ + "string", + "null" + ] + }, + "credits_remaining": { + "description": "Credits left in the current period", + "type": [ + "integer", + "null" + ] + }, + "decode_ok": { + "description": "False when the VIN could not be decoded", + "type": [ + "boolean", + "null" + ] + }, + "drive_type": { + "type": [ + "string", + "null" + ] + }, + "error": { + "description": "Set on a refusal, e.g. out_of_credits, not_found; result fields are then absent", + "type": [ + "string", + "null" + ] + }, + "make": { + "type": [ + "string", + "null" + ] + }, + "model": { + "type": [ + "string", + "null" + ] + }, + "note": { + "type": [ + "string", + "null" + ] + }, + "trim": { + "type": [ + "string", + "null" + ] + }, + "vin": { + "type": [ + "string", + "null" + ] + }, + "year": { + "type": [ + "integer", + "string", + "null" + ] + } + }, + "type": "object" +}
- Changed
get_vin2 fields changed- changed
Input schema / properties / vin / descriptionPrevious value: -"17-character VIN"New value: +"17-character VIN, letters and digits without I, O or Q; any case" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "City": { + "type": [ + "string", + "null" + ] + }, + "Condition": { + "type": [ + "string", + "null" + ] + }, + "MY": { + "description": "Model year", + "type": [ + "integer", + "string", + "null" + ] + }, + "Make": { + "type": [ + "string", + "null" + ] + }, + "Province": { + "type": [ + "string", + "null" + ] + }, + "Trim": { + "type": [ + "string", + "null" + ] + }, + "credits_remaining": { + "description": "Credits left in the current period", + "type": [ + "integer", + "null" + ] + }, + "error": { + "description": "Set on a refusal, e.g. out_of_credits, not_found; result fields are then absent", + "type": [ + "string", + "null" + ] + }, + "listing_url": { + "description": "Link to show the user; null means no link", + "type": [ + "string", + "null" + ] + }, + "mileage": { + "description": "Odometer, km", + "type": [ + "integer", + "number", + "null" + ] + }, + "model": { + "type": [ + "string", + "null" + ] + }, + "note": { + "type": [ + "string", + "null" + ] + }, + "price": { + "description": "Asking price, CAD; null when none is advertised", + "type": [ + "integer", + "number", + "null" + ] + }, + "vin": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
- Changed
market_stats12 fields changed- changed
Input schema / properties / body_type / descriptionPrevious value: -"e.g. SUV, Sedan, Pickup"New value: +"SUV, Sedan, Pickup, Hatchback, Minivan, Coupe, Van, Convertible or Wagon; empty = any" - changed
Input schema / properties / condition / descriptionPrevious value: -"New, Used, Certified or Demo"New value: +"New, Used, Certified or Demo; empty = any" - changed
Input schema / properties / group_by / descriptionPrevious value: -"Breakdown: city, trim, year, condition or model"New value: +"Up to 2 of city, trim, year, condition, model (largest 25 groups, rest as Other); city needs province or near, trim needs make and model" - changed
Input schema / properties / make / descriptionPrevious value: -"Make, e.g. Toyota"New value: +"Make, e.g. Toyota; exact match, any case" - changed
Input schema / properties / model / descriptionPrevious value: -"Model, e.g. RAV4"New value: +"Model, e.g. RAV4; exact match, any case" - changed
Input schema / properties / near / descriptionPrevious value: -"City, postal code or lat,lng"New value: +"Centre of a radius search: city, postal code or lat,lng (e.g. 53.54,-113.49); radius_km sets its size" - changed
Input schema / properties / province / descriptionPrevious value: -"Province, e.g. AB"New value: +"2-letter province code, e.g. AB, ON, QC; empty = all Canada" - changed
Input schema / properties / radius_km / descriptionPrevious value: -"Radius around near, km (default 25, max 500)"New value: +"Radius around near, in km (default 25, max 500); requires near" - changed
Input schema / properties / sort / descriptionPrevious value: -"n (default) or sold_30d"New value: +"n = largest groups first (default); sold_30d = most sold in 30 days, needs group_by and condition Used or New" - changed
Input schema / properties / year_max / descriptionPrevious value: -"Latest model year"New value: +"Latest model year, e.g. 2024; 0 = any" - changed
Input schema / properties / year_min / descriptionPrevious value: -"Earliest model year"New value: +"Earliest model year, e.g. 2020; 0 = any" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "allowed": { + "description": "Accepted values, on an invalid_* error", + "items": {}, + "type": [ + "array", + "null" + ] + }, + "by_certification": { + "additionalProperties": true, + "type": [ + "object", + "null" + ] + }, + "by_condition": { + "items": {}, + "type": [ + "array", + "null" + ] + }, + "by_province": { + "items": {}, + "type": [ + "array", + "null" + ] + }, + "credits_remaining": { + "description": "Credits left in the current period", + "type": [ + "integer", + "null" + ] + }, + "detail": { + "type": [ + "string", + "null" + ] + }, + "error": { + "description": "Set on a refusal, e.g. out_of_credits, not_found; result fields are then absent", + "type": [ + "string", + "null" + ] + }, + "geo": { + "additionalProperties": true, + "description": "Resolved near anchor and radius_km, on a radius search", + "type": [ + "object", + "null" + ] + }, + "group_by": { + "description": "Breakdown dimensions applied", + "items": {}, + "type": [ + "array", + "null" + ] + }, + "groups": { + "description": "One object per group, with n and price figures", + "items": {}, + "type": [ + "array", + "null" + ] + }, + "note": { + "type": [ + "string", + "null" + ] + }, + "pricing": { + "additionalProperties": true, + "type": [ + "object", + "null" + ] + }, + "summary": { + "additionalProperties": true, + "description": "n, unique_vins, avg_price, median_price, min_price, max_price, avg_mileage, priced", + "type": [ + "object", + "null" + ] + }, + "unit": { + "description": "Always vehicle", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
- Changed
my_usage1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "credits_included": { + "description": "Credits in the current period; null on an account with no limit", + "type": [ + "integer", + "null" + ] + }, + "credits_remaining": { + "description": "Credits left in the current period", + "type": [ + "integer", + "null" + ] + }, + "credits_used": { + "type": [ + "integer", + "null" + ] + }, + "error": { + "description": "Set on a refusal, e.g. out_of_credits, not_found; result fields are then absent", + "type": [ + "string", + "null" + ] + }, + "note": { + "type": [ + "string", + "null" + ] + }, + "plan": { + "type": [ + "string", + "null" + ] + }, + "plan_label": { + "type": [ + "string", + "null" + ] + }, + "plans_url": { + "type": [ + "string", + "null" + ] + }, + "resets_on": { + "description": "Date credits reset, YYYY-MM-DD; null when they do not refill", + "type": [ + "string", + "null" + ] + }, + "rows_per_search": { + "description": "Maximum vehicles per search_listings call", + "type": [ + "integer", + "null" + ] + }, + "tool_costs": { + "additionalProperties": { + "type": "integer" + }, + "description": "Credits per call, by tool", + "type": [ + "object", + "null" + ] + } + }, + "type": "object" +}
- Changed
search_listings16 fields changed- changed
Input schema / properties / body_type / descriptionPrevious value: -"e.g. SUV, Sedan, Pickup"New value: +"SUV, Sedan, Pickup, Hatchback, Minivan, Coupe, Van, Convertible or Wagon; empty = any" - changed
Input schema / properties / city / descriptionPrevious value: -"City name"New value: +"City name, e.g. Calgary; exact match, any case" - changed
Input schema / properties / condition / descriptionPrevious value: -"New, Used, Certified or Demo"New value: +"New, Used, Certified or Demo; empty = any" - changed
Input schema / properties / limit / descriptionPrevious value: -"Max vehicles to return"New value: +"Vehicles to return, 1-10; larger values are capped at 10" - changed
Input schema / properties / make / descriptionPrevious value: -"Make, e.g. Toyota"New value: +"Make, e.g. Toyota; exact match, any case" - changed
Input schema / properties / mileage_max / descriptionPrevious value: -"Max mileage, km"New value: +"Max odometer in km; 0 = no limit" - changed
Input schema / properties / model / descriptionPrevious value: -"Model, e.g. RAV4"New value: +"Model, e.g. RAV4; exact match, any case" - changed
Input schema / properties / near / descriptionPrevious value: -"City, postal code or lat,lng"New value: +"Centre of a radius search: city, postal code or lat,lng (e.g. 53.54,-113.49); radius_km sets its size" - changed
Input schema / properties / order / descriptionPrevious value: -"asc or desc"New value: +"asc or desc; default is asc for price, mileage and distance, desc otherwise" - changed
Input schema / properties / price_max / descriptionPrevious value: -"Max price, CAD"New value: +"Max price in CAD; 0 = no limit" - changed
Input schema / properties / price_min / descriptionPrevious value: -"Min price, CAD"New value: +"Min price in CAD; 0 = no limit" - changed
Input schema / properties / province / descriptionPrevious value: -"Province, e.g. AB"New value: +"2-letter province code, e.g. AB, ON, QC; empty = all Canada" - changed
Input schema / properties / radius_km / descriptionPrevious value: -"Radius around near, km (default 25, max 500)"New value: +"Radius around near, in km (default 25, max 500); requires near" - changed
Input schema / properties / sort / descriptionPrevious value: -"price, mileage, year, last_seen, first_seen or distance"New value: +"price, mileage, year, last_seen (default), first_seen or distance (requires near)" - changed
Input schema / properties / year_min / descriptionPrevious value: -"Earliest model year"New value: +"Earliest model year, e.g. 2020; 0 = any" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "allowance_exhausted": { + "description": "True when the plan's vehicle limit is reached: total is returned, results is empty", + "type": [ + "boolean", + "null" + ] + }, + "credits_remaining": { + "description": "Credits left in the current period", + "type": [ + "integer", + "null" + ] + }, + "error": { + "description": "Set on a refusal, e.g. out_of_credits, not_found; result fields are then absent", + "type": [ + "string", + "null" + ] + }, + "geo": { + "additionalProperties": true, + "description": "Resolved near anchor and radius_km, on a radius search", + "type": [ + "object", + "null" + ] + }, + "note": { + "type": [ + "string", + "null" + ] + }, + "pricing_note": { + "type": [ + "string", + "null" + ] + }, + "results": { + "description": "One object per vehicle: vin, MY, Make, model, Trim, Condition, mileage, price, City, Province, listing_url, distance_km on a radius search", + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "returned": { + "description": "Vehicles in results", + "type": [ + "integer", + "null" + ] + }, + "total": { + "description": "Vehicles matching the filters", + "type": [ + "integer", + "null" + ] + }, + "total_exact": { + "type": [ + "boolean", + "null" + ] + }, + "unit": { + "description": "Always vehicle", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
- Changed
valuation8 fields changed- changed
Input schema / properties / condition / descriptionPrevious value: -"New, Used, Certified or Demo"New value: +"New, Used, Certified or Demo (required)" - changed
Input schema / properties / make / descriptionPrevious value: -"Make, e.g. Toyota"New value: +"Make, e.g. Toyota; any case" - changed
Input schema / properties / mileage / descriptionPrevious value: -"Odometer, km"New value: +"Odometer in km; compares similar-mileage cars (band widened if few); 0 = ignore mileage" - changed
Input schema / properties / model / descriptionPrevious value: -"Model, e.g. RAV4"New value: +"Model, e.g. RAV4; a common alternate spelling is resolved" - changed
Input schema / properties / province / descriptionPrevious value: -"Province, e.g. AB"New value: +"2-letter province code, e.g. AB, ON, QC; empty = all Canada" - changed
Input schema / properties / trim / descriptionPrevious value: -"Trim"New value: +"Trim, e.g. XLE, to narrow the estimate; empty = all trims" - changed
Input schema / properties / year / descriptionPrevious value: -"Model year"New value: +"Model year, e.g. 2020" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "allowed": { + "description": "Accepted values, on an invalid_* error", + "items": {}, + "type": [ + "array", + "null" + ] + }, + "by_mileage_band": { + "items": {}, + "type": [ + "array", + "null" + ] + }, + "by_province": { + "items": {}, + "type": [ + "array", + "null" + ] + }, + "by_province_mileage_band": { + "items": {}, + "type": [ + "array", + "null" + ] + }, + "confidence": { + "description": "low, medium or high, from the sample size", + "type": [ + "string", + "null" + ] + }, + "credits_remaining": { + "description": "Credits left in the current period", + "type": [ + "integer", + "null" + ] + }, + "detail": { + "type": [ + "string", + "null" + ] + }, + "error": { + "description": "Set on a refusal, e.g. out_of_credits, not_found; result fields are then absent", + "type": [ + "string", + "null" + ] + }, + "note": { + "type": [ + "string", + "null" + ] + }, + "notes": { + "description": "Caveats to relay with the figures", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "query": { + "additionalProperties": true, + "description": "The year, make, model, condition, province, trim and mileage priced", + "type": [ + "object", + "null" + ] + }, + "sold_comps": { + "type": [ + "integer", + "null" + ] + }, + "total_comps": { + "description": "Comparables found", + "type": [ + "integer", + "null" + ] + }, + "valuation": { + "additionalProperties": true, + "description": "low, average, median, high (CAD), sample_size, avg_mileage, mileage_band", + "type": [ + "object", + "null" + ] + }, + "window_days": { + "description": "Age of the comparables window, days", + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" +}
7 tool updates
- First observed
coverage - First observed
decode_vin - First observed
get_vin - First observed
market_stats - First observed
my_usage - First observed
search_listings - First observed
valuation
Related MCP Connectors
Vehicle data for AI: VIN decoder, automotive specs, stolen checks, valuation and way more.
MarketCheck automotive data: search US/UK listings, predict prices, decode VINs, market history.
Instant Canadian scrap-car value quotes by year/make/model, provincial rates, and pickup leads.
Automotive inventory search for AI assistants: vehicles, dealers, deals, and market data.
Related MCP Servers
- FlicenseAqualityCmaintenanceMCP server for Canadian used-car search, monitoring, and market analysis, providing tools to search listings, analyze deals, track price history, and more.23-
- AlicenseNot gradedqualityBmaintenanceProvides vehicle data tools for VIN specification decoding, used-car market valuation, license plate lookup, and vehicle history retrieval.294 npmMIT
- AlicenseCqualityDmaintenanceEnables access to comprehensive vehicle information including VIN decoding, license plate OCR, vehicle history checks (theft, title, salvage records), market valuations, specifications, and warranty data for vehicles across North America and Europe.611MIT
- AlicenseAqualityBmaintenanceDecode VINs, look up specs, history, recalls, market value, and OBD codes. Recognize license plates and VINs from images. Access comprehensive vehicle data by year, make, and model to power automotive workflows.121MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.