FoodEatUp · API

Documentation de l'API FoodEatUp

L'API FoodEatUp expose l'ensemble de votre restaurant — stocks, carte, commandes, HACCP, équipe, marketing, fidélité — via un point d'entrée unique au protocole JSON-RPC 2.0 (MCP). Connectez-la à n8n, Make, Zapier ou à vos propres scripts pour construire vos automatisations, exactement comme nos équipes. 264 outils sont disponibles, présentés module par module.

1. Authentification

L'API s'utilise avec une clé API d'établissement, créée en autonomie depuis votre backoffice : Mon profil → API Clients. Vous y obtenez un couple client_id / client_secret (le secret n'est affiché qu'une seule fois — conservez-le dans un gestionnaire de secrets).

Échangez ensuite ces identifiants contre un jeton d'accès :

curl -X POST https://foodeatup.com/api/auth/token \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": "VOTRE_CLIENT_ID",
    "client_secret": "VOTRE_CLIENT_SECRET"
  }'

Réponse :

{
  "token_type": "Bearer",
  "access_token": "eyJ0b2tlbl9leGVtcGxlLi4u",
  "expires_in": 86400
}

Toutes les requêtes suivantes portent ce jeton dans l'en-tête Authorization: Bearer <access_token>. La clé est liée à votre établissement : chaque appel est automatiquement restreint à ses données — il est impossible de lire ou modifier un autre établissement, même en passant un autre establishment_id (il est réécrit côté serveur).

Astuce n8n/Make : GET /api/me (avec le même Bearer) renvoie l'establishment_id lié à votre clé — plus aucun identifiant codé en dur dans vos workflows.

2. Protocole JSON-RPC (MCP)

Point d'entrée unique : POST https://foodeatup.com/api/mcp. Le corps est une enveloppe JSON-RPC 2.0 conforme au Model Context Protocol — ce qui rend l'API directement utilisable par les agents IA (Claude, n8n AI Agent…) en plus des workflows classiques.

Lister les outils disponibles

curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/list" }'

Appeler un outil

curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "list_stocks",
      "arguments": { "establishment_id": 1 }
    }
  }'

Chaque réponse d'outil suit la même enveloppe — le résultat métier est le JSON contenu dans result.content[0].text :

{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      { "type": "text", "text": "[ { \"id\": 12, \"name\": \"Tomates\", \"qte\": 8.5 }, … ]" }
    ]
  }
}

3. Jetons & scopes

Trois types de jetons peuvent appeler l'API — choisissez selon votre besoin :

JetonObtentionPérimètre
Clé API d'établissement (recommandé) Backoffice → Mon profil → API Clients, puis POST /api/auth/token Catalogue complet, données de votre établissement uniquement
Jeton employé (Jarvis) Fiche employé → onglet Jarvis (généré par le propriétaire) Catalogue filtré par les permissions du rôle de l'employé — le scope indiqué sur chaque outil ci-dessous est la permission exigée
OAuth 2.0 Connecteurs (Claude.ai, n8n) via POST /api/oauth/token Scoppé aux établissements du compte connecté

Sur chaque outil, le badge scope indique la permission requise pour un jeton employé. Le badge propriétaire signale un outil réservé au propriétaire (jamais accessible à un jeton employé).

4. Erreurs & limites

CodeSignificationQue faire
HTTP 401 / -32001Jeton absent, invalide ou révoquéRégénérez un jeton via POST /api/auth/token
-32003Permission refusée (jeton employé) ou établissement non autoriséVérifiez le rôle de l'employé ou l'établissement visé
-32600 / -32601Enveloppe JSON-RPC invalide / méthode inconnueVérifiez jsonrpc: "2.0" et method
-32602Paramètres invalides ou ressource introuvableComparez vos arguments au tableau de paramètres de l'outil
-32603Erreur interneRéessayez ; contactez le support si l'erreur persiste
HTTP 429Limite de débit atteinteRalentissez — voir les limites ci-dessous

Limites de débit par jeton (ou adresse IP) :

  • POST /api/mcp — 120 requêtes / minute
  • POST /api/auth/token — 20 requêtes / minute
  • API REST v1 (/api/predibot/v1/…) — 120 requêtes / minute

Bonnes pratiques : réutilisez votre jeton (ne redemandez pas un jeton à chaque appel), et en cas de 429 appliquez un retry exponentiel (2 s, 4 s, 8 s…).

5. Outils par module

Catalogue généré automatiquement depuis le serveur — il reflète toujours exactement les outils réellement disponibles. Les exemples n'incluent que les paramètres requis ; les paramètres optionnels sont listés dans le tableau de chaque outil.

Aucun outil ne correspond à cette recherche.

Stocks 3 outils

list_stocks

Stock de chaque denrée, UNE ligne par denrée : la fiche ingrédient fait foi ; le module Stock et les produits achetés reliés sont comparés et tout ÉCART est nommé (conflicts). Chaque ligne a une phrase `summary` à dire telle quelle. Filtres : source (ingredient|stock|product), name. stock.inventory.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
source string optionnel
name string optionnel Partie du nom (« tomate »)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_stocks",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_low_stocks

Liste les articles en stock dont le niveau est bas (is_low = true). stock.inventory.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_low_stocks",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

adjust_stock

Ajuste le stock d'un PRODUIT (establishment_product_id) ou d'un INGRÉDIENT (ingredient_id). Chaque ajustement écrit un mouvement tracé. JAMAIS bloquant : un résultat négatif est enregistré et signalé (negative:true, inventaire à refaire). stock.inventory.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
establishment_product_id integer optionnel ID du produit (champ "id" de list_products) — OU ingredient_id
ingredient_id integer optionnel ID de l'ingrédient (list_ingredients) — OU establishment_product_id
quantity number requis Quantité à appliquer
mode string — set | increment optionnel set = remplace la valeur (inventaire), increment = ajoute/retire (delta, peut être négatif). Défaut : set
motif string optionnel Motif du mouvement (livraison, perte, casse, inventaire…) — tracé dans le registre
allow_negative boolean optionnel Obsolète depuis le 29/09/2026 : un résultat négatif est toujours enregistré et signalé.
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "adjust_stock",
        "arguments": {
            "establishment_id": 1,
            "quantity": 1
        }
    }
}'

Produits 5 outils

list_products

Liste tous les produits d'achat d'un établissement, avec l'ingrédient que chacun alimente (champ ingredient_link : conversion, produit par défaut). produits.products.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_products",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_product

Crée un PRODUIT D'ACHAT (référence concrète : marque, conditionnement, code-barres, prix, fournisseur). Pour alimenter la liste de courses, reliez-le à un ingrédient avec ingredient_id + ingredient_quantity (combien d'unités de l'ingrédient contient une unité achetée). produits.products.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
name string requis Nom du produit
description string optionnel Description (optionnel)
price_by_unit number requis Prix unitaire HT
unit string requis Unité (ex: pièce, kg, L)
stock_quantity number optionnel Quantité en stock (défaut: 0)
is_promotion boolean optionnel En promotion (défaut: false)
brand string optionnel Marque (optionnel)
barcode string optionnel Code-barres EAN (optionnel). Un code déjà connu du catalogue commun réutilise la fiche existante (reused_catalog_product=true) ; refusé (409) seulement si CE restaurant a déjà ce produit.
ingredient_id integer | null optionnel LIEN D'ACHAT : l'ingrédient générique que ce produit alimente (id de list_ingredients ; null = délier). Ex. le colis d'entrecôte AVIGROS alimente l'ingrédient « Entrecôte ».
ingredient_quantity number optionnel Obligatoire avec ingredient_id : combien d'unités DE L'INGRÉDIENT (dans son unité) contient UNE unité d'achat de ce produit. Colis de 5 kg, ingrédient suivi en g → 5000.
is_default_for_ingredient boolean optionnel Ce produit est la référence commandée par défaut pour l'ingrédient (un seul par ingrédient ; le premier produit lié le devient automatiquement).
fournisseur_id integer optionnel Fournisseur chez qui on commande ce produit (id de list_suppliers) — devient son fournisseur par défaut. Sert à grouper la liste de courses par fournisseur.
supplier_price number optionnel Prix d'achat HT d'une unité chez ce fournisseur (défaut : price_by_unit).
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_product",
        "arguments": {
            "establishment_id": 1,
            "name": "exemple",
            "price_by_unit": 1,
            "unit": "exemple"
        }
    }
}'

get_product

Retourne le détail d'un produit d'achat, avec l'ingrédient qu'il alimente (ingredient_link : conversion) et ses fournisseurs. produits.products.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
establishment_product_id integer requis ID du produit (champ "id" renvoyé par list_products)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_product",
        "arguments": {
            "establishment_id": 1,
            "establishment_product_id": 1
        }
    }
}'

update_product

Modifie un produit du catalogue (prix, unité, stock, description, nom, promotion). produits.products.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
establishment_product_id integer requis ID du produit (champ "id" de list_products)
name string optionnel Nouveau nom (optionnel)
price_by_unit number optionnel Nouveau prix unitaire (optionnel)
unit string optionnel Nouvelle unité (optionnel)
stock_quantity number optionnel Nouvelle quantité en stock (optionnel)
description string optionnel Nouvelle description (optionnel)
ref string optionnel Référence (optionnel)
location string optionnel Emplacement (optionnel)
is_promotion boolean optionnel En promotion (optionnel)
ingredient_id integer | null optionnel LIEN D'ACHAT : l'ingrédient générique que ce produit alimente (id de list_ingredients ; null = délier). Ex. le colis d'entrecôte AVIGROS alimente l'ingrédient « Entrecôte ».
ingredient_quantity number optionnel Obligatoire avec ingredient_id : combien d'unités DE L'INGRÉDIENT (dans son unité) contient UNE unité d'achat de ce produit. Colis de 5 kg, ingrédient suivi en g → 5000.
is_default_for_ingredient boolean optionnel Ce produit est la référence commandée par défaut pour l'ingrédient (un seul par ingrédient ; le premier produit lié le devient automatiquement).
fournisseur_id integer optionnel Fournisseur chez qui on commande ce produit (id de list_suppliers) — devient son fournisseur par défaut. Sert à grouper la liste de courses par fournisseur.
supplier_price number optionnel Prix d'achat HT d'une unité chez ce fournisseur (défaut : price_by_unit).
copy_from_dish_id integer optionnel Reprendre la photo d’un PLAT du restaurant (fichier recopié, aucune génération IA, aucune facturation). confirm:true si la fiche a déjà une photo.
copy_from_ingredient_id integer optionnel Reprendre la photo d’un INGRÉDIENT du restaurant (même règle).
copy_from_recipe_id integer optionnel Reprendre la photo d’une RECETTE du restaurant (même règle).
copy_from_product_id integer optionnel Reprendre la photo d’un PRODUIT du restaurant (même règle).
image_url string optionnel PHOTO depuis une adresse https:// PUBLIQUE et DIRECTE vers le fichier (Canva, bibliothèque RapidoCMS, site du client) : téléchargée, contrôlée (JPEG/PNG/WebP/GIF, 8 Mo max, jamais un réseau interne) puis stockée chez FoodEatUp. Aucune facturation. confirm:true si la fiche a déjà une photo. Exclusif avec image_action et copy_from_*.
image_action string — generate | edit optionnel PHOTO de la fiche : generate = nouvelle image IA, edit = retouche la photo ACTUELLE. Remplace la photo existante (irréversible) : exige confirm:true.
image_instruction string optionnel Avec generate : ce que la photo doit montrer (défaut : nom + description de la fiche). Avec edit : ce qu'il faut changer, ex. « enlève le fond », « plus lumineux ».
confirm boolean optionnel Obligatoire dès que image_action est fourni : remplacer la photo est irréversible.
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_product",
        "arguments": {
            "establishment_id": 1,
            "establishment_product_id": 1
        }
    }
}'

delete_product

Supprime un produit du catalogue d'un établissement. Action irréversible. produits.products.delete

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
establishment_product_id integer requis ID du produit (champ "id" de list_products)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "delete_product",
        "arguments": {
            "establishment_id": 1,
            "establishment_product_id": 1
        }
    }
}'

Ingrédients 8 outils

create_ingredient

Crée un nouvel ingrédient pour un établissement. ingredients.ingredients.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
category_id integer | null optionnel Catégorie d’ingrédient (id de list_categories type ingredient ; null = sans catégorie).
name string requis Nom de l'ingrédient
unit string requis Unité (ex: g, kg, ml, L, pièce)
cooking_coefficient number optionnel Coefficient de transformation à la cuisson : poids_final = poids_brut × coefficient. 1 = neutre, >1 expansion (riz ≈3, pâtes ≈2.5), <1 perte (viande ≈0.7). Défaut 1.
price_per_unit number requis Prix unitaire
quantity_in_stock number requis Quantité en stock
alert_threshold number optionnel Seuil d'alerte stock
description string optionnel Description (optionnel)
calories number optionnel Calories pour 100g
proteins number optionnel Protéines (g)
carbs number optionnel Glucides (g)
fats number optionnel Lipides (g)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_ingredient",
        "arguments": {
            "establishment_id": 1,
            "name": "exemple",
            "unit": "exemple",
            "price_per_unit": 1,
            "quantity_in_stock": 1
        }
    }
}'

list_ingredients

Liste les ingrédients d'un établissement avec, par fiche : unité, price_per_unit, alert_threshold, quantity_in_stock, category_id + category_name, allergènes, produit d'achat par défaut. Filtres optionnels : recherche par nom, type. ingredients.ingredients.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
search string optionnel Recherche par nom (optionnel)
type string — frais | surgele | sec | autres optionnel Filtre par type (optionnel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_ingredients",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_ingredient

Retourne le détail d'un ingrédient, avec ses produits d'achat (purchase_products : marque, conditionnement, conversion, fournisseur, prix, produit par défaut). ingredients.ingredients.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
ingredient_id integer requis ID de l'ingrédient
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_ingredient",
        "arguments": {
            "establishment_id": 1,
            "ingredient_id": 1
        }
    }
}'

update_ingredient

Modifie un ingrédient (nom, unité, prix, stock, seuil, catégorie, allergènes, valeurs nutritionnelles). Tout est vérifié avant la première écriture. ingredients.ingredients.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
category_id integer | null optionnel Catégorie d’ingrédient (id de list_categories type ingredient ; null = sans catégorie).
ingredient_id integer requis ID de l'ingrédient
name string optionnel Nouveau nom (optionnel)
unit string optionnel Unité (optionnel)
cooking_coefficient number optionnel Coefficient de transformation cuisson : poids_final = poids_brut × coefficient (1=neutre, >1 expansion, <1 perte). Optionnel.
price_per_unit number optionnel Prix unitaire (optionnel)
quantity_in_stock number optionnel Quantité en stock (optionnel)
alert_threshold number optionnel Seuil d'alerte (optionnel)
description string optionnel Description (optionnel)
calories number optionnel Calories (optionnel)
proteins number optionnel Protéines (optionnel)
carbs number optionnel Glucides (optionnel)
fats number optionnel Lipides (optionnel)
allergens array<integer | string> optionnel Allergènes (liste FERMÉE, table allergens : 1 Gluten, 2 Crustacés, 3 Œufs, 4 Poisson, 5 Arachides, 6 Soja, 7 Lait, 8 Fruits à coque, 9 Céleri, 10 Moutarde, 11 Graines de sésame, 12 Anhydride sulfureux et sulfites, 13 Lupin, 14 Mollusques). Ids ou noms (accents et casse ignorés). REMPLACE la liste ; [] = aucun allergène.
copy_from_dish_id integer optionnel Reprendre la photo d’un PLAT du restaurant (fichier recopié, aucune génération IA, aucune facturation). confirm:true si la fiche a déjà une photo.
copy_from_ingredient_id integer optionnel Reprendre la photo d’un INGRÉDIENT du restaurant (même règle).
copy_from_recipe_id integer optionnel Reprendre la photo d’une RECETTE du restaurant (même règle).
copy_from_product_id integer optionnel Reprendre la photo d’un PRODUIT du restaurant (même règle).
image_url string optionnel PHOTO depuis une adresse https:// PUBLIQUE et DIRECTE vers le fichier (Canva, bibliothèque RapidoCMS, site du client) : téléchargée, contrôlée (JPEG/PNG/WebP/GIF, 8 Mo max, jamais un réseau interne) puis stockée chez FoodEatUp. Aucune facturation. confirm:true si la fiche a déjà une photo. Exclusif avec image_action et copy_from_*.
image_action string — generate | edit optionnel PHOTO de la fiche : generate = nouvelle image IA, edit = retouche la photo ACTUELLE. Remplace la photo existante (irréversible) : exige confirm:true.
image_instruction string optionnel Avec generate : ce que la photo doit montrer (défaut : nom + description de la fiche). Avec edit : ce qu'il faut changer, ex. « enlève le fond », « plus lumineux ».
confirm boolean optionnel Obligatoire dès que image_action est fourni : remplacer la photo est irréversible.
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_ingredient",
        "arguments": {
            "establishment_id": 1,
            "ingredient_id": 1
        }
    }
}'

