MCP Server

Parcellaire — cadastre, DVF & DPE

re.parcellai/parcellaire
Data & Analytics Maps & Location Real Estate Public & reachable MCP 2025-11-25

What this MCP does

Provides French cadastral, property transaction, energy diagnostic, parcel context, geocoding, and property price estimation data.

estimate_property_price
Estimer le prix d'un bien immobilier
Estime le prix de vente d'une maison ou d'un appartement en France à partir des transactions DVF récentes et d'un modèle statistique national. Localisation par 'address' OU par 'lat' + 'lng' + 'code_insee'. Retourne un prix total, une fourchette, un prix au m² et des facteurs explicatifs.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['type_bien', 'surface_m2'], 'properties': {'lat': {'anyOf': [{'anyOf': [{'type': 'number'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Latitude, si pas d'adresse"}, 'lng': {'anyOf': [{'anyOf': [{'type': 'number'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Longitude, si pas d'adresse"}, 'address': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Adresse du bien (option la plus simple)'}, 'type_bien': {'enum': ['maison', 'appartement'], 'type': 'string'}, 'classe_dpe': {'anyOf': [{'anyOf': [{'enum': ['A', 'B', 'C', 'D', 'E', 'F', 'G'], 'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Classe DPE si connue (affine l'estimation)"}, 'code_insee': {'anyOf': [{'anyOf': [{'type': 'string', 'maxLength': 5, 'minLength': 5}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Code INSEE de la commune, si pas d'adresse"}, 'surface_m2': {'type': 'number', 'description': 'Surface habitable en m²', 'exclusiveMinimum': 0}, 'terrain_m2': {'anyOf': [{'anyOf': [{'type': 'number'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Surface du terrain en m² (maisons)'}, 'annee_construction': {'anyOf': [{'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}}, 'additionalProperties': False}
find_parcelles_by_address
Trouver les parcelles d'une adresse
Géocode une adresse postale française (Base Adresse Nationale) puis retourne la ou les parcelles cadastrales correspondantes avec leur IDU. L'IDU permet ensuite d'appeler get_parcelle. Donner l'adresse la plus complète possible (numéro, rue, commune).
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['address'], 'properties': {'address': {'type': 'string', 'minLength': 3, 'description': "Adresse postale, ex: '10 quai des Chartrons, Bordeaux'"}}, 'additionalProperties': False}
find_parcelles_by_criteria
Retrouver un bien à partir de ses caractéristiques
Identifie les parcelles candidates d'un bien immobilier à partir de ses caractéristiques (celles d'une annonce : commune, surface, classe et consommation DPE, GES, date du DPE, année de construction, terrain), en croisant avec la base des DPE et des ventes DVF. Équivalent sans URL ni quota de geolocate_listing. Plus il y a de critères DPE (consommation en kWh/m²/an, émissions GES, date), plus le résultat est précis. Retourne jusqu'à 10 candidates triées par score.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'commune': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Nom de la commune, ex: 'Angers'"}, 'date_dpe': {'anyOf': [{'anyOf': [{'type': 'string', 'pattern': '^\\d{4}-\\d{2}(-\\d{2})?$'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Date du DPE, 'AAAA-MM' ou 'AAAA-MM-JJ'"}, 'ges_kg_m2': {'anyOf': [{'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Émissions GES en kg CO2/m²/an'}, 'type_bien': {'anyOf': [{'anyOf': [{'enum': ['maison', 'appartement'], 'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}, 'classe_dpe': {'anyOf': [{'anyOf': [{'enum': ['A', 'B', 'C', 'D', 'E', 'F', 'G'], 'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}, 'classe_ges': {'anyOf': [{'anyOf': [{'enum': ['A', 'B', 'C', 'D', 'E', 'F', 'G'], 'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}, 'code_postal': {'anyOf': [{'anyOf': [{'type': 'string', 'maxLength': 5, 'minLength': 5}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Code postal, ex: '49100'"}, 'conso_dpe_kwh_m2': {'anyOf': [{'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Consommation énergie primaire en kWh/m²/an'}, 'annee_construction': {'anyOf': [{'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}, 'surface_terrain_m2': {'anyOf': [{'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}, 'surface_habitable_m2': {'anyOf': [{'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}}, 'additionalProperties': False}
geolocate_listing
Géolocaliser une annonce immobilière
Analyse l'URL d'une annonce immobilière française (SeLoger, PAP, Bien'ici, Le Figaro Immobilier…) : extrait les caractéristiques du bien (surface, DPE, commune, terrain) puis identifie les parcelles cadastrales candidates en croisant avec la base des DPE. Service gratuit avec une limite GLOBALE de 10 analyses par heure tous utilisateurs MCP confondus — si la limite est atteinte (erreur 429), NE PAS réessayer immédiatement.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': "URL complète de l'annonce immobilière"}}, 'additionalProperties': False}
get_commune_stats
Statistiques immobilières d'une commune
Retourne les statistiques d'une commune française : parcelles et bâtiments, prix au m² et volumes de transactions DVF par année, répartition des classes DPE, taux de propriétaires, logements vacants, etc. Identifier la commune par 'insee_id' (fiable) ou par 'commune' (nom ou code postal).
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'commune': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Nom ou code postal de la commune, ex: 'Bordeaux'"}, 'insee_id': {'anyOf': [{'anyOf': [{'type': 'string', 'maxLength': 5, 'minLength': 5}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Code INSEE de la commune (prioritaire si fourni)'}}, 'additionalProperties': False}
get_dpe
Diagnostic de performance énergétique (DPE)
Retourne le résumé d'un DPE à partir de son numéro ADEME (13 caractères, présent sur les annonces immobilières et les diagnostics) : classe énergie, GES, surface, type de bien, localisation, ainsi qu'une estimation de prix du bien quand elle est possible.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dpe_id'], 'properties': {'dpe_id': {'type': 'string', 'minLength': 8, 'description': "Numéro ADEME du DPE, ex: '2233E1234567X'"}}, 'additionalProperties': False}
get_parcelle
Détails d'une parcelle cadastrale
Retourne les informations d'une parcelle cadastrale à partir de son IDU (14 caractères) : surface, adresse, parcelles adjacentes (qui la touchent, avec surface, bâti et nombre de DPE), et selon 'include' les bâtiments, transactions immobilières (dvf), diagnostics énergétiques (dpes), zonage d'urbanisme (urbanisme), données bâtiment BDNB (bdnb), piscines, copropriétés (rnc), propriétaires personnes morales (majic_pm), permis de construire (sitadel).
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['parcelle_id'], 'properties': {'include': {'anyOf': [{'anyOf': [{'type': 'array', 'items': {'enum': ['batiments', 'dvf', 'dpes', 'urbanisme', 'bdnb', 'piscines', 'rnc', 'majic_pm', 'sitadel'], 'type': 'string'}}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Sections à inclure. Défaut: ['batiments', 'dvf', 'dpes']"}, 'max_items': {'anyOf': [{'anyOf': [{'type': 'integer', 'maximum': 200, 'minimum': 1}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Nombre maximum d'éléments par section liste (défaut 30). Les sections tronquées sont signalées dans 'sections_tronquees'."}, 'parcelle_id': {'type': 'string', 'maxLength': 14, 'minLength': 14, 'description': "IDU de la parcelle, 14 caractères, ex: '33063000IK0001'"}}, 'additionalProperties': False}
get_parcelle_context
Environnement d'une parcelle
Retourne l'environnement d'une parcelle cadastrale (IDU 14 caractères) à partir de sources publiques (Géorisques, ARCEP, ministère de l'Éducation, observatoires des loyers…). Passer à true uniquement les sections utiles à la question, ex: { risques: true, fibre: true }. Sans aucune section à true, aucune donnée d'environnement n'est retournée.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['parcelle_id'], 'properties': {'fibre': {'type': 'boolean', 'description': 'Éligibilité fibre et opérateurs (ARCEP)'}, 'sante': {'type': 'boolean', 'description': 'Médecins, pharmacies… proches'}, 'ecoles': {'type': 'boolean', 'description': 'Écoles proches'}, 'loyers': {'type': 'boolean', 'description': 'Loyers de référence en €/m²'}, 'emprise': {'type': 'boolean', 'description': 'Emprise du bâti au sol'}, 'risques': {'type': 'boolean', 'description': 'Risques Géorisques : inondation, argiles, radon, sismicité, pollution…'}, 'terrain': {'type': 'boolean', 'description': 'Relief et altitude'}, 'recharge': {'type': 'boolean', 'description': 'Bornes de recharge proches'}, 'commerces': {'type': 'boolean', 'description': 'Commerces proches'}, 'filiation': {'type': 'boolean', 'description': 'Historique des découpages cadastraux'}, 'parcelle_id': {'type': 'string', 'maxLength': 14, 'minLength': 14, 'description': "IDU de la parcelle, 14 caractères, ex: '33063000IK0001'"}, 'restrictions_eau': {'type': 'boolean', 'description': "Arrêtés de restriction d'eau (sécheresse) en cours"}, 'secteur_scolaire': {'type': 'boolean', 'description': 'Établissements du secteur scolaire'}}, 'additionalProperties': False}
search_communes
Rechercher une commune
Recherche une commune française par nom ou code postal. Retourne le code INSEE (nécessaire pour get_commune_stats), les coordonnées et l'URL de la page cadastre quand elle existe. À utiliser en premier quand on ne connaît que le nom d'une ville.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'query': {'type': 'string', 'minLength': 1, 'description': "Nom de commune ou code postal, ex: 'Bordeaux' ou '33000'"}}, 'additionalProperties': False}
search_dpe
Rechercher des DPE dans une zone
Liste les diagnostics de performance énergétique (DPE ADEME) d'une zone : autour d'une adresse, d'une parcelle ou d'un point (rayon), ou dans toute une commune. Filtres : type de bâtiment, classes énergie/GES, surface, année de construction, date du DPE. Avec 'address' (numéro + rue), retourne aussi les DPE rattachés exactement à cette adresse. Résultats triés du plus récent au plus ancien et paginés ('limit', 'offset').
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'lat': {'anyOf': [{'anyOf': [{'type': 'number'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Latitude du centre (avec 'lng')"}, 'lng': {'anyOf': [{'anyOf': [{'type': 'number'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Longitude du centre (avec 'lat')"}, 'limit': {'anyOf': [{'anyOf': [{'type': 'integer', 'maximum': 50, 'minimum': 1}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'DPE par page (défaut 20, max 50)'}, 'offset': {'anyOf': [{'anyOf': [{'type': 'integer', 'maximum': 5000, 'minimum': 0}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}, 'address': {'anyOf': [{'anyOf': [{'type': 'string', 'minLength': 3}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Adresse postale au centre de la zone'}, 'commune': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Nom de commune : toute la commune (ignore 'rayon_m')"}, 'rayon_m': {'anyOf': [{'anyOf': [{'type': 'integer', 'maximum': 2000, 'minimum': 50}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Rayon autour du centre en mètres (défaut 500, max 2000)'}, 'classe_dpe': {'anyOf': [{'anyOf': [{'enum': ['A', 'B', 'C', 'D', 'E', 'F', 'G'], 'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}, 'classe_ges': {'anyOf': [{'anyOf': [{'enum': ['A', 'B', 'C', 'D', 'E', 'F', 'G'], 'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}, 'parcelle_id': {'anyOf': [{'anyOf': [{'type': 'string', 'maxLength': 14, 'minLength': 14}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "IDU d'une parcelle au centre de la zone"}, 'date_dpe_max': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Date maximale du DPE, 'AAAA-MM-JJ'"}, 'date_dpe_min': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Date minimale du DPE, 'AAAA-MM-JJ'"}, 'type_batiment': {'anyOf': [{'anyOf': [{'enum': ['maison', 'appartement', 'immeuble'], 'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "'immeuble' = DPE d'immeuble collectif entier"}, 'surface_max_m2': {'anyOf': [{'anyOf': [{'type': 'number'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}, 'surface_min_m2': {'anyOf': [{'anyOf': [{'type': 'number'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}, 'annee_construction_max': {'anyOf': [{'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}, 'annee_construction_min': {'anyOf': [{'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}}, 'additionalProperties': False}
search_parcelles
Recherche cadastrale multicritères
Recherche des parcelles cadastrales dans une zone avec les filtres de la carte parcellai.re/carte : surfaces, DPE, ventes DVF, année de construction, piscines, permis de construire, copropriétés, propriétaires personnes morales… Définir la zone par 'commune' (nom), 'departement' (code ou nom), 'region' (code ou nom) OU par 'viewport'. Région + SIREN est supporté sans commune. Omettre les filtres non demandés ; une valeur vide ou null signifie aucun filtre. Retourne le nombre total de parcelles, une PAGE de résultats détaillés et un lien vers la carte interactive. Résultats paginés : 'nb_parcelles' est le total, mais seules 'limit' parcelles (défaut 20, max 50) sont détaillées à partir de 'offset'. Vérifier 'pagination.has_more' et relancer avec 'offset' = 'pagination.next_offset' pour les pages suivantes. Si la zone est trop large, retourne une répartition agrégée par commune.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'anyOf': [{'anyOf': [{'type': 'integer', 'maximum': 50, 'minimum': 1}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Nombre de parcelles détaillées retournées par page (défaut 20, max 50)'}, 'siren': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'SIREN du propriétaire personne morale'}, 'offset': {'anyOf': [{'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Index de départ pour la pagination (défaut 0). Utiliser pagination.next_offset pour la page suivante.'}, 'region': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Nom ou code INSEE de la région, ex: 'Bretagne', 'Île-de-France', '52'. Recherche dans tous ses départements couverts (France métropolitaine hors Corse)."}, 'commune': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Nom de la commune où chercher, ex: 'Angers'"}, 'date_dpe': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Date d'établissement du DPE. Format: '2021', '2021-06', ou plage '2019-2024'"}, 'viewport': {'anyOf': [{'anyOf': [{'type': 'object', 'required': ['sw_lat', 'sw_lng', 'ne_lat', 'ne_lng'], 'properties': {'ne_lat': {'type': 'number'}, 'ne_lng': {'type': 'number'}, 'sw_lat': {'type': 'number'}, 'sw_lng': {'type': 'number'}}}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Zone géographique explicite (alternative à commune). Hauteur ≤ 20 km pour un détail parcelle par parcelle'}, 'classe_dpe': {'anyOf': [{'anyOf': [{'enum': ['A', 'B', 'C', 'D', 'E', 'F', 'G'], 'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Classe énergie d'un logement. Clé exacte: classe_dpe; valeur: une lettre A-G."}, 'classe_ges': {'anyOf': [{'anyOf': [{'enum': ['A', 'B', 'C', 'D', 'E', 'F', 'G'], 'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Classe GES. Clé exacte: classe_ges; valeur: une lettre A-G.'}, 'date_vente': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Date de vente DVF. Format: '2021', '2021-06', ou plage '2019-2024'"}, 'departement': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Code ou nom du département, ex: '49', 'Maine-et-Loire'. Peut aussi restreindre une commune ou un viewport."}, 'has_piscine': {'anyOf': [{'anyOf': [{'type': 'boolean'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Uniquement les parcelles avec piscine'}, 'prix_vente_eur': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Prix de la dernière vente DVF en euros. Format: '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)"}, 'has_copropriete': {'anyOf': [{'anyOf': [{'type': 'boolean'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Uniquement les parcelles en copropriété'}, 'conso_dpe_kwh_m2': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Consommation énergie primaire en kWh/m²/an (alternative à classe_dpe). Format: '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)"}, 'nombre_batiments': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Nombre de bâtiments sur la parcelle. Format: '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)"}, 'annee_construction': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Année de construction (BDNB). Format: '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)"}, 'surface_piscine_m2': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Surface de la piscine en m². Format: '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)"}, 'surface_batiment_m2': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Emprise au sol d'un bâtiment en m². Format: '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)"}, 'surface_parcelle_m2': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Une seule surface de parcelle en m² par appel. Format: '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum). Un entier seul est quasi exact (tolérance d'arrondi) : pour une surface approximative (« environ 600 m² »), passer une plage, ex: '540-660'. Pour plusieurs surfaces exactes, effectuer un appel séparé par surface; ne jamais fournir de tableau ni de liste séparée par des virgules."}, 'surface_habitable_m2': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Surface habitable (DPE) en m². Format: '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum). Un entier seul est quasi exact : pour une surface approximative, passer une plage, ex: '135-145'."}, 'has_permis_construire': {'anyOf': [{'anyOf': [{'type': 'boolean'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Uniquement les parcelles avec permis de construire'}, 'date_permis_construire': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Date du permis de construire. Format: '2021', '2021-06', ou plage '2019-2024'"}, 'has_proprietaire_personne_morale': {'anyOf': [{'anyOf': [{'type': 'boolean'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Uniquement les parcelles détenues par une personne morale (société, collectivité…)'}}, 'additionalProperties': False}
search_ventes_dvf
Ventes immobilières (DVF) dans une zone
Liste les ventes immobilières (DVF) d'une zone : autour d'une adresse, d'une parcelle ou d'un point (rayon), ou dans toute une commune — idéal pour trouver des biens comparables. Une ligne par vente : date, prix, type de bien, surface bâtie, pièces, terrain, parcelles, prix au m² (quand la vente porte sur un seul logement). Retourne aussi la médiane du prix au m² des ventes filtrées. Seules les ventes géolocalisées sont couvertes (depuis 2021). Filtrer par 'type_bien' pour des prix au m² comparables.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'lat': {'anyOf': [{'anyOf': [{'type': 'number'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Latitude du centre (avec 'lng')"}, 'lng': {'anyOf': [{'anyOf': [{'type': 'number'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Longitude du centre (avec 'lat')"}, 'tri': {'anyOf': [{'anyOf': [{'enum': ['date', 'distance'], 'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Tri des ventes (défaut : date décroissante ; distance pour les plus proches)'}, 'limit': {'anyOf': [{'anyOf': [{'type': 'integer', 'maximum': 50, 'minimum': 1}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Ventes par page (défaut 20, max 50)'}, 'offset': {'anyOf': [{'anyOf': [{'type': 'integer', 'maximum': 5000, 'minimum': 0}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}, 'address': {'anyOf': [{'anyOf': [{'type': 'string', 'minLength': 3}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Adresse postale au centre de la zone'}, 'commune': {'anyOf': [{'anyOf': [{'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Nom de commune : toute la commune (ignore 'rayon_m')"}, 'rayon_m': {'anyOf': [{'anyOf': [{'type': 'integer', 'maximum': 2000, 'minimum': 50}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': 'Rayon autour du centre en mètres (défaut 500, max 2000)'}, 'date_max': {'anyOf': [{'anyOf': [{'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Date maximale 'AAAA-MM-JJ'"}, 'date_min': {'anyOf': [{'anyOf': [{'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "Date minimale 'AAAA-MM-JJ' (défaut 2021-01-01)"}, 'type_bien': {'anyOf': [{'anyOf': [{'enum': ['maison', 'appartement', 'local'], 'type': 'string'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}, 'parcelle_id': {'anyOf': [{'anyOf': [{'type': 'string', 'maxLength': 14, 'minLength': 14}, {'type': 'string', 'const': ''}]}, {'type': 'null'}], 'description': "IDU d'une parcelle au centre de la zone"}, 'prix_max_eur': {'anyOf': [{'anyOf': [{'type': 'number'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}, 'prix_min_eur': {'anyOf': [{'anyOf': [{'type': 'number'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}, 'surface_max_m2': {'anyOf': [{'anyOf': [{'type': 'number'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}, 'surface_min_m2': {'anyOf': [{'anyOf': [{'type': 'number'}, {'type': 'string', 'const': ''}]}, {'type': 'null'}]}}, 'additionalProperties': False}
Added
search_ventes_dvf
Sept. 26, 2026, 2:40 a.m.
Added
search_dpe
Sept. 26, 2026, 2:40 a.m.
Added
find_parcelles_by_criteria
Sept. 26, 2026, 2:40 a.m.
Added
get_parcelle_context
Sept. 26, 2026, 2:40 a.m.
Added
geolocate_listing
Sept. 26, 2026, 2:40 a.m.
Added
search_parcelles
Sept. 26, 2026, 2:40 a.m.
Added
get_commune_stats
Sept. 26, 2026, 2:40 a.m.
Added
estimate_property_price
Sept. 26, 2026, 2:40 a.m.
Added
get_dpe
Sept. 26, 2026, 2:40 a.m.
Added
get_parcelle
Sept. 26, 2026, 2:40 a.m.
Added
find_parcelles_by_address
Sept. 26, 2026, 2:40 a.m.
Added
search_communes
Sept. 26, 2026, 2:40 a.m.