Skip to main content
Glama

Server Details

FR/EN tools for French rental, frontalier & home-employment (CCN 3239) — sourced, dated answers.

Ownership verified
Status
Healthy
Uptime
99.9% over 55 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.1/5.0

Scored across 13 tools

Disambiguation4/5

Most tools target clearly distinct operations (deposit, rent revision, notice, DPE, zone tendue, receipt, plus cross-border topics). The main overlap is calculate_assistant_maternel_end_of_contract vs calculate_home_employment_end_of_contract, which the description admits share the same engine with a pre-set regime, and there is minor conceptual overlap on the F/G rent freeze between calculate_rent_revision and check_dpe_rental_restrictions.

Naming Consistency5/5

Every tool follows a consistent verb_noun snake_case pattern: calculate_*, check_*, compare_*, generate_*. The prefixes map cleanly to operation type (compute vs lookup vs comparison vs document generation), making the surface predictable.

Tool Count5/5

13 tools is well within the sweet spot and each appears to earn its place covering distinct compliance scenarios. No redundant or filler tools are evident.

Completeness4/5

The set covers a solid range of rental lifecycle operations (deposit restitution, rent revision, notice, DPE restrictions, zone tendue, receipt) plus home-employment and cross-border domains. Minor gaps exist — no lease drafting, état des lieux, or dispute/escalation tooling — but core compliance workflows are covered.

Available Tools

13 tools
calculate_assistant_maternel_end_of_contractAssistant maternel (assmat) end of contract — retrait d'enfant, démission, préavis, indemnité (CCN 3239)A
Read-only
Inspect

End of an assistant maternel (assmat) contract with a parent-employer: retrait d'enfant or resignation, notice, indemnity, Pajemploi documents, for the parent or the assistant maternel. · Fin de contrat d'assistant maternel (assmat) avec un parent employeur : retrait d'enfant ou démission, préavis, indemnité de rupture, documents Pajemploi, pour le parent comme pour l'assistant maternel. — Same engine as calculate_home_employment_end_of_contract with regime pre-set to assistant_maternel (socle spécifique): notice by length of care (art. 120: 8 days / 15 days / 1 month, outside the trial period), withdrawal indemnity (art. 121.1: 1/80 of gross salaries excluding entretien/repas/km, from 9 months of care), rupture conventionnelle NOT available (CASF L.423-2), unfitness (art. 119.5) and the approval suspended or withdrawn (art. 119.3), last Pajemploi declaration, 6-month settlement contest window (from the receipt's signature — earliest end shown), documents with who produces and who receives each; départ volontaire à la retraite (art. 63.2.2, notice art. 120; the annex-4 indemnity of art. 121.2 computed on the periods given, PAID BY THE INSURER, not the employer). With no date given the seniority is taken today (Europe/Paris) and the result says so. NOT for a garde d'enfant à domicile (nounou at the family's home) — that is regime garde_domicile on the generic tool. Applies the Convention collective IDCC 3239 (verified on Légifrance 2026). Deterministic formulas — no AI, no assessment of any person or motif.

ParametersJSON Schema
NameRequiredDescriptionDefault
partyYesWho is asking: 'employer' (particulier employeur) or 'employee' (salarié / assistant maternel). Wording only — the figures are identical for both.
sent_dateNoISO 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_dateNoSeniority reference date when the letter has not been sent yet (planning). Ignored when notification_date is given. Defaults to today (Europe/Paris) when no date at all is given, as on the web calculator and the documents.
cdd_reasonNocontract_type 'cdd' only: the motif (C. trav. art. L.1242-2) — 'seasonal' has no end-of-contract indemnity (L.1243-10, 1°).
end_reasonYesClosed category matching the letter: 'cdd_term_end' (a fixed-term contract ending at its term — C. trav. art. L.1243-5 « cesse de plein droit à l'échéance du terme »: no letter, no notice, no rupture indemnity; the end-of-contract indemnity of L.1243-8 except in the cases of L.1243-10; every figure taken at the term; needs contract_type 'cdd' and cdd_end_date; not when the work went on after the term — then a permanent contract, L.1243-11), '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), 'retirement_by_employer' (mise à la retraite, home employee only, art. 161.1.2: the dismissal's notice, art. 162.5; an indemnity whatever the seniority, computed like art. 163.1, art. 163.2 — for an assistant maternel the employer's ending is the withdrawal of the child, blocked with code retirement_by_employer_is_withdrawal_am), 'retirement_departure' (départ volontaire à la retraite, art. 63.2.2: home employee notice art. 162.5, assistant maternel art. 120; the voluntary-retirement indemnity of annex 4 — art. 163.3 / 121.2 — is computed from annex 4 on sector_months / sector_months_last_84 / avg_60_months_gross when given, else on this contract alone, with payer 'insurer' (annex 4, art. 4.2); reason annex4_conditions_not_met when the periods known do not reach 120 months, 60 of them in the last 84).
start_dateYesContract start (ISO).
cdd_end_dateNocontract_type 'cdd' only: the term of the contract with its renewals (the L.1243-2 notice counts on the total length).
contract_typeNo'cdi' (permanent) or 'cdd' (fixed-term). Omitted = the rules of a permanent contract. A CDD ends before its term only in the cases of C. trav. art. L.1243-1 / L.1243-2 (CCN 3239 art. 62): agreement of the parties (no official form, no homologation), faute grave, unfitness (L.1226-4-3 / L.1226-20), the employee's resignation on a CDI hire (notice one day per week of the total length, two weeks at most) — any other ending is answered status 'blocked', code cdd_early_end_not_provided. Judged after its term (cdd_end_date), the relationship still running, the CDD is a CDI (L.1243-11).
sector_monthsNoretirement_departure only: the months of employment in the branch over the whole career, ALL household employers together (CCN 3239 annex 4, art. 2.2: 120 months needed; 1 month of salary from 10 years, 1.5 from 15, 2 from 20, 2.5 from 30). Defaults to this contract's months — a floor.
entretien_dateNoHome 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.
leave_pay_modeNoHome employee: how paid leave is paid — 'on_leave' (when taken) or 'cesu_10pct' (the CESU hourly wage raised by 10 %: « les congés payés sont rémunérés au moment du versement du salaire mensuel », CCN 3239 art. 140.1.2 — then no compensatory paid-leave indemnity at the end). Omitted = unknown: the answer states the rule with its exception.
agreed_end_dateNoRupture 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_grossNoAssistant maternel: monthly gross (mensualisation), EXCLUDING indemnités d'entretien, repas, kilométriques.
unfitness_originNoUnfitness only: 'occupational' (work accident or occupational disease — the indemnity is doubled, art. 161.1.3 / 2/80 art. 119.5) or 'non_occupational'.
approval_decisionNoApproval ending only (assistant maternel): the conseil départemental's decision.
notification_dateNoISO 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). When omitted (with sent_date and as_of_date), the seniority is taken TODAY (Europe/Paris) and the result says so (seniority.as_of_default: 'today') — never zero seniority.
serious_misconductNoThe 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_paidNoAssistant maternel: optional total gross salaries paid since the start (art. 121.1 base). Defaults to mensualisation × complete months.
avg_60_months_grossNoretirement_departure only: the monthly average of the gross salaries of the last 60 calendar months in the branch (annex 4, art. 4.1 takes the most favourable of the 60-, 12- and 3-month averages). The indemnity is PAID BY THE INSURER, not by the employer (art. 4.2).
sector_months_last_84Noretirement_departure only: of those, the months within the 84 months before the end of the contract (annex 4, art. 2.2: 60 needed). Defaults to this contract's.
approval_notified_dateNoApproval ending only: the day the conseil départemental notified the decision — the contract ends on it (art. 119.3).
unfitness_opinion_dateNoUnfitness only: the date of the occupational physician's final opinion; the rupture takes place within one month of it.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only carry readOnlyHint/openWorldHint; the description adds substantial behavioral context: rupture conventionnelle is unavailable (CASF L.423-2), the annex-4 retirement indemnity is PAID BY THE INSURER not the employer, formulas are deterministic with no AI assessment, and with no date seniority defaults to today (Europe/Paris) with the result stating so.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose well, but the opening sentence is duplicated in French and English, adding redundant length, and the run-on clauses about legal articles are dense. It earns most of its space but wastes some on bilingual repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 22-parameter, rule-heavy tool with no output schema and thin annotations, the description covers the regime, the reason categories, the key thresholds and the date-defaulting behavior. Return shape is not explained, but with deterministic output that is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each of the 22 parameters is already documented in the schema. The description supplies legal rules (art. 120 notice tiers, 1/80 art. 121.1, 9-month threshold) but little parameter syntax beyond what the schema already states, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (end of an assistant maternel contract) with the exact reasons handled (retrait d'enfant, démission, préavis, indemnité, Pajemploi). It explicitly distinguishes itself from calculate_home_employment_end_of_contract (same engine, regime pre-set) and from the garde d'enfant à domicile case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use (parent-employer or assistant maternel), when-not ('NOT for a garde d'enfant à domicile — that is regime garde_domicile on the generic tool'), and names the sibling alternative. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_deposit_restitutionSecurity-deposit restitution calculator — due date, late penalty, vétusté apportionmentA
Read-only
Inspect

