CaLesVaut
Is this listing too expensive? French property sales (DVF), crime, rents, risks, schools
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"calesvaut": {
"url": "https://calesvaut.fr/mcp"
}
}
}远程端点
https://calesvaut.fr/mcpstreamable-http它能做什么
工具清单
工具(10)
🟢find_place(query)
Resolves a city name or postcode: its centre, extent and number of recorded sales, and the French communes of that name (INSEE codes) for crime_stats.
输入模式
{
"type": "object",
"properties": {
"query": {
"description": "City, its start, a word of its name (\"Hardelot\" for Neufchâtel-Hardelot) or postcode.",
"type": "string"
}
},
"required": [
"query"
]
}🟢property_prices(address, lat, lng, place, radius_m, ...)
Median sale price and price per m² of recorded sales within a radius, overall, per property type and per year, over the last years of data.
输入模式
{
"type": "object",
"properties": {
"address": {
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given.",
"type": "string"
},
"lat": {
"description": "Latitude (WGS84).",
"type": "number"
},
"lng": {
"description": "Longitude (WGS84).",
"type": "number"
},
"place": {
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given.",
"type": "string"
},
"radius_m": {
"description": "Radius in metres (default 500, at most 3000).",
"maximum": 3000,
"minimum": 50,
"type": "integer"
},
"type": {
"description": "Property type as the source names it, e.g. \"Appartement\" or \"Maison\" in France.",
"type": "string"
},
"years": {
"description": "Years of sales counted back from the latest (default 5, at most 12).",
"maximum": 12,
"minimum": 1,
"type": "integer"
}
},
"required": []
}🟢sales_at_address(address, limit, place, type)
Every recorded sale at a street address (date, price, floor area, price per m², rooms, type), newest first, and a summary of its street with its latest other sales. Spellings are loose: "17 bis avenue de Saint-Mandé" finds "17 B AV DE ST MANDE". Without a number, the street's sales. When the street is not found, similar street names.
输入模式
{
"type": "object",
"properties": {
"address": {
"description": "Street address, with its postcode or city unless place gives it (e.g. \"17 rue Gambey, 75011 Paris\").",
"type": "string"
},
"limit": {
"description": "Sales returned (default 50, at most 200).",
"maximum": 200,
"minimum": 1,
"type": "integer"
},
"place": {
"description": "City or postcode the address is in, when the address does not say.",
"type": "string"
},
"type": {
"description": "Property type as the source names it, e.g. \"Appartement\" or \"Maison\" in France.",
"type": "string"
}
},
"required": [
"address"
]
}🟢recent_sales(address, lat, limit, lng, max_price, ...)
The latest recorded sales within a radius (date, price, floor area, price per m², rooms, type, address, distance).
输入模式
{
"type": "object",
"properties": {
"address": {
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given.",
"type": "string"
},
"lat": {
"description": "Latitude (WGS84).",
"type": "number"
},
"limit": {
"description": "Sales returned (default 20, at most 100).",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"lng": {
"description": "Longitude (WGS84).",
"type": "number"
},
"max_price": {
"description": "Maximum price.",
"type": "integer"
},
"min_surface": {
"description": "Minimum floor area in m².",
"type": "integer"
},
"place": {
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given.",
"type": "string"
},
"radius_m": {
"description": "Radius in metres (default 300, at most 2000).",
"maximum": 2000,
"minimum": 50,
"type": "integer"
},
"type": {
"description": "Property type as the source names it, e.g. \"Appartement\" or \"Maison\" in France.",
"type": "string"
}
},
"required": []
}🟢crime_stats(address, commune, lat, lng, place)
Offences recorded by police and gendarmerie (SSMSI, latest year) for a French commune — by name, INSEE code or position — per indicator, as rates per 1,000 inhabitants (per 1,000 dwellings for burglaries), next to its département, région and France, with the yearly trend.
输入模式
{
"type": "object",
"properties": {
"address": {
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given.",
"type": "string"
},
"commune": {
"description": "Commune name or INSEE code (e.g. \"Carnac\", \"56034\"), or a département code (\"56\").",
"type": "string"
},
"lat": {
"description": "Latitude (WGS84).",
"type": "number"
},
"lng": {
"description": "Longitude (WGS84).",
"type": "number"
},
"place": {
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given.",
"type": "string"
}
},
"required": []
}🟢commune_profile(address, commune, lat, lng, place)
For a French commune (by name, INSEE code or position) or département: asking rents per m² (charges included) for flats, small and large flats and houses, with their range (ANIL/DHUP Carte des loyers); the energy ratings (DPE A–G) of its dwellings diagnosed since July 2021 and the share of passoires thermiques (F or G, which may no longer be let: G since 2025, F from 2028), per flats and houses (ADEME); its natural risks: the risks listed by the state (DDRM), natural disaster (CatNat) decrees since 1982, prevention plans, radon potential (Géorisques); its local tax rates (DGFiP, in %): taxe foncière on buildings and on land, the household waste tax (TEOM; null where a fee pays for it), taxe d'habitation (on second homes and vacant dwellings only since 2023) with the commune's surcharge on second homes, the latest year's and the first's, the taxe foncière year by year, and for a commune how each rate splits between the commune, its syndicates, its intercommunality (named), special taxes and GEMAPI; its median price per m² of recorded sales (DVF) for flats, houses and both over the latest two years against the two before, and year by year; its home internet (ARCEP Ma connexion internet): the share of premises fibre, cable, copper DSL (copper_closed: no new subscribers), fixed 4G, radio and satellite reach, the share getting 8 and 30 Mbit/s and 1 Gbit/s by wire, and its premises by best technology; each mobile operator's 4G coverage of its homes (Orange, SFR, Bouygues Telecom, Free Mobile: the share of homes at each level of ARCEP's simulated maps, very good meaning indoors; metropolitan France), and their antennas in the commune (sites with 4G, 5G, 5G at 3.5 GHz). Each compared with its département and France.
输入模式
{
"type": "object",
"properties": {
"address": {
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given.",
"type": "string"
},
"commune": {
"description": "Commune name or INSEE code (e.g. \"Carnac\", \"56034\"), or a département code (\"56\").",
"type": "string"
},
"lat": {
"description": "Latitude (WGS84).",
"type": "number"
},
"lng": {
"description": "Longitude (WGS84).",
"type": "number"
},
"place": {
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given.",
"type": "string"
}
},
"required": []
}🟢amenities_nearby(address, lat, lng, place, radius_m)
Schools (maternelle, primaire, collège/lycée), bakeries, night clubs, noisy bars and every bar or café within a radius (France): count per kind and the nearest ones.
输入模式
{
"type": "object",
"properties": {
"address": {
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given.",
"type": "string"
},
"lat": {
"description": "Latitude (WGS84).",
"type": "number"
},
"lng": {
"description": "Longitude (WGS84).",
"type": "number"
},
"place": {
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given.",
"type": "string"
},
"radius_m": {
"description": "Radius in metres (default 500, at most 3000).",
"maximum": 3000,
"minimum": 50,
"type": "integer"
}
},
"required": []
}🟢street_prices(address, lat, limit, lng, order, ...)
The streets around a place with their recorded sales (DVF) and median price per m² over the last 5 years, the most expensive first, or ranked by how their median moved: the latest 24 months against the 24 before (falling or rising first; only streets with at least 8 sales with a floor area in each period have a change). Each street with 5 sales or more has a page on the site (url).
输入模式
{
"type": "object",
"properties": {
"address": {
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given.",
"type": "string"
},
"lat": {
"description": "Latitude (WGS84).",
"type": "number"
},
"limit": {
"description": "Streets returned (default 25, at most 100).",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"lng": {
"description": "Longitude (WGS84).",
"type": "number"
},
"order": {
"description": "price_desc (default), price_asc, falling (largest fall first), rising, or sales (the most sold first).",
"enum": [
"price_desc",
"price_asc",
"falling",
"rising",
"sales"
],
"type": "string"
},
"place": {
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given.",
"type": "string"
},
"radius_m": {
"description": "Radius in metres (default 1000, at most 3000).",
"maximum": 3000,
"minimum": 50,
"type": "integer"
}
},
"required": []
}🟢sea_views(address, lat, limit, lng, place, ...)
The sale addresses around a place whose sun goes down (or comes up) into the sea, month by month, with how far the shore is and their latest sale. Worked out from OpenStreetMap for France's sale addresses within 300 m of the coast: the sun's direction must reach the shore past no building but the home's own, no wood, no dune but a narrow one at the door, no cliff upwards, then cross open water. A ground-level estimate: floors, trees and relief are not known. An address missing here may still see the sea from upstairs; say so rather than that it has no view. The same view shows as sea_view on the sales of sales_at_address, recent_sales and appraise_listing.
输入模式
{
"type": "object",
"properties": {
"address": {
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given.",
"type": "string"
},
"lat": {
"description": "Latitude (WGS84).",
"type": "number"
},
"limit": {
"description": "Addresses returned, nearest first (default 25, at most 100).",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"lng": {
"description": "Longitude (WGS84).",
"type": "number"
},
"place": {
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given.",
"type": "string"
},
"radius_m": {
"description": "Radius in metres (default 1000, at most 5000).",
"maximum": 5000,
"minimum": 50,
"type": "integer"
},
"sun": {
"description": "Only addresses that see the sun set (sunset) or rise (sunrise) into the sea; default any.",
"enum": [
"any",
"sunset",
"sunrise"
],
"type": "string"
}
},
"required": []
}🟢appraise_listing(address, lat, lng, place, price, ...)
Compares a French listing's asking price with recent recorded sales (DVF) of the same type and a similar size around it (the smallest radius with enough of them): estimate with its interquartile range, gap and verdict, closest comparables (sales over 2.5 times off the median price per m² are left out as no market price), a headline such as "12 % au-dessus du marché", local price trend, the commune's main crime rates against France, its rent for the type (monthly rent for the floor area, gross yield at the asking price), its share of passoires thermiques (DPE F or G) for the type, its natural risks, its local tax rates (taxe foncière, waste tax, taxe d'habitation on second homes), its home internet (fibre and wired speeds), each mobile operator's 4G coverage level at the address (mobile_4g) and their antennas, amenities within 500 m, and the address's sea view when it has one.
输入模式
{
"type": "object",
"properties": {
"address": {
"description": "Street address with its postcode or city (e.g. \"17 rue Gambey, 75011 Paris\"), located where its sales were recorded (else its street's). Ignored when lat and lng are given.",
"type": "string"
},
"lat": {
"description": "Latitude (WGS84).",
"type": "number"
},
"lng": {
"description": "Longitude (WGS84).",
"type": "number"
},
"place": {
"description": "City, city start or postcode (e.g. \"Carnac\", \"Paris 11e\", \"75011\"); with address, the place it is in. Ignored when lat and lng are given.",
"type": "string"
},
"price": {
"description": "Asking price.",
"type": "number"
},
"surface": {
"description": "Floor area in m².",
"type": "number"
},
"type": {
"description": "\"Appartement\" or \"Maison\" (others compare with every sale).",
"type": "string"
}
},
"required": [
"price"
]
}社区
证据