Amélioration de l'API
This commit is contained in:
1 parent
5dc6f21e61
commit
4ad6ea79e8
8 files changed
+387
-47
No files matched your search
@@ -213,6 +213,8 @@ Tous en lecture seule (`readOnlyHint: true`) :
|
||||
| `crowdlending_get_investissement` | Détail d'un investissement + ses remboursements |
|
||||
| `crowdlending_list_remboursements` | Historique des remboursements, filtrable par période |
|
||||
| `crowdlending_list_depots_retraits` | Historique des mouvements de cash |
|
||||
| `crowdlending_list_objectifs` | Objectifs de versement et de capital investi, à comparer au réalisé |
|
||||
| `crowdlending_get_taxreport` | Synthèse fiscale annuelle (CERFA 2042/2561/2047/2778-SD) — aide à la déclaration, pas une source officielle |
|
||||
| `crowdlending_fetch_url` | *(actif seulement si `MCP_ENABLE_FETCH_URL=true`)* Lit une page web (annonce de projet) et en extrait le texte propre — voir ci-dessous |
|
||||
|
||||
## Lire une annonce de projet (`crowdlending_fetch_url`)
|
||||
|
||||
+75
-4
@@ -30,7 +30,7 @@ const READ_ONLY_ANNOTATIONS = {
|
||||
};
|
||||
|
||||
/**
|
||||
* Enregistre les 6 outils de lecture de données sur `server`.
|
||||
* Enregistre les 9 outils de lecture de données sur `server`.
|
||||
*
|
||||
* @param {import('@modelcontextprotocol/sdk/server/mcp.js').McpServer} server
|
||||
* @param {object} ctx
|
||||
@@ -74,9 +74,14 @@ export function registerDataTools(server, { apiGet, withLabel = (t) => t, withSo
|
||||
"cours et en défaut, net des remboursements déjà perçus — équivalent au " +
|
||||
"KPI \"Capital investi\" de l'app), capital en risque (sous-ensemble en " +
|
||||
"retard/procédure), montant remboursé, intérêts bruts/nets perçus, " +
|
||||
"capital reçu, total dépôts/retraits. Les montants d'investissements sont " +
|
||||
"des soldes actuels (photo à aujourd'hui), pas des cumuls par période. " +
|
||||
"Point d'entrée idéal pour une vue d'ensemble avant d'aller chercher le détail."),
|
||||
"capital reçu, total dépôts/retraits, et gain_net_depuis_debut (intérêts " +
|
||||
"nets + cashback/bonus de parrainage ou de plateforme + corrections de " +
|
||||
"solde, cumulés sur tout l'historique — équivalent au KPI \"Gain net " +
|
||||
"depuis le début\" de l'app, toujours un total, jamais filtré par année, " +
|
||||
"reste valable même après un retrait complet des plateformes). Les " +
|
||||
"montants d'investissements sont des soldes actuels (photo à " +
|
||||
"aujourd'hui), pas des cumuls par période. Point d'entrée idéal pour " +
|
||||
"une vue d'ensemble avant d'aller chercher le détail."),
|
||||
inputSchema: {
|
||||
annee: z.number().int().optional()
|
||||
.describe("Filtre les intérêts/capital reçu sur une année (ex. 2026). Omettre pour le cumul total. N'affecte pas le capital investi/en risque, qui sont toujours des soldes actuels."),
|
||||
@@ -166,6 +171,72 @@ export function registerDataTools(server, { apiGet, withLabel = (t) => t, withSo
|
||||
catch (e) { return toolError(e); }
|
||||
},
|
||||
);
|
||||
|
||||
server.registerTool(
|
||||
'crowdlending_list_objectifs',
|
||||
{
|
||||
title: withLabel('Objectifs de versement et de capital investi'),
|
||||
description: withSource(
|
||||
"Liste les objectifs fixés dans Paramétrage → Fixation des objectifs, à " +
|
||||
"comparer au réalisé (voir crowdlending_get_dashboard ou " +
|
||||
"crowdlending_list_depots_retraits). Trois types : versement_global " +
|
||||
"(objectif global sur l'investisseur principal), versement_annuel " +
|
||||
"(enveloppe par détenteur), capital_investi (objectif de capital investi " +
|
||||
"par plateforme, avec plateforme_id renseigné). Liste vide si la " +
|
||||
"fonctionnalité est désactivée par l'utilisateur, ou si aucun objectif " +
|
||||
"n'a encore été saisi."),
|
||||
inputSchema: {
|
||||
type: z.enum(['versement_global', 'versement_annuel', 'capital_investi'])
|
||||
.optional()
|
||||
.describe("Filtrer par type d'objectif. Omettre pour lister tous les objectifs."),
|
||||
annee: z.number().int().optional()
|
||||
.describe("Filtrer par année. Omettre pour lister toutes les années."),
|
||||
},
|
||||
annotations: READ_ONLY_ANNOTATIONS,
|
||||
},
|
||||
async ({ type, annee }) => {
|
||||
try { return toolResult(await apiGet('/objectifs', { type, annee })); }
|
||||
catch (e) { return toolError(e); }
|
||||
},
|
||||
);
|
||||
|
||||
server.registerTool(
|
||||
'crowdlending_get_taxreport',
|
||||
{
|
||||
title: withLabel('Synthèse fiscale annuelle (CERFA)'),
|
||||
description: withSource(
|
||||
"Retourne une synthèse fiscale annuelle pour aider à préparer la " +
|
||||
"déclaration de revenus — CE N'EST PAS UNE SOURCE OFFICIELLE : les " +
|
||||
"montants doivent être vérifiés avant d'être reportés, l'utilisateur " +
|
||||
"reste seul responsable de l'exactitude de sa déclaration. Reprend les " +
|
||||
"mêmes calculs que la page Fiscalité de l'application. `synthese_2042` " +
|
||||
"donne les cases 2TT/2TR/2BH/2CK/2TY à reporter sur la déclaration " +
|
||||
"principale (CERFA 2042). `cerfa2561` détaille le récapitulatif IFU des " +
|
||||
"plateformes françaises soumises au prélèvement forfaitaire unique " +
|
||||
"(PFU). `cerfa2047` (présent seulement si has_etranger est vrai) détaille " +
|
||||
"par plateforme étrangère l'éligibilité au crédit d'impôt conventionnel " +
|
||||
"(cases 231 à 238, ou 250 si non éligible). `cerfa2778_mensuel` (présent " +
|
||||
"seulement si has_etranger) donne le détail mensuel des intérêts bruts " +
|
||||
"par plateforme étrangère, base du calcul du prélèvement forfaitaire " +
|
||||
"obligatoire (PFO) — un acompte mensuel légalement dû seulement si " +
|
||||
"pfo_assujetti est vrai (seuil de revenu fiscal de référence : 25 000 € " +
|
||||
"pour une personne seule, 50 000 € pour un couple marié ou pacsé), mais " +
|
||||
"la déclaration annuelle CERFA 2047 reste obligatoire dans tous les cas " +
|
||||
"dès qu'il y a des revenus de plateformes étrangères. Limite connue : " +
|
||||
"case_2BH/case_2CK de synthese_2042 supposent qu'aucune plateforme " +
|
||||
"étrangère n'a été exclue manuellement du calcul PFO dans l'application " +
|
||||
"(réglage propre au navigateur, non accessible depuis l'API)."),
|
||||
inputSchema: {
|
||||
annee: z.number().int().optional()
|
||||
.describe("Année fiscale (ex. 2026). Omettre pour l'année précédente par défaut."),
|
||||
},
|
||||
annotations: READ_ONLY_ANNOTATIONS,
|
||||
},
|
||||
async ({ annee }) => {
|
||||
try { return toolResult(await apiGet('/taxreport', { annee })); }
|
||||
catch (e) { return toolError(e); }
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/** Formate le résultat d'un outil : texte JSON lisible + structuredContent.
|
||||
|
||||
Reference in new issue
Block a user