Documentation

Connecteur MCP Antò

Cette page décrit le connecteur MCP d'Antò : ce qu'il fait, comment l'ajouter à un client compatible, comment l'autorisation fonctionne, quels outils sont exposés, quelles limites s'appliquent et comment interpréter les erreurs renvoyées.

Dernière mise à jour : 31 août 2026

1. Ce que fait le connecteur

Le connecteur MCP Antò est un serveur distant qui expose les données et une partie des opérations de votre établissement Antò à un client compatible avec le Model Context Protocol (MCP). Une fois le connecteur ajouté et autorisé, l'assistant que vous utilisez peut consulter vos stocks, vos lots, vos relevés HACCP, vos clients, vos produits, vos commandes et vos factures, et effectuer certaines écritures après confirmation explicite.

Chaque appel s'exécute sous votre compte utilisateur et reste confiné aux données de votre établissement. Les lectures et les consultations n'écrivent rien et ne demandent aucune confirmation. Les outils d'écriture fonctionnent en deux temps : un premier appel produit un aperçu, un second appel exécute. Aucun outil de suppression n'est exposé, et aucun outil n'envoie d'e-mail.

Parcours de commande avec PDF validé (pas encore activé). Cinq outils permettent à l'assistant de préparer une commande client, une commande fournisseur ou un devis : brouillon et PDF calculés par Antò, puis un lien vers la page de revue d'Antò. L'envoi ne part qu'après votre clic sur « Valider et envoyer » dans Antò, où vous voyez le PDF, les destinataires et le message ; aucun outil de l'assistant n'envoie ni ne valide, et une confirmation donnée dans la conversation ne suffit pas. Ce parcours n'est pas encore activé sur le serveur : ces outils ne sont pas proposés aux assistants aujourd'hui.

Le connecteur ne remplace pas l'application : les opérations qui ne figurent pas dans la liste des outils continuent de se faire depuis Antò.

2. Prérequis

  • Un compte Antò actif. L'autorisation se fait avec ce compte ; le connecteur n'utilise ni clé d'API ni mot de passe partagé.
  • Un profil utilisateur. Les outils de lecture sont ouverts à tous les profils. Les outils d'écriture sont réservés à certains profils métier : la colonne « Profils autorisés » du tableau de la section 5 indique lesquels pour chaque outil.
  • Un client compatible MCP prenant en charge le transport Streamable HTTP et l'authentification OAuth 2.1 pour les serveurs distants. Parcours documentés ci-dessous : Claude (web et Desktop), Claude Code, ChatGPT en mode développeur. Les autres clients MCP à serveur distant devraient convenir sans avoir été testés par Antò ; les clients exécutés dans un navigateur ne sont pas pris en charge.
Option Savé. Les outils factures_impayees, ca_periode, creer_facture et creer_avoir nécessitent que l'option Savé (comptabilité) soit activée sur l'établissement. Sans elle, l'outil renvoie une erreur explicite ; les autres outils fonctionnent normalement.

3. Connexion

L'adresse du serveur MCP est la même pour tous les clients :

https://mcp.heyanto.fr/mcp/v1

La procédure est toujours la même : ajouter un connecteur distant, coller cette adresse, puis autoriser avec votre compte Antò. Les étapes ci-dessous détaillent les clients les plus courants ; offres et menus relevés sur les pages des éditeurs le 24/09/2026, susceptibles d'évoluer.

Antò n'est pas encore publié dans les annuaires de Claude et de ChatGPT : la connexion est accompagnée (procédure ci-dessous), pas une installation en un geste. Dans Antò, Réglages → Mes assistants indique l'état réel de la connexion : « Connexion vérifiée » seulement après un appel réussi de l'outil verifier_connexion_anto par l'assistant. La même page permet de désactiver l'accès de tous vos assistants pour l'établissement (effet immédiat côté Antò ; retirez aussi le connecteur dans l'assistant).

Claude (offres Free — un connecteur personnalisé —, Pro, Max, Team, Enterprise)

  1. Ouvrez Claude, puis Personnaliser → Connecteurs et « + ». Sur Team et Enterprise, un propriétaire ajoute d'abord le connecteur dans les paramètres de l'organisation, puis chaque utilisateur s'y connecte.
  2. Choisissez Ajouter un connecteur personnalisé.
  3. Collez l'adresse https://mcp.heyanto.fr/mcp/v1, puis autorisez avec votre compte Antò.

ChatGPT (mode développeur : Plus, Pro, Business, Enterprise, Edu, version web)

  1. Activez le mode développeur : Réglages → Sécurité et connexion.
  2. Créez une app en mode développeur pour un serveur MCP distant, collez l'adresse https://mcp.heyanto.fr/mcp/v1, puis validez l'autorisation OAuth.
  3. Dans une conversation, choisissez le mode développeur et l'app Antò. Les écritures demandent une confirmation dans ChatGPT.

La recherche approfondie (deep research) de ChatGPT n'est pas prise en charge : elle exige des outils search et fetch que ce serveur n'expose pas.

Claude Desktop (Mac et Windows)

  1. Ouvrez Personnaliser → Connecteurs, puis « + ».
  2. Choisissez Ajouter un connecteur personnalisé.
  3. Collez l'adresse https://mcp.heyanto.fr/mcp/v1, puis autorisez.

Claude Code (interface en ligne de commande)

  1. Dans un terminal, lancez la commande suivante :
    claude mcp add --transport http anto https://mcp.heyanto.fr/mcp/v1
  2. Suivez le flux OAuth affiché dans la console.
  3. Redémarrez votre session Claude Code.

Autres clients MCP

  1. Ouvrez les réglages MCP de votre client.
  2. Ajoutez un serveur distant HTTP.
  3. Renseignez l'adresse https://mcp.heyanto.fr/mcp/v1 et suivez le flux OAuth.
Déconnexion. Dans Antò, Réglages → Mes assistants → « Désactiver tous mes assistants pour cet établissement » coupe l'accès dès la requête suivante (réponse assistant_access_revoked). Retirez aussi le connecteur depuis les réglages de votre client. Votre compte et vos données Antò restent inchangés.

4. Autorisation et sécurité

  • OAuth 2.1 avec PKCE, via Clerk. L'autorisation passe par votre compte Antò. Aucun mot de passe ni aucune clé d'API n'est transmis au client. Le jeton doit porter les autorisations email et profile et être destiné à https://mcp.heyanto.fr/mcp/v1.
  • Portée limitée à votre établissement. Chaque appel s'exécute dans le contexte de l'établissement auquel votre compte est rattaché ; toutes les requêtes des outils sont filtrées sur cet établissement. Votre compte, votre profil et l'abonnement sont relus à chaque requête : un accès retiré dans Antò l'est immédiatement pour le connecteur.
  • Droits par profil. Les outils de lecture sont ouverts à tous les profils. Les outils d'écriture sont restreints aux profils métier concernés, en plus des profils d'administration. Un appel émis par un profil non autorisé est refusé avec le code forbidden.
  • Limite de débit et détection de boucle. Par défaut, 30 requêtes par minute et par établissement. Le serveur coupe également les boucles : le même outil rappelé avec les mêmes paramètres trois fois en moins d'une minute est refusé. Ces refus sont des réponses HTTP 429 au format JSON-RPC avec un en-tête Retry-After.
  • Journal d'audit. Chaque appel d'outil est journalisé : outil appelé, utilisateur, profil, horodatage, résultat (succès, refus, erreur) et noms des paramètres transmis (pas leurs valeurs).
  • Confirmation des écritures. Un outil d'écriture appelé avec confirm:false ne modifie rien : il renvoie un aperçu accompagné d'un jeton de confirmation. Seul un second appel portant ce jeton, avec des paramètres strictement identiques, exécute réellement l'opération. Un jeton n'est valable que pour un utilisateur, un établissement, un outil, un jeu de paramètres et le plan affiché (prix, quantités, lots, dates) ; il expire après 15 minutes. Si le plan a changé entre l'aperçu et la confirmation, rien n'est écrit (plan_changed).
  • Absence de doublon. Les outils d'écriture qui acceptent un identifiant de requête (client_request_id) rejouent le résultat déjà produit au lieu d'écrire une seconde fois. Réutiliser le même identifiant avec des paramètres différents est refusé plutôt qu'exécuté silencieusement.
  • Aucune suppression. Aucun outil de suppression n'est exposé. Cinq outils modifient toutefois l'existant, toujours après confirmation : creer_avoir annule une facture validée, modifier_prix remplace un tarif, creer_facture avec validation numérote la facture, creer_bl_complet décrémente le stock, enregistrer_temperature signe une tâche HACCP.

5. Les outils

Le serveur expose 31 outils : 20 en lecture (dont 6 consultations métier : statistiques, fiche client, encaissements, stocks, capacités et détail), 8 en écriture avec confirmation, 2 composites et 1 contrôle de connexion (verifier_connexion_anto, qui confirme la liaison dans ANTO sans lire de donnée métier). Cinq outils du parcours documentaire (préparer une commande ou un devis à faire valider dans ANTO, sans jamais l'envoyer) s'y ajoutent quand ce parcours est activé sur le serveur : 36 outils au total. Le tableau ci-dessous est généré à partir du code du serveur ; il reflète les noms, titres, annotations et droits réellement déclarés au client MCP.

La colonne Confirmation indique si l'outil applique le schéma en deux temps décrit à la section 4. La colonne Profils autorisés indique les profils qui peuvent l'appeler ; « Tous les profils » signifie qu'aucune restriction de rôle ne s'applique.

Les 36 outils du serveur MCP Antò (dont 5 du parcours documentaire, exposés seulement quand il est activé), dans l'ordre d'enregistrement : lecture, puis écriture, puis composites.
Outil Titre Type Confirmation Profils autorisés Ce qu'il fait
recap_journee Récap de la journée Lecture Non Tous les profils Résumé de l'établissement pour la période demandée : nombre de commandes, BL en attente de signature, lots ouverts dont bloqués, alertes actives (HACCP non signé, stock utilisable sous seuil, DLC imminente, DLC dépassée). Jour = jour civil Europe/Paris. À APPELER EN DÉBUT DE SESSION pour avoir une vue d'ensemble. Ne PAS utiliser pour un détail chiffré précis (→ ca_periode) ni pour la liste des alertes (→ alertes). Paramètre : periode (jour ou semaine). Retourne des compteurs agrégés + hints contextuels.
alertes Alertes actives Lecture Non Tous les profils Toutes les alertes actives de l'établissement, filtrable par type. Types : haccp (tâches non signées aujourd'hui, hors relevés déjà en temp), stock (stock utilisable sous seuil critique), dlc (lot périmé ou arrivant à DLC dans 48 h), temp (relevé température hors seuil du jour). Jour = jour civil Europe/Paris. `totaux` par type exacts ; listes limitées à 100 par type (`tronque`). Sans filtre : retourne toutes les alertes. Utiliser recap_journee pour une vue d'ensemble chiffrée.
ca_periode Chiffre d'affaires par période Lecture Non admin, SUPER_ADMIN, compta Chiffre d'affaires HT BRUT sur une période (total + optionnel ventilation par client ou par produit). Source (définition ca-facture-brut-ht-v2) : factures définitives (type facture) aux statuts validee/envoyee/payee/payee_partiellement/en_retard ; avoirs et acomptes exclus. Ventilation produit par identifiant produit (lignes sans produit identifié : « Produit non rapproché »). Préférer recap_journee pour un simple chiffre du jour, ou factures_impayees pour l'encours. Paramètres : debut (YYYY-MM-DD), fin (YYYY-MM-DD, inclusive ; jours civils Europe/Paris ; 24 mois max), grouper_par (optionnel : client ou produit).
stocks_critiques Stocks sous seuil critique Lecture Non Tous les profils Liste les ingrédients dont le stock UTILISABLE est inférieur au seuil d'alerte configuré (seuilCritique). stockUtilisable = solde des lots − lots bloqués (quarantaine, à jeter, périmés ; un lot à plusieurs motifs compte une fois), négatif conservé — même définition que consulter_stocks (stock.usable_qty). Retourne nom, compteur (currentStock), solde des lots, écart compteur − lots, stock bloqué, stock utilisable, seuil, unité, catégorie, type de stock, ratio ; total exact et tronque si plus de 100. Quand utiliser : dashboard proactif, audit stock, préparation commande fournisseur. Ne pas utiliser pour chercher un ingrédient spécifique (préférer stock_ingredient). Sans paramètre. Retour : liste triée (pire en premier) + count + hints.
stock_ingredient Stock d'un ingrédient Lecture Non Tous les profils État du stock d'un ingrédient spécifique : compteur (currentStock), solde des lots, écart compteur − lots, stock bloqué (lots en quarantaine, à jeter ou périmés, un lot à plusieurs motifs compté une fois) et stock utilisable = solde des lots − lots bloqués, négatif conservé (même définition que consulter_stocks) ; lots au solde non nul (numéro, qty restante, DLC, date réception, motifs_blocage ; 50 max, nbLotsOuverts = total), catégorie, fournisseurs habituels. Recherche fuzzy case-insensitive sur le nom (min 2 caractères). Retourne jusqu'à 5 meilleures correspondances. Quand utiliser : vérifier stock avant production, répondre à une question ciblée. Pour la liste globale des sous-seuil, préférer stocks_critiques. Params : nom (string requis).
lots_dlc Lots proches de la DLC Lecture Non Tous les profils Lots ingrédients en stock : `lots` = fenêtre future explicite (DLC d'aujourd'hui à J+jours, jours civils Europe/Paris, défaut 7) ; `perimes` = lots dont la DLC est déjà dépassée, listés à part. Chaque lot : id, numéro, ingrédient, DLC, stock restant, daysLeft (négatif si périmé), motifs_blocage (quarantaine, a_jeter, perime). `totaux` exacts ; listes limitées à 200 (`tronque`). Trié par DLC ascendante. Quand utiliser : gestion DLC, anticipation pertes, retrait des périmés. Params : jours (int 0-90, défaut 7). Ne couvre pas les lots de produits finis (ProductionBatch).
tracer_lot Traçabilité d'un lot Lecture Non Tous les profils Traçabilité complète d'un lot : origine (fournisseur+facture OU recette), productions liées (via ProductionUsage), livraisons clients (via TraceabilityEvent step=delivery). Format lot attendu : cuid OU numéro (internalLotCode pour ingredientLot, lotNumber AAJJMMLL pour batch). Quand utiliser : audits HACCP/DDPP, enquête non-conformité, rappel produit. Params : lot (string min 3), offset (pagination par 50). Retour : statut de blocage du lot (il reste traçable), totaux exacts productions/livraisons et pagination.tronque ; rappeler avec offset_suivant tant que tronque=true avant de conclure à une liste complète. Si un lot matière et un lot de production portent le même numéro, la réponse est une liste de choix (choix_lot : id, kind, numéro, nom, date) sans traçabilité : rappeler tracer_lot avec l'id du lot voulu. Retour 404 si non trouvé. Graph complet (liaisons BL ↔ lots) dans l'écran Traçabilité de l'app.
temperatures_jour Relevés de température du jour Lecture Non Tous les profils Relevés de température HACCP du jour (ou d'une date donnée), par zone de stockage (chambre froide, congélateur, etc.). Signale les dépassements de seuil via nonConformity. NE PAS utiliser pour saisir un relevé (→ enregistrer_temperature en Phase 4). Retourne : date, totalReleve, liste des relevés (zone, taskLabel, temperature, heure, horsSeuil, note, operatorId), et horsSeuil agrégé. Params : date (YYYY-MM-DD, jour civil Europe/Paris, défaut aujourd'hui). totalReleve = nombre exact ; liste limitée à 500 (tronque). Note : pas de liste de zones attendues dans le schema actuel.
score_haccp Score de conformité HACCP Lecture Non Tous les profils Score de conformité HACCP pour l'établissement : pourcentage de tâches complétées sur la période, liste des tâches en retard (nettoyage, relevés, contrôles). Permet de savoir si on est à jour pour un contrôle DDPP. Retourne : periode, dateDebut/dateFin, score_percent (0-100, ou null avec reason no_tasks si aucune tâche sur la période), total_taches, completed, non_completed, en_retard (5 plus anciennes), en_retard_total (nombre exact). Fenêtres en jours civils Europe/Paris. Params : periode (jour | semaine | mois, défaut semaine).
chercher_client Rechercher un client Lecture Non Tous les profils Recherche un client par nom, SIREN ou ville. Retourne jusqu'à 5 correspondances avec fiche essentielle : raison sociale, SIREN, ville, groupe tarifaire ; adresse, email et téléphone pour les profils admin, commercial et comptabilité (sinon null avec coordonnees_masquees=true). Pour obtenir les prix de ce client → prix_client. Pour ses commandes → lister_commandes (filtre client_id). Paramètre : recherche (string, min 2 caractères).
prix_client Grille tarifaire d'un client Lecture Non admin, SUPER_ADMIN, commercial, compta Réservé aux profils admin, commercial et comptabilité. Prix effectifs d'un client : pour ses tarifs négociés et les produits de ses commandes récentes, le prix HT que creer_commande appliquera sans prix saisi (tarif client de la grille modifiée par modifier_prix, sinon prix catalogue contrainte comprise, sinon dernier prix commandé) avec sa source et, pour information, le dernier prix commandé. Utiliser client_id (id moderne ou legacy) si connu, sinon nom_client (recherche littérale) : si plusieurs clients correspondent, la réponse est une liste de choix (choix_client) sans aucun prix — rappeler avec client_id. Au moins l'un des deux est requis. 50 prix maximum.
chercher_produit Rechercher un produit Lecture Non Tous les profils Recherche un produit / fiche technique (Recipe) par nom. Retourne jusqu'à 5 matches avec : type de boyau, DLC par défaut (jours), type d'emballage, poids moyen (kg), top 5 ingrédients principaux (nom, quantité par kg, unité). Recherche fuzzy case-insensitive (min 2 caractères). Pour le prix chez un client spécifique → prix_client. Paramètre : recherche (string).
lister_commandes Lister les commandes Lecture Non Tous les profils Commandes (Order) du jour ou de la semaine avec statut et détail. Filtrable par statut (draft, validated, sent, delivered, cancelled) et/ou client_id. Retourne count total + 20 plus récentes avec numéro, client, statut, date, total HT calculé, nb de lignes, nb de BL associés. Les montants ne sont rendus qu'aux profils admin, commercial et comptabilité (sinon totalHT null et montants_masques true). Ne PAS utiliser pour créer une commande (→ creer_commande en Phase 4).
factures_impayees Factures impayées Lecture Non admin, SUPER_ADMIN, compta Factures non réglées de l'établissement avec montant HT/TTC, client, date d'émission, date d'échéance, jours de retard (jours civils Europe/Paris) et tranche de balance âgée, nombre de relances envoyées. Filtrable par jours_retard_min. total_solde_du et nb_factures_total couvrent TOUTES les factures du filtre ; la liste est paginée (limite, offset ; pagination.tronque et offset_suivant indiquent la suite). Réservé aux profils admin et comptabilité ; nécessite l'addon Savé (comptabilité) actif sur l'établissement — sinon retourne une erreur explicite.
chercher_fournisseur Rechercher un fournisseur Lecture (parcours documentaire, sur activation) Non Tous les profils Recherche un fournisseur par nom (5 au plus) et, avec `article`, ses articles correspondants. Rend des identifiants et libellés, et la présence de contacts joignables (sans leurs coordonnées). Sert à préparer une commande fournisseur avec preparer_document_commande. Plusieurs résultats : faire choisir l'utilisateur.
suivre_envoi_document Suivre l'envoi d'un document Lecture (parcours documentaire, sur activation) Non admin, SUPER_ADMIN, commercial État de l'envoi par destinataire après la validation dans ANTO : queued, sending, accepted (pris en charge par le service d'envoi), delivered (remis au serveur du destinataire), rejected, bounced, unknown (vérification en cours : ne pas renvoyer), cancelled. Lecture seule.
capacites_consultation Ce que je peux consulter Lecture Non Tous les profils Liste les indicateurs, regroupements, filtres et sections de fiche client que VOTRE profil peut consulter (droits et module Savé appliqués), avec leurs définitions, unités, bases temporelles et les indicateurs indisponibles (raison et condition d'activation), plus des exemples de questions. À appeler avant consulter_statistiques si l'indicateur n'est pas connu. Lecture seule : aucune donnée métier n'est lue.
consulter_statistiques Consulter des statistiques Lecture Non Tous les profils Chiffres agrégés de l'établissement (CA, avoirs, commandes, créances, stocks, achats, production, livraisons, marges, qualité HACCP, traçabilité, devis) par indicateur du catalogue, regroupés (client, produit, mois…), filtrés et comparés. Exemples : « CA ce mois-ci » → domain sales, metrics [sales.invoiced_ht], period {relative: ce_mois} ; « et le mois précédent » → period {relative: mois_precedent} ; « par produit » → dimensions [product]. Le TOTAL rendu couvre tout le périmètre : ne jamais additionner les lignes d'une page ; citer les montants tels que rendus (unité, qualité, complétude, date de calcul) et donner `detailUrl`. Un indicateur interdit pour votre profil est refusé AVANT lecture. Lecture seule : ne relance, n'envoie ni ne modifie rien.
consulter_client Fiche client Lecture Non Tous les profils Dossier d'un client par sections demandées : identité, activité, commandes, livraisons, contacts, adresses, tarifs, factures, encours (balance âgée, prochaine échéance). Homonymes : liste de choix (ID, nom, ville, groupe), à montrer à l'utilisateur. Chaque section est autorisée selon votre profil avant lecture ; une section refusée est signalée comme refusée, sans aucun chiffre. Notes internes et identifiants privés jamais rendus. Lecture seule.
consulter_encaissements Factures à encaisser Lecture Non admin, SUPER_ADMIN, compta Reste à encaisser (TTC) : total global, dont en retard, non échu, sans échéance, nombre de factures ; regroupable par client (« qui me doit quoi »), facture, tranche d'échéance (balance âgée en jours civils Europe/Paris) ou mois ; filtres client, tranche, état, échéance. Vue `encaissements` : paiements enregistrés de TOUT l'établissement sur une période (jamais « rapprochés »), regroupables par mois uniquement ; client_ids, tranches, etats, echeance_du/au et tout autre regroupement y sont REFUSÉS (erreur validation_failed, aucune lecture) : pour un client, utiliser la vue a_encaisser. Soldes canoniques d'ANTO, jamais recalculés. Réservé aux profils admin et comptabilité avec le module Savé. LECTURE SEULE : n'envoie aucune relance ; pour relancer, l'utilisateur passe par ANTO.
consulter_stocks Consulter les stocks Lecture Non Tous les profils Stock à l'instant de lecture, par famille (matières premières ou produits finis), ingrédient/produit, lot, état de lot ou unité : compteur, solde des lots, écart compteur − lots (expliqué, jamais corrigé), bloqué (quarantaine, à jeter, périmé, non libéré ; un lot à plusieurs motifs compte une fois), physique et utilisable (matières, lus sur les lots). Réservé et disponible ne sont pas suivis ; aucun site ; aucun historique. Unités jamais additionnées. Pour « par lot », regrouper_par [lot]. Un produit fini nommé (« stock de saucisson ») : produit_nom, qui rend une liste de choix si plusieurs produits correspondent. Lecture seule.
detailler_resultat Détailler un résultat Lecture Non Tous les profils Détaille une ligne d'une consultation précédente (« pour ce client seulement », « par produit », « montre le lot ») : renvoyer `requete` telle quelle, le `detailRef` de la ligne et, si voulu, un regroupement `detailler_par`. Le serveur revalide la requête, la référence, les identifiants et VOS droits actuels, puis recalcule et date le détail (avertissement si les données ont changé). Les liens ANTO de chaque ligne sont dans `liens`. Lecture seule.
creer_commande Créer une commande Écriture Oui admin, SUPER_ADMIN, commercial Crée une commande client. Appeler d'ABORD avec `confirm:false` pour prévisualiser (client trouvé, lignes résolues, total HT calculé). Puis rappeler avec `confirm:true` et les MÊMES paramètres + `client_request_id` UUID pour créer. Si le client est inconnu, utiliser chercher_client d'abord pour obtenir son client_id. Prix non fourni → tarif du client (grille modifiée par modifier_prix), sinon prix catalogue, sinon dernier prix commandé (source indiquée par ligne) ; introuvable → refus. Si le plan (prix, lignes) change entre l'aperçu et la confirmation, rien n'est écrit (`plan_changed`). Utiliser creer_commande_complete (Phase 5) pour une création en une seule passe quand toutes les infos sont connues.
creer_bl Créer un bon de livraison Écriture Oui admin, SUPER_ADMIN, commercial Crée un bon de livraison. Deux modes : (a) depuis une commande existante via `commande_id` — les lignes sont reprises et écrites sur le BL ; (b) manuellement via `client_id` + `lignes` — un Order support est créé puis rattaché au BL, prix absent = tarif client/catalogue/dernier prix commandé, introuvable = refus. Aucun mouvement de stock. Si le plan (lignes, prix, lot, date) change entre l'aperçu et la confirmation, rien n'est écrit (`plan_changed`). Pattern 2-step : `confirm:false` pour prévisualiser puis `confirm:true` + `client_request_id` pour créer. Utiliser creer_bl_complet (Phase 5) pour créer + décrémenter le stock + tracer en une passe.
lancer_production Lancer une production Écriture Oui admin, SUPER_ADMIN, production, OPERATEUR Lance une fabrication depuis une recette. Plan identique à l'application : lots admissibles (ni quarantaine, ni à jeter, non périmés), réservations des productions en cours déduites, ordre de réception ; `lots_ingredients` IMPOSE un lot par ingrédient (réservé tel quel ou refusé explicitement). Pattern 2-step : `confirm:false` → preview (recette, lots réservés par ingrédient, coût matière estimé) ; `confirm:true` → crée le ProductionBatch (status=in_progress) et les ProductionUsage = réservation EXACTE des lots annoncés ; si le plan a changé entre-temps, rien n'est écrit (`plan_changed`). Le stock sera décrémenté à la clôture du lot (pas ici). Format lotNumber : AAJJMMLL (ex : 26042001).
enregistrer_temperature Enregistrer une température HACCP Écriture Oui admin, SUPER_ADMIN, commercial Enregistre un relevé de température HACCP (chambre froide, congélateur, etc.) sur la checklist du jour. Deux modes de résolution : `zone_id` (exact, HaccpTaskEntry.id) ou `zone_nom` (fuzzy contains sur taskLabel). Pattern 2-step : `confirm:false` → preview ; `confirm:true` → enregistre et marque la tâche faite. Idéal pour la saisie vocale ('enregistre 4.2 degrés chambre froide').
modifier_prix Modifier un prix client Écriture Oui admin, SUPER_ADMIN, commercial Modifie le tarif d'un client pour un produit dans la grille de prix par client (clients_tarifs). Appeler d'ABORD avec `confirm:false` pour prévisualiser (prix actuel → nouveau, delta). Puis rappeler avec `confirm:true`, les MÊMES paramètres + un `client_request_id` UUID pour appliquer. Identifier client et produit par leur UUID si connu, sinon par nom (fuzzy). La remise est recalculée automatiquement vs le prix catalogue. Pour lire la grille existante, utiliser prix_client.
preparer_document_commande Préparer une commande à faire valider Écriture (parcours documentaire, sur activation) Oui admin, SUPER_ADMIN, commercial Prépare une commande client, une commande fournisseur ou un devis client SANS L'ENVOYER : brouillon, calcul des prix/TVA par ANTO, PDF, et un lien_revue où l'utilisateur vérifie le PDF et clique « Valider et envoyer ». À utiliser pour toute demande « prépare / envoie la commande (ou le devis) à … ». Devis : type=devis, date_livraison = date de validité. Aucun outil n'envoie à sa place et aucune confirmation dans la conversation ne suffit. Donne les IDs connus (chercher_client, chercher_fournisseur) ou les noms tels que dits : un nom ambigu renvoie les choix à proposer, rien n'est créé. Ne devine ni le sens, ni la contrepartie, ni un prix, ni une adresse. Commande déjà créée par creer_commande_complete : passe document_existant_id (pas de doublon). « Renvoie le même document » : renvoi=true et un NOUVEAU client_request_id. Demande dictée (ex. « Leclerc Drive, douze coppas pour vendredi ») : transmets ce qui a été dit, nombres en chiffres, date calculée sur le jour de Paris, unité seulement si elle a été dite. Redis ensuite le récapitulatif (quantités normalisées, date complète) : c'est là qu'une erreur de dictée se voit. Correction après l'aperçu (« non, plutôt 20 ») : modifier_preparation_document, jamais une nouvelle préparation.
modifier_preparation_document Modifier une préparation de document Écriture (parcours documentaire, sur activation) Non admin, SUPER_ADMIN, commercial Modifie une préparation non envoyée (quantités, date, note, destinataires, objet, message) : produit une NOUVELLE révision et un nouveau PDF à revérifier dans ANTO ; l'ancien aperçu ne peut plus être validé. À utiliser quand l'utilisateur corrige après l'aperçu (« non, plutôt 20 », « un virgule cinq, pas quinze ») : même document, même numéro. revision_attendue est obligatoire. N'envoie rien. Pour un renvoi de document enregistré, seuls destinataires, objet et message changent ici.
consulter_preparation_document Consulter une préparation de document Consultation (actualise l'état de la préparation) (parcours documentaire, sur activation) Non admin, SUPER_ADMIN, commercial État courant d'une préparation de commande de l'utilisateur : révision, blocages, lignes, totaux, lien de revue ANTO et, après validation, résumé de l'envoi. Lecture seule ; n'envoie rien.
creer_facture Créer une facture depuis des BL Écriture Oui admin, SUPER_ADMIN, compta Génère une facture à partir d'un ou plusieurs bons de livraison (DeliveryNote) du MÊME client. Appeler d'ABORD avec `confirm:false` pour prévisualiser (client, nb BL, total HT estimé). Puis rappeler avec `confirm:true`, les MÊMES paramètres + un `client_request_id` UUID pour générer. `valider:false` (défaut) crée un brouillon ; `valider:true` numérote et verrouille la facture (nécessite l'onboarding module SAVE). Réservé aux profils admin / compta.
creer_devis Créer un devis Écriture Oui admin, SUPER_ADMIN, commercial Crée un devis (Quote) pour un client. Appeler d'ABORD avec `confirm:false` pour prévisualiser (totaux HT/TVA/TTC recalculés serveur-side). Puis rappeler avec `confirm:true`, les MÊMES paramètres + un `client_request_id` UUID pour créer. Identifier le client par `client_id` (UUID legacy, le nom est dérivé) ou par `client_nom` libre. Chaque ligne : `produit_id` (optionnel, valide l'appartenance), `designation`, `quantite`, `prix_unitaire_ht`, `remise_pct`. La TVA est celle de la commande (tarif article × client, taux du client, fiche produit). Prépare seulement : le devis est créé en brouillon et RIEN n'est envoyé. Pour l'envoyer, l'utilisateur clique « Vérifier et envoyer » sur la fiche du devis dans ANTO (PDF figé, destinataires, validation) ; l'envoi ne l'accepte pas et ne crée ni commande ni facture. Réservé aux profils admin / commercial.
creer_avoir Créer un avoir d'annulation Écriture Oui admin, SUPER_ADMIN, compta Crée un avoir d'ANNULATION TOTALE sur une facture (génère une facture type avoir à montants négatifs liée à l'origine). Appeler d'ABORD avec `confirm:false` pour prévisualiser (facture, client, montant à créditer). Puis rappeler avec `confirm:true`, les MÊMES paramètres + un `client_request_id` UUID. La facture doit être validée/envoyée et NON payée ; `motif` obligatoire (min. 3 caractères). Réservé aux profils admin / compta.
verifier_connexion_anto Vérifier la connexion ANTO Contrôle de connexion Non Tous les profils Vérifie que cet assistant est bien connecté à ANTO et l'indique dans ANTO (Réglages → Mes assistants). Retourne : connexion, etablissement (nom), profil, assistant (identifié ou non), capacites (lecture ; ecritures_autorisees pour ce profil), verifie_le. Aucune donnée métier (stocks, clients, montants). Aucun paramètre.
creer_commande_complete Créer une commande complète Composite Oui admin, SUPER_ADMIN, commercial Crée une commande client COMPLÈTE en une transaction atomique : entête + lignes + numérotation. Si une ligne échoue (prix introuvable, produit invalide), tout est rollback. PRÉFÉRER ce tool quand le client et toutes les lignes sont connues d'un coup (pas d'itération avec l'utilisateur). Pour une création interactive ou incrémentale, utiliser creer_commande (Phase 4).
creer_bl_complet Créer un BL complet (stock décrémenté) Composite Oui admin, SUPER_ADMIN, commercial Crée un bon de livraison COMPLET en une transaction atomique : (1) entête BL, (2) reprise ou saisie des lignes, (3) décrément du stock MATIÈRE par IngredientLot FIFO — lots admissibles (ni quarantaine, ni à jeter, non périmés, réservations de production déduites), ordre de réception — ou lot_id imposé (refusé s'il n'est pas admissible ou insuffisant), (4) événement de traçabilité par ligne livrée, (5) si `commande_id` fourni : marque l'Order `delivered`. `lot_id` désigne uniquement le lot matière consommé ; `production_batch_id` désigne le lot PRODUIT livré et alimente DeliveryNoteLine.lotId. Avec `commande_id`, chaque produit exigeant un numéro de lot doit avoir une entrée `lignes` portant son `order_line_id`, son `product_id` moderne, sa quantité exacte et son `production_batch_id`. Sans lot produit explicite en mode manuel, lotId reste null. Si le stock est insuffisant, TOUT est rollback. L'aperçu (`confirm:false`) calcule le plan réel (lignes, prix, lots, débits) ; si ce plan change avant la confirmation, rien n'est écrit (`plan_changed`). PRÉFÉRER ce tool pour un BL complet sans itération. Pour un flow interactif ou avec validation intermédiaire, utiliser creer_bl (Phase 4).

6. Limites

  • 30 requêtes par minute et par établissement (valeur par défaut). Au-delà, le serveur répond HTTP 429 avec l'en-tête Retry-After (60 secondes au plus).
  • Détection de boucle. Le même outil appelé avec les mêmes paramètres trois fois de suite en moins d'une minute est refusé.
  • Listes bornées, totaux exacts. Les recherches de clients, de produits et d'ingrédients renvoient au plus 5 correspondances (termes de 100 caractères au plus, pris littéralement) ; lister_commandes renvoie le total et les 20 commandes les plus récentes ; prix_client renvoie au plus 50 prix. Quand une liste est plafonnée, la réponse l'indique (tronque) et les totaux portent sur l'ensemble ; factures_impayees et tracer_lot se paginent avec offset.
  • Période bornée. ca_periode refuse les fenêtres de plus de 24 mois calendaires. Les jours s'entendent en heure de Paris.
  • Option Savé. factures_impayees, ca_periode, creer_facture et creer_avoir nécessitent l'option Savé activée sur l'établissement.
  • Écritures en deux appels. Aucune écriture ne s'exécute en un seul appel : il faut d'abord obtenir un aperçu, puis confirmer avec le jeton renvoyé.
  • Recettes composées. lancer_production ne prend pas en charge les recettes contenant des sous-recettes composées ; ces productions se lancent depuis l'application.

7. Dépannage

Les erreurs de transport (authentification, origine, taille, limite de débit) sont renvoyées en HTTP ; les 429, 403 d'origine et 413 le sont au format JSON-RPC (error.code = -32000 ou -32600, motif dans error.data.reason pour les 429). Les erreurs d'outil sont renvoyées dans la réponse de l'outil, sous la forme d'un code et d'un message. Voici les codes que vous pouvez rencontrer.

Codes d'erreur renvoyés par le serveur MCP Antò, cause probable et action à mener.
Code Cause Action
invalid_token (HTTP 401) Jeton OAuth absent, expiré ou invalide. Relancez l'autorisation depuis les réglages du connecteur dans votre client.
HTTP 429, error.data.reason = "rate_limited" Plus de 30 requêtes (valeur par défaut) en une minute pour l'établissement. Attendez le délai indiqué par Retry-After (ou error.data.retry_after_s).
HTTP 429, error.data.reason = "loop_detected" Le même outil a été appelé avec les mêmes paramètres trois fois en moins d'une minute. Vérifiez les paramètres de la demande, puis reformulez-la.
forbidden Votre profil n'est pas autorisé à utiliser cet outil. Le message indique les profils requis. Faites réaliser l'opération par un profil autorisé, ou depuis l'application.
validation_failed Un paramètre est manquant, mal formé ou hors des valeurs acceptées. Le message précise le champ en cause. Corrigez le paramètre et relancez.
not_found La ressource demandée (client, produit, lot, facture, commande) n'existe pas dans votre établissement. Vérifiez l'identifiant ou le libellé, au besoin avec un outil de recherche.
ambiguous_match Plusieurs clients, produits ou zones correspondent au libellé fourni. Précisez l'identifiant exact plutôt que le nom.
confirmation_required Une écriture a été demandée sans jeton de confirmation valide. Rappelez d'abord l'outil avec confirm:false pour obtenir un jeton, puis renvoyez ce jeton avec des paramètres identiques.
confirmation_expired La fenêtre de confirmation a expiré entre l'aperçu et l'exécution. Redemandez un aperçu, puis confirmez à nouveau.
idempotency_conflict L'identifiant de requête a déjà servi pour des paramètres différents, ou appartient à un autre utilisateur. Relancez l'opération avec un nouvel identifiant de requête.
operation_in_progress Une exécution identique est déjà en cours. Patientez quelques secondes, puis retentez avec le même identifiant de requête.
manual_reconciliation_required Une tentative précédente a été interrompue après avoir potentiellement écrit. Vérifiez l'état dans l'application avant de retenter : rejouer risquerait de créer un doublon.
addon_not_active L'option Savé (comptabilité) n'est pas activée sur l'établissement. Activez l'option Savé, ou consultez les factures depuis l'application.
range_too_large La période demandée dépasse 24 mois. Restreignez la période.
stock_insufficient Le stock disponible ne couvre pas la production ou la livraison demandée. Le message liste les ingrédients manquants. Réapprovisionnez ou réduisez les quantités.
price_missing Aucun prix connu pour ce couple client et produit. Fournissez explicitement le prix unitaire HT dans la demande.
recipe_empty La recette visée ne contient aucun ingrédient. Complétez la fiche technique dans l'application avant de lancer la production.
composite_recipe_unsupported La recette contient des sous-recettes composées. Lancez cette production depuis l'application.
bl_deja_genere Un bon de livraison actif existe déjà pour cette commande. Utilisez le bon de livraison existant, ou reprenez l'opération depuis l'application.
multiple_clients Les bons de livraison sélectionnés n'appartiennent pas tous au même client. Facturez un client à la fois.
not_creditable Le statut de la facture n'autorise pas la création d'un avoir. Un avoir d'annulation ne s'applique qu'à une facture validée ou envoyée.
facture_payee La facture est déjà réglée, totalement ou partiellement. Traitez la régularisation depuis l'application.
invoice_failed Refus explicite du service de facturation (le message en donne la raison). Rien n'a été écrit. Vérifiez les bons de livraison sélectionnés, puis retentez. Si l'erreur persiste, contactez le support.
insufficient_scope (HTTP 403) Le jeton ne porte pas les autorisations email et profile. Retirez puis reconnectez le connecteur en acceptant les autorisations demandées.
no_tenant, tenant_inactive (HTTP 403) Compte sans établissement actif, ou abonnement suspendu, résilié, en attente ou essai expiré. Vérifié à chaque requête. Régularisez l'abonnement ou le compte depuis l'application.
HTTP 403 « Origin non autorisée » La requête porte un en-tête Origin qui n'est pas celui d'Antò. Les clients MCP exécutés dans un navigateur ne sont pas pris en charge. Utilisez un client qui appelle le serveur depuis son propre serveur (Claude, ChatGPT, Claude Code).
HTTP 413 Requête de plus de 1 Mo. Réduisez la taille de la demande.
HTTP 429, error.data.reason = "auth_failures_limited" Trop d'échecs d'authentification depuis la même adresse IP (100 par 15 minutes par défaut). Bloque aussi un jeton valide jusqu'à la fin de la fenêtre. Attendez le délai indiqué par l'en-tête Retry-After.
plan_changed Le plan affiché dans l'aperçu (prix, quantités, lots, réservations, dates) a changé avant la confirmation. Rien n'a été écrit. Refaites un aperçu (confirm:false) et confirmez le nouveau plan.
onboarding_incomplete creer_facture avec valider:true alors que l'onboarding Savé n'est pas terminé. Terminez la configuration de Savé dans l'application, ou créez la facture sans la valider.
bl_sans_lignes, order_without_lines Bon de livraison ou commande sans aucune ligne. Complétez les lignes dans l'application.
forced_lot_refused, lot_non_admissible, stock_insuffisant Le lot imposé n'est pas utilisable (périmé, en quarantaine, à jeter, entièrement réservé, hors recette) ou ne couvre pas la quantité. Il n'est jamais remplacé par un autre lot. Choisissez un autre lot, ou laissez Antò choisir les lots.
avoir_failed, devis_failed, price_failed, transaction_failed Refus métier explicite du service concerné ; le message en donne la raison. Rien n'a été écrit. Corrigez selon le message, puis relancez.
assistant_access_revoked (HTTP 403) L'accès des assistants a été désactivé pour cet établissement dans Antò (Réglages → Mes assistants). Aucun outil n'est exécuté. Réactivez depuis Réglages → Mes assistants, puis refaites l'autorisation dans votre client.
forbidden_role Consultation : l'indicateur, la section ou le détail demandé dépasse les droits de votre profil (conditions commerciales, finance ou coûts). capacites_consultation indique ce que votre profil peut consulter ; sinon, faites la demande avec un profil autorisé.
internal_error Erreur interne du serveur ; le détail technique n'est pas exposé au client. Le message contient une référence de 8 caractères. Une écriture interrompue n'a rien écrit. Retentez plus tard ; pour une écriture, avec le même client_request_id. Si l'erreur persiste, contactez le support en indiquant l'outil, l'heure et la référence.

8. Support

Pour toute question sur le connecteur, écrivez à contact@heyanto.fr ou utilisez le formulaire de contact. Indiquez l'outil concerné, le message d'erreur reçu et l'heure approximative de l'appel : cela permet de retrouver l'entrée correspondante dans le journal d'audit.

Documents de référence

Pages liées