Autoza UK
Server Details
UK used cars: road tax (VED), ULEZ charges, MOT dates, DVSA reliability, live dealer stock.
- Status
- Healthy
- Uptime
- 100.0% over 41 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 9 tools
Each tool targets a clearly distinct question (tax, CAZ, MOT due date, MOT pass odds, model faults, pricing, running costs, listing details, search), and the descriptions draw the lines sharply, e.g. mot_outlook vs check_mot_due_date vs get_model_reliability. Minor overlap exists where estimate_running_costs folds in road tax and MOT that calculate_car_tax and check_mot_due_date handle standalone, but the framing (aggregate estimate vs precise calculation) keeps them separable.
Almost all names follow a verb_noun snake_case pattern (calculate_car_tax, check_mot_due_date, get_model_reliability, search_used_cars). The lone deviation is mot_outlook, a noun-only name that breaks the verb-led convention, though it remains readable and clear.
Nine tools is well within the sweet spot and each one maps to a distinct research need in the UK used-car domain. Nothing feels padded or redundant at the surface level.
The surface covers a buyer's full research loop: find cars, price guidance, tax, clean air zones, MOT timing and odds, model reliability, running costs, and per-listing Q&A. Gaps are minor — no dedicated MOT history lookup (it only appears via ask_about_car when a dealer opts in) and no dealer contact or comparison tool, but core workflows are workable.
Available Tools
9 toolsask_about_carAsk about a listed carARead-onlyInspect
Answer a buyer's specific questions about ONE car listed on Autoza — previous owners, service history, warranty, number of keys, previous use, and the core specification. Every answer comes from the dealer's own listing and says so: it is what the dealer states, not an independent inspection. A question the listing does not answer comes back as unknown, which does not mean no. Pass the listing URL or id returned by search_used_cars. If the car has sold or been withdrawn, the response is status no_longer_for_sale with no answers. When the selling dealer has opted in to showing MOT history, the response also carries mot_history: that car's official DVSA MOT test record.
| Name | Required | Description | Default |
|---|---|---|---|
| listing_id | No | The listing id, if you have it instead of the URL. | |
| listing_url | No | The autoza.co.uk/listing/... URL returned by search_used_cars. | |
| include_unanswered | No | Default true. Keep the questions we cannot answer in the response so the buyer can be told what is unknown. |
Output Schema
| Name | Required | Description |
|---|---|---|
| car | No | |
| url | No | |
| _note | No | Where the figures come from: Autoza, prices in GBP, distances in miles. |
| error | No | |
| reason | No | |
| status | Yes | for_sale, or no_longer_for_sale / not_found when it is not. |
| coverage | No | |
| vat_note | No | |
| available | Yes | |
| price_gbp | No | |
| price_vat | No | |
| questions | No | |
| price_note | No | |
| price_text | No | |
| mot_history | No | |
| what_this_is | No | |
| mileage_miles | No | |
| tell_the_user | No | |
| price_gbp_with_vat | No | |
| availability_caution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/non-destructive annotations: answers are dealer-stated rather than independently inspected, 'unknown' does not mean 'no', sold/withdrawn listings return status no_longer_for_sale with no answers, and mot_history only appears when the dealer has opted in. That is exactly the provenance and failure-mode context an agent needs.
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?
Five dense sentences with no filler, ordered from what the tool answers, to provenance, to failure modes, to input sourcing, to conditional output. Nothing repeats the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be explained, yet the description still pre-announces the meaningful response states (unknown, no_longer_for_sale, mot_history) that an agent must branch on. 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 coverage is 100%, so the baseline is 3, but the description adds real sourcing guidance ('the listing URL or id returned by search_used_cars') and ties include_unanswered to the buyer-visible 'unknown' behavior, giving meaning beyond the field labels.
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 — answering a buyer's questions about ONE listed car — and enumerates the covered topics (previous owners, service history, warranty, keys, previous use, spec). The 'ONE car' scope cleanly separates it from search_used_cars, which returns listings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to feed it the listing URL or id returned by search_used_cars, and states the edge cases (unknown answer, no_longer_for_sale). It does not, however, distinguish itself from MOT-related siblings like check_mot_due_date or mot_outlook, so the agent must infer which is authoritative when a buyer asks about MOT.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_car_taxCalculate UK car tax (VED)ARead-onlyInspect
Calculate annual UK vehicle tax (VED / road tax) for a car. Handles all three UK systems: cars first registered before 1 March 2001 (taxed on engine size, so engine_size_cc is required), 1 March 2001 to 31 March 2017 (CO2 bands £20–£790, so co2 is required), and from 1 April 2017 (flat standard rate). Also works out the Expensive Car Supplement: over £40,000 list price when new for petrol, diesel and alternative fuel; over £50,000 for a zero-emission car first registered on or after 1 April 2025; and none for a zero-emission car first registered before 1 April 2025, whatever it listed for. The boundaries are dates, so registration_date gives an exact answer where the year alone is ambiguous. If an input the car's tax system needs is missing, the tool returns an error naming it rather than a figure. Use for questions about UK car tax, road tax or VED.
| Name | Required | Description | Default |
|---|---|---|---|
| co2 | No | CO2 emissions in g/km, from the V5C. Required for cars first registered 1 March 2001 – 31 March 2017. For cars registered from 1 April 2017 it only sets the one-off first-year rate. Ignored for pre-2001 cars. | |
| fuel | Yes | Fuel type. Use "alternative" for hybrid/LPG, "diesel-rde2" only for diesels meeting RDE2. | |
| engine_size_cc | No | Engine size in cc. Required for cars first registered before 1 March 2001; not used otherwise. | |
| registration_date | No | Full date of FIRST registration as YYYY-MM-DD, from the V5C. Optional but preferred: every UK VED boundary is a date (1 March 2001, 1 April 2017, 1 April 2025), so the year alone cannot tell a zero-emission car registered 1 March 2025 (no Expensive Car Supplement) from one registered 1 April 2025 (supplement). Without it, an ambiguous case is answered with a caveat in notes rather than a figure. | |
| registration_year | Yes | Year the car was FIRST registered (not the year it was bought). This decides which tax system applies. | |
| list_price_when_new | No | Original list price in GBP when the car was new. Needed only to work out the Expensive Car Supplement — based on the price when NEW, not what you pay for it used. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _note | Yes | Where the figures come from: Autoza, prices in GBP, distances in miles. |
| basis | Yes | |
| notes | Yes | |
| system | Yes | Which of the three UK systems applies. |
| co2_band | No | |
| tax_year | Yes | The tax year the rates apply to, for example 2026/27. |
| annual_tax_gbp | Yes | Annual vehicle tax in GBP. Null only when the answer depends on a date the caller did not give; annual_tax_outcomes then lists each case. |
| official_source | Yes | The GOV.UK page the rates come from. |
| rates_verified_on | Yes | When the rates were last checked against GOV.UK. |
| annual_tax_outcomes | No | One entry per possible answer. Present only when annual_tax_gbp is null. |
| first_year_rate_gbp | No | |
| annual_tax_depends_on | No | What is needed to give one figure. Present only when annual_tax_gbp is null. |
| historic_class_eligible | No | |
| expensive_car_supplement_gbp | Yes | Zero when no Expensive Car Supplement applies. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations confirm a safe read-only, closed-world operation, and the description adds substantial behaviour beyond that: it returns a named error rather than a figure when a required input is missing, and it caveats ambiguous year-only cases via notes instead of guessing. The Expensive Car Supplement thresholds and the fuel/registration-date interactions are genuine behavioural disclosure.
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 action and the three regimes, then the supplement exceptions and the error/ambiguous-case behaviour. Dense and purposeful, though the multi-clause supplement sentence is heavy enough to slow scanning slightly.
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 covers the remaining burden: regime selection, conditional inputs, error behaviour and ambiguity handling. Nothing an agent needs to invoke 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?
Coverage is 100% so the schema already documents each field, but the description adds cross-parameter semantics the schema states only per-field: which inputs each tax regime requires, that registration_date resolves date boundaries the year alone cannot, and that list_price matters only for the supplement. This conditional-requirement framing is real added value over the flat field list.
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 ('Calculate annual UK vehicle tax (VED / road tax) for a car') and immediately scopes it to the three UK registration regimes. It is trivially distinguishable from siblings like check_mot_due_date or check_clean_air_zone.
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 says 'Use for questions about UK car tax, road tax or VED' and lays out which regime applies to which registration period, which effectively tells the agent when a given input set is appropriate. It does not name a sibling alternative, but the domain is narrow enough that this costs little.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_clean_air_zoneCheck ULEZ / Clean Air Zone chargesARead-onlyInspect
Check whether a car is compliant with UK clean air zones (London ULEZ, Bristol, Birmingham) and what it would cost to drive into them. Returns compliance, the daily charge per zone, and estimated annual cost. Only 3 of the 8 English charging zones charge private cars; Scotland uses Low Emission Zones, which issue penalties rather than a daily charge. Needs the registration year and fuel (the year is not needed for an electric car); a missing input returns an error naming it. Use for ULEZ, CAZ, clean air zone or emissions-charge questions.
| Name | Required | Description | Default |
|---|---|---|---|
| fuel | Yes | Fuel type. | |
| days_per_year | No | Days per year the driver would enter a charging zone, 0–366. Defaults to 250 (a daily commute). | |
| registration_year | No | Year the car was first registered. Required unless fuel is "electric". |
Output Schema
| Name | Required | Description |
|---|---|---|
| _note | Yes | Where the figures come from: Autoza, prices in GBP, distances in miles. |
| compliant | Yes | |
| exemption | No | historic when an exemption decides the verdict, otherwise null. |
| confidence | Yes | certain, likely or borderline. |
| explanation | Yes | |
| scotland_note | No | |
| official_checker | Yes | The official registration checker to confirm against. |
| annual_cost_basis | No | |
| rates_verified_on | Yes | When the charges were last checked against the official sources. |
| estimated_annual_cost_gbp | Yes | |
| oxford_zero_emission_zone | No | |
| daily_charges_if_non_compliant | Yes | |
| zones_that_charge_private_cars | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read-only, closed-world operation, so the bar is lower. The description still adds real behavioral value: it names the returned fields, explains that a missing input returns an error naming the offending parameter, and states the year requirement is waived for electric cars.
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 and dense with useful facts, with no filler sentences. The domain caveat about English vs Scottish zones is relevant but slightly interrupts the flow before the final usage sentence, keeping it just short of ideal.
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?
Covers inputs, the conditional-requirement edge case, error behavior, and the returned fields. With an output schema present, no further return-value documentation is needed, so the definition is complete for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already documented, establishing a baseline of 3. The description's conditional note ('the year is not needed for an electric car') essentially restates what the schema already says via 'Required unless fuel is electric', adding little new semantic detail.
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 concrete verb and resource (check car compliance with UK clean air zones) plus the output it produces (compliance, daily charge per zone, estimated annual cost). The scope is narrow enough that an agent can distinguish it from siblings like calculate_car_tax or estimate_running_costs without reading the 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?
Ends with an explicit trigger list ('Use for ULEZ, CAZ, clean air zone or emissions-charge questions'), which routes the agent well. It also clarifies domain boundaries (only 3 of 8 English zones charge private cars; Scotland's LEZs issue penalties not charges), though it never names a sibling tool to prefer or avoid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_mot_due_dateWork out MOT due dateARead-onlyInspect
Work out when a car's MOT test is due, and the earliest date it can be tested without losing its renewal date. These are Great Britain (DVSA) rules: a car's first MOT falls on the third anniversary of registration, then annually. Northern Ireland is tested by the DVA, where the first test is not due until 4 years old. Test up to one calendar month minus a day before the current certificate expires and the renewal date is kept; test earlier and it resets. Pass first_registered for a car that has never had an MOT, or mot_expires for one that has. If first_registered puts the first test in the past, the response says so and points to the car's MOT record rather than giving a due date. Use for questions about MOT due dates, MOT timing, or when a car needs testing.
| Name | Required | Description | Default |
|---|---|---|---|
| mot_expires | No | Date the current MOT expires, ISO format YYYY-MM-DD. Use this for a car that already has an MOT. | |
| first_registered | No | Date the car was first registered, ISO format YYYY-MM-DD. Use this for a car that has never had an MOT. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rule | Yes | |
| _note | Yes | Where the figures come from: Autoza, prices in GBP, distances in miles. |
| rule_source | No | |
| next_mot_due | No | The date the current MOT expires (YYYY-MM-DD) |
| first_mot_due | No | First MOT due, for a car that has not had one yet (YYYY-MM-DD) |
| tell_the_user | No | |
| max_test_fee_gbp | Yes | |
| first_mot_was_due | No | When the first MOT fell due, when that is already in the past (YYYY-MM-DD) |
| max_test_fee_scope | Yes | |
| penalty_for_no_mot | No | |
| first_mot_already_passed | No | |
| next_anniversary_guide_only | No | The next anniversary of that first due date. A guide, not the real expiry (YYYY-MM-DD) |
| earliest_test_keeping_that_date | No | The earliest a test keeps the same renewal date (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare a safe read operation; the description goes well beyond that with domain behavior: the third-anniversary/annual rule, the NI four-year first test, the 'one calendar month minus a day' retention rule and its reset consequence, and the fallback that returns a pointer to the MOT record rather than a due date when first_registered is in the past.
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 and every sentence carries information, but the middle section is dense with stacked clauses and jurisdiction caveats, making it slightly heavier than needed for a two-parameter 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?
An output schema exists, so return values need not be described. Given that, the description covers the remaining gaps an agent needs: jurisdiction rules, which parameter applies to which situation, the renewal-date consequence, and the fallback behavior when no due date can be produced.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the schema already documents ISO format and which param suits an MOT'd vs non-MOT'd car. The description reinforces this routing and adds genuinely new semantics around the past-first_registered edge case, pushing it modestly above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Work out when a car's MOT test is due') and immediately adds the second capability (earliest testable date that preserves renewal). It is clearly distinct from siblings like mot_outlook, calculate_car_tax, and get_uk_price_guide without the agent needing to open 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 states exactly when to use each input ('Pass first_registered for a car that has never had an MOT, or mot_expires for one that has') and names the triggering question types ('MOT due dates, MOT timing, or when a car needs testing'). It also scopes the jurisdiction (GB/DVSA vs NI/DVA), removing ambiguity about applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_running_costsEstimate a listed vehicle's running costsARead-onlyInspect
Estimate what a specific vehicle on Autoza costs to run for a year in GBP, with a range wherever a figure is modelled. A car gets road tax, fuel, servicing, the MOT test fee and insurance. A motorcycle or van in Great Britain gets road tax and the MOT only: fuel, servicing and insurance are not estimated, so its total is partial and not_included says why. Caravans, motorhomes and trucks, and motorcycles and vans in Northern Ireland, come back with available false, because their rates and test differ. Pass the listing URL or id returned by search_used_cars. A component that cannot be worked out is left out of the total rather than guessed. A vehicle that has sold or been withdrawn comes back as status no_longer_for_sale rather than an estimate.
| Name | Required | Description | Default |
|---|---|---|---|
| listing_id | No | Listing id, if you have it instead of the URL. | |
| listing_url | No | Full autoza.co.uk listing URL as returned by search_used_cars. |
Output Schema
| Name | Required | Description |
|---|---|---|
| car | No | |
| url | No | |
| _note | No | Where the figures come from: Autoza, prices in GBP, distances in miles. |
| error | No | |
| found | Yes | |
| reason | No | |
| status | No | not_found or no_longer_for_sale when the car is not for sale. |
| message | No | |
| vat_note | No | |
| available | No | |
| price_vat | No | |
| price_text | No | |
| assumptions | No | |
| not_included | No | Each cost the total leaves out, with the reason. |
| tell_the_user | No | |
| road_tax_basis | No | |
| asking_price_gbp | No | |
| breakdown_per_year | No | |
| price_gbp_with_vat | No | |
| is_partial_estimate | No | |
| assumed_annual_miles | No | |
| road_tax_not_included | No | |
| annual_running_cost_gbp_range | No | Low and high estimate for a year, in GBP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state that this is a safe read; the description goes much further by disclosing partial totals for motorcycles/vans, the not_included explanation flag, 'available false' for caravans/motorhomes/trucks and NI vehicles, and the no_longer_for_sale status for withdrawn listings. It also states that uncomputable components are omitted rather than guessed, which is exactly the kind of modelling caveat an agent needs.
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-loads the core purpose in the first sentence and each following sentence carries a distinct exception or input rule. It is dense but no sentence is purely filler, though the density is on the heavy side for a two-parameter 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?
Even though an output schema exists, the description pre-empts the surprising return shapes (partial totals, available false, status no_longer_for_sale) so the agent can interpret responses correctly. Combined with the input guidance and edge-case coverage, nothing needed to call it 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 coverage is 100% for both parameters, so the schema already documents listing_id and listing_url. The description adds only the provenance hint that these come from search_used_cars, which is marginally useful but not substantive new semantics.
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 (estimate) and resource (running costs for a specific Autoza vehicle over a year in GBP), plus the scope of components included. It is clearly distinguishable from siblings like calculate_car_tax and get_uk_price_guide because it covers a whole running-cost bundle tied to a listing.
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?
Tells the agent how to supply input ('Pass the listing URL or id returned by search_used_cars') and enumerates the cases where it should expect non-standard results (partial totals, available false, no_longer_for_sale). It stops short of naming an alternative tool to use instead for the excluded vehicle types, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_model_reliabilityGet model reliability and MOT pass ratesARead-onlyInspect
Get known common faults, best and worst model years, and real DVSA MOT first-time pass rates for a specific used car model in the UK. The MOT pass rates are DVSA Class 4 test records for Great Britain only, age-matched against the national average; a pass with rectification at the station counts as a first-time pass (DVSA's own initial-test measure counts it as a failure and reports a lower figure). Each guide covers the generations named in its generation field; pass registration_year to get that year's DVSA pass rate and to be told when the car is from a generation the guide does not describe. Call with no model_slug to list the models covered. Use when someone asks whether a specific model is reliable, what goes wrong with it, which year to buy or avoid, or what to check before buying one.
| Name | Required | Description | Default |
|---|---|---|---|
| model_slug | No | Model identifier, e.g. "ford-focus-common-faults-uk", "ford-focus", "Ford Focus" or just "Focus". Call with no argument to list every available model. | |
| registration_year | No | Optional. Year the car was FIRST registered (V5C), e.g. 2014. Returns the DVSA pass rate for that registration year and says whether the guide covers that year's generation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | The Autoza guide for this model. |
| _note | Yes | Where the figures come from: Autoza, prices in GBP, distances in miles. |
| model | No | |
| summary | No | |
| road_tax | No | |
| best_years | No | |
| generation | No | |
| worst_years | No | |
| alternatives | No | |
| common_faults | No | |
| last_reviewed | No | |
| tell_the_user | No | |
| why_avoid_those | No | |
| why_those_years | No | |
| available_models | No | Present when no model_slug was given. |
| asking_price_note | No | |
| registration_year | No | |
| this_guide_covers | No | |
| real_world_economy | No | |
| asking_price_on_autoza | No | |
| guide_covers_your_year | No | Null when the guide does not date every generation it names. |
| mot_first_time_pass_rate | No | |
| mot_first_time_pass_rate_for_year | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/non-destructive annotations, the description discloses data provenance (DVSA Class 4 test records, Great Britain only), an important methodology nuance about rectification passes counting as first-time passes versus DVSA's own initial-test measure, and generation-coverage behavior with an explicit warning when a year falls outside the guide. This is exactly the kind of interpretation-critical context annotations cannot carry.
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 opening sentence front-loads the resource and its three output types, and subsequent sentences each add distinct value (provenance, methodology caveat, generation behavior, usage triggers). It is dense at four sentences, but no sentence is filler, so it stays efficient.
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 need no explanation; the description instead covers scope, data source, interpretation caveats, optional-parameter behavior, and usage triggers. An agent has everything needed to decide to call it and to interpret the numbers 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 coverage is 100% and both parameters are already documented in the schema, including the flexible model_slug formats and the list-all behavior. The description largely restates that (generation coverage, per-year pass rate) rather than adding syntax or format detail the schema lacks. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (a used car model's reliability data) and enumerates the concrete outputs: common faults, best/worst model years, and DVSA MOT first-time pass rates. The scope is narrowed to UK models and GB DVSA records, which makes it easy to separate from generic car tools. It never names a sibling like mot_outlook or check_mot_due_date, so differentiation is implied by scope rather than stated.
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?
Explicit when-to-use guidance is given: reliability questions, fault lookups, which year to buy or avoid, and pre-purchase checks. It also states the no-argument listing behavior and the registration_year use case, which is strong routing context. No when-not-use conditions or named alternatives are provided, keeping it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_uk_price_guideGet UK asking-price guideARead-onlyInspect
Get current UK used-car asking-price guidance from live dealer listings on Autoza — typical (median), lowest and highest asking price, optionally narrowed to a make or model. Where too few cars match to give a fair figure it says so instead of answering. Cars unless vehicle_type asks for vans, motorcycles or other stock. Prices are GBP and reflect what dealers are asking right now, not trade or valuation estimates. Use to answer "what do X cost used in the UK" or to sanity-check whether an advertised price is reasonable.
| Name | Required | Description | Default |
|---|---|---|---|
| make | No | Optional: narrow to a manufacturer. | |
| model | No | Optional: narrow to a model. | |
| vehicle_type | No | Vehicle type. Defaults to "car". Results are filtered on the vehicle type each listing is recorded under. Pass "van", "motorcycle", "motorhome", "truck" or "caravan" for other stock. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _note | Yes | Where the figures come from: Autoza, prices in GBP, distances in miles. |
| basis | No | |
| scope | No | |
| message | No | |
| vat_note | No | |
| available | No | False, with a message, when too few cars match to give a fair figure. Absent when a figure is given. |
| make_note | No | |
| model_note | No | |
| typical_is | No | |
| vehicle_type | No | |
| make_interpreted_as | No | |
| lowest_asking_price_gbp | No | |
| highest_asking_price_gbp | No | |
| typical_asking_price_gbp | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/non-destructive safety profile, and the description adds substantial context beyond them: the data source (live dealer listings), the aggregation behavior (typical/lowest/highest), the degraded-case behavior ('where too few cars match... it says so'), and the semantic caveat that these are asking prices, not valuations.
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?
Four sentences, each carrying distinct information (source, output figures, fallback behavior, scope/pricing semantics, use cases), with the core capability front-loaded. Slightly dense, but 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?
With an output schema present, the description does not need to enumerate return fields, yet it still clarifies what the figures mean and how the tool behaves when data is thin. For a 3-optional-parameter read tool, an agent has everything needed to call and interpret it 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 coverage is 100%, so the schema already documents make, model, and vehicle_type, including the default of 'car' and the enum values. The description restates the narrowing behavior and the vehicle-type switch without adding syntax or format detail beyond the schema, 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 current UK used-car asking-price guidance') plus the data source ('live dealer listings on Autoza') and the exact values returned (median, lowest, highest asking price). This is clearly distinguishable from siblings like search_used_cars and estimate_running_costs.
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 concrete use cases ('what do X cost used in the UK', 'sanity-check whether an advertised price is reasonable') and an explicit exclusion ('not trade or valuation estimates'). No sibling tool is named as an alternative, but the when-to-use guidance is clear enough to route an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mot_outlookEstimate MOT pass odds by age and mileageARead-onlyInspect
Odds that a used car passes its next MOT first time, for its age and mileage, counted from DVSA's own MOT test records with odometer readings (Great Britain) — and how those odds move one mileage band lower or higher for a car of the same age. Pass make and model as well: for the models we cover it adds that model's pass rate at the same mileage, compared fairly against cars of the same ages, and it says plainly when a model is not covered rather than guessing. It is a rate across the tested fleet, not a prediction for one car. Use when someone asks whether a high-mileage car will pass its MOT, how much mileage matters for an MOT, or whether a particular used car is likely to need MOT work.
| Name | Required | Description | Default |
|---|---|---|---|
| make | No | Manufacturer, e.g. "Ford". Optional, but needed (with model) for the model-level comparison. | |
| model | No | Model, e.g. "Focus". Optional; see make. | |
| mileage | Yes | Current odometer reading in miles. | |
| age_years | No | Age in whole years, only if the registration year is not known. | |
| registration_year | No | Year the car was FIRST registered (V5C), e.g. 2016. Age is counted from it the way the DVSA figures were. Preferred over age_years. |
Output Schema
| Name | Required | Description |
|---|---|---|
| car | Yes | |
| model | No | |
| notes | No | |
| metric | No | |
| source | No | |
| status | Yes | ok, no_mot_due_yet or no_data. |
| caveats | No | |
| licence | No | |
| data_year | No | |
| next_step | No | |
| publisher | No | |
| cell_tests | No | |
| matched_on | No | |
| attribution | No | |
| explanation | No | |
| licence_url | No | |
| mileage_band | No | |
| sample_period | No | |
| tests_counted | No | |
| mileage_for_age | No | |
| same_figures_as | No | |
| how_mileage_changes_it | No | |
| first_time_pass_rate_percent | No | The share of cars of this age and mileage that pass their MOT first time, as a percentage. |
| all_mileages_this_age_percent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it as a safe, closed-world read, so the safety bar is met. The description adds genuinely new behavioral facts: the data provenance (DVSA test records, Great Britain), the fleet-level nature versus per-car prediction, and that uncovered models are reported plainly rather than guessed — the last point being important for trusting the model-level output.
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-loads the core purpose and keeps everything in one dense paragraph with no filler sentences. It is slightly long and mildly repetitive (coverage caveats appear twice: "for the models we cover" and "says plainly when a model is not covered"), which keeps it off a 5.
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 need no explanation here. The description still covers provenance, scope, model-coverage behavior, and usage triggers, leaving only minor gaps such as how the mileage-band output is presented alongside the base estimate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description goes beyond it by explaining the semantic role of make/model (adds a model pass rate compared fairly against same-age cars, and only for covered models) and of the mileage-band movement, which the schema alone does not convey.
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 — the odds a used car passes its next MOT first time by age and mileage — plus the data source (DVSA MOT records with odometer readings, GB). It also distinguishes itself from get_model_reliability and check_mot_due_date by framing the output as a fleet pass rate with optional model comparison.
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 three explicit trigger scenarios (will a high-mileage car pass, how much mileage matters, is this car likely to need MOT work), which is strong when-to-use guidance. It also excludes a misuse case ("a rate across the tested fleet, not a prediction for one car"), but never names a sibling tool as the alternative, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_used_carsSearch used cars for saleARead-onlyInspect
Search live used cars for sale from UK dealers on Autoza, with current asking prices in GBP and mileage in miles. Returns a canonical autoza.co.uk URL, the town or area, and the vehicle type for each result. Searches cars unless vehicle_type asks for vans, motorcycles or other stock. If nothing matches every filter, optional filters are relaxed one at a time and the response lists which ones. A result whose dealer title says SOLD, SALE AGREED or DEPOSIT PAID carries availability_caution; a result with no asking price has price_gbp null, and price_note flags a very low price that may be for parts or accessories rather than a vehicle. Use when someone wants to find, browse or compare actual vehicles currently for sale in the UK.
| Name | Required | Description | Default |
|---|---|---|---|
| make | No | Manufacturer, e.g. "BMW", "Ford". Everyday names such as "VW" or "Merc" are understood, and the response says how the name was read (make_interpreted_as). | |
| limit | No | Max results, 1–25. Defaults to 10. | |
| model | No | Model name, e.g. "Focus", "3 Series". | |
| location | No | UK town, city or postcode district, e.g. "Manchester", "Bury", "SK4". A city matches its postcode areas, as its /cars/{city} page does. | |
| max_year | No | ||
| min_year | No | ||
| body_type | No | One of hatchback, saloon, suv, coupe, convertible, estate, mpv, pickup, van. Anything else is refused. For motorbikes, vans or motorhomes use vehicle_type. | |
| fuel_type | No | e.g. "petrol", "diesel", "electric", "hybrid", "plug-in hybrid" (also "PHEV"). A plug-in hybrid is not counted as a hybrid. | |
| max_price | No | Maximum price in GBP. | |
| min_price | No | Minimum price in GBP. | |
| transmission | No | e.g. "manual", "automatic". | |
| vehicle_type | No | Vehicle type. Defaults to "car". Results are filtered on the vehicle type each listing is recorded under. Pass "van", "motorcycle", "motorhome", "truck" or "caravan" for other stock. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _note | Yes | Where the figures come from: Autoza, prices in GBP, distances in miles. |
| results | Yes | |
| fuel_note | No | |
| make_note | No | |
| model_note | No | |
| exact_match | Yes | True only when every filter given was understood and applied and something matched. |
| vehicle_type | Yes | |
| nothing_found | No | |
| tell_the_user | No | |
| body_type_note | No | |
| filters_relaxed | No | The filters dropped to find any result, in the order they were dropped. |
| ignored_arguments | No | Arguments that are not part of this tool and were not applied. |
| available_locations | No | Towns with stock, offered when the location asked for had none. |
| make_interpreted_as | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/openWorld annotations by disclosing non-obvious behavior: optional filters are relaxed one at a time when nothing matches and the response reports which were relaxed, SOLD/SALE AGREED/DEPOSIT PAID listings carry availability_caution, and missing prices yield price_gbp null with a price_note for suspiciously low prices. These are exactly the side effects and quirks an agent cannot get from annotations or 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?
Front-loaded with what it searches and for whom, then adds conditional behaviors in compact clauses. It is a long description (five sentences of dense detail), but nearly every clause carries operative information about filtering, flags or defaults.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 12 optional parameters, a filter-relaxation policy and caution flags, this is a complex tool, and the description covers the default stock type, the relaxation fallback, and the interpretation of unusual results. Return values are also summarized even though an output schema exists, so an agent has everything needed to call and interpret it.
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 high (83%), so the schema already documents make interpretation, enum values, ranges and location formats. The description mostly reinforces existing parameter meaning ('Searches cars unless vehicle_type...') rather than adding new per-parameter syntax, 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 (search) plus resources (live used cars for sale from UK dealers on Autoza), gives the units (GBP, miles), and scopes itself with 'searches cars unless vehicle_type asks for vans, motorcycles or other stock.' This clearly separates it from siblings like get_uk_price_guide, ask_about_car or mot_outlook.
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?
Ends with an explicit trigger: 'Use when someone wants to find, browse or compare actual vehicles currently for sale in the UK.' That is a clear usage condition, but no sibling is named as the alternative (e.g. get_uk_price_guide for valuation-only questions), so routing is left partly inferential.
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.
9 tool updates
- Changed
ask_about_car1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "_note": { + "description": "Where the figures come from: Autoza, prices in GBP, distances in miles.", + "type": "string" + }, + "availability_caution": { + "type": "string" + }, + "available": { + "type": "boolean" + }, + "car": { + "type": [ + "string", + "null" + ] + }, + "coverage": { + "type": "string" + }, + "error": { + "type": "string" + }, + "mileage_miles": { + "type": [ + "number", + "null" + ] + }, + "mot_history": { + "type": "object" + }, + "price_gbp": { + "type": [ + "number", + "null" + ] + }, + "price_gbp_with_vat": { + "type": "number" + }, + "price_note": { + "type": "string" + }, + "price_text": { + "type": "string" + }, + "price_vat": { + "type": "string" + }, + "questions": { + "items": { + "properties": { + "answer": { + "description": "Null when the advert does not say; ifUnknown then says what to do.", + "type": [ + "string", + "null" + ] + }, + "ifUnknown": { + "type": "string" + }, + "known": { + "type": "boolean" + }, + "provenance": { + "description": "Where an answer comes from. Null when there is none.", + "type": [ + "string", + "null" + ] + }, + "question": { + "type": "string" + }, + "questionKey": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "reason": { + "type": "string" + }, + "status": { + "description": "for_sale, or no_longer_for_sale / not_found when it is not.", + "type": "string" + }, + "tell_the_user": { + "type": "string" + }, + "url": { + "type": "string" + }, + "vat_note": { + "type": "string" + }, + "what_this_is": { + "type": "string" + } + }, + "required": [ + "available", + "status" + ], + "type": "object" +}
- Changed
calculate_car_tax1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "_note": { + "description": "Where the figures come from: Autoza, prices in GBP, distances in miles.", + "type": "string" + }, + "annual_tax_depends_on": { + "description": "What is needed to give one figure. Present only when annual_tax_gbp is null.", + "type": "string" + }, + "annual_tax_gbp": { + "description": "Annual vehicle tax in GBP. Null only when the answer depends on a date the caller did not give; annual_tax_outcomes then lists each case.", + "type": [ + "number", + "null" + ] + }, + "annual_tax_outcomes": { + "description": "One entry per possible answer. Present only when annual_tax_gbp is null.", + "items": { + "properties": { + "annual_tax_gbp": { + "type": "number" + }, + "if": { + "type": "string" + } + }, + "required": [ + "if", + "annual_tax_gbp" + ], + "type": "object" + }, + "type": "array" + }, + "basis": { + "type": "string" + }, + "co2_band": { + "type": [ + "string", + "null" + ] + }, + "expensive_car_supplement_gbp": { + "description": "Zero when no Expensive Car Supplement applies.", + "type": "number" + }, + "first_year_rate_gbp": { + "type": [ + "number", + "null" + ] + }, + "historic_class_eligible": { + "type": "boolean" + }, + "notes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "official_source": { + "description": "The GOV.UK page the rates come from.", + "type": "string" + }, + "rates_verified_on": { + "description": "When the rates were last checked against GOV.UK.", + "type": "string" + }, + "system": { + "description": "Which of the three UK systems applies.", + "type": "string" + }, + "tax_year": { + "description": "The tax year the rates apply to, for example 2026/27.", + "type": "string" + } + }, + "required": [ + "annual_tax_gbp", + "tax_year", + "system", + "basis", + "expensive_car_supplement_gbp", + "notes", + "rates_verified_on", + "official_source", + "_note" + ], + "type": "object" +}
- Changed
check_clean_air_zone1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "_note": { + "description": "Where the figures come from: Autoza, prices in GBP, distances in miles.", + "type": "string" + }, + "annual_cost_basis": { + "type": [ + "string", + "null" + ] + }, + "compliant": { + "type": "boolean" + }, + "confidence": { + "description": "certain, likely or borderline.", + "type": "string" + }, + "daily_charges_if_non_compliant": { + "items": { + "properties": { + "charge_gbp_per_day": { + "type": "number" + }, + "type": { + "type": "string" + }, + "zone": { + "type": "string" + } + }, + "required": [ + "zone", + "charge_gbp_per_day" + ], + "type": "object" + }, + "type": "array" + }, + "estimated_annual_cost_gbp": { + "type": "number" + }, + "exemption": { + "description": "historic when an exemption decides the verdict, otherwise null.", + "type": [ + "string", + "null" + ] + }, + "explanation": { + "type": "string" + }, + "official_checker": { + "description": "The official registration checker to confirm against.", + "type": "string" + }, + "oxford_zero_emission_zone": { + "properties": { + "charges_gbp_per_day": { + "items": { + "properties": { + "daily": { + "type": "number" + }, + "vehicle": { + "type": "string" + } + }, + "required": [ + "vehicle", + "daily" + ], + "type": "object" + }, + "type": "array" + }, + "hours": { + "type": "string" + }, + "note": { + "type": "string" + }, + "official": { + "type": "string" + } + }, + "type": "object" + }, + "rates_verified_on": { + "description": "When the charges were last checked against the official sources.", + "type": "string" + }, + "scotland_note": { + "type": "string" + }, + "zones_that_charge_private_cars": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "compliant", + "confidence", + "explanation", + "official_checker", + "daily_charges_if_non_compliant", + "estimated_annual_cost_gbp", + "zones_that_charge_private_cars", + "rates_verified_on", + "_note" + ], + "type": "object" +}
- Changed
check_mot_due_date1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "_note": { + "description": "Where the figures come from: Autoza, prices in GBP, distances in miles.", + "type": "string" + }, + "earliest_test_keeping_that_date": { + "description": "The earliest a test keeps the same renewal date (YYYY-MM-DD)", + "type": "string" + }, + "first_mot_already_passed": { + "type": "boolean" + }, + "first_mot_due": { + "description": "First MOT due, for a car that has not had one yet (YYYY-MM-DD)", + "type": "string" + }, + "first_mot_was_due": { + "description": "When the first MOT fell due, when that is already in the past (YYYY-MM-DD)", + "type": "string" + }, + "max_test_fee_gbp": { + "type": "number" + }, + "max_test_fee_scope": { + "type": "string" + }, + "next_anniversary_guide_only": { + "description": "The next anniversary of that first due date. A guide, not the real expiry (YYYY-MM-DD)", + "type": "string" + }, + "next_mot_due": { + "description": "The date the current MOT expires (YYYY-MM-DD)", + "type": "string" + }, + "penalty_for_no_mot": { + "type": "string" + }, + "rule": { + "type": "string" + }, + "rule_source": { + "type": "string" + }, + "tell_the_user": { + "type": "string" + } + }, + "required": [ + "rule", + "max_test_fee_gbp", + "max_test_fee_scope", + "_note" + ], + "type": "object" +}
- Changed
estimate_running_costs1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "_note": { + "description": "Where the figures come from: Autoza, prices in GBP, distances in miles.", + "type": "string" + }, + "annual_running_cost_gbp_range": { + "description": "Low and high estimate for a year, in GBP.", + "items": { + "type": "number" + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + "asking_price_gbp": { + "type": [ + "number", + "null" + ] + }, + "assumed_annual_miles": { + "type": "number" + }, + "assumptions": { + "type": "string" + }, + "available": { + "type": "boolean" + }, + "breakdown_per_year": { + "type": "object" + }, + "car": { + "type": "string" + }, + "error": { + "type": "string" + }, + "found": { + "type": "boolean" + }, + "is_partial_estimate": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "not_included": { + "additionalProperties": { + "type": "string" + }, + "description": "Each cost the total leaves out, with the reason.", + "type": "object" + }, + "price_gbp_with_vat": { + "type": "number" + }, + "price_text": { + "type": "string" + }, + "price_vat": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "road_tax_basis": { + "type": "string" + }, + "road_tax_not_included": { + "type": "string" + }, + "status": { + "description": "not_found or no_longer_for_sale when the car is not for sale.", + "type": "string" + }, + "tell_the_user": { + "type": "string" + }, + "url": { + "type": "string" + }, + "vat_note": { + "type": "string" + } + }, + "required": [ + "found" + ], + "type": "object" +}
- Changed
get_model_reliability1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "_note": { + "description": "Where the figures come from: Autoza, prices in GBP, distances in miles.", + "type": "string" + }, + "alternatives": { + "type": "array" + }, + "asking_price_note": { + "type": "string" + }, + "asking_price_on_autoza": { + "type": [ + "object", + "null" + ] + }, + "available_models": { + "description": "Present when no model_slug was given.", + "items": { + "type": "string" + }, + "type": "array" + }, + "best_years": { + "items": { + "type": "string" + }, + "type": "array" + }, + "common_faults": { + "items": { + "properties": { + "area": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "symptoms": { + "type": "string" + }, + "typical_repair_cost": { + "type": "string" + }, + "what_to_check_before_buying": { + "type": "string" + }, + "years_affected": { + "type": "string" + } + }, + "required": [ + "area" + ], + "type": "object" + }, + "type": "array" + }, + "generation": { + "type": "string" + }, + "guide_covers_your_year": { + "description": "Null when the guide does not date every generation it names.", + "type": [ + "boolean", + "null" + ] + }, + "last_reviewed": { + "type": "string" + }, + "model": { + "type": "string" + }, + "mot_first_time_pass_rate": { + "type": [ + "object", + "null" + ] + }, + "mot_first_time_pass_rate_for_year": { + "type": [ + "object", + "null" + ] + }, + "page": { + "description": "The Autoza guide for this model.", + "type": "string" + }, + "real_world_economy": { + "type": [ + "string", + "null" + ] + }, + "registration_year": { + "type": "integer" + }, + "road_tax": { + "type": [ + "string", + "null" + ] + }, + "summary": { + "type": "string" + }, + "tell_the_user": { + "type": "string" + }, + "this_guide_covers": { + "type": "string" + }, + "why_avoid_those": { + "type": "string" + }, + "why_those_years": { + "type": "string" + }, + "worst_years": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "_note" + ], + "type": "object" +}
- Changed
get_uk_price_guide1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "_note": { + "description": "Where the figures come from: Autoza, prices in GBP, distances in miles.", + "type": "string" + }, + "available": { + "description": "False, with a message, when too few cars match to give a fair figure. Absent when a figure is given.", + "type": "boolean" + }, + "basis": { + "type": "string" + }, + "highest_asking_price_gbp": { + "type": "number" + }, + "lowest_asking_price_gbp": { + "type": "number" + }, + "make_interpreted_as": { + "type": "string" + }, + "make_note": { + "type": "string" + }, + "message": { + "type": "string" + }, + "model_note": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "typical_asking_price_gbp": { + "type": "number" + }, + "typical_is": { + "type": "string" + }, + "vat_note": { + "type": "string" + }, + "vehicle_type": { + "type": "string" + } + }, + "required": [ + "_note" + ], + "type": "object" +}
- Changed
mot_outlook1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "all_mileages_this_age_percent": { + "type": "number" + }, + "attribution": { + "type": "string" + }, + "car": { + "properties": { + "age_years": { + "type": "integer" + }, + "make": { + "type": "string" + }, + "mileage_miles": { + "type": "number" + }, + "model": { + "type": "string" + }, + "registration_year": { + "type": "integer" + } + }, + "type": "object" + }, + "caveats": { + "items": { + "type": "string" + }, + "type": "array" + }, + "cell_tests": { + "type": "integer" + }, + "data_year": { + "type": "integer" + }, + "explanation": { + "type": "string" + }, + "first_time_pass_rate_percent": { + "description": "The share of cars of this age and mileage that pass their MOT first time, as a percentage.", + "type": "number" + }, + "how_mileage_changes_it": { + "type": "object" + }, + "licence": { + "type": "string" + }, + "licence_url": { + "type": "string" + }, + "matched_on": { + "type": "string" + }, + "metric": { + "type": "string" + }, + "mileage_band": { + "type": "string" + }, + "mileage_for_age": { + "type": "object" + }, + "model": { + "type": "object" + }, + "next_step": { + "type": "string" + }, + "notes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "publisher": { + "type": "string" + }, + "same_figures_as": { + "type": "string" + }, + "sample_period": { + "type": "string" + }, + "source": { + "type": "string" + }, + "status": { + "description": "ok, no_mot_due_yet or no_data.", + "type": "string" + }, + "tests_counted": { + "type": "integer" + } + }, + "required": [ + "status", + "car" + ], + "type": "object" +}
- Changed
search_used_cars1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "_note": { + "description": "Where the figures come from: Autoza, prices in GBP, distances in miles.", + "type": "string" + }, + "available_locations": { + "description": "Towns with stock, offered when the location asked for had none.", + "items": { + "type": "string" + }, + "type": "array" + }, + "body_type_note": { + "type": "string" + }, + "exact_match": { + "description": "True only when every filter given was understood and applied and something matched.", + "type": "boolean" + }, + "filters_relaxed": { + "description": "The filters dropped to find any result, in the order they were dropped.", + "items": { + "type": "string" + }, + "type": "array" + }, + "fuel_note": { + "type": "string" + }, + "ignored_arguments": { + "description": "Arguments that are not part of this tool and were not applied.", + "items": { + "type": "string" + }, + "type": "array" + }, + "make_interpreted_as": { + "type": "string" + }, + "make_note": { + "type": "string" + }, + "model_note": { + "type": "string" + }, + "nothing_found": { + "type": "string" + }, + "results": { + "items": { + "properties": { + "availability_caution": { + "type": "string" + }, + "body_type": { + "type": [ + "string", + "null" + ] + }, + "colour": { + "type": [ + "string", + "null" + ] + }, + "fuel": { + "type": [ + "string", + "null" + ] + }, + "location": { + "type": [ + "string", + "null" + ] + }, + "make": { + "type": [ + "string", + "null" + ] + }, + "mileage_miles": { + "type": [ + "number", + "null" + ] + }, + "model": { + "type": [ + "string", + "null" + ] + }, + "price_gbp": { + "description": "The asking price in GBP, or null when the advert has none.", + "type": [ + "number", + "null" + ] + }, + "price_gbp_with_vat": { + "type": "number" + }, + "price_note": { + "type": "string" + }, + "price_text": { + "type": "string" + }, + "price_vat": { + "description": "plus_vat when the advertised price is before VAT, vat_included when it includes VAT. Absent when the advert does not say.", + "type": "string" + }, + "transmission": { + "type": [ + "string", + "null" + ] + }, + "updated": { + "description": "When the advert was last updated, as an ISO 8601 date and time.", + "type": "string" + }, + "url": { + "description": "The canonical autoza.co.uk advert address. Pass it to estimate_running_costs or ask_about_car.", + "type": "string" + }, + "variant": { + "type": [ + "string", + "null" + ] + }, + "vat_note": { + "type": "string" + }, + "vehicle_type": { + "type": "string" + }, + "year": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "url", + "vehicle_type" + ], + "type": "object" + }, + "type": "array" + }, + "tell_the_user": { + "type": "string" + }, + "vehicle_type": { + "type": "string" + } + }, + "required": [ + "results", + "exact_match", + "vehicle_type", + "_note" + ], + "type": "object" +}
1 tool update
- Changed
search_used_cars2 fields changed- changed
Input schema / properties / body_type / descriptionPrevious value: -"e.g. \"hatchback\", \"estate\", \"suv\", \"saloon\"."New value: +"One of hatchback, saloon, suv, coupe, convertible, estate, mpv, pickup, van. Anything else is refused. For motorbikes, vans or motorhomes use vehicle_type." - changed
Input schema / properties / fuel_type / descriptionPrevious value: -"e.g. \"petrol\", \"diesel\", \"electric\", \"hybrid\"."New value: +"e.g. \"petrol\", \"diesel\", \"electric\", \"hybrid\", \"plug-in hybrid\" (also \"PHEV\"). A plug-in hybrid is not counted as a hybrid."
2 tool updates
- Changed
get_model_reliability2 fields changed- changed
Input schema / properties / model_slug / descriptionPrevious value: -"Model identifier, e.g. \"ford-focus-common-faults-uk\". Call with no argument to list every available model."New value: +"Model identifier, e.g. \"ford-focus-common-faults-uk\", \"ford-focus\", \"Ford Focus\" or just \"Focus\". Call with no argument to list every available model." - added
Input schema / properties / registration_yearAdded value: +{ + "description": "Optional. Year the car was FIRST registered (V5C), e.g. 2014. Returns the DVSA pass rate for that registration year and says whether the guide covers that year's generation.", + "type": "integer" +}
- Changed
search_used_cars2 fields changed- changed
Input schema / properties / location / descriptionPrevious value: -"UK city or region, e.g. \"Manchester\", \"Belfast\"."New value: +"UK town, city or postcode district, e.g. \"Manchester\", \"Bury\", \"SK4\". A city matches its postcode areas, as its /cars/{city} page does." - changed
Input schema / properties / make / descriptionPrevious value: -"Manufacturer, e.g. \"BMW\", \"Ford\"."New value: +"Manufacturer, e.g. \"BMW\", \"Ford\". Everyday names such as \"VW\" or \"Merc\" are understood, and the response says how the name was read (make_interpreted_as)."
4 tool updates
- Changed
calculate_car_tax4 fields changed- changed
Input schema / properties / co2 / descriptionPrevious value: -"CO2 emissions in g/km. Required for cars registered March 2001–March 2017; ignored for pre-2001 cars."New value: +"CO2 emissions in g/km, from the V5C. Required for cars first registered 1 March 2001 – 31 March 2017. For cars registered from 1 April 2017 it only sets the one-off first-year rate. Ignored for pre-2001 cars." - changed
Input schema / properties / engine_size_cc / descriptionPrevious value: -"Engine size in cc. Only used for cars registered before March 2001."New value: +"Engine size in cc. Required for cars first registered before 1 March 2001; not used otherwise." - changed
Input schema / properties / registration_date / descriptionPrevious value: -"Full date of FIRST registration as YYYY-MM-DD, from the V5C. Optional but strongly preferred: every UK VED boundary is a date (1 March 2001, 1 April 2017, 1 April 2025), so the year alone cannot tell a zero-emission car registered 1 March 2025 (no Expensive Car Supplement) from one registered 1 April 2025 (supplement). Without it, an ambiguous case is answered with a caveat in notes rather than a figure."New value: +"Full date of FIRST registration as YYYY-MM-DD, from the V5C. Optional but preferred: every UK VED boundary is a date (1 March 2001, 1 April 2017, 1 April 2025), so the year alone cannot tell a zero-emission car registered 1 March 2025 (no Expensive Car Supplement) from one registered 1 April 2025 (supplement). Without it, an ambiguous case is answered with a caveat in notes rather than a figure." - changed
Input schema / properties / registration_year / descriptionPrevious value: -"Year the car was FIRST registered (not the year it was bought). This decides which tax system applies and is the single most important input."New value: +"Year the car was FIRST registered (not the year it was bought). This decides which tax system applies."
- Changed
check_clean_air_zone3 fields changed- changed
Input schema / properties / days_per_year / descriptionPrevious value: -"Days per year the driver would enter a charging zone. Defaults to 250 (a daily commute)."New value: +"Days per year the driver would enter a charging zone, 0–366. Defaults to 250 (a daily commute)." - changed
Input schema / properties / registration_year / descriptionPrevious value: -"Year the car was first registered."New value: +"Year the car was first registered. Required unless fuel is \"electric\"." - changed
Input schema / requiredPrevious value: -[ - "registration_year", - "fuel" -]New value: +[ + "fuel" +]
- Changed
get_uk_price_guide1 field changed- added
Input schema / properties / vehicle_typeAdded value: +{ + "description": "Vehicle type. Defaults to \"car\". Results are filtered on the vehicle type each listing is recorded under. Pass \"van\", \"motorcycle\", \"motorhome\", \"truck\" or \"caravan\" for other stock.", + "enum": [ + "car", + "van", + "motorcycle", + "motorhome", + "truck", + "caravan" + ], + "type": "string" +}
- Changed
search_used_cars1 field changed- added
Input schema / properties / vehicle_typeAdded value: +{ + "description": "Vehicle type. Defaults to \"car\". Results are filtered on the vehicle type each listing is recorded under. Pass \"van\", \"motorcycle\", \"motorhome\", \"truck\" or \"caravan\" for other stock.", + "enum": [ + "car", + "van", + "motorcycle", + "motorhome", + "truck", + "caravan" + ], + "type": "string" +}
1 tool update
- Added
mot_outlook
1 tool update
- Added
ask_about_car
1 tool update
- Changed
calculate_car_tax1 field changed- added
Input schema / properties / registration_dateAdded value: +{ + "description": "Full date of FIRST registration as YYYY-MM-DD, from the V5C. Optional but strongly preferred: every UK VED boundary is a date (1 March 2001, 1 April 2017, 1 April 2025), so the year alone cannot tell a zero-emission car registered 1 March 2025 (no Expensive Car Supplement) from one registered 1 April 2025 (supplement). Without it, an ambiguous case is answered with a caveat in notes rather than a figure.", + "type": "string" +}
7 tool updates
- First observed
calculate_car_tax - First observed
check_clean_air_zone - First observed
check_mot_due_date - First observed
estimate_running_costs - First observed
get_model_reliability - First observed
get_uk_price_guide - First observed
search_used_cars
Related MCP Connectors
UK vehicle lookup, MOT status and full MOT history from official DVSA data, by registration.
UK MOT failure data and official UK, French, Japanese and EU vehicle recalls.
UK tolls & charges: DVLA vehicle checks (ULEZ/CAZ/MOT/tax), prices, penalties, pay-by deadlines.
UK used-car checks: MOT history, mileage and an advert's claims tested against the records
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI assistants to search live used-car inventory, verify whether asking prices are fair market value, estimate annual road tax and running costs, and initiate contact with sellers for the Portuguese market.632 npmMIT

Zyfy MCP Serverofficial
AlicenseAqualityCmaintenanceEnables natural language queries about UK postcodes and vehicles, including flood risk, crime rate, broadband coverage, property prices, MOT history, and ULEZ compliance.425 npmMIT- AlicenseNot gradedqualityBmaintenanceProvides vehicle data tools for VIN specification decoding, used-car market valuation, license plate lookup, and vehicle history retrieval.15 npmMIT
- FlicenseNot gradedqualityBmaintenanceSearch, localized specs (180 spec types across 19 categories), compare, and structured filters over 102k+ vehicle variants in 19 languages, from cars-data.com.-
Glama MCP Gateway
Add one secure layer between your agents and this server.