Skip to main content
Glama

Server Details

Calcul fiscal et retraite français, déterministe et sourcé. Aucun conseil.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
marcel-retraite/marcel-mcp
GitHub Stars
0

TDQS

A3.9/5.0

Scored across 11 tools

Disambiguation4/5

Each simulate_* tool targets a distinct fiscal regime (AV, CTO, PEA, PER, IFI, Dutreil, cumul, pension), and the meta-tools compare_certified and validate_results have clearly different outputs. The only minor overlap is between acheter_louer's built-in comparison and the generic compare_certified, but descriptions differentiate them.

Naming Consistency3/5

All names use snake_case, but conventions are mixed: French infinitive (acheter_louer), English verbs (compare, validate, simulate), a marcel_ prefix on one tool, and verb+verb vs verb+noun patterns. The simulate_ prefix is not applied consistently across simulation tools.

Tool Count5/5

11 tools is well within the 3-15 range; each tool corresponds to a distinct fiscal calculation or validation step, and none feels redundant.

Completeness3/5

The set covers major asset classes (immobilier, AV, PEA, CTO, PER) and taxes (IFI, Dutreil, cumul, pension), but lacks a general income tax simulator and a standalone succession/donation tool outside AV and Dutreil. These are notable gaps for a comprehensive patrimoine simulator.

Available Tools

11 tools
acheter_louerAcheter ou louer sa résidence principaleA
Read-onlyIdempotent
Inspect

Compare, dans le temps, le patrimoine d'un acheteur de résidence principale et celui d'un locataire. Entrées : prix, apport, loyer annuel, et éventuellement crédit, frais, département, date d'acte, charges, horizon et hypothèses d'évolution. Absents, les taux, la durée, les frais de notaire, la résidence principale, l'évolution des prix et des loyers et le rendement de l'apport prennent les valeurs publiées dans hypothesesVersion et hypotheses (Livret A, taux et durée Banque de France, frais de notaire estimés, prix et loyers constants). Sortie : écart de patrimoine année par année, point_mort (énoncé et limite), coûts en quatre blocs (acquisition, financement, détention, sortie), hors_assurance, a_demander (deux questions au plus) et une grille. Un résultat qui repose sur une hypothèse par défaut est indicatif. La réponse ne contient pas de champ de décision.

ParametersJSON Schema
NameRequiredDescriptionDefault
prixNo
apportNo
creditNoCaractéristiques du crédit. Absentes : taux et durée Banque de France, inscrits dans hypotheses. L'assurance et la quotité d'un couple restent des entrées lorsqu'elles sont connues.
detailNocompact : sans échéancier du crédit ni lignes par année. complet : avec l'échéancier. Absent : compact.
travauxNo
date_acteNoDate de l'acte au format AAAA-MM-JJ. Avec le département, le barème DGFiP remplace l'estimation des frais.
departementNoCode département, par exemple 75, 2A, ou 69M pour Lyon.
horizon_maxNoHorizon en années. Absent : 30 ans, et la grille est publiée.
frais_entreeNoFrais d'acquisition. Absents, et sans département : estimation publiée par le calcul. null : zéro explicite.
loyer_annuelNo
evolution_prixNoÉvolution annuelle du prix. Absente : 0, avec +1 % et +2 % dans la grille.
frais_de_venteNo
primo_accedantNotrue lorsque l'acheteur est primo-accédant.
evolution_loyerNoÉvolution annuelle du loyer. Absente : loyer constant, inscrit dans hypotheses.
rendement_apportNoRendement annuel de l'apport non investi dans le logement. Absent : taux du Livret A, hypothèse de référence sans risque, avec son plafond dans hypotheses.
charges_annuellesNo
frais_acquisitionNoAssiette des frais d'acquisition pour une plus-value hors résidence principale : forfait, ou reels (égal à frais_entree). Sans effet pour une résidence principale.
taxe_fonciere_annuelleNo
charges_locatives_annuellesNo
patrimoine_immobilier_taxableNo
residence_principale_au_moment_de_la_venteNoRésidence principale au moment de la vente. Absente pour un logement : le calcul retient la résidence principale et l'inscrit dans hypotheses.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description goes further by disclosing which parameters fall back to published hypotheses (Livret A rate, Banque de France rate/duration, notary fees, constant prices/rents) and by stating the response contains no decision field and only up to two clarifying questions ('a_demander'). That is meaningful behavioral context 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.

Conciseness4/5

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

Purpose is front-loaded, followed by inputs, defaults, output shape, and caveats in a logical order. The single long sentence about defaults is dense but each clause (taux, durée, frais de notaire, évolution) earns its place; there is little filler.

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 21-parameter tool with no output schema, the description supplies the return structure (year-by-year wealth gap, point_mort, four cost blocks, hors_assurance, a_demander, grid), which the schema cannot convey. It is complete enough to call correctly, though the absence of explicit usage routing leaves one gap.

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 description lists the input families (prix, apport, loyer, crédit, frais, département, date d'acte, charges, horizon, hypothèses) and, more importantly, explains the default behavior for omitted values tied to hypothesesVersion/hypotheses. With schema coverage at 57%, the prose compensates for the undocumented parameters, though not exhaustively for all 21.

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 sentence states a precise verb and resource: comparing the wealth trajectory of a primary-residence buyer versus a renter over time. That object is unambiguous and clearly distinct from the sibling simulation tools (pension, AV, CTO, IFI), so an agent can route here without opening the schema.

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 defines the input domain and the default-hypothesis behavior, which implies when the tool applies, but it never states when to prefer it over an alternative or names any sibling. It also flags that default-based results are 'indicatif', a useful caveat, yet provides no explicit when-to-use guidance.

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

compare_resultsComparer deux scénarios déjà calculés
Read-onlyIdempotent
Inspect

Compare deux listes de résultats Marcel déjà calculés. Entrées : scenarioA et scenarioB, chacune une liste de résultats. Sortie : écarts du scénario B moins le scénario A. La réponse ne contient pas de patrimoine net agrégé. Un moteur au statut blocked n'a pas de delta chiffrable.

ParametersJSON Schema
NameRequiredDescriptionDefault
scenarioAYes
scenarioBYes
marcel_estimate_pensionEstimer une pension de retraite bruteA
Read-onlyIdempotent
Inspect

Estime la pension de retraite brute. Entrées : année et mois de naissance, âge de départ, régime (CNAV_AGIRC ou CARRIERE_MIXTE), SAM, trimestres, points Agirc-Arrco, éléments de carrière libérale, revenu fiscal de référence de l'avis d'imposition (rfr) et de l'avis précédent (rfrPrecedent). Sortie : pension brute. Le net du foyer, pensionNetMonthly, est chiffré lorsque rfr est fourni ; sinon ce champ est null. Sans rfrPrecedent, le taux médian ou normal n'est pas appliqué : le résultat reste indicatif, au taux réduit.

ParametersJSON Schema
NameRequiredDescriptionDefault
rfrNo
regimeYes
samSaisiNo
birthYearYes
birthMonthNoMois de naissance, de 1 à 12. Pour 1965, janvier à mars et avril à décembre n'ont pas le même âge ni la même durée. Absent : le résultat reste indicatif.
pointsAgircNoPoints Agirc-Arrco totaux. 0 est une valeur valide.
pointsCNAVPLNo
rfrPrecedentNoRevenu fiscal de l'avis précédent. Son année est celle de rfr moins un. À défaut, le champ est ignoré : le résultat reste indicatif, et le taux médian ou normal n'est pas appliqué.
trimestresRGNo
retirementAgeNo
trimestresLiberalNo
pointsComplementaireNo
anneesAffiliationCipavNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed world), and the description adds genuine behavioral detail beyond them: pensionNetMonthly is null unless rfr is provided, and without rfrPrecedent the median/normal rate is skipped and the result is a reduced-rate estimate. This conditional-output behavior is exactly the kind of context annotations cannot convey.

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?

Front-loads the purpose, then groups inputs, then output behavior in three sentences with no filler. Dense but every sentence carries information; only the long input enumeration is slightly list-like.

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 13-parameter tool with nested objects, no output schema, and thin schema descriptions, the definition covers purpose, the key output field (pensionNetMonthly) and the rfr/rfrPrecedent conditions well. Remaining gaps concern the meaning of the less-common numeric inputs, which lowers it from a 5.

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 only 23%, so the description must compensate: it enumerates most inputs (birth year/month, retirement age, regime, SAM, quarters, Agirc-Arrco points, liberal-career elements, rfr/rfrPrecedent) and clarifies the rfr/rfrPrecedent relationship (previous year = rfr year minus one). But it gives no semantics for samSaisi, trimestresRG, pointsCNAVPL, etc., so the low-coverage gap is only partly filled.

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?

States a specific verb ("Estime") and resource ("pension de retraite brute"), so an agent knows exactly what is computed. It is clearly distinct from the simulate_* siblings by domain (retirement pension), though it never names or routes to an alternative explicitly.

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?

Implicit guidance is present: the description explains that the result is "indicatif" without rfrPrecedent and that the net field is only populated when rfr is supplied. However, there is no explicit when-to-use / when-not-to-use framing or reference to the many simulate_* sibling tools.

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

simulate_avFiscalité d'un contrat d'assurance-vieA
Read-onlyIdempotent
Inspect

Calcule la fiscalité d'un contrat d'assurance-vie : rachat, avance ou transmission (CGI art. 125-0 A, 990 I, 757 B et 777). Entrées : valeur du contrat, total des versements, ancienneté en années, objet du calcul, et, pour une transmission, primes par âge au versement et bénéficiaires (lien, quote-part). Sortie : montants de rachat, d'avance ou transmis. netRachat est un net de contrat, distinct du net du foyer. Le régime de transmission suit l'âge de l'assuré à chaque prime : avant 70 ans, CGI art. 990 I ; à partir de 70 ans, CGI art. 757 B (abattement de 30 500 euros par assuré, partagé au prorata, primes seules taxées), puis CGI art. 777 selon le lien. Sans primesParAge ou beneficiairesTransmission, le calcul de transmission est refusé.

ParametersJSON Schema
NameRequiredDescriptionDefault
tmiNoTMI du foyer en taux décimal (0.30 pour 30 %), lorsqu'elle est fournie. Absente : l'option pour le barème n'est pas chiffrée.
ageAssureNoÂge actuel de l'assuré. Le régime de transmission suit l'âge à chaque prime, pas cet âge.
objetCalculYes
plusValuesUCNoGains d'unités de compte. Les prélèvements sociaux de 17,2 % portent sur cette part.
primesParAgeNoPrimes avec l'âge de l'assuré au versement. Entrée du calcul de transmission. Absente : ce calcul est refusé.
ancienneteAnsYes
montantRachatNo
valeurContratYes
nbBeneficiairesNoNombre de bénéficiaires. La transmission se calcule à partir de beneficiairesTransmission.
primesAvant2017NoPrimes de ce contrat versées avant le 27/09/2017. Absentes : toutes les primes sont traitées comme postérieures à cette date.
versementsTotalYes
situationFamilialeNoPersonne seule ou couple.
primesTotalesAssureNoPrimes de tous les contrats de l'assuré encore investies, pour le seuil de 150 000 euros.
plusValuesFondsEurosNoGains du fonds en euros. Avec plusValuesUC, entrée du calcul lorsque le contrat a des gains.
beneficiairesTransmissionNoBénéficiaires de la transmission : lien de parenté et quote-part. Absents : le calcul de transmission est refusé.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false. The description adds meaningful behavioral context beyond them: it explains that missing transmission inputs cause refusal, that netRachat is a contract net distinct from household net, and details the age-based transmission tax regime and allowance sharing.

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 front-loaded: purpose first, then inputs, outputs, the netRachat caveat, the transmission regime, and the refusal condition. Every sentence contributes to a complex tax-calculation tool, though the paragraph could be slightly more scannable for 15-parameter invocation.

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 tool's complexity (15 parameters, nested arrays, no output schema), the description adequately covers purpose, required inputs, output amounts, tax regime rules, and refusal conditions. It lacks explicit sibling-tool routing and does not explain all optional parameter nuances, but the schema and annotations fill most remaining gaps.

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?

With 67% schema description coverage across 15 parameters, the schema carries much of the load. The description names the main required inputs and the transmission-specific structures (primesParAge, beneficiairesTransmission with lien and quote-part), but it does not clarify several optional parameters such as tmi, plusValuesUC, primesAvant2017, or the significance of ageAssure versus age at payment.

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: calculating the tax treatment of a life insurance contract (assurance-vie), with explicit modes rachat, avance, and transmission. The resource clearly distinguishes it from sibling simulators for CTO, PEA, PER, IFI, and Dutreil, so an agent can route correctly without opening the schema.

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?

Explains the required inputs and that transmission calculation is refused without primesParAge or beneficiairesTransmission, which gives clear invocation conditions. However, it does not explicitly say when to use this tool versus sibling simulators such as simulate_cto or simulate_pea, so usage guidance remains implied rather than explicit.

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

simulate_ctoFiscalité d'un compte-titres ordinaireA
Read-onlyIdempotent
Inspect

Calcule, pour une année, la fiscalité d'un compte-titres ordinaire d'une personne physique (CGI art. 200 A, 158, 150-0 A et 150-0 D). Entrées : plus-values, moins-values, dividendes, intérêts, option pour le barème, revenu imposable du foyer hors prélèvement forfaitaire, nombre de parts, situation, revenu fiscal de référence, dispense, moins-values reportables et plus-values de titres acquis avant 2018. Sortie : impôt sur le revenu et prélèvements sociaux, séparés. Par défaut, prélèvement forfaitaire. L'option globale pour le barème est chiffrée lorsque le revenu imposable hors ces revenus et le nombre de parts sont fournis ; sinon le résultat est le forfait et indique que l'option n'est pas chiffrée. Les moins-values s'imputent sur les seules plus-values, avec un report de dix ans.

ParametersJSON Schema
NameRequiredDescriptionDefault
anneeNoAnnée des revenus. Seule 2026 est couverte. Absente : 2026, indiqué dans le résultat.
partsNoNombre de parts du foyer. Absent : l'option pour le barème n'est pas chiffrée.
interetsNoIntérêts et coupons bruts.
situationNoSeul ou couple. Sert à la dispense de prélèvement forfaitaire non libératoire. Absente : la dispense n'est pas appréciée.
dividendesNoDividendes bruts.
plusValuesNoPlus-values de cession de l'année, avant imputation des moins-values. Zéro est un gain nul.
moinsValuesNoMoins-values de cession de la même année.
dispensePfnlNoDispense de prélèvement forfaitaire non libératoire demandée dans le délai. Absente : le prélèvement est retenu.
optionBaremeNoOption globale annuelle pour le barème. Absente : prélèvement forfaitaire.
plusValuesAvant2018NoTitres acquis avant 2018. L'abattement pour durée de détention s'applique avec l'option pour le barème.
moinsValuesReportablesNoMoins-values des années antérieures encore reportables, une ligne par année.
revenuImposableHorsPfuNoRevenu imposable du foyer hors dividendes, intérêts et plus-values du prélèvement forfaitaire. Zéro est un revenu nul. Absent : l'option pour le barème n'est pas chiffrée.
revenuFiscalReferenceN2NoRevenu fiscal de référence de l'avant-dernière année, lorsqu'il est connu.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish the safe, deterministic profile (readOnlyHint, idempotentHint, openWorldHint=false), so the bar is lower; the description still adds real behavior: output split into IR and prélèvements sociaux, the default-vs-option fallback behavior, and the loss-offset/carry-forward rule. It stops short of 5 only because permission/dependency requirements are not discussed.

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?

Purpose and scope are front-loaded, followed by inputs, outputs, default behavior, and conditional behavior in a logical order with no filler sentences. It is dense and somewhat long, but each clause carries information an agent needs.

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 13 optional parameters and no output schema, the description carries the burden well: it enumerates the input categories, states the return structure (IR and PS, separated), and explains the conditional regimes. Nothing essential for calling it correctly appears missing.

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 100%, so the baseline is 3, but the description adds domain meaning the schema does not: losses impute only against gains with a ten-year carry-forward, the abattement for pre-2018 holdings applies only under the barème option, and the fallback behavior when parts/revenuImposableHorsPfu are absent.

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 ('Calcule ... la fiscalité d'un compte-titres ordinaire d'une personne physique') with the governing CGI articles, which cleanly separates it from the sibling simulators (simulate_pea, simulate_av, simulate_ifi, simulate_dutreil, simulate_per_sortie). An agent can route to it 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?

It sets the default regime ('Par défaut, prélèvement forfaitaire') and the exact conditions under which the barème alternative is computed ('lorsque le revenu imposable hors ces revenus et le nombre de parts sont fournis'), which effectively guides invocation. It does not, however, explicitly name or exclude sibling tools, so it stops short of a 5.

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

simulate_cumulCumul emploi-retraiteA
Read-onlyIdempotent
Inspect

Calcule le cumul emploi-retraite d'un salarié du régime général : cumul intégral ou plafonné, et écrêtement des pensions (CSS art. L. 161-22 ; à partir du 1er janvier 2027, LFSS 2026, art. 102). Entrées : âge, âge légal, taux plein, liquidation des pensions, pensions brutes mensuelles de base et complémentaire, revenu d'activité brut mensuel, salaire de référence des 3 derniers mois, date d'entrée en jouissance. Sortie : montants bruts mensuels, régime applicable, et totalRetenu, assiette comparée au plafond. Avant 2027, totalRetenu additionne les pensions brutes et l'activité retenue à 98,25 %. À partir de 2027, totalRetenu est le seul revenu d'activité. totalRetenu est null lorsqu'aucun plafond ne s'applique. dateEntreeJouissance sélectionne le droit applicable. Absente : règles en vigueur jusqu'au 31 décembre 2026, avec un texte dans avertissements. Indépendants, fonction publique et régimes spéciaux sont hors de ce calcul.

ParametersJSON Schema
NameRequiredDescriptionDefault
ageYesÂge de la personne.
ageLegalYesÂge légal de départ de la génération, lorsqu'il est connu.
tauxPleinYestrue lorsque la durée d'assurance requise est atteinte, ou à 67 ans.
pensionBaseYesPension de base brute mensuelle.
revenuActiviteYesRevenu d'activité brut mensuel de la reprise.
pensionsLiquideesYestrue lorsque toutes les pensions, de base et complémentaires, sont liquidées.
dateEntreeJouissanceNoDate d'entrée en jouissance de la première pension de base, au format AAAA-MM-JJ.
pensionComplementaireYesPension complémentaire brute mensuelle (Agirc-Arrco).
salaireReference3MoisYesMoyenne brute mensuelle des 3 derniers mois de salaire avant la liquidation.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/non-destructive, and the description adds substantial contextual behavior: the 2026 vs 2027 regime switch, the 98.25% abatement before 2027, that totalRetenu becomes activity income only after 2027, that totalRetenu is null when no plafond applies, and the default behavior (avertissements) when the date is absent.

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 well front-loaded: purpose and legal basis first, then Entrées, then Sortie, then the regime mechanics. Every sentence carries domain information, though the enumeration of inputs is somewhat redundant with a 100%-covered schema.

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 carries the return-value burden and does so (montants bruts mensuels, régime applicable, totalRetenu, assiette comparée au plafond). Combined with the legal-transition and null-semantics notes, an agent has everything needed to invoke 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 genuine meaning beyond the schema for dateEntreeJouissance, explaining it selects the applicable droit and that its absence falls back to rules in force until 31 December 2026. The remaining parameters are enumerated without much extra syntax detail.

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 (calcule) and resource (cumul emploi-retraite) with the two possible outcomes (cumul intégral ou plafonné) and the écrêtement mechanism. Scope boundaries are explicit, ruling out indépendants, fonction publique and régimes spéciaux, which cleanly separates it from sibling simulate_* tools.

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?

Exclusions are clearly stated (indépendants, fonction publique, régimes spéciaux hors de ce calcul), and it explains that dateEntreeJouissance selects the applicable droit. However, it never names a sibling tool or says when to prefer this over alternatives, so it falls short of an explicit when/when-not routing.

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

simulate_dutreilTransmission d'entreprise : chemins DutreilA
Read-onlyIdempotent
Inspect

Calcule quatre chemins de transmission d'entreprise, avec et sans pacte Dutreil (CGI art. 787 B). Entrées : valeur des titres, prix de revient, nombre d'enfants, âge du dirigeant, horizon de cession, durées d'engagement collectif et individuel. Sortie : coût fiscal de chaque chemin. Lorsque l'horizon de cession ne dépasse pas la somme de ces durées, le résultat contient un avertissement de conflit temporel.

ParametersJSON Schema
NameRequiredDescriptionDefault
eccDureeNo
eicDureeNo
nbEnfantsYes
tmiFranceNoTaux marginal d'imposition en France, en décimal. Cette entrée n'entre pas dans le calcul.
prixRevientYes
ageDirigeantYes
valeurTitresYes
horizonCessionNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description only needs to add context, which it does: it names the output (fiscal cost per path) and discloses conditional behavior – a temporal-conflict warning is emitted when the sale horizon does not exceed the sum of the collective and individual commitment durations. It stops short of describing the exact return shape or units.

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

Conciseness5/5

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

Three tight sentences: purpose first, inputs second, output and edge-case behavior third. No filler, and the warning condition is stated where an agent will see it.

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

Completeness3/5

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

For an eight-parameter tool with no output schema and sparse schema descriptions, the definition covers the essentials (inputs, output, one warning case). Gaps remain: units for the duration/horizon parameters, defaults for the four optional inputs, and the treatment of tmiFrance, which the schema says does not enter the calculation.

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 only 13%, so the description must compensate. It enumerates seven of the eight inputs (share value, cost basis, number of children, director age, sale horizon, collective and individual commitment durations), which helps agents map business concepts to parameters, but it adds no units, defaults, or constraints for the optional parameters.

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 (Calcule) and a precisely scoped resource: four business-transmission paths with and without the Dutreil pact, anchored to CGI art. 787 B. This clearly separates it from siblings like simulate_av, simulate_cto, or simulate_ifi, which cover other tax vehicles.

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 input list implies the context (business owners planning a transfer with children), but the description never says explicitly when to pick this tool over the other simulate_* siblings, nor does it state preconditions or exclusions.

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

simulate_ifiCalcul de l'IFIA
Read-onlyIdempotent
Inspect

Calcule l'IFI (CGI art. 964 à 979) : assiette, barème, décote et plafonnement. Entrées : actifs immobiliers et leur quote-part, passifs, revenu fiscal de référence, impôt sur le revenu estimé, âge. Sortie : IFI dû. Entre 1 300 000 et 1 400 000 euros de patrimoine net taxable, la décote de l'art. 977 (17 500 euros moins 1,25 % du patrimoine) est une ligne séparée, ligneDecote. La quote-part immobilière d'une SCPI est l'entrée quotePartImmo. Le plafonnement utilise le revenu fiscal de référence fourni.

ParametersJSON Schema
NameRequiredDescriptionDefault
ageNo
actifsYes
passifsYes
irEstimeYes
revenusFiscauxReferenceYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=false). The description adds useful behavioral context beyond annotations: the décote is returned as a separate line (ligneDecote), quotePartImmo maps to the SCPI real-estate share, and the plafonnement uses the provided revenu fiscal de référence. It does not fully describe the output shape, but with no output schema it is reasonably transparent.

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 front-loads purpose, then inputs, output, and special calculation rules. Every sentence earns its place, though the single-paragraph French structure could be more scannable with separation between inputs, outputs, and caveats.

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 a complex tax simulation with no output schema, the description adequately covers purpose, required inputs, output value, and special rules (décote threshold, plafonnement). Annotations handle safety, and the schema handles structural validation; remaining gaps are detailed meanings of nested enum/boolean fields, which are minor for correct invocation.

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 0%, so the description must supply parameter meaning. It lists the main top-level inputs and clarifies quotePartImmo for SCPI, but it omits details for nested fields such as the actif 'type' enum values, the passif 'deductible' flag, and the role of 'age'. It adds partial semantic value but does not fully compensate for the empty schema 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?

States a precise verb ('Calcule') and resource (IFI), with legal references and the exact components computed (assiette, barème, décote, plafonnement). An agent can immediately distinguish this from sibling simulations like simulate_av or simulate_pea.

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 gives clear context by naming the domain (IFI) and listing required inputs, which implies when the tool is relevant. However it does not explicitly state when to use it versus sibling tools, nor does it mention exclusions or alternatives.

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

simulate_peaFiscalité d'une sortie de PEAA
Read-onlyIdempotent
Inspect

Calcule la fiscalité d'une sortie de PEA (CGI art. 157) : clôture, rente, rachat partiel ou comparaison. Entrées : valeur actuelle, total des versements, ancienneté en années, objet du calcul, et éventuellement TMI, âges, rendement et montant du rachat. Sortie : impôt, prélèvements sociaux et net de sortie. Après 5 ans : exonération d'impôt sur le revenu, prélèvements sociaux au taux général du registre, distinct du taux de l'assurance-vie. Sans versementsTotal, les gains ne sont pas estimés.

ParametersJSON Schema
NameRequiredDescriptionDefault
tmiNoTMI du foyer en taux décimal (0.30 pour 30 %), lorsqu'elle est fournie.
ageActuelNoÂge actuel. Entrée d'une projection ou d'une rente.
valeurPEAYesValeur actuelle du PEA.
ageRetraiteNoÂge de sortie. Absent, et sans rendement : calcul sur la valeur actuelle, sans projection.
objetCalculYes
ancienneteAnsYesAncienneté du plan en années. Le régime dépend du seuil de 5 ans.
montantRachatNoMontant du retrait. Entrée lorsque objetCalcul vaut rachat_partiel.
rendementAnnuelNoRendement annuel fourni par l'appelant. Absent : aucune projection à ce taux.
versementsTotalYesTotal des versements sur le plan. Absent : les gains ne sont pas calculés.

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the read-only/idempotent annotations, the description discloses the tax regime after 5 years, the distinct social-levy treatment versus assurance-vie, the returned figures, and the caveat that without versementsTotal gains are not estimated. This adds substantive behavioral context for a calculation tool.

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 purpose, then lists inputs, outputs, a tax rule, and a caveat. It is dense but appropriately sized for a complex fiscal simulator, though the single long paragraph could be structured more sharply.

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 supplies the return values and a key tax rule. It is fairly complete for a multi-mode tax calculator, but it omits the pre-5-year PEA regime and does not detail how rente or rachat partiel are treated.

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 89%, so the description need not repeat every parameter meaning. It still adds cross-parameter semantics: versementsTotal controls whether gains are estimated, ancienneteAns drives the 5-year threshold, and the objetCalcul modes are enumerated.

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: 'Calcule la fiscalité d'une sortie de PEA', then scopes it with the four calculation modes. It also distinguishes the PEA social-levy treatment from assurance-vie, which helps separate it from the sibling simulate_av 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?

The description makes clear this is for PEA exit taxation and lists the calculation modes that select the tool's use. It does not explicitly name which sibling to use instead in all cases, though it does contrast the tax rate with assurance-vie.

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

simulate_per_sortieFiscalité d'une sortie de PERA
Read-onlyIdempotent
Inspect

Calcule la fiscalité d'une sortie de PER, en capital, en rente, en rente réversible ou en comparaison. Entrées : capital, versements déduits et non déduits, âge de sortie, pension annuelle brute du foyer hors PER, nombre de parts, objet du calcul, et éventuellement les TMI. Sortie : impôt sur le revenu, égal à la différence de barème du foyer avec et sans le flux, et prélèvements sociaux. tmiRetraite est une entrée de comparaison, distincte du taux appliqué à la sortie. Capital : versements déduits imposés comme des pensions, sans abattement de 10 % (BOI-RSA-PENS-30-10-20), versements non déduits exonérés, gains au prélèvement forfaitaire du registre. Rente : même différence de barème ; prélèvements sociaux au taux général sur la fraction d'âge de toute la rente.

ParametersJSON Schema
NameRequiredDescriptionDefault
partsYesNombre de parts du foyer.
tmiActuelNoTMI actuelle en taux décimal (0.30 pour 30 %), lorsqu'elle est fournie.
capitalPERYesCapital accumulé dans le PER.
horizonAnsNo
ageRetraiteYesÂge au moment de la sortie.
objetCalculYes
tmiRetraiteNoTMI à la retraite, en taux décimal. Distincte du taux appliqué à la sortie. Sert à la comparaison avec tmiActuel lorsque les deux sont fournis.
rendementAnnuelNo
versementsDeduitsYesVersements déduits du revenu imposable.
pensionAnnuelleBruteYesPension annuelle brute du foyer hors PER. L'impôt vaut l'impôt sur le revenu de la pension augmentée du flux, moins l'impôt sur le revenu de la pension seule.
versementsNonDeduitsNoVersements non déduits. Absents : 0. Exonérés d'impôt à la sortie en capital. En rente, leur quote-part suit la fraction d'âge pour l'impôt sur le revenu.
tauxReversionConjointNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent/non-destructive, so the bar is lower, yet the description goes further by disclosing the output semantics (impôt sur le revenu = foyer barème difference with vs. without the flow, plus prélèvements sociaux) and the tax-law treatment for capital vs. rente. It omits edge behavior such as rounding, error cases, or multi-year (horizonAns) handling, keeping 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.

Conciseness4/5

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

Purpose and inputs are front-loaded before the denser tax-treatment detail, and the length is justified by the tool's complexity. There is mild redundancy ('même différence de barème' restated for rente), but overall every sentence carries substance.

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 carries the burden of describing the return values and the tax logic. It is complete for the capital/rente paths but leaves the reversible-annuity and multi-year parameters (tauxReversionConjoint, horizonAns, rendementAnnuel) undocumented.

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 67%, so schema does most of the work and baseline is a 3. The description usefully clarifies tmiRetraite as a distinct comparison input and lists the main entries, but three parameters (horizonAns, rendementAnnuel, tauxReversionConjoint) receive no explanation in either schema or description, so it does not fully close the coverage gap.

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 opens with a specific verb+resource ('Calcule la fiscalité d'une sortie de PER') and enumerates the four supported calculation modes (capital, rente, rente réversible, comparaison). It is clearly distinct from the product-specific siblings (simulate_av, simulate_cto, simulate_pea) but never names an alternative to route against.

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 only implied through the objetCalcul modes and the note that tmiRetraite 'sert à la comparaison'. There is no explicit when-to-use guidance, no prerequisites, and no statement of when NOT to use this tool versus the other simulate_* siblings.

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

validate_resultsVérifier la cohérence de résultats MarcelA
Read-onlyIdempotent
Inspect

Contrôle la cohérence de plusieurs résultats Marcel. Entrée : liste de résultats (moteur, identifiant de trace, statut, version de règles, résultat). Sortie : statut blocked en cas de conflit temporel (TEMPORAL_CONFLICT) ou de moteur blocked, et un avertissement de règle obsolète lorsqu'un résultat cite une règle déjà remplacée, dont CGI.200-A.PFU_30PCT depuis le 1er janvier 2026.

ParametersJSON Schema
NameRequiredDescriptionDefault
resultsYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds real value beyond that: it names the exact output behaviors (status 'blocked' on TEMPORAL_CONFLICT or a blocked engine, plus a stale-rule warning) and gives a concrete rule example (CGI.200-A.PFU_30PCT since 2026-01-01).

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?

Three compact sentences that front-load the purpose before input and output details. Information density is high with little filler, though the final clause carrying the concrete rule example is somewhat packed.

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 one array parameter, no output schema and no annotation detail on returns, the description carries the output burden and handles it by naming the blocked/conflict/stale-rule outcomes. It stops short of describing the full response shape or how multiple conflicts/warnings are aggregated, but it is adequate for correct invocation.

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 0%, so the description must compensate. It enumerates the item fields (moteur, identifiant de trace, statut, version de règles, résultat), mapping well onto engine, traceId, status, rulesVersion and result, which genuinely helps. But it adds no types, formats, or semantics beyond the field names, so it only partially covers the gap.

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?

States a specific verb and resource: 'Contrôle la cohérence de plusieurs résultats Marcel', and outlines both input and output, which is far more than a name restatement. It is implicitly distinguishable from its simulation siblings, though it never explicitly contrasts itself with them (e.g. compare_certified).

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 the described input (a list of results) and output (blocked status / stale-rule warning), so an agent can infer this runs as a consistency check over results. However, there is no explicit statement of when to call this versus the sibling simulation tools, nor any prerequisite or sequencing guidance.

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. 2 tool updates
    • Removedcompare_certified
    • Addedcompare_results
  2. 8 tool updates
    • Changedacheter_louer15 fields changed
      • changedInput schema / properties / credit / description
        Previous value: -"Ne pas le remplir. Le moteur met le taux et la durée Banque de France. L'assurance et la quotité d'un couple restent à fournir."New value: +"Caractéristiques du crédit. Absentes : taux et durée Banque de France, inscrits dans hypotheses. L'assurance et la quotité d'un couple restent des entrées lorsqu'elles sont connues."
      • changedInput schema / properties / credit / properties / assures / items / properties / taux / description
        Previous value: -"Ne pas le supposer. Seulement si la personne le donne, ou si result.question porte sur l'assurance."New value: +"Taux d'assurance de cet assuré, lorsqu'il est fourni."
      • changedInput schema / properties / credit / properties / taux_assurance / description
        Previous value: -"Ne pas le supposer. La quotité d'un couple non plus."New value: +"Taux d'assurance du crédit, lorsqu'il est fourni. La quotité d'un couple est une entrée distincte."
      • changedInput schema / properties / credit / properties / taux_nominal / description
        Previous value: -"Ne pas le remplir : le moteur met le taux Banque de France et l'écrit dans hypotheses."New value: +"Taux nominal annuel du crédit. Absent : taux Banque de France, inscrit dans hypotheses."
      • changedInput schema / properties / date_acte / description
        Previous value: -"Date de l'acte AAAA-MM-JJ, seulement si la personne la donne. Avec le département, le barème DGFiP remplace l'estimation."New value: +"Date de l'acte au format AAAA-MM-JJ. Avec le département, le barème DGFiP remplace l'estimation des frais."
      • changedInput schema / properties / departement / description
        Previous value: -"Code département si la personne le donne : 75, 2A, 69M pour Lyon. Ne pas l'inventer."New value: +"Code département, par exemple 75, 2A, ou 69M pour Lyon."
      • changedInput schema / properties / detail / description
        Previous value: -"Ne pas le remplir. compact par défaut : sans l'échéancier du crédit ni les lignes par année. complet seulement si la personne demande l'échéancier."New value: +"compact : sans échéancier du crédit ni lignes par année. complet : avec l'échéancier. Absent : compact."
      • changedInput schema / properties / evolution_loyer / description
        Previous value: -"Ne pas le remplir. Le moteur met un loyer constant et l'écrit."New value: +"Évolution annuelle du loyer. Absente : loyer constant, inscrit dans hypotheses."
      • changedInput schema / properties / evolution_prix / description
        Previous value: -"Ne pas le remplir. Le moteur met 0 et montre +1 % et +2 % dans la grille."New value: +"Évolution annuelle du prix. Absente : 0, avec +1 % et +2 % dans la grille."
      • changedInput schema / properties / frais_acquisition / description
        Previous value: -"Inutile pour une résidence principale. Hors RP seulement : forfait ou reels (= frais_entree)."New value: +"Assiette des frais d'acquisition pour une plus-value hors résidence principale : forfait, ou reels (égal à frais_entree). Sans effet pour une résidence principale."
      • changedInput schema / properties / frais_entree / description
        Previous value: -"Ne pas l'estimer. Sans département, le moteur publie une estimation. null = zéro explicite."New value: +"Frais d'acquisition. Absents, et sans département : estimation publiée par le calcul. null : zéro explicite."
      • changedInput schema / properties / horizon_max / description
        Previous value: -"Ne pas le choisir. Sans durée, le moteur lit 30 ans et publie la grille."New value: +"Horizon en années. Absent : 30 ans, et la grille est publiée."
      • changedInput schema / properties / primo_accedant / description
        Previous value: -"Ne pas le supposer. true seulement si la personne est primo-accédante."New value: +"true lorsque l'acheteur est primo-accédant."
      • changedInput schema / properties / rendement_apport / description
        Previous value: -"Ne pas le remplir et ne pas proposer 4 %. Le moteur met le taux du Livret A comme référence sans risque, et écrit le plafond."New value: +"Rendement annuel de l'apport non investi dans le logement. Absent : taux du Livret A, hypothèse de référence sans risque, avec son plafond dans hypotheses."
      • changedInput schema / properties / residence_principale_au_moment_de_la_vente / description
        Previous value: -"Ne pas le remplir pour un achat de logement : le moteur suppose la résidence principale et l'écrit."New value: +"Résidence principale au moment de la vente. Absente pour un logement : le calcul retient la résidence principale et l'inscrit dans hypotheses."
    • Changedmarcel_estimate_pension5 fields changed
      • changedInput schema / properties / birthMonth / description
        Previous value: -"Mois de naissance, de 1 à 12. Pour 1965, janvier à mars et avril à décembre n'ont pas le même âge ni la même durée. Sans mois, le résultat reste indicatif."New value: +"Mois de naissance, de 1 à 12. Pour 1965, janvier à mars et avril à décembre n'ont pas le même âge ni la même durée. Absent : le résultat reste indicatif."
      • changedInput schema / properties / pointsAgirc / description
        Previous value: -"Points Agirc-Arrco totaux. 0 est une valeur valide, pas une donnée manquante."New value: +"Points Agirc-Arrco totaux. 0 est une valeur valide."
      • changedInput schema / properties / rfr / properties / year / description
        Previous value: -"Année de l'avis d'imposition, pas celle des revenus. Pour une pension versée en 2026, elle vaut 2025."New value: +"Année de l'avis d'imposition, distincte de l'année des revenus. Pour une pension versée en 2026, cette année est 2025."
      • changedInput schema / properties / rfrPrecedent / description
        Previous value: -"Revenu fiscal de l'avis précédent. Son année est celle de rfr moins un. Sinon ignoré : indicatif, et le taux médian ou normal n'est pas appliqué."New value: +"Revenu fiscal de l'avis précédent. Son année est celle de rfr moins un. À défaut, le champ est ignoré : le résultat reste indicatif, et le taux médian ou normal n'est pas appliqué."
      • changedInput schema / properties / rfrPrecedent / properties / year / description
        Previous value: -"Année de l'avis d'imposition précédent, pas celle des revenus. Pour une pension versée en 2026, elle vaut 2024."New value: +"Année de l'avis d'imposition précédent, distincte de l'année des revenus. Pour une pension versée en 2026, cette année est 2024."
    • Changedsimulate_av11 fields changed
      • changedInput schema / properties / ageAssure / description
        Previous value: -"Ne choisit pas le régime de transmission. Le régime suit l'âge à chaque prime."New value: +"Âge actuel de l'assuré. Le régime de transmission suit l'âge à chaque prime, pas cet âge."
      • changedInput schema / properties / beneficiairesTransmission / description
        Previous value: -"Requis pour une transmission : lien de parenté et quote-part."New value: +"Bénéficiaires de la transmission : lien de parenté et quote-part. Absents : le calcul de transmission est refusé."
      • changedInput schema / properties / beneficiairesTransmission / items / properties / abattementSuccessoralRestant / description
        Previous value: -"Abattement successoral encore disponible. Absent : abattement légal plein du lien, signalé."New value: +"Abattement successoral encore disponible. Absent : abattement légal plein du lien, signalé dans le résultat."
      • changedInput schema / properties / nbBeneficiaires / description
        Previous value: -"Ignoré pour la transmission. Passer beneficiairesTransmission."New value: +"Nombre de bénéficiaires. La transmission se calcule à partir de beneficiairesTransmission."
      • changedInput schema / properties / plusValuesFondsEuros / description
        Previous value: -"Gains du fonds en euros. Requis, avec plusValuesUC, si le contrat a des gains."New value: +"Gains du fonds en euros. Avec plusValuesUC, entrée du calcul lorsque le contrat a des gains."
      • changedInput schema / properties / plusValuesUC / description
        Previous value: -"Gains d'unités de compte. Les prélèvements sociaux de 17,2 % ne portent que sur cette part."New value: +"Gains d'unités de compte. Les prélèvements sociaux de 17,2 % portent sur cette part."
      • changedInput schema / properties / primesAvant2017 / description
        Previous value: -"Primes de ce contrat versées avant le 27/09/2017. Absent : toutes supposées postérieures (hypothèse la moins favorable)."New value: +"Primes de ce contrat versées avant le 27/09/2017. Absentes : toutes les primes sont traitées comme postérieures à cette date."
      • changedInput schema / properties / primesParAge / description
        Previous value: -"Requis pour une transmission. Sans cette liste, le calcul est refusé."New value: +"Primes avec l'âge de l'assuré au versement. Entrée du calcul de transmission. Absente : ce calcul est refusé."
      • changedInput schema / properties / primesParAge / items / properties / ageAuVersement / description
        Previous value: -"Âge de l'assuré au versement. Avant 70 ans : 990 I. À partir de 70 ans : 757 B."New value: +"Âge de l'assuré au versement. Avant 70 ans : CGI art. 990 I. À partir de 70 ans : CGI art. 757 B."
      • changedInput schema / properties / situationFamiliale / description
        Previous value: -"Personne seule ou couple. Même vocabulaire que compare_allocation."New value: +"Personne seule ou couple."
      • changedInput schema / properties / tmi / description
        Previous value: -"TMI du foyer en taux décimal (0.30 pour 30 %), seulement si la personne la donne. Absente : l'option barème n'est pas chiffrée."New value: +"TMI du foyer en taux décimal (0.30 pour 30 %), lorsqu'elle est fournie. Absente : l'option pour le barème n'est pas chiffrée."
    • Changedsimulate_cto6 fields changed
      • changedInput schema / properties / annee / description
        Previous value: -"Année des revenus. Seule 2026 est couverte. Absente : 2026, et le résultat le dit."New value: +"Année des revenus. Seule 2026 est couverte. Absente : 2026, indiqué dans le résultat."
      • changedInput schema / properties / parts / description
        Previous value: -"Nombre de parts. Absent : l'option barème n'est pas chiffrée. Ne pas le supposer."New value: +"Nombre de parts du foyer. Absent : l'option pour le barème n'est pas chiffrée."
      • changedInput schema / properties / plusValuesAvant2018 / description
        Previous value: -"Titres acquis avant 2018. L'abattement pour durée de détention ne s'applique qu'avec l'option barème."New value: +"Titres acquis avant 2018. L'abattement pour durée de détention s'applique avec l'option pour le barème."
      • changedInput schema / properties / revenuFiscalReferenceN2 / description
        Previous value: -"Revenu fiscal de référence de l'avant-dernière année, seulement s'il est connu."New value: +"Revenu fiscal de référence de l'avant-dernière année, lorsqu'il est connu."
      • changedInput schema / properties / revenuImposableHorsPfu / description
        Previous value: -"Revenu imposable du foyer hors dividendes, intérêts et plus-values du prélèvement forfaitaire. Zéro est un revenu nul. Absent : l'option barème n'est pas chiffrée."New value: +"Revenu imposable du foyer hors dividendes, intérêts et plus-values du prélèvement forfaitaire. Zéro est un revenu nul. Absent : l'option pour le barème n'est pas chiffrée."
      • changedInput schema / properties / situation / description
        Previous value: -"Pour la dispense de prélèvement forfaitaire non libératoire. Absente : la dispense n'est pas appréciée."New value: +"Seul ou couple. Sert à la dispense de prélèvement forfaitaire non libératoire. Absente : la dispense n'est pas appréciée."
    • Changedsimulate_cumul9 fields changed
      • changedInput schema / properties / age / description
        Previous value: -"Âge de la personne"New value: +"Âge de la personne."
      • changedInput schema / properties / ageLegal / description
        Previous value: -"Âge légal de départ selon la génération, seulement s'il est connu. Ne pas le déduire."New value: +"Âge légal de départ de la génération, lorsqu'il est connu."
      • changedInput schema / properties / dateEntreeJouissance / description
        Previous value: -"Date d'entrée en jouissance de la première pension de base, AAAA-MM-JJ, seulement si la personne la donne."New value: +"Date d'entrée en jouissance de la première pension de base, au format AAAA-MM-JJ."
      • changedInput schema / properties / pensionBase / description
        Previous value: -"Pension de base brute mensuelle"New value: +"Pension de base brute mensuelle."
      • changedInput schema / properties / pensionComplementaire / description
        Previous value: -"Pension complémentaire brute mensuelle (Agirc-Arrco)"New value: +"Pension complémentaire brute mensuelle (Agirc-Arrco)."
      • changedInput schema / properties / pensionsLiquidees / description
        Previous value: -"Toutes les pensions, de base et complémentaires, sont-elles liquidées ?"New value: +"true lorsque toutes les pensions, de base et complémentaires, sont liquidées."
      • changedInput schema / properties / revenuActivite / description
        Previous value: -"Revenu d'activité brut mensuel de la reprise"New value: +"Revenu d'activité brut mensuel de la reprise."
      • changedInput schema / properties / salaireReference3Mois / description
        Previous value: -"Moyenne brute mensuelle des 3 derniers mois de salaire avant la liquidation"New value: +"Moyenne brute mensuelle des 3 derniers mois de salaire avant la liquidation."
      • changedInput schema / properties / tauxPlein / description
        Previous value: -"Durée d'assurance requise atteinte, ou 67 ans"New value: +"true lorsque la durée d'assurance requise est atteinte, ou à 67 ans."
    • Changedsimulate_dutreil1 field changed
      • changedInput schema / properties / tmiFrance / description
        Previous value: -"Non utilisé par le calcul. Ne pas le demander."New value: +"Taux marginal d'imposition en France, en décimal. Cette entrée n'entre pas dans le calcul."
    • Changedsimulate_pea8 fields changed
      • changedInput schema / properties / ageActuel / description
        Previous value: -"Âge actuel. Requis pour une projection ou une rente."New value: +"Âge actuel. Entrée d'une projection ou d'une rente."
      • changedInput schema / properties / ageRetraite / description
        Previous value: -"Âge de sortie. Sans lui et sans rendement, aucune projection : calcul sur la valeur actuelle."New value: +"Âge de sortie. Absent, et sans rendement : calcul sur la valeur actuelle, sans projection."
      • changedInput schema / properties / ancienneteAns / description
        Previous value: -"Ancienneté du plan en années. Requise : le régime dépend des 5 ans."New value: +"Ancienneté du plan en années. Le régime dépend du seuil de 5 ans."
      • changedInput schema / properties / montantRachat / description
        Previous value: -"Montant du retrait, requis pour objetCalcul rachat_partiel."New value: +"Montant du retrait. Entrée lorsque objetCalcul vaut rachat_partiel."
      • changedInput schema / properties / rendementAnnuel / description
        Previous value: -"Rendement annuel, seulement si la personne le donne. Ne jamais le supposer."New value: +"Rendement annuel fourni par l'appelant. Absent : aucune projection à ce taux."
      • changedInput schema / properties / tmi / description
        Previous value: -"TMI du foyer en taux décimal (0.30 pour 30 %), seulement si la personne la donne"New value: +"TMI du foyer en taux décimal (0.30 pour 30 %), lorsqu'elle est fournie."
      • changedInput schema / properties / valeurPEA / description
        Previous value: -"Valeur actuelle du PEA"New value: +"Valeur actuelle du PEA."
      • changedInput schema / properties / versementsTotal / description
        Previous value: -"Total des versements sur le plan. Requis : sans lui, les gains ne sont pas calculables."New value: +"Total des versements sur le plan. Absent : les gains ne sont pas calculés."
    • Changedsimulate_per_sortie8 fields changed
      • changedInput schema / properties / ageRetraite / description
        Previous value: -"Âge au moment de la sortie"New value: +"Âge au moment de la sortie."
      • changedInput schema / properties / capitalPER / description
        Previous value: -"Capital accumulé dans le PER"New value: +"Capital accumulé dans le PER."
      • changedInput schema / properties / parts / description
        Previous value: -"Nombre de parts du foyer. Requis. Il n'est pas supposé."New value: +"Nombre de parts du foyer."
      • changedInput schema / properties / pensionAnnuelleBrute / description
        Previous value: -"Pension annuelle brute du foyer hors PER. Requis. L'impôt est IR(pension + flux) moins IR(pension seule)."New value: +"Pension annuelle brute du foyer hors PER. L'impôt vaut l'impôt sur le revenu de la pension augmentée du flux, moins l'impôt sur le revenu de la pension seule."
      • changedInput schema / properties / tmiActuel / description
        Previous value: -"TMI actuel en taux décimal (0.30 pour 30 %), seulement si la personne la donne"New value: +"TMI actuelle en taux décimal (0.30 pour 30 %), lorsqu'elle est fournie."
      • changedInput schema / properties / tmiRetraite / description
        Previous value: -"N'est pas le taux appliqué à la sortie. Sert seulement à la comparer à tmiActuel si les deux sont donnés."New value: +"TMI à la retraite, en taux décimal. Distincte du taux appliqué à la sortie. Sert à la comparaison avec tmiActuel lorsque les deux sont fournis."
      • changedInput schema / properties / versementsDeduits / description
        Previous value: -"Versements déduits du revenu, jamais supposés"New value: +"Versements déduits du revenu imposable."
      • changedInput schema / properties / versementsNonDeduits / description
        Previous value: -"Versements non déduits. Absents : 0. Exonérés d'impôt à la sortie en capital. En rente, seule leur quote-part suit la fraction d'âge pour l'impôt sur le revenu."New value: +"Versements non déduits. Absents : 0. Exonérés d'impôt à la sortie en capital. En rente, leur quote-part suit la fraction d'âge pour l'impôt sur le revenu."
  3. 11 tool updates
    • First observedacheter_louer
    • First observedcompare_certified
    • First observedmarcel_estimate_pension
    • First observedsimulate_av
    • First observedsimulate_cto
    • First observedsimulate_cumul
    • First observedsimulate_dutreil
    • First observedsimulate_ifi
    • First observedsimulate_pea
    • First observedsimulate_per_sortie
    • First observedvalidate_results

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
  • F
    license
    Not graded
    quality
    D
    maintenance
    Tax-aware retirement planning for Canada and the US. CPP/OAS and Social Security timing, RRSP/TFSA/401k/IRA projections, Monte Carlo simulation, withdrawal order optimization, and historical backtesting against 150 years of market data.
    2
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    A Python MCP server that calculates French income tax using the official DGFiP source code compiled locally. It enables accurate tax simulations for 2023 income based on real French tax forms without network calls.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.