Koskamo

Miramo MCP

A public, read-only MCP server operated by Miramo that provides French rental law data, including reference rent calculations, lease draft preparation, and checks for tense zones, rent control perimeters, and airport noise zones. It requires no authentication and cites official sources for every response.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Miramo MCP logo, by MiramoVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Miramo
MCP endpoint (Streamable HTTP)
https://mcp.miramo.fr/mcp
Vendor documentation

What you can do with it

  • Calculate reference rent limits for a specific address and property type
  • Generate a draft lease agreement link for a rental property
  • Check if a commune is in a tense zone and its legal implications
  • Verify if rent is controlled in a specific area

Source and maintenance

Vendor evidenceRegistry 0.1.0

Protocol and capabilities

Server
miramolabs-mcp-public 0.1.0
MCP protocol
2025-06-18
Tools
6 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
2 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "prompts": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Miramo répond aux locataires comme aux propriétaires sur la location de logements en France, avec les chiffres et les textes officiels que Miramo tient à jour. - Chaque réponse nomme sa source (arrêté, loi, décret, liste officielle) et ses dates : entrée en vigueur, fin quand elle existe, vérification des données. Cite-les à la personne. - Pour situer un logement, passe l'adresse et la commune quand la personne les donne, la commune seule quand elle ne donne que sa ville. Pour un nom porté par plusieurs communes, ajoute le code postal ou le département : « Montreuil 93100 ». - Quand une réponse liste plusieurs communes du même nom, demande à la personne laquelle est la sienne. Quand une adresse n'est pas trouvée, demande une adresse plus complète ou le nom de la commune. - Présente chaque lien tel quel et en entier : ne le raccourcis pas, ne le reformule pas, n'en retire aucun paramètre. - Pour un brouillon de bail, ne demande ni le nom, ni l'email, ni le téléphone des personnes : la personne les saisit sur le site. Fais-lui confirmer l'adresse retenue. - Ce serveur lit et n'écrit jamais : il n'envoie, ne signe et n'enregistre rien, et ne touche à aucun compte. Miramo answers tenants and landlords about residential lettings in France, with the official figures and texts Miramo keeps up to date. - Every answer names its source (arrêté, law, decree, official list) and its dates: in force since, end date when there is one, data checked on. Quote them to the person. - To place a home, pass the address and the commune when the person gives them, the commune alone when they only give their town. For a name several communes share, add the postcode or the département: « Montreuil 93100 ». - When an answer lists several communes with the same name, ask the person which one is theirs. When an address is not found, ask for a fuller address or the commune name. - Present every link as is and whole: never shorten or rewrite it, never drop a parameter. - For a lease draft, never ask for the name, email or phone number of anyone: the person types them on the site. Have them confirm the address that was matched. - This server reads and never writes: it sends, signs and stores nothing, and touches no account.

Tools

6 advertised

lookup_reference_rent — Loyer de référence à l'adresse d'un logement
Advertised by the server during the last successful anonymous check.
Advertised read-only

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, la réponse 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é. 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.

lookup_reference_rent input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "address",
    "rooms",
    "furnished",
    "constructionPeriod"
  ],
  "properties": {
    "rooms": {
      "enum": [
        "1",
        "2",
        "3",
        "4+"
      ],
      "type": "string",
      "description": "Nombre de pièces principales : séjour et chambres, sans la cuisine ni la salle de bains. 4+ à partir de quatre."
    },
    "address": {
      "type": "string",
      "maxLength": 200,
      "minLength": 3,
      "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."
    },
    "surface": {
      "type": "number",
      "maximum": 1000,
      "description": "Surface habitable du logement, en m². Facultative : avec elle, la réponse donne le loyer maximum hors charges du logement.",
      "exclusiveMinimum": 0
    },
    "furnished": {
      "type": "boolean",
      "description": "true si le logement est loué meublé, false s'il est loué vide."
    },
    "constructionPeriod": {
      "enum": [
        "before_1946",
        "1946_1970",
        "1971_1990",
        "after_1990",
        "1991_2005",
        "after_2005"
      ],
      "type": "string",
      "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."
    }
  },
  "additionalProperties": false
}
lookup_reference_rent output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "status",
    "territory",
    "sector",
    "referenceRent",
    "referenceRentMax",
    "referenceRentMin",
    "unit",
    "monthlyCap",
    "arrete",
    "dataCheckedOn",
    "isStale",
    "miramoUrl"
  ],
  "properties": {
    "unit": {
      "type": "string",
      "const": "EUR/m²/month",
      "description": "Unité des trois loyers : euros par m² et par mois."
    },
    "arrete": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "reference",
            "inForceSince",
            "endsOn"
          ],
          "properties": {
            "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."
            },
            "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."
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "L'arrêté en vigueur aujourd'hui ; null quand Miramo n'en a pas."
    },
    "sector": {
      "type": [
        "string",
        "null"
      ],
      "description": "Le secteur de l'arrêté où tombe l'adresse : le quartier à Paris, la zone ou la commune ailleurs."
    },
    "status": {
      "enum": [
        "found",
        "arrete_only",
        "not_covered",
        "address_not_found"
      ],
      "type": "string",
      "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 ; une adresse plus complète permet de répondre."
    },
    "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."
    },
    "territory": {
      "anyOf": [
        {
          "enum": [
            "lyon",
            "paris",
            "lille",
            "bordeaux",
            "grenoble",
            "montpellier",
            "pays-basque",
            "est-ensemble",
            "plaine-commune"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Le territoire d'encadrement de l'adresse."
    },
    "monthlyCap": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -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."
    },
    "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."
    },
    "referenceRent": {
      "type": [
        "number",
        "null"
      ],
      "description": "Loyer de référence."
    },
    "referenceRentMax": {
      "type": [
        "number",
        "null"
      ],
      "description": "Loyer de référence majoré : le plafond, hors complément de loyer."
    },
    "referenceRentMin": {
      "type": [
        "number",
        "null"
      ],
      "description": "Loyer de référence minoré."
    }
  },
  "additionalProperties": false
}
lookup_reference_rent annotations
{
  "title": "Loyer de référence à l'adresse d'un logement",
  "readOnlyHint": true,
  "destructiveHint": false
}
prepare_lease_draft — Préparer un bail de location vide
Advertised by the server during the last successful anonymous check.
Advertised read-only

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. Prend 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. Le schéma refuse l'identité, l'email et le téléphone du locataire et du bailleur : la personne les saisit sur le site. Rien n'est enregistré : le brouillon est contenu dans le lien.

