Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,539Letters: 14Defects: 1,323counted 4 min ago
teppi

Server definition

Hash
sha256:808b8d505909d9657280e482703ed483bf41cf423ddbf73d1031b7c2647fa8bd
What it is
What a remote MCP server returned when asked what it offers: 13 tools

The blob, as servednamed by its sha256

{ "instructions": "Parcellaire (parcellai.re) expose les données publiques immobilières françaises : cadastre (parcelles), transactions DVF, diagnostics énergétiques DPE, permis de construire, copropriétés et estimation de prix.\nIdentifiants clés : une parcelle est identifiée par son IDU (14 caractères, ex \"33063000IK0001\") ; un DPE par son numéro ADEME (13 caractères) ; une commune par son code INSEE (5 caractères, différent du code postal).\nParcours typique : search_communes ou find_parcelles_by_address pour obtenir des identifiants (find_place pour un lieu nommé : gare, mairie, hôpital, école…), puis get_parcelle / get_dpe / get_commune_stats / estimate_property_price. get_parcelle_context donne l'environnement d'une parcelle (risques, fibre, loyers, écoles, commerces, santé…).\nPour explorer une zone : search_parcelles (filtres cadastraux), search_dpe (diagnostics énergétiques), search_ventes_dvf (ventes comparables avec prix au m²). Autour d'un point, chaque résultat porte distance_m, sa distance au centre de la zone.\nPour retrouver un bien : geolocate_listing à partir de l'URL d'une annonce (quota global limité), ou find_parcelles_by_criteria à partir de ses caractéristiques (commune, surface, DPE…) sans quota.\nChaque résultat inclut des URLs parcellai.re à citer dans les réponses pour que l'utilisateur puisse explorer les données (cartes, historiques, détails).", "tools": [ { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "address": { "anyOf": [ { "anyOf": [ { "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Adresse du bien (option la plus simple)" }, "annee_construction": { "anyOf": [ { "anyOf": [ { "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Année de construction, ex: 1975 (affine l'estimation)" }, "classe_dpe": { "anyOf": [ { "anyOf": [ { "enum": [ "A", "B", "C", "D", "E", "F", "G" ], "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Classe DPE si connue (affine l'estimation)" }, "code_insee": { "anyOf": [ { "anyOf": [ { "maxLength": 5, "minLength": 5, "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Code INSEE de la commune, si pas d'adresse" }, "lat": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Latitude, si pas d'adresse" }, "lng": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Longitude, si pas d'adresse" }, "surface_m2": { "description": "Surface habitable en m², nombre, ex: 85", "exclusiveMinimum": 0, "type": "number" }, "terrain_m2": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Surface du terrain en m² (maisons)" }, "type_bien": { "description": "Type de bien : 'maison' ou 'appartement'", "enum": [ "maison", "appartement" ], "type": "string" } }, "required": [ "type_bien", "surface_m2" ], "type": "object" }, "name": "estimate_property_price", "outputSchema": null }, { "description": "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).", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "address": { "description": "Adresse postale, ex: '10 quai des Chartrons, Bordeaux'", "minLength": 3, "type": "string" } }, "required": [ "address" ], "type": "object" }, "name": "find_parcelles_by_address", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "annee_construction": { "anyOf": [ { "anyOf": [ { "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Année de construction, ex: 1975" }, "classe_dpe": { "anyOf": [ { "anyOf": [ { "enum": [ "A", "B", "C", "D", "E", "F", "G" ], "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Classe énergie du DPE : une lettre de A à G" }, "classe_ges": { "anyOf": [ { "anyOf": [ { "enum": [ "A", "B", "C", "D", "E", "F", "G" ], "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Classe GES du DPE : une lettre de A à G" }, "code_postal": { "anyOf": [ { "anyOf": [ { "maxLength": 5, "minLength": 5, "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Code postal, ex: '49100'" }, "commune": { "anyOf": [ { "anyOf": [ { "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Nom de la commune, ex: 'Angers'" }, "conso_dpe_kwh_m2": { "anyOf": [ { "anyOf": [ { "exclusiveMinimum": 0, "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Consommation énergie primaire en kWh/m²/an" }, "date_dpe": { "anyOf": [ { "anyOf": [ { "pattern": "^\\d{4}-\\d{2}(-\\d{2})?$", "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Date du DPE, 'AAAA-MM' ou 'AAAA-MM-JJ'" }, "ges_kg_m2": { "anyOf": [ { "anyOf": [ { "minimum": 0, "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Émissions GES en kg CO2/m²/an" }, "surface_habitable_m2": { "anyOf": [ { "anyOf": [ { "exclusiveMinimum": 0, "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Surface habitable en m², ex: 85" }, "surface_terrain_m2": { "anyOf": [ { "anyOf": [ { "exclusiveMinimum": 0, "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Surface du terrain en m² (maisons), ex: 600" }, "type_bien": { "anyOf": [ { "anyOf": [ { "enum": [ "maison", "appartement" ], "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Type de bien : 'maison' ou 'appartement'" } }, "type": "object" }, "name": "find_parcelles_by_criteria", "outputSchema": null }, { "description": "Géocode un lieu nommé (gare, mairie, hôpital, école, université, monument, station de tram…) avec l'index des points d'intérêt de l'IGN, et retourne plusieurs candidats avec leur catégorie, leur commune et leurs coordonnées. Passer ensuite lat et lng du bon candidat à search_dpe, search_ventes_dvf ou search_parcelles. Inclure la commune dans la requête et le nom officiel quand il est connu (ex: 'gare Angers Saint-Laud', 'centre hospitalier universitaire Angers'). Vérifier la catégorie et la commune : le premier candidat n'est pas toujours le bon (un quartier « Gare » n'est pas la gare). Pour une adresse, une rue ou une place, utiliser plutôt le paramètre address des outils de recherche.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "limit": { "anyOf": [ { "anyOf": [ { "maximum": 10, "minimum": 1, "type": "integer" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Nombre de candidats (défaut 5, max 10)" }, "query": { "description": "Nom du lieu et commune, ex: 'gare Angers Saint-Laud'", "minLength": 3, "type": "string" } }, "required": [ "query" ], "type": "object" }, "name": "find_place", "outputSchema": null }, { "description": "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 50 analyses par heure, tous clients MCP confondus, sans limite individuelle — si la limite est atteinte (erreur 429), NE PAS réessayer immédiatement.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "url": { "description": "URL complète de l'annonce immobilière", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "name": "geolocate_listing", "outputSchema": null }, { "description": "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).", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "commune": { "anyOf": [ { "anyOf": [ { "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Nom ou code postal de la commune, ex: 'Bordeaux'" }, "insee_id": { "anyOf": [ { "anyOf": [ { "maxLength": 5, "minLength": 5, "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Code INSEE de la commune (prioritaire si fourni)" } }, "type": "object" }, "name": "get_commune_stats", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "dpe_id": { "description": "Numéro ADEME du DPE, ex: '2233E1234567X'", "minLength": 8, "type": "string" } }, "required": [ "dpe_id" ], "type": "object" }, "name": "get_dpe", "outputSchema": null }, { "description": "Retourne la fiche de base d'une parcelle cadastrale à partir de son IDU (14 caractères) : surface, adresse, commune. Tout le reste est à demander via 'include', uniquement pour les sections utiles à la question (chaque section allonge la réponse) : parcelles adjacentes (parcelles_adjacentes : celles qui la touchent, avec surface, bâti et nombre de DPE ; pour toute question de voisinage ou quand l'adresse ou un DPE pointe une petite parcelle sans bâti), bâtiments (batiments), transactions immobilières (dvf), diagnostics énergétiques (dpes), zonage d'urbanisme (urbanisme, la plus lente), données bâtiment BDNB (bdnb), piscines, copropriétés (rnc), propriétaires personnes morales (majic_pm), permis de construire (sitadel).", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "include": { "anyOf": [ { "anyOf": [ { "items": { "enum": [ "parcelles_adjacentes", "batiments", "dvf", "dpes", "urbanisme", "bdnb", "piscines", "rnc", "majic_pm", "sitadel" ], "type": "string" }, "type": "array" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Sections à inclure, ex: ['dvf', 'dpes']. Aucune par défaut : sans include, seule la fiche de base de la parcelle est retournée." }, "max_items": { "anyOf": [ { "anyOf": [ { "maximum": 200, "minimum": 1, "type": "integer" }, { "const": "", "type": "string" } ] }, { "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": { "description": "IDU de la parcelle, 14 caractères, ex: '33063000IK0001'", "maxLength": 14, "minLength": 14, "type": "string" } }, "required": [ "parcelle_id" ], "type": "object" }, "name": "get_parcelle", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "commerces": { "description": "Commerces proches", "type": "boolean" }, "ecoles": { "description": "Écoles proches", "type": "boolean" }, "emprise": { "description": "Emprise du bâti au sol", "type": "boolean" }, "fibre": { "description": "Éligibilité fibre et opérateurs (ARCEP)", "type": "boolean" }, "filiation": { "description": "Historique des découpages cadastraux", "type": "boolean" }, "loyers": { "description": "Loyers de référence en €/m²", "type": "boolean" }, "parcelle_id": { "description": "IDU de la parcelle, 14 caractères, ex: '33063000IK0001'", "maxLength": 14, "minLength": 14, "type": "string" }, "recharge": { "description": "Bornes de recharge proches", "type": "boolean" }, "restrictions_eau": { "description": "Arrêtés de restriction d'eau (sécheresse) en cours", "type": "boolean" }, "risques": { "description": "Risques Géorisques : inondation, argiles, radon, sismicité, pollution…", "type": "boolean" }, "sante": { "description": "Médecins, pharmacies… proches", "type": "boolean" }, "secteur_scolaire": { "description": "Établissements du secteur scolaire", "type": "boolean" }, "terrain": { "description": "Relief et altitude", "type": "boolean" } }, "required": [ "parcelle_id" ], "type": "object" }, "name": "get_parcelle_context", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "query": { "description": "Nom de commune ou code postal, ex: 'Bordeaux' ou '33000'", "minLength": 1, "type": "string" } }, "required": [ "query" ], "type": "object" }, "name": "search_communes", "outputSchema": null }, { "description": "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').", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "address": { "anyOf": [ { "anyOf": [ { "minLength": 3, "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Adresse postale au centre de la zone" }, "annee_construction_max": { "anyOf": [ { "anyOf": [ { "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Année de construction maximale, ex: 1990" }, "annee_construction_min": { "anyOf": [ { "anyOf": [ { "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Année de construction minimale, ex: 1950" }, "classe_dpe": { "anyOf": [ { "anyOf": [ { "enum": [ "A", "B", "C", "D", "E", "F", "G" ], "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Classe énergie : une lettre de A à G" }, "classe_ges": { "anyOf": [ { "anyOf": [ { "enum": [ "A", "B", "C", "D", "E", "F", "G" ], "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Classe GES : une lettre de A à G" }, "commune": { "anyOf": [ { "anyOf": [ { "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Nom de commune : toute la commune (ignore 'rayon_m')" }, "date_dpe_max": { "anyOf": [ { "anyOf": [ { "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Date maximale du DPE, 'AAAA-MM-JJ'" }, "date_dpe_min": { "anyOf": [ { "anyOf": [ { "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Date minimale du DPE, 'AAAA-MM-JJ'" }, "lat": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Latitude du centre (avec 'lng')" }, "limit": { "anyOf": [ { "anyOf": [ { "maximum": 50, "minimum": 1, "type": "integer" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "DPE par page (défaut 20, max 50)" }, "lng": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Longitude du centre (avec 'lat')" }, "offset": { "anyOf": [ { "anyOf": [ { "maximum": 5000, "minimum": 0, "type": "integer" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Index de départ pour la pagination (défaut 0, max 5000). Utiliser pagination.next_offset pour la page suivante." }, "parcelle_id": { "anyOf": [ { "anyOf": [ { "maxLength": 14, "minLength": 14, "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "IDU d'une parcelle au centre de la zone" }, "rayon_m": { "anyOf": [ { "anyOf": [ { "maximum": 2000, "minimum": 50, "type": "integer" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Rayon autour du centre en mètres (défaut 500, max 2000)" }, "surface_max_m2": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Surface habitable maximale en m², ex: 120" }, "surface_min_m2": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Surface habitable minimale en m², ex: 60" }, "type_batiment": { "anyOf": [ { "anyOf": [ { "enum": [ "maison", "appartement", "immeuble" ], "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "'immeuble' = DPE d'immeuble collectif entier" } }, "type": "object" }, "name": "search_dpe", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "annee_construction": { "anyOf": [ { "anyOf": [ { "anyOf": [ { "type": "string" }, { "type": "number" } ] }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Année de construction (BDNB). Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)" }, "classe_dpe": { "anyOf": [ { "anyOf": [ { "enum": [ "A", "B", "C", "D", "E", "F", "G" ], "type": "string" }, { "const": "", "type": "string" } ] }, { "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" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Classe GES. Clé exacte: classe_ges; valeur: une lettre A-G." }, "commune": { "anyOf": [ { "anyOf": [ { "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Nom de la commune où chercher, ex: 'Angers'" }, "conso_dpe_kwh_m2": { "anyOf": [ { "anyOf": [ { "anyOf": [ { "type": "string" }, { "type": "number" } ] }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Consommation énergie primaire en kWh/m²/an (alternative à classe_dpe). Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)" }, "date_dpe": { "anyOf": [ { "anyOf": [ { "anyOf": [ { "type": "string" }, { "type": "number" } ] }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Date d'établissement du DPE. Année (2021) ou texte : '2021', '2021-06', ou plage '2019-2024'" }, "date_permis_construire": { "anyOf": [ { "anyOf": [ { "anyOf": [ { "type": "string" }, { "type": "number" } ] }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Date du permis de construire. Année (2021) ou texte : '2021', '2021-06', ou plage '2019-2024'" }, "date_vente": { "anyOf": [ { "anyOf": [ { "anyOf": [ { "type": "string" }, { "type": "number" } ] }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Date de vente DVF. Année (2021) ou texte : '2021', '2021-06', ou plage '2019-2024'" }, "departement": { "anyOf": [ { "anyOf": [ { "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Code ou nom du département, ex: '49', 'Maine-et-Loire'. Peut aussi restreindre une commune ou un viewport." }, "has_copropriete": { "anyOf": [ { "anyOf": [ { "type": "boolean" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Uniquement les parcelles en copropriété" }, "has_permis_construire": { "anyOf": [ { "anyOf": [ { "type": "boolean" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Uniquement les parcelles avec permis de construire" }, "has_piscine": { "anyOf": [ { "anyOf": [ { "type": "boolean" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Uniquement les parcelles avec piscine" }, "has_proprietaire_personne_morale": { "anyOf": [ { "anyOf": [ { "type": "boolean" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Uniquement les parcelles détenues par une personne morale (société, collectivité…)" }, "limit": { "anyOf": [ { "anyOf": [ { "maximum": 50, "minimum": 1, "type": "integer" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Nombre de parcelles détaillées retournées par page (défaut 20, max 50)" }, "nombre_batiments": { "anyOf": [ { "anyOf": [ { "anyOf": [ { "type": "string" }, { "type": "number" } ] }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Nombre de bâtiments sur la parcelle. Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)" }, "offset": { "anyOf": [ { "anyOf": [ { "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Index de départ pour la pagination (défaut 0). Utiliser pagination.next_offset pour la page suivante." }, "prix_vente_eur": { "anyOf": [ { "anyOf": [ { "anyOf": [ { "type": "string" }, { "type": "number" } ] }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Prix de la dernière vente DVF en euros. Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)" }, "region": { "anyOf": [ { "anyOf": [ { "type": "string" }, { "const": "", "type": "string" } ] }, { "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)." }, "siren": { "anyOf": [ { "anyOf": [ { "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "SIREN du propriétaire personne morale" }, "surface_batiment_m2": { "anyOf": [ { "anyOf": [ { "anyOf": [ { "type": "string" }, { "type": "number" } ] }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Emprise au sol d'un bâtiment en m². Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)" }, "surface_habitable_m2": { "anyOf": [ { "anyOf": [ { "anyOf": [ { "type": "string" }, { "type": "number" } ] }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Surface habitable (DPE) en m². Nombre ou texte : 250 ou '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'." }, "surface_parcelle_m2": { "anyOf": [ { "anyOf": [ { "anyOf": [ { "type": "string" }, { "type": "number" } ] }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Une seule surface de parcelle en m² par appel. Nombre ou texte : 250 ou '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_piscine_m2": { "anyOf": [ { "anyOf": [ { "anyOf": [ { "type": "string" }, { "type": "number" } ] }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Surface de la piscine en m². Nombre ou texte : 250 ou '250' (exact), '100-500' (plage), '100-' (minimum), '-500' (maximum)" }, "viewport": { "anyOf": [ { "anyOf": [ { "properties": { "ne_lat": { "type": "number" }, "ne_lng": { "type": "number" }, "sw_lat": { "type": "number" }, "sw_lng": { "type": "number" } }, "required": [ "sw_lat", "sw_lng", "ne_lat", "ne_lng" ], "type": "object" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Zone géographique explicite (alternative à commune). Hauteur ≤ 20 km pour un détail parcelle par parcelle" } }, "type": "object" }, "name": "search_parcelles", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "address": { "anyOf": [ { "anyOf": [ { "minLength": 3, "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Adresse postale au centre de la zone" }, "commune": { "anyOf": [ { "anyOf": [ { "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Nom de commune : toute la commune (ignore 'rayon_m')" }, "date_max": { "anyOf": [ { "anyOf": [ { "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Date maximale 'AAAA-MM-JJ'" }, "date_min": { "anyOf": [ { "anyOf": [ { "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Date minimale 'AAAA-MM-JJ' (défaut 2021-01-01)" }, "lat": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Latitude du centre (avec 'lng')" }, "limit": { "anyOf": [ { "anyOf": [ { "maximum": 50, "minimum": 1, "type": "integer" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Ventes par page (défaut 20, max 50)" }, "lng": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Longitude du centre (avec 'lat')" }, "offset": { "anyOf": [ { "anyOf": [ { "maximum": 5000, "minimum": 0, "type": "integer" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Index de départ pour la pagination (défaut 0, max 5000). Utiliser pagination.next_offset pour la page suivante." }, "parcelle_id": { "anyOf": [ { "anyOf": [ { "maxLength": 14, "minLength": 14, "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "IDU d'une parcelle au centre de la zone" }, "prix_max_eur": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Prix de vente maximal en euros, ex: 400000" }, "prix_min_eur": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Prix de vente minimal en euros, ex: 150000" }, "rayon_m": { "anyOf": [ { "anyOf": [ { "maximum": 2000, "minimum": 50, "type": "integer" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Rayon autour du centre en mètres (défaut 500, max 2000)" }, "surface_max_m2": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Surface bâtie maximale en m², ex: 120" }, "surface_min_m2": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Surface bâtie minimale en m², ex: 60" }, "tri": { "anyOf": [ { "anyOf": [ { "enum": [ "date", "distance" ], "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Tri des ventes (défaut : date décroissante ; distance pour les plus proches)" }, "type_bien": { "anyOf": [ { "anyOf": [ { "enum": [ "maison", "appartement", "local" ], "type": "string" }, { "const": "", "type": "string" } ] }, { "type": "null" } ], "description": "Type de bien vendu : 'maison', 'appartement' ou 'local' (local commercial, industriel ou assimilé)" } }, "type": "object" }, "name": "search_ventes_dvf", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:808b8d505909d9657280e482703ed483bf41cf423ddbf73d1031b7c2647fa8bd | sha256sum