delete_ingredient

Supprime un ingrédient d'un établissement. Action irréversible. ingredients.ingredients.delete

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
ingredient_id integer requis ID de l'ingrédient
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "delete_ingredient",
        "arguments": {
            "establishment_id": 1,
            "ingredient_id": 1
        }
    }
}'

bulk_update_ingredients

Modifie plusieurs ingrédients en une fois : `items` [{ingredient_id, …}] ou `ingredient_ids` + `set`. Champs : category_id, price_per_unit, unit, alert_threshold, cooking_coefficient, allergens (ids ou noms des 14 allergènes, REMPLACE la liste). TOUT ou RIEN, aperçu sans confirm:true, 500 ingrédients maximum. ingredients.ingredients.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
items array<object> optionnel
ingredient_ids array<integer> optionnel
set object optionnel
confirm boolean optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "bulk_update_ingredients",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

lookup_ean

Recherche un code-barres (EAN/GTIN 8, 12, 13 ou 14 chiffres, clé de contrôle vérifiée) : dans le catalogue du restaurant d’abord, puis sur OpenFoodFacts. Chaque champ indique sa source (catalogue | openfoodfacts) ; une donnée du catalogue n’est jamais remplacée par OpenFoodFacts. Lecture seule. ingredients.ingredients.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
ean string requis Code-barres, espaces acceptés
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "lookup_ean",
        "arguments": {
            "establishment_id": 1,
            "ean": "exemple"
        }
    }
}'

fill_ingredient_from_ean

Complète un ingrédient avec OpenFoodFacts à partir de son code-barres, UNIQUEMENT sur les champs vides : ce que le restaurant a saisi n’est jamais écrasé (listé dans kept). Renvoie filled et kept. ingredients.ingredients.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
ingredient_id integer requis
ean string optionnel Facultatif si l’ingrédient a déjà un code-barres
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "fill_ingredient_from_ean",
        "arguments": {
            "establishment_id": 1,
            "ingredient_id": 1
        }
    }
}'

Recettes 5 outils

list_recipes

Liste toutes les recettes d'un établissement. with_ingredients:true ajoute la composition de chaque recette (ingrédient, quantité, unité, coût de la ligne). recettes.sheets.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
with_ingredients boolean optionnel Inclure la composition de chaque recette.
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_recipes",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_recipe

Crée une recette COMPLÈTE (ingrédients + étapes + catégories) pour un établissement. NE PAS mettre les étapes ni les ingrédients dans "desc" : utiliser les tableaux "ingredients" et "steps". "desc" est une courte description générale uniquement. recettes.sheets.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
name string requis Nom de la recette
desc string optionnel Courte description générale (PAS les étapes ni la liste d'ingrédients)
dificulty integer optionnel Difficulté 1-3 (1=facile, 2=moyen, 3=difficile)
preparation_time integer optionnel Temps de préparation en minutes
how_many_people integer optionnel Nombre de personnes (portions)
ingredients array<object> optionnel Liste des ingrédients de la recette. Chaque ingrédient est retrouvé par nom dans l'établissement (ou créé s'il n'existe pas).
steps array<object> optionnel Étapes de préparation, dans l'ordre. Numérotées automatiquement.
category_ids array<integer> optionnel IDs des catégories (multi). Optionnel.
category_names array<string> optionnel Noms des catégories (multi) — créées si absentes. Optionnel.
recommended_price number optionnel Prix de vente recommandé
target_margin_rate number optionnel Taux de marge cible en % (base "marge" = (PV−coût)/coût)
margin_basis string — marge | coefficient optionnel Base de marge (défaut "marge")
price_includes_tax boolean optionnel Le prix saisi est-il TTC ? (défaut false = HT)
tax_rate number optionnel Taux de TVA en % (0-100)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_recipe",
        "arguments": {
            "establishment_id": 1,
            "name": "exemple"
        }
    }
}'

get_recipe

Retourne le détail d'une recette : fiche, rentabilité ET composition complète (ingredients : ingrédient, identifiant, quantité, unité, coût de la ligne). recettes.sheets.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
recipe_id integer requis ID de la recette
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_recipe",
        "arguments": {
            "establishment_id": 1,
            "recipe_id": 1
        }
    }
}'

update_recipe

Modifie une recette. ingredients/steps/category_ids/category_names ne sont resynchronisés QUE s'ils sont fournis (sinon l'existant est conservé). NE PAS mettre étapes/ingrédients dans "desc". recettes.sheets.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
recipe_id integer requis ID de la recette
name string optionnel Nouveau nom (optionnel)
desc string optionnel Courte description (optionnel, PAS les étapes/ingrédients)
dificulty integer optionnel Difficulté 1-3 (optionnel)
preparation_time integer optionnel Temps de préparation en minutes (optionnel)
how_many_people integer optionnel Nombre de personnes / portions (optionnel)
status integer optionnel Statut (optionnel)
copy_from_dish_id integer optionnel Reprendre la photo d’un PLAT du restaurant (fichier recopié, aucune génération IA, aucune facturation). confirm:true si la fiche a déjà une photo.
copy_from_ingredient_id integer optionnel Reprendre la photo d’un INGRÉDIENT du restaurant (même règle).
copy_from_recipe_id integer optionnel Reprendre la photo d’une RECETTE du restaurant (même règle).
copy_from_product_id integer optionnel Reprendre la photo d’un PRODUIT du restaurant (même règle).
image_url string optionnel PHOTO depuis une adresse https:// PUBLIQUE et DIRECTE vers le fichier (Canva, bibliothèque RapidoCMS, site du client) : téléchargée, contrôlée (JPEG/PNG/WebP/GIF, 8 Mo max, jamais un réseau interne) puis stockée chez FoodEatUp. Aucune facturation. confirm:true si la fiche a déjà une photo. Exclusif avec image_action et copy_from_*.
image_action string — generate | edit optionnel PHOTO de la fiche : generate = nouvelle image IA, edit = retouche la photo ACTUELLE. Remplace la photo existante (irréversible) : exige confirm:true.
image_instruction string optionnel Avec generate : ce que la photo doit montrer (défaut : nom + description de la fiche). Avec edit : ce qu'il faut changer, ex. « enlève le fond », « plus lumineux ».
confirm boolean optionnel Obligatoire dès que image_action est fourni : remplacer la photo est irréversible.
ingredients array<object> optionnel Remplace TOUS les ingrédients si fourni. Items {name|ingredient_id, quantity, unit}.
steps array<object> optionnel Remplace TOUTES les étapes si fourni. Items {description, preparation_time?}.
category_ids array<integer> optionnel IDs catégories (multi) — remplace si fourni.
category_names array<string> optionnel Noms catégories (multi, créées si absentes) — remplace si fourni.
recommended_price number optionnel Prix de vente recommandé (optionnel)
target_margin_rate number optionnel Taux de marge cible en % (optionnel)
margin_basis string — marge | coefficient optionnel Base de marge (optionnel, défaut marge)
price_includes_tax boolean optionnel Prix saisi TTC ? (optionnel)
tax_rate number optionnel Taux de TVA en % (optionnel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_recipe",
        "arguments": {
            "establishment_id": 1,
            "recipe_id": 1
        }
    }
}'

delete_recipe

Supprime une recette d'un établissement (corbeille / soft delete). recettes.sheets.delete

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
recipe_id integer requis ID de la recette
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "delete_recipe",
        "arguments": {
            "establishment_id": 1,
            "recipe_id": 1
        }
    }
}'

Catégories 4 outils

list_categories

Liste les catégories UTILISABLES par l'établissement : les siennes + les catégories communes (is_global=true). Chaque id renvoyé (type ingredient) est accepté par create/update_ingredient et bulk_update_ingredients. Filtre type : ingredient | produit | recette. Les catégories de plats sont dans list_dish_categories. categories.categories.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
type string — ingredient | produit | recette optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_categories",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_category

Crée une catégorie d'ingrédient, de produit ou de recette pour un établissement (paramètre type). Les catégories de PLAT (carte/vitrine) se gèrent dans l'éditeur de carte. categories.categories.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
name string requis Nom de la catégorie
type string — ingredient | produit | recette optionnel Module concerné (défaut ingredient). Détermine dans quel select la catégorie apparaît.
description string optionnel Description (optionnel)
parent_id integer optionnel ID de la catégorie parente (optionnel)
icon string optionnel Icône (optionnel)
color string optionnel Couleur (optionnel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_category",
        "arguments": {
            "establishment_id": 1,
            "name": "exemple"
        }
    }
}'

update_category

Modifie une catégorie d'un établissement. categories.categories.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
category_id integer requis ID de la catégorie
name string optionnel Nouveau nom (optionnel)
description string optionnel Description (optionnel)
parent_id integer optionnel Catégorie parente (optionnel)
icon string optionnel Icône (optionnel)
color string optionnel Couleur (optionnel)
is_active boolean optionnel Active (optionnel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_category",
        "arguments": {
            "establishment_id": 1,
            "category_id": 1
        }
    }
}'

delete_category

Supprime une catégorie propre à un établissement (les catégories globales sont protégées). categories.categories.delete

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
category_id integer requis ID de la catégorie
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "delete_category",
        "arguments": {
            "establishment_id": 1,
            "category_id": 1
        }
    }
}'

Carte & plats 20 outils

get_cadencier

CADENCIER d'un fournisseur : une ligne par produit, une colonne par jour de livraison. Chaque ligne : ingrédient relié, stock/seuil, contenance, conditionnement et prix du colis, plats de la carte qui consomment l'ingrédient (utilise_par), consommation journalière (ventes réglées 28 j), et par jour : colis habituels (mémoire), colis proposés jusqu'à la livraison suivante, ce qui est déjà en liste de courses (deja). Sans fournisseur_id : le premier fournisseur, avec la liste de tous (fournisseurs). Lecture seule. carte.dishes.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
fournisseur_id integer optionnel Fournisseur (list_suppliers). Défaut : le premier.
semaine string optionnel Un jour de la semaine voulue, YYYY-MM-DD (défaut : cette semaine).
plat_id integer optionnel Ne garder que les produits consommés par ce plat.
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_cadencier",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_dish_portions

Portions d'un plat suivi : solde, portions encore vendables aujourd'hui (solde − portions tenues par les notes en cours), armé ou non (alimenté aujourd'hui), et les derniers mouvements. Sans dish_id : tous les plats suivis. carte.dishes.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
dish_id integer optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_dish_portions",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

set_dish_portions

Suivi des portions d'un plat : activer / désactiver (suivi), portions consommées par vente (grand format = 2), seuil d'alerte, et/ou INVENTAIRE (count : « j'en compte 12 »), ou PERTE (loss + motif). Tant que le compteur n'est pas alimenté dans la journée (production ou inventaire), le plat se vend librement. carte.dishes.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
dish_id integer requis
suivi boolean optionnel
portions_par_vente number optionnel
seuil_alerte number optionnel
count number optionnel Inventaire : nombre de portions comptées
loss number optionnel Perte : portions jetées (casse, DLC, repas du personnel…)
motif string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "set_dish_portions",
        "arguments": {
            "establishment_id": 1,
            "dish_id": 1
        }
    }
}'

list_dishes

Liste les plats de la carte d'un établissement : prix TTC, catégorie, nature de TVA (tva_nature) et taux effectifs sur place / à emporter, photo (has_image, image_url), temps de préparation. carte.dishes.view

ParamètreTypeDescription
with_ingredients boolean optionnel Inclure la composition de chaque plat (ingrédient, quantité, unité).
establishment_id integer requis ID de l'établissement
active boolean optionnel Filtrer par statut actif (optionnel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_dishes",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_dish

Ajoute un plat à la carte d'un établissement, avec sa composition (ingredients) et sa photo (image_url) si fournies. Sans prep_time, reprend le temps le plus fréquent de la catégorie (sinon du restaurant, sinon 10 min). carte.dishes.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
name string requis Nom du plat
price number requis Prix
tva_nature string — immediate | conservable | alcohol | exonere optionnel Nature TVA : immediate=10% (plat à consommation immédiate), conservable=10% sur place/5,5% emporté (emballé/sous vide), alcohol=20% (boisson alcoolisée). Défaut immediate.
description string optionnel Description (optionnel)
category_id integer optionnel Catégorie (optionnel)
prep_time integer optionnel Temps de préparation en minutes (optionnel)
portions integer optionnel Nombre de portions (optionnel)
active boolean optionnel Actif (défaut : true)
ingredients array<object> optionnel COMPOSITION du plat — REMPLACE toute la composition actuelle (comme l'écran Carte) ; [] = vider. Une ligne par ingrédient : {ingredient_id (id de list_ingredients) OU name (nom exact d'un ingrédient de la maison), quantity (quantité par portion), unit (optionnel : unité de l'ingrédient par défaut, ex. g, kg, cl, pièce)}. TOUT ou RIEN : une ligne invalide et rien n'est écrit, l'erreur liste chaque ligne.
recipe_id integer | string | null optionnel Fiche recette de la maison reliée au plat (id de list_recipes, « recipe_9050 » accepté). Sert de composition quand le plat n’a pas d’ingrédients propres : les plans de production du plat reprennent alors les ingrédients de la recette. null = délier (optionnel).
image_url string optionnel Photo du plat depuis une adresse https:// publique et directe (téléchargée et stockée chez FoodEatUp, 8 Mo max). Vérifiée AVANT la création : un lien invalide et le plat n’est pas créé.
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_dish",
        "arguments": {
            "establishment_id": 1,
            "name": "exemple",
            "price": 1
        }
    }
}'

create_dish_category

Crée une catégorie de PLAT (carte / vitrine), éventuellement comme sous-catégorie (2 niveaux max via parent_id ou parent_name). Apparaît dans la carte des plats et la vitrine. carte.categories.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
name string requis Nom de la catégorie de plat
parent_id integer optionnel ID de la catégorie parente (sous-catégorie). Optionnel.
parent_name string optionnel Nom de la catégorie parente (alternative à parent_id). Optionnel.
description string optionnel Description (optionnel)
show_on_storefront boolean optionnel Visible sur la vitrine (défaut true)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_dish_category",
        "arguments": {
            "establishment_id": 1,
            "name": "exemple"
        }
    }
}'

update_dish_category

Modifie une catégorie de PLAT : name, parent_id (null = remonter au premier niveau ; 2 niveaux max, pas de cycle), description, show_on_storefront. Journalisée (qui, quand, avant → après). carte.categories.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
category_id integer requis ID de la catégorie de plat (list_dish_categories)
name string optionnel
parent_id integer | null optionnel Catégorie parente ; null = premier niveau
description string | null optionnel
show_on_storefront boolean optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_dish_category",
        "arguments": {
            "establishment_id": 1,
            "category_id": 1
        }
    }
}'

delete_dish_category

Supprime une catégorie de PLAT. REFUSÉ si elle contient des plats actifs, sauf reassign_to (catégorie du même restaurant où les déplacer). Ses sous-catégories remontent au premier niveau, ses rattachements de cuissons/suppléments sont retirés, la suppression est journalisée. confirm:true obligatoire — sans lui, l’outil décrit ce qui serait fait. carte.categories.delete

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
category_id integer requis
reassign_to integer optionnel Catégorie qui reçoit les plats
confirm boolean optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "delete_dish_category",
        "arguments": {
            "establishment_id": 1,
            "category_id": 1
        }
    }
}'

import_storefront_menu

Construit TOUTE la carte vitrine en un appel : catégories + sous-catégories + plats, et formules éditoriales (formule > sections > groupes > éléments + notes). Idempotent sur les noms (catégories/plats existants réutilisés). Idéal pour bâtir la carte complète d'un restaurant. carte.dishes.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
categories array<object> optionnel Catégories de plats (2 niveaux). Les plats sont créés/reliés par nom.
formules array<object> optionnel Formules éditoriales (façon brochure MEEMA).
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "import_storefront_menu",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_dish_categories

Liste les catégories de PLATS (carte / vitrine / caisse) — à ne pas confondre avec list_categories (catégories d'ingrédients et de produits). Donne id, nom, parent (2 niveaux), visibilité vitrine, ordre et nombre de plats : à consulter AVANT create_dish_category pour ne pas créer de doublon. carte.dishes.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_dish_categories",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_option_groups

Liste les groupes d'OPTIONS de la carte (cuissons, accompagnements, suppléments payants, retraits) avec leurs choix, prix et rattachements (catégories / plats). Les mêmes groupes servent la caisse, la borne, le QR de table et la boutique en ligne. carte.dishes.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_option_groups",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

save_option_group

Crée (sans group_id) ou modifie (avec group_id) un groupe d'options : ex. « Sirops » supplément +0,50 €, « Lait » au choix, « Cuisson » obligatoire. À préférer aux faux plats « Supplément … » : le supplément suit alors le plat en caisse, en cuisine et sur le ticket. Les choix absents d'une modification sont DÉSACTIVÉS, jamais supprimés. Rattache ensuite le groupe avec link_option_group. carte.dishes.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
group_id integer optionnel Groupe à modifier (absent = création).
name string requis Nom affiché, ex. « Sirops », « Lait végétal ».
type string — choix | supplement | retrait requis choix = on en prend un (cuisson, accompagnement) ; supplement = ajout, souvent payant ; retrait = « sans … » (toujours gratuit, jamais obligatoire).
min integer optionnel Nombre minimum de choix (1 = obligatoire, 0 = facultatif). Défaut 0.
max integer | null optionnel Nombre maximum de choix. Absent ou null = SANS LIMITE (ex. suppléments cumulables).
items array<object> requis Choix du groupe : [{label, price_delta (€ TTC ajoutés, défaut 0), id (pour modifier un choix existant)}]. 40 maximum.
active boolean optionnel false = désactiver le groupe (il disparaît des écrans ; jamais supprimé).
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "save_option_group",
        "arguments": {
            "establishment_id": 1,
            "name": "exemple",
            "type": "choix",
            "items": [
                {
                    "label": "exemple"
                }
            ]
        }
    }
}'

bulk_update_dish_images

Pose la PHOTO de plusieurs plats depuis des adresses https:// publiques et directes : items [{dish_id, image_url}], 50 par appel. Chaque ligne est traitée seule (un lien cassé n'empêche pas les autres) et la réponse donne le résultat LIGNE PAR LIGNE. Un plat qui a déjà une photo n'est remplacé qu'avec confirm:true. Aucune facturation. carte.dishes.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
items array<object> requis
confirm boolean optionnel true = remplacer aussi les photos existantes.
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "bulk_update_dish_images",
        "arguments": {
            "establishment_id": 1,
            "items": [
                {
                    "dish_id": 1,
                    "image_url": "exemple"
                }
            ]
        }
    }
}'

list_formules

Liste les formules (menus à prix fixe) telles que la CAISSE les vend : étapes, plats au choix, supplément, et « vendable » avec la raison sinon (ex. étape sans plat relié — formule de brochure créée par import_storefront_menu). carte.dishes.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_formules",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

save_formule

Crée (sans formule_id) ou remplace (avec formule_id) une formule VENDABLE en caisse : prix fixe + étapes (ex. « Sando », « Boisson », « Dessert ») dont chaque choix est un PLAT de la carte. À préférer à un plat « Menu … » : la caisse écrit une ligne PAR PLAT et répartit le prix au prorata, chaque composant gardant SA TVA (boisson fermée à 5,5 % à emporter, plat à 10 %, alcool à 20 %) — la ventilation est automatique. Remplacer désactive les anciennes étapes (l'historique des ventes reste lisible). carte.dishes.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
formule_id integer optionnel Formule à remplacer (absent = création).
title string requis Nom, ex. « Formule Sando + Boisson ».
subtitle string optionnel
price number requis Prix TTC de la formule.
steps array<object> requis Étapes dans l'ordre : [{title, min (défaut 1), max (défaut = min), choices: [{dish_id, price_delta (supplément € TTC, défaut 0)}]}].
active boolean optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "save_formule",
        "arguments": {
            "establishment_id": 1,
            "title": "exemple",
            "price": 1,
            "steps": [
                {
                    "title": "exemple",
                    "choices": []
                }
            ]
        }
    }
}'

update_dish

Modifie un plat de la carte d'un établissement, y compris sa COMPOSITION : ingredients (remplace tout), ingredients_add (ajoute/met à jour), ingredients_remove (retire). carte.dishes.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
dish_id integer requis ID du plat
name string optionnel Nouveau nom (optionnel)
price number optionnel Nouveau prix (optionnel)
tva_nature string — immediate | conservable | alcohol | exonere optionnel Nature TVA : immediate=10%, conservable=10/5,5%, alcohol=20% (optionnel).
description string optionnel Description (optionnel)
category_id integer optionnel Catégorie (optionnel)
prep_time integer optionnel Temps de préparation (optionnel)
portions integer optionnel Portions (optionnel)
active boolean optionnel Actif (optionnel)
ingredients array<object> optionnel COMPOSITION du plat — REMPLACE toute la composition actuelle (comme l'écran Carte) ; [] = vider. Une ligne par ingrédient : {ingredient_id (id de list_ingredients) OU name (nom exact d'un ingrédient de la maison), quantity (quantité par portion), unit (optionnel : unité de l'ingrédient par défaut, ex. g, kg, cl, pièce)}. TOUT ou RIEN : une ligne invalide et rien n'est écrit, l'erreur liste chaque ligne.
ingredients_add array<object> optionnel AJOUTE ou met à jour des lignes SANS retirer les autres (même format que ingredients). Un ingrédient déjà présent voit sa quantité/unité remplacée.
ingredients_remove array<integer | string> optionnel Retire ces ingrédients de la composition (ids de list_ingredients ou noms exacts).
recipe_id integer | string | null optionnel Fiche recette de la maison reliée au plat (id de list_recipes, « recipe_9050 » accepté). Sert de composition quand le plat n’a pas d’ingrédients propres : les plans de production du plat reprennent alors les ingrédients de la recette. null = délier (optionnel).
copy_from_dish_id integer optionnel Reprendre la photo d’un PLAT du restaurant (fichier recopié, aucune génération IA, aucune facturation). confirm:true si la fiche a déjà une photo.
copy_from_ingredient_id integer optionnel Reprendre la photo d’un INGRÉDIENT du restaurant (même règle).
copy_from_recipe_id integer optionnel Reprendre la photo d’une RECETTE du restaurant (même règle).
copy_from_product_id integer optionnel Reprendre la photo d’un PRODUIT du restaurant (même règle).
image_url string optionnel PHOTO depuis une adresse https:// PUBLIQUE et DIRECTE vers le fichier (Canva, bibliothèque RapidoCMS, site du client) : téléchargée, contrôlée (JPEG/PNG/WebP/GIF, 8 Mo max, jamais un réseau interne) puis stockée chez FoodEatUp. Aucune facturation. confirm:true si la fiche a déjà une photo. Exclusif avec image_action et copy_from_*.
image_action string — generate | edit optionnel PHOTO de la fiche : generate = nouvelle image IA, edit = retouche la photo ACTUELLE. Remplace la photo existante (irréversible) : exige confirm:true.
image_instruction string optionnel Avec generate : ce que la photo doit montrer (défaut : nom + description de la fiche). Avec edit : ce qu'il faut changer, ex. « enlève le fond », « plus lumineux ».
confirm boolean optionnel Obligatoire dès que image_action est fourni : remplacer la photo est irréversible.
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_dish",
        "arguments": {
            "establishment_id": 1,
            "dish_id": 1
        }
    }
}'

bulk_update_dishes

Modifie plusieurs plats en une fois : soit `items` (une ligne par plat, valeurs propres à chacun, ex. des prix), soit `dish_ids` + `set` (la même valeur pour tous, ex. tva_nature). Champs : price, tva_nature, category_id, active. TOUT ou RIEN : une seule ligne invalide et rien n’est écrit, l’erreur liste chaque ligne refusée. Sans confirm:true, renvoie l’aperçu (avant → après) sans rien écrire. 500 plats maximum. carte.dishes.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
items array<object> optionnel [{dish_id, price?, tva_nature?, category_id?, active?}]
dish_ids array<integer> optionnel Plats auxquels appliquer `set`
set object optionnel {price?, tva_nature?, category_id?, active?}
confirm boolean optionnel true pour écrire ; absent = aperçu
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "bulk_update_dishes",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

delete_dish

Supprime un plat de la carte d'un établissement. Action irréversible. carte.dishes.delete

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
dish_id integer requis ID du plat
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "delete_dish",
        "arguments": {
            "establishment_id": 1,
            "dish_id": 1
        }
    }
}'

list_beverages

Carte des VINS & boissons ÉDITORIALE de la vitrine (appellation, millésime, prix verre/bouteille — saisie par upsert_beverage_item). Ce n'est PAS la liste des boissons vendues : celles-ci sont des plats (list_dishes, catégories « Boissons »). Réponse : categories (groupées), count, note. carte.dishes.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_beverages",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

Unités 1 outil

list_units

Liste les unités de mesure disponibles (référentiel global, lecture seule). unites.units.view

Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_units",
        "arguments": {}
    }
}'

Fournisseurs 3 outils

list_suppliers

Liste tous les fournisseurs d'un établissement. fournisseurs.suppliers.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
name string optionnel Filtre optionnel par nom du fournisseur
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_suppliers",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_supplier

Retourne les détails d'un fournisseur spécifique. fournisseurs.suppliers.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
supplier_id integer requis ID du fournisseur
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_supplier",
        "arguments": {
            "establishment_id": 1,
            "supplier_id": 1
        }
    }
}'

create_supplier

Crée un nouveau fournisseur pour un établissement. fournisseurs.suppliers.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
name string requis Nom du fournisseur
adresse string optionnel Adresse
ville string optionnel Ville
pays string optionnel Pays
code_postal string optionnel Code postal
tel string optionnel Téléphone
email string optionnel Email
website string optionnel Site web
type string optionnel Type de produits fournis
status string — actif | inactif optionnel Statut (défaut: actif)
reliability number optionnel Fiabilité de 0 à 5
livraison boolean optionnel Livraison disponible
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_supplier",
        "arguments": {
            "establishment_id": 1,
            "name": "exemple"
        }
    }
}'

Commandes fournisseurs 4 outils

send_cadencier

Envoie des cases du cadencier à la LISTE DE COURSES : une course « cadencier » par produit et par jour de livraison (quantité = colis × contenance, dans l'unité de l'ingrédient ; colis 0 retire la course). Tout est revérifié côté serveur. Sans confirm : le cadencier est rendu tel quel (aperçu, rien d'écrit). Avec confirm:true : écrit et rend ajoutees / mises_a_jour / retirees / refusees. courses.lists.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
cases array<object> requis
memoriser boolean optionnel Aussi mémoriser ces colis comme quantités habituelles.
confirm boolean optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "send_cadencier",
        "arguments": {
            "establishment_id": 1,
            "cases": [
                {
                    "establishment_product_id": 1,
                    "jour": 1,
                    "colis": 1,
                    "date": "exemple"
                }
            ]
        }
    }
}'

get_shopping_list

LISTE DE COURSES : traduit une prévision (« samedi, 80 couverts ») en produits à commander, GROUPÉS PAR FOURNISSEUR. Chaque ligne : ingrédient, besoin, stock, manquant, produit d'achat retenu, unités de commande arrondies au conditionnement supérieur, montant. Les ingrédients SANS produit d'achat relié sont listés EN TÊTE (ingredients_sans_produit) : il faut les relier avant de pouvoir les commander. Lecture seule. courses.lists.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
date string optionnel Jour prévu YYYY-MM-DD (défaut : demain) — ou début de période avec date_to.
date_to string optionnel Fin de période YYYY-MM-DD (optionnel ; la prévision couvre alors TOUTE la période).
covers number optionnel Nombre de couverts prévus. Avec mix, ou seul : le mix vient alors des ventes encaissées des 28 derniers jours.
mix array<object> optionnel Mix de ventes avec covers : [{plat_id, share}], share = % des couverts qui prennent ce plat (les parts ne somment pas forcément à 100 : un couvert prend entrée, plat et dessert).
dishes array<object> optionnel OU quantités par plat : [{plat_id, quantity}] (prioritaire sur covers).
use_stock boolean optionnel Déduire le stock des ingrédients (ingredients.quantity_in_stock). Défaut : true.
safety_margin_percent number optionnel Marge de sécurité ajoutée aux besoins, en % (0-100). Défaut : 0.
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_shopping_list",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_orders_from_shopping_list

Transforme la liste de courses en COMMANDES FOURNISSEURS RÉELLES, une par fournisseur (même prévision que get_shopping_list, recalculée côté serveur). Sans confirm : aperçu des commandes, rien n'est écrit. Avec confirm:true : commandes créées en attente d'envoi, avec leurs lignes. Les produits sans fournisseur et les ingrédients sans produit ne partent pas (listés). courses.orders.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
date string optionnel Jour prévu YYYY-MM-DD (défaut : demain) — ou début de période avec date_to.
date_to string optionnel Fin de période YYYY-MM-DD (optionnel ; la prévision couvre alors TOUTE la période).
covers number optionnel Nombre de couverts prévus. Avec mix, ou seul : le mix vient alors des ventes encaissées des 28 derniers jours.
mix array<object> optionnel Mix de ventes avec covers : [{plat_id, share}], share = % des couverts qui prennent ce plat (les parts ne somment pas forcément à 100 : un couvert prend entrée, plat et dessert).
dishes array<object> optionnel OU quantités par plat : [{plat_id, quantity}] (prioritaire sur covers).
use_stock boolean optionnel Déduire le stock des ingrédients (ingredients.quantity_in_stock). Défaut : true.
safety_margin_percent number optionnel Marge de sécurité ajoutée aux besoins, en % (0-100). Défaut : 0.
exclude_ingredient_ids array<integer> optionnel Ingrédients décochés : ne pas les commander.
exclude_product_ids array<integer> optionnel Produits (establishment_product_id) décochés.
delivery_date string optionnel Date de livraison souhaitée YYYY-MM-DD (défaut : la veille de la période, au plus tôt aujourd'hui).
confirm boolean optionnel Obligatoire pour créer les commandes (réelles).
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_orders_from_shopping_list",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_supplier_order

Crée une commande fournisseur AVEC SES LIGNES (date_prevue par défaut : J+2). Ligne = {establishment_product_id, quantity en unités d'achat} ou {ingredient_id, quantity, unit} (convertie en unités d'achat du produit par défaut, arrondi au conditionnement supérieur). Une ligne impossible fait refuser toute la commande. Sans items, la commande est refusée. courses.orders.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
fournisseur_id integer requis ID du fournisseur
date_prevue string optionnel Date de livraison prévue YYYY-MM-DD (défaut : J+2)
items array<object> requis Liste des articles à commander
note string optionnel Note optionnelle sur la commande
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_supplier_order",
        "arguments": {
            "establishment_id": 1,
            "fournisseur_id": 1,
            "items": [
                {
                    "quantity": 1
                }
            ]
        }
    }
}'

Livraisons 1 outil

list_deliveries

Liste les livraisons fournisseurs d'un établissement. livraisons.deliveries.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
status string optionnel Filtre par statut (optionnel) : en_attente, reçue, annulee
limit integer optionnel Nombre max de résultats (défaut : 50)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_deliveries",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

Équipe (RH) 9 outils

list_employees

Liste tous les employés d'un établissement. rh.employees.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_employees",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_employee

Crée un nouvel employé pour un établissement avec son planning optionnel. rh.employees.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
first_name string requis Prénom
last_name string requis Nom de famille
email string requis Email
phone_number string requis Numéro de téléphone
role string requis Rôle (obligatoire) : un rôle type — gerant, chef_cuisine, cuisinier, plongeur, serveur, barman, hote_caisse, responsable_haccp, marketing, comptable — ou le nom exact d’un rôle déjà créé dans le restaurant. Un rôle inconnu est refusé (aucun rôle par défaut).
schedule object optionnel Planning hebdomadaire (optionnel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_employee",
        "arguments": {
            "establishment_id": 1,
            "first_name": "exemple",
            "last_name": "exemple",
            "email": "exemple",
            "phone_number": "exemple",
            "role": "exemple"
        }
    }
}'

get_employee

Retourne les détails complets d'un employé (profil, rôle, planning, contrat). rh.employees.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
employee_id integer requis ID de l'employé
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_employee",
        "arguments": {
            "establishment_id": 1,
            "employee_id": 1
        }
    }
}'

update_employee

Modifie les informations d'un employé (prénom, nom, email, téléphone, rôle). rh.employees.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
employee_id integer requis ID de l'employé
first_name string optionnel Nouveau prénom (optionnel)
last_name string optionnel Nouveau nom (optionnel)
email string optionnel Nouvel email (optionnel)
phone_number string optionnel Nouveau téléphone (optionnel)
role string optionnel Nouveau rôle (optionnel) : gerant, chef_cuisine, cuisinier, plongeur, serveur, barman, hote_caisse, responsable_haccp, marketing, comptable, ou le nom exact d’un rôle du restaurant.
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_employee",
        "arguments": {
            "establishment_id": 1,
            "employee_id": 1
        }
    }
}'

update_employee_schedule

Remplace entièrement le planning hebdomadaire d'un employé. rh.employees.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
employee_id integer requis ID de l'employé
schedules array<object> requis Tableau des créneaux horaires
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_employee_schedule",
        "arguments": {
            "establishment_id": 1,
            "employee_id": 1,
            "schedules": [
                {
                    "day": "exemple",
                    "start_time": "exemple",
                    "end_time": "exemple"
                }
            ]
        }
    }
}'

delete_employee

Supprime un employé et son planning. Action irréversible. rh.employees.delete

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
employee_id integer requis ID de l'employé
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "delete_employee",
        "arguments": {
            "establishment_id": 1,
            "employee_id": 1
        }
    }
}'

list_employee_contracts

Liste les contrats des employés d'un établissement. Filtre : employé. rh.contracts.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
employee_id integer optionnel Filtrer par employé (optionnel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_employee_contracts",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_employee_contract

Crée un contrat de travail pour un employé. rh.contracts.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
employee_id integer requis ID de l'employé
type string optionnel Type : CDI, CDD, Extra, Apprentissage, Stage (défaut : CDI)
start_date string optionnel Date de début YYYY-MM-DD (défaut : aujourd'hui)
end_date string optionnel Date de fin YYYY-MM-DD (optionnel, pour CDD)
job_title string optionnel Intitulé du poste (optionnel)
base_salary number optionnel Salaire de base (optionnel)
weekly_hours number optionnel Heures hebdomadaires (optionnel)
days_per_week integer optionnel Jours par semaine (optionnel)
manager_name string optionnel Nom du responsable (optionnel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_employee_contract",
        "arguments": {
            "establishment_id": 1,
            "employee_id": 1
        }
    }
}'

list_employee_documents

Liste les documents administratifs des employés d'un établissement. Filtre : employé. rh.documents.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
employee_id integer optionnel Filtrer par employé (optionnel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_employee_documents",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

Pointages 1 outil

list_attendances

Liste les pointages (clock in/out) des employés sur une période. pointages.attendances.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
date_from string optionnel Début période YYYY-MM-DD (défaut : 1er du mois)
date_to string optionnel Fin période YYYY-MM-DD (défaut : fin du mois)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_attendances",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

Congés 3 outils

list_leaves

Liste les demandes de congés des employés. Filtre optionnel par statut. conges.requests.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
status string — pending | approved | rejected optionnel Filtre par statut (optionnel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_leaves",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

approve_leave

Approuve une demande de congé en attente. conges.approval.approve

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
leave_id integer requis ID de la demande de congé
comments string optionnel Commentaire optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "approve_leave",
        "arguments": {
            "establishment_id": 1,
            "leave_id": 1
        }
    }
}'

reject_leave

Refuse une demande de congé en attente. conges.approval.reject

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
leave_id integer requis ID de la demande de congé
reason string requis Motif du refus (obligatoire)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "reject_leave",
        "arguments": {
            "establishment_id": 1,
            "leave_id": 1,
            "reason": "exemple"
        }
    }
}'

Planning 4 outils

list_plannings

Liste les shifts (planning des horaires) de l'équipe pour une semaine, avec heures et coût estimé. planning.shifts.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
week string optionnel Une date dans la semaine voulue (défaut : aujourd'hui)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_plannings",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_shift

Crée un shift (créneau de travail) pour un employé un jour donné, et le publie. planning.shifts.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
professional_id integer requis
day string requis
start string requis HH:MM
end string requis HH:MM
role_label string optionnel Poste : cuisine, salle, plonge, bar, management, livraison
break_minutes integer optionnel
note string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_shift",
        "arguments": {
            "establishment_id": 1,
            "professional_id": 1,
            "day": "exemple",
            "start": "exemple",
            "end": "exemple"
        }
    }
}'

assign_task

Assigne une tâche à un employé du restaurant. Rattachement au SHIFT : shift_id (id de list_plannings) si fourni ; sinon le shift de cet employé qui couvre date + time (service de nuit compris) ; sans time, le shift du jour s'il est unique. La réponse dit à quel shift la tâche a été rattachée (tasks_count de list_plannings en tient compte). planning.tasks.assign

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
professional_id integer requis
name string requis
date string optionnel
time string optionnel HH:MM
shift_id integer optionnel Shift précis (list_plannings) ; doit être un shift de ce même employé.
priority string — basse | normale | haute | urgente optionnel
category string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "assign_task",
        "arguments": {
            "establishment_id": 1,
            "professional_id": 1,
            "name": "exemple"
        }
    }
}'

list_tasks

Liste les tâches d'équipe du restaurant (pour les relire ou repérer des doublons) : id, nom, employé, date, heure, priorité, état, shift rattaché. Filtres : professional_id, date_from, date_to. 200 au plus, les plus récentes d'abord. planning.tasks.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
professional_id integer optionnel
date_from string optionnel
date_to string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_tasks",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

Production 7 outils

list_production_plans

Liste les plans de production sur une période donnée. production.plans.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
start_date string optionnel Début YYYY-MM-DD (défaut : aujourd'hui)
end_date string optionnel Fin YYYY-MM-DD (défaut : +30 jours)
status string optionnel Filtre par statut (optionnel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_production_plans",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_production_plan

Planifie une production (plat ou recette). Le statut est calculé d'après le STOCK : « Prêt à produire » (produit_livre) si tous les ingrédients sont en stock, sinon « En attente d'ingrédients » (en_cours_livraison) ; la réponse donne status_label et missing_ingredients. production.plans.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
item_id string requis ID du plat (entier) ou de la recette (préfixe "recipe_", ex: "recipe_12")
planned_quantity integer requis Quantité planifiée
planned_date string requis Date de production YYYY-MM-DD
planned_time string optionnel Heure HH:MM (défaut : 09:00)
notes string optionnel Notes optionnelles
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_production_plan",
        "arguments": {
            "establishment_id": 1,
            "item_id": "exemple",
            "planned_quantity": 1,
            "planned_date": "exemple"
        }
    }
}'

validate_production

Valide une production réalisée : retire les ingrédients (rapport « stock » : retirés / non retirés et pourquoi) et, si le plat est suivi en portions, ajoute les portions (rapport « portions »). Une production déjà validée n'est jamais appliquée deux fois (erreur « déjà validée »). production.validation.validate

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
production_id integer requis ID du plan de production
produced_quantity integer requis Quantité réellement produite
temperature_log number optionnel Température enregistrée (optionnel)
notes string optionnel Notes optionnelles
portions number optionnel Portions produites (recette : par défaut fournées × portions de la fiche)
plat_id integer optionnel Plat qui reçoit les portions, si plusieurs plats suivis utilisent la recette
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "validate_production",
        "arguments": {
            "establishment_id": 1,
            "production_id": 1,
            "produced_quantity": 1
        }
    }
}'

get_production_ingredients

Retourne les ingrédients nécessaires pour un plan de production (avec statut suffisant/manquant). production.plans.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
production_id integer requis ID du plan de production
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_production_ingredients",
        "arguments": {
            "establishment_id": 1,
            "production_id": 1
        }
    }
}'

delete_production_plan

Supprime un plan de production (et ses listes de courses et livraisons en attente). Refusé pour une production déjà réalisée : le stock a été déduit, c’est de l’historique. Exige confirm:true ; sans lui, l’outil décrit le plan qui serait supprimé. production.plans.delete

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
production_id integer requis ID du plan de production
confirm boolean optionnel Obligatoire : true
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "delete_production_plan",
        "arguments": {
            "establishment_id": 1,
            "production_id": 1
        }
    }
}'

list_production_alerts

Liste les ingrédients manquants pour les productions planifiées dans les prochains jours. production.missing.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
days integer optionnel Horizon en jours (défaut : 7)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_production_alerts",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_top_productions

Liste les plats/recettes les plus produits sur une période. production.plans.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
days integer optionnel Nombre de jours en arrière (défaut : 30)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_top_productions",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

HACCP 27 outils

list_fryers

Liste les friteuses actives et leur état huile. haccp.oil.view

ParamètreTypeDescription
establishment_id integer requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_fryers",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

add_oil_test

Consigne un test huile. Un contrôle visuel ne mesure pas les polaires. Action corrective obligatoire au seuil critique. haccp.oil.create

ParamètreTypeDescription
establishment_id integer requis
equipment_id integer optionnel
equipment_label string optionnel
logged_at string optionnel
polar_pct number optionnel
method string — testeur | bandelette | visuel optionnel
visual_result string — acceptable | defavorable | indetermine optionnel
oil_temp number optionnel
volume_l number optionnel
oil_type string optionnel
notes string optionnel
corrective_action string optionnel
photo_url string optionnel
request_key string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "add_oil_test",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

add_oil_change

Consigne un remplacement huile : volume et type requis. haccp.oil.create

ParamètreTypeDescription
establishment_id integer requis
equipment_id integer optionnel
equipment_label string optionnel
logged_at string optionnel
polar_pct number optionnel
method string — testeur | bandelette | visuel optionnel
visual_result string — acceptable | defavorable | indetermine optionnel
oil_temp number optionnel
volume_l number requis
oil_type string requis
notes string optionnel
corrective_action string optionnel
photo_url string optionnel
request_key string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "add_oil_change",
        "arguments": {
            "establishment_id": 1,
            "volume_l": 1,
            "oil_type": "exemple"
        }
    }
}'

add_oil_filtration

Consigne une filtration, sans effacer une non-conformité. haccp.oil.create

ParamètreTypeDescription
establishment_id integer requis
equipment_id integer optionnel
equipment_label string optionnel
logged_at string optionnel
polar_pct number optionnel
method string — testeur | bandelette | visuel optionnel
visual_result string — acceptable | defavorable | indetermine optionnel
oil_temp number optionnel
volume_l number optionnel
oil_type string optionnel
notes string optionnel
corrective_action string optionnel
photo_url string optionnel
request_key string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "add_oil_filtration",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_oil_logs

Consulte le carnet d’huile, jusqu’à 100 opérations, pagination par offset. haccp.oil.view

ParamètreTypeDescription
establishment_id integer requis
equipment_id integer optionnel
offset integer optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_oil_logs",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

start_thermal_cycle

Démarre un refroidissement ou une remise. Référence de lot unique et températures à cœur requises. haccp.thermal_cycles.create

ParamètreTypeDescription
establishment_id integer requis
kind string — refroidissement | remise requis
equipment_id integer optionnel
product_name string requis
lot_ref string requis
quantity number requis
unit string requis
started_at string optionnel
start_temp number requis
parent_cycle_id integer optionnel
production_plan_id integer optionnel
plat_id integer optionnel
recipe_id integer optionnel
notes string optionnel
request_key string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "start_thermal_cycle",
        "arguments": {
            "establishment_id": 1,
            "kind": "refroidissement",
            "product_name": "exemple",
            "lot_ref": "exemple",
            "quantity": 1,
            "unit": "exemple",
            "start_temp": 1
        }
    }
}'

add_thermal_reading

Ajoute un relevé à un cycle en cours. haccp.thermal_cycles.create

ParamètreTypeDescription
establishment_id integer requis
cycle_id integer requis
temp number requis
read_at string optionnel
request_key string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "add_thermal_reading",
        "arguments": {
            "establishment_id": 1,
            "cycle_id": 1,
            "temp": 1
        }
    }
}'

close_thermal_cycle

Clôture un cycle. Le serveur calcule sa conformité ; un écart impose un correctif. haccp.thermal_cycles.create

ParamètreTypeDescription
establishment_id integer requis
cycle_id integer requis
end_temp number requis
ended_at string optionnel
corrective_action string optionnel
destroyed boolean requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "close_thermal_cycle",
        "arguments": {
            "establishment_id": 1,
            "cycle_id": 1,
            "end_temp": 1,
            "destroyed": true
        }
    }
}'

list_thermal_cycles

Liste les cycles et leur courbe de relevés (100 maximum par page). haccp.thermal_cycles.view

ParamètreTypeDescription
establishment_id integer requis
offset integer optionnel
status string — en_cours | conforme | non_conforme | abandonne optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_thermal_cycles",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_haccp_reception

Liste les fiches de réception HACCP d'un établissement. haccp.reception.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_haccp_reception",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

add_temperature

Enregistre une mesure de température d'équipement (HACCP). haccp.temperatures.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
equipment_id integer requis ID de l'équipement
temperature number requis Température en degrés Celsius
measured_at string optionnel Date/heure ISO 8601 (optionnel, défaut = maintenant)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "add_temperature",
        "arguments": {
            "establishment_id": 1,
            "equipment_id": 1,
            "temperature": 1
        }
    }
}'

list_haccp_temperatures

Liste les relevés de températures HACCP d'un établissement. Filtres optionnels : période, équipement, type. haccp.temperatures.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
start_date string optionnel Début période YYYY-MM-DD (optionnel)
end_date string optionnel Fin période YYYY-MM-DD (optionnel)
equipment_id integer optionnel Filtre par équipement (optionnel)
type string optionnel Type d'équipement (optionnel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_haccp_temperatures",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_haccp_reception

Crée un contrôle de réception HACCP manuel (arrivée fournisseur). haccp.reception.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
date_controle string requis Date du contrôle YYYY-MM-DD
heure_controle string requis Heure HH:MM
etat_livraison string — conforme | non_conforme requis État de la livraison
fournisseur_id integer optionnel ID fournisseur (optionnel)
fournisseur_nom string optionnel Nom fournisseur libre (optionnel)
reference_bl string optionnel Référence BL (optionnel)
temperature_produits_frais number optionnel Température produits frais en °C (optionnel)
commentaires string optionnel Commentaires (optionnel)
non_conformites array<mixed> optionnel Liste des non-conformités si etat=non_conforme
validate boolean optionnel Valider immédiatement (défaut : false)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_haccp_reception",
        "arguments": {
            "establishment_id": 1,
            "date_controle": "exemple",
            "heure_controle": "exemple",
            "etat_livraison": "conforme"
        }
    }
}'

list_haccp_labels

Liste les étiquettes HACCP (DLC) d'un établissement. Filtre : statut. haccp.labels.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
status string optionnel Statut : created, printed, validated, used (optionnel)
limit integer optionnel Nombre max (défaut : 100)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_haccp_labels",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_haccp_label

Crée une étiquette HACCP (DLC). Le numéro de lot est généré automatiquement si absent. haccp.labels.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
ingredient_name string requis Nom du produit/ingrédient
quantity integer optionnel Quantité (optionnel)
unit string optionnel Unité (optionnel)
dlc string optionnel Date limite de consommation YYYY-MM-DD (optionnel)
type string optionnel Type : Fait/ouvert, Prêt à manger, Surgelé, Frais, Vente (défaut : Frais)
storage_location string optionnel Lieu de stockage (optionnel)
temperature number optionnel Température de stockage °C (optionnel)
lot_number string optionnel Numéro de lot (optionnel, auto-généré sinon)
notes string optionnel Notes (optionnel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_haccp_label",
        "arguments": {
            "establishment_id": 1,
            "ingredient_name": "exemple"
        }
    }
}'

list_haccp_tracabilite

Liste les enregistrements de traçabilité HACCP d'un établissement. haccp.tracability.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
status string optionnel Statut : "complété", "non complété" (optionnel)
limit integer optionnel Nombre max (défaut : 100)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_haccp_tracabilite",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_haccp_tracabilite