prepare_lease_draft input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "rent": {
      "type": "object",
      "properties": {
        "chargesMode": {
          "enum": [
            "provisions",
            "on_receipts",
            "none"
          ],
          "type": "string",
          "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))."
        },
        "chargesAmount": {
          "type": "number",
          "minimum": 0,
          "description": "Montant mensuel des charges, en euros."
        },
        "monthlyRentExcludingCharges": {
          "type": "number",
          "description": "Loyer mensuel hors charges, en euros.",
          "exclusiveMinimum": 0
        }
      },
      "description": "Le loyer et les charges.",
      "additionalProperties": false
    },
    "dates": {
      "type": "object",
      "properties": {
        "startsOn": {
          "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": "Date de début du bail, au format AAAA-MM-JJ."
        },
        "plannedSignatureOn": {
          "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": "Date de signature prévue, au format AAAA-MM-JJ."
        }
      },
      "description": "Les dates du bail.",
      "additionalProperties": false
    },
    "annexes": {
      "type": "array",
      "items": {
        "enum": [
          "dpe",
          "crep",
          "gas_diagnostic",
          "electrical_diagnostic",
          "co_ownership_rules",
          "risk_statement",
          "noise"
        ],
        "type": "string"
      },
      "maxItems": 7,
      "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."
    },
    "property": {
      "type": "object",
      "properties": {
        "address": {
          "type": "string",
          "maxLength": 200,
          "minLength": 3,
          "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."
        },
        "heating": {
          "enum": [
            "collective",
            "individual"
          ],
          "type": "string",
          "description": "Chauffage : collective (Collectif), individual (Individuel)."
        },
        "dpeClass": {
          "enum": [
            "A",
            "B",
            "C",
            "D",
            "E",
            "F",
            "G"
          ],
          "type": "string",
          "description": "Classe énergie du DPE, de A à G."
        },
        "hotWater": {
          "enum": [
            "collective",
            "individual"
          ],
          "type": "string",
          "description": "Eau chaude : collective (Collective), individual (Individuelle)."
        },
        "habitatType": {
          "enum": [
            "collective",
            "individual"
          ],
          "type": "string",
          "description": "Type d'habitat : collective (Immeuble collectif), individual (Immeuble individuel)."
        },
        "itEquipment": {
          "type": "array",
          "items": {
            "enum": [
              "collective_antenna",
              "fibre",
              "box",
              "phone_socket"
            ],
            "type": "string"
          },
          "maxItems": 5,
          "description": "Équipements d'accès à internet : box (Box internet), fibre (Fibre optique), phone_socket (Prise téléphonique), collective_antenna (Antenne collective)."
        },
        "livingAreaSqm": {
          "type": "number",
          "maximum": 1000,
          "description": "Surface habitable du logement, en m².",
          "exclusiveMinimum": 0
        },
        "mainRoomCount": {
          "type": "integer",
          "maximum": 20,
          "minimum": 1,
          "description": "Nombre de pièces principales : séjour et chambres, sans la cuisine ni la salle de bains."
        },
        "ownershipRegime": {
          "enum": [
            "co_ownership",
            "sole_ownership"
          ],
          "type": "string",
          "description": "Régime de l'immeuble : co_ownership (Copropriété), sole_ownership (Monopropriété)."
        },
        "sharedAmenities": {
          "type": "array",
          "items": {
            "enum": [
              "lift",
              "courtyard",
              "bike_room",
              "green_space",
              "laundry_room"
            ],
            "type": "string"
          },
          "maxItems": 5,
          "description": "Équipements communs de l'immeuble : lift (Ascenseur), courtyard (Cour), laundry_room (Laverie), bike_room (Local à vélos), green_space (Espaces verts)."
        },
        "constructionPeriod": {
          "enum": [
            "before_1949",
            "from_1949_to_1974",
            "from_1975_to_1989",
            "from_1989_to_2005",
            "after_2005"
          ],
          "type": "string",
          "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)."
        },
        "privateAccessories": {
          "type": "array",
          "items": {
            "enum": [
              "cellar",
              "garden",
              "balcony",
              "parking",
              "terrace"
            ],
            "type": "string"
          },
          "maxItems": 5,
          "description": "Ce qui est loué avec le logement : cellar (Cave), garden (Jardin), balcony (Balcon), parking (Parking), terrace (Terrasse)."
        },
        "gasInstallationOver15Years": {
          "type": "boolean",
          "description": "Installation intérieure de gaz de plus de 15 ans : elle rend le diagnostic gaz obligatoire. Le champ reste vide quand il n'y a pas de gaz ou que la personne ne sait pas."
        },
        "electricalInstallationOver15Years": {
          "type": "boolean",
          "description": "Installation intérieure d'électricité de plus de 15 ans : elle rend le diagnostic électricité obligatoire."
        }
      },
      "description": "Le logement loué, en location vide (non meublé). Jamais rien sur les personnes.",
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
prepare_lease_draft output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "summary",
    "address",
    "url",
    "droppedFields",
    "status"
  ],
  "properties": {
    "url": {
      "anyOf": [
        {
          "type": "string",
          "format": "uri"
        },
        {
          "type": "null"
        }
      ],
      "description": "Lien vers le générateur de bail de miramo.fr ; le brouillon est contenu dans le lien, après le signe #."
    },
    "status": {
      "enum": [
        "prepared",
        "address_not_found"
      ],
      "type": "string",
      "description": "prepared : le lien est prêt. address_not_found : l'adresse n'a pas été placée, aucun lien ; une adresse plus complète permet de répondre."
    },
    "address": {
      "type": [
        "string",
        "null"
      ],
      "description": "L'adresse que la Base Adresse Nationale a retenue ; elle peut différer de l'adresse donnée."
    },
    "summary": {
      "type": [
        "string",
        "null"
      ],
      "description": "Ce que contient le brouillon préparé, en une phrase."
    },
    "droppedFields": {
      "type": "array",
      "items": {
        "enum": [
          "annexes",
          "dates"
        ],
        "type": "string"
      },
      "description": "Ce que le lien a laissé de côté pour rester court : annexes, puis dates. La personne les indiquera sur le site."
    }
  },
  "additionalProperties": false
}
prepare_lease_draft annotations
{
  "title": "Préparer un bail de location vide",
  "readOnlyHint": true,
  "destructiveHint": false
}
check_tense_zone — Zone tendue d'une commune
Advertised by the server during the last successful anonymous check.
Advertised read-only

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. Prend 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. La réponse cite la liste officielle des communes et sa dernière mise à jour.

check_tense_zone input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "address": {
      "type": "string",
      "maxLength": 200,
      "minLength": 3,
      "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. Avec commune, la commune donnée l'emporte si l'adresse est placée dans une autre commune. Une commune seule suffit, sans adresse."
    },
    "commune": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2,
      "description": "Nom de la commune. Le code postal ou le département entre parenthèses (« Montreuil 93100 », « Montreuil (93) ») départage des communes du même nom. Avec une adresse, la commune sert à la vérifier, et de repli si elle n'est pas trouvée."
    },
    "inseeCode": {
      "type": "string",
      "pattern": "^(\\d{5}|2[AB]\\d{3})$",
      "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é."
    }
  },
  "additionalProperties": false
}
check_tense_zone output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "status",
    "commune",
    "category",
    "unfurnishedLeaseNoticeMonths",
    "isRelettingRentCapped",
    "isVacancyTaxed",
    "candidates",
    "source",
    "miramoUrl"
  ],
  "properties": {
    "source": {
      "type": "object",
      "required": [
        "decree",
        "lastUpdatedBy",
        "lastUpdatedOn"
      ],
      "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."
        }
      },
      "description": "La liste officielle des communes que lit Miramo, et sa dernière mise à jour.",
      "additionalProperties": false
    },
    "status": {
      "enum": [
        "found",
        "several_communes",
        "commune_not_found",
        "address_not_found"
      ],
      "type": "string",
      "description": "found : commune trouvée. several_communes : plusieurs communes portent ce nom, listées dans candidates. commune_not_found : aucune commune de ce nom ou de ce code INSEE. address_not_found : adresse non placée ; une adresse plus complète ou le nom de la commune permet de répondre."
    },
    "commune": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "name",
            "inseeCode",
            "departmentCode"
          ],
          "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."
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "La commune retenue ; null sans commune unique."
    },
    "category": {
      "anyOf": [
        {
          "enum": [
            "1",
            "2",
            "none"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "1 : zone tendue. 2 : zone touristique et tendue. none : hors zone tendue. Null sans commune unique."
    },
    "miramoUrl": {
      "type": "string",
      "format": "uri",
      "description": "L'outil de miramo.fr qui répond à la même question."
    },
    "candidates": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "inseeCode",
          "departmentCode",
          "category"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Nom officiel de la commune."
          },
          "category": {
            "enum": [
              "1",
              "2",
              "none"
            ],
            "type": "string"
          },
          "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."
          }
        },
        "additionalProperties": false
      },
      "description": "Avec several_communes, les communes de ce nom et leur catégorie ; vide sinon."
    },
    "isVacancyTaxed": {
      "type": [
        "boolean",
        "null"
      ],
      "description": "true en catégorie 1 et 2 : un logement vide depuis plus d'un an paie la taxe sur les logements vacants."
    },
    "isRelettingRentCapped": {
      "type": [
        "boolean",
        "null"
      ],
      "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."
    },
    "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."
    }
  },
  "additionalProperties": false
}
check_tense_zone annotations
{
  "title": "Zone tendue d'une commune",
  "readOnlyHint": true,
  "destructiveHint": false
}
check_rent_control_perimeter — Encadrement des loyers à une adresse
Advertised by the server during the last successful anonymous check.
Advertised read-only

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é. Prend 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, lookup_reference_rent donne le loyer de référence d'un logement.

check_rent_control_perimeter input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "address": {
      "type": "string",
      "maxLength": 200,
      "minLength": 3,
      "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. Avec commune, la commune donnée l'emporte si l'adresse est placée dans une autre commune. Une commune seule suffit, sans adresse."
    },
    "commune": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2,
      "description": "Nom de la commune. Le code postal ou le département entre parenthèses (« Montreuil 93100 », « Montreuil (93) ») départage des communes du même nom. Avec une adresse, la commune sert à la vérifier, et de repli si elle n'est pas trouvée."
    },
    "inseeCode": {
      "type": "string",
      "pattern": "^(\\d{5}|2[AB]\\d{3})$",
      "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é."
    }
  },
  "additionalProperties": false
}
check_rent_control_perimeter output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "status",
    "commune",
    "coverage",
    "territory",
    "territoryName",
    "hasBareme",
    "isStale",
    "arrete",
    "dataCheckedOn",
    "candidates",
    "miramoUrl"
  ],
  "properties": {
    "arrete": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "reference",
            "inForceSince",
            "endsOn"
          ],
          "properties": {
            "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."
            },
            "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."
            }
          },
          "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."
    },
    "status": {
      "enum": [
        "found",
        "several_communes",
        "commune_not_found",
        "address_not_found"
      ],
      "type": "string",
      "description": "found : commune trouvée. several_communes : plusieurs communes portent ce nom, listées dans candidates. commune_not_found : aucune commune de ce nom ou de ce code INSEE. address_not_found : adresse non placée ; une adresse plus complète ou le nom de la commune permet de répondre."
    },
    "commune": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "name",
            "inseeCode",
            "departmentCode"
          ],
          "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."
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "La commune retenue ; null sans commune unique."
    },
    "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."
    },
    "coverage": {
      "anyOf": [
        {
          "enum": [
            "full",
            "none",
            "partial"
          ],
          "type": "string"
        },
        {
          "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."
    },
    "hasBareme": {
      "type": [
        "boolean",
        "null"
      ],
      "description": "true quand Miramo tient le barème du territoire : lookup_reference_rent donne alors le loyer de référence. Null hors encadrement."
    },
    "miramoUrl": {
      "type": "string",
      "format": "uri",
      "description": "L'outil de miramo.fr qui répond à la même question."
    },
    "territory": {
      "anyOf": [
        {
          "enum": [
            "lyon",
            "paris",
            "lille",
            "bordeaux",
            "grenoble",
            "montpellier",
            "pays-basque",
            "est-ensemble",
            "plaine-commune"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Le territoire d'encadrement de la commune ; null hors encadrement."
    },
    "candidates": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "inseeCode",
          "departmentCode",
          "coverage",
          "territory"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Nom officiel de la commune."
          },
          "coverage": {
            "enum": [
              "full",
              "none",
              "partial"
            ],
            "type": "string"
          },
          "inseeCode": {
            "type": "string",
            "description": "Code INSEE de la commune, à ne pas confondre avec le code postal."
          },
          "territory": {
            "anyOf": [
              {
                "enum": [
                  "lyon",
                  "paris",
                  "lille",
                  "bordeaux",
                  "grenoble",
                  "montpellier",
                  "pays-basque",
                  "est-ensemble",
                  "plaine-commune"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "departmentCode": {
            "type": "string",
            "description": "Département de la commune : 93, 2A, 974."
          }
        },
        "additionalProperties": false
      },
      "description": "Avec several_communes, les communes de ce nom et leur encadrement ; vide sinon."
    },
    "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."
    },
    "territoryName": {
      "type": [
        "string",
        "null"
      ],
      "description": "Le nom du territoire, tel que la réponse le cite."
    }
  },
  "additionalProperties": false
}
check_rent_control_perimeter annotations
{
  "title": "Encadrement des loyers à une adresse",
  "readOnlyHint": true,
  "destructiveHint": false
}
check_airport_noise_zone — Zone de bruit d'un aéroport
Advertised by the server during the last successful anonymous check.
Advertised read-only

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. Prend 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.

check_airport_noise_zone input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "address"
  ],
  "properties": {
    "address": {
      "type": "string",
      "maxLength": 200,
      "minLength": 3,
      "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."
    }
  },
  "additionalProperties": false
}
check_airport_noise_zone output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "status",
    "address",
    "zone",
    "plan",
    "isNoiseDiagnosticRequired",
    "reason",
    "source",
    "miramoUrl"
  ],
  "properties": {
    "plan": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "airportName",
            "icaoCode",
            "arreteOn",
            "arreteUrl"
          ],
          "properties": {
            "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é."
            },
            "icaoCode": {
              "type": "string",
              "description": "Code OACI de l'aéroport : LFPG."
            },
            "arreteUrl": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uri"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Le plan publié, quand il est en ligne."
            },
            "airportName": {
              "type": "string",
              "description": "Nom de l'aéroport, tel que l'aviation civile l'écrit."
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "Le plan qui dessine la zone ; null hors zone ou sans réponse."
    },
    "zone": {
      "anyOf": [
        {
          "enum": [
            "A",
            "B",
            "C",
            "D"
          ],
          "type": "string"
        },
        {
          "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."
    },
    "reason": {
      "anyOf": [
        {
          "enum": [
            "near_boundary",
            "service_unavailable"
          ],
          "type": "string"
        },
        {
          "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 ; un nouvel appel peut aboutir. Null sinon."
    },
    "source": {
      "type": "object",
      "required": [
        "name",
        "checkedOn"
      ],
      "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é."
        }
      },
      "description": "Les plans officiels que lit Miramo, et le jour de la lecture.",
      "additionalProperties": false
    },
    "status": {
      "enum": [
        "inside",
        "outside",
        "out_of_coverage",
        "could_not_check",
        "address_not_found"
      ],
      "type": "string",
      "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 ; une adresse plus complète permet de répondre."
    },
    "address": {
      "type": [
        "string",
        "null"
      ],
      "description": "L'adresse retenue par la Base Adresse Nationale ; null quand elle n'est pas placée."
    },
    "miramoUrl": {
      "type": "string",
      "format": "uri",
      "description": "Le générateur de bail de miramo.fr, qui lit ces plans à l'adresse."
    },
    "isNoiseDiagnosticRequired": {
      "type": [
        "boolean",
        "null"
      ],
      "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."
    }
  },
  "additionalProperties": false
}
check_airport_noise_zone annotations
{
  "title": "Zone de bruit d'un aéroport",
  "readOnlyHint": true,
  "destructiveHint": false
}
check_abc_zone — Zone ABC d'une commune
Advertised by the server during the last successful anonymous check.
Advertised read-only

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. Prend 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. La réponse cite la liste officielle des communes et le jour où Miramo l'a relevée.

