Skip to main content
Glama

OmniaAuto — Canadian Vehicle Listings

Server Details

Live Canadian vehicle listings, VIN decode and market valuations, province by province.

Ownership verified
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

A3.9/5.0

Scored across 7 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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 tools
coverageCoverageA
Read-only
Inspect

COST: 1 credit per call.

Returns the number of distinct vehicles currently listed in Canada, the number of brands and the last update date.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
noteNo
unitNoAlways vehicle
errorNoSet on a refusal, e.g. out_of_credits, not_found; result fields are then absent
brandsNoNumber of makes
vehiclesNoDistinct vehicles currently listed
latest_updateNoDate of the latest data update, YYYY-MM-DD
credits_remainingNoCredits left in the current period

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 VINA
Read-onlyIdempotent
Inspect

COST: free (no credits).

Returns the specs for any VIN, listed or not: year, make, model, trim, body, drivetrain and engine.

NameRequiredDescriptionDefault
vinYes17-character VIN, letters and digits without I, O or Q; any case

Output Schema

NameRequiredDescription
vinNo
makeNo
noteNo
trimNo
yearNo
errorNoSet on a refusal, e.g. out_of_credits, not_found; result fields are then absent
modelNo
decode_okNoFalse when the VIN could not be decoded
body_classNo
drive_typeNo
credits_remainingNoCredits left in the current period

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 VINA
Read-only
Inspect

COST: 1 credit per call.

Returns the latest live listing for one VIN: price, mileage, location and listing_url.

NameRequiredDescriptionDefault
vinYes17-character VIN, letters and digits without I, O or Q; any case

Output Schema

NameRequiredDescription
MYNoModel year
vinNo
CityNo
MakeNo
TrimNo
noteNo
errorNoSet on a refusal, e.g. out_of_credits, not_found; result fields are then absent
modelNo
priceNoAsking price, CAD; null when none is advertised
mileageNoOdometer, km
ProvinceNo
ConditionNo
listing_urlNoLink to show the user; null means no link
credits_remainingNoCredits left in the current period

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 StatsA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
makeNoMake, e.g. Toyota; exact match, any case
nearNoCentre of a radius search: city, postal code or lat,lng (e.g. 53.54,-113.49); radius_km sets its size
sortNon = largest groups first (default); sold_30d = most sold in 30 days, needs group_by and condition Used or New
modelNoModel, e.g. RAV4; exact match, any case
group_byNoUp to 2 of city, trim, year, condition, model (largest 25 groups, rest as Other); city needs province or near, trim needs make and model
provinceNo2-letter province code, e.g. AB, ON, QC; empty = all Canada
year_maxNoLatest model year, e.g. 2024; 0 = any
year_minNoEarliest model year, e.g. 2020; 0 = any
body_typeNoSUV, Sedan, Pickup, Hatchback, Minivan, Coupe, Van, Convertible or Wagon; empty = any
conditionNoNew, Used, Certified or Demo; empty = any
radius_kmNoRadius around near, in km (default 25, max 500); requires near
seller_typeNodealer (default) or private: private-seller listings, a separate segment (seller Private, city and province only, no link or VIN)

Output Schema

NameRequiredDescription
geoNoResolved near anchor and radius_km, on a radius search
noteNo
unitNoAlways vehicle
errorNoSet on a refusal, e.g. out_of_credits, not_found; result fields are then absent
detailNo
groupsNoOne object per group, with n and price figures
allowedNoAccepted values, on an invalid_* error
pricingNo
summaryNon, unique_vins, avg_price, median_price, min_price, max_price, avg_mileage, priced
group_byNoBreakdown dimensions applied
by_provinceNo
by_conditionNo
by_certificationNo
credits_remainingNoCredits left in the current period

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 UsageA
Read-onlyIdempotent
Inspect

COST: free (no credits).

Returns the account's OmniaAuto plan, credits used and remaining, reset date and per-tool credit costs.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
noteNo
planNo
errorNoSet on a refusal, e.g. out_of_credits, not_found; result fields are then absent
plans_urlNo
resets_onNoDate credits reset, YYYY-MM-DD; null when they do not refill
plan_labelNo
tool_costsNoCredits per call, by tool
credits_usedNo
rows_per_searchNoMaximum vehicles per search_listings call
credits_includedNoCredits in the current period; null on an account with no limit
credits_remainingNoCredits left in the current period

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 ListingsA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
cityNoCity name, e.g. Calgary; exact match, any case
makeNoMake, e.g. Toyota; exact match, any case
nearNoCentre of a radius search: city, postal code or lat,lng (e.g. 53.54,-113.49); radius_km sets its size
sortNoprice, mileage, year, last_seen (default), first_seen or distance (requires near)
limitNoVehicles to return, 1-10; larger values are capped at 10
modelNoModel, e.g. RAV4; exact match, any case
orderNoasc or desc; default is asc for price, mileage and distance, desc otherwise
provinceNo2-letter province code, e.g. AB, ON, QC; empty = all Canada
year_minNoEarliest model year, e.g. 2020; 0 = any
body_typeNoSUV, Sedan, Pickup, Hatchback, Minivan, Coupe, Van, Convertible or Wagon; empty = any
conditionNoNew, Used, Certified or Demo; empty = any
price_maxNoMax price in CAD; 0 = no limit
price_minNoMin price in CAD; 0 = no limit
radius_kmNoRadius around near, in km (default 25, max 500); requires near
mileage_maxNoMax odometer in km; 0 = no limit
seller_typeNodealer (default) or private: private-seller listings, a separate segment (seller Private, city and province only, no link or VIN)

Output Schema

NameRequiredDescription
geoNoResolved near anchor and radius_km, on a radius search
noteNo
unitNoAlways vehicle
errorNoSet on a refusal, e.g. out_of_credits, not_found; result fields are then absent
totalNoVehicles matching the filters
resultsNoOne object per vehicle: vin, MY, Make, model, Trim, Condition, mileage, price, City, Province, listing_url, distance_km on a radius search
returnedNoVehicles in results
total_exactNo
pricing_noteNo
credits_remainingNoCredits left in the current period
allowance_exhaustedNoTrue when the plan's vehicle limit is reached: total is returned, results is empty

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 ValuationA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
makeYesMake, e.g. Toyota; any case
trimNoTrim, e.g. XLE, to narrow the estimate; empty = all trims
yearYesModel year, e.g. 2020
modelYesModel, e.g. RAV4; a common alternate spelling is resolved
mileageNoOdometer in km; compares similar-mileage cars (band widened if few); 0 = ignore mileage
provinceNo2-letter province code, e.g. AB, ON, QC; empty = all Canada
conditionYesNew, Used, Certified or Demo (required)
seller_typeNodealer (default) or private: private-seller listings, a separate segment (seller Private, city and province only, no link or VIN)

Output Schema

NameRequiredDescription
noteNo
errorNoSet on a refusal, e.g. out_of_credits, not_found; result fields are then absent
notesNoCaveats to relay with the figures
queryNoThe year, make, model, condition, province, trim and mileage priced
detailNo
allowedNoAccepted values, on an invalid_* error
valuationNolow, average, median, high (CAD), sample_size, avg_mileage, mileage_band
confidenceNolow, medium or high, from the sample size
sold_compsNo
by_provinceNo
total_compsNoComparables found
window_daysNoAge of the comparables window, days
by_mileage_bandNo
credits_remainingNoCredits left in the current period
by_province_mileage_bandNo

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 3 tool updates
    • Changedmarket_stats1 field changed
      • addedInput schema / properties / seller_type
        Added 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"
        +}
    • Changedsearch_listings1 field changed
      • addedInput schema / properties / seller_type
        Added 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"
        +}
    • Changedvaluation1 field changed
      • addedInput schema / properties / seller_type
        Added 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"
        +}
  2. 7 tool updates
    • Changedcoverage1 field changed
      • changedOutput 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"
        +}
    • Changeddecode_vin2 fields changed
      • changedInput schema / properties / vin / description
        Previous value: -"17-character VIN"New value: +"17-character VIN, letters and digits without I, O or Q; any case"
      • changedOutput 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"
        +}
    • Changedget_vin2 fields changed
      • changedInput schema / properties / vin / description
        Previous value: -"17-character VIN"New value: +"17-character VIN, letters and digits without I, O or Q; any case"
      • changedOutput 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"
        +}
    • Changedmarket_stats12 fields changed
      • changedInput schema / properties / body_type / description
        Previous value: -"e.g. SUV, Sedan, Pickup"New value: +"SUV, Sedan, Pickup, Hatchback, Minivan, Coupe, Van, Convertible or Wagon; empty = any"
      • changedInput schema / properties / condition / description
        Previous value: -"New, Used, Certified or Demo"New value: +"New, Used, Certified or Demo; empty = any"
      • changedInput schema / properties / group_by / description
        Previous 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"
      • changedInput schema / properties / make / description
        Previous value: -"Make, e.g. Toyota"New value: +"Make, e.g. Toyota; exact match, any case"
      • changedInput schema / properties / model / description
        Previous value: -"Model, e.g. RAV4"New value: +"Model, e.g. RAV4; exact match, any case"
      • changedInput schema / properties / near / description
        Previous 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"
      • changedInput schema / properties / province / description
        Previous value: -"Province, e.g. AB"New value: +"2-letter province code, e.g. AB, ON, QC; empty = all Canada"
      • changedInput schema / properties / radius_km / description
        Previous value: -"Radius around near, km (default 25, max 500)"New value: +"Radius around near, in km (default 25, max 500); requires near"
      • changedInput schema / properties / sort / description
        Previous 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"
      • changedInput schema / properties / year_max / description
        Previous value: -"Latest model year"New value: +"Latest model year, e.g. 2024; 0 = any"
      • changedInput schema / properties / year_min / description
        Previous value: -"Earliest model year"New value: +"Earliest model year, e.g. 2020; 0 = any"
      • changedOutput 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"
        +}
    • Changedmy_usage1 field changed
      • changedOutput 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"
        +}
    • Changedsearch_listings16 fields changed
      • changedInput schema / properties / body_type / description
        Previous value: -"e.g. SUV, Sedan, Pickup"New value: +"SUV, Sedan, Pickup, Hatchback, Minivan, Coupe, Van, Convertible or Wagon; empty = any"
      • changedInput schema / properties / city / description
        Previous value: -"City name"New value: +"City name, e.g. Calgary; exact match, any case"
      • changedInput schema / properties / condition / description
        Previous value: -"New, Used, Certified or Demo"New value: +"New, Used, Certified or Demo; empty = any"
      • changedInput schema / properties / limit / description
        Previous value: -"Max vehicles to return"New value: +"Vehicles to return, 1-10; larger values are capped at 10"
      • changedInput schema / properties / make / description
        Previous value: -"Make, e.g. Toyota"New value: +"Make, e.g. Toyota; exact match, any case"
      • changedInput schema / properties / mileage_max / description
        Previous value: -"Max mileage, km"New value: +"Max odometer in km; 0 = no limit"
      • changedInput schema / properties / model / description
        Previous value: -"Model, e.g. RAV4"New value: +"Model, e.g. RAV4; exact match, any case"
      • changedInput schema / properties / near / description
        Previous 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"
      • changedInput schema / properties / order / description
        Previous value: -"asc or desc"New value: +"asc or desc; default is asc for price, mileage and distance, desc otherwise"
      • changedInput schema / properties / price_max / description
        Previous value: -"Max price, CAD"New value: +"Max price in CAD; 0 = no limit"
      • changedInput schema / properties / price_min / description
        Previous value: -"Min price, CAD"New value: +"Min price in CAD; 0 = no limit"
      • changedInput schema / properties / province / description
        Previous value: -"Province, e.g. AB"New value: +"2-letter province code, e.g. AB, ON, QC; empty = all Canada"
      • changedInput schema / properties / radius_km / description
        Previous value: -"Radius around near, km (default 25, max 500)"New value: +"Radius around near, in km (default 25, max 500); requires near"
      • changedInput schema / properties / sort / description
        Previous value: -"price, mileage, year, last_seen, first_seen or distance"New value: +"price, mileage, year, last_seen (default), first_seen or distance (requires near)"
      • changedInput schema / properties / year_min / description
        Previous value: -"Earliest model year"New value: +"Earliest model year, e.g. 2020; 0 = any"
      • changedOutput 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"
        +}
    • Changedvaluation8 fields changed
      • changedInput schema / properties / condition / description
        Previous value: -"New, Used, Certified or Demo"New value: +"New, Used, Certified or Demo (required)"
      • changedInput schema / properties / make / description
        Previous value: -"Make, e.g. Toyota"New value: +"Make, e.g. Toyota; any case"
      • changedInput schema / properties / mileage / description
        Previous value: -"Odometer, km"New value: +"Odometer in km; compares similar-mileage cars (band widened if few); 0 = ignore mileage"
      • changedInput schema / properties / model / description
        Previous value: -"Model, e.g. RAV4"New value: +"Model, e.g. RAV4; a common alternate spelling is resolved"
      • changedInput schema / properties / province / description
        Previous value: -"Province, e.g. AB"New value: +"2-letter province code, e.g. AB, ON, QC; empty = all Canada"
      • changedInput schema / properties / trim / description
        Previous value: -"Trim"New value: +"Trim, e.g. XLE, to narrow the estimate; empty = all trims"
      • changedInput schema / properties / year / description
        Previous value: -"Model year"New value: +"Model year, e.g. 2020"
      • changedOutput 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"
        +}
  3. 7 tool updates
    • First observedcoverage
    • First observeddecode_vin
    • First observedget_vin
    • First observedmarket_stats
    • First observedmy_usage
    • First observedsearch_listings
    • First observedvaluation

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides vehicle data tools for VIN specification decoding, used-car market valuation, license plate lookup, and vehicle history retrieval.
    294 npm
    MIT
  • A
    license
    C
    quality
    D
    maintenance
    Enables 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.
    61
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Decode 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.
    12
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources