Comprehensive Model Context Protocol server for managing Home Assistant through AI assistants.
French Rental Compliance is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
FR/EN tools for French rental, frontalier & home-employment (CCN 3239) — sourced, dated answers.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http french-rental-compliance-mcp https://api.adminlanding.com/mcp
# 2 — ask your agent for something these tools do
# check_zone_tendue, calculate_tenant_notice_period, calculate_home_employment_end_of_contract and 10 more
French Rental Compliance costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http french-rental-compliance-mcp https://api.adminlanding.com/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
13 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
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 a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| insee_code | string | no | INSEE commune code (5 chars, e.g. 75056 for Paris, 2A004 for Ajaccio). Preferred when known — skips name resolution. |
| commune | string | no | Commune name, e.g. 'Lyon'. Used when insee_code is not provided. |
| code_postal | string | no | 5-digit postal code — disambiguates homonym communes. |
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 statutor
| Parameter | Type | Required | Notes |
|---|---|---|---|
| lease_type | string | yes | 'vide' = unfurnished, 'meuble' = furnished |
| insee_code | string | no | INSEE commune code (5 chars, e.g. 75056 for Paris, 2A004 for Ajaccio). Preferred when known — skips name resolution. |
| commune | string | no | Commune name, e.g. 'Lyon'. Used when insee_code is not provided. |
| code_postal | string | no | 5-digit postal code — disambiguates homonym communes. |
| zone_tendue | boolean | no | Explicit zone-tendue (first list) flag if already known — otherwise resolved from insee_code/commune. |
| ground_id | string | no | Statutory ground for the reduced 1-month notice on an unfurnished lease (art. 15 I). |
| reception_date | string | no | ISO date the LANDLORD RECEIVES the notice (LRAR reception, remise en main propre, or acte de commissaire) — never the sending date. |
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 senior
| Parameter | Type | Required | Notes |
|---|---|---|---|
| party | string | yes | Who is asking: 'employer' (particulier employeur) or 'employee' (salarié / assistant maternel). Wording only — the figures are identical for both. |
| end_reason | string | yes | 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 |
| start_date | string | yes | Contract start (ISO). |
| notification_date | string | no | 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 withdra |
| sent_date | string | no | 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 |
| entretien_date | string | no | 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. |
| unfitness_origin | string | no | Unfitness only: 'occupational' (work accident or occupational disease — the indemnity is doubled, art. 161.1.3 / 2/80 art. 119.5) or 'non_occupational'. |
| unfitness_opinion_date | string | no | Unfitness only: the date of the occupational physician's final opinion; the rupture takes place within one month of it. |
| approval_decision | string | no | Approval ending only (assistant maternel): the conseil départemental's decision. |
| approval_notified_date | string | no | Approval ending only: the day the conseil départemental notified the decision — the contract ends on it (art. 119.3). |
| agreed_end_date | string | no | 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. |
| as_of_date | string | no | 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 calcula |
| serious_misconduct | boolean | no | The letter states faute grave or faute lourde (a category chosen by the user — the tool does not assess it). Removes the notice and the indemnity by rule. |
| contract_type | string | no | '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 |
| cdd_end_date | string | no | contract_type 'cdd' only: the term of the contract with its renewals (the L.1243-2 notice counts on the total length). |
| cdd_reason | string | no | contract_type 'cdd' only: the motif (C. trav. art. L.1242-2) — 'seasonal' has no end-of-contract indemnity (L.1243-10, 1°). |
| leave_pay_mode | string | no | 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 |
| sector_months | number | no | 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 year |
| sector_months_last_84 | number | no | 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. |
| avg_60_months_gross | number | no | 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). Th |
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 en
| Parameter | Type | Required | Notes |
|---|---|---|---|
| party | string | yes | Who is asking: 'employer' (particulier employeur) or 'employee' (salarié / assistant maternel). Wording only — the figures are identical for both. |
| end_reason | string | yes | 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 |
| start_date | string | yes | Contract start (ISO). |
| notification_date | string | no | 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 withdra |
| sent_date | string | no | 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 |
| entretien_date | string | no | 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. |
| unfitness_origin | string | no | Unfitness only: 'occupational' (work accident or occupational disease — the indemnity is doubled, art. 161.1.3 / 2/80 art. 119.5) or 'non_occupational'. |
| unfitness_opinion_date | string | no | Unfitness only: the date of the occupational physician's final opinion; the rupture takes place within one month of it. |
| approval_decision | string | no | Approval ending only (assistant maternel): the conseil départemental's decision. |
| approval_notified_date | string | no | Approval ending only: the day the conseil départemental notified the decision — the contract ends on it (art. 119.3). |
| agreed_end_date | string | no | 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. |
| as_of_date | string | no | 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 calcula |
| serious_misconduct | boolean | no | The letter states faute grave or faute lourde (a category chosen by the user — the tool does not assess it). Removes the notice and the indemnity by rule. |
| contract_type | string | no | '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 |
| cdd_end_date | string | no | contract_type 'cdd' only: the term of the contract with its renewals (the L.1243-2 notice counts on the total length). |
| cdd_reason | string | no | contract_type 'cdd' only: the motif (C. trav. art. L.1242-2) — 'seasonal' has no end-of-contract indemnity (L.1243-10, 1°). |
| leave_pay_mode | string | no | 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 |
| sector_months | number | no | 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 year |
| sector_months_last_84 | number | no | 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. |
| avg_60_months_gross | number | no | 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). Th |
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étropolitai
| Parameter | Type | Required | Notes |
|---|---|---|---|
| dpe_class | string | yes | Energy class from the dwelling's DPE. |
| dpe_issue_date | string | no | ISO issue date of the DPE — enables the validity check. |
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)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| deposit | number | yes | Deposit paid at move-in (€). |
| rent_hors_charges | number | yes | Monthly rent en principal, excluding charges (€). |
| key_return_date | string | yes | Date the keys were handed back (remise des clés), ISO date — the deadline runs from this day. |
| edl_outcome | string | yes | 'identical' when the exit état des lieux matches the entry one (1-month deadline); 'differences' otherwise (2 months). |
| restitution_date | string | no | 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.assum |
| lease_type | string | no | 'vide' unfurnished (deposit cap 1 month) or 'meuble' furnished (cap 2 months). Never presumed: omitted, no cap is computed. |
| tenant_gave_address | boolean | no | 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. |
| copropriete | boolean | no | 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 |
| provision_amount | number | no | 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 st |
| provision_justification | string | no | What justifies the provision (e.g. 'arrêté provisoire des comptes du 15/09/2026'). |
| apply_provision | boolean | no | 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. |
| damages | array | no | Damage lines to apportion. Omit for a full restitution. |
| perspective | string | no | Who is asking — changes only the next_steps wording, never the figures. |
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
| Parameter | Type | Required | Notes |
|---|---|---|---|
| current_rent | number | yes | Current monthly rent excluding charges (hors charges), in euros. |
| reference_quarter | string | yes | 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, |
| revision_date | string | no | 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 take |
| dpe_class | string | no | Dwelling's DPE class, if known — in a class F or G dwelling the revision cannot be applied (art. 17-1, III). |
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 o
| Parameter | Type | Required | Notes |
|---|---|---|---|
| gross_chf_annual | number | yes | Gross annual salary in CHF. |
| age | integer | yes | Employee age (affects LPP rate). |
| canton | string | yes | Swiss canton of work supported by the net-salary engine (GE, VD, JU, NE, BS, VS). |
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 an
| Parameter | Type | Required | Notes |
|---|---|---|---|
| income_n2_eur | number | no | 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 |
| salary_chf | number | no | Annual gross Swiss salary in CHF — used only when income_n2_eur is missing, and then the French figure is an upper estimate. |
| age | integer | yes | Worker's age. |
| canton | string | yes | Swiss canton of work — two-letter code, any of the 26 cantons. |
| children_ages | array | no | Ages of dependants (optional) — priced by band (≤18 / 19-25 / 26+). |
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 retu
| Parameter | Type | Required | Notes |
|---|---|---|---|
| telework_days_per_week | number | yes | Days per week worked from home in France (fractions allowed, e.g. 1.5). |
| days_per_week | number | no | Contractual working days per week (1–7). Default 5. |
| mission_days_per_year | integer | no | Temporary mission days per year in France or a third country — only the first 10 count inside the telework allowance. |
| swiss_employment_start | string | no | 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 Franc |
| france_move_date | string | no | 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). |
| as_of_date | string | no | YYYY-MM-DD reference date for the option window (default: today) — makes the answer reproducible. |
| work_canton | string | no | 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 regime |
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 a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| canton | string | yes | Swiss canton of work — two-letter code, any of the 26 cantons. |
| children | array | yes | The children (at least one). |
| spouse_works_in_france | boolean | no | 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 |
| caf_income_band | string | no | 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. |
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 (
| Parameter | Type | Required | Notes |
|---|---|---|---|
| swiss_income | number | yes | Household (you + spouse) gross income taxable in Switzerland (same currency as total_income). |
| total_income | number | yes | Household (you + spouse) worldwide gross income (same currency). |
| work_canton | string | no | 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. |
| source_taxed | boolean | no | 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 f |
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 leg
| Parameter | Type | Required | Notes |
|---|---|---|---|
| landlordName | string | yes | 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 |
| landlordAddress | string | yes | Landlord's address. |
| tenantName | string | yes | Tenant's full name (locataire) as it must appear on the receipt. |
| propertyAddress | string | yes | Address of the rented dwelling. |
| periodFrom | string | yes | Rental period start (ISO date, e.g. 2026-08-01). |
| periodTo | string | yes | Rental period end (ISO date). The receipt month is derived from this date. |
| paymentDate | string | yes | Date the landlord RECEIVED the payment (ISO date). |
| rentAmount | string | yes | Rent RECEIVED, excluding charges, in euros, as a string (e.g. '850' or '850.50'). Above 0: a receipt of nothing is refused. |
| chargesAmount | string | yes | Charges (provisions/forfait), in euros, as a string ('0' if none). |
| paymentMethod | string | no | 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. |
| issuedAt | string | no | 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 Fra |
| acknowledge_incomplete | boolean | no | 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 ch |
| includeEnglish | boolean | no | Append a non-binding English reference translation as the last page. The legal document itself stays French. |
| locale | string | no | Filename/interface language only — the document is always issued in French (required for validity). Default fr. |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install French Rental Compliance or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| check_zone_tendue | no tags | |
| calculate_tenant_notice_period | no tags | |
| calculate_home_employment_end_of_contract | no tags | |
| calculate_assistant_maternel_end_of_contract | no tags | |
| check_dpe_rental_restrictions | no tags | |
| calculate_deposit_restitution | no tags | |
| calculate_rent_revision | no tags | |
| calculate_net_swiss_salary | no tags | |
| compare_lamal_cmu | no tags | |
| calculate_teletravail_frontalier | no tags | |
| compare_family_allowances | no tags | |
| check_geneva_quasi_resident | no tags | |
| generate_rent_receipt | state-write | state-write: declares readOnlyHint: false |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.20.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish French Rental Compliance can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.