check_abc_zone input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "address": {
      "type": "string",
      "maxLength": 200,
      "minLength": 3,
      "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. Avec commune, la commune donnée l'emporte si l'adresse est placée dans une autre commune. Une commune seule suffit, sans adresse."
    },
    "commune": {
      "type": "string",
      "maxLength": 100,
      "minLength": 2,
      "description": "Nom de la commune. Le code postal ou le département entre parenthèses (« Montreuil 93100 », « Montreuil (93) ») départage des communes du même nom. Avec une adresse, la commune sert à la vérifier, et de repli si elle n'est pas trouvée."
    },
    "inseeCode": {
      "type": "string",
      "pattern": "^(\\d{5}|2[AB]\\d{3})$",
      "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é."
    }
  },
  "additionalProperties": false
}
check_abc_zone output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "status",
    "commune",
    "zone",
    "isLliEligible",
    "isPtzExistingWithWorksEligible",
    "locAvantagesCeilings",
    "candidates",
    "source",
    "miramoUrl"
  ],
  "properties": {
    "zone": {
      "anyOf": [
        {
          "enum": [
            "A",
            "C",
            "B1",
            "B2",
            "Abis"
          ],
          "type": "string"
        },
        {
          "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."
    },
    "source": {
      "type": "object",
      "required": [
        "list",
        "url",
        "capturedOn"
      ],
      "properties": {
        "url": {
          "type": "string",
          "format": "uri",
          "description": "Le fichier officiel publié sur data.gouv.fr."
        },
        "list": {
          "type": "string",
          "description": "La colonne de zonage de la liste officielle, telle quelle : elle dit depuis quand le zonage est en vigueur."
        },
        "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."
        }
      },
      "description": "La liste officielle des communes selon le zonage ABC que lit Miramo, et le jour où Miramo l'a relevée.",
      "additionalProperties": false
    },
    "status": {
      "enum": [
        "found",
        "several_communes",
        "commune_not_found",
        "address_not_found"
      ],
      "type": "string",
      "description": "found : commune trouvée. several_communes : plusieurs communes portent ce nom, listées dans candidates. commune_not_found : aucune commune de ce nom ou de ce code INSEE dans le zonage. address_not_found : adresse non placée ; une adresse plus complète ou le nom de la commune permet de répondre."
    },
    "commune": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "name",
            "inseeCode",
            "departmentCode"
          ],
          "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."
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "La commune retenue ; null sans commune unique."
    },
    "miramoUrl": {
      "type": "string",
      "format": "uri",
      "description": "L'outil de miramo.fr qui répond à la même question."
    },
    "candidates": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "inseeCode",
          "departmentCode",
          "zone"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Nom officiel de la commune."
          },
          "zone": {
            "anyOf": [
              {
                "enum": [
                  "A",
                  "C",
                  "B1",
                  "B2",
                  "Abis"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "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."
          }
        },
        "additionalProperties": false
      },
      "description": "Avec several_communes, les communes de ce nom et leur zone ; vide sinon."
    },
    "isLliEligible": {
      "type": [
        "boolean",
        "null"
      ],
      "description": "true en zone A bis, A et B1 : le logement locatif intermédiaire (LLI) y est ouvert aux investisseurs personnes morales."
    },
    "locAvantagesCeilings": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "loc1",
            "loc2",
            "loc3",
            "unit"
          ],
          "properties": {
            "loc1": {
              "type": "number",
              "description": "Plafond Loc1 (loyer intermédiaire).",
              "exclusiveMinimum": 0
            },
            "loc2": {
              "type": "number",
              "description": "Plafond Loc2 (loyer social).",
              "exclusiveMinimum": 0
            },
            "loc3": {
              "type": "number",
              "description": "Plafond Loc3 (loyer très social).",
              "exclusiveMinimum": 0
            },
            "unit": {
              "type": "string",
              "const": "EUR/m²/month"
            }
          },
          "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."
    },
    "isPtzExistingWithWorksEligible": {
      "type": [
        "boolean",
        "null"
      ],
      "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."
    }
  },
  "additionalProperties": false
}
check_abc_zone annotations
{
  "title": "Zone ABC d'une commune",
  "readOnlyHint": true,
  "destructiveHint": false
}

Prompts

2 advertised

prepare_lease — Préparer un bail

Advertised by the server during the last successful anonymous check.

Un brouillon de bail de location vide, à partir de ce que la personne sait du logement, du loyer et des dates. Il se termine sur miramo.fr : les noms, le PDF et la signature. Le brouillon est contenu dans le lien.

property
Le logement : adresse complète, surface, nombre de pièces, année de construction, chauffage.
rent
Le loyer hors charges et les charges par mois, par exemple 1 200 € et 80 € de charges.
dates
Le début du bail et le jour de signature prévu.
annexes
Les documents joints au bail, par exemple le DPE.
check_rent — Vérifier un loyer

Advertised by the server during the last successful anonymous check.

Le loyer maximum autorisé à l'adresse d'un logement, selon l'arrêté d'encadrement en vigueur aujourd'hui.

address
Adresse complète du logement : numéro, rue, code postal et ville.
rooms
Nombre de pièces principales, séjour et chambres : 1, 2, 3, 4 ou plus.
furnished
Vide ou meublé.
constructionPeriod
Année ou période de construction de l'immeuble, par exemple 1975.
surface
Surface habitable en m², par exemple 45.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1073 ms
95th percentile latency
1073 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1073 ms · metadata changed · 6 tool(s), 2 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http miramo-mcp https://mcp.miramo.fr/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add miramo-mcp --url https://mcp.miramo.fr/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable miramo-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "miramo-mcp": {
      "url": "https://mcp.miramo.fr/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "miramo-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.miramo.fr/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start miramo-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "miramo-mcp": {
      "type": "http",
      "url": "https://mcp.miramo.fr/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http miramo-mcp https://mcp.miramo.fr/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "miramo-mcp": {
      "url": "https://mcp.miramo.fr/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "miramo-mcp": {
      "serverUrl": "https://mcp.miramo.fr/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Miramo MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Miramo MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing