Marcel · couche de vérité financière pour agents

Notre LLM n'a pas calculé.
Marcel a calculé.

Donnez une situation à votre copilote. Marcel liquide, fiscalise, valide et compare — déterministe, versionné, traçable.

Voir la preuve A/B →Créer une clé sandbox
Étape 1

Créer votre clé sandbox

Gratuit · sans carte bancaire · 200 appels/mois
Étape 2

Preuve : A plutôt que B

Le LLM
Orchestre les 14 outils du serveur MCP et explique les écarts. Il ne calcule pas un taux, une décote, un net foyer, un IFI ou des droits Dutreil.
Marcel
Liquide, fiscalise, valide, compare. Publie netChiffrable, BLOCKED, traceId, rulesVersion. Aucun patrimoine net inventé.
Interdit au LLM
Transformer un brut en net. Contourner un BLOCKED. Inventer un delta. Déduire un RFR. Sommer AV + IFI + pension en un « net patrimonial ».
Même dossier golden. A = Dutreil valide. B = horizonCession: 5 (conflit ECC+EIC). Pension sans RFR d'avis.
Recette HTTP (votre clé)
shell
# Payloads = goldens (aucun cas fiscal nouveau).
# A : pension sans RFR + AV + IFI + Dutreil
# B : identique, Dutreil + "horizonCession": 5
#
# 1–8  POST /api/v1/{estimate-pension|simulate-av|simulate-ifi|simulate-dutreil}
# 9    POST /api/v1/compare-certified
#        { "scenarioA": [MarcelResult…], "scenarioB": [MarcelResult…] }
#
# Lire : netChiffrable, validation.status, traceId, rulesVersion.
# Si BLOCKED : aucun delta fiscal Dutreil chiffrable.
# Le LLM explique. Il n'invente aucun montant.
Étape 3

Premier appel isolé

curl
curl -X POST https://marcel-retraite.fr/api/v1/estimate-pension \
  -H "Authorization: Bearer mk_test_votre_cle" \
  -H "Content-Type: application/json" \
  -d '{
  "birthYear": 1979,
  "retirementAge": 67,
  "regime": "CARRIERE_MIXTE",
  "samSaisi": 42000,
  "trimestresRG": 88,
  "pointsAgirc": 6200,
  "trimestresLiberal": 52,
  "pointsCNAVPL": 340,
  "pointsComplementaire": 280,
  "anneesAffiliationCipav": 13
}'
Cas mixte certifié. Sans RFR d'avis, le brut est publié et le net foyer n'est pas chiffrable.
Avec le SDK TypeScript
bash
npm install @marcel/sdk
typescript
import { Marcel } from "@marcel/sdk"

const marcel = new Marcel({ apiKey: process.env.MARCEL_API_KEY! })

const pension = await marcel.estimatePension({
  birthYear: 1979,
  retirementAge: 67,
  regime: "CARRIERE_MIXTE",
  samSaisi: 42000,
  trimestresRG: 88,
  pointsAgirc: 6200,
  trimestresLiberal: 52,
  pointsCNAVPL: 340,
  pointsComplementaire: 280,
  anneesAffiliationCipav: 13,
})

// Sans RFR d'avis : pensionNetMonthly est null (netChiffrable false).
console.log(pension.pensionBrutMonthly, pension.pensionNetMonthly)
Étape 4

Playground — un moteur à la fois

Modifiez la requête et exécutez-la contre le moteur en production. Aucune clé requise ici.
REQUEST · POST /api/v1/estimate-pension
Référence

Endpoints disponibles

Certifiés playground
POST /api/v1/estimate-pensionPOST /api/v1/simulate-avPOST /api/v1/simulate-ifiPOST /api/v1/simulate-dutreil
Patrimoine / décision
POST /api/v1/financial-twinPOST /api/v1/simulate-decisionPOST /api/v1/compare-certified
Fiscalité
POST /api/v1/compare-allocationPOST /api/v1/compare-strategyPOST /api/v1/analyze-sensitivityPOST /api/v1/simulate-cto
Transmission / structure
POST /api/v1/simulate-donationPOST /api/v1/simulate-apport-cessionPOST /api/v1/simulate-sci-is
Crypto
POST /api/v1/simulate-crypto
AV stratégie
POST /api/v1/simulate-av-strategie
Statut du moteur : GET /api/v1/version
Référence

Limite d'appels du serveur MCP

Le serveur MCP public https://marcel-retraite.fr/mcps'utilise sans clé. Il accepte 20 requêtes par minute et par adresse IP. Les 14 outils sont en lecture seule : ils calculent, ils n'écrivent rien.simulate_donation et simulate_demembrement relaient les routes de donation et de démembrement.simulate_ctocalcule l'impôt d'un compte-titres ordinaire personnel sur une année. Marcel Patrimoine compare des scénarios de donation ou de démembrement et chiffre leur effet fiscal. Estimation indicative, pas un conseil en investissement. Chaque champ du profil est optionnel ; la réponse contient les scénarios chiffrés, les scénarios écartés, les sujets non couverts, les champs manquants et les avertissements.

Au-delà, la réponse est un HTTP 429 avec l'en-tête Retry-After (en secondes) et une erreur JSON-RPC 2.0 :

HTTP/1.1 429 Too Many Requests
Retry-After: 42
RateLimit-Limit: 20

{"jsonrpc":"2.0","id":1,"error":{"code":-32029,
 "message":"Limite de 20 requêtes par minute atteinte. Réessayez dans 42 s.",
 "data":{"retryAfterSeconds":42,"limit":20,"windowSeconds":60}}}

Passer en production

La sandbox couvre 200 appels par mois sur données synthétiques. Pour un volume supérieur, un environnement dédié ou un engagement de maintenance réglementaire, écrivez-nous.

quilletalexandre5@gmail.com