Skip to main content
Glama
bengaly

MCP Enterprise Demo - Gestion Commerciale

by bengaly
README.md
# MCP Enterprise Demo - Gestion Commerciale avec IA

## ๐ŸŽฏ Prรฉsentation

Ce projet dรฉmontre l'intรฉgration de **MCP (Model Context Protocol)** dans un Systรจme d'Information d'entreprise pour la gestion commerciale (Commandes, Factures, Clients).

**Objectif** : Crรฉer un assistant IA interne capable de :
- Rรฉpondre ร  des questions mรฉtier en langage naturel
- Analyser commandes et factures
- Rรฉsumer l'activitรฉ d'un client
- Dรฉclencher des actions contrรดlรฉes

## ๐Ÿ—๏ธ Architecture

```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        UTILISATEUR                               โ”‚
โ”‚                    (Support / Manager / Admin)                   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      ASSISTANT IA (LLM)                          โ”‚
โ”‚                   (Spring AI + OpenAI/Claude)                    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      MCP SERVER                                  โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”‚
โ”‚  โ”‚              CAPACITร‰S MCP (Tools)                       โ”‚    โ”‚
โ”‚  โ”‚  โ€ข findOrder          โ€ข analyzeInvoice                   โ”‚    โ”‚
โ”‚  โ”‚  โ€ข summarizeCustomer  โ€ข createOrder                      โ”‚    โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”‚
โ”‚  โ”‚              Sร‰CURITร‰ & GOUVERNANCE                      โ”‚    โ”‚
โ”‚  โ”‚  โ€ข Contrรดle d'accรจs (RBAC)  โ€ข Audit des appels          โ”‚    โ”‚
โ”‚  โ”‚  โ€ข Validation mรฉtier        โ€ข Traรงabilitรฉ               โ”‚    โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                   SERVICES Mร‰TIERS                               โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”         โ”‚
โ”‚  โ”‚ OrderService  โ”‚ โ”‚InvoiceService โ”‚ โ”‚CustomerServiceโ”‚         โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      BASE DE DONNร‰ES                             โ”‚
โ”‚                    (H2 en mรฉmoire pour la dรฉmo)                  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```

## ๐Ÿ” Rรดles et Capacitรฉs

| Rรดle | findOrder | analyzeInvoice | summarizeCustomer | createOrder | validateOrder |
|------|-----------|----------------|-------------------|-------------|---------------|
| SUPPORT | โœ… | โœ… | โœ… | โŒ | โŒ |
| MANAGER | โœ… | โœ… | โœ… | โœ… | โœ… |
| ADMIN | โœ… | โœ… | โœ… | โœ… | โœ… |

## ๐Ÿš€ Dรฉmarrage rapide

### Prรฉrequis

- Java 17+
- Maven 3.8+
- (Optionnel) Clรฉ API OpenAI pour le LLM

### Installation

```bash
# Cloner le projet
cd mcp-enterprise-demo

# Compiler
mvn clean install

# Lancer l'application
mvn spring-boot:run
```

### Configuration OpenAI (optionnel)

```bash
export OPENAI_API_KEY=votre-clรฉ-api
```

## ๐Ÿ“ก Endpoints de test

### Authentification

Utilisateurs de dรฉmonstration :
- `support` / `support123` (rรดle SUPPORT)
- `manager` / `manager123` (rรดle MANAGER)
- `admin` / `admin123` (rรดle ADMIN)

### Tester les capacitรฉs MCP

```bash
# Rechercher une commande
curl -u manager:manager123 http://localhost:8080/api/chat/test/find-order/CMD-20240115-TC001

# Analyser une facture
curl -u support:support123 http://localhost:8080/api/chat/test/analyze-invoice/FAC-2024-000123

# Rรฉsumรฉ client
curl -u support:support123 http://localhost:8080/api/chat/test/customer-summary/CLI-001

# Voir les capacitรฉs disponibles
curl -u manager:manager123 http://localhost:8080/api/chat/capabilities
```

### Tester via l'interface web (IHM)

Une application Angular est disponible pour tester les capacitรฉs MCP via une interface utilisateur moderne.

```bash
cd mcp-frontend
npm install
npm start
```

L'application sera accessible sur `http://localhost:4200/`.

**Fonctionnalitรฉs disponibles :**
- **Dashboard** - Vue d'ensemble avec capacitรฉs MCP disponibles selon le rรดle
- **Commandes** - Recherche de commandes via MCP
- **Factures** - Analyse de factures via MCP
- **Clients** - Rรฉsumรฉ d'activitรฉ client via MCP
- **Produits** - Gestion du catalogue produits
- **Assistant IA** - Chat avec l'IA pour interagir en langage naturel

๐Ÿ‘‰ **[Documentation complรจte du frontend](mcp-frontend/README.md)**

### Tester via LLM (OpenAI / Spring AI)

L'endpoint `POST /api/chat/llm/message` envoie le message au LLM (via Spring AI) et autorise l'appel des tools MCP selon le rรดle courant.

