Used-car listings in Portugal: search, price statistics, comparables and articles.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Given one listing, find comparable ones: same make, similar year, mileage and price band. Use this when the user likes a car but wants alternatives — 'find me something similar', 'the same but cheaper', 'what else is around this price'. Pass `maxPrice` for the cheaper case; without it, comparables are drawn from a band around the reference price. Comparability is by structure (make/model/year/km/price), not by text similarity: it answers 'is this well priced for what it is', which a keyword search cannot.
Slug of the reference listing, as returned by search_cars or get_car_detail.
Maximum number of comparables (default 6, max 20).
Optional budget ceiling, in EUR. Use it for 'similar but cheaper'; it overrides the default band around the reference price.
Given one listing, find comparable ones: same make, similar year, mileage and price band. Use this when the user likes a car but wants alternatives — 'find me something similar', 'the same but cheaper', 'what else is around this price'. Pass `maxPrice` for the cheaper case; without it, comparables are drawn from a band around the reference price. Comparability is by structure (make/model/year/km/price), not by text similarity: it answers 'is this well priced for what it is', which a keyword search cannot.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Slug of the reference listing, as returned by search_cars or get_car_detail. |
| limit | number | Maximum number of comparables (default 6, max 20). |
| maxPrice | number | Optional budget ceiling, in EUR. Use it for 'similar but cheaper'; it overrides the default band around the reference price. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Slug of the reference listing, as returned by search_cars or get_car_detail."
},
"limit": {
"type": "number",
"description": "Maximum number of comparables (default 6, max 20)."
},
"maxPrice": {
"type": "number",
"description": "Optional budget ceiling, in EUR. Use it for 'similar but cheaper'; it overrides the default band around the reference price."
}
}
}Get the complete record of one used-car listing in Portugal by its slug. Use this after search_cars when the user asks about a specific car: full description, features, photos, seller, and the original source URL to cite.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Unique listing slug, as returned by search_cars. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Unique listing slug, as returned by search_cars."
}
}
}Get price statistics for a slice of the Portugal used-car market: how many listings match, the median price, the p25–p75 range, the median price per kilometre and a breakdown by body type. Use this when the user asks what something costs, whether an asking price is fair, or how two makes compare — instead of listing individual cars. Takes the same filters as search_cars and describes exactly the set that tool would return, so the two never disagree. Reports medians and quartiles rather than averages, because car prices have a long right tail and a single luxury listing moves an average.
| Argument | Type | Description |
|---|---|---|
| fuel | string | Fuel type. GASOLINE = gasolina, ELECTRIC = eléctrico, HYBRID = full hybrid, PLUG_IN_HYBRID = PHEV. |
| make | string | Make slug (e.g. toyota, bmw, volkswagen). Not free text — the slug is the same in every market. |
| kmMax | number | Maximum kilometres on the odometer. |
| model | string | Model slug (e.g. corolla, serie-3, golf). Requires `make` to disambiguate. |
| yearMax | number | Maximum registration year. |
| yearMin | number | Minimum registration year. |
| bodyType | string | Body style. SEDAN = berlina, HATCHBACK = citadino, COMBI = carrinha, CABRIO = descapotável, MINIVAN = monovolume. |
Search editorial articles about the used-car market in Portugal: buying guides, reviews, comparisons and market analysis. Use this when the user asks how something works — financing, warranty, IUC, IPO/ITV, the buying process — rather than asking for listings.
| Argument | Type | Description |
|---|---|---|
| limit | number | Maximum number of results (default 5, max 10). |
| category | string | Article category. |
{
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "Maximum number of results (default 5, max 10)."
},
"category": {
"enum": [
"GUIA",
"REVIEW",
"COMPARATIVO",
"MERCADO",
"GLOSSARIO",
"NOTICIA"
],
"type": "string",
"description": "Article category."
}
}
}Search current used-car listings for sale in Portugal. Use this whenever the user wants to find, compare or explore cars — by make, model, budget, mileage, fuel or district. Returns price, mileage, fuel, body and a citable listing URL, plus `total`: the exact number of listings matching the filters, which makes this tool usable to answer 'how many' questions. Listings are aggregated from stands and portals and refreshed daily; each result carries `publishedAt`. Prefer the broadest filters that answer the question and report `total` as a floor, not a census.
| Argument | Type | Description |
|---|---|---|
| fuel | string | Fuel type. GASOLINE = gasolina, ELECTRIC = eléctrico, HYBRID = full hybrid, PLUG_IN_HYBRID = PHEV. |
| make | string | Make slug (e.g. toyota, bmw, volkswagen). Not free text — the slug is the same in every market. |
| page | number | 1-based page number. Use with `total` to walk a large result set. |
| sort | string | Result order. Default `recent` (most recently seen first). |
| kmMax | number | Maximum kilometres on the odometer. |
| limit | number | Results per page (default 10, max 20). |
| model | string | Model slug (e.g. corolla, serie-3, golf). Requires `make` to disambiguate. |
Search Portugal listings by describing the car in plain language, matched against listing text by meaning rather than keywords. Use this for wants that are not filter fields — 'a family SUV good in the snow', 'a low-mileage hybrid for the city', 'a used 4x4 to restore'. Prefer search_cars for entirely structural queries (make/model/budget); use this when the request is descriptive. Combine both by passing structural filters here too — they act as hard constraints while the description only ranks. Results are ordered by relevance, so `total` is the number matching the structural filters, not the number that fit the description.
| Argument | Type | Description |
|---|---|---|
| fuel | string | Fuel type. GASOLINE = gasolina, ELECTRIC = eléctrico, HYBRID = full hybrid, PLUG_IN_HYBRID = PHEV. |
| make | string | Make slug (e.g. toyota, bmw, volkswagen). Not free text — the slug is the same in every market. |
| kmMax | number | Maximum kilometres on the odometer. |
| limit | number | Maximum number of results (default 10, max 20). |
| yearMin | number | Minimum registration year. |
| bodyType | string | Body style. SEDAN = berlina, HATCHBACK = citadino, COMBI = carrinha, CABRIO = descapotável, MINIVAN = monovolume. |
| district | string | District or region inside the market (e.g. Lisboa, Porto, Berlin, Madrid). Matched exactly. |
| priceMax | number | Maximum price in the market currency. Listings with no published price are excluded by either bound. |
| priceMin | number | Minimum price in the market currency. |
| condition | string | Vehicle condition. new = 0 km / registered this year; semi_new = <2 years and <20 000 km; used = everything else. |
{
"type": "object",
"properties": {
"fuel": {
"enum": [
"GASOLINE",
"DIESEL",
"ELECTRIC",
"HYBRID",
"PLUG_IN_HYBRID",
"LPG"
],
"type": "string",
"description": "Fuel type. GASOLINE = gasolina, ELECTRIC = eléctrico, HYBRID = full hybrid, PLUG_IN_HYBRID = PHEV."
},
"make": {
"type": "string",
"description": "Make slug (e.g. toyota, bmw, volkswagen). Not free text — the slug is the same in every market."
},
"kmMax": {
"type": "number",
"description": "Maximum kilometres on the odometer."
},
"model": {
"type": "string",
"description": "Model slug (e.g. corolla, serie-3, golf). Requires `make` to disambiguate."
},
"yearMax": {
"type": "number",
"description": "Maximum registration year."
},
"yearMin": {
"type": "number",
"description": "Minimum registration year."
},
"bodyType": {
"enum": [
"SUV",
"SEDAN",
"HATCHBACK",
"COMBI",
"COUPE",
"CABRIO",
"MINIVAN",
"PICKUP"
],
"type": "string",
"description": "Body style. SEDAN = berlina, HATCHBACK = citadino, COMBI = carrinha, CABRIO = descapotável, MINIVAN = monovolume."
},
"district": {
"type": "string",
"description": "District or region inside the market (e.g. Lisboa, Porto, Berlin, Madrid). Matched exactly."
},
"priceMax": {
"type": "number",
"description": "Maximum price in the market currency. Listings with no published price are excluded by either bound."
},
"priceMin": {
"type": "number",
"description": "Minimum price in the market currency."
},
"condition": {
"enum": [
"new",
"used",
"semi_new"
],
"type": "string",
"description": "Vehicle condition. new = 0 km / registered this year; semi_new = <2 years and <20 000 km; used = everything else."
}
}
}| yearMax | number | Maximum registration year. |
| yearMin | number | Minimum registration year. |
| bodyType | string | Body style. SEDAN = berlina, HATCHBACK = citadino, COMBI = carrinha, CABRIO = descapotável, MINIVAN = monovolume. |
| district | string | District or region inside the market (e.g. Lisboa, Porto, Berlin, Madrid). Matched exactly. |
| priceMax | number | Maximum price in the market currency. Listings with no published price are excluded by either bound. |
| priceMin | number | Minimum price in the market currency. |
| condition | string | Vehicle condition. new = 0 km / registered this year; semi_new = <2 years and <20 000 km; used = everything else. |
{
"type": "object",
"properties": {
"fuel": {
"enum": [
"GASOLINE",
"DIESEL",
"ELECTRIC",
"HYBRID",
"PLUG_IN_HYBRID",
"LPG"
],
"type": "string",
"description": "Fuel type. GASOLINE = gasolina, ELECTRIC = eléctrico, HYBRID = full hybrid, PLUG_IN_HYBRID = PHEV."
},
"make": {
"type": "string",
"description": "Make slug (e.g. toyota, bmw, volkswagen). Not free text — the slug is the same in every market."
},
"page": {
"type": "number",
"description": "1-based page number. Use with `total` to walk a large result set."
},
"sort": {
"enum": [
"recent",
"price_asc",
"price_desc",
"km_asc",
"year_desc"
],
"type": "string",
"description": "Result order. Default `recent` (most recently seen first)."
},
"kmMax": {
"type": "number",
"description": "Maximum kilometres on the odometer."
},
"limit": {
"type": "number",
"description": "Results per page (default 10, max 20)."
},
"model": {
"type": "string",
"description": "Model slug (e.g. corolla, serie-3, golf). Requires `make` to disambiguate."
},
"yearMax": {
"type": "number",
"description": "Maximum registration year."
},
"yearMin": {
"type": "number",
"description": "Minimum registration year."
},
"bodyType": {
"enum": [
"SUV",
"SEDAN",
"HATCHBACK",
"COMBI",
"COUPE",
"CABRIO",
"MINIVAN",
"PICKUP"
],
"type": "string",
"description": "Body style. SEDAN = berlina, HATCHBACK = citadino, COMBI = carrinha, CABRIO = descapotável, MINIVAN = monovolume."
},
"district": {
"type": "string",
"description": "District or region inside the market (e.g. Lisboa, Porto, Berlin, Madrid). Matched exactly."
},
"priceMax": {
"type": "number",
"description": "Maximum price in the market currency. Listings with no published price are excluded by either bound."
},
"priceMin": {
"type": "number",
"description": "Minimum price in the market currency."
},
"condition": {
"enum": [
"new",
"used",
"semi_new"
],
"type": "string",
"description": "Vehicle condition. new = 0 km / registered this year; semi_new = <2 years and <20 000 km; used = everything else."
}
}
}| priceMax |
| number |
| Maximum price in the market currency. Listings with no published price are excluded by either bound. |
| description* | string | What the user is looking for, in their own words. Full phrases work better than keywords. Pass the qualities here and the hard limits in the other arguments. |
{
"type": "object",
"required": [
"description"
],
"properties": {
"fuel": {
"enum": [
"GASOLINE",
"DIESEL",
"ELECTRIC",
"HYBRID",
"PLUG_IN_HYBRID",
"LPG"
],
"type": "string",
"description": "Fuel type. GASOLINE = gasolina, ELECTRIC = eléctrico, HYBRID = full hybrid, PLUG_IN_HYBRID = PHEV."
},
"make": {
"type": "string",
"description": "Make slug (e.g. toyota, bmw, volkswagen). Not free text — the slug is the same in every market."
},
"kmMax": {
"type": "number",
"description": "Maximum kilometres on the odometer."
},
"limit": {
"type": "number",
"description": "Maximum number of results (default 10, max 20)."
},
"yearMin": {
"type": "number",
"description": "Minimum registration year."
},
"bodyType": {
"enum": [
"SUV",
"SEDAN",
"HATCHBACK",
"COMBI",
"COUPE",
"CABRIO",
"MINIVAN",
"PICKUP"
],
"type": "string",
"description": "Body style. SEDAN = berlina, HATCHBACK = citadino, COMBI = carrinha, CABRIO = descapotável, MINIVAN = monovolume."
},
"priceMax": {
"type": "number",
"description": "Maximum price in the market currency. Listings with no published price are excluded by either bound."
},
"description": {
"type": "string",
"description": "What the user is looking for, in their own words. Full phrases work better than keywords. Pass the qualities here and the hard limits in the other arguments."
}
}
}