MARCEL

API et serveur MCP

Confidentialité

Dernière mise à jour : 21 octobre 2026. Rédigé d'après le code, pas d'après un engagement commercial.

Éditeur

Le service accessible sur marcel-retraite.fr, y compris l'API /api/v1 et le serveur MCP https://marcel-retraite.fr/mcp, est édité par la SASU Marcel IA, au capital de 100 €, dont le siège est au 19 rue Thiers, 92100 Boulogne-Billancourt, SIREN 108 404 344, RCS Nanterre.

Pas de délégué à la protection des données désigné. Contact RGPD : quilletalexandre5@gmail.com.

Contact : quilletalexandre5@gmail.com. Support : /support.

Périmètre

Cette page décrit les données reçues par l'API de calcul et par le MCP public. Le compte du simulateur (profil, relevé, agrégation bancaire) est un autre traitement, décrit sur /politique-de-confidentialite.

Le MCP public n'exige pas de clé visiteur. Il transmet les arguments de l'outil à l'API, avec une clé détenue par le serveur. L'API, appelée directement, exige un en-tête Authorization: Bearer dont la clé commence par mk_live_ ou mk_test_.

Ce que l'appel contient

Le corps JSON d'un calcul porte les valeurs fournies pour l'outil : montants, années, et, selon l'outil, un revenu fiscal de référence, des liens de parenté, ou un nom de bénéficiaire. Le MCP reçoit ces arguments dans le message JSON-RPC. L'API les reçoit dans le corps POST.

Le code lit ce corps pour calculer, puis renvoie le résultat à l'appelant. Il ne l'écrit pas dans une table.

Journal d'appel de l'API

Chaque route /api/v1 appelle logApiCall. La table ApiKeyLog enregistre quatre champs : l'identifiant de la clé (apiKeyId), le nom de l'endpoint, le code HTTP et la durée en millisecondes, plus createdAt. Les appels partis du MCP public passent par cette même fonction, rattachés à la clé serveur.

Cette ligne ne contient ni le corps de la requête, ni le résultat, ni le traceId, ni l'adresse IP. La valeur de la clé n'y est pas recopiée.

Pour une clé qui n'est pas une clé de démonstration ou la clé du MCP, le code incrémente usageCount et met à jour lastUsedAt sur la ligne ApiKey. Le compteur repart à zéro quand le mois change.

Les lignes ApiKeyLog sont conservées 12 mois. Environ deux écritures sur cent suppriment celles dont la date est antérieure de plus de 12 mois. Cette suppression n'est pas une tâche planifiée : si elle ne s'exécute pas, les lignes restent.

traceId

Chaque résultat de moteur porte un traceId produit au moment du calcul et renvoyé dans le JSON : MRC-, l'année, un tiret, puis les huit premiers caractères hexadécimaux d'un UUID. La comparaison de deux scénarios déjà calculés en produit un autre, préfixé MRC-CMP-, et rappelle les traceId des deux scénarios.

Le code ne range pas ce traceId en base. Il existe dans la réponse envoyée à l'appelant.

Compteur du MCP et journaux

Le MCP public limite les appels à 20 par minute et par adresse IP. L'adresse est le premier élément de l'en-tête x-forwarded-for, ou la valeur unknown s'il est absent. La table Postgres McpRateLimit garde une ligne par IP et par fenêtre d'une minute : ip, fenetre, count.

Environ deux appels sur cent lancent une suppression des fenêtres antérieures de plus de dix minutes (fenetre inférieure à la fenêtre courante moins 10). Cette suppression n'est pas une tâche planifiée : si elle ne s'exécute pas, les lignes restent.

Si la base ne répond pas, le compteur bascule dans la mémoire de l'instance. Cette mémoire garde l'adresse IP jusqu'à l'arrêt du processus : le code ne la purge pas. Le basculement écrit un avertissement [mcp-rate-limit] avec le motif de l'échec, sans l'adresse IP. Le commentaire du code indique que cet avertissement se retrouve dans les journaux Vercel.

Journaux techniques conservés par notre hébergeur Vercel pendant 1 heure.