Skip to main content
Glama
cosmo-mcp

cosmo-mcp

cosmo-mcp

MCP Server Node.js 20 + TypeScript exposant ERPNext (cosmo_erp) à Hermes Agent.

Architecture

Telegram
   |
   v
Hermes Agent (NousResearch)
   |  MCP Protocol (stdio)
   v
cosmo-mcp  <-- ce serveur
   |  POST /api/method/cosmo_erp.cosmo_erp.api.main.<function>
   v
ERPNext (cosmo_erp)

Related MCP server: ERPNext MCP Server

Prérequis

  • Node.js >= 20.0.0

  • Clés API ERPNext (API Key + API Secret)

  • ERPNext avec l'app cosmo_erp installée

Installation

cd cosmo-mcp
npm install
npm run build

Configuration

cp .env.example .env
# Editer .env avec vos valeurs

Variables requises :

Variable

Description

ERPNEXT_URL

URL de votre instance ERPNext (ex: https://erp.ma-boutique.com)

ERPNEXT_API_KEY

API Key du compte ERPNext

ERPNEXT_API_SECRET

API Secret du compte ERPNext

Démarrage

# Production
npm run build && npm start

# Développement
npm run dev

Intégration Hermes (config.yaml)

mcp_servers:
  - name: cosmo-erp
    command: node
    args:
      - /chemin/vers/cosmo-mcp/dist/index.js
    env:
      ERPNEXT_URL: "https://erp.ma-boutique.com"
      ERPNEXT_API_KEY: "your_api_key"
      ERPNEXT_API_SECRET: "your_api_secret"

Docker

docker build -t cosmo-mcp .
docker run --env-file .env cosmo-mcp

Tools disponibles (25)

Stock (8)

Tool

Description

get_item_stock

Stock actuel d'un produit spécifique

get_low_stock_items

Produits sous le seuil de réapprovisionnement

get_expiring_items

Produits expirant dans les N prochains jours

search_items

Recherche dans le catalogue par nom/marque/code

receive_stock

Enregistrer une réception fournisseur

adjust_stock

Correction d'inventaire (casse, vol)

create_item

Créer un nouveau produit dans le catalogue

update_item_price

Mettre à jour le prix de vente

Ventes (5)

Tool

Description

create_sale

Créer une vente / facture client

get_daily_sales

Résumé des ventes du jour

get_sales_period

Analyse sur une période personnalisée

get_invoice

Détail d'une facture par numéro

cancel_invoice

Annuler une facture (action irréversible)

CRM / Clients (4)

Tool

Description

find_or_create_customer

Trouver ou créer un client

get_customer_profile

Profil complet avec historique achats

get_inactive_customers

Clients sans achat depuis X jours

get_top_customers

Meilleures clientes par CA

Fournisseurs (3)

Tool

Description

create_supplier_order

Créer une commande fournisseur

get_pending_orders

Commandes en attente de livraison

get_suppliers

Liste des fournisseurs actifs

Vision / OCR (3)

Tool

Description

identify_product_from_image

Identifier un produit depuis données image extraites par Hermes

process_supplier_invoice_image

Traiter une facture fournisseur depuis données OCR

create_item_from_image

Créer une fiche produit depuis données image

Rapports / Dashboard (3)

Tool

Description

get_dashboard

Résumé complet de la boutique (briefing matinal)

get_revenue_trend

Evolution du CA sur N jours

get_category_performance

Performances par catégorie cosmétique

Test rapide

# Vérifier que le serveur démarre
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | \
  ERPNEXT_URL=https://test.example.com \
  ERPNEXT_API_KEY=test \
  ERPNEXT_API_SECRET=test \
  node dist/index.js

Le serveur doit répondre avec la liste des 25 tools.

Available Tools

26 tools
adjust_stockA

Corriger le niveau de stock après un inventaire ou une perte (casse, vol). Utiliser UNIQUEMENT pour des corrections (inventaire physique, casse, vol), PAS pour des réceptions fournisseur (utiliser receive_stock pour ça). Demander confirmation à l'utilisateur avant d'exécuter car action irréversible.

Inputs: reason (required), new_qty (required), item_code (required).

cancel_invoiceA

Annuler une facture existante. Action IRREVERSIBLE. Toujours demander confirmation avec le numéro de facture et le motif. Ne jamais annuler sans confirmation explicite de l'utilisateur. Utiliser uniquement en cas d'erreur avérée.

Inputs: reason (required), invoice_name (required).

create_itemA

Créer un nouveau produit dans le catalogue ERPNext. Utiliser quand un nouveau produit est référencé pour la première fois, quand l'utilisateur dit 'ajoute ce produit', 'nouveau produit à créer'. Toujours demander confirmation des informations avant de créer.

Inputs: item_name (required), standard_rate (required), cosmo_category (required), cosmo_brand, +2 more.

create_item_from_imageA

Créer une fiche produit à partir des données extraites d'une photo de produit non référencé. Utiliser après identify_product_from_image quand le produit n'est pas trouvé dans ERPNext et que l'utilisateur confirme vouloir l'ajouter au catalogue.

Inputs: item_name (required), standard_rate (required), cosmo_category (required), cosmo_brand, +1 more.

create_saleA

Créer une vente / facture client dans ERPNext. Utiliser quand l'utilisateur dit 'vendre X à Y', 'créer une facture pour', 'encaisser', 'vends [produit] à [client]', 'facture : [liste produits]'. IMPORTANT : toujours présenter un récapitulatif clair et demander confirmation AVANT de créer. Format de confirmation : 'Je vais créer cette vente : [détail]. Total : [montant]. Confirmer ?'

Inputs: items (required), customer, discount, payment_mode.

create_supplier_orderA

Créer une commande fournisseur dans ERPNext. Utiliser quand l'utilisateur veut commander des produits auprès d'un fournisseur. Toujours vérifier le stock actuel des produits concernés avant de créer la commande. Présenter un récapitulatif complet et demander confirmation avant de créer.

Inputs: items (required), supplier_name (required), notes.

find_or_create_customerA

Trouver un client existant ou en créer un nouveau. Utiliser avant create_sale si l'utilisateur mentionne un nom de client. Chercher d'abord par nom, puis par téléphone avant de proposer la création. Exemple : 'Mme Rakoto', 'cliente avec le numéro 034...', 'nouvelle cliente'.

Inputs: name (required), email_id, mobile_no, create_if_not_found.

get_category_performanceA

Analyser les ventes et performances par catégorie de produits cosmétiques. Utiliser pour savoir quelle catégorie se vend le mieux, ajuster les commandes fournisseurs selon les tendances, ou optimiser l'espace en rayon.

Inputs: period.

get_customer_profileA

Voir le profil complet d'une cliente : historique achats, produits favoris, dernière visite, montant total dépensé. Utiliser pour personnaliser le service ou préparer une relance.

Inputs: customer_name (required).

get_daily_salesB

Obtenir le résumé des ventes du jour ou d'une date spécifique. Utiliser pour 'combien on a fait aujourd'hui', 'chiffre du jour', 'résumé des ventes', 'bilan journalier', 'CA du jour'.

Inputs: date.

get_dashboardA

Obtenir le résumé complet de la boutique : ventes du jour, stock critique, produits expirant bientôt, top produit du jour. Utiliser pour le briefing matinal, les questions générales sur l'état de la boutique, 'comment ça se passe aujourd'hui ?', 'point boutique', 'résumé du jour'.

Inputs: include_alerts.

get_expiring_itemsA

Lister les produits dont la date d'expiration approche dans les prochains N jours. Utiliser quand l'utilisateur demande les produits qui vont expirer, pour planifier des promos de déstockage, ou pour faire le point avant une commande. Par défaut vérifie les 30 prochains jours.

Inputs: days.

get_inactive_customersA

Lister les clients qui n'ont pas acheté depuis X jours. Utiliser pour planifier des relances, des campagnes de fidélisation, ou quand l'utilisateur demande 'qui n'est pas venue depuis longtemps'.

Inputs: days.

get_invoiceA

Récupérer le détail complet d'une facture par son numéro. Utiliser quand l'utilisateur mentionne un numéro de facture spécifique ou veut vérifier une vente passée.

Inputs: invoice_name (required).

get_item_stockA

Obtenir le niveau de stock actuel d'un produit spécifique. Utiliser quand l'utilisateur demande 'combien il reste de X', 'quel est le stock de Y', 'est-ce qu'on a encore du Z', 'il reste combien de [produit]'. Préférer ce tool à get_all_stock quand le produit est identifié.

Inputs: item_code, item_name.

get_low_stock_itemsA

Lister tous les produits dont le stock est sous le seuil minimum de réapprovisionnement. Utiliser pour les alertes de réapprovisionnement, les rapports du matin, ou quand l'utilisateur demande 'qu'est-ce qu'on doit commander', 'quels produits manquent', 'qu'est-ce qui est en rupture', 'liste des produits critiques'.

Inputs: no named parameters.

get_pending_ordersA

Voir les commandes fournisseurs en cours (envoyées mais pas encore reçues). Utiliser pour le suivi des livraisons, ou quand l'utilisateur demande 'les commandes en attente', 'qu'est-ce qu'on attend comme livraison'.

Inputs: no named parameters.

get_revenue_trendA

Voir l'évolution du chiffre d'affaires sur les derniers N jours. Utiliser pour analyser les tendances, identifier les bons/mauvais jours, comparer les semaines, ou quand l'utilisateur demande 'comment ça évolue'.

Inputs: days.

get_sales_periodA

Analyser les ventes sur une période personnalisée. Utiliser pour les bilans semaine/mois, comparaisons de périodes, analyses de tendances. Retourne CA total, top produits et répartition par catégorie.

Inputs: date_to (required), date_from (required).

get_suppliersA

Lister les fournisseurs actifs avec leurs produits habituels. Utiliser pour savoir auprès de qui commander un produit, ou avant de créer une commande fournisseur.

Inputs: no named parameters.

get_top_customersA

Lister les meilleures clientes par chiffre d'affaires sur une période. Utiliser pour identifier les VIP, les fidéliser, ou faire des offres exclusives. Exemple : 'qui sont nos meilleures clientes ce mois', 'top 10 clientes'.

Inputs: limit, period.

identify_product_from_imageA

Identifier un produit cosmétique dans ERPNext à partir des données extraites d'une image. WORKFLOW : 1) Hermes analyse d'abord l'image avec vision_analyze pour extraire marque/nom/type, 2) Hermes appelle CE tool avec les données extraites, 3) Ce tool cherche dans ERPNext et retourne le résultat. Utiliser quand l'utilisateur envoie une photo de produit et demande 'c'est quoi ce produit', 'combien coûte ça', 'on l'a en stock ?'.

Inputs: image_description (required), brand, barcode, product_name.

process_supplier_invoice_imageA

Enregistrer une facture fournisseur dont les données ont été extraites d'une image par Hermes. WORKFLOW : 1) Hermes analyse la photo avec vision_analyze, 2) Hermes appelle CE tool avec les données structurées extraites, 3) Ce tool crée un Cosmo OCR Invoice dans ERPNext et propose une Purchase Invoice. Utiliser quand l'utilisateur envoie une photo de facture fournisseur.

Inputs: items (required), total_amount (required), supplier_name (required), raw_text, +2 more.

receive_stockA

Enregistrer une réception de marchandise fournisseur dans le stock. Utiliser quand l'utilisateur dit 'on vient de recevoir X unités de Y', 'livraison reçue de [fournisseur]', 'entrée stock', 'on a reçu la commande'. Crée une Stock Entry de type Material Receipt dans ERPNext. IMPORTANT : ne pas utiliser pour des corrections d'inventaire, utiliser adjust_stock.

Inputs: qty (required), rate (required), item_code (required), supplier, +1 more.

search_itemsA

Rechercher des produits dans le catalogue par nom, code ou marque. Utiliser pour trouver un produit avant une vente, avant une commande fournisseur, ou pour vérifier si un produit existe dans le système. Retourne le prix et le stock de chaque résultat.

Inputs: query (required), category.

update_item_priceA

Mettre à jour le prix de vente d'un produit. Utiliser quand l'utilisateur dit 'change le prix de X à Y', 'nouveau prix pour Z'. Demander confirmation avant d'appliquer le changement.

Inputs: item_code (required), new_price (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 26 tools

    Disambiguation4/5

    Most tools have clearly distinct purposes. Minor overlap exists between get_sales_period and get_revenue_trend, but descriptions specify different analytical outputs. Similarly, search_items and get_item_stock are differentiated by whether a product is already identified.

    Naming Consistency5/5

    All tools follow a consistent verb_noun snake_case pattern with intuitive verbs (get, create, update, cancel, receive, adjust, search). No mixed conventions or vague names are present.

    Tool Count2/5

    With 26 tools, the server exceeds the recommended maximum of 25, making it feel heavy. Many analytics tools (get_daily_sales, get_sales_period, get_revenue_trend, get_category_performance, get_dashboard) overlap in purpose and could potentially be consolidated.

    Completeness3/5

    The tool set covers core inventory, sales, and supplier workflows, including image-based recognition. However, notable gaps exist: no update or delete for items (only price update), no update/delete for customers, and no cancel/update for supplier orders. Agents may face dead ends in these areas.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      Not graded
      maintenance
      An MCP server that enables LLM agents to interact with PyerP ERP systems via a REST API. It allows users to search, read, create, and update ERP records such as inventory, clients, and users using natural language.
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables ERPNext management, file operations, read-only database access, and ERPNext API integration through a standardized MCP server.
      4
      MIT