Crée un enregistrement de traçabilité HACCP. haccp.tracability.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
type string optionnel Type : simple, complete (défaut : simple)
reference_type string optionnel Type d'élément tracé : ingredient, plat, product, haccp (optionnel)
reference_id integer optionnel ID de l'élément tracé (optionnel)
quantite string optionnel Quantité (optionnel)
dlc string optionnel DLC YYYY-MM-DD (optionnel)
lot string optionnel Numéro de lot (optionnel)
remarques string optionnel Remarques (optionnel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_haccp_tracabilite",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_hygiene_checklists

Liste les modèles de checklist hygiène HACCP d'un établissement. haccp.checklist.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
categorie string optionnel Filtre par catégorie (optionnel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_hygiene_checklists",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_hygiene_checklist_validation

Enregistre une validation de checklist hygiène pour un modèle donné. haccp.checklist.validate

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
template_id integer requis ID du modèle de checklist
zone_controle string optionnel Zone contrôlée (optionnel)
reponses object optionnel Réponses clé/valeur (ex: {"tenues_propres":"oui"})
commentaires string optionnel Commentaires (optionnel)
statut string optionnel Statut (défaut : complete)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_hygiene_checklist_validation",
        "arguments": {
            "establishment_id": 1,
            "template_id": 1
        }
    }
}'

list_cleaning_zones

Liste les zones de nettoyage (avec leurs postes) d'un établissement. haccp.cleaning_plan.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_cleaning_zones",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_cleaning_actions

Liste les actions de nettoyage réalisées d'un établissement. Filtres : période. haccp.cleaning_plan.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
date_from string optionnel Début YYYY-MM-DD (optionnel)
date_to string optionnel Fin YYYY-MM-DD (optionnel)
limit integer optionnel Nombre max (défaut : 100)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_cleaning_actions",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

record_cleaning_action

Enregistre une action de nettoyage réalisée sur un poste. haccp.cleaning_plan.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
poste_nettoyage_id integer requis ID du poste de nettoyage
commentaires string optionnel Commentaires (optionnel)
statut string optionnel Statut (défaut : complete)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "record_cleaning_action",
        "arguments": {
            "establishment_id": 1,
            "poste_nettoyage_id": 1
        }
    }
}'

create_equipment

Crée un équipement de suivi des températures (frigo, congélateur, chambre froide, cellule, four…). haccp.temperatures.create

ParamètreTypeDescription
kind string — froid_positif | froid_negatif | chaud | ambiant | friteuse | cellule | four | autre optionnel
temp_min number optionnel
temp_max number optionnel
capacity_l number optionnel
oil_type string optionnel
oil_alert_pct number optionnel
oil_max_pct number optionnel
check_interval_hours integer optionnel
oil_max_age_days integer optionnel
establishment_id integer requis ID de l'établissement
label string requis Nom de l'équipement (ex. « Frigo pâtisserie »)
type string optionnel Type : frigo, congelateur, chambre_froide, cellule, four, autre
emplacement string optionnel Emplacement (cuisine, réserve…)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_equipment",
        "arguments": {
            "establishment_id": 1,
            "label": "exemple"
        }
    }
}'

create_hygiene_checklist

Crée un modèle de checklist hygiène (point de contrôle + liste de vérifications), utilisable ensuite par create_hygiene_checklist_validation. haccp.checklist.validate

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
nom_point_controle string requis Nom du point de contrôle (ex. « Ouverture cuisine »)
categorie string — hygiene_personnel | etat_locaux optionnel Catégorie (défaut : etat_locaux)
description string optionnel
points_controle array<string> requis Liste des vérifications (ex. ["Températures relevées", "Plans de travail désinfectés"])
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_hygiene_checklist",
        "arguments": {
            "establishment_id": 1,
            "nom_point_controle": "exemple",
            "points_controle": [
                "exemple"
            ]
        }
    }
}'

update_hygiene_checklist

Modifie un modèle de checklist hygiène (id de list_hygiene_checklists) : nom_point_controle, categorie (hygiene_personnel | etat_locaux), description, points_controle (REMPLACE la liste), points_add (ajoute à la fin), points_remove (retire par libellé exact), actif (false = retiré des validations futures). Les validations déjà enregistrées ne sont jamais modifiées. Tout est vérifié avant écriture. haccp.checklist.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
template_id integer requis
nom_point_controle string optionnel
categorie string — hygiene_personnel | etat_locaux optionnel
description string | null optionnel
points_controle array<string> optionnel
points_add array<string> optionnel
points_remove array<string> optionnel
actif boolean optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_hygiene_checklist",
        "arguments": {
            "establishment_id": 1,
            "template_id": 1
        }
    }
}'

create_cleaning_zone

Crée une zone du plan de nettoyage avec ses postes (ex. zone « Cuisine » avec postes « Plans de travail », « Sols »). haccp.cleaning_plan.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
nom_zone string requis Nom de la zone (Cuisine, Salle, Réserve…)
description string optionnel
postes array<string> requis Postes de nettoyage de la zone
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_cleaning_zone",
        "arguments": {
            "establishment_id": 1,
            "nom_zone": "exemple",
            "postes": [
                "exemple"
            ]
        }
    }
}'

complete_haccp_tracabilite

Complète une fiche de traçabilité HACCP (statut « complété », quantité/remarques mises à jour). haccp.tracability.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
tracabilite_id integer requis
quantite string optionnel Quantité constatée (optionnel)
remarques string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "complete_haccp_tracabilite",
        "arguments": {
            "establishment_id": 1,
            "tracabilite_id": 1
        }
    }
}'

Clients 5 outils

list_clients

Liste les clients d'un établissement. Filtres : recherche, statut. clients.clients.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
search string optionnel Recherche nom/prénom/email/téléphone (optionnel)
status string optionnel Statut : Actif, Inactif, Suspendu (optionnel)
limit integer optionnel Nombre max (défaut : 100)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_clients",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_client

Retourne le détail d'un client d'un établissement. clients.clients.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
client_id integer requis ID du client
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_client",
        "arguments": {
            "establishment_id": 1,
            "client_id": 1
        }
    }
}'

create_client

Crée un client pour un établissement. clients.clients.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
nom string requis Nom de famille
prenom string optionnel Prénom (optionnel)
email string optionnel Email (optionnel)
num_tel string optionnel Téléphone (optionnel)
adresse string optionnel Adresse (optionnel)
code_postal string optionnel Code postal (optionnel)
ville string optionnel Ville (optionnel)
pays string optionnel Pays (optionnel)
numero_tva string optionnel Numéro de TVA intracom (optionnel)
siret string optionnel SIRET (optionnel)
genre string optionnel Genre (optionnel)
status string optionnel Statut : Actif, Inactif, Suspendu (défaut : Actif)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_client",
        "arguments": {
            "establishment_id": 1,
            "nom": "exemple"
        }
    }
}'

update_client

Modifie un client d'un établissement. clients.clients.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
client_id integer requis ID du client
nom string optionnel Nom (optionnel)
prenom string optionnel Prénom (optionnel)
email string optionnel Email (optionnel)
num_tel string optionnel Téléphone (optionnel)
adresse string optionnel Adresse (optionnel)
code_postal string optionnel Code postal (optionnel)
ville string optionnel Ville (optionnel)
pays string optionnel Pays (optionnel)
numero_tva string optionnel Numéro de TVA (optionnel)
siret string optionnel SIRET (optionnel)
status string optionnel Statut (optionnel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_client",
        "arguments": {
            "establishment_id": 1,
            "client_id": 1
        }
    }
}'

delete_client

Supprime un client d'un établissement. Action irréversible. clients.clients.delete

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
client_id integer requis ID du client
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "delete_client",
        "arguments": {
            "establishment_id": 1,
            "client_id": 1
        }
    }
}'

Factures 4 outils

list_invoices

Liste les factures d'un établissement. Filtres : statut, recherche. factures.invoices.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
status string optionnel Statut : brouillon, en_attente, envoyee, acceptee, refusee, litige, payee, annulee (optionnel)
search string optionnel Recherche par numéro ou client (optionnel)
limit integer optionnel Nombre max (défaut : 100)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_invoices",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_invoice

Retourne le détail complet d'une facture (lignes incluses). factures.invoices.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
invoice_id integer requis ID de la facture
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_invoice",
        "arguments": {
            "establishment_id": 1,
            "invoice_id": 1
        }
    }
}'

create_invoice

Crée une facture (brouillon) avec ses lignes. Les totaux sont calculés automatiquement. factures.invoices.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
client_id integer optionnel ID du client (optionnel)
invoice_date string optionnel Date facture YYYY-MM-DD (défaut : aujourd'hui)
due_date string optionnel Date d'échéance YYYY-MM-DD (optionnel)
tax_rate number optionnel Taux de TVA global en % (optionnel)
discount_amount number optionnel Remise globale (optionnel)
payment_method string optionnel Mode de paiement (optionnel)
notes string optionnel Notes (optionnel)
items array<object> requis Lignes de la facture
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_invoice",
        "arguments": {
            "establishment_id": 1,
            "items": [
                {
                    "name": "exemple",
                    "quantity": 1,
                    "unit_price": 1
                }
            ]
        }
    }
}'

update_invoice_status

Change le statut d'une facture en respectant les transitions légales autorisées (DGFiP). factures.invoices.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
invoice_id integer requis ID de la facture
status string — brouillon | en_attente | envoyee | acceptee | refusee | litige | payee | annulee requis Nouveau statut
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_invoice_status",
        "arguments": {
            "establishment_id": 1,
            "invoice_id": 1,
            "status": "brouillon"
        }
    }
}'

Devis 4 outils

list_quotes

Liste les devis d'un établissement. Filtre : statut. devis.quotes.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
status string optionnel Statut : brouillon, envoye, accepte, refuse, expire (optionnel)
limit integer optionnel Nombre max (défaut : 100)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_quotes",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_quote

Retourne le détail complet d'un devis (lignes incluses). devis.quotes.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
quote_id integer requis ID du devis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_quote",
        "arguments": {
            "establishment_id": 1,
            "quote_id": 1
        }
    }
}'

create_quote

Crée un devis (brouillon) avec ses lignes. Totaux et acompte calculés automatiquement. devis.quotes.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
client_id integer optionnel ID du client (optionnel)
quote_date string optionnel Date du devis YYYY-MM-DD (défaut : aujourd'hui)
validity_date string optionnel Date de validité YYYY-MM-DD (optionnel)
tax_rate number optionnel TVA globale en % (optionnel)
discount_amount number optionnel Remise globale (optionnel)
advance_percentage number optionnel Pourcentage d'acompte (optionnel)
payment_method string optionnel Mode de paiement (optionnel)
notes string optionnel Notes (optionnel)
items array<object> requis Lignes du devis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_quote",
        "arguments": {
            "establishment_id": 1,
            "items": [
                {
                    "name": "exemple",
                    "quantity": 1,
                    "unit_price": 1
                }
            ]
        }
    }
}'

update_quote_status

Change le statut d'un devis (brouillon, envoye, accepte, refuse, expire). devis.quotes.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
quote_id integer requis ID du devis
status string — brouillon | envoye | accepte | refuse | expire requis Nouveau statut
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_quote_status",
        "arguments": {
            "establishment_id": 1,
            "quote_id": 1,
            "status": "brouillon"
        }
    }
}'

Dépenses 3 outils

list_expenses

Liste les dépenses (achats fournisseurs) d'un établissement. Filtres : statut, recherche. expenses.expenses.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
status string optionnel Statut : payee, en_attente, decline (optionnel)
search string optionnel Recherche par numéro/référence/fournisseur (optionnel)
limit integer optionnel Nombre max (défaut : 100)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_expenses",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_expense

Retourne le détail complet d'une dépense (lignes incluses). expenses.expenses.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
expense_id integer requis ID de la dépense
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_expense",
        "arguments": {
            "establishment_id": 1,
            "expense_id": 1
        }
    }
}'

create_expense

Enregistre une dépense (achat) avec ses lignes. Totaux calculés automatiquement. expenses.expenses.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
supplier_id integer optionnel ID du fournisseur (optionnel)
purchase_date string optionnel Date d'achat YYYY-MM-DD (défaut : aujourd'hui)
supplier_invoice_reference string optionnel Référence facture fournisseur (optionnel)
category string optionnel Catégorie de dépense (optionnel)
payment_method string optionnel Mode de paiement (optionnel)
status string optionnel Statut : payee, en_attente, decline (défaut : en_attente)
notes string optionnel Notes (optionnel)
items array<object> requis Lignes de la dépense
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_expense",
        "arguments": {
            "establishment_id": 1,
            "items": [
                {
                    "name": "exemple",
                    "quantity": 1,
                    "unit_price": 1
                }
            ]
        }
    }
}'

TVA 2 outils

list_tva

Liste les taux de TVA configurés pour un établissement. tva.rates.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_tva",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_tva

Crée un taux de TVA pour un établissement. tva.rates.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
name string requis Nom du taux (ex: Taux normal, Taux réduit)
percentage number requis Pourcentage (ex: 20, 10, 5.5)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_tva",
        "arguments": {
            "establishment_id": 1,
            "name": "exemple",
            "percentage": 1
        }
    }
}'

Finance 7 outils

finance_summary

Synthèse financière d'un établissement : CA facturé, encaissé, impayés, dépenses, marge sur une période. finance.dashboard.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
date_from string optionnel Début période YYYY-MM-DD (défaut : 1er jour du mois)
date_to string optionnel Fin période YYYY-MM-DD (défaut : aujourd'hui)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "finance_summary",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_pos_analytics

Statistiques de caisse sur une période (défaut 30 jours) : CA, tickets, panier moyen, couverts, marge estimée, CA par jour/heure/canal/mode/serveur/zone/table. finance.dashboard.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
from string optionnel AAAA-MM-JJ
to string optionnel AAAA-MM-JJ
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_pos_analytics",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_top_flop_products

Meilleures ventes (CA, quantité, marge estimée) et flops de la carte (plats actifs les moins vendus, zéro vente inclus) sur une période. finance.dashboard.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
from string optionnel
to string optionnel
limit integer optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_top_flop_products",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_table_turnover

Temps de table : durée moyenne et médiane d'occupation, rotations par table et par jour, sur une période. finance.dashboard.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
from string optionnel
to string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_table_turnover",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_loyalty_capture

Taux de capture client : part des tickets rattachés à une fiche client, clients uniques, CA identifié. finance.dashboard.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
from string optionnel
to string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_loyalty_capture",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_sales_targets

Objectifs de vente et challenges avec leur progression (réalisé, reste à faire, jours restants, en bonne voie, classement des serveurs). finance.targets.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
running boolean optionnel Uniquement les objectifs en cours
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_sales_targets",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_sales_target

Crée un objectif de vente ou un challenge (exige confirm:true après avoir résumé la cible au restaurateur). metric : revenue, tickets, average_ticket, covers, product_quantity (avec plat_id). finance.targets.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
label string requis
metric string requis
target_value number requis
starts_on string requis
ends_on string requis
professional_id integer optionnel
plat_id integer optionnel
confirm boolean requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_sales_target",
        "arguments": {
            "establishment_id": 1,
            "label": "exemple",
            "metric": "exemple",
            "target_value": 1,
            "starts_on": "exemple",
            "ends_on": "exemple",
            "confirm": true
        }
    }
}'

Notifications 2 outils

list_notifications

Liste les notifications d'un établissement. notifications.notifications.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_notifications",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_notification

Crée une nouvelle notification pour un établissement. notifications.notifications.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
title string requis Titre de la notification
message string requis Corps du message
type string — info | warning | danger | success optionnel Type de notification (défaut : info)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_notification",
        "arguments": {
            "establishment_id": 1,
            "title": "exemple",
            "message": "exemple"
        }
    }
}'

Commandes, caisse & livraison 28 outils

set_dish_sold_out

Rupture du JOUR d'un ou plusieurs plats (« épuisé » / « de retour ») : le plat reste à la carte mais n'est plus vendu nulle part (caisse, QR de table, borne, boutique) et passe « épuisé » sur les menu boards. La rupture retombe seule à la bascule de journée (5 h par défaut). Pour retirer un plat de la carte durablement, utiliser update_dish active:false. orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
dish_ids array<integer> requis Plats concernés (list_dishes).
sold_out boolean requis true = épuisé aujourd'hui, false = de retour.
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "set_dish_sold_out",
        "arguments": {
            "establishment_id": 1,
            "dish_ids": [
                1
            ],
            "sold_out": true
        }
    }
}'

list_orders

Liste les commandes (tous canaux : téléphone, agent vocal, sur place, vitrine, manuel). Filtres : statut, canal, date, open (notes en cours uniquement), table_name (« T6 »). Chaque commande porte le NOM de sa table (`table`) — ne jamais déduire une table de `table_id`. Pour l'addition ou l'état d'UNE table, préférer get_table_status. orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
open boolean optionnel true = seulement les commandes en cours (ni livrée ni annulée)
table_name string optionnel Nom de la table (« T6 », « table 6 »)
status string optionnel en_attente|confirmee|en_preparation|prete|livree|annulee
channel string optionnel manuel|telephone|vitrine|agent_vocal|sur_place|facture|devis
date string optionnel Filtrer par jour YYYY-MM-DD
limit integer optionnel Max résultats (défaut 50)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_orders",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_order

Détail d'une commande (articles, totaux, facture/devis liés, table). orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
order_id integer requis ID de la commande
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_order",
        "arguments": {
            "establishment_id": 1,
            "order_id": 1
        }
    }
}'

create_order

Crée une commande À PARTIR DE LA CARTE et l'envoie en cuisine. Chaque ligne désigne un plat (dish_id, ou dish_name) et une quantité ; le PRIX et la TVA viennent de la carte, jamais de l'appelant. Refusée si aucun article, si un plat est inconnu, épuisé, sans prix, ou si une option obligatoire (cuisson…) manque — l'erreur dit quoi demander. Avec table_id, les plats rejoignent la note ouverte de la table. Article hors carte : name + unit_price (> 0), sans mélange avec des plats de la carte. orders.online.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
items array<object> requis Au moins une ligne
service_mode string optionnel sur_place (comptoir, défaut) | emporter | livraison
table_id integer optionnel Table (mode sur place)
covers integer optionnel Nombre de couverts
customer_name string optionnel
customer_phone string optionnel
customer_address string optionnel
notes string optionnel
send_to_kitchen boolean optionnel Défaut true
channel string optionnel Article hors carte seulement (défaut manuel)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_order",
        "arguments": {
            "establishment_id": 1,
            "items": [
                {
                    "quantity": 1
                }
            ]
        }
    }
}'

update_order_status

Change le statut d'une commande (transitions vers l'avant uniquement ; une note salle non encaissée ne peut pas passer « livree » ; « annulee » exige reason). Répercute sur la facture/devis et la table. orders.online.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
order_id integer requis
status string requis confirmee|en_preparation|prete|livree|annulee
reason string optionnel Motif — obligatoire pour annulee
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_order_status",
        "arguments": {
            "establishment_id": 1,
            "order_id": 1,
            "status": "exemple"
        }
    }
}'

check_gift_card

Solde et validité d'une carte cadeau par code. orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
code string requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "check_gift_card",
        "arguments": {
            "establishment_id": 1,
            "code": "exemple"
        }
    }
}'

list_gift_cards

Cartes cadeaux vendues (encaissé, soldes restants). orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
status string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_gift_cards",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_delivery_zones

Zones de livraison (frais, minimums, codes postaux). orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_delivery_zones",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

upsert_delivery_zone

Crée ou met à jour une zone de livraison. orders.online.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
zone_id integer optionnel
name string requis
postal_codes array<string> optionnel
fee number optionnel
minimum_order number optionnel
estimated_minutes integer optionnel
active boolean optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "upsert_delivery_zone",
        "arguments": {
            "establishment_id": 1,
            "name": "exemple"
        }
    }
}'

get_pos_session

Session de caisse en cours (fond, opérateur) + rapport X (CA, modes, TVA, remises). orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_pos_session",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

open_pos_session

Ouvre la caisse avec un fond initial. operator_id = employé ayant la permission caisse. register_id = poste de caisse (bar, salle…) ; omis, le poste par défaut est pris. orders.online.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
operator_id integer requis
opening_float number requis
register_id integer optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "open_pos_session",
        "arguments": {
            "establishment_id": 1,
            "operator_id": 1,
            "opening_float": 1
        }
    }
}'

close_pos_session

Clôture Z de la caisse : comptage espèces optionnel, écart calculé (exige confirm:true après avoir résumé le rapport X à l'opérateur). register_id = poste à clôturer ; omis, le poste par défaut. orders.online.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
operator_id integer requis
counted_cash number optionnel
register_id integer optionnel
confirm boolean requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "close_pos_session",
        "arguments": {
            "establishment_id": 1,
            "operator_id": 1,
            "confirm": true
        }
    }
}'

get_pos_report

Rapport X (session en cours) ou Z (session_id d'une session clôturée) : CA, ticket moyen, par mode, par opérateur, TVA, remises. orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
session_id integer optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_pos_report",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_consolidated_pos_report

Z CONSOLIDÉ d'une journée : total encaissé de la maison (toutes les caisses), détail par poste avec son écart, règlements, TVA, espèces. date au format AAAA-MM-JJ ; omise, la journée en cours. Les ventes du site déjà payées en ligne sont données à part, jamais dans le total caisse. orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
date string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_consolidated_pos_report",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

record_pos_payment

Encaisse une note (paiement partiel ou total) : espèces avec rendu (tendered), carte, titre_restaurant (jamais de rendu), cheque. La note est soldée quand le reste dû atteint 0. orders.online.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
order_id integer requis
operator_id integer requis
method string — especes | carte | titre_restaurant | cheque requis
amount number requis
tendered number optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "record_pos_payment",
        "arguments": {
            "establishment_id": 1,
            "order_id": 1,
            "operator_id": 1,
            "method": "especes",
            "amount": 1
        }
    }
}'

list_pos_payments

Paiements d'une note (modes, montants, rendu, reste dû). orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
order_id integer requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_pos_payments",
        "arguments": {
            "establishment_id": 1,
            "order_id": 1
        }
    }
}'

list_happy_hours

Happy hours configurées (jours, créneau, remise, périmètre). orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_happy_hours",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

upsert_happy_hour

Crée ou met à jour une happy hour (days ISO 1-7, HH:MM, remise 1-90 %, scope all|category|plat). orders.online.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
happy_hour_id integer optionnel
name string requis
days array<integer> requis
start_time string requis
end_time string requis
discount_percent integer requis
scope_type string — all | category | plat optionnel
scope_ids array<integer> optionnel
active boolean optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "upsert_happy_hour",
        "arguments": {
            "establishment_id": 1,
            "name": "exemple",
            "days": [
                1
            ],
            "start_time": "exemple",
            "end_time": "exemple",
            "discount_percent": 1
        }
    }
}'

list_pos_tabs

Ardoises clients (soldes dus, statut) — le règlement se fait en caisse. orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_pos_tabs",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_payment_terminals

Terminaux de paiement (TPE Smile&Pay) : libellé, îlot, actif/défaut, dernière utilisation. Jamais de clé API dans la réponse. orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_payment_terminals",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_terminal_payments

Encaissements TPE (statut, montant, pourboire, terminal, rapprochement) — filtrables par jour et statut. orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
date string optionnel YYYY-MM-DD (défaut aujourd'hui)
status string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_terminal_payments",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_smilepay_reconciliation

Rapprochement Smile&Pay d'un jour : encaissés/échoués/abandonnés, total, pourboires, paiements non rapprochés à vérifier. orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
date string optionnel YYYY-MM-DD (défaut aujourd'hui)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_smilepay_reconciliation",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_hubrise_status

État du connecteur HubRise : connexion, location, plats sans sku_ref (bloqués au push), commandes du jour en attente côté plateformes. orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_hubrise_status",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

lister_bornes

Liste les bornes de commande et tablettes de table : nom, mode, table, en ligne ou non, code d'appairage, commandes du jour, et le nombre de bornes permis par l'offre. Demande le pack Écrans & Borne. orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "lister_bornes",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

etat_borne

État d'une borne : en ligne, dernier signal, version, terminal de paiement, et chiffres du jour (commandes payées, panier moyen, abandons, commandes en cours). orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
borne_id integer requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "etat_borne",
        "arguments": {
            "establishment_id": 1,
            "borne_id": 1
        }
    }
}'

lister_commandes_borne

Commandes passées sur les bornes (50 au plus, les plus récentes d'abord) : numéro d'appel, statut, paiement, total TTC, borne. Filtres : borne_id, date (AAAA-MM-JJ, défaut aujourd'hui), statut. orders.online.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
borne_id integer optionnel
date string optionnel
statut string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "lister_commandes_borne",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

Salle & réservations 24 outils

list_reservations

Liste les réservations de table. Filtres : statut, date. salle.reservations.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
status string optionnel en_attente|confirmee|installee|terminee|annulee|absent
date string optionnel Jour YYYY-MM-DD
limit integer optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_reservations",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

reservation_availability

Vérifie la disponibilité d'un créneau : restaurant ouvert + tables libres (anti-double-booking). salle.reservations.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
date string requis YYYY-MM-DD
time string requis HH:MM
party_size integer requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "reservation_availability",
        "arguments": {
            "establishment_id": 1,
            "date": "exemple",
            "time": "exemple",
            "party_size": 1
        }
    }
}'

get_opening_hours

Horaires d’ouverture de la semaine (plusieurs services par jour : midi, soir) et fermetures exceptionnelles à venir. Lecture seule : ne crée rien. salle.reservations.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_opening_hours",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

set_opening_hours

REMPLACE tous les horaires d’ouverture de la semaine. Chaque créneau = {day, service, start_time, end_time} ; plusieurs créneaux par jour autorisés (midi + soir) ; un service qui passe minuit (19:00 → 01:00) est accepté. Un jour ABSENT de la liste devient FERMÉ (ou passer {day, closed:true}). Deux créneaux qui se chevauchent le même jour sont refusés. Retourne les horaires précédents (previous_hours) pour pouvoir revenir en arrière. Ces horaires pilotent la disponibilité des réservations, le site et l’agent téléphonique. salle.reservations.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
hours array<object> requis Créneaux de la semaine.
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "set_opening_hours",
        "arguments": {
            "establishment_id": 1,
            "hours": [
                {
                    "day": "exemple"
                }
            ]
        }
    }
}'

add_closure_period

Déclare une fermeture exceptionnelle (congés, travaux, privatisation) du start_date au end_date INCLUS : aucune réservation n’est proposée sur ces jours. Les réservations déjà prises ne sont PAS annulées : elles sont signalées dans la réponse. salle.reservations.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
start_date string requis YYYY-MM-DD
end_date string requis YYYY-MM-DD (inclus)
reason string optionnel Motif affiché, ex. « Congés annuels »
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "add_closure_period",
        "arguments": {
            "establishment_id": 1,
            "start_date": "exemple",
            "end_date": "exemple"
        }
    }
}'

list_closure_periods

Liste les fermetures exceptionnelles (à venir par défaut). salle.reservations.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
include_past boolean optionnel Inclure les fermetures passées (défaut false)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_closure_periods",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

delete_closure_period

Supprime une fermeture exceptionnelle : le restaurant redevient réservable sur ces jours. Exige confirm:true. salle.reservations.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
closure_id integer requis ID donné par list_closure_periods
confirm boolean requis Obligatoire : true
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "delete_closure_period",
        "arguments": {
            "establishment_id": 1,
            "closure_id": 1,
            "confirm": true
        }
    }
}'

create_reservation

Crée une réservation de table (assigne la meilleure table libre, ou celle choisie / dans la zone demandée). salle.reservations.create

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
customer_name string requis
customer_phone string optionnel
customer_email string optionnel
party_size integer requis
date string requis YYYY-MM-DD
time string requis HH:MM
zone string optionnel Zone souhaitée (ex. terrasse)
table_id integer optionnel Table précise (optionnel)
notes string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_reservation",
        "arguments": {
            "establishment_id": 1,
            "customer_name": "exemple",
            "party_size": 1,
            "date": "exemple",
            "time": "exemple"
        }
    }
}'

confirm_reservation

Confirme une réservation (assigne une table si besoin → table « réservée »). salle.reservations.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
reservation_id integer requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "confirm_reservation",
        "arguments": {
            "establishment_id": 1,
            "reservation_id": 1
        }
    }
}'

checkin_reservation

Check-in : installe le client (table « occupée ») et crée la commande sur place. salle.reservations.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
reservation_id integer requis
table_id integer optionnel Table si non encore assignée
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "checkin_reservation",
        "arguments": {
            "establishment_id": 1,
            "reservation_id": 1
        }
    }
}'

cancel_reservation

Annule une réservation (libère la table). salle.reservations.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
reservation_id integer requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "cancel_reservation",
        "arguments": {
            "establishment_id": 1,
            "reservation_id": 1
        }
    }
}'

no_show_reservation

Marque une réservation en no-show (client absent → libère la table). salle.reservations.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
reservation_id integer requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "no_show_reservation",
        "arguments": {
            "establishment_id": 1,
            "reservation_id": 1
        }
    }
}'

list_zones

Liste les zones du plan de salle (Salle, Terrasse…). salle.tables.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_zones",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_zone

Crée une zone du plan de salle. salle.tables.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
name string requis
color string optionnel Couleur hex #RRGGBB
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_zone",
        "arguments": {
            "establishment_id": 1,
            "name": "exemple"
        }
    }
}'

get_table_status

État RÉEL d'une table, comme la caisse le voit : occupée dès qu'une note est ouverte (montant, couverts, depuis quand, addition demandée, lignes pas envoyées), sinon libre / à nettoyer / réservée / hors service, prochaine réservation, et les CONFLITS (statut enregistré contredit par la note, deux notes ouvertes, réservation imminente sur une table occupée). Répondre avec `summary`. table_id OU table_name (« T1 », « 4 »). salle.tables.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
table_id integer optionnel
table_name string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_table_status",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_tables

Liste les tables avec leur état RÉEL (une note ouverte = occupée, quoi que dise le statut enregistré), la note ouverte, la prochaine réservation et les conflits. Filtre : état réel. salle.tables.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
status string optionnel free|reserved|occupied|cleaning|blocked
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_tables",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_table

Crée une table dans le plan de salle. salle.tables.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
name string requis
capacity integer optionnel
shape string optionnel round|square|rectangle
zone_id integer optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_table",
        "arguments": {
            "establishment_id": 1,
            "name": "exemple"
        }
    }
}'

update_table_status

Change l'état d'une table. free = LIBRE, propre, prête à recevoir (« j'ai nettoyé la table », « nettoie la table », « la table est propre », « libère la table »). cleaning = À NETTOYER : les clients sont partis, la table est encore sale (« la table est à nettoyer », « les clients sont partis »). occupied = occupée, reserved = réservée, blocked = hors service. La réponse donne l'état AVANT et APRÈS ; changed:false = la table était déjà dans cet état, rien n'a été fait. salle.tables.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
table_id integer requis
status string — free | reserved | occupied | cleaning | blocked requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_table_status",
        "arguments": {
            "establishment_id": 1,
            "table_id": 1,
            "status": "free"
        }
    }
}'

floor_plan_status

Vue d'ensemble temps réel du plan de salle : compteurs par statut + chaque table avec sa commande active. salle.tables.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "floor_plan_status",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_waitlist

Liste la file d'attente active (walk-ins en attente / prévenus). salle.reservations.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_waitlist",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

add_waitlist

Ajoute un client à la file d'attente. salle.reservations.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
customer_name string optionnel
customer_phone string optionnel
party_size integer requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "add_waitlist",
        "arguments": {
            "establishment_id": 1,
            "party_size": 1
        }
    }
}'

seat_waitlist

Installe un client de la file d'attente sur une table (crée la commande sur place). salle.reservations.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
waitlist_id integer requis
table_id integer requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "seat_waitlist",
        "arguments": {
            "establishment_id": 1,
            "waitlist_id": 1,
            "table_id": 1
        }
    }
}'

generer_qr_table

Adresse du menu digital d'une table (/t/…, celle imprimée sur le chevalet), lien de l'image du QR code et lien d'impression de tous les chevalets. Sans table_id : toutes les tables. N'invalide aucun QR déjà imprimé. salle.tables.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
table_id integer optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "generer_qr_table",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

regenerer_qr_table

Change l'adresse QR d'une table (QR volé, photographié et détourné…). ⚠ Le chevalet déjà imprimé NE FONCTIONNE PLUS : il faudra le réimprimer. Refusé tant qu'une note est ouverte sur la table. EXIGE confirm:true — sans lui, l'outil décrit la conséquence. salle.tables.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
table_id integer requis
confirm boolean optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "regenerer_qr_table",
        "arguments": {
            "establishment_id": 1,
            "table_id": 1
        }
    }
}'

Cuisine (KDS) 2 outils

update_kds_item_status

Change le statut cuisine d'un plat d'une commande (pending → in_progress → ready → served). Utilisé par les écrans KDS et Jarvis. kds.items.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
item_id integer requis ID de l'item de commande (boutique_commande_items)
status string — pending | in_progress | ready | served requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_kds_item_status",
        "arguments": {
            "establishment_id": 1,
            "item_id": 1,
            "status": "pending"
        }
    }
}'

get_station_load

Charge des postes cuisine (tickets actifs par poste) — alimente le compteur d'attente. kds.items.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_station_load",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

Écrans d'affichage 14 outils

lister_ecrans

Liste les écrans d'affichage du restaurant : nom, zone, groupes, orientation, en ligne ou non (dernier signal), ce qu'ils jouent maintenant (diffusion immédiate, créneau programmé, menu board ou programme par défaut), code d'appairage si l'appareil n'est pas encore branché. Demande l'offre Écrans. display.screens.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "lister_ecrans",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

obtenir_ecran

Détail d'un écran : état, programme en cours et prochain changement, diffusion immédiate en cours, créneaux qui le visent (lui ou ses groupes), menu board, 10 derniers événements de l'appareil (appairage, pertes de réseau). display.screens.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
ecran_id integer requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "obtenir_ecran",
        "arguments": {
            "establishment_id": 1,
            "ecran_id": 1
        }
    }
}'

creer_code_appairage

Déclare un NOUVEL écran et renvoie son code d'appairage (6 caractères, valable 7 jours) et l'adresse à ouvrir sur le téléviseur (/play/CODE). Respecte le quota d'écrans de l'offre (refus motivé sinon) ; un écran déclaré compte dans le quota même s'il n'est jamais branché — on le retire depuis l'écran de gestion (Désactiver). Deux écrans ne portent jamais le même nom. display.screens.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
nom string requis ex. « Télé du bar »
zone string optionnel
orientation string — paysage | portrait optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "creer_code_appairage",
        "arguments": {
            "establishment_id": 1,
            "nom": "exemple"
        }
    }
}'

etat_parc

État du parc d'écrans : nombre en ligne / hors ligne / pas encore branchés, écrans muets depuis quand, diffusions immédiates en cours, quota de l'offre et crédits d'affiches restants. (Les alertes automatiques arriveront avec la supervision.) display.screens.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "etat_parc",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

rapport_diffusion

Ce que chaque écran diffuse MAINTENANT (source, programme, affiche remontée par l'appareil, prochain changement) ET le journal des passages réellement joués sur une période (défaut : aujourd'hui) : passages et durée par écran, dont publicitaires, affiches les plus diffusées. Le rapport détaillé d'un annonceur (CSV/PDF) se trouve dans la page Régie publicitaire. display.screens.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
ecran_id integer optionnel Un seul écran (facultatif)
du string optionnel AAAA-MM-JJ (défaut : aujourd'hui)
au string optionnel AAAA-MM-JJ (défaut : aujourd'hui)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "rapport_diffusion",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

synchroniser_carte

Menu board : la carte du restaurant en direct sur un écran (prix TTC, plats épuisés du jour marqués « Épuisé »). Avec activer:true/false, pose ou retire le menu board sur les écrans visés (category_ids = catégories de plats à afficher, vide = toute la carte). Sans activer, relit la carte et force le rafraîchissement des écrans qui l'affichent. Rend, par écran, le nombre de plats et les plats épuisés. Ne consomme aucun crédit. display.screens.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
ecran_ids array<integer> optionnel Écrans visés (lister_ecrans)
groupe_ids array<integer> optionnel Groupes d'écrans visés
zone string optionnel Zone ou nom de groupe, ex. « salle », « bar », « terrasse » (accents et casse ignorés)
tous boolean optionnel Tous les écrans du restaurant
activer boolean optionnel
titre string optionnel
category_ids array<integer> optionnel Catégories de plats (list_dish_categories)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "synchroniser_carte",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

lister_medias

Liste la bibliothèque d'affiches du restaurant (id, nom, taille, orientation) et les affiches IA en cours de fabrication ou en échec (avec leur motif). Termine au passage une affiche demandée par generer_affiche qu'aucun traitement de fond n'a prise (l'appel peut alors durer 1 à 2 min). display.medias.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "lister_medias",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

importer_media

Ajoute une affiche à la bibliothèque depuis une adresse d'image HTTPS publique (JPEG, PNG, WebP ; 8 Mo max ; lien DIRECT vers le fichier, pas une page de partage). Elle n'est diffusée nulle part tant qu'on ne l'envoie pas. display.medias.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
image_url string requis
nom string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "importer_media",
        "arguments": {
            "establishment_id": 1,
            "image_url": "exemple"
        }
    }
}'

generer_affiche

Fait composer une affiche promotionnelle par l'IA à partir de plats de la carte (photo, nom et prix TTC relus sur la carte — jamais saisis). format obligatoire : 16:9 (téléviseur paysage) ou 9:16 (portrait). modele obligatoire et compatible avec le nombre de plats : hero (1 plat), vitrine (2 à 4), menu_board (5 à 20) — un modèle incompatible est refusé. Coûte des crédits d'affiches, débités SEULEMENT si l'affiche est réussie ; refusé sans crédit suffisant. Répond aussitôt avec demande_id ; appelez ensuite lister_medias (qui termine la fabrication, 1 à 2 min) : l'affiche arrive dans la bibliothèque et n'est JAMAIS diffusée seule — relisez-la avant de la diffuser. display.medias.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
format string — 16:9 | 9:16 requis
modele string — hero | vitrine | menu_board requis
plat_ids array<integer> requis 1 à 20 plats (list_dishes)
theme string optionnel Accroche libre, ex. « Happy hour 17 h – 19 h »
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "generer_affiche",
        "arguments": {
            "establishment_id": 1,
            "format": "16:9",
            "modele": "hero",
            "plat_ids": [
                1
            ]
        }
    }
}'

lister_playlists

Liste les playlists (affiches, durées, message) et les créneaux programmés (jours, heures, écran ou groupe visé). display.medias.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "lister_playlists",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

creer_playlist

Crée une playlist d'affiches de la bibliothèque (media_ids dans l'ordre, duree_s par affiche, 5 à 300 s), avec un message en surimpression facultatif. Ne diffuse rien : programmez-la avec planifier_diffusion. display.medias.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
nom string requis
media_ids array<integer> requis Affiches, dans l'ordre
duree_s integer optionnel
message string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "creer_playlist",
        "arguments": {
            "establishment_id": 1,
            "nom": "exemple",
            "media_ids": [
                1
            ]
        }
    }
}'

planifier_diffusion

Programme une playlist sur un écran OU un groupe, sur des jours (lundi…dimanche ou 1-7 ; vide = tous) et une plage horaire (HH:MM ; fin avant début = passe minuit), avec des dates de campagne facultatives. Un créneau qui chevauche un autre sur la même cible est refusé en le nommant. Un créneau d'écran passe devant celui de son groupe. display.medias.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
playlist_id integer requis
ecran_id integer optionnel
groupe_id integer optionnel
jours array<integer | string> optionnel
debut string requis HH:MM
fin string requis HH:MM
date_debut string optionnel AAAA-MM-JJ
date_fin string optionnel AAAA-MM-JJ
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "planifier_diffusion",
        "arguments": {
            "establishment_id": 1,
            "playlist_id": 1,
            "debut": "exemple",
            "fin": "exemple"
        }
    }
}'

diffuser_maintenant

Diffuse TOUT DE SUITE des affiches (media_ids, ou playlist_id) sur des écrans, pendant minutes (défaut 60, max 720), au-dessus de la programmation ; à l'échéance, chaque écran reprend seul son programme. Cible : ecran_ids, groupe_ids, zone (« salle », « bar »…) ou tous. EXIGE confirm:true — sans lui, l'outil renvoie la liste exacte des écrans et des affiches concernés, à relire au restaurateur. display.medias.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
ecran_ids array<integer> optionnel Écrans visés (lister_ecrans)
groupe_ids array<integer> optionnel Groupes d'écrans visés
zone string optionnel Zone ou nom de groupe, ex. « salle », « bar », « terrasse » (accents et casse ignorés)
tous boolean optionnel Tous les écrans du restaurant
media_ids array<integer> optionnel Affiches à diffuser
playlist_id integer optionnel Ou : les affiches d'une playlist
minutes integer optionnel
message string optionnel
confirm boolean optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "diffuser_maintenant",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

arreter_diffusion

Arrête la diffusion immédiate en cours sur les écrans visés (ecran_ids, groupe_ids, zone ou tous) : ils reprennent leur programme. EXIGE confirm:true — sans lui, l'outil liste les diffusions qui seraient arrêtées. display.medias.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
ecran_ids array<integer> optionnel Écrans visés (lister_ecrans)
groupe_ids array<integer> optionnel Groupes d'écrans visés
zone string optionnel Zone ou nom de groupe, ex. « salle », « bar », « terrasse » (accents et casse ignorés)
tous boolean optionnel Tous les écrans du restaurant
confirm boolean optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "arreter_diffusion",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

PrediBot & appels de Caroline 5 outils

list_calls

Appels reçus par Caroline (assistante vocale). Sans date : les appels d'AUJOURD'HUI. Chaque appel porte l'heure, le numéro, le client reconnu, la durée, le statut (reussi|transfere|echoue|manque|en_cours), les intentions (commande|question|reservation|reclamation), le résumé en français, si une commande en est née, et son suivi (traité par qui, quand, nombre de notes). with_transcript:true ajoute la transcription complète. Rafraîchit d'abord l'archive depuis ElevenLabs (au plus toutes les 20 s). predibot.dashboard.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
date string optionnel Un jour précis (AAAA-MM-JJ)
date_from string optionnel Début de période (AAAA-MM-JJ)
date_to string optionnel Fin de période (AAAA-MM-JJ)
status string — reussi | transfere | echoue | manque | en_cours optionnel
intent string — commande | question | reservation | reclamation | autre optionnel
suivi string — a_traiter | traites optionnel a_traiter = pas encore marqué traité
with_transcript boolean optionnel
limit integer optionnel 1 à 100, défaut 50
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_calls",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_call

Un appel de Caroline en détail : transcription complète, résumé français, intentions, commande liée, notes de suivi de l'équipe, traité par qui et quand. predibot.dashboard.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
call_id integer requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_call",
        "arguments": {
            "establishment_id": 1,
            "call_id": 1
        }
    }
}'

generate_callback_pitch

Prépare le PITCH DE RAPPEL d'un client à partir de la transcription de son appel : accroche, rappel du contexte, proposition, question de clôture, plus un script prêt à lire, le motif (réclamation, appel manqué, réservation ou commande à confirmer, question) et la priorité. Rien n'est écrit ni envoyé : c'est une proposition, l'équipe rappelle elle-même. Soit call_id (un appel), soit date (tous les appels du jour, par défaut ceux qui ne sont pas encore traités, 20 au plus, les plus urgents d'abord). predibot.dashboard.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
call_id integer optionnel
date string optionnel Tous les appels de ce jour (défaut : aujourd'hui si call_id absent) (AAAA-MM-JJ)
include_handled boolean optionnel Inclure les appels déjà traités (défaut false)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "generate_callback_pitch",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

add_call_note

Ajoute une note de suivi signée sur un appel (« rappelé à 15 h, table confirmée »). Visible dans l'écran Appels. predibot.dashboard.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
call_id integer requis
body string requis 2000 caractères max
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "add_call_note",
        "arguments": {
            "establishment_id": 1,
            "call_id": 1,
            "body": "exemple"
        }
    }
}'

mark_call_handled

Marque un appel traité (rappel fait) ou le rouvre (handled:false). Qui et quand sont conservés. predibot.dashboard.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
call_id integer requis
handled boolean optionnel Défaut true
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "mark_call_handled",
        "arguments": {
            "establishment_id": 1,
            "call_id": 1
        }
    }
}'

Site web 19 outils

list_site_templates

Liste les templates métiers du site (galerie du Studio). website.pages.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_site_templates",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

apply_site_template

⚠ DESTRUCTIF : applique un template métier au site en SUPPRIMANT TOUTES les pages et sections existantes (y compris les pages activées depuis le catalogue et tout le texte rédigé), puis en recréant les pages du template, PUBLIÉES. Appelé sans confirm, l'outil renvoie le nombre exact de pages et de sections qui seront détruites : relisez-le au restaurateur, puis rappelez avec confirm:true. Pour changer seulement couleurs ou polices, utilisez set_site_theme (ne touche jamais aux pages). website.pages.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
slug string requis
confirm boolean optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "apply_site_template",
        "arguments": {
            "establishment_id": 1,
            "slug": "exemple"
        }
    }
}'

set_site_theme

Modifie partiellement les design tokens du site SANS jamais toucher aux pages. Clés acceptées : colors.{primary, secondary, background, text, surface} (hex #RRGGBB ; primary_color… acceptés), fonts.{heading, body} (nom de police Google Fonts ; font_heading / font_body / font acceptés), radius (none|sm|md|lg|xl|full), spacing_scale (0.75 à 1.5), button_style (rounded|pill|square). Toute clé non appliquée est listée dans ignored_tokens avec sa raison. Crée le thème depuis les couleurs actuelles de la vitrine s'il n'existe pas. website.pages.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
tokens object requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "set_site_theme",
        "arguments": {
            "establishment_id": 1,
            "tokens": {}
        }
    }
}'

get_site_pages

Liste les pages du site (statut, navigation) + catalogue de pages activables. website.pages.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_site_pages",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

add_site_page

Active une page du catalogue (about, faq, allergens, gallery, jobs, beverages, private, producers, delivery, press, giftcards) — créée en brouillon. website.pages.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
type string requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "add_site_page",
        "arguments": {
            "establishment_id": 1,
            "type": "exemple"
        }
    }
}'

create_site_page

Crée une page LIBRE du site (ex. « Brunch du dimanche », « Événements », « Carte des desserts »), en BROUILLON : relisez-la puis publiez-la avec toggle_site_page ou publish_site. show_in_nav : header (menu du haut, défaut), footer (pied de page) ou none (accessible par lien seulement). sections : [{type, props}] parmi les types listés par get_site_pages (section_types) — sans sections, la page reçoit un bloc texte à compléter. Pour une page du catalogue (FAQ, allergènes, recrutement…), préférez add_site_page. website.pages.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
title string requis
slug string optionnel Adresse de la page (facultatif, déduite du titre)
show_in_nav string — header | footer | none optionnel
sections array<object> optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_site_page",
        "arguments": {
            "establishment_id": 1,
            "title": "exemple"
        }
    }
}'

update_site_page

Modifie une page existante : titre, adresse (new_slug), place dans le menu (show_in_nav header|footer|none — ex. remonter « Privatisation » du pied de page vers le menu du haut) et ordre (sort, 0 = en premier). Ne touche ni aux sections ni au statut de publication. website.pages.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
page_slug string requis
title string optionnel
new_slug string optionnel
show_in_nav string — header | footer | none optionnel
sort integer optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_site_page",
        "arguments": {
            "establishment_id": 1,
            "page_slug": "exemple"
        }
    }
}'

add_site_section

Ajoute une section à une page (type parmi section_types de get_site_pages, props de départ, position 1 = en haut ; défaut : en bas). La carte (menu_grid) se remplit seule depuis la carte du restaurant, avec barre de catégories et recherche de plat. website.pages.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
page_slug string requis
type string requis
props object optionnel
position integer optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "add_site_section",
        "arguments": {
            "establishment_id": 1,
            "page_slug": "exemple",
            "type": "exemple"
        }
    }
}'

remove_site_section

Retire une section d'une page (exige confirm:true ; sans lui, l'outil décrit la section qui partira). Une section verrouillée 🔒 dans le Studio est refusée. website.pages.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
section_id integer requis
confirm boolean optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "remove_site_section",
        "arguments": {
            "establishment_id": 1,
            "section_id": 1
        }
    }
}'

toggle_site_page

Publie ou dépublie une page du site. website.pages.publish

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
page_slug string requis
publish boolean requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "toggle_site_page",
        "arguments": {
            "establishment_id": 1,
            "page_slug": "exemple",
            "publish": true
        }
    }
}'

get_page_content

Contenu d'une page (sections + props) pour la relire ou la modifier. website.pages.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
page_slug string requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_page_content",
        "arguments": {
            "establishment_id": 1,
            "page_slug": "exemple"
        }
    }
}'

update_section

Met à jour les props d'une section (fusion partielle, ex. {title, text}). Seules les propriétés que ce type de section affiche sont enregistrées ; les autres sont listées dans ignored_props avec leur raison (jamais ignorées en silence). website.pages.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
section_id integer requis
props object requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_section",
        "arguments": {
            "establishment_id": 1,
            "section_id": 1,
            "props": {}
        }
    }
}'

publish_site

Met le site en ligne (exige confirm:true). Sans page_slugs : publie les pages en brouillon SAUF celles remises en brouillon volontairement (toggle_site_page publish:false ou Studio), listées dans kept_draft. Avec page_slugs : publie exactement ces pages-là. website.pages.publish

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
confirm boolean requis
page_slugs array<string> optionnel Pages à publier (facultatif)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "publish_site",
        "arguments": {
            "establishment_id": 1,
            "confirm": true
        }
    }
}'

get_site_status

État du site : pages publiées/brouillon, URL publique, domaine. website.pages.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_site_status",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_domain_status

Statut du domaine personnalisé (DNS/SSL). website.domain.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_domain_status",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

upsert_beverage_item

Ajoute ou met à jour une boisson (les mentions légales sont portées par la page, jamais par la donnée). website.pages.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
beverage_id integer optionnel
category string — blanc | rouge | rose | bulles | biere | soft | cafe | sake requis
name string requis
appellation string optionnel
is_aop_igp boolean optionnel
vintage integer optionnel
glass_price number optionnel
bottle_price number optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "upsert_beverage_item",
        "arguments": {
            "establishment_id": 1,
            "category": "blanc",
            "name": "exemple"
        }
    }
}'

remove_beverage_item

Retire une boisson de la carte. website.pages.edit

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
beverage_id integer requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "remove_beverage_item",
        "arguments": {
            "establishment_id": 1,
            "beverage_id": 1
        }
    }
}'

get_qr_destinations

Toutes les adresses PUBLIQUES du restaurant à mettre sur un visuel ou un support imprimé, avec le lien de l'image de leur QR code : site et pages, carte PDF, commande en ligne, réservation, roues cadeaux, sondages, programme de fidélité, cartes cadeaux, avis Google, menu de chaque table et paiement à table. Chaque ligne dit si elle est active (et sinon pourquoi, ex. « roue désactivée »), le module d'abonnement qu'elle demande, url (domaine du client si actif), url_stable (domaine principal — recommandée pour l'impression : elle survit à un changement de domaine) et qr_image_url (SVG téléchargeable sans connexion). Filtre facultatif par famille. Ne crée rien. website.pages.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
famille string — commander | reserver | jouer | fidelite | avis | infos | payer optionnel
actifs_seulement boolean optionnel Masquer ce qui ne fonctionne pas encore (défaut false)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_qr_destinations",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_qr_code

Génère le QR code d'une destination du restaurant (type + reference_id, voir get_qr_destinations) OU d'une adresse libre qui appartient au restaurant (url : une page de son site, une de ses tables, son domaine, son lien d'avis Google — toute autre adresse est refusée). Rend le SVG (texte, vectoriel, idéal pour l'impression) ou le PNG en base64, et le lien de l'image. Par défaut encode url_stable. website.pages.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
type string — site | page | menu_pdf | commande_en_ligne | table | reservation | roue | sondage | programme_fidelite | carte_cadeau | avis_google | payer_a_table optionnel
reference_id integer optionnel Obligatoire pour page, table, reservation, roue, sondage, payer_a_table
url string optionnel Ou : une adresse du restaurant
format string — svg | png optionnel défaut svg
size integer optionnel Côté en pixels, 128 à 2048 (défaut 512)
encoder string — url_stable | url optionnel Adresse encodée (défaut url_stable)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_qr_code",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

Statistiques 2 outils

get_site_stats

Statistiques e-commerce 30 jours : commandes web, CA, leads, avis, jeux. stats.site.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_site_stats",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_daily_brief

Le point du jour : commandes web et CA, caisse (session, encaissé), réservations, tickets cuisine actifs, avis à modérer, leads, stocks bas. stats.site.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_daily_brief",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

Marketing, avis & recrutement 21 outils

list_reviews

Avis clients (site + Google) filtrables par statut/note. leads.leads.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
status string optionnel
rating integer optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_reviews",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

reply_review

Répond à un avis (la réponse est enregistrée, publication Google manuelle). leads.leads.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
review_id integer requis
body string requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "reply_review",
        "arguments": {
            "establishment_id": 1,
            "review_id": 1,
            "body": "exemple"
        }
    }
}'

moderate_review

Publie ou rejette un avis déposé sur le site. leads.leads.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
review_id integer requis
action string — publish | reject requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "moderate_review",
        "arguments": {
            "establishment_id": 1,
            "review_id": 1,
            "action": "publish"
        }
    }
}'

create_job_offer

Crée une offre d'emploi (salaire affiché recommandé) — en brouillon par défaut. leads.leads.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
title string requis
contract string — CDI | CDD | apprentissage | extra | saisonnier requis
description string requis
salary_min number optionnel
salary_max number optionnel
status string — draft | published optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_job_offer",
        "arguments": {
            "establishment_id": 1,
            "title": "exemple",
            "contract": "CDI",
            "description": "exemple"
        }
    }
}'

update_job_offer

Met à jour ou ferme une offre (status: draft|published|closed). leads.leads.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
offer_id integer requis
title string optionnel
description string optionnel
status string — draft | published | closed optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_job_offer",
        "arguments": {
            "establishment_id": 1,
            "offer_id": 1
        }
    }
}'

list_job_applications

Candidatures reçues (JAMAIS de CV via MCP — coordonnées + statut). leads.leads.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
status string — new | contacted | rejected | hired optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_job_applications",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

update_application_status

Change le statut d'une candidature. leads.leads.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
application_id integer requis
status string — new | contacted | rejected | hired requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_application_status",
        "arguments": {
            "establishment_id": 1,
            "application_id": 1,
            "status": "new"
        }
    }
}'

list_site_leads

Leads capturés par le site (contact, roue, privatisation…). leads.leads.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
source string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_site_leads",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_private_event_requests

Demandes de privatisation/groupes avec statut. leads.leads.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
status string — new | quoted | won | lost optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_private_event_requests",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

update_event_request_status

Avance une demande de privatisation (new|quoted|won|lost). leads.leads.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
request_id integer requis
status string — new | quoted | won | lost requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_event_request_status",
        "arguments": {
            "establishment_id": 1,
            "request_id": 1,
            "status": "new"
        }
    }
}'

list_campaigns

Campagnes marketing (statut, canal, segment, stats d'envoi). leads.leads.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
status string — draft | scheduled | sending | sent | cancelled optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_campaigns",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_rfm_segments

Segments RFM de la base clients (compteurs + pourquoi) — cible des campagnes. leads.leads.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_rfm_segments",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_campaign

Crée une campagne en BROUILLON (email|sms|whatsapp|vocal ; segment RFM ; {prenom} {code} {lien} dans le message). Ne l'envoie PAS : utiliser launch_campaign. leads.leads.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
name string requis
channel string — email | sms | whatsapp | vocal requis
segment string — tous | champions | fideles | prometteurs | a_risque | perdus | nouveaux requis
message_template string requis
offer_label string optionnel
promo_code string optionnel
link_url string optionnel
scheduled_at string optionnel Y-m-d H:i pour planifier (sinon brouillon)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_campaign",
        "arguments": {
            "establishment_id": 1,
            "name": "exemple",
            "channel": "email",
            "segment": "tous",
            "message_template": "exemple"
        }
    }
}'

launch_campaign

Lance une campagne (envoi RÉEL multicanal — exige confirm:true après avoir résumé la cible et le récap conformité au restaurateur). leads.leads.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
campaign_id integer requis
confirm boolean requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "launch_campaign",
        "arguments": {
            "establishment_id": 1,
            "campaign_id": 1,
            "confirm": true
        }
    }
}'

get_campaign_stats

ROI d'une campagne : envoyés, clics, retours en commande, CA attribué 7 j, exclusions de conformité. leads.leads.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
campaign_id integer requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_campaign_stats",
        "arguments": {
            "establishment_id": 1,
            "campaign_id": 1
        }
    }
}'

propose_campaigns

Agent IA marketing : 2-4 propositions de campagnes chiffrées depuis les données réelles (RFM, jours creux, marges, marronniers). leads.leads.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "propose_campaigns",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_whatsapp_templates

Templates WhatsApp (statut Meta : draft/pending/approved/rejected). Un template approuvé est requis pour écrire à un client hors de la fenêtre 24 h. leads.leads.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
status string — draft | pending | approved | rejected optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_whatsapp_templates",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_whatsapp_template

Crée un template WhatsApp (brouillon). Corps avec variables {{1}} {{2}}… numérotées sans trou ; variables = libellés ordonnés (prenom, offre…). Ne le soumet PAS : utiliser submit_whatsapp_template. leads.leads.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
name string requis minuscules + underscores
body string requis
variables array<string> optionnel
category string — MARKETING | UTILITY optionnel
language string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_whatsapp_template",
        "arguments": {
            "establishment_id": 1,
            "name": "exemple",
            "body": "exemple"
        }
    }
}'

submit_whatsapp_template

Soumet un template à l'approbation Meta (24-48 h — exige confirm:true, le template devient non modifiable). leads.leads.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
template_id integer requis
confirm boolean requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "submit_whatsapp_template",
        "arguments": {
            "establishment_id": 1,
            "template_id": 1,
            "confirm": true
        }
    }
}'

get_marketing_calendar

Agenda marketing d'un mois : marronniers, événements locaux saisis, jour creux détecté, campagnes planifiées/envoyées. leads.leads.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
year integer requis
month integer requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_marketing_calendar",
        "arguments": {
            "establishment_id": 1,
            "year": 1,
            "month": 1
        }
    }
}'

add_marketing_event

Ajoute un événement local à l'agenda marketing (match, marché, fête de quartier…) pour préparer une campagne dessus. leads.leads.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
date string requis YYYY-MM-DD
label string requis
brief string optionnel Idée de campagne associée. Optionnel.
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "add_marketing_event",
        "arguments": {
            "establishment_id": 1,
            "date": "exemple",
            "label": "exemple"
        }
    }
}'

Fidélité, jeux & sondages 14 outils

get_loyalty_program

Configuration du programme de fidélité (modes, multiplicateurs, règles). loyalty.program.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_loyalty_program",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

update_loyalty_program

Met à jour le programme (active, earn_mode, earn_rate, validité…). loyalty.program.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
active boolean optionnel
earn_mode string — per_euro | per_visit | hybrid optionnel
earn_rate number optionnel
visit_points integer optionnel
points_validity_months integer optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_loyalty_program",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

list_loyalty_rewards

Catalogue des récompenses échangeables (points, stock). loyalty.program.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_loyalty_rewards",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

upsert_loyalty_reward

Ajoute ou met à jour une récompense (product = plat réel à 0 €). loyalty.program.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
reward_id integer optionnel
kind string — product | amount | perk requis
plat_id integer optionnel
label string requis
points_cost integer requis
amount number optionnel
stock integer optionnel
active boolean optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "upsert_loyalty_reward",
        "arguments": {
            "establishment_id": 1,
            "kind": "product",
            "label": "exemple",
            "points_cost": 1
        }
    }
}'

get_loyalty_account

Compte fidélité d'un client par email (solde, prochaine récompense). loyalty.program.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
email string requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_loyalty_account",
        "arguments": {
            "establishment_id": 1,
            "email": "exemple"
        }
    }
}'

adjust_points

Geste commercial : crédite des points à un client (plafonné ±1000, jamais de solde négatif, motif obligatoire, journalisé). loyalty.program.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
email string requis
points integer requis
motif string requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "adjust_points",
        "arguments": {
            "establishment_id": 1,
            "email": "exemple",
            "points": 1,
            "motif": "exemple"
        }
    }
}'

list_redemptions

Bons fidélité émis (actifs/utilisés/expirés). loyalty.program.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
status string optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_redemptions",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

validate_redemption

Valide un bon fidélité présenté en salle (usage unique). loyalty.program.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
code string requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "validate_redemption",
        "arguments": {
            "establishment_id": 1,
            "code": "exemple"
        }
    }
}'

list_wheel_games

Roues cadeaux (statut, lancers, leads). loyalty.program.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_wheel_games",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_wheel_stats

Statistiques d'une roue (lancers, lots gagnés, leads captés). loyalty.program.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
wheel_id integer requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_wheel_stats",
        "arguments": {
            "establishment_id": 1,
            "wheel_id": 1
        }
    }
}'

list_surveys

Sondages (déclencheur, réponses). loyalty.program.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_surveys",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

create_wheel_game

Crée une roue cadeaux (2 à 12 segments), CRÉÉE INACTIVE par défaut (active:true pour la mettre en jeu tout de suite). Chaque segment : {type: Points | Cadeaux | Perdu, label (nom du lot), probability (en %, la somme doit faire 100), points (si Points), plat_id (Cadeaux = plat offert) OU amount (Cadeaux = bon d'achat en €), stock (facultatif)}. Les segments Points créditent le programme de fidélité du restaurant, qui doit exister et être actif. Renvoie les probabilités réellement appliquées. loyalty.program.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
title string requis
segments array<object> requis
entry_action string — none | review | survey | follow | lead optionnel Action demandée avant de jouer (défaut none)
cooldown_days integer optionnel Jours entre deux parties d'un même joueur (défaut 7)
starts_at string optionnel
ends_at string optionnel
active boolean optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_wheel_game",
        "arguments": {
            "establishment_id": 1,
            "title": "exemple",
            "segments": [
                {}
            ]
        }
    }
}'

create_survey

Crée un sondage, INACTIF par défaut. questions : [{type: rating | choice | multi | text | nps, label, options (pour choice/multi), required}] (1 à 12). trigger : post_order | post_resa | standalone | wheel (défaut standalone). reward_points > 0 exige un programme de fidélité actif. loyalty.program.manage

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
title string requis
questions array<object> requis
trigger string — post_order | post_resa | standalone | wheel optionnel
reward_points integer optionnel
active boolean optionnel
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_survey",
        "arguments": {
            "establishment_id": 1,
            "title": "exemple",
            "questions": [
                {}
            ]
        }
    }
}'

get_survey_results

Résultats agrégés d'un sondage (moyennes, NPS, répartitions). loyalty.program.view

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
survey_id integer requis
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_survey_results",
        "arguments": {
            "establishment_id": 1,
            "survey_id": 1
        }
    }
}'

Outils transverses 1 outil

search_entities

Résout un nom parlé/écrit vers un ID (produits, ingrédients, plats, équipements « frigo 3 », tables, recettes). Fuzzy FR (accents, pluriels). Si ambiguous=true, DEMANDER confirmation à l'utilisateur avant d'agir. jarvis.voice.use

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
query string requis Nom entendu, ex. « tomates » ou « frigo 3 »
types array<string> optionnel Types à chercher (défaut : tous)
limit integer optionnel Max de résultats (défaut 6)
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "search_entities",
        "arguments": {
            "establishment_id": 1,
            "query": "exemple"
        }
    }
}'

Compte & abonnement 2 outils

get_subscription_overview

Abonnement de l'établissement : plan principal, add-ons actifs, statut (essai/année offerte/grâce), échéances. Lecture seule. propriétaire

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_subscription_overview",
        "arguments": {
            "establishment_id": 1
        }
    }
}'

get_credit_balance

Crédits de communication (SMS/WhatsApp/vocal) : solde du cycle, packs achetés restants, période. propriétaire

ParamètreTypeDescription
establishment_id integer requis ID de l'établissement
Exemple cURL
curl -X POST https://foodeatup.com/api/mcp \
  -H "Authorization: Bearer VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_credit_balance",
        "arguments": {
            "establishment_id": 1
        }
    }
}'