Deposit restitution: due date, 10 %/month late penalty, vétusté-apportioned retentions. · Restitution du dépôt de garantie : date limite, majoration de 10 % par mois de retard, retenues avec vétusté. — For a French residential lease (loi n° 89-462 art. 22 / art. 25-6): the restitution deadline (1 month from the remise des clés when the exit état des lieux matches the entry one, 2 months otherwise), the late penalty (10 % of the monthly rent en principal per monthly period started late; not due when the delay results from the tenant not having given the address of the new home), the provision a landlord may keep in an immeuble collectif (duly justified, at most 20 % of the deposit — art. 22, al. 5: a ceiling, the amount is the landlord's), the legal deposit cap (1 month unfurnished / 2 months furnished, when lease_type is given) and, for each damage line, the share chargeable to the tenant after vétusté (usure normale) — under the grille of the lease when given, otherwise an ILLUSTRATIVE grille (no official grille exists — décret n° 2016-382 art. 4 defers to accords collectifs; the response says so). Nothing is assumed: the age of an element a grille applies to is asked for, the lease type and the provision amount are left out when not given. Same figures whichever party asks: pass perspective 'landlord' (justify a retention) or 'tenant' (contest one) — only next_steps change. Ask the user for amounts and dates in plain words; damage items as 'what, repair cost, age of the element'. Deterministic rules, not AI. General information, not legal advice.

ParametersJSON Schema
NameRequiredDescriptionDefault
damagesNoDamage lines to apportion. Omit for a full restitution.
depositYesDeposit paid at move-in (€).
lease_typeNo'vide' unfurnished (deposit cap 1 month) or 'meuble' furnished (cap 2 months). Never presumed: omitted, no cap is computed.
coproprieteNotrue 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_outcomeYes'identical' when the exit état des lieux matches the entry one (1-month deadline); 'differences' otherwise (2 months).
perspectiveNoWho is asking — changes only the next_steps wording, never the figures.
apply_provisionNotrue 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_dateYesDate the keys were handed back (remise des clés), ISO date — the deadline runs from this day.
provision_amountNoImmeuble 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_dateNoDate 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_chargesYesMonthly rent en principal, excluding charges (€).
tenant_gave_addressNofalse 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_justificationNoWhat justifies the provision (e.g. 'arrêté provisoire des comptes du 15/09/2026').

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds substantial non-obvious behavior on top: deterministic rules not AI, 'nothing is assumed' with explicit defaults, disclosure that the fallback grille is ILLUSTRATIVE and that no official grille exists, and that the response flags an assumed date (as_of.assumed). This is exactly the kind of context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical facts are front-loaded in the first sentence, followed by a denser explanatory paragraph. It is long, and the French-language restatement duplicates the English summary rather than adding information for an agent, which costs a point against strict conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must hint at returns, and it does: it names what changes by perspective (next_steps), that the result states the legal maximum, and that an assumed date is surfaced in as_of. For a 13-parameter legal calculator this leaves nothing material an agent needs unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage the baseline is 3, and the description earns above it by adding input-shaping guidance the schema lacks: how to phrase damage items ('what, repair cost, age of the element') and what is deliberately omitted when not supplied (lease type, provision amount). It does not, however, add per-parameter meaning beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line names a specific verb-resource pair (deposit restitution) and enumerates the three outputs it produces: due date, late penalty, vétusté-apportioned retentions. It is trivially distinguishable from siblings like calculate_rent_revision or calculate_tenant_notice_period without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear operating context: it is for a French residential lease, tells the agent which perspective to pass for landlord vs tenant, and instructs how to elicit inputs ('ask the user for amounts and dates in plain words'). It stops short of naming alternative tools or explicit when-not-to-use conditions, so it is strong but not fully routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_home_employment_end_of_contractHome employment end of contract — notice, calendar, indemnity (CCN 3239)A
Read-only
Inspect

End of a home-employment contract in France (particulier employeur ↔ salarié: cleaner, carer, garde d'enfant à domicile, assistant maternel): notice, dates, indemnity, documents, for either party. · Fin de contrat d'emploi à domicile (particulier employeur ↔ salarié, assistant maternel) : préavis, calendrier, indemnité, documents, pour l'employeur comme pour le salarié. — Notice duration by seniority (art. 162.4.1 dismissal / 162.6 resignation / 120 assistant maternel), earliest entretien préalable date (art. 161.1.1.1 — 4th jour ouvrable counted from the day after presentation; the Code du travail dismissal procedure does not apply to the particulier employeur), notice end computed from the FIRST PRESENTATION of the letter, dismissal indemnity (art. 163.1: 1/4 month per year up to 10 years then 1/3, from 8 months, best of the 12- or 3-month average) or assistant-maternel withdrawal indemnity (art. 121.1: 1/80 of gross salaries, from 9 months), rupture conventionnelle windows (blocked for assistants maternels, CASF L.423-2), paid-leave reminder, last CESU/Pajemploi declaration date, the 6-month settlement contest window (it runs from the receipt's signature, CCN art. 69 — only its earliest end is shown), unfitness (no notice, doubled indemnity when occupational, one month from the opinion) and the approval ending, and the end-of-contract documents with who produces and who receives each; retirement (mise à la retraite art. 161.1.2 / 162.5 / 163.2 — indemnity whatever the seniority; départ volontaire art. 63.2.2, its annex-4 indemnity computed on the periods given and PAID BY THE INSURER, not the employer), the paid job-search hours from 40 hours a week only (art. 162.4.2), no paid-leave indemnity for a CESU wage raised by 10 % (art. 140.1.2). With no date given the seniority is taken today (Europe/Paris) and the result says so. Same numbers whichever party calls. Applies the Convention collective IDCC 3239 (verified on Légifrance 2026). Deterministic formulas — no AI, no assessment of any person or motif.

ParametersJSON Schema
NameRequiredDescriptionDefault
partyYesWho is asking: 'employer' (particulier employeur) or 'employee' (salarié / assistant maternel). Wording only — the figures are identical for both.
regimeYes'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_dateNoISO 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_dateNoSeniority reference date when the letter has not been sent yet (planning). Ignored when notification_date is given. Defaults to today (Europe/Paris) when no date at all is given, as on the web calculator and the documents.
cdd_reasonNocontract_type 'cdd' only: the motif (C. trav. art. L.1242-2) — 'seasonal' has no end-of-contract indemnity (L.1243-10, 1°).
end_reasonYesClosed category matching the letter: 'cdd_term_end' (a fixed-term contract ending at its term — C. trav. art. L.1243-5 « cesse de plein droit à l'échéance du terme »: no letter, no notice, no rupture indemnity; the end-of-contract indemnity of L.1243-8 except in the cases of L.1243-10; every figure taken at the term; needs contract_type 'cdd' and cdd_end_date; not when the work went on after the term — then a permanent contract, L.1243-11), '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), 'retirement_by_employer' (mise à la retraite, home employee only, art. 161.1.2: the dismissal's notice, art. 162.5; an indemnity whatever the seniority, computed like art. 163.1, art. 163.2 — for an assistant maternel the employer's ending is the withdrawal of the child, blocked with code retirement_by_employer_is_withdrawal_am), 'retirement_departure' (départ volontaire à la retraite, art. 63.2.2: home employee notice art. 162.5, assistant maternel art. 120; the voluntary-retirement indemnity of annex 4 — art. 163.3 / 121.2 — is computed from annex 4 on sector_months / sector_months_last_84 / avg_60_months_gross when given, else on this contract alone, with payer 'insurer' (annex 4, art. 4.2); reason annex4_conditions_not_met when the periods known do not reach 120 months, 60 of them in the last 84).
start_dateYesContract start (ISO).
cdd_end_dateNocontract_type 'cdd' only: the term of the contract with its renewals (the L.1243-2 notice counts on the total length).
hourly_grossNoGross hourly rate in € (home employee / garde à domicile).
weekly_hoursNoWeekly hours (mensualisation = hourly × hours × 52 / 12).
contract_typeNo'cdi' (permanent) or 'cdd' (fixed-term). Omitted = the rules of a permanent contract. A CDD ends before its term only in the cases of C. trav. art. L.1243-1 / L.1243-2 (CCN 3239 art. 62): agreement of the parties (no official form, no homologation), faute grave, unfitness (L.1226-4-3 / L.1226-20), the employee's resignation on a CDI hire (notice one day per week of the total length, two weeks at most) — any other ending is answered status 'blocked', code cdd_early_end_not_provided. Judged after its term (cdd_end_date), the relationship still running, the CDD is a CDI (L.1243-11).
sector_monthsNoretirement_departure only: the months of employment in the branch over the whole career, ALL household employers together (CCN 3239 annex 4, art. 2.2: 120 months needed; 1 month of salary from 10 years, 1.5 from 15, 2 from 20, 2.5 from 30). Defaults to this contract's months — a floor.
entretien_dateNoHome 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.
leave_pay_modeNoHome employee: how paid leave is paid — 'on_leave' (when taken) or 'cesu_10pct' (the CESU hourly wage raised by 10 %: « les congés payés sont rémunérés au moment du versement du salaire mensuel », CCN 3239 art. 140.1.2 — then no compensatory paid-leave indemnity at the end). Omitted = unknown: the answer states the rule with its exception.
agreed_end_dateNoRupture 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_grossNoAssistant maternel: monthly gross (mensualisation), EXCLUDING indemnités d'entretien, repas, kilométriques.
convocation_dateNoEmployer termination only: first presentation of the convocation à l'entretien préalable → earliest entretien date (CCN art. 161.1.1.1).
unfitness_originNoUnfitness only: 'occupational' (work accident or occupational disease — the indemnity is doubled, art. 161.1.3 / 2/80 art. 119.5) or 'non_occupational'.
approval_decisionNoApproval ending only (assistant maternel): the conseil départemental's decision.
notification_dateNoISO 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). When omitted (with sent_date and as_of_date), the seniority is taken TODAY (Europe/Paris) and the result says so (seniority.as_of_default: 'today') — never zero seniority.
avg_3_months_grossNoOptional — average gross monthly pay over the last 3 months (the more favourable average is used).
serious_misconductNoThe 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_paidNoAssistant maternel: optional total gross salaries paid since the start (art. 121.1 base). Defaults to mensualisation × complete months.
avg_12_months_grossNoOptional — average gross monthly pay over the last 12 months (art. 163.1 reference).
avg_60_months_grossNoretirement_departure only: the monthly average of the gross salaries of the last 60 calendar months in the branch (annex 4, art. 4.1 takes the most favourable of the 60-, 12- and 3-month averages). The indemnity is PAID BY THE INSURER, not by the employer (art. 4.2).
sector_months_last_84Noretirement_departure only: of those, the months within the 84 months before the end of the contract (annex 4, art. 2.2: 60 needed). Defaults to this contract's.
approval_notified_dateNoApproval ending only: the day the conseil départemental notified the decision — the contract ends on it (art. 119.3).
unfitness_opinion_dateNoUnfitness only: the date of the occupational physician's final opinion; the rupture takes place within one month of it.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered; the description goes further by promising deterministic formulas ('no AI, no assessment of any person'), stating that seniority defaults to today (Europe/Paris) when no date is given, that figures are identical for both parties, and that certain contest windows show only their earliest end. These are meaningful behavioral disclosures beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

After a serviceable bilingual opening sentence, the body becomes a dense wall of semicolon-chained clauses enumerating rules, article numbers and edge cases. It is thorough but not front-loaded or scannable, and much of the legal detail duplicates the 100%-covered schema descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 28-parameter, high-complexity legal calculator with no output schema, the description covers rules, defaults, blocked cases, payer distinctions and input prerequisites. An agent has enough context to invoke correctly and to anticipate the result shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across 28 params, so the schema already carries the semantic load and baseline is 3. The description mirrors much of that content (notice/indemnity rules, defaults) rather than adding new per-parameter meaning, so no credit above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource: computes the end-of-contract figures (notice, dates, indemnity, documents) for a French home-employment contract under CCN 3239, for either party. It explicitly flags the sibling boundary by naming calculate_assistant_maternel_end_of_contract within the regime parameter, so an agent can route between the two.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives rich conditional guidance on which end_reason/regime combos apply and routes assistant-maternel cases to the sibling tool ('or use calculate_assistant_maternel_end_of_contract'). It lacks an explicit 'do not use this when…' framing, but the routing and prerequisite conditions (e.g. cdd_term_end needs contract_type 'cdd') are clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_net_swiss_salaryNet Swiss salary calculator (frontalier)A
Read-only
Inspect

Net Swiss salary for a cross-border worker. · Salaire suisse net pour un frontalier. — Converts a gross annual Swiss salary (CHF) to net, deducting the employee shares of AVS/AI/APG, AC (chômage), LPP (2nd pillar) and NBU (non-occupational accident) for the given border canton. Deterministic Swiss payroll rules — no AI. Returns annual + monthly net and the deduction breakdown, with the data year of the rates used.

ParametersJSON Schema
NameRequiredDescriptionDefault
ageYesEmployee age (affects LPP rate).
cantonYesSwiss canton of work supported by the net-salary engine (GE, VD, JU, NE, BS, VS).
gross_chf_annualYesGross annual salary in CHF.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false. The description adds valuable behavioral context: it is deterministic Swiss payroll, no AI, and returns annual + monthly net plus deduction breakdown and data year. It doesn't mention rate limits, but for an offline calculation those are less relevant.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the purpose in French and English, then details deductions. It is concise and every sentence adds information. The bilingual opening is slightly redundant but appropriate for a Swiss tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the description covers what it computes, the deduction categories, the return format (annual + monthly net, breakdown, data year), and the deterministic nature. With no output schema, this level of return-value detail is exactly what is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds that age affects the LPP rate and that canton is the border canton of work, which reinforces the schema's own descriptions. No new syntax or format details are provided beyond the schema, but the added context on age/LPP linkage is marginally useful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: converts gross annual Swiss salary (CHF) to net for a cross-border worker, and names the exact deductions (AVS/AI/APG, AC, LPP, NBU). This is clearly distinguished from siblings like calculate_teletravail_frontalier and compare_lamal_cmu, which handle different payroll/insurance concerns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (convert gross annual Swiss salary to net for a frontalier in a supported border canton), but it does not explicitly state when not to use this tool, such as for non-border workers or cantons outside the enum. The scope is clear enough for most routing decisions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_rent_revisionFrench rent revision calculator (IRL indexation)A
Read-only
Inspect