Important : pour conserver le contexte (ex: workflow de confirmation), utilisez un `conversationId` et rรฉutilisez-le ร  chaque tour.

Sous PowerShell, utilisez `curl.exe` (car `curl` est un alias de `Invoke-WebRequest`).

```bash
# 1) Premier message (le serveur renvoie un conversationId)
curl.exe -u manager:manager123 -H "Content-Type: application/json" -d "{\"message\":\"Crรฉe une commande pour CLI-001 avec 2 PROD-001\"}" http://localhost:8080/api/chat/llm/message

# 2) Confirmer (rรฉutiliser le conversationId reรงu ร  l'รฉtape 1)
curl.exe -u manager:manager123 -H "Content-Type: application/json" -d "{\"message\":\"Oui je confirme\",\"conversationId\":\"<COLLER_ICI>\"}" http://localhost:8080/api/chat/llm/message
```

Si l'utilisateur n'a pas les droits (ex: rรดle SUPPORT), le LLM est informรฉ des capacitรฉs autorisรฉes et doit refuser l'action au lieu d'appeler un tool non autorisรฉ.

### Console H2

Accรฉdez ร  `http://localhost:8080/h2-console` pour explorer la base de donnรฉes.
- JDBC URL: `jdbc:h2:mem:enterprisedb`
- User: `sa`
- Password: (vide)

## ๐Ÿ“ Structure du projet

```
src/main/java/com/enterprise/mcp/
โ”œโ”€โ”€ McpEnterpriseApplication.java    # Point d'entrรฉe
โ”œโ”€โ”€ domain/
โ”‚   โ”œโ”€โ”€ entity/                       # Entitรฉs JPA
โ”‚   โ”‚   โ”œโ”€โ”€ Customer.java
โ”‚   โ”‚   โ”œโ”€โ”€ Order.java
โ”‚   โ”‚   โ”œโ”€โ”€ OrderLine.java
โ”‚   โ”‚   โ”œโ”€โ”€ Invoice.java
โ”‚   โ”‚   โ””โ”€โ”€ InvoiceLine.java
โ”‚   โ””โ”€โ”€ repository/                   # Repositories Spring Data
โ”œโ”€โ”€ service/
โ”‚   โ”œโ”€โ”€ CustomerService.java          # Service mรฉtier clients
โ”‚   โ”œโ”€โ”€ OrderService.java             # Service mรฉtier commandes
โ”‚   โ”œโ”€โ”€ InvoiceService.java           # Service mรฉtier factures
โ”‚   โ””โ”€โ”€ dto/                          # Objets de transfert
โ”œโ”€โ”€ mcp/
โ”‚   โ”œโ”€โ”€ McpCapabilityHandler.java     # Gestionnaire des capacitรฉs
โ”‚   โ”œโ”€โ”€ McpResponse.java              # Rรฉponse standardisรฉe
โ”‚   โ””โ”€โ”€ McpToolsConfiguration.java    # Configuration Spring AI
โ”œโ”€โ”€ security/
โ”‚   โ”œโ”€โ”€ McpRole.java                  # Dรฉfinition des rรดles
โ”‚   โ”œโ”€โ”€ McpCapability.java            # Enum des capacitรฉs
โ”‚   โ”œโ”€โ”€ McpSecurityContext.java       # Contexte de sรฉcuritรฉ
โ”‚   โ””โ”€โ”€ McpAccessDeniedException.java # Exception accรจs refusรฉ
โ”œโ”€โ”€ audit/
โ”‚   โ””โ”€โ”€ McpAuditService.java          # Service d'audit
โ”œโ”€โ”€ config/
โ”‚   โ”œโ”€โ”€ SecurityConfig.java           # Configuration Spring Security
โ”‚   โ””โ”€โ”€ DataInitializer.java          # Donnรฉes de dรฉmonstration
โ””โ”€โ”€ controller/
    โ””โ”€โ”€ ChatController.java           # API REST
```

## ๐ŸŽ“ Formation associรฉe

Ce projet est accompagnรฉ d'une formation complรจte en Markdown :
โ†’ Voir le dossier `docs/formation/`

## โš ๏ธ Points clรฉs MCP

### Ce que MCP fait

- โœ… Expose des **capacitรฉs mรฉtier contrรดlรฉes** ร  l'IA
- โœ… Applique la **sรฉcuritรฉ par rรดle** (RBAC)
- โœ… **Audite** toutes les interactions IA
- โœ… **Valide** les donnรฉes cรดtรฉ serveur
- โœ… Demande **confirmation** pour les actions sensibles

### Ce que MCP ne fait pas

- โŒ L'IA n'accรจde **jamais directement** ร  la base de donnรฉes
- โŒ Pas d'exรฉcution de code arbitraire
- โŒ Pas de contournement des rรจgles mรฉtier

## ๐Ÿ“œ Licence

Projet de dรฉmonstration ร  usage pรฉdagogique.

## ๐Ÿ‘ค Auteur

Projet crรฉรฉ pour la formation "MCP pour ingรฉnieurs Java".