cosmo-mcp
Provides tools for managing stock (inventory, orders, pricing), sales (invoices, cancellations, reporting), CRM (customers, profiles, top customers), suppliers (orders, pending orders), OCR-based processing (product identification from images, supplier invoice processing), and dashboard/reporting (revenue trends, category performance).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cosmo-mcp what are my low stock items?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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_erpinstallée
Installation
cd cosmo-mcp
npm install
npm run buildConfiguration
cp .env.example .env
# Editer .env avec vos valeursVariables requises :
Variable | Description |
| URL de votre instance ERPNext (ex: |
| API Key du compte ERPNext |
| API Secret du compte ERPNext |
Démarrage
# Production
npm run build && npm start
# Développement
npm run devInté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-mcpTools disponibles (25)
Stock (8)
Tool | Description |
| Stock actuel d'un produit spécifique |
| Produits sous le seuil de réapprovisionnement |
| Produits expirant dans les N prochains jours |
| Recherche dans le catalogue par nom/marque/code |
| Enregistrer une réception fournisseur |
| Correction d'inventaire (casse, vol) |
| Créer un nouveau produit dans le catalogue |
| Mettre à jour le prix de vente |
Ventes (5)
Tool | Description |
| Créer une vente / facture client |
| Résumé des ventes du jour |
| Analyse sur une période personnalisée |
| Détail d'une facture par numéro |
| Annuler une facture (action irréversible) |
CRM / Clients (4)
Tool | Description |
| Trouver ou créer un client |
| Profil complet avec historique achats |
| Clients sans achat depuis X jours |
| Meilleures clientes par CA |
Fournisseurs (3)
Tool | Description |
| Créer une commande fournisseur |
| Commandes en attente de livraison |
| Liste des fournisseurs actifs |
Vision / OCR (3)
Tool | Description |
| Identifier un produit depuis données image extraites par Hermes |
| Traiter une facture fournisseur depuis données OCR |
| Créer une fiche produit depuis données image |
Rapports / Dashboard (3)
Tool | Description |
| Résumé complet de la boutique (briefing matinal) |
| Evolution du CA sur N jours |
| 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.jsLe serveur doit répondre avec la liste des 25 tools.
Available Tools
26 toolsadjust_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
Scored across 26 tools
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.
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.
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.
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
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
MCP server for Flex on the Job: inventory, jobs, customers, invoices, purchasing, sales orders.
Unified MCP server for 70+ eCommerce platforms: products, orders, customers, and more.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceAn 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.-
- AlicenseNot gradedqualityDmaintenanceThis MCP server connects ChatGPT to ERPNext, enabling AI-powered business analytics, report generation, and document management.MIT
- AlicenseNot gradedqualityDmaintenanceEnables ERPNext management, file operations, read-only database access, and ERPNext API integration through a standardized MCP server.4MIT
- AlicenseBqualityDmaintenanceMCP server for ERPNext that provides full CRUD operations, workflow management, custom fields, and DocType management.191MIT