New rent after the yearly IRL revision; no revision for class F/G homes. · Nouveau loyer après la révision IRL annuelle ; pas de révision pour les logements classés F ou G. — Computes the legally revised rent for a French residential lease using the INSEE IRL (indice de référence des loyers): new rent = current rent × (IRL of the lease's reference quarter ÷ IRL of the SAME quarter one year earlier), loi n° 89-462 art. 17-1. The reference quarter (trimestre de référence IRL) is the one written in the lease — pass it as reference_quarter. Two legal limits: the landlord must ask for the revision within ONE YEAR of the date it takes effect (the date agreed in the lease or, failing that, the end of each year of the lease), otherwise the landlord is deemed to have waived it for the year gone by (art. 17-1, I, al. 3) — when revision_date is more than one year old the result says so; and the revision cannot be applied in a dwelling of DPE class F or G (art. 17-1, III; leases concluded, renewed or tacitly continued since 24 August 2022 — loi n° 2021-1104 du 22 août 2021, art. 159) — pass dpe_class to get that check. The revised rent applies from the landlord's request, never retroactively (art. 17-1, I, al. 4). Deterministic INSEE data + fixed formula — no AI. France métropolitaine.

ParametersJSON Schema
NameRequiredDescriptionDefault
dpe_classNoDwelling's DPE class, if known — in a class F or G dwelling the revision cannot be applied (art. 17-1, III).
current_rentYesCurrent monthly rent excluding charges (hors charges), in euros.
revision_dateNoDate 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_quarterYesThe 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.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover read-only/local execution, yet the description goes well beyond them: it discloses the one-year waiver rule that produces a warning when revision_date is over a year old, the non-retroactive application of the new rent, the F/G exclusion, and that the output is deterministic INSEE data with no AI. This is exactly the kind of behavioral context an agent needs for a legal calculation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key result and the F/G exclusion are front-loaded, which is good, but the opening line is duplicated in French and English, and the body is dense with repeated legal citations (loi n° 89-462, loi n° 2021-1104). It is informative but verbose for a tool description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with no output schema, the description is nearly complete: it enumerates the returned value (new rent) and the warning conditions, and covers the two legal limits. It is slightly thin on the exact shape of the result, but an agent has enough to call and interpret it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains that reference_quarter names the quarter of the revision year and that revision_date wins if they disagree, plus the relationship between the two (a mismatch triggers a warning). Useful interpretation guidance on top of an already-documented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (computes the legally revised French residential rent) and gives the exact formula (IRL of reference quarter ÷ same quarter one year earlier), naming the governing statute. It implicitly distinguishes itself from siblings like check_dpe_rental_restrictions and generate_rent_receipt by being a calculation tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context for when to use it: the yearly IRL revision, with the note that class F/G dwellings are excluded and that dpe_class enables that check. However, it never explicitly routes the agent to sibling tools (e.g. check_dpe_rental_restrictions) for the DPE question, leaving the boundary between overlapping tools to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_teletravail_frontalierFrontalier telework — 40 % tax; 25 % / 50 % social securityA
Read-only
Inspect

Frontalier telework thresholds (FR–CH): 40 % tax; social security Swiss below 25 %, French from 25 % unless the employer's A1 (framework agreement, below 50 %), reported separately. · Télétravail frontalier : seuil fiscal 40 % ; sécurité sociale suisse sous 25 %, française dès 25 % sauf A1 de l'employeur (accord-cadre, moins de 50 %). — Projects a typical working week over 46 worked weeks and returns the telework share, the position against BOTH limits (different instruments: the FR–CH tax avenant in force 24/07/2025, applying to pay from 01/01/2023, vs the EU/EFTA social-security framework agreement since 01/07/2023), the telework days that can still be added over the projected year (its worked days stay fixed) before each is crossed, and how many temporary mission days count inside the allowance (≤ 10 a year). What the 40 % line means depends on the canton of work — give work_canton: Geneva and the other source-taxing cantons stay taxed in Switzerland up to 40 %; the eight cantons of the 1983 agreement are taxed in France and keep the frontalier status up to 40 %. Without it, both regimes are stated. Optional: the 3-month LAMal/CMU droit d'option window (Swiss and EU nationals) from the Swiss employment start date or the later move to France. Deterministic — verified official facts with sources and dates, nothing stored. Same engine as the free web counter; a signed-in monthly log turns the projection into the real position (list_deadlines then carries the threshold warnings).

ParametersJSON Schema
NameRequiredDescriptionDefault
as_of_dateNoYYYY-MM-DD reference date for the option window (default: today) — makes the answer reproducible.
work_cantonNoSwiss canton of work (code like GE, VD, or name). Picks the tax rule: the 8 cantons of the 1983 agreement (BE, SO, BS, BL, VD, VS, NE, JU) tax in France; the others tax at source. Omitted: both regimes are stated.
days_per_weekNoContractual working days per week (1–7). Default 5.
france_move_dateNoYYYY-MM-DD the worker took up residence in France, if already working in Switzerland — the window then counts from the LATER of the two dates (official form p.3).
mission_days_per_yearNoTemporary mission days per year in France or a third country — only the first 10 count inside the telework allowance.
swiss_employment_startNoYYYY-MM-DD the Swiss employment began (or the Swiss pension was granted) — adds the 3-month LAMal/CMU droit d'option window. Only if this job opened the option: a first Swiss job since living in France, or a return after unemployment — a change of employer does not reopen it.
telework_days_per_weekYesDays per week worked from home in France (fractions allowed, e.g. 1.5).

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds meaningful behavioral context: deterministic output, official sourced facts with dates, nothing stored, and the distinction between projection and a signed-in real-position log. It does not describe authentication or rate limits, but those are not central for this read-only calculation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very long, dense, and bilingual, with the French translation doubling content without adding new information. It also delays the core action — projecting the telework position — until after a compact block of legal thresholds, so it is not well front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex multi-jurisdiction calculation with no output schema, the description does the heavy lifting: it explains what is returned, the canton-dependent meaning of the 40% line, the separate tax and social-security instruments, the mission-day allowance, and the optional option-window logic. An agent has enough context to invoke it correctly despite the lack of a formal output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all seven parameters are already documented in the schema. The description reinforces how work_canton changes the tax rule and how mission_days_per_year is capped at 10 inside the allowance, but it adds little syntax or interpretation beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource (frontalier telework thresholds under FR–CH rules) and states the operation (projects a typical working week and returns telework share, limit positions, addable days, and mission-day treatment). It is clear enough to distinguish from generic calculators, but it does not explicitly contrast itself with the most plausible sibling, compare_lamal_cmu, even though the LAMal/CMU option window is part of its scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear usage context: when work_canton should be supplied, what happens if it is omitted, and when the optional LAMal/CMU window applies. It also references the signed-in monthly log path and says list_deadlines then carries threshold warnings, which is useful alternative routing, but it stops short of explicit when-not-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_tenant_notice_periodTenant notice period (préavis) calculator — French residential leaseA
Read-only
Inspect

Tenant's notice period to end a French lease (préavis). · Délai de préavis du locataire pour résilier un bail. — Computes the tenant's notice period for terminating a French residential lease (loi n° 89-462 art. 15): furnished = always 1 month; unfurnished = 3 months, reduced to 1 month in a zone tendue commune (first-list perimeter, resolved automatically from insee_code/commune) or on a statutory ground (art. 15 I, 1° à 5° incl. 3° bis). Returns the end date computed de quantième à quantième from the RECEPTION date, plus which justificatifs must accompany the letter. Deterministic legal formula — no AI involved. France métropolitaine rules.

ParametersJSON Schema
NameRequiredDescriptionDefault
communeNoCommune name, e.g. 'Lyon'. Used when insee_code is not provided.
ground_idNoStatutory ground for the reduced 1-month notice on an unfurnished lease (art. 15 I).
insee_codeNoINSEE commune code (5 chars, e.g. 75056 for Paris, 2A004 for Ajaccio). Preferred when known — skips name resolution.
lease_typeYes'vide' = unfurnished, 'meuble' = furnished
code_postalNo5-digit postal code — disambiguates homonym communes.
zone_tendueNoExplicit zone-tendue (first list) flag if already known — otherwise resolved from insee_code/commune.
reception_dateNoISO date the LANDLORD RECEIVES the notice (LRAR reception, remise en main propre, or acte de commissaire) — never the sending date.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces this by labeling the computation 'Deterministic legal formula — no AI involved.' It adds valuable behavioral context beyond annotations: the reception-date emphasis (never the sending date), the automatic zone-tendue resolution, and the return of justificatifs. This exceeds the baseline for tools with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized, using a semicolon-separated enumeration and clear cause-effect statements. It front-loads the purpose and then provides necessary legal details. The bilingual intro is slightly redundant, but every sentence conveys essential information, keeping it appropriately concise for the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must convey what the function returns, and it does: 'the end date computed ... plus which justificatifs must accompany the letter.' It also covers the legal grounding, the zone-tendue resolution, and the scope (France métropolitaine). It lacks explicit error-handling notes (e.g., what happens with invalid dates), but for a deterministic calculator the description is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of parameters, so the baseline is 3. The description adds significant semantic value: it explains how lease_type dictates the base period, how ground_id and zone_tendue interact to reduce it, and clarifies the crucial nuance of reception_date (landlord receives, not sent). This goes well beyond the schema's raw field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool computes the tenant's notice period for terminating a French residential lease, with specific rules (furnished = 1 month, unfurnished = 3 months with reductions). It names the legal reference (loi n° 89-462 art. 15) and distinguishes itself from sibling tools (e.g., calculate_rent_revision, check_zone_tendue) by its explicit scope and outputs (end date and justificatifs).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates when to use the tool: for calculating tenant notice periods in France métropolitaine, and even notes it automatically resolves zone tendue, avoiding the need for separate calls. However, it does not explicitly name alternative tools or state when NOT to use it (e.g., for other legal jurisdictions or other lease types), which would push it to a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_dpe_rental_restrictionsDPE rental restrictions — letting ban, rent freeze, DPE validityA
Read-only
Inspect

French rental limits by DPE class: letting ban, rent freeze, DPE validity. · Restrictions locatives selon la classe DPE : interdiction de louer, gel des loyers, validité du DPE. — Given a dwelling's DPE class (A–G), returns the French rental restrictions in force: letting ban status and date (loi n° 2021-1104 Climat et Résilience — G banned since 2025, F from 2028, E from 2034, France métropolitaine), the F/G rent freeze (no rent revision in a class F or G dwelling — loi n° 89-462 art. 17-1, III, for leases concluded, renewed or tacitly continued since 24 August 2022), and — when dpe_issue_date is provided — whether the DPE itself is still valid (10-year rule + the 2013–2021 transitional expiries). Deterministic rules from official thresholds — no AI involved.

ParametersJSON Schema
NameRequiredDescriptionDefault
dpe_classYesEnergy class from the dwelling's DPE.
dpe_issue_dateNoISO issue date of the DPE — enables the validity check.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already state readOnlyHint=true and openWorldHint=false, covering safety. The description adds substantial behavioral context: deterministic rules, legal references (loi n° 2021-1104, loi n° 89-462 art. 17-1), exact threshold dates for bans and rent freezes, and that no AI is involved. It does not mention rate limits or side effects, but for a pure lookup this is strong added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The English purpose statement is front-loaded and followed by legal detail that earns its place for a compliance-oriented tool. The bilingual header partially duplicates the title, adding some redundancy, but the overall structure is efficient and not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter deterministic lookup with no output schema, the description explains exactly what is returned (letting ban status and date, rent freeze, DPE validity) and the condition under which validity is checked. With annotations covering read-only and closed-world behavior, nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are documented in the schema itself. The description reinforces meaning (DPE class A–G, dpe_issue_date enabling validity) but adds no syntax, format, or constraint beyond what the schema already provides, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource ('French rental restrictions') and action ('returns') tied to a DPE class. The domain is clearly distinct from sibling calculators like calculate_rent_revision or calculate_tenant_notice_period, though it does not explicitly name or differentiate against those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'Given a dwelling's DPE class (A–G), returns...' and the conditional mention that dpe_issue_date enables the validity check. However, there is no explicit when-to-use, when-not-to-use, or alternative-tool guidance, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_geneva_quasi_residentQuasi-resident status check — ordinary taxation on request (TOU) for frontaliers taxed at sourceA
Read-only
Inspect

Quasi-resident status (≥ 90 % of the household's income taxable in CH). · Statut de quasi-résident (≥ 90 % des revenus du foyer imposables en CH). — For a person taxed at source in Switzerland who lives in France (Geneva and every canton outside the 1983 agreement): at least 90 % of the household's worldwide gross income (you + spouse) taxable in Switzerland opens a request for ordinary taxation (TOU), in writing, by 31 March of the following year, every year, not withdrawable once filed (LIFD art. 99a; OIS art. 14). The eight cantons of the agreement of 11 April 1983 (BE, SO, BS, BL, VD, VS, NE, JU) tax in France: not applicable there. Deterministic threshold rule — no AI. Returns eligibility, the share, the threshold, the deadline and the data year.

ParametersJSON Schema
NameRequiredDescriptionDefault
work_cantonNoSwiss canton of work (code like GE, ZH, or name). A canton of the 1983 agreement is answered « not applicable » unless source_taxed is true. Omitted: the rule is answered with that condition stated.
source_taxedNoFor a canton of the 1983 agreement (BE, SO, BS, BL, VD, VS, NE, JU): true when the employer withholds Swiss source tax in 2026 (the tax year of the open request, due 31/03/2027) — a condition of the frontalier status is not met (daily return — at most 45 nights a year full time and at most one a week —, 2041-AS, telework ≤ 40 %) or a Swiss national paid by a public-law employer. The request is then open.
swiss_incomeYesHousehold (you + spouse) gross income taxable in Switzerland (same currency as total_income).
total_incomeYesHousehold (you + spouse) worldwide gross income (same currency).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a safe read-only, closed-world look-up, so the bar is lower; the description nonetheless adds real behavior — the annual 31 March deadline, non-withdrawability once filed, the legal basis (LIFD art. 99a, OIS art. 14) and the fact that it returns eligibility/share/threshold/deadline/data year. It does not discuss error or edge-case handling, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core rule is front-loaded and precise, but the bilingual duplication (English plus French) and the long parenthetical on the cantons of the 1983 agreement make it heavier than necessary for a four-parameter look-up.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fills the gap by enumerating what is returned (eligibility, share, threshold, deadline, data year) and covers the deadline, irreversibility and territorial scope an agent needs to advise correctly. Nothing material to calling or interpreting this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all four parameters are already documented in the schema, including the canton/1983-agreement interplay for work_canton and source_taxed. The description restates the 90% rule and the same-currency household framing but adds no syntax or format detail beyond the schema — the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific rule-check verb and subject (quasi-resident status, ≥90% of household income taxable in CH) and clearly marks itself as a deterministic threshold rule rather than a calculator, which separates it from the sibling calculate_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States exactly when it applies (person taxed at source in Switzerland living in France, Geneva and cantons outside the 1983 agreement) and when it does not (the eight cantons of the 11 April 1983 agreement, which tax in France). The when-not condition is explicit, not inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_zone_tendueZone tendue status of a French communeA
Read-only
Inspect

Is a commune in zone tendue, and which list (reduced tenant notice, or tax only)? · Une commune est-elle en zone tendue, et sur quelle liste (préavis réduit, ou fiscal seulement) ? — Checks whether a French commune is in the 'zone tendue' perimeter and — crucially — WHICH one: the first list (décret n° 2013-392 annex, 1,434 communes, agglomérations >50k) where the tenant's reduced 1-month notice applies, or the wider TLV tax perimeter added in 2023 where ONLY fiscal measures apply (widely mislabelled 'zone tendue' — the reduced notice does NOT apply there). Deterministic dataset lookup on DILA reference data (service-public.fr simulator dataset) — no AI involved. Provide insee_code, or commune (+ code_postal to disambiguate).

ParametersJSON Schema
NameRequiredDescriptionDefault
communeNoCommune name, e.g. 'Lyon'. Used when insee_code is not provided.
insee_codeNoINSEE commune code (5 chars, e.g. 75056 for Paris, 2A004 for Ajaccio). Preferred when known — skips name resolution.
code_postalNo5-digit postal code — disambiguates homonym communes.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint=true and openWorldHint=false annotations, the description adds valuable behavioral context: it is a 'deterministic dataset lookup on DILA reference data (service-public.fr simulator dataset) — no AI involved.' It also discloses the real-world consequences of each list, making the tool's behavior and semantic boundary much clearer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense and front-loaded with the core question, then the critical caveat about the two lists. There is minor redundancy from the bilingual repetition of the opening question, but overall every substantive piece of the explanation earns its place given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description adequately conveys what the caller should expect conceptually: membership in the zone tendue perimeter and which list applies. It also covers the data source, determinism, and input disambiguation needs. It does not specify the exact output shape, but for a boolean/list lookup the semantic outcome is clear enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already explains the commune name, INSEE code preference, and postal-code disambiguation. The description essentially restates this guidance ('Provide insee_code, or commune (+ code_postal to disambiguate)') without adding new parameter-level meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Checks whether a French commune is in the zone tendue perimeter' and immediately distinguishes the two lists (reduced notice vs. tax-only). This clearly separates the tool from sibling tools and makes its exact scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context by explaining the critical distinction between the two 'zone tendue' lists and warns that the wider TLV perimeter is often mislabelled. It also tells the caller how to provide input ('Provide insee_code, or commune (+ code_postal to disambiguate)'), though it does not explicitly compare against sibling tools or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_family_allowancesFamily allowances — Swiss vs French (frontalier)A
Read-only
Inspect

Family allowances: Swiss vs French for a frontalier. · Allocations familiales : Suisse ou France pour un frontalier. — Compares the family allowances a cross-border worker's household is due under the Swiss canton's rules (BSV 2026 table, LAFam art. 3 age limits; paid monthly with the salary) vs the French CAF (F13213 amounts, modulated by the household's N-2 resources band), and the EU 883/2004 art. 68 differential when the other parent has an activity or an assimilated situation in France. Deterministic official tables — no AI. Returns Swiss monthly + annual (CHF), CAF monthly (EUR), the differential, per-child detail, the notes and the data year.

ParametersJSON Schema
NameRequiredDescriptionDefault
cantonYesSwiss canton of work — two-letter code, any of the 26 cantons.
childrenYesThe children (at least one).
caf_income_bandNoThe household's CAF resources band (revenu net catégoriel of year N-2; service-public F13213): full rate, half or quarter. Omitted → full rate, and the result says so.
spouse_works_in_franceNoDoes the OTHER parent have an activity in France (employed or self-employed) or an assimilated situation there (French unemployment, sickness or maternity benefits, paid leave, parental leave treated as activity — Decision F1)? Yes → the CAF pays first and Switzerland pays the difference (Reg. 883/2004 art. 68).

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: deterministic official tables with no AI, named sources (BSV 2026, LAFam art. 3, service-public F13213, Reg. 883/2004 art. 68), and the data year. It does not cover edge cases like unsupported canton/child combinations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core comparison sentence is front-loaded and dense with useful specifics, but the leading bilingual title/duplicate ('Family allowances: Swiss vs French... · Allocations familiales : Suisse ou France...') repeats the same information in two languages without adding meaning, and the single long sentence packs legal citations that a selecting agent does not need.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly takes on the return shape: Swiss monthly + annual in CHF, CAF monthly in EUR, the differential, per-child detail, notes and data year. Combined with the source citations and determinism claim, this is nearly sufficient for a moderately complex calculator; only unsupported-case behavior is unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with enums and per-field descriptions for canton, children, caf_income_band and spouse_works_in_france, so the baseline is 3. The description adds the legal rationale behind the differential (CAF pays first, Switzerland pays the difference) but largely restates semantics already present in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb ('compares') and a scoped resource: family allowances for a cross-border worker under Swiss canton rules vs French CAF, plus the EU 883/2004 art. 68 differential. This is clearly distinguishable from siblings such as compare_lamal_cmu or calculate_teletravail_frontalier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case (a frontalier household with children and possibly a spouse active in France) but never states when to use this tool versus alternatives, nor does it name any sibling. The conditions for the differential are described, but only as domain logic, not as guidance on tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_lamal_cmuFrontalier health cover — LAMal vs CMUA
Read-only
Inspect

Frontalier health cover: LAMal (CH) vs CMU/PUMa (FR). · Couverture santé frontalier : LAMal (CH) ou CMU (FR). — Estimates the monthly cost of the two health-insurance options a France–Switzerland cross-border worker chooses between (droit d'option): Swiss LAMal (in CHF) vs the French contribution (in EUR, 8 % of the worker's OWN income of year N-2 above 25 % of the PASS — CSS art. L. 380-3-1 IV and D. 380-2). Give income_n2_eur (own net income as declared); without it the French figure is an UPPER estimate from the gross salary, flagged as such. Dependants are priced by age band (0-18 child, 19-25 young adult, 26+ adult). Deterministic official premium/rate tables — no AI. Returns both monthly figures, the rules of the option (window, reception by the Swiss authority, default, who has it) and how to transmit the form. Recommends neither system.

ParametersJSON Schema
NameRequiredDescriptionDefault
ageYesWorker's age.
cantonYesSwiss canton of work — two-letter code, any of the 26 cantons.
salary_chfNoAnnual gross Swiss salary in CHF — used only when income_n2_eur is missing, and then the French figure is an upper estimate.
children_agesNoAges of dependants (optional) — priced by band (≤18 / 19-25 / 26+).
income_n2_eurNoThe worker's OWN income of year N-2 in EUR, net, as declared (salaries + other own income; half of income held in common) — the base of the French contribution (CSS D. 380-2). Not the household revenu fiscal de référence.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint/openWorldHint, but the description adds rich behavior: values come from deterministic official premium/rate tables (no AI), it recommends neither system, and it returns option rules (window, reception by Swiss authority, default, who holds it) plus form-transmission guidance. This goes far beyond the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded and every sentence carries meaning; the method, fallback, and legal basis are stated efficiently. The duplicated bilingual header line ('Couverture santé frontalier...') is mildly redundant for an agent but does not dilute the core content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly compensates by describing the returns (both monthly figures, option rules, transmission steps). All five parameters are documented at full coverage, so an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds real meaning beyond the schema: income_n2_eur is the worker's OWN net N-2 income, explicitly 'not the household revenu fiscal de référence', and dependants are priced by age band. salary_chf's fallback role is also clarified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (estimates monthly cost) and a precise resource (the two frontalier health-insurance options, LAMal vs CMU/PUMa), and frames it as the droit d'option choice. An agent can distinguish this from sibling calculators like compare_family_allowances purely from the text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the conditional use of parameters: give income_n2_eur for the exact French figure, otherwise salary_chf yields an upper estimate explicitly flagged as such. This covers when and how to invoke it well, but names no alternative sibling tools or exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_rent_receiptGenerate a French rent receipt (quittance de loyer) PDF — free, no accountAInspect

FREE — no account needed. · GRATUIT, sans compte : quittance de loyer en PDF. — Rent receipt (quittance de loyer, loi n° 89-462 art. 21) PDF from the data you give: landlord, tenant, property address, period, rent and charges, payment date. Deterministic template engine — a fixed legal template filled with the given data, not AI-generated content. The document is issued in FRENCH (required for legal validity); includeEnglish appends a non-binding English reference translation. Nothing is stored: the PDF is available for 24 hours through a single-use link, then deleted — no account, no property, no history. Per-network caps apply (a structured rate_limited result says when to retry). Have the landlord verify every field before sending it to the tenant. BLANK MENTIONS: what is not given is printed blank, never invented. Before the document is produced, the tool answers needs_input with blank_mentions — the mentions that would be blank, as printed: show the landlord the list and complete them, or pass acknowledge_incomplete: true once the landlord has chosen to leave them blank. A generated document returns printed_blank, the mentions to complete by hand. With an AdminLanding account the same receipt is pre-filled from your saved properties, the tenant is stamped from the record so their name never passes through the assistant, receipts are kept in your history and shared through the tenant portal, and leases can be sent for e-signature — €4.90 — one document for this property (buy in the web app), or Membership — €6 a month or €59 a year, renewed automatically, cancel any time from the account: every rental document on up to 10 properties (€1 a month or €10 a year per extra property), plus home employment, cross-border, letters and patrimoine; first property free (10 documents). Payment happens in the browser, never through the agent. General information/document tooling, not legal advice.

ParametersJSON Schema
NameRequiredDescriptionDefault
localeNoFilename/interface language only — the document is always issued in French (required for validity). Default fr.
issuedAtNoCity 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).
periodToYesRental period end (ISO date). The receipt month is derived from this date.
periodFromYesRental period start (ISO date, e.g. 2026-08-01).
rentAmountYesRent RECEIVED, excluding charges, in euros, as a string (e.g. '850' or '850.50'). Above 0: a receipt of nothing is refused.
tenantNameYesTenant's full name (locataire) as it must appear on the receipt.
paymentDateYesDate the landlord RECEIVED the payment (ISO date).
landlordNameYesLandlord'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.
chargesAmountYesCharges (provisions/forfait), in euros, as a string ('0' if none).
paymentMethodNoPayment 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.
includeEnglishNoAppend a non-binding English reference translation as the last page. The legal document itself stays French.
landlordAddressYesLandlord's address.
propertyAddressYesAddress of the rented dwelling.
acknowledge_incompleteNoSet 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.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and idempotentHint=false, and the description supplies the missing behavioral detail: the PDF lives 24 hours behind a single-use link then is deleted, per-network rate caps return a structured rate_limited result with retry guidance, missing mentions print blank and are never invented, and refusals persist even with acknowledge_incomplete. That is far beyond what the annotations state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical information (free, French-only output, blank mentions, needs_input flow) is front-loaded, but the description is very long and its account/membership paragraph is dense commercial detail (€4.90, €6/month, €59/year, 10 properties, extra-property rates, e-signature) that contributes little to selecting or correctly invoking the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter tool with no output schema, the description closes the important gaps: it names the interactive return states the agent must handle (needs_input/blank_mentions, printed_blank, rate_limited), the 24-hour link lifetime, and the mandatory-French constraint. No output schema exists, so the return-value explanation it does provide is warranted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is already 100%, so baseline would be 3; the description nonetheless adds cross-parameter semantics the schema cannot express — omitted mentions become printed blanks, includeEnglish only appends a non-binding translation while the document stays French, and acknowledge_incomplete is meaningful only after a needs_input response. It does not add format examples beyond the schema's own patterns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and artifact: produce a French rent receipt (quittance de loyer) PDF from supplied landlord/tenant/period/rent data. The legal frame (loi n° 89-462 art. 21) and 'deterministic template engine, not AI-generated' pin down exactly what is produced, which is distinguishable from the calculation-only siblings that merely compute amounts or eligibility.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit operating conditions: have the landlord verify every field, payment happens in the browser never through the agent, and the acknowledge_incomplete flag must never be set on a first call — only after a needs_input response has been shown to the landlord. It also describes the account-based variant and pricing path, so an agent knows both the free flow and when the paid one applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updates
    • Changedcalculate_assistant_maternel_end_of_contract11 fields changed
      • changedInput schema / properties / as_of_date / description
        Previous value: -"Seniority reference date when the letter has not been sent yet (planning). Ignored when notification_date is given."New value: +"Seniority reference date when the letter has not been sent yet (planning). Ignored when notification_date is given. Defaults to today (Europe/Paris) when no date at all is given, as on the web calculator and the documents."
      • addedInput schema / properties / avg_60_months_gross
        Added value: +{
        +  "description": "retirement_departure only: the monthly average of the gross salaries of the last 60 calendar months in the branch (annex 4, art. 4.1 takes the most favourable of the 60-, 12- and 3-month averages). The indemnity is PAID BY THE INSURER, not by the employer (art. 4.2).",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / cdd_end_date
        Added value: +{
        +  "description": "contract_type 'cdd' only: the term of the contract with its renewals (the L.1243-2 notice counts on the total length).",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / cdd_reason
        Added value: +{
        +  "description": "contract_type 'cdd' only: the motif (C. trav. art. L.1242-2) — 'seasonal' has no end-of-contract indemnity (L.1243-10, 1°).",
        +  "enum": [
        +    "replacement_absence",
        +    "replacement_part_time",
        +    "replacement_suspension",
        +    "replacement_before_removal",
        +    "awaiting_cdi",
        +    "temporary_increase",
        +    "seasonal"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / contract_type
        Added value: +{
        +  "description": "'cdi' (permanent) or 'cdd' (fixed-term). Omitted = the rules of a permanent contract. A CDD ends before its term only in the cases of C. trav. art. L.1243-1 / L.1243-2 (CCN 3239 art. 62): agreement of the parties (no official form, no homologation), faute grave, unfitness (L.1226-4-3 / L.1226-20), the employee's resignation on a CDI hire (notice one day per week of the total length, two weeks at most) — any other ending is answered status 'blocked', code cdd_early_end_not_provided. Judged after its term (cdd_end_date), the relationship still running, the CDD is a CDI (L.1243-11).",
        +  "enum": [
        +    "cdi",
        +    "cdd"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / end_reason / description
        Previous value: -"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)."New value: +"Closed category matching the letter: 'cdd_term_end' (a fixed-term contract ending at its term — C. trav. art. L.1243-5 « cesse de plein droit à l'échéance du terme »: no letter, no notice, no rupture indemnity; the end-of-contract indemnity of L.1243-8 except in the cases of L.1243-10; every figure taken at the term; needs contract_type 'cdd' and cdd_end_date; not when the work went on after the term — then a permanent contract, L.1243-11), '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), 'retirement_by_employer' (mise à la retraite, home employee only, art. 161.1.2: the dismissal's notice, art. 162.5; an indemnity whatever the seniority, computed like art. 163.1, art. 163.2 — for an assistant maternel the employer's ending is the withdrawal of the child, blocked with code retirement_by_employer_is_withdrawal_am), 'retirement_departure' (départ volontaire à la retraite, art. 63.2.2: home employee notice art. 162.5, assistant maternel art. 120; the voluntary-retirement indemnity of annex 4 — art. 163.3 / 121.2 — is computed from annex 4 on sector_months / sector_months_last_84 / avg_60_months_gross when given, else on this contract alone, with payer 'insurer' (annex 4, art. 4.2); reason annex4_conditions_not_met when the periods known do not reach 120 months, 60 of them in the last 84)."
      • changedInput schema / properties / end_reason / enum
        Previous value: -[
        -  "employer_termination",
        -  "resignation",
        -  "mutual_termination",
        -  "unfitness",
        -  "approval_withdrawn"
        -]New value: +[
        +  "employer_termination",
        +  "resignation",
        +  "mutual_termination",
        +  "unfitness",
        +  "approval_withdrawn",
        +  "retirement_by_employer",
        +  "retirement_departure",
        +  "cdd_term_end"
        +]
      • addedInput schema / properties / leave_pay_mode
        Added value: +{
        +  "description": "Home employee: how paid leave is paid — 'on_leave' (when taken) or 'cesu_10pct' (the CESU hourly wage raised by 10 %: « les congés payés sont rémunérés au moment du versement du salaire mensuel », CCN 3239 art. 140.1.2 — then no compensatory paid-leave indemnity at the end). Omitted = unknown: the answer states the rule with its exception.",
        +  "enum": [
        +    "on_leave",
        +    "cesu_10pct"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / notification_date / description
        Previous value: -"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."New value: +"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). When omitted (with sent_date and as_of_date), the seniority is taken TODAY (Europe/Paris) and the result says so (seniority.as_of_default: 'today') — never zero seniority."
      • addedInput schema / properties / sector_months
        Added value: +{
        +  "description": "retirement_departure only: the months of employment in the branch over the whole career, ALL household employers together (CCN 3239 annex 4, art. 2.2: 120 months needed; 1 month of salary from 10 years, 1.5 from 15, 2 from 20, 2.5 from 30). Defaults to this contract's months — a floor.",
        +  "maximum": 720,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / sector_months_last_84
        Added value: +{
        +  "description": "retirement_departure only: of those, the months within the 84 months before the end of the contract (annex 4, art. 2.2: 60 needed). Defaults to this contract's.",
        +  "maximum": 84,
        +  "minimum": 0,
        +  "type": "number"
        +}
    • Changedcalculate_home_employment_end_of_contract11 fields changed
      • changedInput schema / properties / as_of_date / description
        Previous value: -"Seniority reference date when the letter has not been sent yet (planning). Ignored when notification_date is given."New value: +"Seniority reference date when the letter has not been sent yet (planning). Ignored when notification_date is given. Defaults to today (Europe/Paris) when no date at all is given, as on the web calculator and the documents."
      • addedInput schema / properties / avg_60_months_gross
        Added value: +{
        +  "description": "retirement_departure only: the monthly average of the gross salaries of the last 60 calendar months in the branch (annex 4, art. 4.1 takes the most favourable of the 60-, 12- and 3-month averages). The indemnity is PAID BY THE INSURER, not by the employer (art. 4.2).",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / cdd_end_date
        Added value: +{
        +  "description": "contract_type 'cdd' only: the term of the contract with its renewals (the L.1243-2 notice counts on the total length).",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / cdd_reason
        Added value: +{
        +  "description": "contract_type 'cdd' only: the motif (C. trav. art. L.1242-2) — 'seasonal' has no end-of-contract indemnity (L.1243-10, 1°).",
        +  "enum": [
        +    "replacement_absence",
        +    "replacement_part_time",
        +    "replacement_suspension",
        +    "replacement_before_removal",
        +    "awaiting_cdi",
        +    "temporary_increase",
        +    "seasonal"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / contract_type
        Added value: +{
        +  "description": "'cdi' (permanent) or 'cdd' (fixed-term). Omitted = the rules of a permanent contract. A CDD ends before its term only in the cases of C. trav. art. L.1243-1 / L.1243-2 (CCN 3239 art. 62): agreement of the parties (no official form, no homologation), faute grave, unfitness (L.1226-4-3 / L.1226-20), the employee's resignation on a CDI hire (notice one day per week of the total length, two weeks at most) — any other ending is answered status 'blocked', code cdd_early_end_not_provided. Judged after its term (cdd_end_date), the relationship still running, the CDD is a CDI (L.1243-11).",
        +  "enum": [
        +    "cdi",
        +    "cdd"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / end_reason / description
        Previous value: -"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)."New value: +"Closed category matching the letter: 'cdd_term_end' (a fixed-term contract ending at its term — C. trav. art. L.1243-5 « cesse de plein droit à l'échéance du terme »: no letter, no notice, no rupture indemnity; the end-of-contract indemnity of L.1243-8 except in the cases of L.1243-10; every figure taken at the term; needs contract_type 'cdd' and cdd_end_date; not when the work went on after the term — then a permanent contract, L.1243-11), '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), 'retirement_by_employer' (mise à la retraite, home employee only, art. 161.1.2: the dismissal's notice, art. 162.5; an indemnity whatever the seniority, computed like art. 163.1, art. 163.2 — for an assistant maternel the employer's ending is the withdrawal of the child, blocked with code retirement_by_employer_is_withdrawal_am), 'retirement_departure' (départ volontaire à la retraite, art. 63.2.2: home employee notice art. 162.5, assistant maternel art. 120; the voluntary-retirement indemnity of annex 4 — art. 163.3 / 121.2 — is computed from annex 4 on sector_months / sector_months_last_84 / avg_60_months_gross when given, else on this contract alone, with payer 'insurer' (annex 4, art. 4.2); reason annex4_conditions_not_met when the periods known do not reach 120 months, 60 of them in the last 84)."
      • changedInput schema / properties / end_reason / enum
        Previous value: -[
        -  "employer_termination",
        -  "resignation",
        -  "mutual_termination",
        -  "unfitness",
        -  "approval_withdrawn"
        -]New value: +[
        +  "employer_termination",
        +  "resignation",
        +  "mutual_termination",
        +  "unfitness",
        +  "approval_withdrawn",
        +  "retirement_by_employer",
        +  "retirement_departure",
        +  "cdd_term_end"
        +]
      • addedInput schema / properties / leave_pay_mode
        Added value: +{
        +  "description": "Home employee: how paid leave is paid — 'on_leave' (when taken) or 'cesu_10pct' (the CESU hourly wage raised by 10 %: « les congés payés sont rémunérés au moment du versement du salaire mensuel », CCN 3239 art. 140.1.2 — then no compensatory paid-leave indemnity at the end). Omitted = unknown: the answer states the rule with its exception.",
        +  "enum": [
        +    "on_leave",
        +    "cesu_10pct"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / notification_date / description
        Previous value: -"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."New value: +"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). When omitted (with sent_date and as_of_date), the seniority is taken TODAY (Europe/Paris) and the result says so (seniority.as_of_default: 'today') — never zero seniority."
      • addedInput schema / properties / sector_months
        Added value: +{
        +  "description": "retirement_departure only: the months of employment in the branch over the whole career, ALL household employers together (CCN 3239 annex 4, art. 2.2: 120 months needed; 1 month of salary from 10 years, 1.5 from 15, 2 from 20, 2.5 from 30). Defaults to this contract's months — a floor.",
        +  "maximum": 720,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / sector_months_last_84
        Added value: +{
        +  "description": "retirement_departure only: of those, the months within the 84 months before the end of the contract (annex 4, art. 2.2: 60 needed). Defaults to this contract's.",
        +  "maximum": 84,
        +  "minimum": 0,
        +  "type": "number"
        +}
    • Changedcalculate_net_swiss_salary1 field changed
      • changedInput schema / properties / canton / description
        Previous value: -"Swiss border canton (GE, VD, JU, NE, BS, VS)."New value: +"Swiss canton of work supported by the net-salary engine (GE, VD, JU, NE, BS, VS)."
    • Changedcalculate_teletravail_frontalier3 fields changed
      • addedInput schema / properties / france_move_date
        Added value: +{
        +  "description": "YYYY-MM-DD the worker took up residence in France, if already working in Switzerland — the window then counts from the LATER of the two dates (official form p.3).",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / swiss_employment_start / description
        Previous value: -"YYYY-MM-DD the Swiss employment began — adds the 3-month LAMal/CMU droit d'option window."New value: +"YYYY-MM-DD the Swiss employment began (or the Swiss pension was granted) — adds the 3-month LAMal/CMU droit d'option window. Only if this job opened the option: a first Swiss job since living in France, or a return after unemployment — a change of employer does not reopen it."
      • addedInput schema / properties / work_canton
        Added value: +{
        +  "description": "Swiss canton of work (code like GE, VD, or name). Picks the tax rule: the 8 cantons of the 1983 agreement (BE, SO, BS, BL, VD, VS, NE, JU) tax in France; the others tax at source. Omitted: both regimes are stated.",
        +  "maxLength": 40,
        +  "type": "string"
        +}
    • Changedcheck_geneva_quasi_resident4 fields changed
      • addedInput schema / properties / source_taxed
        Added value: +{
        +  "description": "For a canton of the 1983 agreement (BE, SO, BS, BL, VD, VS, NE, JU): true when the employer withholds Swiss source tax in 2026 (the tax year of the open request, due 31/03/2027) — a condition of the frontalier status is not met (daily return — at most 45 nights a year full time and at most one a week —, 2041-AS, telework ≤ 40 %) or a Swiss national paid by a public-law employer. The request is then open.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / swiss_income / description
        Previous value: -"Income taxable in Switzerland (same currency as total_income)."New value: +"Household (you + spouse) gross income taxable in Switzerland (same currency as total_income)."
      • changedInput schema / properties / total_income / description
        Previous value: -"Total worldwide household income (same currency)."New value: +"Household (you + spouse) worldwide gross income (same currency)."
      • addedInput schema / properties / work_canton
        Added value: +{
        +  "description": "Swiss canton of work (code like GE, ZH, or name). A canton of the 1983 agreement is answered « not applicable » unless source_taxed is true. Omitted: the rule is answered with that condition stated.",
        +  "maxLength": 40,
        +  "type": "string"
        +}
    • Changedcompare_family_allowances7 fields changed
      • addedInput schema / properties / caf_income_band
        Added value: +{
        +  "description": "The household's CAF resources band (revenu net catégoriel of year N-2; service-public F13213): full rate, half or quarter. Omitted → full rate, and the result says so.",
        +  "enum": [
        +    "full",
        +    "half",
        +    "quarter"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / canton / description
        Previous value: -"Swiss border canton (GE, VD, JU, NE, BS, VS)."New value: +"Swiss canton of work — two-letter code, any of the 26 cantons."
      • changedInput schema / properties / canton / enum
        Previous value: -[
        -  "GE",
        -  "VD",
        -  "JU",
        -  "NE",
        -  "BS",
        -  "VS"
        -]New value: +[
        +  "AG",
        +  "AI",
        +  "AR",
        +  "BE",
        +  "BL",
        +  "BS",
        +  "FR",
        +  "GE",
        +  "GL",
        +  "GR",
        +  "JU",
        +  "LU",
        +  "NE",
        +  "NW",
        +  "OW",
        +  "SG",
        +  "SH",
        +  "SO",
        +  "SZ",
        +  "TG",
        +  "TI",
        +  "UR",
        +  "VD",
        +  "VS",
        +  "ZG",
        +  "ZH"
        +]
      • changedInput schema / properties / children / items / properties / age / description
        Previous value: -"Child's age."New value: +"Child's completed age."
      • changedInput schema / properties / children / items / properties / in_training / description
        Previous value: -"In education/training (extends eligibility)."New value: +"In post-compulsory training (training allowance from 15 at the earliest, until 25 at the latest — LAFam art. 3), or still at school after 16."
      • addedInput schema / properties / children / items / properties / incapable
        Added value: +{
        +  "description": "Unable to exercise a gainful activity (art. 7 LPGA): child allowance until 20.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / spouse_works_in_france / description
        Previous value: -"Does the spouse work in France? (triggers the EU differential)."New value: +"Does the OTHER parent have an activity in France (employed or self-employed) or an assimilated situation there (French unemployment, sickness or maternity benefits, paid leave, parental leave treated as activity — Decision F1)? Yes → the CAF pays first and Switzerland pays the difference (Reg. 883/2004 art. 68)."
    • Changedcompare_lamal_cmu5 fields changed
      • changedInput schema / properties / canton / description
        Previous value: -"Swiss border canton (GE, VD, JU, NE, BS, VS)."New value: +"Swiss canton of work — two-letter code, any of the 26 cantons."
      • changedInput schema / properties / canton / enum
        Previous value: -[
        -  "GE",
        -  "VD",
        -  "JU",
        -  "NE",
        -  "BS",
        -  "VS"
        -]New value: +[
        +  "AG",
        +  "AI",
        +  "AR",
        +  "BE",
        +  "BL",
        +  "BS",
        +  "FR",
        +  "GE",
        +  "GL",
        +  "GR",
        +  "JU",
        +  "LU",
        +  "NE",
        +  "NW",
        +  "OW",
        +  "SG",
        +  "SH",
        +  "SO",
        +  "SZ",
        +  "TG",
        +  "TI",
        +  "UR",
        +  "VD",
        +  "VS",
        +  "ZG",
        +  "ZH"
        +]
      • addedInput schema / properties / income_n2_eur
        Added value: +{
        +  "description": "The worker's OWN income of year N-2 in EUR, net, as declared (salaries + other own income; half of income held in common) — the base of the French contribution (CSS D. 380-2). Not the household revenu fiscal de référence.",
        +  "maximum": 5000000,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / salary_chf / description
        Previous value: -"Annual Swiss salary in CHF."New value: +"Annual gross Swiss salary in CHF — used only when income_n2_eur is missing, and then the French figure is an upper estimate."
      • changedInput schema / required
        Previous value: -[
        -  "salary_chf",
        -  "age",
        -  "canton"
        -]New value: +[
        +  "age",
        +  "canton"
        +]
  2. 2 tool updates
    • Changedcalculate_assistant_maternel_end_of_contract10 fields changed
      • addedInput schema / properties / agreed_end_date
        Added value: +{
        +  "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.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / approval_decision
        Added value: +{
        +  "description": "Approval ending only (assistant maternel): the conseil départemental's decision.",
        +  "enum": [
        +    "suspension",
        +    "modification",
        +    "retrait"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / approval_notified_date
        Added value: +{
        +  "description": "Approval ending only: the day the conseil départemental notified the decision — the contract ends on it (art. 119.3).",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / end_reason / description
        Previous value: -"Closed category matching the letter: 'employer_termination' (licenciement / retrait d'enfant), 'resignation' (démission), 'mutual_termination' (rupture conventionnelle — not available for assistants maternels)."New value: +"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)."
      • changedInput schema / properties / end_reason / enum
        Previous value: -[
        -  "employer_termination",
        -  "resignation",
        -  "mutual_termination"
        -]New value: +[
        +  "employer_termination",
        +  "resignation",
        +  "mutual_termination",
        +  "unfitness",
        +  "approval_withdrawn"
        +]
      • addedInput schema / properties / entretien_date
        Added value: +{
        +  "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.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / notification_date / description
        Previous value: -"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 signature date. Omit for durations only."New value: +"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."
      • addedInput schema / properties / sent_date
        Added value: +{
        +  "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.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / unfitness_opinion_date
        Added value: +{
        +  "description": "Unfitness only: the date of the occupational physician's final opinion; the rupture takes place within one month of it.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / unfitness_origin
        Added value: +{
        +  "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'.",
        +  "enum": [
        +    "occupational",
        +    "non_occupational"
        +  ],
        +  "type": "string"
        +}
    • Changedcalculate_home_employment_end_of_contract10 fields changed
      • addedInput schema / properties / agreed_end_date
        Added value: +{
        +  "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.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / approval_decision
        Added value: +{
        +  "description": "Approval ending only (assistant maternel): the conseil départemental's decision.",
        +  "enum": [
        +    "suspension",
        +    "modification",
        +    "retrait"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / approval_notified_date
        Added value: +{
        +  "description": "Approval ending only: the day the conseil départemental notified the decision — the contract ends on it (art. 119.3).",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / end_reason / description
        Previous value: -"Closed category matching the letter: 'employer_termination' (licenciement / retrait d'enfant), 'resignation' (démission), 'mutual_termination' (rupture conventionnelle — not available for assistants maternels)."New value: +"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)."
      • changedInput schema / properties / end_reason / enum
        Previous value: -[
        -  "employer_termination",
        -  "resignation",
        -  "mutual_termination"
        -]New value: +[
        +  "employer_termination",
        +  "resignation",
        +  "mutual_termination",
        +  "unfitness",
        +  "approval_withdrawn"
        +]
      • addedInput schema / properties / entretien_date
        Added value: +{
        +  "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.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / notification_date / description
        Previous value: -"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 signature date. Omit for durations only."New value: +"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."
      • addedInput schema / properties / sent_date
        Added value: +{
        +  "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.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / unfitness_opinion_date
        Added value: +{
        +  "description": "Unfitness only: the date of the occupational physician's final opinion; the rupture takes place within one month of it.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / unfitness_origin
        Added value: +{
        +  "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'.",
        +  "enum": [
        +    "occupational",
        +    "non_occupational"
        +  ],
        +  "type": "string"
        +}
  3. 3 tool updates
    • Changedcalculate_deposit_restitution8 fields changed
      • changedInput schema / properties / apply_provision / description
        Previous value: -"true to actually keep the copropriété provision in the figures (default false)."New value: +"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."
      • changedInput schema / properties / copropriete / description
        Previous value: -"true when the building is a copropriété: the landlord may keep a provision ≤ 20 % of the deposit until the annual charge settlement."New value: +"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)."
      • changedInput schema / properties / damages / items / properties / age_years / description
        Previous value: -"Age of the element in years (installed or last renewed). Defaults to 0."New value: +"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."
      • changedInput schema / properties / lease_type / description
        Previous value: -"'vide' unfurnished (deposit cap 1 month) or 'meuble' furnished (cap 2 months). Defaults to vide."New value: +"'vide' unfurnished (deposit cap 1 month) or 'meuble' furnished (cap 2 months). Never presumed: omitted, no cap is computed."
      • addedInput schema / properties / provision_amount
        Added value: +{
        +  "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.",
        +  "maximum": 1000000,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / provision_justification
        Added value: +{
        +  "description": "What justifies the provision (e.g. 'arrêté provisoire des comptes du 15/09/2026').",
        +  "maxLength": 300,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / properties / restitution_date / description
        Previous value: -"Date the deposit was / will be returned (ISO). Defaults to today — the penalty is computed against it."New value: +"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)."
      • changedInput schema / properties / tenant_gave_address / description
        Previous value: -"false when the tenant never gave a new address — the late penalty is then not due (art. 22). Defaults to true."New value: +"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."
    • Changedcalculate_rent_revision1 field changed
      • changedInput schema / properties / dpe_class / description
        Previous value: -"Dwelling's DPE class, if known — F or G blocks the revision (rent freeze)."New value: +"Dwelling's DPE class, if known — in a class F or G dwelling the revision cannot be applied (art. 17-1, III)."
    • Changedgenerate_rent_receipt5 fields changed
      • addedInput schema / properties / acknowledge_incomplete
        Added value: +{
        +  "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.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / issuedAt
        Added value: +{
        +  "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).",
        +  "maxLength": 120,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / properties / landlordName / description
        Previous value: -"Landlord's full name (bailleur)."New value: +"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."
      • changedInput schema / properties / paymentMethod / description
        Previous value: -"Payment method (e.g. 'Virement bancaire', 'Chèque'). Defaults to bank transfer."New value: +"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."
      • changedInput schema / properties / rentAmount / description
        Previous value: -"Rent excluding charges, in euros, as a string (e.g. '850' or '850.50')."New value: +"Rent RECEIVED, excluding charges, in euros, as a string (e.g. '850' or '850.50'). Above 0: a receipt of nothing is refused."
  4. 1 tool update
    • Addedcalculate_teletravail_frontalier
  5. 1 tool update
    • Addedcalculate_deposit_restitution
  6. 1 tool update
    • Addedgenerate_rent_receipt
  7. 1 tool update
    • Changedcalculate_rent_revision2 fields changed
      • changedInput schema / properties / reference_quarter / description
        Previous value: -"The IRL reference quarter named in the lease (trimestre de référence). Accepts forms like '2026-T2', 'T2 2026', 'Q2 2026'."New value: +"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."
      • addedInput schema / properties / revision_date
        Added value: +{
        +  "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.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Sourced, dated calculations for French income tax and pensions across 32 retirement schemes — every result carries its confidence level, its legal sources and the fiscal year, and returns non_calculable rather than a guess. Hosted remote MCP + REST, paid per call via x402 (USDC on Base); two discovery tools are free.
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to plan and price household employment in Switzerland (cleaner, nanny, carer), returning hiring checklists with real deadlines, employer costs and net wages, minimum-wage checks, and rules for all 26 cantons through read-only tools. Every figure is tied to its official source document and verification date.
    CC BY-4.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources