french-rental-compliance
Was dieses MCP kann
Provides sourced French rental, home-employment, and France-Switzerland cross-border calculators, compliance checks, and rent-receipt generation.
Tools
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['party', 'end_reason', 'start_date'], 'properties': {'party': {'enum': ['employer', 'employee'], 'type': 'string', 'description': "Who is asking: 'employer' (particulier employeur) or 'employee' (salarié / assistant maternel). Wording only — the figures are identical for both."}, 'sent_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'ISO date the ending letter was SENT (registered post) or handed over. The notice tier is set by the seniority on that day (CCN art. 162.1 / 120); for faute grave/lourde and unfitness the contract ends on it (art. 64.3 / 64.4). When omitted the tier is taken at the first presentation and notice.tierDependsOnSentDate says whether a threshold lies in the 7 days before it.'}, 'as_of_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Seniority reference date when the letter has not been sent yet (planning). Ignored when notification_date is given.'}, 'end_reason': {'enum': ['employer_termination', 'resignation', 'mutual_termination', 'unfitness', 'approval_withdrawn'], 'type': 'string', 'description': "Closed category matching the letter: 'employer_termination' (licenciement / retrait d'enfant), 'resignation' (démission), 'mutual_termination' (rupture conventionnelle — not available for assistants maternels), 'unfitness' (inaptitude, CCN art. 161.1.3 / 119.5: no notice; needs unfitness_origin and unfitness_opinion_date), 'approval_withdrawn' (assistant maternel only, art. 119.3: approval suspended, changed or withdrawn; needs approval_decision and approval_notified_date)."}, 'start_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Contract start (ISO).'}, 'entretien_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Home employee dismissal / unfitness: the day the preliminary interview was held — the notification window (4th–30th jour ouvrable, art. 161.1.1.1) is computed from it.'}, 'agreed_end_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Rupture conventionnelle only: the end date the parties agreed — the minimum indemnity (art. 161.3 → 163.1) is computed with the seniority reached on that day.'}, 'am_monthly_gross': {'type': 'number', 'minimum': 0, 'description': "Assistant maternel: monthly gross (mensualisation), EXCLUDING indemnités d'entretien, repas, kilométriques."}, 'unfitness_origin': {'enum': ['occupational', 'non_occupational'], 'type': 'string', 'description': "Unfitness only: 'occupational' (work accident or occupational disease — the indemnity is doubled, art. 161.1.3 / 2/80 art. 119.5) or 'non_occupational'."}, 'approval_decision': {'enum': ['suspension', 'modification', 'retrait'], 'type': 'string', 'description': "Approval ending only (assistant maternel): the conseil départemental's decision."}, 'notification_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'ISO date of the FIRST PRESENTATION (or handover) of the letter that ends the contract — the notice runs from it. For a rupture conventionnelle: the day both parties sign the OFFICIAL form (the withdrawal period runs from it). Omit for durations only.'}, 'serious_misconduct': {'type': 'boolean', 'description': 'The letter states faute grave or faute lourde (a category chosen by the user — the tool does not assess it). Removes the notice and the indemnity by rule.'}, 'am_total_gross_paid': {'type': 'number', 'minimum': 0, 'description': 'Assistant maternel: optional total gross salaries paid since the start (art. 121.1 base). Defaults to mensualisation × complete months.'}, 'approval_notified_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Approval ending only: the day the conseil départemental notified the decision — the contract ends on it (art. 119.3).'}, 'unfitness_opinion_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': "Unfitness only: the date of the occupational physician's final opinion; the rupture takes place within one month of it."}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['deposit', 'rent_hors_charges', 'key_return_date', 'edl_outcome'], 'properties': {'damages': {'type': 'array', 'items': {'type': 'object', 'required': ['item', 'cost'], 'properties': {'cost': {'type': 'number', 'maximum': 1000000, 'minimum': 0, 'description': 'Justified repair cost (quote or invoice), €.'}, 'item': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'What is damaged / repaired (plain words).'}, 'age_years': {'type': 'number', 'maximum': 80, 'minimum': 0, 'description': 'Age of the element in years (installed or last renewed) — 0 for a new element. REQUIRED when a grille applies to the line (grille_key, lifespan_years or annual_rate_pct): the chargeable share is computed from it and it is never assumed.'}, 'grille_key': {'enum': ['peinture', 'papier_peint', 'moquette', 'sol_souple', 'parquet_vitrification', 'robinetterie', 'chauffe_eau', 'electromenager', 'volets_stores'], 'type': 'string', 'description': 'Category in the grille (peinture, papier_peint, moquette, sol_souple, parquet_vitrification, robinetterie, chauffe_eau, electromenager, volets_stores). Omit for an element outside the grille — its full cost then stays chargeable.'}, 'residual_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Lease-annexed grille: residual share in % (default 0).'}, 'lifespan_years': {'type': 'number', 'maximum': 60, 'minimum': 1, 'description': 'Lease-annexed grille: theoretical lifespan of the element (overrides the category).'}, 'annual_rate_pct': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Lease-annexed grille: annual abatement in % (omit for a linear abatement over the lifespan).'}, 'franchise_years': {'type': 'number', 'maximum': 20, 'minimum': 0, 'description': 'Lease-annexed grille: franchise in years.'}}}, 'maxItems': 30, 'description': 'Damage lines to apportion. Omit for a full restitution.'}, 'deposit': {'type': 'number', 'maximum': 1000000, 'minimum': 0, 'description': 'Deposit paid at move-in (€).'}, 'lease_type': {'enum': ['vide', 'meuble'], 'type': 'string', 'description': "'vide' unfurnished (deposit cap 1 month) or 'meuble' furnished (cap 2 months). Never presumed: omitted, no cap is computed."}, 'copropriete': {'type': 'boolean', 'description': "true when the dwelling is in an immeuble collectif (a collective building, co-owned or not): the landlord may keep a duly justified provision of at most 20 % of the deposit until the building's yearly accounts (art. 22, al. 5)."}, 'edl_outcome': {'enum': ['identical', 'differences'], 'type': 'string', 'description': "'identical' when the exit état des lieux matches the entry one (1-month deadline); 'differences' otherwise (2 months)."}, 'perspective': {'enum': ['landlord', 'tenant'], 'type': 'string', 'description': 'Who is asking — changes only the next_steps wording, never the figures.'}, 'apply_provision': {'type': 'boolean', 'description': 'true to deduct provision_amount in the figures; false to leave it out. Without provision_amount nothing can be deducted: the tool asks for the amount.'}, 'key_return_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Date the keys were handed back (remise des clés), ISO date — the deadline runs from this day.'}, 'provision_amount': {'type': 'number', 'maximum': 1000000, 'minimum': 0, 'description': "Immeuble collectif only: the provision the landlord keeps, € — the landlord's own justified amount, at most 20 % of the deposit. Never assumed: omitted, no provision is deducted and the result only states the maximum."}, 'restitution_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Date the deposit was / will be returned (ISO) — the penalty is computed against it. Omitted, the figures are computed as of today (date in France) and the result says the date was assumed (as_of.assumed).'}, 'rent_hors_charges': {'type': 'number', 'maximum': 1000000, 'minimum': 0, 'description': 'Monthly rent en principal, excluding charges (€).'}, 'tenant_gave_address': {'type': 'boolean', 'description': 'false when the tenant never gave the address of the new home and the delay results from it — the late penalty is then not due (art. 22, al. 7). Defaults to true.'}, 'provision_justification': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': "What justifies the provision (e.g. 'arrêté provisoire des comptes du 15/09/2026')."}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['party', 'end_reason', 'start_date', 'regime'], 'properties': {'party': {'enum': ['employer', 'employee'], 'type': 'string', 'description': "Who is asking: 'employer' (particulier employeur) or 'employee' (salarié / assistant maternel). Wording only — the figures are identical for both."}, 'regime': {'enum': ['home_employee', 'garde_domicile', 'assistant_maternel'], 'type': 'string', 'description': "'home_employee' (salarié du particulier employeur: cleaner, carer, housekeeper…), 'garde_domicile' (child care at the family's home — same rules as home_employee), 'assistant_maternel' (childminder at her own home, agréée — or use calculate_assistant_maternel_end_of_contract)."}, 'sent_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'ISO date the ending letter was SENT (registered post) or handed over. The notice tier is set by the seniority on that day (CCN art. 162.1 / 120); for faute grave/lourde and unfitness the contract ends on it (art. 64.3 / 64.4). When omitted the tier is taken at the first presentation and notice.tierDependsOnSentDate says whether a threshold lies in the 7 days before it.'}, 'as_of_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Seniority reference date when the letter has not been sent yet (planning). Ignored when notification_date is given.'}, 'end_reason': {'enum': ['employer_termination', 'resignation', 'mutual_termination', 'unfitness', 'approval_withdrawn'], 'type': 'string', 'description': "Closed category matching the letter: 'employer_termination' (licenciement / retrait d'enfant), 'resignation' (démission), 'mutual_termination' (rupture conventionnelle — not available for assistants maternels), 'unfitness' (inaptitude, CCN art. 161.1.3 / 119.5: no notice; needs unfitness_origin and unfitness_opinion_date), 'approval_withdrawn' (assistant maternel only, art. 119.3: approval suspended, changed or withdrawn; needs approval_decision and approval_notified_date)."}, 'start_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Contract start (ISO).'}, 'hourly_gross': {'type': 'number', 'maximum': 500, 'minimum': 0, 'description': 'Gross hourly rate in € (home employee / garde à domicile).'}, 'weekly_hours': {'type': 'number', 'maximum': 80, 'minimum': 0, 'description': 'Weekly hours (mensualisation = hourly × hours × 52 / 12).'}, 'entretien_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Home employee dismissal / unfitness: the day the preliminary interview was held — the notification window (4th–30th jour ouvrable, art. 161.1.1.1) is computed from it.'}, 'agreed_end_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Rupture conventionnelle only: the end date the parties agreed — the minimum indemnity (art. 161.3 → 163.1) is computed with the seniority reached on that day.'}, 'am_monthly_gross': {'type': 'number', 'minimum': 0, 'description': "Assistant maternel: monthly gross (mensualisation), EXCLUDING indemnités d'entretien, repas, kilométriques."}, 'convocation_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': "Employer termination only: first presentation of the convocation à l'entretien préalable → earliest entretien date (CCN art. 161.1.1.1)."}, 'unfitness_origin': {'enum': ['occupational', 'non_occupational'], 'type': 'string', 'description': "Unfitness only: 'occupational' (work accident or occupational disease — the indemnity is doubled, art. 161.1.3 / 2/80 art. 119.5) or 'non_occupational'."}, 'approval_decision': {'enum': ['suspension', 'modification', 'retrait'], 'type': 'string', 'description': "Approval ending only (assistant maternel): the conseil départemental's decision."}, 'notification_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'ISO date of the FIRST PRESENTATION (or handover) of the letter that ends the contract — the notice runs from it. For a rupture conventionnelle: the day both parties sign the OFFICIAL form (the withdrawal period runs from it). Omit for durations only.'}, 'avg_3_months_gross': {'type': 'number', 'minimum': 0, 'description': 'Optional — average gross monthly pay over the last 3 months (the more favourable average is used).'}, 'serious_misconduct': {'type': 'boolean', 'description': 'The letter states faute grave or faute lourde (a category chosen by the user — the tool does not assess it). Removes the notice and the indemnity by rule.'}, 'am_total_gross_paid': {'type': 'number', 'minimum': 0, 'description': 'Assistant maternel: optional total gross salaries paid since the start (art. 121.1 base). Defaults to mensualisation × complete months.'}, 'avg_12_months_gross': {'type': 'number', 'minimum': 0, 'description': 'Optional — average gross monthly pay over the last 12 months (art. 163.1 reference).'}, 'approval_notified_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Approval ending only: the day the conseil départemental notified the decision — the contract ends on it (art. 119.3).'}, 'unfitness_opinion_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': "Unfitness only: the date of the occupational physician's final opinion; the rupture takes place within one month of it."}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['gross_chf_annual', 'age', 'canton'], 'properties': {'age': {'type': 'integer', 'maximum': 80, 'minimum': 16, 'description': 'Employee age (affects LPP rate).'}, 'canton': {'enum': ['GE', 'VD', 'JU', 'NE', 'BS', 'VS'], 'type': 'string', 'description': 'Swiss border canton (GE, VD, JU, NE, BS, VS).'}, 'gross_chf_annual': {'type': 'number', 'maximum': 1000000, 'minimum': 1000, 'description': 'Gross annual salary in CHF.'}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['current_rent', 'reference_quarter'], 'properties': {'dpe_class': {'enum': ['A', 'B', 'C', 'D', 'E', 'F', 'G'], 'type': 'string', 'description': "Dwelling's DPE class, if known — in a class F or G dwelling the revision cannot be applied (art. 17-1, III)."}, 'current_rent': {'type': 'number', 'description': 'Current monthly rent excluding charges (hors charges), in euros.', 'exclusiveMinimum': 0}, 'revision_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Date the revision takes effect, as an ISO date (e.g. 2026-09-01) — normally the lease anniversary; accept a natural date from the user and format it yourself. When given, the reference quarter is taken in THIS year; if reference_quarter names a different year, the result carries a warning and this date wins.'}, 'reference_quarter': {'type': 'string', 'maxLength': 20, 'minLength': 2, 'description': "The IRL reference quarter OF THE YEAR OF THE REVISION (e.g. '2026-T2' for a revision in 2026). The lease usually names the quarter only ('T2', '2e trimestre') — infer the year from the revision date, or pass revision_date and give just the quarter here. Accepts '2026-T2', 'T2 2026', 'Q2 2026', or 'T2' when revision_date is provided. Never the quarter of the previous year: the tool itself divides by the same quarter one year earlier."}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['telework_days_per_week'], 'properties': {'as_of_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'YYYY-MM-DD reference date for the option window (default: today) — makes the answer reproducible.'}, 'days_per_week': {'type': 'number', 'maximum': 7, 'minimum': 1, 'description': 'Contractual working days per week (1–7). Default 5.'}, 'mission_days_per_year': {'type': 'integer', 'maximum': 60, 'minimum': 0, 'description': 'Temporary mission days per year in France or a third country — only the first 10 count inside the telework allowance.'}, 'swiss_employment_start': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': "YYYY-MM-DD the Swiss employment began — adds the 3-month LAMal/CMU droit d'option window."}, 'telework_days_per_week': {'type': 'number', 'maximum': 7, 'minimum': 0, 'description': 'Days per week worked from home in France (fractions allowed, e.g. 1.5).'}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['lease_type'], 'properties': {'commune': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': "Commune name, e.g. 'Lyon'. Used when insee_code is not provided."}, 'ground_id': {'enum': ['premier_emploi', 'mutation', 'perte_emploi', 'nouvel_emploi', 'sante', 'rsa_aah', 'logement_social', 'violences'], 'type': 'string', 'description': 'Statutory ground for the reduced 1-month notice on an unfurnished lease (art. 15 I).'}, 'insee_code': {'type': 'string', 'pattern': '^[0-9][0-9ABab][0-9]{3}$', 'description': 'INSEE commune code (5 chars, e.g. 75056 for Paris, 2A004 for Ajaccio). Preferred when known — skips name resolution.'}, 'lease_type': {'enum': ['vide', 'meuble'], 'type': 'string', 'description': "'vide' = unfurnished, 'meuble' = furnished"}, 'code_postal': {'type': 'string', 'pattern': '^[0-9]{5}$', 'description': '5-digit postal code — disambiguates homonym communes.'}, 'zone_tendue': {'type': 'boolean', 'description': 'Explicit zone-tendue (first list) flag if already known — otherwise resolved from insee_code/commune.'}, 'reception_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'ISO date the LANDLORD RECEIVES the notice (LRAR reception, remise en main propre, or acte de commissaire) — never the sending date.'}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dpe_class'], 'properties': {'dpe_class': {'enum': ['A', 'B', 'C', 'D', 'E', 'F', 'G'], 'type': 'string', 'description': "Energy class from the dwelling's DPE."}, 'dpe_issue_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'ISO issue date of the DPE — enables the validity check.'}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['swiss_income', 'total_income'], 'properties': {'swiss_income': {'type': 'number', 'maximum': 100000000, 'minimum': 0, 'description': 'Income taxable in Switzerland (same currency as total_income).'}, 'total_income': {'type': 'number', 'maximum': 100000000, 'description': 'Total worldwide household income (same currency).', 'exclusiveMinimum': 0}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'commune': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': "Commune name, e.g. 'Lyon'. Used when insee_code is not provided."}, 'insee_code': {'type': 'string', 'pattern': '^[0-9][0-9ABab][0-9]{3}$', 'description': 'INSEE commune code (5 chars, e.g. 75056 for Paris, 2A004 for Ajaccio). Preferred when known — skips name resolution.'}, 'code_postal': {'type': 'string', 'pattern': '^[0-9]{5}$', 'description': '5-digit postal code — disambiguates homonym communes.'}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['canton', 'children'], 'properties': {'canton': {'enum': ['GE', 'VD', 'JU', 'NE', 'BS', 'VS'], 'type': 'string', 'description': 'Swiss border canton (GE, VD, JU, NE, BS, VS).'}, 'children': {'type': 'array', 'items': {'type': 'object', 'required': ['age'], 'properties': {'age': {'type': 'integer', 'maximum': 30, 'minimum': 0, 'description': "Child's age."}, 'in_training': {'type': 'boolean', 'description': 'In education/training (extends eligibility).'}}}, 'maxItems': 10, 'minItems': 1, 'description': 'The children (at least one).'}, 'spouse_works_in_france': {'type': 'boolean', 'description': 'Does the spouse work in France? (triggers the EU differential).'}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['salary_chf', 'age', 'canton'], 'properties': {'age': {'type': 'integer', 'maximum': 80, 'minimum': 16, 'description': "Worker's age."}, 'canton': {'enum': ['GE', 'VD', 'JU', 'NE', 'BS', 'VS'], 'type': 'string', 'description': 'Swiss border canton (GE, VD, JU, NE, BS, VS).'}, 'salary_chf': {'type': 'number', 'maximum': 2000000, 'minimum': 0, 'description': 'Annual Swiss salary in CHF.'}, 'children_ages': {'type': 'array', 'items': {'type': 'integer', 'maximum': 30, 'minimum': 0}, 'maxItems': 10, 'description': 'Ages of dependants (optional) — priced by band (≤18 / 19-25 / 26+).'}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['landlordName', 'landlordAddress', 'tenantName', 'propertyAddress', 'periodFrom', 'periodTo', 'paymentDate', 'rentAmount', 'chargesAmount'], 'properties': {'locale': {'enum': ['en', 'fr'], 'type': 'string', 'description': 'Filename/interface language only — the document is always issued in French (required for validity). Default fr.'}, 'issuedAt': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'City where the receipt is issued, printed « Fait à … ». Ask the landlord — it is never taken from an address. Omitted, the mention is blank. The date next to it is the day of issue (today, date in France).'}, 'periodTo': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Rental period end (ISO date). The receipt month is derived from this date.'}, 'periodFrom': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Rental period start (ISO date, e.g. 2026-08-01).'}, 'rentAmount': {'type': 'string', 'pattern': '^[0-9]+([.,][0-9]{1,2})?$', 'description': "Rent RECEIVED, excluding charges, in euros, as a string (e.g. '850' or '850.50'). Above 0: a receipt of nothing is refused."}, 'tenantName': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': "Tenant's full name (locataire) as it must appear on the receipt."}, 'paymentDate': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Date the landlord RECEIVED the payment (ISO date).'}, 'landlordName': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': "Landlord's full name, or the company's name (bailleur). With an account, a company is designated from the landlord profile — « (société) », SIRET — when this name is the profile's; without one, write the designation here."}, 'chargesAmount': {'type': 'string', 'pattern': '^[0-9]+([.,][0-9]{1,2})?$', 'description': "Charges (provisions/forfait), in euros, as a string ('0' if none)."}, 'paymentMethod': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': "Payment method as the landlord states it (e.g. 'Virement bancaire', 'Chèque'), printed after « Mode de paiement ». NO default: omitted, the mention is blank. Never guess it."}, 'includeEnglish': {'type': 'boolean', 'description': 'Append a non-binding English reference translation as the last page. The legal document itself stays French.'}, 'landlordAddress': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': "Landlord's address."}, 'propertyAddress': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Address of the rented dwelling.'}, 'acknowledge_incomplete': {'type': 'boolean', 'description': "Set ONLY after the tool has returned status:'needs_input' — with blank_mentions, the mentions the document would print blank — you have shown the landlord that list, and the landlord has explicitly chosen to generate the document with those mentions left blank, to complete them by hand before signing or sending. Never set this on a first call. It never waives a refusal: a missing mandatory input, an unlawful value or an input that would not be printed stays refused."}}}
Letzte Tool-Änderungen
Ähnliche MCP-Server
OpenLMNP
Manages French LMNP furnished-rental accounting, including income, expenses, depreciation, loans, VAT, fiscal calculations, FEC f…
Service Public France
Searches and retrieves French public-service information, legal texts, administrative guidance, property transactions, local data…
kolmo-mcp-server
Provides Washington construction permit guidance, fee estimates, contractor license checks, property-related activity, remodeling…
Subastech — subastas judiciales de inmuebles (BOE)
Searches and analyzes Spanish BOE judicial real-estate auctions, with property details, viability reports, alerts, market statist…
engineering
Performs built-environment engineering calculations and compliance assessments covering energy, carbon, BIM, cybersecurity, struc…
A-du: ADU rentals, plans and rules
Searches ADU rentals, plans, services, and managers while providing parcel analysis, permit estimates, city rules, rent estimates…
public-tools
Provides French rental calculations, risk and rent-control checks, lease creation and signing, and generation of rental documents.
Bucky
Evaluates zoning, parcels, permitted uses, building envelopes, and development feasibility for addresses in Canada and the United…