Skip to main content
Glama

Server Details

UK used cars: road tax (VED), ULEZ charges, MOT dates, DVSA reliability, live dealer stock.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 41 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL

TDQS

A4.3/5.0

Scored across 9 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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 tools
ask_about_carAsk about a listed carA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
listing_idNoThe listing id, if you have it instead of the URL.
listing_urlNoThe autoza.co.uk/listing/... URL returned by search_used_cars.
include_unansweredNoDefault true. Keep the questions we cannot answer in the response so the buyer can be told what is unknown.

Output Schema

ParametersJSON Schema
NameRequiredDescription
carNo
urlNo
_noteNoWhere the figures come from: Autoza, prices in GBP, distances in miles.
errorNo
reasonNo
statusYesfor_sale, or no_longer_for_sale / not_found when it is not.
coverageNo
vat_noteNo
availableYes
price_gbpNo
price_vatNo
questionsNo
price_noteNo
price_textNo
mot_historyNo
what_this_isNo
mileage_milesNo
tell_the_userNo
price_gbp_with_vatNo
availability_cautionNo

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return structure need not be 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)A
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
co2NoCO2 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.
fuelYesFuel type. Use "alternative" for hybrid/LPG, "diesel-rde2" only for diesels meeting RDE2.
engine_size_ccNoEngine size in cc. Required for cars first registered before 1 March 2001; not used otherwise.
registration_dateNoFull 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_yearYesYear the car was FIRST registered (not the year it was bought). This decides which tax system applies.
list_price_when_newNoOriginal 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

ParametersJSON Schema
NameRequiredDescription
_noteYesWhere the figures come from: Autoza, prices in GBP, distances in miles.
basisYes
notesYes
systemYesWhich of the three UK systems applies.
co2_bandNo
tax_yearYesThe tax year the rates apply to, for example 2026/27.
annual_tax_gbpYesAnnual 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_sourceYesThe GOV.UK page the rates come from.
rates_verified_onYesWhen the rates were last checked against GOV.UK.
annual_tax_outcomesNoOne entry per possible answer. Present only when annual_tax_gbp is null.
first_year_rate_gbpNo
annual_tax_depends_onNoWhat is needed to give one figure. Present only when annual_tax_gbp is null.
historic_class_eligibleNo
expensive_car_supplement_gbpYesZero when no Expensive Car Supplement applies.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fuelYesFuel type.
days_per_yearNoDays per year the driver would enter a charging zone, 0–366. Defaults to 250 (a daily commute).
registration_yearNoYear the car was first registered. Required unless fuel is "electric".

Output Schema

ParametersJSON Schema
NameRequiredDescription
_noteYesWhere the figures come from: Autoza, prices in GBP, distances in miles.
compliantYes
exemptionNohistoric when an exemption decides the verdict, otherwise null.
confidenceYescertain, likely or borderline.
explanationYes
scotland_noteNo
official_checkerYesThe official registration checker to confirm against.
annual_cost_basisNo
rates_verified_onYesWhen the charges were last checked against the official sources.
estimated_annual_cost_gbpYes
oxford_zero_emission_zoneNo
daily_charges_if_non_compliantYes
zones_that_charge_private_carsYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
mot_expiresNoDate the current MOT expires, ISO format YYYY-MM-DD. Use this for a car that already has an MOT.
first_registeredNoDate the car was first registered, ISO format YYYY-MM-DD. Use this for a car that has never had an MOT.

Output Schema

ParametersJSON Schema
NameRequiredDescription
ruleYes
_noteYesWhere the figures come from: Autoza, prices in GBP, distances in miles.
rule_sourceNo
next_mot_dueNoThe date the current MOT expires (YYYY-MM-DD)
first_mot_dueNoFirst MOT due, for a car that has not had one yet (YYYY-MM-DD)
tell_the_userNo
max_test_fee_gbpYes
first_mot_was_dueNoWhen the first MOT fell due, when that is already in the past (YYYY-MM-DD)
max_test_fee_scopeYes
penalty_for_no_motNo
first_mot_already_passedNo
next_anniversary_guide_onlyNoThe next anniversary of that first due date. A guide, not the real expiry (YYYY-MM-DD)
earliest_test_keeping_that_dateNoThe earliest a test keeps the same renewal date (YYYY-MM-DD)

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
listing_idNoListing id, if you have it instead of the URL.
listing_urlNoFull autoza.co.uk listing URL as returned by search_used_cars.

Output Schema

ParametersJSON Schema
NameRequiredDescription
carNo
urlNo
_noteNoWhere the figures come from: Autoza, prices in GBP, distances in miles.
errorNo
foundYes
reasonNo
statusNonot_found or no_longer_for_sale when the car is not for sale.
messageNo
vat_noteNo
availableNo
price_vatNo
price_textNo
assumptionsNo
not_includedNoEach cost the total leaves out, with the reason.
tell_the_userNo
road_tax_basisNo
asking_price_gbpNo
breakdown_per_yearNo
price_gbp_with_vatNo
is_partial_estimateNo
assumed_annual_milesNo
road_tax_not_includedNo
annual_running_cost_gbp_rangeNoLow and high estimate for a year, in GBP.

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
model_slugNoModel 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_yearNoOptional. 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

ParametersJSON Schema
NameRequiredDescription
pageNoThe Autoza guide for this model.
_noteYesWhere the figures come from: Autoza, prices in GBP, distances in miles.
modelNo
summaryNo
road_taxNo
best_yearsNo
generationNo
worst_yearsNo
alternativesNo
common_faultsNo
last_reviewedNo
tell_the_userNo
why_avoid_thoseNo
why_those_yearsNo
available_modelsNoPresent when no model_slug was given.
asking_price_noteNo
registration_yearNo
this_guide_coversNo
real_world_economyNo
asking_price_on_autozaNo
guide_covers_your_yearNoNull when the guide does not date every generation it names.
mot_first_time_pass_rateNo
mot_first_time_pass_rate_for_yearNo

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
makeNoOptional: narrow to a manufacturer.
modelNoOptional: narrow to a model.
vehicle_typeNoVehicle 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

ParametersJSON Schema
NameRequiredDescription
_noteYesWhere the figures come from: Autoza, prices in GBP, distances in miles.
basisNo
scopeNo
messageNo
vat_noteNo
availableNoFalse, with a message, when too few cars match to give a fair figure. Absent when a figure is given.
make_noteNo
model_noteNo
typical_isNo
vehicle_typeNo
make_interpreted_asNo
lowest_asking_price_gbpNo
highest_asking_price_gbpNo
typical_asking_price_gbpNo

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
makeNoManufacturer, e.g. "Ford". Optional, but needed (with model) for the model-level comparison.
modelNoModel, e.g. "Focus". Optional; see make.
mileageYesCurrent odometer reading in miles.
age_yearsNoAge in whole years, only if the registration year is not known.
registration_yearNoYear 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

ParametersJSON Schema
NameRequiredDescription
carYes
modelNo
notesNo
metricNo
sourceNo
statusYesok, no_mot_due_yet or no_data.
caveatsNo
licenceNo
data_yearNo
next_stepNo
publisherNo
cell_testsNo
matched_onNo
attributionNo
explanationNo
licence_urlNo
mileage_bandNo
sample_periodNo
tests_countedNo
mileage_for_ageNo
same_figures_asNo
how_mileage_changes_itNo
first_time_pass_rate_percentNoThe share of cars of this age and mileage that pass their MOT first time, as a percentage.
all_mileages_this_age_percentNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
makeNoManufacturer, 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).
limitNoMax results, 1–25. Defaults to 10.
modelNoModel name, e.g. "Focus", "3 Series".
locationNoUK town, city or postcode district, e.g. "Manchester", "Bury", "SK4". A city matches its postcode areas, as its /cars/{city} page does.
max_yearNo
min_yearNo
body_typeNoOne of hatchback, saloon, suv, coupe, convertible, estate, mpv, pickup, van. Anything else is refused. For motorbikes, vans or motorhomes use vehicle_type.
fuel_typeNoe.g. "petrol", "diesel", "electric", "hybrid", "plug-in hybrid" (also "PHEV"). A plug-in hybrid is not counted as a hybrid.
max_priceNoMaximum price in GBP.
min_priceNoMinimum price in GBP.
transmissionNoe.g. "manual", "automatic".
vehicle_typeNoVehicle 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

ParametersJSON Schema
NameRequiredDescription
_noteYesWhere the figures come from: Autoza, prices in GBP, distances in miles.
resultsYes
fuel_noteNo
make_noteNo
model_noteNo
exact_matchYesTrue only when every filter given was understood and applied and something matched.
vehicle_typeYes
nothing_foundNo
tell_the_userNo
body_type_noteNo
filters_relaxedNoThe filters dropped to find any result, in the order they were dropped.
ignored_argumentsNoArguments that are not part of this tool and were not applied.
available_locationsNoTowns with stock, offered when the location asked for had none.
make_interpreted_asNo

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 9 tool updates
    • Changedask_about_car1 field changed
      • changedOutput 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"
        +}
    • Changedcalculate_car_tax1 field changed
      • changedOutput 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"
        +}
    • Changedcheck_clean_air_zone1 field changed
      • changedOutput 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"
        +}
    • Changedcheck_mot_due_date1 field changed
      • changedOutput 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"
        +}
    • Changedestimate_running_costs1 field changed
      • changedOutput 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"
        +}
    • Changedget_model_reliability1 field changed
      • changedOutput 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"
        +}
    • Changedget_uk_price_guide1 field changed
      • changedOutput 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"
        +}
    • Changedmot_outlook1 field changed
      • changedOutput 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"
        +}
    • Changedsearch_used_cars1 field changed
      • changedOutput 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"
        +}
  2. 1 tool update
    • Changedsearch_used_cars2 fields changed
      • changedInput schema / properties / body_type / description
        Previous 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."
      • changedInput schema / properties / fuel_type / description
        Previous 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."
  3. 2 tool updates
    • Changedget_model_reliability2 fields changed
      • changedInput schema / properties / model_slug / description
        Previous 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."
      • addedInput schema / properties / registration_year
        Added 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"
        +}
    • Changedsearch_used_cars2 fields changed
      • changedInput schema / properties / location / description
        Previous 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."
      • changedInput schema / properties / make / description
        Previous 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. 4 tool updates
    • Changedcalculate_car_tax4 fields changed
      • changedInput schema / properties / co2 / description
        Previous 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."
      • changedInput schema / properties / engine_size_cc / description
        Previous 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."
      • changedInput schema / properties / registration_date / description
        Previous 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."
      • changedInput schema / properties / registration_year / description
        Previous 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."
    • Changedcheck_clean_air_zone3 fields changed
      • changedInput schema / properties / days_per_year / description
        Previous 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)."
      • changedInput schema / properties / registration_year / description
        Previous value: -"Year the car was first registered."New value: +"Year the car was first registered. Required unless fuel is \"electric\"."
      • changedInput schema / required
        Previous value: -[
        -  "registration_year",
        -  "fuel"
        -]New value: +[
        +  "fuel"
        +]
    • Changedget_uk_price_guide1 field changed
      • addedInput schema / properties / vehicle_type
        Added 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"
        +}
    • Changedsearch_used_cars1 field changed
      • addedInput schema / properties / vehicle_type
        Added 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"
        +}
  5. 1 tool update
    • Addedmot_outlook
  6. 1 tool update
    • Addedask_about_car
  7. 1 tool update
    • Changedcalculate_car_tax1 field changed
      • addedInput schema / properties / registration_date
        Added 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"
        +}
  8. 7 tool updates
    • First observedcalculate_car_tax
    • First observedcheck_clean_air_zone
    • First observedcheck_mot_due_date
    • First observedestimate_running_costs
    • First observedget_model_reliability
    • First observedget_uk_price_guide
    • First observedsearch_used_cars

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    6
    32 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables natural language queries about UK postcodes and vehicles, including flood risk, crime rate, broadband coverage, property prices, MOT history, and ULEZ compliance.
    4
    25 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides vehicle data tools for VIN specification decoding, used-car market valuation, license plate lookup, and vehicle history retrieval.
    15 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources