Miramo

French rental law for landlords: legal rent caps, rental zones and unfurnished lease drafts.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
93%
Naming quality
93%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~9,984Tokens (tool definitions)
~14.9 KBTypical response size
Significant attention impact (7.80% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "mcp": {
      "url": "https://mcp.miramo.fr/mcp"
    }
  }
}

Remote endpoints

https://mcp.miramo.fr/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢lookup_reference_rent(address, rooms, furnished, constructionPeriod, surface)

Donne le loyer de référence d'un logement à une adresse où les loyers sont encadrés (Paris, Lille, Lyon et Villeurbanne, Bordeaux, Montpellier, Seine-Saint-Denis avec Est Ensemble et Plaine Commune), selon l'arrêté préfectoral en vigueur aujourd'hui : le loyer de référence, le majoré (le plafond) et le minoré, en euros par m² et par mois. Avec la surface habitable, donne aussi le loyer maximum hors charges du logement. La réponse nomme l'arrêté, ses dates et le jour où Miramo l'a vérifié : cite-les. Quand isStale est vrai, les montants sont un ordre de grandeur, pas le plafond légal. Hors encadrement, la réponse le dit et renvoie vers l'outil zone tendue de miramo.fr.

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "minLength": 3,
      "maxLength": 200,
      "description": "Adresse complète du logement : numéro, rue, code postal et ville, par exemple « 14 rue Oberkampf 75011 Paris ». Miramo la place avec la Base Adresse Nationale ; une adresse qu'elle ne place pas sur un bâtiment est renvoyée avec le statut address_not_found."
    },
    "rooms": {
      "type": "string",
      "enum": [
        "1",
        "2",
        "3",
        "4+"
      ],
      "description": "Nombre de pièces principales : séjour et chambres, sans la cuisine ni la salle de bains. 4+ à partir de quatre."
    },
    "furnished": {
      "type": "boolean",
      "description": "true si le logement est loué meublé, false s'il est loué vide."
    },
    "constructionPeriod": {
      "type": "string",
      "enum": [
        "before_1946",
        "1946_1970",
        "1971_1990",
        "after_1990",
        "1991_2005",
        "after_2005"
      ],
      "description": "Période de construction de l'immeuble, dans les tranches des arrêtés : after_1990 (après 1990), after_2005 (après 2005), before_1946 (avant 1946), 1946_1970 (entre 1946 et 1970), 1971_1990 (entre 1971 et 1990), 1991_2005 (entre 1991 et 2005). Paris, Lille, Bordeaux, Est Ensemble et Plaine Commune s'arrêtent à after_1990 ; Lyon et Montpellier coupent l'après 1990 en 1991_2005 et after_2005."
    },
    "surface": {
      "description": "Surface habitable du logement, en m². Facultative : avec elle, la réponse donne le loyer maximum hors charges du logement.",
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 1000
    }
  },
  "required": [
    "address",
    "rooms",
    "furnished",
    "constructionPeriod"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "arrete_only",
        "not_covered",
        "address_not_found"
      ],
      "description": "found : loyers de référence trouvés. arrete_only : l'arrêté s'applique mais Miramo n'a pas de loyer pour ce logement. not_covered : les loyers ne sont pas encadrés à cette adresse. address_not_found : adresse non placée ; demande une adresse plus complète."
    },
    "territory": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "lyon",
            "paris",
            "lille",
            "bordeaux",
            "grenoble",
            "montpellier",
            "pays-basque",
            "est-ensemble",
            "plaine-commune"
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Le territoire d'encadrement de l'adresse."
    },
    "sector": {
      "description": "Le secteur de l'arrêté où tombe l'adresse : le quartier à Paris, la zone ou la commune ailleurs.",
      "type": [
        "string",
        "null"
      ]
    },
    "referenceRent": {
      "description": "Loyer de référence.",
      "type": [
        "number",
        "null"
      ]
    },
    "referenceRentMax": {
      "description": "Loyer de référence majoré : le plafond, hors complément de loyer.",
      "type": [
        "number",
        "null"
      ]
    },
    "referenceRentMin": {
      "description": "Loyer de référence minoré.",
      "type": [
        "number",
        "null"
      ]
    },
    "unit": {
      "type": "string",
      "const": "EUR/m²/month",
      "description": "Unité des trois loyers : euros par m² et par mois."
    },
    "monthlyCap": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991
        },
        {
          "type": "null"
        }
      ],
      "description": "Loyer maximum hors charges du logement, en euros par mois : le majoré multiplié par la surface, arrondi à l'euro inférieur. Null sans surface."
    },
    "arrete": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "reference": {
              "type": "string",
              "description": "Référence de l'arrêté préfectoral."
            },
            "inForceSince": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Premier jour où il s'applique."
            },
            "endsOn": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Dernier jour où il s'applique ; null quand la source n'en donne pas."
            }
          },
          "required": [
            "reference",
            "inForceSince",
            "endsOn"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "L'arrêté en vigueur aujourd'hui ; null quand Miramo n'en a pas."
    },
    "dataCheckedOn": {
      "anyOf": [
        {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
        },
        {
          "type": "null"
        }
      ],
      "description": "Jour où Miramo a vérifié l'arrêté sur sa source officielle."
    },
    "isStale": {
      "type": "boolean",
      "description": "true quand le barème que tient Miramo est plus ancien que l'arrêté en vigueur : les loyers sont alors un ordre de grandeur."
    },
    "miramoUrl": {
      "type": "string",
      "format": "uri",
      "description": "L'outil de miramo.fr qui répond à la même question : à présenter tel quel."
    }
  },
  "required": [
    "status",
    "territory",
    "sector",
    "referenceRent",
    "referenceRentMax",
    "referenceRentMin",
    "unit",
    "monthlyCap",
    "arrete",
    "dataCheckedOn",
    "isStale",
    "miramoUrl"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢prepare_lease_draft(annexes, dates, rent, property)

Prépare un brouillon de bail de location vide (non meublé) et renvoie un lien vers le générateur de bail de miramo.fr, où la personne le termine : noms des parties, email, PDF et signature. Donne ce que la personne a dit du logement (adresse complète, surface, pièces, période de construction et le reste), du loyer et des charges, des dates et des documents qu'elle joindra. Tout est facultatif ; le site demande ce qui manque. Ne demande ni ne transmets jamais l'identité, l'email ou le téléphone du locataire ou du bailleur : le schéma les refuse. Rien n'est enregistré : le brouillon voyage dans le lien, à présenter en entier.

Input Schema

{
  "type": "object",
  "properties": {
    "annexes": {
      "description": "Les documents que la personne joindra au bail : dpe (DPE), noise (Diagnostic bruit), crep (Diagnostic plomb (CREP)), gas_diagnostic (Diagnostic gaz), risk_statement (État des risques), co_ownership_rules (Règlement de copropriété), electrical_diagnostic (Diagnostic électricité). Elle les dépose en PDF sur le site.",
      "maxItems": 7,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "dpe",
          "crep",
          "gas_diagnostic",
          "electrical_diagnostic",
          "co_ownership_rules",
          "risk_statement",
          "noise"
        ]
      }
    },
    "dates": {
      "description": "Les dates du bail.",
      "type": "object",
      "properties": {
        "startsOn": {
          "description": "Date de début du bail, au format AAAA-MM-JJ.",
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
        },
        "plannedSignatureOn": {
          "description": "Date de signature prévue, au format AAAA-MM-JJ.",
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
        }
      },
      "additionalProperties": false
    },
    "rent": {
      "description": "Le loyer et les charges.",
      "type": "object",
      "properties": {
        "chargesAmount": {
          "description": "Montant mensuel des charges, en euros.",
          "type": "number",
          "minimum": 0
        },
        "monthlyRentExcludingCharges": {
          "description": "Loyer mensuel hors charges, en euros.",
          "type": "number",
          "exclusiveMinimum": 0
        },
        "chargesMode": {
          "description": "Mode des charges : provisions (Provisions sur charges avec régularisation annuelle), on_receipts (Paiement périodique des charges récupérables sans provision, sur présentation des justificatifs (décret n° 87-713 du 26 août 1987)), none (Sans objet : aucune charge récupérable pour ce logement, selon déclaration du bailleur (ni taxe d'enlèvement des ordures ménagères ni équipement collectif)).",
          "type": "string",
          "enum": [
            "provisions",
            "on_receipts",
            "none"
          ]
        }
      },
      "additionalProperties": false
    },
    "property": {
      "description": "Le logement loué, en location vide (non meublé). Jamais rien sur les personnes.",
      "type": "object",
      "properties": {
        "dpeClass": {
          "description": "Classe énergie du DPE, de A à G.",
          "type": "string",
          "enum": [
            "A",
            "B",
            "C",
            "D",
            "E",
            "F",
            "G"
          ]
        },
        "livingAreaSqm": {
          "description": "Surface habitable du logement, en m².",
          "type": "number",
          "exclusiveMinimum": 0,
          "maximum": 1000
        },
        "heating": {
          "description": "Chauffage : collective (Collectif), individual (Individuel).",
          "type": "string",
          "enum": [
            "collective",
            "individual"
          ]
        },
        "hotWater": {
          "description": "Eau chaude : collective (Collective), individual (Individuelle).",
          "type": "string",
          "enum": [
            "collective",
            "individual"
          ]
        },
        "habitatType": {
          "description": "Type d'habitat : collective (Immeuble collectif), individual (Immeuble individuel).",
          "type": "string",
          "enum": [
            "collective",
            "individual"
          ]
        },
        "ownershipRegime": {
          "description": "Régime de l'immeuble : co_ownership (Copropriété), sole_ownership (Monopropriété).",
          "type": "string",
          "enum": [
            "co_ownership",
            "sole_ownership"
          ]
        },
        "mainRoomCount": {
          "description": "Nombre de pièces principales : séjour et chambres, sans la cuisine ni la salle de bains.",
          "type": "integer",
          "minimum": 1,
          "maximum": 20
        },
        "sharedAmenities": {
          "description": "Équipements communs de l'immeuble : lift (Ascenseur), courtyard (Cour), laundry_room (Laverie), bike_room (Local à vélos), green_space (Espaces verts).",
          "maxItems": 5,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "lift",
              "courtyard",
              "bike_room",
              "green_space",
              "laundry_room"
            ]
          }
        },
        "constructionPeriod": {
          "description": "Période de construction de l'immeuble, selon le modèle officiel de bail : before_1949 (Avant 1949), after_2005 (Depuis 2005), from_1949_to_1974 (1949-1974), from_1975_to_1989 (1975-1989), from_1989_to_2005 (1989-2005).",
          "type": "string",
          "enum": [
            "before_1949",
            "from_1949_to_1974",
            "from_1975_to_1989",
            "from_1989_to_2005",
            "after_2005"
          ]
        },
        "itEquipment": {
          "description": "Équipements d'accès à internet : box (Box internet), fibre (Fibre optique), phone_socket (Prise téléphonique), collective_antenna (Antenne collective).",
          "maxItems": 5,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "collective_antenna",
              "fibre",
              "box",
              "phone_socket"
            ]
          }
        },
        "privateAccessories": {
          "description": "Ce qui est loué avec le logement : cellar (Cave), garden (Jardin), balcony (Balcon), parking (Parking), terrace (Terrasse).",
          "maxItems": 5,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "cellar",
              "garden",
              "balcony",
              "parking",
              "terrace"
            ]
          }
        },
        "electricalInstallationOver15Years": {
          "description": "Installation intérieure d'électricité de plus de 15 ans : elle rend le diagnostic électricité obligatoire.",
          "type": "boolean"
        },
        "gasInstallationOver15Years": {
          "description": "Installation intérieure de gaz de plus de 15 ans : elle rend le diagnostic gaz obligatoire. Laisse vide s'il n'y a pas de gaz ou si la personne ne sait pas.",
          "type": "boolean"
        },
        "address": {
          "description": "Adresse complète du logement : numéro, rue, code postal et ville, par exemple « 14 rue Oberkampf 75011 Paris ». Miramo la place avec la Base Adresse Nationale ; une adresse qu'elle ne place pas sur un bâtiment est renvoyée avec le statut address_not_found.",
          "type": "string",
          "minLength": 3,
          "maxLength": 200
        }
      },
      "additionalProperties": false
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "summary": {
      "description": "Ce que contient le brouillon préparé, en une phrase.",
      "type": [
        "string",
        "null"
      ]
    },
    "address": {
      "description": "L'adresse que la Base Adresse Nationale a retenue, à faire confirmer par la personne.",
      "type": [
        "string",
        "null"
      ]
    },
    "url": {
      "anyOf": [
        {
          "type": "string",
          "format": "uri"
        },
        {
          "type": "null"
        }
      ],
      "description": "Lien vers le générateur de bail de miramo.fr, brouillon compris : à présenter tel quel et en entier."
    },
    "droppedFields": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "annexes",
          "dates"
        ]
      },
      "description": "Ce que le lien a laissé de côté pour rester court : annexes, puis dates. La personne les indiquera sur le site."
    },
    "status": {
      "type": "string",
      "enum": [
        "prepared",
        "address_not_found"
      ],
      "description": "prepared : le lien est prêt. address_not_found : l'adresse n'a pas été placée, aucun lien ; demande une adresse plus complète."
    }
  },
  "required": [
    "summary",
    "address",
    "url",
    "droppedFields",
    "status"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢check_tense_zone(address, commune, inseeCode)

Dit si une commune française est en zone tendue et dans quelle catégorie : 1 (zone tendue), 2 (zone touristique et tendue) ou hors zone, avec ce que ça change : le préavis du locataire d'un logement loué vide, la hausse du loyer entre deux locataires, la taxe sur les logements vacants. Donne l'adresse du logement, le nom de sa commune ou son code INSEE. Quand plusieurs communes portent le nom donné, la réponse les liste avec leur catégorie : demande laquelle à la personne. La réponse cite la liste officielle des communes et sa dernière mise à jour : cite-les.

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "description": "Adresse du logement : numéro, rue, code postal et ville, par exemple « 30 rue de Paris 93100 Montreuil ». Miramo la place avec la Base Adresse Nationale. Passe aussi commune : si l'adresse est placée dans une autre commune, la commune donnée l'emporte. Quand la personne ne donne que sa ville, passe commune seule.",
      "type": "string",
      "minLength": 3,
      "maxLength": 200
    },
    "commune": {
      "description": "Nom de la commune. Quand plusieurs communes portent ce nom, ajoute le code postal ou le département entre parenthèses : « Montreuil 93100 » ou « Montreuil (93) ». Avec une adresse, sert à la vérifier, et de repli si elle n'est pas trouvée.",
      "type": "string",
      "minLength": 2,
      "maxLength": 100
    },
    "inseeCode": {
      "description": "Code INSEE de la commune, cinq caractères (93048 pour Montreuil), à ne pas confondre avec le code postal. Vérifié avec commune et address quand elles sont données : un code qui ne correspond pas à la commune nommée ou à l'adresse placée est écarté.",
      "type": "string",
      "pattern": "^(\\d{5}|2[AB]\\d{3})$"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "several_communes",
        "commune_not_found",
        "address_not_found"
      ],
      "description": "found : commune trouvée. several_communes : plusieurs communes portent ce nom, voir candidates ; demande laquelle. commune_not_found : aucune commune de ce nom ou de ce code INSEE. address_not_found : adresse non placée ; demande une adresse plus complète ou la commune."
    },
    "commune": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "description": "Nom officiel de la commune."
            },
            "inseeCode": {
              "type": "string",
              "description": "Code INSEE de la commune, à ne pas confondre avec le code postal."
            },
            "departmentCode": {
              "type": "string",
              "description": "Département de la commune : 93, 2A, 974."
            }
          },
          "required": [
            "name",
            "inseeCode",
            "departmentCode"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "La commune retenue ; null sans commune unique."
    },
    "category": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "1",
            "2",
            "none"
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "1 : zone tendue. 2 : zone touristique et tendue. none : hors zone tendue. Null sans commune unique."
    },
    "unfurnishedLeaseNoticeMonths": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "number",
              "const": 1
            },
            {
              "type": "number",
              "const": 3
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Préavis du locataire qui quitte un logement loué vide, en mois : 1 en catégorie 1, 3 sinon (sauf motif personnel). En meublé, c'est 1 partout."
    },
    "isRelettingRentCapped": {
      "description": "true en catégorie 1 : entre deux locataires, le loyer du nouveau bail ne peut pas dépasser celui du précédent, sauf exceptions.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "isVacancyTaxed": {
      "description": "true en catégorie 1 et 2 : un logement vide depuis plus d'un an paie la taxe sur les logements vacants.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "candidates": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Nom officiel de la commune."
          },
          "inseeCode": {
            "type": "string",
            "description": "Code INSEE de la commune, à ne pas confondre avec le code postal."
          },
          "departmentCode": {
            "type": "string",
            "description": "Département de la commune : 93, 2A, 974."
          },
          "category": {
            "type": "string",
            "enum": [
              "1",
              "2",
              "none"
            ]
          }
        },
        "required": [
          "name",
          "inseeCode",
          "departmentCode",
          "category"
        ],
        "additionalProperties": false
      },
      "description": "Avec several_communes, les communes de ce nom et leur catégorie ; vide sinon."
    },
    "source": {
      "type": "object",
      "properties": {
        "decree": {
          "type": "string",
          "description": "Le décret qui liste les communes."
        },
        "lastUpdatedBy": {
          "type": "string",
          "description": "Le décret qui a mis la liste à jour en dernier."
        },
        "lastUpdatedOn": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
          "description": "Jour de cette mise à jour."
        }
      },
      "required": [
        "decree",
        "lastUpdatedBy",
        "lastUpdatedOn"
      ],
      "additionalProperties": false,
      "description": "La liste officielle des communes que lit Miramo, et sa dernière mise à jour."
    },
    "miramoUrl": {
      "type": "string",
      "format": "uri",
      "description": "L'outil de miramo.fr qui répond à la même question : à présenter tel quel."
    }
  },
  "required": [
    "status",
    "commune",
    "category",
    "unfurnishedLeaseNoticeMonths",
    "isRelettingRentCapped",
    "isVacancyTaxed",
    "candidates",
    "source",
    "miramoUrl"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢check_rent_control_perimeter(address, commune, inseeCode)

Dit si les loyers sont encadrés (encadrement du niveau des loyers, avec un loyer de référence) à une adresse ou dans une commune française : dans toute la commune, dans une partie seulement ou pas du tout, avec le territoire et l'arrêté préfectoral en vigueur aujourd'hui, ses dates et le jour où Miramo l'a vérifié. Donne l'adresse du logement, le nom de sa commune ou son code INSEE. La réponse dit aussi si Miramo tient le barème du territoire : quand il le tient, appelle ensuite lookup_reference_rent pour le loyer de référence d'un logement.

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "description": "Adresse du logement : numéro, rue, code postal et ville, par exemple « 30 rue de Paris 93100 Montreuil ». Miramo la place avec la Base Adresse Nationale. Passe aussi commune : si l'adresse est placée dans une autre commune, la commune donnée l'emporte. Quand la personne ne donne que sa ville, passe commune seule.",
      "type": "string",
      "minLength": 3,
      "maxLength": 200
    },
    "commune": {
      "description": "Nom de la commune. Quand plusieurs communes portent ce nom, ajoute le code postal ou le département entre parenthèses : « Montreuil 93100 » ou « Montreuil (93) ». Avec une adresse, sert à la vérifier, et de repli si elle n'est pas trouvée.",
      "type": "string",
      "minLength": 2,
      "maxLength": 100
    },
    "inseeCode": {
      "description": "Code INSEE de la commune, cinq caractères (93048 pour Montreuil), à ne pas confondre avec le code postal. Vérifié avec commune et address quand elles sont données : un code qui ne correspond pas à la commune nommée ou à l'adresse placée est écarté.",
      "type": "string",
      "pattern": "^(\\d{5}|2[AB]\\d{3})$"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "several_communes",
        "commune_not_found",
        "address_not_found"
      ],
      "description": "found : commune trouvée. several_communes : plusieurs communes portent ce nom, voir candidates ; demande laquelle. commune_not_found : aucune commune de ce nom ou de ce code INSEE. address_not_found : adresse non placée ; demande une adresse plus complète ou la commune."
    },
    "commune": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "description": "Nom officiel de la commune."
            },
            "inseeCode": {
              "type": "string",
              "description": "Code INSEE de la commune, à ne pas confondre avec le code postal."
            },
            "departmentCode": {
              "type": "string",
              "description": "Département de la commune : 93, 2A, 974."
            }
          },
          "required": [
            "name",
            "inseeCode",
            "departmentCode"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "La commune retenue ; null sans commune unique."
    },
    "coverage": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "full",
            "none",
            "partial"
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "full : loyers encadrés dans toute la commune. partial : dans une partie seulement, la carte de l'arrêté dit si l'adresse en fait partie. none : loyers non encadrés. Null sans commune unique."
    },
    "territory": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "lyon",
            "paris",
            "lille",
            "bordeaux",
            "grenoble",
            "montpellier",
            "pays-basque",
            "est-ensemble",
            "plaine-commune"
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Le territoire d'encadrement de la commune ; null hors encadrement."
    },
    "territoryName": {
      "description": "Le nom du territoire, tel que la réponse le cite.",
      "type": [
        "string",
        "null"
      ]
    },
    "hasBareme": {
      "description": "true quand Miramo tient le barème du territoire : lookup_reference_rent donne alors le loyer de référence. Null hors encadrement.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "isStale": {
      "type": "boolean",
      "description": "true quand le barème que tient Miramo est plus ancien que l'arrêté en vigueur : ses loyers sont un ordre de grandeur."
    },
    "arrete": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "reference": {
              "type": "string",
              "description": "Référence de l'arrêté préfectoral."
            },
            "inForceSince": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Premier jour où il s'applique."
            },
            "endsOn": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Dernier jour où il s'applique ; null quand la source n'en donne pas."
            }
          },
          "required": [
            "reference",
            "inForceSince",
            "endsOn"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "L'arrêté en vigueur aujourd'hui sur le territoire ; null quand Miramo n'en a pas ou hors encadrement."
    },
    "dataCheckedOn": {
      "anyOf": [
        {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
        },
        {
          "type": "null"
        }
      ],
      "description": "Jour où Miramo a vérifié l'arrêté du territoire, ou, hors encadrement, la liste des territoires encadrés."
    },
    "candidates": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Nom officiel de la commune."
          },
          "inseeCode": {
            "type": "string",
            "description": "Code INSEE de la commune, à ne pas confondre avec le code postal."
          },
          "departmentCode": {
            "type": "string",
            "description": "Département de la commune : 93, 2A, 974."
          },
          "coverage": {
            "type": "string",
            "enum": [
              "full",
              "none",
              "partial"
            ]
          },
          "territory": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "lyon",
                  "paris",
                  "lille",
                  "bordeaux",
                  "grenoble",
                  "montpellier",
                  "pays-basque",
                  "est-ensemble",
                  "plaine-commune"
                ]
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "name",
          "inseeCode",
          "departmentCode",
          "coverage",
          "territory"
        ],
        "additionalProperties": false
      },
      "description": "Avec several_communes, les communes de ce nom et leur encadrement ; vide sinon."
    },
    "miramoUrl": {
      "type": "string",
      "format": "uri",
      "description": "L'outil de miramo.fr qui répond à la même question : à présenter tel quel."
    }
  },
  "required": [
    "status",
    "commune",
    "coverage",
    "territory",
    "territoryName",
    "hasBareme",
    "isStale",
    "arrete",
    "dataCheckedOn",
    "candidates",
    "miramoUrl"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢check_airport_noise_zone(address)

Dit si un logement est dans une zone d'un plan d'exposition au bruit d'un aéroport, et laquelle (de A, la plus exposée, à D), avec ce que ça change pour le bail : dans une zone, il faut joindre un diagnostic bruit. Donne l'adresse complète du logement. Miramo lit les plans publiés par l'aviation civile à ce point. Quand Miramo ne peut pas trancher (trop près de la limite d'une zone, plans qui ne répondent pas, territoire sans plan), la réponse le dit et dit où vérifier. La réponse cite les plans et le jour où Miramo les a lus : cite-les.

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "minLength": 3,
      "maxLength": 200,
      "description": "Adresse complète du logement : numéro, rue, code postal et ville, par exemple « 12 rue Brulée 95190 Goussainville ». Miramo la place avec la Base Adresse Nationale, puis lit les plans d'exposition au bruit à ce point ; une adresse qu'elle ne place pas sur un bâtiment est renvoyée avec le statut address_not_found."
    }
  },
  "required": [
    "address"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "inside",
        "outside",
        "out_of_coverage",
        "could_not_check",
        "address_not_found"
      ],
      "description": "inside : le logement est dans une zone d'un plan d'exposition au bruit. outside : hors de toute zone. out_of_coverage : l'aviation civile ne publie pas de plan pour ce territoire, Miramo ne peut pas répondre. could_not_check : Miramo n'a pas pu trancher, voir reason. address_not_found : adresse non placée ; demande une adresse plus complète."
    },
    "address": {
      "description": "L'adresse retenue par la Base Adresse Nationale ; null quand elle n'est pas placée.",
      "type": [
        "string",
        "null"
      ]
    },
    "zone": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "A",
            "B",
            "C",
            "D"
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Zone du plan, de A (la plus exposée au bruit des avions) à D (la moins exposée) ; null hors zone ou sans réponse."
    },
    "plan": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "airportName": {
              "type": "string",
              "description": "Nom de l'aéroport, tel que l'aviation civile l'écrit."
            },
            "icaoCode": {
              "type": "string",
              "description": "Code OACI de l'aéroport : LFPG."
            },
            "arreteOn": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Jour de l'arrêté qui a approuvé le plan, quand il est publié."
            },
            "arreteUrl": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uri"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Le plan publié, quand il est en ligne."
            }
          },
          "required": [
            "airportName",
            "icaoCode",
            "arreteOn",
            "arreteUrl"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "Le plan qui dessine la zone ; null hors zone ou sans réponse."
    },
    "isNoiseDiagnosticRequired": {
      "description": "true dans une zone, quelle qu'elle soit : il faut joindre un diagnostic bruit au bail. false hors zone. Null quand Miramo ne peut pas répondre.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "reason": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "near_boundary",
            "service_unavailable"
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Avec could_not_check : near_boundary, le logement est trop près de la limite d'une zone ; service_unavailable, les plans n'ont pas répondu à temps, réessaie. Null sinon."
    },
    "source": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Les plans que lit Miramo."
        },
        "checkedOn": {
          "anyOf": [
            {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
            },
            {
              "type": "null"
            }
          ],
          "description": "Jour où Miramo a lu les plans ; null quand ils ne l'ont pas été."
        }
      },
      "required": [
        "name",
        "checkedOn"
      ],
      "additionalProperties": false,
      "description": "Les plans officiels que lit Miramo, et le jour de la lecture."
    },
    "miramoUrl": {
      "type": "string",
      "format": "uri",
      "description": "Le générateur de bail de miramo.fr, qui lit ces plans à l'adresse : à présenter tel quel."
    }
  },
  "required": [
    "status",
    "address",
    "zone",
    "plan",
    "isNoiseDiagnosticRequired",
    "reason",
    "source",
    "miramoUrl"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢check_abc_zone(address, commune, inseeCode)

Donne la zone ABC d'une commune française (A bis, A, B1, B2 ou C) et ce qu'elle change pour un investissement : Loc'Avantages et les plafonds de loyer de la commune, le logement locatif intermédiaire (LLI), le PTZ, la fin du Pinel. Donne le nom de la commune, son code INSEE ou l'adresse du logement. Quand plusieurs communes portent le nom donné, la réponse les liste avec leur zone : demande laquelle à la personne. La réponse cite la liste officielle des communes et le jour où Miramo l'a relevée : cite-les.

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "description": "Adresse du logement : numéro, rue, code postal et ville, par exemple « 30 rue de Paris 93100 Montreuil ». Miramo la place avec la Base Adresse Nationale. Passe aussi commune : si l'adresse est placée dans une autre commune, la commune donnée l'emporte. Quand la personne ne donne que sa ville, passe commune seule.",
      "type": "string",
      "minLength": 3,
      "maxLength": 200
    },
    "commune": {
      "description": "Nom de la commune. Quand plusieurs communes portent ce nom, ajoute le code postal ou le département entre parenthèses : « Montreuil 93100 » ou « Montreuil (93) ». Avec une adresse, sert à la vérifier, et de repli si elle n'est pas trouvée.",
      "type": "string",
      "minLength": 2,
      "maxLength": 100
    },
    "inseeCode": {
      "description": "Code INSEE de la commune, cinq caractères (93048 pour Montreuil), à ne pas confondre avec le code postal. Vérifié avec commune et address quand elles sont données : un code qui ne correspond pas à la commune nommée ou à l'adresse placée est écarté.",
      "type": "string",
      "pattern": "^(\\d{5}|2[AB]\\d{3})$"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "several_communes",
        "commune_not_found",
        "address_not_found"
      ],
      "description": "found : commune trouvée. several_communes : plusieurs communes portent ce nom, voir candidates ; demande laquelle. commune_not_found : aucune commune de ce nom ou de ce code INSEE dans le zonage. address_not_found : adresse non placée ; demande une adresse plus complète ou la commune."
    },
    "commune": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "description": "Nom officiel de la commune."
            },
            "inseeCode": {
              "type": "string",
              "description": "Code INSEE de la commune, à ne pas confondre avec le code postal."
            },
            "departmentCode": {
              "type": "string",
              "description": "Département de la commune : 93, 2A, 974."
            }
          },
          "required": [
            "name",
            "inseeCode",
            "departmentCode"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "La commune retenue ; null sans commune unique."
    },
    "zone": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "A",
            "C",
            "B1",
            "B2",
            "Abis"
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Zone ABC de la commune, de la plus tendue à la moins tendue : Abis (A bis), A, B1, B2, C. Null sans commune unique."
    },
    "isLliEligible": {
      "description": "true en zone A bis, A et B1 : le logement locatif intermédiaire (LLI) y est ouvert aux investisseurs personnes morales.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "isPtzExistingWithWorksEligible": {
      "description": "true en zone B2 et C : le PTZ y finance aussi l'ancien avec travaux. Le neuf est finançable dans toutes les zones.",
      "type": [
        "boolean",
        "null"
      ]
    },
    "locAvantagesCeilings": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "loc1": {
              "type": "number",
              "exclusiveMinimum": 0,
              "description": "Plafond Loc1 (loyer intermédiaire)."
            },
            "loc2": {
              "type": "number",
              "exclusiveMinimum": 0,
              "description": "Plafond Loc2 (loyer social)."
            },
            "loc3": {
              "type": "number",
              "exclusiveMinimum": 0,
              "description": "Plafond Loc3 (loyer très social)."
            },
            "unit": {
              "type": "string",
              "const": "EUR/m²/month"
            }
          },
          "required": [
            "loc1",
            "loc2",
            "loc3",
            "unit"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "Plafonds de loyer Loc'Avantages de la commune, en euros par m² et par mois hors charges ; null sans commune unique, et à Paris, Lyon et Marseille, où ils sont fixés par arrondissement."
    },
    "candidates": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Nom officiel de la commune."
          },
          "inseeCode": {
            "type": "string",
            "description": "Code INSEE de la commune, à ne pas confondre avec le code postal."
          },
          "departmentCode": {
            "type": "string",
            "description": "Département de la commune : 93, 2A, 974."
          },
          "zone": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "A",
                  "C",
                  "B1",
                  "B2",
                  "Abis"
                ]
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "name",
          "inseeCode",
          "departmentCode",
          "zone"
        ],
        "additionalProperties": false
      },
      "description": "Avec several_communes, les communes de ce nom et leur zone ; vide sinon."
    },
    "source": {
      "type": "object",
      "properties": {
        "list": {
          "type": "string",
          "description": "La colonne de zonage de la liste officielle, telle quelle : elle dit depuis quand le zonage est en vigueur."
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "Le fichier officiel publié sur data.gouv.fr."
        },
        "capturedOn": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
          "description": "Jour où Miramo a relevé la liste."
        }
      },
      "required": [
        "list",
        "url",
        "capturedOn"
      ],
      "additionalProperties": false,
      "description": "La liste officielle des communes selon le zonage ABC que lit Miramo, et le jour où Miramo l'a relevée."
    },
    "miramoUrl": {
      "type": "string",
      "format": "uri",
      "description": "L'outil de miramo.fr qui répond à la même question : à présenter tel quel."
    }
  },
  "required": [
    "status",
    "commune",
    "zone",
    "isLliEligible",
    "isPtzExistingWithWorksEligible",
    "locAvantagesCeilings",
    "candidates",
    "source",
    "miramoUrl"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools