Marcel
Server Details
Calcul fiscal et retraite français, déterministe et sourcé. Aucun conseil.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- marcel-retraite/marcel-mcp
- GitHub Stars
- 0
TDQS
Scored across 11 tools
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.
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.
11 tools is well within the 3-15 range; each tool corresponds to a distinct fiscal calculation or validation step, and none feels redundant.
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 toolsacheter_louerAcheter ou louer sa résidence principaleARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| prix | No | ||
| apport | No | ||
| credit | No | 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. | |
| detail | No | compact : sans échéancier du crédit ni lignes par année. complet : avec l'échéancier. Absent : compact. | |
| travaux | No | ||
| date_acte | No | Date de l'acte au format AAAA-MM-JJ. Avec le département, le barème DGFiP remplace l'estimation des frais. | |
| departement | No | Code département, par exemple 75, 2A, ou 69M pour Lyon. | |
| horizon_max | No | Horizon en années. Absent : 30 ans, et la grille est publiée. | |
| frais_entree | No | Frais d'acquisition. Absents, et sans département : estimation publiée par le calcul. null : zéro explicite. | |
| loyer_annuel | No | ||
| evolution_prix | No | Évolution annuelle du prix. Absente : 0, avec +1 % et +2 % dans la grille. | |
| frais_de_vente | No | ||
| primo_accedant | No | true lorsque l'acheteur est primo-accédant. | |
| evolution_loyer | No | Évolution annuelle du loyer. Absente : loyer constant, inscrit dans hypotheses. | |
| rendement_apport | No | 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. | |
| charges_annuelles | No | ||
| frais_acquisition | No | 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. | |
| taxe_fonciere_annuelle | No | ||
| charges_locatives_annuelles | No | ||
| patrimoine_immobilier_taxable | No | ||
| residence_principale_au_moment_de_la_vente | No | Résidence principale au moment de la vente. Absente pour un logement : le calcul retient la résidence principale et l'inscrit dans hypotheses. |
TDQS
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.
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.
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.
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.
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.
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ésRead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| scenarioA | Yes | ||
| scenarioB | Yes |
marcel_estimate_pensionEstimer une pension de retraite bruteARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| rfr | No | ||
| regime | Yes | ||
| samSaisi | No | ||
| birthYear | Yes | ||
| birthMonth | No | 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. | |
| pointsAgirc | No | Points Agirc-Arrco totaux. 0 est une valeur valide. | |
| pointsCNAVPL | No | ||
| rfrPrecedent | No | 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é. | |
| trimestresRG | No | ||
| retirementAge | No | ||
| trimestresLiberal | No | ||
| pointsComplementaire | No | ||
| anneesAffiliationCipav | No |
TDQS
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.
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.
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.
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.
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.
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-vieARead-onlyIdempotentInspect
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é.
| Name | Required | Description | Default |
|---|---|---|---|
| tmi | No | 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. | |
| ageAssure | No | Âge actuel de l'assuré. Le régime de transmission suit l'âge à chaque prime, pas cet âge. | |
| objetCalcul | Yes | ||
| plusValuesUC | No | Gains d'unités de compte. Les prélèvements sociaux de 17,2 % portent sur cette part. | |
| primesParAge | No | Primes avec l'âge de l'assuré au versement. Entrée du calcul de transmission. Absente : ce calcul est refusé. | |
| ancienneteAns | Yes | ||
| montantRachat | No | ||
| valeurContrat | Yes | ||
| nbBeneficiaires | No | Nombre de bénéficiaires. La transmission se calcule à partir de beneficiairesTransmission. | |
| primesAvant2017 | No | Primes de ce contrat versées avant le 27/09/2017. Absentes : toutes les primes sont traitées comme postérieures à cette date. | |
| versementsTotal | Yes | ||
| situationFamiliale | No | Personne seule ou couple. | |
| primesTotalesAssure | No | Primes de tous les contrats de l'assuré encore investies, pour le seuil de 150 000 euros. | |
| plusValuesFondsEuros | No | Gains du fonds en euros. Avec plusValuesUC, entrée du calcul lorsque le contrat a des gains. | |
| beneficiairesTransmission | No | Bénéficiaires de la transmission : lien de parenté et quote-part. Absents : le calcul de transmission est refusé. |
TDQS
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.
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.
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.
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.
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.
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 ordinaireARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| annee | No | Année des revenus. Seule 2026 est couverte. Absente : 2026, indiqué dans le résultat. | |
| parts | No | Nombre de parts du foyer. Absent : l'option pour le barème n'est pas chiffrée. | |
| interets | No | Intérêts et coupons bruts. | |
| situation | No | Seul ou couple. Sert à la dispense de prélèvement forfaitaire non libératoire. Absente : la dispense n'est pas appréciée. | |
| dividendes | No | Dividendes bruts. | |
| plusValues | No | Plus-values de cession de l'année, avant imputation des moins-values. Zéro est un gain nul. | |
| moinsValues | No | Moins-values de cession de la même année. | |
| dispensePfnl | No | Dispense de prélèvement forfaitaire non libératoire demandée dans le délai. Absente : le prélèvement est retenu. | |
| optionBareme | No | Option globale annuelle pour le barème. Absente : prélèvement forfaitaire. | |
| plusValuesAvant2018 | No | Titres acquis avant 2018. L'abattement pour durée de détention s'applique avec l'option pour le barème. | |
| moinsValuesReportables | No | Moins-values des années antérieures encore reportables, une ligne par année. | |
| revenuImposableHorsPfu | No | 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. | |
| revenuFiscalReferenceN2 | No | Revenu fiscal de référence de l'avant-dernière année, lorsqu'il est connu. |
TDQS
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.
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.
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.
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.
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.
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-retraiteARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| age | Yes | Âge de la personne. | |
| ageLegal | Yes | Âge légal de départ de la génération, lorsqu'il est connu. | |
| tauxPlein | Yes | true lorsque la durée d'assurance requise est atteinte, ou à 67 ans. | |
| pensionBase | Yes | Pension de base brute mensuelle. | |
| revenuActivite | Yes | Revenu d'activité brut mensuel de la reprise. | |
| pensionsLiquidees | Yes | true lorsque toutes les pensions, de base et complémentaires, sont liquidées. | |
| dateEntreeJouissance | No | Date d'entrée en jouissance de la première pension de base, au format AAAA-MM-JJ. | |
| pensionComplementaire | Yes | Pension complémentaire brute mensuelle (Agirc-Arrco). | |
| salaireReference3Mois | Yes | Moyenne brute mensuelle des 3 derniers mois de salaire avant la liquidation. |
TDQS
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.
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.
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.
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.
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.
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 DutreilARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| eccDuree | No | ||
| eicDuree | No | ||
| nbEnfants | Yes | ||
| tmiFrance | No | Taux marginal d'imposition en France, en décimal. Cette entrée n'entre pas dans le calcul. | |
| prixRevient | Yes | ||
| ageDirigeant | Yes | ||
| valeurTitres | Yes | ||
| horizonCession | No |
TDQS
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.
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.
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.
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.
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.
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'IFIARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | ||
| actifs | Yes | ||
| passifs | Yes | ||
| irEstime | Yes | ||
| revenusFiscauxReference | Yes |
TDQS
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.
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.
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.
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.
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.
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 PEAARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tmi | No | TMI du foyer en taux décimal (0.30 pour 30 %), lorsqu'elle est fournie. | |
| ageActuel | No | Âge actuel. Entrée d'une projection ou d'une rente. | |
| valeurPEA | Yes | Valeur actuelle du PEA. | |
| ageRetraite | No | Âge de sortie. Absent, et sans rendement : calcul sur la valeur actuelle, sans projection. | |
| objetCalcul | Yes | ||
| ancienneteAns | Yes | Ancienneté du plan en années. Le régime dépend du seuil de 5 ans. | |
| montantRachat | No | Montant du retrait. Entrée lorsque objetCalcul vaut rachat_partiel. | |
| rendementAnnuel | No | Rendement annuel fourni par l'appelant. Absent : aucune projection à ce taux. | |
| versementsTotal | Yes | Total des versements sur le plan. Absent : les gains ne sont pas calculés. |
TDQS
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.
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.
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.
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.
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.
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 PERARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| parts | Yes | Nombre de parts du foyer. | |
| tmiActuel | No | TMI actuelle en taux décimal (0.30 pour 30 %), lorsqu'elle est fournie. | |
| capitalPER | Yes | Capital accumulé dans le PER. | |
| horizonAns | No | ||
| ageRetraite | Yes | Âge au moment de la sortie. | |
| objetCalcul | Yes | ||
| tmiRetraite | No | TMI à la retraite, en taux décimal. Distincte du taux appliqué à la sortie. Sert à la comparaison avec tmiActuel lorsque les deux sont fournis. | |
| rendementAnnuel | No | ||
| versementsDeduits | Yes | Versements déduits du revenu imposable. | |
| pensionAnnuelleBrute | Yes | 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. | |
| versementsNonDeduits | No | 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. | |
| tauxReversionConjoint | No |
TDQS
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.
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.
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.
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.
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.
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 MarcelARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| results | Yes |
TDQS
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.
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.
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.
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.
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.
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.
2 tool updates
- Removed
compare_certified - Added
compare_results
8 tool updates
- Changed
acheter_louer15 fields changed- changed
Input schema / properties / credit / descriptionPrevious 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." - changed
Input schema / properties / credit / properties / assures / items / properties / taux / descriptionPrevious 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." - changed
Input schema / properties / credit / properties / taux_assurance / descriptionPrevious 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." - changed
Input schema / properties / credit / properties / taux_nominal / descriptionPrevious 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." - changed
Input schema / properties / date_acte / descriptionPrevious 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." - changed
Input schema / properties / departement / descriptionPrevious 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." - changed
Input schema / properties / detail / descriptionPrevious 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." - changed
Input schema / properties / evolution_loyer / descriptionPrevious 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." - changed
Input schema / properties / evolution_prix / descriptionPrevious 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." - changed
Input schema / properties / frais_acquisition / descriptionPrevious 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." - changed
Input schema / properties / frais_entree / descriptionPrevious 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." - changed
Input schema / properties / horizon_max / descriptionPrevious 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." - changed
Input schema / properties / primo_accedant / descriptionPrevious value: -"Ne pas le supposer. true seulement si la personne est primo-accédante."New value: +"true lorsque l'acheteur est primo-accédant." - changed
Input schema / properties / rendement_apport / descriptionPrevious 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." - changed
Input schema / properties / residence_principale_au_moment_de_la_vente / descriptionPrevious 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."
- Changed
marcel_estimate_pension5 fields changed- changed
Input schema / properties / birthMonth / descriptionPrevious 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." - changed
Input schema / properties / pointsAgirc / descriptionPrevious 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." - changed
Input schema / properties / rfr / properties / year / descriptionPrevious 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." - changed
Input schema / properties / rfrPrecedent / descriptionPrevious 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é." - changed
Input schema / properties / rfrPrecedent / properties / year / descriptionPrevious 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."
- Changed
simulate_av11 fields changed- changed
Input schema / properties / ageAssure / descriptionPrevious 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." - changed
Input schema / properties / beneficiairesTransmission / descriptionPrevious 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é." - changed
Input schema / properties / beneficiairesTransmission / items / properties / abattementSuccessoralRestant / descriptionPrevious 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." - changed
Input schema / properties / nbBeneficiaires / descriptionPrevious value: -"Ignoré pour la transmission. Passer beneficiairesTransmission."New value: +"Nombre de bénéficiaires. La transmission se calcule à partir de beneficiairesTransmission." - changed
Input schema / properties / plusValuesFondsEuros / descriptionPrevious 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." - changed
Input schema / properties / plusValuesUC / descriptionPrevious 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." - changed
Input schema / properties / primesAvant2017 / descriptionPrevious 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." - changed
Input schema / properties / primesParAge / descriptionPrevious 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é." - changed
Input schema / properties / primesParAge / items / properties / ageAuVersement / descriptionPrevious 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." - changed
Input schema / properties / situationFamiliale / descriptionPrevious value: -"Personne seule ou couple. Même vocabulaire que compare_allocation."New value: +"Personne seule ou couple." - changed
Input schema / properties / tmi / descriptionPrevious 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."
- Changed
simulate_cto6 fields changed- changed
Input schema / properties / annee / descriptionPrevious 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." - changed
Input schema / properties / parts / descriptionPrevious 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." - changed
Input schema / properties / plusValuesAvant2018 / descriptionPrevious 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." - changed
Input schema / properties / revenuFiscalReferenceN2 / descriptionPrevious 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." - changed
Input schema / properties / revenuImposableHorsPfu / descriptionPrevious 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." - changed
Input schema / properties / situation / descriptionPrevious 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."
- Changed
simulate_cumul9 fields changed- changed
Input schema / properties / age / descriptionPrevious value: -"Âge de la personne"New value: +"Âge de la personne." - changed
Input schema / properties / ageLegal / descriptionPrevious 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." - changed
Input schema / properties / dateEntreeJouissance / descriptionPrevious 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." - changed
Input schema / properties / pensionBase / descriptionPrevious value: -"Pension de base brute mensuelle"New value: +"Pension de base brute mensuelle." - changed
Input schema / properties / pensionComplementaire / descriptionPrevious value: -"Pension complémentaire brute mensuelle (Agirc-Arrco)"New value: +"Pension complémentaire brute mensuelle (Agirc-Arrco)." - changed
Input schema / properties / pensionsLiquidees / descriptionPrevious 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." - changed
Input schema / properties / revenuActivite / descriptionPrevious value: -"Revenu d'activité brut mensuel de la reprise"New value: +"Revenu d'activité brut mensuel de la reprise." - changed
Input schema / properties / salaireReference3Mois / descriptionPrevious 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." - changed
Input schema / properties / tauxPlein / descriptionPrevious 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."
- Changed
simulate_dutreil1 field changed- changed
Input schema / properties / tmiFrance / descriptionPrevious 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."
- Changed
simulate_pea8 fields changed- changed
Input schema / properties / ageActuel / descriptionPrevious value: -"Âge actuel. Requis pour une projection ou une rente."New value: +"Âge actuel. Entrée d'une projection ou d'une rente." - changed
Input schema / properties / ageRetraite / descriptionPrevious 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." - changed
Input schema / properties / ancienneteAns / descriptionPrevious 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." - changed
Input schema / properties / montantRachat / descriptionPrevious value: -"Montant du retrait, requis pour objetCalcul rachat_partiel."New value: +"Montant du retrait. Entrée lorsque objetCalcul vaut rachat_partiel." - changed
Input schema / properties / rendementAnnuel / descriptionPrevious 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." - changed
Input schema / properties / tmi / descriptionPrevious 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." - changed
Input schema / properties / valeurPEA / descriptionPrevious value: -"Valeur actuelle du PEA"New value: +"Valeur actuelle du PEA." - changed
Input schema / properties / versementsTotal / descriptionPrevious 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."
- Changed
simulate_per_sortie8 fields changed- changed
Input schema / properties / ageRetraite / descriptionPrevious value: -"Âge au moment de la sortie"New value: +"Âge au moment de la sortie." - changed
Input schema / properties / capitalPER / descriptionPrevious value: -"Capital accumulé dans le PER"New value: +"Capital accumulé dans le PER." - changed
Input schema / properties / parts / descriptionPrevious value: -"Nombre de parts du foyer. Requis. Il n'est pas supposé."New value: +"Nombre de parts du foyer." - changed
Input schema / properties / pensionAnnuelleBrute / descriptionPrevious 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." - changed
Input schema / properties / tmiActuel / descriptionPrevious 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." - changed
Input schema / properties / tmiRetraite / descriptionPrevious 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." - changed
Input schema / properties / versementsDeduits / descriptionPrevious value: -"Versements déduits du revenu, jamais supposés"New value: +"Versements déduits du revenu imposable." - changed
Input schema / properties / versementsNonDeduits / descriptionPrevious 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."
11 tool updates
- First observed
acheter_louer - First observed
compare_certified - First observed
marcel_estimate_pension - First observed
simulate_av - First observed
simulate_cto - First observed
simulate_cumul - First observed
simulate_dutreil - First observed
simulate_ifi - First observed
simulate_pea - First observed
simulate_per_sortie - First observed
validate_results
Related MCP Connectors
Calcul fiscal (IR, IFI, PER, plus-value) et retraite français — 32 régimes, sourcé et daté.
Deterministic US financial planning: retirement Monte Carlo, Roth conversion, RMD, tax, IRMAA, SS
French inheritance tax engine: simulate, compare scenarios, savings estimate, premium optimizer.
Doctrine fiscale française (BOFiP) : recherche, veille et graphe doctrinal. Etalab 2.0.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceSourced, 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.1MIT
- AlicenseNot gradedqualityCmaintenanceProvides 62 French tax calculation tools via MCP, running on Cloudflare Workers with Rust/Wasm and versioned official rules.MIT

cinderfi-mcpofficial
FlicenseNot gradedqualityDmaintenanceTax-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-- AlicenseNot gradedqualityCmaintenanceA 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
Glama MCP Gateway
Add one secure layer between your agents and this server.