Pillr
Server Details
Free, no-auth connector on French real estate public data: price per square meter by municipality (DVF), market summaries (rent, yield, price trend, ABC zoning), and urbanism/permit requirements for renovation projects.
- Status
- Healthy
- Uptime
- 100.0% over 42 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 7 tools
Each tool owns a distinct scope: department ranking, multi-commune comparison, single-commune full market, single-commune price only, neighbourhood prices, single-dwelling rent, and urbanism formality. The descriptions explicitly cross-reference siblings ("pour le seul prix au m², prix_m2_commune répond plus court", "pour comparer des communes, comparaison_communes"), so the summary-vs-detail overlaps between marche_commune, prix_m2_commune and loyer_logement are clearly signposted rather than confusing.
All names are snake_case and follow a consistent resource-oriented pattern, with the prix_m2_* family sharing a common prefix. No mixing of verb styles or casing conventions.
Seven tools is well-scoped for a French real-estate data connector, with each tool covering a distinct level of granularity (department, multi-commune, commune, quartier, dwelling) plus one regulatory tool. Nothing feels redundant or missing from the count perspective.
Coverage is strong: rankings, comparisons, commune market synthesis, m² prices, neighbourhood prices, rent estimation and urbanism formalities form a coherent lifecycle for investment research. Minor gaps remain — no valuation of a specific property's purchase price, and no commune search/lookup tool — but agents can work around these.
Available Tools
7 toolsclassement_departementClassement des communes d'un départementARead-onlyIdempotentInspect
Classe les communes d'UN département selon un critère public : meilleur rendement locatif brut des appartements (rendement_locatif), prix au m² des appartements les plus bas (prix_bas) ou les plus élevés (prix_eleve). Mêmes communes, mêmes seuils et même ordre que les classements publiés sur pillr.fr : communes de 2 000 habitants et plus comptant au moins 10 ventes, prix mesurés sur les ventes DVF pour les classements de prix, 30 communes au plus, avec le nombre total de communes classées. À utiliser pour trouver des communes sans les nommer (« où investir en Gironde », « les communes les moins chères du Nord »). Pour comparer des communes déjà nommées, utiliser comparaison_communes. Paris, les Bouches-du-Rhône et le Rhône ne sont pas classés : leurs arrondissements faussent le classement. Aucun score Pillr.
| Name | Required | Description | Default |
|---|---|---|---|
| critere | Yes | rendement_locatif : rendement brut des appartements, du plus haut au plus bas ; prix_bas : prix au m² des appartements, du moins cher au plus cher ; prix_eleve : l'inverse. | |
| departement | Yes | Code du département (« 33 », « 2A », « 974 ») ou son nom (« Gironde », « Côtes-d'Armor »). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the bar is low, yet the description adds substantial method disclosure: 2,000-inhabitant and 10-sales thresholds, DVF source for price rankings, a 30-commune cap plus total-count reporting, and the 'Aucun score Pillr' caveat. These are exactly the traits an agent needs to interpret results without over-claiming.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and criteria come first, then methodology, then the alternative-tool routing and exclusions – well front-loaded with no filler sentences. It is dense with numbers in the middle, which costs a little readability but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still conveys return shape (at most 30 ranked communes plus the total number ranked) and the data basis. Combined with the exclusion list, an agent has enough to call it correctly and describe its output honestly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already spells out each enum value and its sort direction, so the description's restatement of the three criteria adds little beyond it. The depiction thresholds (population, sales) inform result interpretation but not the parameters themselves, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Classe les communes d'UN département selon un critère public') and immediately scopes it to a single department and a named criterion set. The capitalised 'UN' plus the ranked-list framing make it unmistakably distinct from per-commune siblings like prix_m2_commune or marche_commune.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use examples ('où investir en Gironde', 'les communes les moins chères du Nord'), names the explicit alternative for the opposite case (comparaison_communes for already-named communes), and states exclusions (Paris, Bouches-du-Rhône, Rhône are not ranked). Nothing is left to inference about when to pick this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comparaison_communesComparaison de communesARead-onlyIdempotentInspect
Compare de 2 à 5 communes françaises côte à côte, sur les mêmes indicateurs publics : prix au m² appartement et maison avec leur provenance, loyer médian au m², rendement brut théorique appartement et maison, évolution des prix sur 1 et 3 ans, zone ABC de tension locative, population. À utiliser dès que la question met plusieurs communes en balance (« Rennes ou Nantes pour investir ? »). Pour le détail d'une seule commune, utiliser marche_commune ; pour trouver des communes sans les nommer, classement_departement. Aucun score Pillr.
| Name | Required | Description | Default |
|---|---|---|---|
| communes | Yes | De 2 à 5 communes, chacune écrite comme le paramètre commune des autres outils (nom, « Lyon 7e » ou code INSEE). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, closed-world behavior. The description adds meaningful context beyond those annotations: price provenance is included and no Pillr score is returned, which sets expectations about what the agent will and will not get back.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the comparison scope and then moves cleanly to usage and alternatives. The first sentence is long because it enumerates all indicators, but each item is relevant to tool selection; only that density keeps it from being a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with rich annotations, one fully documented parameter, and no output schema, the description is nearly complete: it lists returned indicators, provenance, and the absence of a proprietary score. It does not describe response structure or missing-data behavior, which is a minor remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents the accepted commune formats, INSEE codes, arrondissement syntax, postal-code fallback, and the 2–5 item bounds. The description only reaffirms the 2–5 range and cross-references the commune parameter of other tools, adding modest value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — comparing 2 to 5 French communes — and enumerates the exact indicators compared. It explicitly distinguishes itself from marche_commune and classement_departement, so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger: use whenever a question puts several communes in balance, with a concrete example. It also names the alternatives for single-commune detail and unnamed-commune discovery, covering when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
demarche_urbanisme_projetFormalité d'urbanisme d'un projetARead-onlyIdempotentInspect
Quelle formalité d'urbanisme pour un projet de travaux (aucune, déclaration préalable, permis de construire, d'aménager ou de démolir), quel formulaire Cerfa, un architecte est-il obligatoire, quelles pièces, quel délai d'instruction. Chaque conclusion porte sa règle et sa source, et la base de règles porte sa date. Un fait manquant revient en question, jamais en supposition. Sans adresse : ce connecteur ne lit ni le PLU ni les servitudes, les protections du terrain sont à déclarer en paramètres. Aucune donnée de marché : pour les prix et les loyers, les autres outils. Information générale, ni conseil juridique ni décision de la mairie.
| Name | Required | Description | Default |
|---|---|---|---|
| spr | No | Le terrain est-il en site patrimonial remarquable ? | |
| bassin_m2 | No | Surface du bassin d'une piscine, en m². | |
| demandeur | No | Qui dépose la demande (compte pour l'obligation d'architecte). | |
| hauteur_m | No | Hauteur du projet, en mètres (hauteur du mur pour un mur). | |
| changement | No | Pour un changement de destination : porte-t-il sur la destination ou sur une sous-destination ? | |
| erp_ou_igh | No | S'agit-il d'un établissement recevant du public ou d'un immeuble de grande hauteur ? | |
| pac_visible | No | L'unité extérieure de la pompe à chaleur est-elle visible depuis l'espace public ? | |
| site_classe | No | Le terrain est-il en site classé ? | |
| site_inscrit | No | Le terrain est-il en site inscrit ? | |
| type_travaux | Yes | Nature du projet. Obligatoire. | |
| zone_urbaine | No | Le terrain est-il en zone urbaine du PLU, si connu ? | |
| modifie_volume | No | Les travaux modifient-ils le volume du bâtiment ? | |
| inclut_demolition | No | Le projet inclut-il une démolition ? | |
| reserve_naturelle | No | Le terrain est-il en réserve naturelle ? | |
| document_urbanisme | No | Document d'urbanisme de la commune, si connu. | |
| piscine_demontable | No | La piscine est-elle démontable ? | |
| coeur_parc_national | No | Le terrain est-il en cœur de parc national ? | |
| element_protege_plu | No | Le bâtiment est-il protégé par le PLU (art. L151-19 ou L151-23) ? | |
| equipements_communs | No | La division crée-t-elle des voies, espaces ou équipements communs ? | |
| maison_individuelle | No | S'agit-il d'une maison individuelle ? | |
| monument_historique | No | Les travaux portent-ils sur un monument historique ? | |
| hauteur_couverture_m | No | Hauteur de la couverture d'une piscine, en mètres (0 si non couverte). | |
| visible_espace_public | No | Le projet est-il visible depuis l'espace public ? | |
| duree_installation_mois | No | Mois par an d'installation d'une piscine démontable. | |
| emprise_au_sol_creee_m2 | No | Emprise au sol créée par le projet, en m². | |
| duree_installation_jours | No | Jours par an d'installation d'une piscine démontable en espace protégé. | |
| modifie_aspect_exterieur | No | Les travaux modifient-ils l'aspect extérieur ? | |
| reparation_a_l_identique | No | S'agit-il d'une réparation à l'identique (mêmes matériaux, mêmes couleurs) ? | |
| surface_plancher_creee_m2 | No | Surface de plancher créée, en m² (0 pour un carport ouvert). | |
| abords_monument_historique | No | Le terrain est-il dans les abords d'un monument historique ? | |
| ravalement_change_couleurs | No | Le ravalement change-t-il les couleurs de la façade ? | |
| emprise_au_sol_existante_m2 | No | Emprise au sol du bâtiment existant, en m². | |
| travaux_structure_ou_facade | No | Des travaux touchent-ils les structures porteuses ou la façade ? | |
| surface_plancher_existante_m2 | No | Surface de plancher du bâtiment existant, en m². |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations it adds real behavioral context: every conclusion carries its rule and source, the rule base is date-stamped, and missing facts are returned as questions rather than assumed. It also discloses a critical scope limit (no PLU or servitude lookups; terrain protections must be supplied as parameters) and that output is general information, not legal advice or a municipal decision.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the deliverable list, then scope limits, then the market-data disclaimer and legal caveat. The long opening sentence is dense but every clause names a distinct output; no sentence is filler, though the run-on structure makes the first read heavier than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 34-parameter rule engine with no output schema, the description covers scope, the question-back behavior, source attribution, and explicit exclusions. What remains implicit is how the conditional parameters cluster by type_travaux, which an agent must still infer from the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 34 parameters with enums and units documented, so the schema does the heavy lifting and the baseline applies. The description adds only one semantic hint — that terrain protections must be declared via parameters — and otherwise does not explain the interaction between the single required type_travaux and the 33 conditional, often optional inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete deliverable set with specific nouns: which urbanism formality applies (none, prior declaration, building/development/demolition permit), which Cerfa form, whether an architect is mandatory, which documents, and the instruction deadline. An agent can distinguish this from all six sibling tools, which are price/rent/market tools, without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly bounds scope ('ce connecteur ne lit ni le PLU ni les servitudes') and routes away from itself for market data ('pour les prix et les loyers, les autres outils'), which is exactly the sibling set. It does not enumerate a hard when-not-to-use case beyond that, so it stops short of a full routing rule set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loyer_logementLoyer d'un logementARead-onlyIdempotentInspect
Loyer mensuel estimé d'UN logement décrit par sa commune, sa typologie (T1 à T5, ou maison) et sa surface : loyer hors charges, fourchette à 95 %, loyer au m² et segment de la Carte des loyers (ANIL et DHUP) utilisé, les mêmes montants que la page /loyer de Pillr. Avec un prix d'achat, ajoute le rendement brut de ce logement. À utiliser pour « combien louer un T2 de 40 m² à Nantes » ou « quel rendement pour ce T3 à 180 000 € ». Pour le loyer médian et le rendement de marché de la commune entière, utiliser marche_commune. C'est un loyer d'annonce modélisé, ni un loyer constaté ni un plafond légal : l'encadrement des loyers n'est pas servi.
| Name | Required | Description | Default |
|---|---|---|---|
| commune | Yes | Nom de la commune (« Bordeaux », « Saint-Étienne ») ou code INSEE à 5 chiffres. Un arrondissement de Paris, Lyon ou Marseille s'écrit « Paris 11e », « Lyon 7e », « Marseille 8e » (ou « Lyon 7 », « Lyon 7ème », « 7e arrondissement de Lyon ») ; le nom seul (« Lyon ») rend l'agrégat de ses arrondissements. Un code postal est accepté en dernier recours : cinq chiffres désignent d'abord le code INSEE qui les porte. | |
| typologie | Yes | Typologie du logement : T1 (studio) à T5 (T5 et plus), ou maison. | |
| prix_achat | No | Prix d'achat du logement, en euros, frais compris ou non : sert au seul rendement brut. | |
| surface_m2 | No | Surface habitable, en m². Absente : la surface d'exemple de la typologie, dite dans la réponse. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description goes beyond them by disclosing what the returned figure actually is (modeled advertised rent, not observed rent or a legal cap, with rent control explicitly out of scope) and what the response contains (hors charges, 95% interval, €/m², ANIL/DHUP segment). It doesn't cover freshness or data-source vintage, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then usage examples, then the sibling alternative, then the caveat — a sound ordering with no filler. The first sentence is long and packs several output elements, which slightly taxes scanning, but no sentence is expendable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden itself and does so (rent, interval, €/m², segment, optional yield), while also warning what the number is not. Nothing an agent needs to call this correctly on 4 simple parameters is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning the schema lacks: prix_achat is optional and only feeds the gross yield, and surface is optional with an example-surface fallback reflected in the answer. That connects the parameters to observable output behavior rather than restating the fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Loyer mensuel estimé d'UN logement") plus the exact inputs that define it (commune, typologie, surface), and explicitly contrasts with the sibling marche_commune. An agent can tell it apart from prix_m2_commune and marche_commune without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete invocation examples ("combien louer un T2 de 40 m² à Nantes", "quel rendement pour ce T3 à 180 000 €") and names the alternative: "Pour le loyer médian et le rendement de marché de la commune entière, utiliser marche_commune". Both the when and the when-not are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marche_communeSynthèse de marché d'une communeARead-onlyIdempotentInspect
Synthèse complète du marché d'UNE commune, pour juger s'il faut y acheter ou y investir : prix au m² appartement et maison, loyer médian au m² (DHUP), loyer par type de logement du T1 à la maison (Carte des loyers, à une surface d'exemple, avec sa fourchette à 95 %, les mêmes montants que la page /loyer de Pillr), rendement brut théorique (la maison sur le loyer des maisons), évolution des prix sur 1 et 3 ans, zone ABC de tension locative, et le marché en vente du dernier mois calculé, agrégé par commune à partir des annonces de vente collectées par Pillr (annonces en ligne en fin de mois, nouvelles annonces, prix affiché médian au m², part des annonces baissées, délai médian en ligne des annonces retirées, variation sur un mois ; un mois de mise à jour de la collecte ne rend que les nouvelles annonces et le prix affiché, et le dit), avec ses limites et sa date de calcul, non servi au-delà de 45 jours. Aucune annonce individuelle n'est rendue. Pour le seul prix au m², prix_m2_commune répond plus court ; pour le loyer d'un logement précis, loyer_logement ; pour comparer des communes, comparaison_communes. Le score Pillr sur 100, ses sous-scores et l'analyse complète ne sont pas servis par ce connecteur, ils sont sur pillr.fr.
| Name | Required | Description | Default |
|---|---|---|---|
| commune | Yes | Nom de la commune (« Bordeaux », « Saint-Étienne ») ou code INSEE à 5 chiffres. Un arrondissement de Paris, Lyon ou Marseille s'écrit « Paris 11e », « Lyon 7e », « Marseille 8e » (ou « Lyon 7 », « Lyon 7ème », « 7e arrondissement de Lyon ») ; le nom seul (« Lyon ») rend l'agrégat de ses arrondissements. Un code postal est accepté en dernier recours : cinq chiffres désignent d'abord le code INSEE qui les porte. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already declare readOnly, idempotent, non-destructive and non-open-world behavior, the description adds important context: no individual listings are returned, data older than 45 days is not served, update months return only limited fields, and the Pillr score/full analysis are excluded. No annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and included metrics are front-loaded, followed by alternatives and exclusions in a logical order. The text is very dense and one long semicolon-heavy paragraph, so it is informative but could be more scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-value burden, and it does: it enumerates the market metrics, aggregation source, freshness limits, omission of individual listings, and excluded Pillr score. This is complete enough for an agent to invoke a complex read-only market tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the commune parameter already documents name, INSEE code, arrondissement notation, and postal-code fallback. The description adds only the 'UNE commune' scope and aggregation note, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: a complete market synthesis for ONE commune, explicitly for judging whether to buy or invest. It enumerates the included metrics and distinguishes itself from siblings, so an agent can identify it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to alternatives: prix_m2_commune for price alone, loyer_logement for a precise rent, and comparaison_communes for comparing communes. It also states the 45-day freshness cutoff and the collection-update-month caveat.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prix_m2_communePrix au m² d'une communeARead-onlyIdempotentInspect
Prix de référence au mètre carré d'UNE commune française, appartement et maison, et rien d'autre : valeur, provenance (mesurée sur les ventes DVF ou estimée ; pour Paris, Lyon et Marseille, le compte des arrondissements mesurés et estimés), millésime et date de reconstruction. À utiliser quand la question porte seulement sur le prix d'une commune. Pour son loyer, son rendement, l'évolution de ses prix ou sa tension locative, utiliser marche_commune ; pour les prix quartier par quartier, prix_m2_quartiers ; pour plusieurs communes, comparaison_communes. Un prix absent est dit absent, jamais deviné. C'est un repère de marché communal, pas l'estimation d'un bien précis.
| Name | Required | Description | Default |
|---|---|---|---|
| commune | Yes | Nom de la commune (« Bordeaux », « Saint-Étienne ») ou code INSEE à 5 chiffres. Un arrondissement de Paris, Lyon ou Marseille s'écrit « Paris 11e », « Lyon 7e », « Marseille 8e » (ou « Lyon 7 », « Lyon 7ème », « 7e arrondissement de Lyon ») ; le nom seul (« Lyon ») rend l'agrégat de ses arrondissements. Un code postal est accepté en dernier recours : cinq chiffres désignent d'abord le code INSEE qui les porte. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds real behavioral context: the provenance distinction (measured on DVF sales vs estimated), the arrondissement counting for Paris/Lyon/Marseille, and the rule that missing prices are reported as absent, never guessed. It does not restate annotation fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core scope is front-loaded in the first clause, followed by routing rules. It is dense but each sentence carries information; the only slight excess is the closing reassurance sentence, which is borderline redundant with the earlier 'jamais deviné' clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description deliberately names the return fields (valeur, provenance, millésime, date de reconstruction) and the missing-value behavior. Combined with the explicit routing among siblings, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents the commune/INSEE/postal-code forms and the PLM arrondissement notation. The description adds essentially nothing about the parameter beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource+scope: reference price per m² for ONE French commune, apartments and houses, explicitly 'et rien d'autre'. It also enumerates the returned facets (valeur, provenance, millésime), so the agent knows exactly what this returns versus the sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit inclusion rule ('quand la question porte seulement sur le prix d'une commune') and names each alternative with the condition that selects it: marche_commune for rent/yield/trend/tension, prix_m2_quartiers for neighborhood detail, comparaison_communes for multiple communes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prix_m2_quartiersPrix au m² par quartierARead-onlyIdempotentInspect
Prix au m² des appartements et des maisons quartier par quartier (IRIS de l'INSEE) dans UNE commune, du plus cher au moins cher : prix, nombre de ventes DVF, provenance (mesuré sur les ventes du quartier ou rapproché du prix de la commune) et part portée par les ventes du quartier. Seuls les quartiers d'au moins 5 ventes sont publiés, 40 au plus par type de bien. À utiliser pour « quel quartier est le moins cher à Lille » ou pour situer un quartier dans sa commune. Pour le prix de la commune entière, utiliser prix_m2_commune. Une commune que l'INSEE ne découpe pas en quartiers n'a pas de prix de quartier ; Paris, Lyon et Marseille se lisent mieux par arrondissement (« Lyon 3e »).
| Name | Required | Description | Default |
|---|---|---|---|
| commune | Yes | Nom de la commune (« Bordeaux », « Saint-Étienne ») ou code INSEE à 5 chiffres. Un arrondissement de Paris, Lyon ou Marseille s'écrit « Paris 11e », « Lyon 7e », « Marseille 8e » (ou « Lyon 7 », « Lyon 7ème », « 7e arrondissement de Lyon ») ; le nom seul (« Lyon ») rend l'agrégat de ses arrondissements. Un code postal est accepté en dernier recours : cinq chiffres désignent d'abord le code INSEE qui les porte. | |
| type_bien | No | Ne lister qu'un type de bien. Absent : les deux. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: it discloses result ordering (du plus cher au moins cher), the publication threshold (quartiers d'au moins 5 ventes), the cap (40 max per property type), and the meaning of the provenance field. It effectively documents the return payload in the absence of an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads scope and granularity, then the exclusion rule and alternative. Dense and largely waste-free, though the long run-on first sentence mixing returned fields, thresholds and caps could be split for faster scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no output schema, the description covers what is returned (prix, nombre de ventes DVF, provenance, part), how it is ordered, what is suppressed, and how it differs from siblings. An agent has everything needed to invoke it correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with the commune parameter already explaining name/INSEE/arrondissement forms and the type_bien enum documented. The description reinforces the single-commune constraint but adds no parameter syntax or format detail beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (prix au m² des appartements et maisons), a specific granularity (quartier par quartier, IRIS de l'INSEE) and a specific scope (UNE commune), then explicitly rules out the sibling prix_m2_commune. An agent can distinguish it from prix_m2_commune, marche_commune and comparaison_communes without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete use-case («quel quartier est le moins cher à Lille»), a secondary use (situer un quartier dans sa commune), the explicit alternative for the commune-level question, and the negative condition (communes not split by INSEE into quartiers have no quartier price). It even routes Paris/Lyon/Marseille queries to arrondissement naming rather than a different tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- Added
classement_departement - Added
comparaison_communes - Added
loyer_logement - Added
prix_m2_quartiers
2 tool updates
- Changed
marche_commune1 field changed- changed
Input schema / properties / commune / descriptionPrevious value: -"Nom de la commune (« Bordeaux », « Lyon 7e », « Saint-Étienne ») ou code INSEE à 5 chiffres. Un code postal est accepté en dernier recours."New value: +"Nom de la commune (« Bordeaux », « Saint-Étienne ») ou code INSEE à 5 chiffres. Un arrondissement de Paris, Lyon ou Marseille s'écrit « Paris 11e », « Lyon 7e », « Marseille 8e » (ou « Lyon 7 », « Lyon 7ème », « 7e arrondissement de Lyon ») ; le nom seul (« Lyon ») rend l'agrégat de ses arrondissements. Un code postal est accepté en dernier recours : cinq chiffres désignent d'abord le code INSEE qui les porte."
- Changed
prix_m2_commune1 field changed- changed
Input schema / properties / commune / descriptionPrevious value: -"Nom de la commune (« Bordeaux », « Lyon 7e », « Saint-Étienne ») ou code INSEE à 5 chiffres. Un code postal est accepté en dernier recours."New value: +"Nom de la commune (« Bordeaux », « Saint-Étienne ») ou code INSEE à 5 chiffres. Un arrondissement de Paris, Lyon ou Marseille s'écrit « Paris 11e », « Lyon 7e », « Marseille 8e » (ou « Lyon 7 », « Lyon 7ème », « 7e arrondissement de Lyon ») ; le nom seul (« Lyon ») rend l'agrégat de ses arrondissements. Un code postal est accepté en dernier recours : cinq chiffres désignent d'abord le code INSEE qui les porte."
3 tool updates
- First observed
demarche_urbanisme_projet - First observed
marche_commune - First observed
prix_m2_commune
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRemote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.MIT
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs115 npm55 PyPIMIT
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1618 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.