Aller au contenu

Connecter un assistant IA (MCP)

MoneyLights a un serveur MCP intégré, donc un assistant IA — Claude Desktop, Claude Code, un agent IDE, tout ce qui parle le protocole — peut travailler avec les données de ton organisation sur demande.

C’est la même crédential que l’API REST : une connexion MCP est une clé API, avec les mêmes portées, les mêmes limites et le même bouton de révocation. Il n’y a rien de séparé à gérer.

Le point de terminaison est https://api.moneylights.app/mcp (HTTP Streamable). Une configuration typique du client :

{
"mcpServers": {
"moneylights": {
"url": "https://api.moneylights.app/mcp",
"headers": { "X-API-Key": "ml_sk_..." }
}
}
}

Avec Claude Code, c’est une seule commande :

Fenêtre de terminal
claude mcp add --transport http moneylights https://api.moneylights.app/mcp \
--header "X-API-Key: ml_sk_..."

Crée la clé dans Paramètres → Clés API et accorde-lui uniquement les portées dont l’assistant a besoin. Tout nécessite la clé, y compris la liste des outils.

La liste des outils est calculée à partir des portées de ta clé, à chaque demande. Une clé sans portée n’est même pas informée de l’existence de l’outil correspondant.

OutilPortéeCe qu’il fait
get_cashflow_overviewcashflow:readRevenu/dépense/net mensuel, solde d’ouverture, principales catégories
get_analytics_overviewanalytics:readAgrégats par catégorie, client, projet et personne
list_transactionstransactions:readTransactions, filtrées et paginées, chacune avec les documents qui lui sont liés
list_documentsdocuments:readDocuments et leurs champs extraits, chacun avec les mouvements qui lui sont liés
get_document_filedocuments:readLe fichier original d’un document — le PDF ou l’image que l’application affiche
get_pending_distributionprofitpulse:readDistributions en attente Safe-to-Spend
list_vendorsvendors:readFournisseurs, avec dépenses totales
list_clientsclients:readClients, avec revenus totaux
list_projectsprojects:readProjets, avec totaux et objectifs
upload_documentdocuments:writeFichiers une facture ou un reçu dans tes documents

Les deux aperçus sont calculés sur la même base et le disent : chaque réponse porte un basis — période, devises, les comptes couverts (tous visibles, sauf si demandé par id), et comment les transferts entre les propres comptes de l’organisation ont été traités. Par défaut, ils sont exclus des revenus et des dépenses, pied par pied, exactement comme la vue Cashflow de l’application les montre ; passe includeInternalTransfers: true à l’un ou l’autre outil pour le mouvement bancaire brut, que le basis étiquette alors comme tel et qui n’est pas comparable avec le défaut. Compare les chiffres entre les deux outils uniquement lorsque leur basis correspond. netCashResult est le revenu moins les dépenses des mouvements bancaires — un résultat de trésorerie, pas un bénéfice comptable.

Les deux listes le disent, des deux côtés, de la manière dont l’application le montre. Chaque transaction porte linkedDocuments et chaque document porte linkedTransactions ; chaque entrée nomme l’autre côté et un link :

  • confirmed — le document est associé au mouvement, ce qui compte comme documenté.
  • suggested — le correspondancier propose l’appariement ; personne ne l’a confirmé et le mouvement manque encore son document. L’entrée porte le score du correspondancier.

Un assistant peut donc dire aucune facture d’une facture en attente de confirmation d* déjà classée — et ne peut rien changer, car cette connexion n’a pas d’outil pour cela.

Un mouvement peut porter plusieurs documents confirmés. Un document est lié à au plus un mouvement, donc une facture payée en plusieurs parties montre uniquement le mouvement auquel elle a été associée. Un document encore Processing n’a pas de liens encore ; None signifie aucun.

Les portées tiennent toujours : le côté éloigné d’un lien est décrit (fournisseur et numéro, ou description et montant) uniquement à une clé qui peut aussi lire cette ressource. Avec une portée, tu obtiens l’id de l’autre côté, le type de lien et le score — assez pour savoir qu’un mouvement est documenté, pas ce que dit la facture.

get_document_file prend un documentId de list_documents et renvoie le fichier stocké lui-même — le même PDF ou image que l’application ouvre — comme une ressource intégrée avec son type MIME (application/pdf, image/jpeg, …), à côté de l’id du document, du nom du fichier et de la taille — fichiers jusqu’à 10 Mo, le même plafond qu’un téléchargement. C’est comme un assistant vérifie si une différence provient de la facture, de ce qui a été extrait ou du mouvement auquel il a été associé, sans exporter quoi que ce soit. C’est une lecture : rien sur le document, ses champs extraits ou ses liens ne change. Un document qui n’est pas le tien est simplement non trouvé.

upload_document est le seul outil qui écrit, et il a été choisi pour ce rôle délibérément : il n’ajoute jamais que des éléments. L’assistant envoie le fichier (PDF ou image, jusqu’à 10 Mo) et MoneyLights le traite à travers le même pipeline qu’un téléchargement dans l’application — stocké, ses champs extraits (fournisseur, date, numéro, montants) et auto-apparié avec tes transactions bancaires.

Envoyer le même fichier deux fois ne duplique jamais tes données : le re-téléchargement est enregistré comme un doublon signalé pointant vers l’original. Tout ce que l’assistant classe est visible — et supprimable — dans l’application.

Chaque autre écriture (création de clients, reclassement de transactions, configuration d’enveloppes…) reste dans l’application par choix : ces actions supposent un humain les confirmant.

Le serveur propose également des points de départ prêts à l’emploi — une revue mensuelle du cashflow, une analyse des dépenses des fournisseurs, un nettoyage des documents manquants — listés uniquement lorsque ta clé peut exécuter tous les outils dont ils ont besoin. Utilise-les tels quels ou édite-les librement.

  • L’assistant est limité par la clé, vérifiée à chaque demande. Déclasse ou supprime le créateur de la clé et l’assistant se restreint ou s’arrête lors de l’appel suivant.
  • Les données financières contiennent du texte écrit par des étrangers — références de paiement, documents envoyés par e-mail. Les résultats des outils sont livrés à l’intérieur d’une limite marquée indiquant au modèle de les traiter comme des données, jamais comme des instructions. Considère cela comme une atténuation, pas une garantie, et limite strictement les clés.
  • Pour déconnecter un assistant, révoque sa clé dans Paramètres → Clés API. Immédiat, toujours disponible.

Donne à chaque assistant sa propre clé — une par client signifie que tu peux en couper une sans perturber le reste.