cars-data.com — Car Specs API
Server Details
Search, compare & filter 103,372 car variants — 224 specs, 20 languages. Free demo, no key; x402.
- Status
- Healthy
- Uptime
- 96.3% over 81 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- mariusmmmmm/car-specs-api
- GitHub Stars
- 0
- Server Listing
- car-specs-api
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 10 tools
The set is built around four near-duplicate pairs (compare_full/compare_variants, filter_catalogue/filter_cars, get_specs_full/get_specs, search_catalogue/search_cars) where each pair performs the same operation over a different data scope. The descriptions do spell out demo-set vs. paid full-catalogue, so an agent can distinguish them if it reads carefully, but the systematic overlap creates real misselection risk.
All names follow a clean snake_case verb_noun pattern (compare_, filter_, get_, list_, search_) with consistent verbs. However, the marker for the full-catalogue variant is inconsistent: _full, _catalogue, and no suffix at all (compare_variants, filter_cars, search_cars), which muddies exactly the distinction that matters most.
Ten tools is a reasonable size for a car-specs API covering search, filter, compare, specs, images, and generations. The count is somewhat inflated because roughly half the surface is duplicated demo/full pairs, so the effective unique operations are closer to six.
For a read-only reference domain, the surface covers the main workflows: text search, structured filtering, comparison, detailed specs, images, and generation history. Minor gaps remain—no direct brand/model listing tool, and a /v1/variants endpoint is referenced in descriptions but has no corresponding tool.
Available Tools
10 toolscompare_fullCompare any variants (paid)ARead-onlyInspect
Side-by-side localized specs for 2-4 variants from ANYWHERE in the 103,372-variant catalogue, in 20 languages. Paid per call with x402 (USDC) — $0.1 flat for the call. Not charged when an id is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Response language, one of the 20 published languages (en, ro, fr, de, es, it, sr, hr, pt, pl, cs, sk, hu, no, sv, el, bg, da, ar, tr). Spec labels and enum values come back translated. Default: en. | |
| variant_ids | Yes | 2 to 4 opaque variant ids from search_catalogue or filter_catalogue, e.g. ['v_1a2b3c4d', 'v_5e6f7a8b'] |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | One entry per requested variant, in the order asked |
| locale | Yes | Language the response is in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=true, openWorldHint=false), and the description adds genuinely useful non-schema context: this is a paid x402/USDC call at a flat $0.1, and unknown ids incur no charge. Coverage breadth ('ANYWHERE in the 103,372-variant catalogue') is also disclosed. It does not mention rate limits or cost scaling beyond the flat fee.
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 tightly packed sentences: capability and scope first, cost model second. Every clause carries information (breadth, count range, language count, price, refund-on-unknown-id) and nothing is redundant.
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 explanation is unnecessary. Between the description (scope, batch size, languages, cost) and the schema (id format, bounds, locale enum), an agent has everything needed to decide and invoke correctly.
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 both parameters (variant_ids and the 20-value locale enum) are already fully documented, including the 2-4 bounds and the description of locale behavior. The description only echoes the 2-4 range and '20 languages', adding no syntax or semantic detail 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?
States a specific verb and resource — side-by-side localized specs for 2-4 variants — plus scope (anywhere in the 103,372-variant catalogue) and language coverage. However it never names or contrasts with the sibling compare_variants, so an agent must infer the difference from the 'full'/'anywhere' framing alone.
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?
The pricing clause ('paid per call... not charged when an id is unknown') implicitly frames when this is worth calling, and the 2-4 variant limit signals batch use. But there is no explicit when-to-use versus compare_variants or when-not-to-use guidance, leaving the sibling choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_variantsCompare variantsARead-onlyIdempotentInspect
Side-by-side localized specs for 2-4 vehicle variants. This answers from a fixed 40-car demo set. For the full 103,372-variant catalogue call compare_full — paid per call with x402 (USDC on Base), $0.1, no key, no account.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Response language, one of the 20 published languages (en, ro, fr, de, es, it, sr, hr, pt, pl, cs, sk, hu, no, sv, el, bg, da, ar, tr). Spec labels and enum values come back translated. Default: en. | |
| variant_ids | Yes | 2 to 4 opaque variant ids from search_cars or filter_cars, e.g. ['v_1a2b3c4d', 'v_5e6f7a8b'] |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | One entry per requested variant, in the order asked |
| locale | Yes | Language the response is in |
| full_catalogue | No | Present on demo answers: the paid tool that answers the same question over the full catalogue, with its price |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and closed-world, so the safety profile is covered. The description adds genuinely non-structured context: the tool is scoped to a 40-car demo set, and the alternative is a paid x402/USDC call with no key. It does not, however, note result size or ordering, which output schema presumably covers.
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, front-loaded with what the tool does and its data scope, then the routing/pricing contrast. 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?
With an output schema covering returns, annotations covering safety, and a full-coverage input schema, the remaining burden is scope and alternative routing — both delivered explicitly.
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%, so the baseline is 3, but the description adds the demo-set scoping constraint that materially narrows which variant_ids are accepted — information absent from the schema's 'opaque variant ids' wording.
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 ('side-by-side localized specs for 2-4 vehicle variants') and immediately bounds the data source ('fixed 40-car demo set'), which cleanly separates it from compare_full.
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?
Explicitly names the alternative (compare_full) and the exact condition that selects it (full 103,372-variant catalogue), plus the cost/key model of that alternative. An agent can route between the two without opening either schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filter_carsFilter carsARead-onlyIdempotentInspect
Structured catalog filter: fuel type, body type, drive layout, power/price range, model year, EV-only. This answers from a fixed 40-car demo set. For the full 103,372-variant catalogue call filter_catalogue — paid per call with x402 (USDC on Base), $0.005, no key, no account.
| Name | Required | Description | Default |
|---|---|---|---|
| ev | No | true = only variants with a traction battery (battery_kwh set: electric and plug-in). Default: false | |
| body | No | Body type, case-insensitive substring of the English label — e.g. suv, sedan, hatchback | |
| fuel | No | Fuel type, case-insensitive substring of the English label — e.g. petrol, diesel, electric, hybrid | |
| year | No | Production year the generation covers, e.g. 2022. Not applied by the demo set — reported back in ignored_filters. | |
| drive | No | Drive layout, substring match — e.g. 'front', 'rear', 'all'. Not applied by the demo set — reported back in ignored_filters. | |
| limit | No | Maximum number of results, 1–50. Default: 10. | |
| locale | No | Response language, one of the 20 published languages (en, ro, fr, de, es, it, sr, hr, pt, pl, cs, sk, hu, no, sv, el, bg, da, ar, tr). Spec labels and enum values come back translated. Default: en. | |
| power_max | No | Maximum power, hp | |
| power_min | No | Minimum power, hp | |
| price_max | No | Maximum new list price, EUR |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Matches; empty when nothing matches |
| demo | No | true when answered from the demo set |
| full_catalogue | No | Present on demo answers: the paid tool that answers the same question over the full catalogue, with its price |
| ignored_filters | No | Filters you passed that the demo set cannot apply — results are NOT narrowed by them |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: the 40-car demo set, the paid $0.005 x402 model of the alternative, no key/account. Annotations cover read-only/idempotent. However it doesn't explicitly say some filters (year, drive) are ignored – that only appears in the schema, so the description leaves that discovery to the schema.
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 tight sentences, front-loaded with the capability, then the constraint and alternative. No waste.
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?
Output schema exists, so return values needn't be explained. The description covers scope and the key alternative. It could note the ignored filters behavior and pricing of this tool, but the schema handles ignored filters and annotations cover safety.
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% with rich per-parameter descriptions including the crucial note that year/drive are ignored and reported in ignored_filters. The description lists filter dimensions but adds little syntax or semantics beyond what the schema already provides. Baseline 3 is appropriate.
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 ('structured catalog filter') and enumerates the filter dimensions. Clearly distinguishes itself from filter_catalogue, the full-catalogue sibling, by naming it and describing the difference.
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?
Explicitly states this answers from a fixed 40-car demo set and names the alternative (filter_catalogue) with its pricing/auth model. An agent can decide which tool to call without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filter_catalogueFilter the full catalogue (paid)ARead-onlyInspect
Structured filter over all 103,372 variants (not only the 40-car demo): fuel, body, drive layout, power/price range, model year, EV-only. Keyset-paginated; returns opaque variant_ids for get_specs_full / compare_full. Paid per call with x402 (USDC) — $0.005.
| Name | Required | Description | Default |
|---|---|---|---|
| ev | No | true = battery-electric variants only. Default: false | |
| body | No | Body type slug, e.g. suv, hatchback, sedan | |
| fuel | No | Fuel slug, e.g. electric, petrol, diesel, hybrid | |
| year | No | Production year the generation covers, e.g. 2022 | |
| drive | No | Drive layout, substring match — front, rear, all | |
| limit | No | Page size, 1–50. Default: 24. | |
| cursor | No | next_cursor of the previous page, to continue it | |
| locale | No | Response language, one of the 20 published languages (en, ro, fr, de, es, it, sr, hr, pt, pl, cs, sk, hu, no, sv, el, bg, da, ar, tr). Spec labels and enum values come back translated. Default: en. | |
| power_max | No | Maximum power, hp | |
| power_min | No | Minimum power, hp | |
| price_max | No | Maximum new list price, EUR |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Matches in catalogue order; empty when nothing matches |
| next_cursor | Yes | Opaque cursor for the next page, or null on the last one. Pass it as `cursor`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover only readOnly/openWorld, but the description adds several behaviors they don't: a per-call cost of $0.005 billed via x402 in USDC, keyset pagination semantics, and the fact that returned variant_ids are opaque and require a follow-up call. The payment and opaque-id details are exactly the context an agent needs before invoking.
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?
Three compact sentences, front-loaded with scope and facet list, then pagination/return, then cost. Every clause carries information; nothing is restated from the schema.
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 an 11-param, fully documented, output-schema-backed tool, the description supplies the missing pieces: scope (full catalogue vs demo), cost model, pagination behavior, and how the return value is consumed. Nothing needed to call it correctly is absent.
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% across all 11 parameters, so the baseline is 3. The description enumerates the filter facets (fuel, body, drive, power/price range, year, EV-only) and mentions keyset pagination, which lightly echoes cursor/limit but adds no syntax or constraint detail 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?
States a specific verb and resource ('Structured filter over all 103,372 variants') and immediately scopes it against siblings by contrasting with the '40-car demo' (i.e. filter_cars). An agent can tell this apart from search_cars/search_catalogue/filter_cars without opening a schema.
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?
It names the correct follow-up tools (get_specs_full / compare_full) and the output it must feed them, which is real routing guidance. It implies but does not explicitly state the when-not condition versus filter_cars or search_catalogue, so the alternative-selection rule is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_imagesGet variant imagesBRead-onlyIdempotentInspect
Image URLs (own CDN, no attribution burden) for a vehicle variant. This answers from a fixed 40-car demo set. Full catalogue: pay per request with x402, no key (GET /v1/variants/{id}/specs $0.05, /v1/search $0.005, /v1/variants $0.005, /v1/compare $0.1, USDC on Base); the Apify Actor, billed per event by Apify (https://apify.com/carsdatacom/car-specs-api); or the whole database as a licensed export (https://cars-data.com/en/api).
| Name | Required | Description | Default |
|---|---|---|---|
| variant_id | Yes | Opaque variant id from search_cars or filter_cars, e.g. v_1a2b3c4d |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Images of the variant; empty when it has none |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered. The description still adds non-obvious behavior: the data comes from a fixed 40-car demo corpus (a hard coverage limit), and images are served from the provider's own CDN with no attribution burden (a licensing trait). That is meaningful context beyond the annotations.
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 tool's actual purpose occupies one short clause; the bulk of the description is a promotional enumeration of paid endpoints, per-request prices, and USDC payment rails that an agent does not need in order to invoke this tool. The purpose is front-loaded, but most sentences do not earn their place.
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-shape explanation is not required, and the one parameter is fully documented. What is left ambiguous is the failure mode: it never says what happens when the requested variant falls outside the 40-car demo set. Adequate, with a clear gap for a tool whose coverage is its main limitation.
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% and the single variant_id parameter is well documented in the schema, including its origin ('from search_cars or filter_cars') and format example. The description adds nothing about the parameter, so the baseline 3 is appropriate.
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 first clause states a concrete output (image URLs) for a concrete resource (a vehicle variant), which cleanly separates it from get_specs and get_specs_full. It also scopes the answer to a fixed 40-car demo set, which sharpens what this tool can return. It stops short of 5 because the sibling relationship is only implied by name rather than named.
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?
The 'answers from a fixed 40-car demo set' caveat tells the agent when this tool will and won't have an answer, which is genuinely useful eligibility guidance. However, the following sentences about x402 pricing, the Apify Actor, and the licensed export describe commercial alternatives rather than when to call get_images instead of get_specs or search_cars. Usage is implied, not directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_specsGet variant specsARead-onlyIdempotentInspect
Full localized specs for one vehicle variant, in any of 20 languages — 232 spec types covering engine & fuel, performance, EV/hybrid, safety, comfort & interior, exterior, chassis, dimensions & weights, consumption (WLTP/NEDC). Each spec carries a confidence score; the response carries last_synced_at — surface both so you don't overstate certainty. This answers from a fixed 40-car demo set. For the full 103,372-variant catalogue call get_specs_full — paid per call with x402 (USDC on Base), $0.05, no key, no account.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Response language, one of the 20 published languages (en, ro, fr, de, es, it, sr, hr, pt, pl, cs, sk, hu, no, sv, el, bg, da, ar, tr). Spec labels and enum values come back translated. Default: en. | |
| variant_id | Yes | Opaque variant id from search_cars or filter_cars, e.g. v_1a2b3c4d |
Output Schema
| Name | Required | Description |
|---|---|---|
| specs | Yes | Every spec the variant carries, keyed by spec key (e.g. range_wltp_km) |
| locale | Yes | Language the response is in |
| variant_id | Yes | Opaque variant id, e.g. v_1a2b3c4d. Pass it to get_specs / get_images / compare_variants. |
| full_catalogue | No | Present on demo answers: the paid tool that answers the same question over the full catalogue, with its price |
| last_synced_at | Yes | ISO-8601 time the data was last synced — surface it with the specs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/closed-world, but the description adds real behavioral context beyond them: each spec carries a confidence score, the response carries last_synced_at, and the caller is told to surface both to avoid overstating certainty. The demo-set limitation is also disclosed. No rate-limit or error-mode detail, so not a full 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?
Front-loaded with the core purpose and scope, then the sibling routing. The pricing/key details in the last sentence are useful but slightly over-detailed for a description whose job is selection, not billing; still, every sentence 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, return values needn't be explained, yet the description still flags the confidence/last_synced_at fields that matter for interpretation. Annotations cover safety, schema covers parameters, and the demo-vs-paid boundary is disclosed — nothing needed to call this correctly 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?
Schema description coverage is 100%: both variant_id (opaque id from search_cars/filter_cars) and locale (20-language enum, labels translated, default en) are fully documented in the schema. The description only restates the language count and 'one vehicle variant', so it adds little beyond the structured fields — baseline 3.
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?
Specific verb+resource: 'Full localized specs for one vehicle variant' with concrete scope (20 languages, 232 spec types, named categories). It explicitly names the sibling it is not (get_specs_full) and the demo-set boundary, so an agent can distinguish it from get_specs_full without opening either schema.
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?
Routes clearly: this tool for the fixed 40-car demo set, get_specs_full for the full 103,372-variant catalogue, including the paid/x402 condition ($0.05, no key). The selection condition between the two tools is stated explicitly rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_specs_fullGet full specs, any variant (paid)ARead-onlyInspect
Full localized specs for ANY variant in the catalogue, in 20 languages. Paid per call with x402 (USDC) — $0.05. Not charged when the id is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Response language, one of the 20 published languages (en, ro, fr, de, es, it, sr, hr, pt, pl, cs, sk, hu, no, sv, el, bg, da, ar, tr). Spec labels and enum values come back translated. Default: en. | |
| variant_id | Yes | Opaque variant id from search_catalogue, e.g. v_1a2b3c4d |
Output Schema
| Name | Required | Description |
|---|---|---|
| specs | Yes | Every spec the variant carries, keyed by spec key (e.g. range_wltp_km) |
| locale | Yes | Language the response is in |
| year_to | Yes | Last production year; 0 or null while still in production |
| power_hp | Yes | Power, hp |
| torque_nm | Yes | Torque, Nm |
| year_from | Yes | First production year |
| brand_slug | Yes | |
| model_slug | Yes | |
| variant_id | Yes | Opaque variant id, e.g. v_1a2b3c4d. Pass it to get_specs / get_images / compare_variants. |
| battery_kwh | Yes | Traction battery capacity, kWh |
| display_name | Yes | Full variant name |
| accel_0_100_s | Yes | 0–100 km/h, seconds |
| price_new_eur | Yes | New list price, EUR |
| top_speed_kmh | Yes | Top speed, km/h |
| last_synced_at | Yes | ISO-8601 time the data was last synced — surface it with the specs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint, so the description earns credit by adding real behavioral context: paid per call via x402 in USDC at $0.05, and crucially that unknown variant ids are not charged. The auth/payment mechanism and failure-cost behavior are genuinely beyond the annotations.
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 tightly packed sentences with zero filler; the coverage scope, language count, cost, and billing exception are all front-loaded in order of importance.
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 no explanation, and annotations cover the safety profile. The description supplies pricing and the no-charge-on-unknown-id rule, leaving only the comparison with the sibling get_specs unaddressed.
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 both parameters (variant_id origin, locale enum) are already fully documented in the schema, including the 20-language list. The description's '20 languages' restates schema content rather than adding format or defaulting detail, so 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 (get full localized specs for any catalogue variant) plus scope (20 languages), which an agent can act on directly. It does not explicitly distinguish itself from the sibling get_specs, so the 'full' vs. 'non-full' boundary is left to inference.
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?
The paid-per-call disclosure implies a cost tradeoff an agent should weigh, and 'ANY variant' hints at broader coverage than get_specs, but the description never states when to pick this over the free/cheaper sibling. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_generationsList generations of a modelARead-onlyIdempotentInspect
Generations/facelifts of a model, with production years. This answers from a fixed 40-car demo set. Full catalogue: pay per request with x402, no key (GET /v1/variants/{id}/specs $0.05, /v1/search $0.005, /v1/variants $0.005, /v1/compare $0.1, USDC on Base); the Apify Actor, billed per event by Apify (https://apify.com/carsdatacom/car-specs-api); or the whole database as a licensed export (https://cars-data.com/en/api).
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Response language, one of the 20 published languages (en, ro, fr, de, es, it, sr, hr, pt, pl, cs, sk, hu, no, sv, el, bg, da, ar, tr). Spec labels and enum values come back translated. Default: en. | |
| model_id | Yes | Opaque model id from a search_cars or filter_cars result, e.g. m_1a2b3c4d |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Generations of the model |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, closed-world), so the bar is lower; the description adds genuinely useful context by disclosing that results come from a fixed 40-car demo set rather than the full catalogue, and how the full data is obtainable. It doesn't discuss ordering or return shape, but the output schema handles that.
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 core purpose is front-loaded in one crisp sentence, but the remainder is a dense pricing/ingestion catalogue with four endpoints and per-request prices, much of which reads as marketing rather than invocation guidance for this specific tool.
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 and 100% parameter coverage, the description only needs to convey scope and behavior; it does so by flagging the demo-set limitation. Minor gaps remain around ordering/pagination, but nothing essential for correct invocation 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?
Schema description coverage is 100% – model_id's opaque-id origin and locale's enum plus translation behavior are both fully documented in the schema. The description adds nothing about either 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?
The first sentence gives a specific verb+resource: generations/facelifts of a model plus production years. It's clearly distinct from get_specs, get_images, and compare_variants by resource, though it never names a sibling to route the agent explicitly.
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?
The description implies when this is useful (you have a model and want its generation history) but gives no explicit when/when-not versus siblings like get_specs or filter_cars. The paid-alternative list is about scope and ingestion, not tool selection, so it only indirectly guides usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_carsSearch carsARead-onlyIdempotentInspect
Free-text search across 103,372 vehicle variants, 120 brands, 20 languages. Returns candidate variant_ids to pass to get_specs/get_images/compare_variants. Each result carries generation_id and production years so same-named variants from different generations can be told apart. This answers from a fixed 40-car demo set. For the full 103,372-variant catalogue call search_catalogue — paid per call with x402 (USDC on Base), $0.005, no key, no account.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results, 1–50. Default: 10. | |
| query | Yes | Free text matched against brand, model and variant names, accent- and punctuation-insensitive — e.g. 'bmw 3 series' or 'tesla model s'. | |
| locale | No | Response language, one of the 20 published languages (en, ro, fr, de, es, it, sr, hr, pt, pl, cs, sk, hu, no, sv, el, bg, da, ar, tr). Spec labels and enum values come back translated. Default: en. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Matches, best first; empty when nothing matches |
| full_catalogue | No | Present on demo answers: the paid tool that answers the same question over the full catalogue, with its price |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond that: the output is candidate variant_ids intended for get_specs/get_images/compare_variants, and each result carries generation_id plus production years. It also discloses the paid x402 pricing of the alternative, which is useful decision context.
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?
Front-loaded with the core capability and chaining purpose in the opening sentences. It is somewhat dense — the pricing detail for the sibling occupies the tail — but every sentence carries information and there is 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?
For a read-only search tool with annotations covering safety and an output schema present, the description covers scope, downstream chaining, generation disambiguation, and the demo-vs-full-catalogue split. An agent has enough to call it correctly; only minor gaps remain.
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 all three parameters (query, limit, locale) are already fully documented in the schema, including the accent/punctuation-insensitive matching and the enum values. The description adds no syntax or format detail beyond what the schema provides, 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 (search) and resource (vehicle variants) with concrete scope: 103,372 variants, 120 brands, 20 languages. It explicitly distinguishes itself from the sibling search_catalogue, so an agent can tell them apart without opening either schema.
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?
Gives explicit when-to-use guidance: it answers from a fixed 40-car demo set, and for the full catalogue the agent should call search_catalogue instead. The routing condition and the alternative are both named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_catalogueSearch the full catalogue (paid)ARead-onlyInspect
Search all 103,372 variants (not only the 40-car demo). Returns opaque variant_ids for get_specs_full. Paid per call with x402 (USDC) — $0.005.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results, 1–50. Default: 10. | |
| query | Yes | Free text matched against brand, model and variant names, accent- and punctuation-insensitive — e.g. 'bmw 3 series' or 'tesla model s'. | |
| locale | No | Response language, one of the 20 published languages (en, ro, fr, de, es, it, sr, hr, pt, pl, cs, sk, hu, no, sv, el, bg, da, ar, tr). Spec labels and enum values come back translated. Default: en. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Matches, most powerful first |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnlyHint, openWorldHint=false), but the description adds important context annotations cannot carry: the per-call cost, the x402/USDC payment mechanism, and the fact that returned variant_ids are opaque and must be resolved via get_specs_full. That cost disclosure is material for an agent deciding whether to call.
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?
Three short sentences, zero filler, and the differentiating scope plus the payment caveat are front-loaded. Every clause carries information an 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?
An output schema exists, so return values need no explanation, and the description correctly supplies cost, scale, and the follow-up tool. It is nearly complete; the only gap is explicit routing guidance among the sibling search/filter tools.
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 query, limit, and locale are fully documented in the schema itself, including examples and the locale enum. The description adds no parameter-level meaning beyond that, 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 (search the catalogue) with a precise scope: all 103,372 variants rather than the 40-car demo. The scope distinction is useful, but no sibling is named, so the agent must infer that the 'demo' refers to search_cars and cannot tell how this differs from filter_cars.
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?
Implies when to prefer this tool (full coverage vs. the demo) and points forward to get_specs_full for resolving the returned IDs, which is genuinely helpful routing. However, it gives no explicit when-not guidance against search_cars or filter_cars, and no note that this call is paid while others may be free.
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.
6 tool updates
- Added
compare_full - Changed
compare_variants1 field changed- added
Output schema / properties / full_catalogueAdded value: +{ + "description": "Present on demo answers: the paid tool that answers the same question over the full catalogue, with its price", + "type": "string" +}
- Changed
filter_cars1 field changed- added
Output schema / properties / full_catalogueAdded value: +{ + "description": "Present on demo answers: the paid tool that answers the same question over the full catalogue, with its price", + "type": "string" +}
- Added
filter_catalogue - Changed
get_specs1 field changed- added
Output schema / properties / full_catalogueAdded value: +{ + "description": "Present on demo answers: the paid tool that answers the same question over the full catalogue, with its price", + "type": "string" +}
- Changed
search_cars1 field changed- added
Output schema / properties / full_catalogueAdded value: +{ + "description": "Present on demo answers: the paid tool that answers the same question over the full catalogue, with its price", + "type": "string" +}
8 tool updates
- Changed
compare_variants3 fields changed- added
Input schema / properties / locale / descriptionAdded value: +"Response language, one of the 20 published languages (en, ro, fr, de, es, it, sr, hr, pt, pl, cs, sk, hu, no, sv, el, bg, da, ar, tr). Spec labels and enum values come back translated. Default: en." - changed
Input schema / properties / variant_ids / descriptionPrevious value: -"opaque variant ids from search_cars"New value: +"2 to 4 opaque variant ids from search_cars or filter_cars, e.g. ['v_1a2b3c4d', 'v_5e6f7a8b']" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "data": { + "description": "One entry per requested variant, in the order asked", + "items": { + "additionalProperties": {}, + "properties": { + "specs": { + "additionalProperties": { + "additionalProperties": {}, + "properties": { + "confidence": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Confidence score 0–1 for this value; null when not scored" + }, + "label": { + "description": "Spec name in the requested language", + "type": "string" + }, + "unit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Unit of the value (km, kW, l/100km, …); null when unitless" + }, + "value": { + "description": "The value: a string, number or boolean, already localized. Absent when the source holds no value" + } + }, + "required": [ + "label", + "unit", + "confidence" + ], + "type": "object" + }, + "description": "Every spec the variant carries, keyed by spec key (e.g. range_wltp_km)", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "variant_id": { + "description": "Opaque variant id, e.g. v_1a2b3c4d. Pass it to get_specs / get_images / compare_variants.", + "type": "string" + } + }, + "required": [ + "variant_id", + "specs" + ], + "type": "object" + }, + "type": "array" + }, + "locale": { + "description": "Language the response is in", + "enum": [ + "en", + "ro", + "fr", + "de", + "es", + "it", + "sr", + "hr", + "pt", + "pl", + "cs", + "sk", + "hu", + "no", + "sv", + "el", + "bg", + "da", + "ar", + "tr" + ], + "type": "string" + } + }, + "required": [ + "locale", + "data" + ], + "type": "object" +}
- Changed
filter_cars11 fields changed- changed
Input schema / properties / body / descriptionPrevious value: -"body_slug, e.g. suv, sedan, hatchback"New value: +"Body type, case-insensitive substring of the English label — e.g. suv, sedan, hatchback" - changed
Input schema / properties / drive / descriptionPrevious value: -"substring match, e.g. 'front', 'rear', 'all'"New value: +"Drive layout, substring match — e.g. 'front', 'rear', 'all'. Not applied by the demo set — reported back in ignored_filters." - added
Input schema / properties / ev / descriptionAdded value: +"true = only variants with a traction battery (battery_kwh set: electric and plug-in). Default: false" - changed
Input schema / properties / fuel / descriptionPrevious value: -"e.g. petrol, diesel, electric, hybrid"New value: +"Fuel type, case-insensitive substring of the English label — e.g. petrol, diesel, electric, hybrid" - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of results, 1–50. Default: 10." - added
Input schema / properties / locale / descriptionAdded value: +"Response language, one of the 20 published languages (en, ro, fr, de, es, it, sr, hr, pt, pl, cs, sk, hu, no, sv, el, bg, da, ar, tr). Spec labels and enum values come back translated. Default: en." - added
Input schema / properties / power_max / descriptionAdded value: +"Maximum power, hp" - added
Input schema / properties / power_min / descriptionAdded value: +"Minimum power, hp" - added
Input schema / properties / price_max / descriptionAdded value: +"Maximum new list price, EUR" - added
Input schema / properties / year / descriptionAdded value: +"Production year the generation covers, e.g. 2022. Not applied by the demo set — reported back in ignored_filters." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "data": { + "description": "Matches; empty when nothing matches", + "items": { + "additionalProperties": {}, + "properties": { + "battery_kwh": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Traction battery capacity, kWh; null without one" + }, + "body_type_en": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Body type, English label" + }, + "brand": { + "type": "string" + }, + "display_name": { + "description": "Full variant name", + "type": "string" + }, + "fuel_slug": { + "description": "Fuel type, English label (e.g. Electric, Petrol)", + "type": "string" + }, + "generation": { + "description": "Generation name", + "type": "string" + }, + "generation_id": { + "description": "Opaque generation id — tells same-named variants of different generations apart", + "type": "string" + }, + "model": { + "type": "string" + }, + "model_id": { + "description": "Opaque model id, e.g. m_1a2b3c4d. Pass it to list_generations.", + "type": "string" + }, + "power_hp": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Power, hp" + }, + "price_new_eur": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "New list price, EUR" + }, + "variant_id": { + "description": "Opaque variant id, e.g. v_1a2b3c4d. Pass it to get_specs / get_images / compare_variants.", + "type": "string" + }, + "years": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Production years, e.g. '2019–2024'; an open range '2021–' is still in production" + } + }, + "required": [ + "variant_id", + "generation_id", + "model_id", + "display_name", + "brand", + "model", + "generation", + "fuel_slug", + "body_type_en", + "years", + "power_hp", + "battery_kwh", + "price_new_eur" + ], + "type": "object" + }, + "type": "array" + }, + "demo": { + "description": "true when answered from the demo set", + "type": "boolean" + }, + "ignored_filters": { + "description": "Filters you passed that the demo set cannot apply — results are NOT narrowed by them", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "data" + ], + "type": "object" +}
- Changed
get_images2 fields changed- changed
Input schema / properties / variant_id / descriptionPrevious value: -"opaque variant id from search_cars"New value: +"Opaque variant id from search_cars or filter_cars, e.g. v_1a2b3c4d" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "data": { + "description": "Images of the variant; empty when it has none", + "items": { + "additionalProperties": {}, + "properties": { + "url": { + "description": "Image URL on the cars-data.com CDN", + "type": "string" + }, + "variant": { + "description": "hero = large lead image, card = thumbnail-size", + "enum": [ + "hero", + "card" + ], + "type": "string" + } + }, + "required": [ + "url", + "variant" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "data" + ], + "type": "object" +}
- Changed
get_specs3 fields changed- added
Input schema / properties / locale / descriptionAdded value: +"Response language, one of the 20 published languages (en, ro, fr, de, es, it, sr, hr, pt, pl, cs, sk, hu, no, sv, el, bg, da, ar, tr). Spec labels and enum values come back translated. Default: en." - changed
Input schema / properties / variant_id / descriptionPrevious value: -"opaque variant id from search_cars or filter_cars, e.g. v_1a2b3c4d"New value: +"Opaque variant id from search_cars or filter_cars, e.g. v_1a2b3c4d" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "last_synced_at": { + "description": "ISO-8601 time the data was last synced — surface it with the specs", + "type": "string" + }, + "locale": { + "description": "Language the response is in", + "enum": [ + "en", + "ro", + "fr", + "de", + "es", + "it", + "sr", + "hr", + "pt", + "pl", + "cs", + "sk", + "hu", + "no", + "sv", + "el", + "bg", + "da", + "ar", + "tr" + ], + "type": "string" + }, + "specs": { + "additionalProperties": { + "additionalProperties": {}, + "properties": { + "confidence": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Confidence score 0–1 for this value; null when not scored" + }, + "label": { + "description": "Spec name in the requested language", + "type": "string" + }, + "unit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Unit of the value (km, kW, l/100km, …); null when unitless" + }, + "value": { + "description": "The value: a string, number or boolean, already localized. Absent when the source holds no value" + } + }, + "required": [ + "label", + "unit", + "confidence" + ], + "type": "object" + }, + "description": "Every spec the variant carries, keyed by spec key (e.g. range_wltp_km)", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "variant_id": { + "description": "Opaque variant id, e.g. v_1a2b3c4d. Pass it to get_specs / get_images / compare_variants.", + "type": "string" + } + }, + "required": [ + "variant_id", + "locale", + "last_synced_at", + "specs" + ], + "type": "object" +}
- Changed
get_specs_full3 fields changed- added
Input schema / properties / locale / descriptionAdded value: +"Response language, one of the 20 published languages (en, ro, fr, de, es, it, sr, hr, pt, pl, cs, sk, hu, no, sv, el, bg, da, ar, tr). Spec labels and enum values come back translated. Default: en." - changed
Input schema / properties / variant_id / descriptionPrevious value: -"opaque variant id from search_catalogue, e.g. v_1a2b3c4d"New value: +"Opaque variant id from search_catalogue, e.g. v_1a2b3c4d" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "accel_0_100_s": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "0–100 km/h, seconds" + }, + "battery_kwh": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Traction battery capacity, kWh" + }, + "brand_slug": { + "type": "string" + }, + "display_name": { + "description": "Full variant name", + "type": "string" + }, + "last_synced_at": { + "description": "ISO-8601 time the data was last synced — surface it with the specs", + "type": "string" + }, + "locale": { + "description": "Language the response is in", + "enum": [ + "en", + "ro", + "fr", + "de", + "es", + "it", + "sr", + "hr", + "pt", + "pl", + "cs", + "sk", + "hu", + "no", + "sv", + "el", + "bg", + "da", + "ar", + "tr" + ], + "type": "string" + }, + "model_slug": { + "type": "string" + }, + "power_hp": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Power, hp" + }, + "price_new_eur": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "New list price, EUR" + }, + "specs": { + "additionalProperties": { + "additionalProperties": {}, + "properties": { + "confidence": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Confidence score 0–1 for this value; null when not scored" + }, + "label": { + "description": "Spec name in the requested language", + "type": "string" + }, + "unit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Unit of the value (km, kW, l/100km, …); null when unitless" + }, + "value": { + "description": "The value: a string, number or boolean, already localized. Absent when the source holds no value" + } + }, + "required": [ + "label", + "unit", + "confidence" + ], + "type": "object" + }, + "description": "Every spec the variant carries, keyed by spec key (e.g. range_wltp_km)", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "top_speed_kmh": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Top speed, km/h" + }, + "torque_nm": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Torque, Nm" + }, + "variant_id": { + "description": "Opaque variant id, e.g. v_1a2b3c4d. Pass it to get_specs / get_images / compare_variants.", + "type": "string" + }, + "year_from": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "First production year" + }, + "year_to": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Last production year; 0 or null while still in production" + } + }, + "required": [ + "variant_id", + "locale", + "display_name", + "brand_slug", + "model_slug", + "year_from", + "year_to", + "power_hp", + "battery_kwh", + "top_speed_kmh", + "torque_nm", + "accel_0_100_s", + "price_new_eur", + "last_synced_at", + "specs" + ], + "type": "object" +}
- Changed
list_generations3 fields changed- added
Input schema / properties / locale / descriptionAdded value: +"Response language, one of the 20 published languages (en, ro, fr, de, es, it, sr, hr, pt, pl, cs, sk, hu, no, sv, el, bg, da, ar, tr). Spec labels and enum values come back translated. Default: en." - changed
Input schema / properties / model_id / descriptionPrevious value: -"opaque model id, e.g. m_1a2b3c4d"New value: +"Opaque model id from a search_cars or filter_cars result, e.g. m_1a2b3c4d" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "data": { + "description": "Generations of the model", + "items": { + "additionalProperties": {}, + "properties": { + "display_name": { + "description": "Generation / facelift name", + "type": "string" + }, + "generation_id": { + "description": "Opaque generation id", + "type": "string" + }, + "model_id": { + "description": "Opaque model id", + "type": "string" + }, + "years": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Production years, e.g. '2019–2024'; '2021–' is still in production" + } + }, + "required": [ + "generation_id", + "model_id", + "display_name", + "years" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "data" + ], + "type": "object" +}
- Changed
search_cars4 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of results, 1–50. Default: 10." - added
Input schema / properties / locale / descriptionAdded value: +"Response language, one of the 20 published languages (en, ro, fr, de, es, it, sr, hr, pt, pl, cs, sk, hu, no, sv, el, bg, da, ar, tr). Spec labels and enum values come back translated. Default: en." - changed
Input schema / properties / query / descriptionPrevious value: -"e.g. 'bmw 3 series' or 'tesla model s'"New value: +"Free text matched against brand, model and variant names, accent- and punctuation-insensitive — e.g. 'bmw 3 series' or 'tesla model s'." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "data": { + "description": "Matches, best first; empty when nothing matches", + "items": { + "additionalProperties": {}, + "properties": { + "battery_kwh": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Traction battery capacity, kWh; null without one" + }, + "body_type_en": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Body type, English label" + }, + "brand": { + "type": "string" + }, + "display_name": { + "description": "Full variant name", + "type": "string" + }, + "fuel_slug": { + "description": "Fuel type, English label (e.g. Electric, Petrol)", + "type": "string" + }, + "generation": { + "description": "Generation name", + "type": "string" + }, + "generation_id": { + "description": "Opaque generation id — tells same-named variants of different generations apart", + "type": "string" + }, + "model": { + "type": "string" + }, + "model_id": { + "description": "Opaque model id, e.g. m_1a2b3c4d. Pass it to list_generations.", + "type": "string" + }, + "power_hp": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Power, hp" + }, + "price_new_eur": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "New list price, EUR" + }, + "variant_id": { + "description": "Opaque variant id, e.g. v_1a2b3c4d. Pass it to get_specs / get_images / compare_variants.", + "type": "string" + }, + "years": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Production years, e.g. '2019–2024'; an open range '2021–' is still in production" + } + }, + "required": [ + "variant_id", + "generation_id", + "model_id", + "display_name", + "brand", + "model", + "generation", + "fuel_slug", + "body_type_en", + "years", + "power_hp", + "battery_kwh", + "price_new_eur" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "data" + ], + "type": "object" +}
- Changed
search_catalogue4 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of results, 1–50. Default: 10." - added
Input schema / properties / locale / descriptionAdded value: +"Response language, one of the 20 published languages (en, ro, fr, de, es, it, sr, hr, pt, pl, cs, sk, hu, no, sv, el, bg, da, ar, tr). Spec labels and enum values come back translated. Default: en." - changed
Input schema / properties / query / descriptionPrevious value: -"e.g. 'bmw 3 series' or 'tesla model s'"New value: +"Free text matched against brand, model and variant names, accent- and punctuation-insensitive — e.g. 'bmw 3 series' or 'tesla model s'." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "data": { + "description": "Matches, most powerful first", + "items": { + "additionalProperties": {}, + "properties": { + "brand_slug": { + "type": "string" + }, + "display_name": { + "description": "Full variant name, localized when a translation exists", + "type": "string" + }, + "generation_id": { + "description": "Opaque generation id", + "type": "string" + }, + "model_slug": { + "type": "string" + }, + "variant_id": { + "description": "Opaque variant id, e.g. v_1a2b3c4d. Pass it to get_specs_full.", + "type": "string" + }, + "year_from": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "First production year of the generation" + }, + "year_to": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Last production year; 0 or null while still in production" + } + }, + "required": [ + "variant_id", + "display_name", + "brand_slug", + "model_slug", + "generation_id", + "year_from", + "year_to" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "data" + ], + "type": "object" +}
2 tool updates
- Added
get_specs_full - Added
search_catalogue
6 tool updates
- Changed
compare_variants5 fields changed- changed
Input schema / properties / locale / enumPrevious value: -[ - "en", - "ro", - "fr", - "de", - "es", - "it", - "sr", - "hr", - "pt", - "pl", - "cs", - "sk", - "hu", - "no", - "sv", - "el", - "bg", - "da", - "ar" -]New value: +[ + "en", + "ro", + "fr", + "de", + "es", + "it", + "sr", + "hr", + "pt", + "pl", + "cs", + "sk", + "hu", + "no", + "sv", + "el", + "bg", + "da", + "ar", + "tr" +] - added
Input schema / properties / variant_ids / descriptionAdded value: +"opaque variant ids from search_cars" - removed
Input schema / properties / variant_ids / items / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / variant_ids / items / minimumRemoved value: --9007199254740991 - changed
Input schema / properties / variant_ids / items / typePrevious value: -"integer"New value: +"string"
- Changed
filter_cars1 field changed- changed
Input schema / properties / locale / enumPrevious value: -[ - "en", - "ro", - "fr", - "de", - "es", - "it", - "sr", - "hr", - "pt", - "pl", - "cs", - "sk", - "hu", - "no", - "sv", - "el", - "bg", - "da", - "ar" -]New value: +[ + "en", + "ro", + "fr", + "de", + "es", + "it", + "sr", + "hr", + "pt", + "pl", + "cs", + "sk", + "hu", + "no", + "sv", + "el", + "bg", + "da", + "ar", + "tr" +]
- Changed
get_images4 fields changed- added
Input schema / properties / variant_id / descriptionAdded value: +"opaque variant id from search_cars" - removed
Input schema / properties / variant_id / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / variant_id / minimumRemoved value: --9007199254740991 - changed
Input schema / properties / variant_id / typePrevious value: -"integer"New value: +"string"
- Changed
get_specs5 fields changed- changed
Input schema / properties / locale / enumPrevious value: -[ - "en", - "ro", - "fr", - "de", - "es", - "it", - "sr", - "hr", - "pt", - "pl", - "cs", - "sk", - "hu", - "no", - "sv", - "el", - "bg", - "da", - "ar" -]New value: +[ + "en", + "ro", + "fr", + "de", + "es", + "it", + "sr", + "hr", + "pt", + "pl", + "cs", + "sk", + "hu", + "no", + "sv", + "el", + "bg", + "da", + "ar", + "tr" +] - changed
Input schema / properties / variant_id / descriptionPrevious value: -"from search_cars or filter_cars"New value: +"opaque variant id from search_cars or filter_cars, e.g. v_1a2b3c4d" - removed
Input schema / properties / variant_id / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / variant_id / minimumRemoved value: --9007199254740991 - changed
Input schema / properties / variant_id / typePrevious value: -"integer"New value: +"string"
- Changed
list_generations5 fields changed- changed
Input schema / properties / locale / enumPrevious value: -[ - "en", - "ro", - "fr", - "de", - "es", - "it", - "sr", - "hr", - "pt", - "pl", - "cs", - "sk", - "hu", - "no", - "sv", - "el", - "bg", - "da", - "ar" -]New value: +[ + "en", + "ro", + "fr", + "de", + "es", + "it", + "sr", + "hr", + "pt", + "pl", + "cs", + "sk", + "hu", + "no", + "sv", + "el", + "bg", + "da", + "ar", + "tr" +] - added
Input schema / properties / model_id / descriptionAdded value: +"opaque model id, e.g. m_1a2b3c4d" - removed
Input schema / properties / model_id / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / model_id / minimumRemoved value: --9007199254740991 - changed
Input schema / properties / model_id / typePrevious value: -"integer"New value: +"string"
- Changed
search_cars1 field changed- changed
Input schema / properties / locale / enumPrevious value: -[ - "en", - "ro", - "fr", - "de", - "es", - "it", - "sr", - "hr", - "pt", - "pl", - "cs", - "sk", - "hu", - "no", - "sv", - "el", - "bg", - "da", - "ar" -]New value: +[ + "en", + "ro", + "fr", + "de", + "es", + "it", + "sr", + "hr", + "pt", + "pl", + "cs", + "sk", + "hu", + "no", + "sv", + "el", + "bg", + "da", + "ar", + "tr" +]
6 tool updates
- First observed
compare_variants - First observed
filter_cars - First observed
get_images - First observed
get_specs - First observed
list_generations - First observed
search_cars
Related MCP Connectors
Automotive design reference search with filters, natural language, image retrieval, and comparison.
VIN decoding and European vehicle data for automotive workflows.
Vehicle data for AI: VIN decoder, automotive specs, stolen checks, valuation and way more.
Studio-quality images and 3D models of any real car, 1990-2027, by make, model, year or VIN.
Related MCP Servers
AlicenseBqualityCmaintenancex402 Discovery Hub. Search engine for the agent economy with 1450+ services indexed. Search by keyword, browse by category, free service submission.1237 npm4MIT- AlicenseAqualityCmaintenanceValidate AI claims against live data: check endpoints, count competitors, and test hypotheses. Includes free and paid tools via x402.16MIT

AfaAgent x402 API Suiteofficial
FlicenseNot gradedqualityFmaintenance43 x402-enabled API tools — DeFi, wallet security, AI/ML, developer tools, SEO. Pay-per-call USDC on Base via x402 protocol.-- AlicenseAqualityFmaintenanceSearch 14,000+ x402-enabled HTTP APIs by keyword. Agents pay $0.01 USDC per search via x402 micropayments on Base mainnet — no API keys or accounts required.143 npm2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.