Voxcars (Portugal)
Used-car listings in Portugal: search, price statistics, comparables and articles.
使うべきか
品質と安全性
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"voxcars-pt": {
"url": "https://www.voxcars.pt/api/mcp"
}
}
}リモートエンドポイント
https://www.voxcars.pt/api/mcpstreamable-httpできること
ツール一覧
ツール(6)
🟢search_cars(make, model, priceMin, priceMax, yearMin, ...)
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.
入力スキーマ
{
"type": "object",
"properties": {
"make": {
"type": "string",
"description": "Make slug (e.g. toyota, bmw, volkswagen). Not free text — the slug is the same in every market."
},
"model": {
"type": "string",
"description": "Model slug (e.g. corolla, serie-3, golf). Requires `make` to disambiguate."
},
"priceMin": {
"type": "number",
"description": "Minimum price in the market currency."
},
"priceMax": {
"type": "number",
"description": "Maximum price in the market currency. Listings with no published price are excluded by either bound."
},
"yearMin": {
"type": "number",
"description": "Minimum registration year."
},
"yearMax": {
"type": "number",
"description": "Maximum registration year."
},
"kmMax": {
"type": "number",
"description": "Maximum kilometres on the odometer."
},
"fuel": {
"type": "string",
"enum": [
"GASOLINE",
"DIESEL",
"ELECTRIC",
"HYBRID",
"PLUG_IN_HYBRID",
"LPG"
],
"description": "Fuel type. GASOLINE = gasolina, ELECTRIC = eléctrico, HYBRID = full hybrid, PLUG_IN_HYBRID = PHEV."
},
"bodyType": {
"type": "string",
"enum": [
"SUV",
"SEDAN",
"HATCHBACK",
"COMBI",
"COUPE",
"CABRIO",
"MINIVAN",
"PICKUP"
],
"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."
},
"condition": {
"type": "string",
"enum": [
"new",
"used",
"semi_new"
],
"description": "Vehicle condition. new = 0 km / registered this year; semi_new = <2 years and <20 000 km; used = everything else."
},
"sort": {
"type": "string",
"enum": [
"recent",
"price_asc",
"price_desc",
"km_asc",
"year_desc"
],
"description": "Result order. Default `recent` (most recently seen first)."
},
"limit": {
"type": "number",
"description": "Results per page (default 10, max 20)."
},
"page": {
"type": "number",
"description": "1-based page number. Use with `total` to walk a large result set."
}
}
}出力スキーマ
{
"type": "object",
"properties": {
"market": {
"type": "string",
"description": "ISO country code of this market."
},
"currency": {
"type": "string"
},
"total": {
"type": "number",
"description": "Exact number of listings in this market matching the filters, across all pages."
},
"page": {
"type": "number"
},
"pageSize": {
"type": "number"
},
"shown": {
"type": "number"
},
"hasMore": {
"type": "boolean"
},
"cars": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Stable identifier; pass to get_car_detail or find_similar_cars."
},
"url": {
"type": "string",
"description": "Canonical listing page on this market's domain."
},
"title": {
"type": "string"
},
"make": {
"type": "string"
},
"model": {
"type": "string"
},
"variant": {
"type": [
"string",
"null"
]
},
"year": {
"type": [
"number",
"null"
]
},
"km": {
"type": [
"number",
"null"
]
},
"fuel": {
"type": [
"string",
"null"
]
},
"transmission": {
"type": [
"string",
"null"
]
},
"body": {
"type": [
"string",
"null"
]
},
"power_cv": {
"type": [
"number",
"null"
],
"description": "Engine power in metric horsepower (CV/PS)."
},
"price": {
"type": [
"number",
"null"
],
"description": "null means the source does not publish a price (on request)."
},
"currency": {
"type": "string",
"description": "ISO 4217 code of this market."
},
"district": {
"type": [
"string",
"null"
]
},
"sellerType": {
"type": [
"string",
"null"
],
"enum": [
"STAND",
"PARTICULAR",
null
]
},
"condition": {
"type": [
"string",
"null"
]
},
"publishedAt": {
"type": "string",
"description": "ISO 8601 date the listing was first seen at the source."
},
"source": {
"type": [
"string",
"null"
],
"description": "Aggregator platform the listing came from; null when published directly with us."
},
"sourceUrl": {
"type": [
"string",
"null"
],
"description": "Original listing URL at the source. Cite this alongside url."
}
},
"required": [
"slug",
"url",
"title",
"make",
"model",
"currency",
"publishedAt"
]
}
}
},
"required": [
"market",
"currency",
"total",
"page",
"hasMore",
"cars"
]
}🟢search_cars_by_description(description, make, priceMax, yearMin, kmMax, ...)
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.
入力スキーマ
{
"type": "object",
"properties": {
"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."
},
"make": {
"type": "string",
"description": "Make slug (e.g. toyota, bmw, volkswagen). Not free text — the slug is the same in every market."
},
"priceMax": {
"type": "number",
"description": "Maximum price in the market currency. Listings with no published price are excluded by either bound."
},
"yearMin": {
"type": "number",
"description": "Minimum registration year."
},
"kmMax": {
"type": "number",
"description": "Maximum kilometres on the odometer."
},
"fuel": {
"type": "string",
"enum": [
"GASOLINE",
"DIESEL",
"ELECTRIC",
"HYBRID",
"PLUG_IN_HYBRID",
"LPG"
],
"description": "Fuel type. GASOLINE = gasolina, ELECTRIC = eléctrico, HYBRID = full hybrid, PLUG_IN_HYBRID = PHEV."
},
"bodyType": {
"type": "string",
"enum": [
"SUV",
"SEDAN",
"HATCHBACK",
"COMBI",
"COUPE",
"CABRIO",
"MINIVAN",
"PICKUP"
],
"description": "Body style. SEDAN = berlina, HATCHBACK = citadino, COMBI = carrinha, CABRIO = descapotável, MINIVAN = monovolume."
},
"limit": {
"type": "number",
"description": "Maximum number of results (default 10, max 20)."
}
},
"required": [
"description"
]
}出力スキーマ
{
"type": "object",
"properties": {
"market": {
"type": "string"
},
"currency": {
"type": "string"
},
"total": {
"type": "number",
"description": "Listings matching the structural filters. The description narrows the ranking, not this count."
},
"shown": {
"type": "number"
},
"cars": {
"type": "array",
"description": "Ordered by relevance to the description, most relevant first.",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Stable identifier; pass to get_car_detail or find_similar_cars."
},
"url": {
"type": "string",
"description": "Canonical listing page on this market's domain."
},
"title": {
"type": "string"
},
"make": {
"type": "string"
},
"model": {
"type": "string"
},
"variant": {
"type": [
"string",
"null"
]
},
"year": {
"type": [
"number",
"null"
]
},
"km": {
"type": [
"number",
"null"
]
},
"fuel": {
"type": [
"string",
"null"
]
},
"transmission": {
"type": [
"string",
"null"
]
},
"body": {
"type": [
"string",
"null"
]
},
"power_cv": {
"type": [
"number",
"null"
],
"description": "Engine power in metric horsepower (CV/PS)."
},
"price": {
"type": [
"number",
"null"
],
"description": "null means the source does not publish a price (on request)."
},
"currency": {
"type": "string",
"description": "ISO 4217 code of this market."
},
"district": {
"type": [
"string",
"null"
]
},
"sellerType": {
"type": [
"string",
"null"
],
"enum": [
"STAND",
"PARTICULAR",
null
]
},
"condition": {
"type": [
"string",
"null"
]
},
"publishedAt": {
"type": "string",
"description": "ISO 8601 date the listing was first seen at the source."
},
"source": {
"type": [
"string",
"null"
],
"description": "Aggregator platform the listing came from; null when published directly with us."
},
"sourceUrl": {
"type": [
"string",
"null"
],
"description": "Original listing URL at the source. Cite this alongside url."
}
},
"required": [
"slug",
"url",
"title",
"make",
"model",
"currency",
"publishedAt"
]
}
}
},
"required": [
"market",
"total",
"shown",
"cars"
]
}🟢get_price_stats(make, model, priceMin, priceMax, yearMin, ...)
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.
入力スキーマ
{
"type": "object",
"properties": {
"make": {
"type": "string",
"description": "Make slug (e.g. toyota, bmw, volkswagen). Not free text — the slug is the same in every market."
},
"model": {
"type": "string",
"description": "Model slug (e.g. corolla, serie-3, golf). Requires `make` to disambiguate."
},
"priceMin": {
"type": "number",
"description": "Minimum price in the market currency."
},
"priceMax": {
"type": "number",
"description": "Maximum price in the market currency. Listings with no published price are excluded by either bound."
},
"yearMin": {
"type": "number",
"description": "Minimum registration year."
},
"yearMax": {
"type": "number",
"description": "Maximum registration year."
},
"kmMax": {
"type": "number",
"description": "Maximum kilometres on the odometer."
},
"fuel": {
"type": "string",
"enum": [
"GASOLINE",
"DIESEL",
"ELECTRIC",
"HYBRID",
"PLUG_IN_HYBRID",
"LPG"
],
"description": "Fuel type. GASOLINE = gasolina, ELECTRIC = eléctrico, HYBRID = full hybrid, PLUG_IN_HYBRID = PHEV."
},
"bodyType": {
"type": "string",
"enum": [
"SUV",
"SEDAN",
"HATCHBACK",
"COMBI",
"COUPE",
"CABRIO",
"MINIVAN",
"PICKUP"
],
"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."
},
"condition": {
"type": "string",
"enum": [
"new",
"used",
"semi_new"
],
"description": "Vehicle condition. new = 0 km / registered this year; semi_new = <2 years and <20 000 km; used = everything else."
}
}
}出力スキーマ
{
"type": "object",
"properties": {
"market": {
"type": "string"
},
"currency": {
"type": "string"
},
"count": {
"type": "number",
"description": "Listings matching the filters, with or without a published price."
},
"priced": {
"type": "number",
"description": "Subset with a published price — the base of every figure below. A large gap to `count` means many listings in this slice are 'price on request'."
},
"price": {
"type": [
"object",
"null"
],
"description": "Price distribution, in percentiles. null when no matching listing publishes a price. There is deliberately no min or max: listings come from third-party sources and the extremes are set by data errors, not by the market.",
"properties": {
"p10": {
"type": "number",
"description": "The bottom of the market: 10% of listings are cheaper."
},
"p25": {
"type": "number",
"description": "A quarter of listings are priced below this."
},
"median": {
"type": "number",
"description": "The typical price — use this to answer 'how much'."
},
"p75": {
"type": "number",
"description": "A quarter of listings are priced above this."
},
"p90": {
"type": "number",
"description": "The top of the market: 10% of listings are dearer."
}
}
},
"pricePerKmMedian": {
"type": [
"number",
"null"
],
"description": "Median price per kilometre on the odometer, in the listing currency (order of magnitude 0.05–3). Small = the car has done a lot for its price."
},
"byBodyType": {
"type": "array",
"description": "Up to 6 most represented body types, each with its own median.",
"items": {
"type": "object",
"properties": {
"body": {
"type": "string"
},
"count": {
"type": "number"
},
"medianPrice": {
"type": [
"number",
"null"
]
}
},
"required": [
"body",
"count"
]
}
}
},
"required": [
"market",
"currency",
"count",
"priced",
"byBodyType"
]
}🟢find_similar_cars(slug, maxPrice, limit)
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.
入力スキーマ
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Slug of the reference listing, as returned by search_cars or get_car_detail."
},
"maxPrice": {
"type": "number",
"description": "Optional budget ceiling, in EUR. Use it for 'similar but cheaper'; it overrides the default band around the reference price."
},
"limit": {
"type": "number",
"description": "Maximum number of comparables (default 6, max 20)."
}
},
"required": [
"slug"
]
}出力スキーマ
{
"type": "object",
"properties": {
"market": {
"type": "string"
},
"currency": {
"type": "string"
},
"reference": {
"type": "object",
"description": "The listing the comparables are measured against, echoed back for the comparison.",
"properties": {
"slug": {
"type": "string",
"description": "Stable identifier; pass to get_car_detail or find_similar_cars."
},
"url": {
"type": "string",
"description": "Canonical listing page on this market's domain."
},
"title": {
"type": "string"
},
"make": {
"type": "string"
},
"model": {
"type": "string"
},
"variant": {
"type": [
"string",
"null"
]
},
"year": {
"type": [
"number",
"null"
]
},
"km": {
"type": [
"number",
"null"
]
},
"fuel": {
"type": [
"string",
"null"
]
},
"transmission": {
"type": [
"string",
"null"
]
},
"body": {
"type": [
"string",
"null"
]
},
"power_cv": {
"type": [
"number",
"null"
],
"description": "Engine power in metric horsepower (CV/PS)."
},
"price": {
"type": [
"number",
"null"
],
"description": "null means the source does not publish a price (on request)."
},
"currency": {
"type": "string",
"description": "ISO 4217 code of this market."
},
"district": {
"type": [
"string",
"null"
]
},
"sellerType": {
"type": [
"string",
"null"
],
"enum": [
"STAND",
"PARTICULAR",
null
]
},
"condition": {
"type": [
"string",
"null"
]
},
"publishedAt": {
"type": "string",
"description": "ISO 8601 date the listing was first seen at the source."
},
"source": {
"type": [
"string",
"null"
],
"description": "Aggregator platform the listing came from; null when published directly with us."
},
"sourceUrl": {
"type": [
"string",
"null"
],
"description": "Original listing URL at the source. Cite this alongside url."
}
}
},
"total": {
"type": "number",
"description": "Comparables returned."
},
"cars": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Stable identifier; pass to get_car_detail or find_similar_cars."
},
"url": {
"type": "string",
"description": "Canonical listing page on this market's domain."
},
"title": {
"type": "string"
},
"make": {
"type": "string"
},
"model": {
"type": "string"
},
"variant": {
"type": [
"string",
"null"
]
},
"year": {
"type": [
"number",
"null"
]
},
"km": {
"type": [
"number",
"null"
]
},
"fuel": {
"type": [
"string",
"null"
]
},
"transmission": {
"type": [
"string",
"null"
]
},
"body": {
"type": [
"string",
"null"
]
},
"power_cv": {
"type": [
"number",
"null"
],
"description": "Engine power in metric horsepower (CV/PS)."
},
"price": {
"type": [
"number",
"null"
],
"description": "null means the source does not publish a price (on request)."
},
"currency": {
"type": "string",
"description": "ISO 4217 code of this market."
},
"district": {
"type": [
"string",
"null"
]
},
"sellerType": {
"type": [
"string",
"null"
],
"enum": [
"STAND",
"PARTICULAR",
null
]
},
"condition": {
"type": [
"string",
"null"
]
},
"publishedAt": {
"type": "string",
"description": "ISO 8601 date the listing was first seen at the source."
},
"source": {
"type": [
"string",
"null"
],
"description": "Aggregator platform the listing came from; null when published directly with us."
},
"sourceUrl": {
"type": [
"string",
"null"
],
"description": "Original listing URL at the source. Cite this alongside url."
}
},
"required": [
"slug",
"url",
"title",
"make",
"model",
"currency",
"publishedAt"
]
}
}
},
"required": [
"market",
"reference",
"total",
"cars"
]
}🟢get_car_detail(slug)
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.
入力スキーマ
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Unique listing slug, as returned by search_cars."
}
},
"required": [
"slug"
]
}出力スキーマ
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Stable identifier; pass to get_car_detail or find_similar_cars."
},
"url": {
"type": "string",
"description": "Canonical listing page on this market's domain."
},
"title": {
"type": "string"
},
"make": {
"type": "string"
},
"model": {
"type": "string"
},
"variant": {
"type": [
"string",
"null"
]
},
"year": {
"type": [
"number",
"null"
]
},
"km": {
"type": [
"number",
"null"
]
},
"fuel": {
"type": [
"string",
"null"
]
},
"transmission": {
"type": [
"string",
"null"
]
},
"body": {
"type": [
"string",
"null"
]
},
"power_cv": {
"type": [
"number",
"null"
],
"description": "Engine power in metric horsepower (CV/PS)."
},
"price": {
"type": [
"number",
"null"
],
"description": "null means the source does not publish a price (on request)."
},
"currency": {
"type": "string",
"description": "ISO 4217 code of this market."
},
"district": {
"type": [
"string",
"null"
]
},
"sellerType": {
"type": [
"string",
"null"
],
"enum": [
"STAND",
"PARTICULAR",
null
]
},
"condition": {
"type": [
"string",
"null"
]
},
"publishedAt": {
"type": "string",
"description": "ISO 8601 date the listing was first seen at the source."
},
"source": {
"type": [
"string",
"null"
],
"description": "Aggregator platform the listing came from; null when published directly with us."
},
"sourceUrl": {
"type": [
"string",
"null"
],
"description": "Original listing URL at the source. Cite this alongside url."
},
"description": {
"type": [
"string",
"null"
]
},
"features": {
"type": "array",
"items": {
"type": "string"
}
},
"photos": {
"type": "array",
"items": {
"type": "string"
},
"description": "Up to 5 image URLs."
},
"doors": {
"type": [
"number",
"null"
]
},
"seats": {
"type": [
"number",
"null"
]
},
"color": {
"type": [
"string",
"null"
]
},
"engineCc": {
"type": [
"number",
"null"
]
},
"origin": {
"type": [
"string",
"null"
],
"description": "NACIONAL = domestic; IMPORTADO = imported."
}
},
"required": [
"slug",
"url",
"title",
"make",
"model",
"currency",
"publishedAt"
]
}🟢search_articles(category, limit)
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.
入力スキーマ
{
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": [
"GUIA",
"REVIEW",
"COMPARATIVO",
"MERCADO",
"GLOSSARIO",
"NOTICIA"
],
"description": "Article category."
},
"limit": {
"type": "number",
"description": "Maximum number of results (default 5, max 10)."
}
}
}出力スキーマ
{
"type": "object",
"properties": {
"articles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
},
"dek": {
"type": "string"
},
"category": {
"type": "string"
}
},
"required": [
"slug",
"title",
"url"
]
}
}
},
"required": [
"articles"
]
}コミュニティ
エビデンス