MELODI MCP Server
OfficialClick 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., "@MELODI MCP Servershow me the available MELODI ERP tools"
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.
MELODI MCP Server (melodi_mcp_server)
Serveur indépendant implémentant le protocole standardisé Model Context Protocol (MCP) pour MELODI ERP.
Cette application agit comme une passerelle d'adaptation sécurisée et dynamique entre les clients MCP (assistants IA, Claude Desktop, Cursor, agents autonomes) et l'API interne du module melodi_mcp de l'ERP.
📑 Sommaire
Related MCP server: contextboundary-gw
1. Architecture & Principes d'Isolation
melodi_mcp_server est entièrement découplé du code applicatif interne de MELODI :
Aucun import des modules métier de MELODI ERP.
Aucun accès direct à la base de données ERP.
Rôle d'adaptateur pur : découverte de catalogue, conversion de schémas vers le format MCP, validation locale et dispatch des requêtes sécurisées avec injection d'identifiant de corrélation (
X-Correlation-ID).
┌───────────────────────────────────────┐
│ Client MCP (Claude, Agent IA) │
└───────────────────┬───────────────────┘
│ STDIO ou HTTP/SSE (JSON-RPC)
┌───────────────────▼───────────────────┐
│ melodi_mcp_server │
│ - mcp_server.py (SDK MCP 2.x) │
│ - tool_registry.py (Catalogue dyn.) │
│ - tool_dispatcher.py (Validation) │
│ - admin/ (Console Web autonome) │
└───────────────────┬───────────────────┘
│ HTTP/REST sécurisé (Bearer / Correlation ID)
┌───────────────────▼───────────────────┐
│ MELODI ERP (melodi_mcp) │
│ - /api/melodi_mcp/internal/health │
│ - /api/melodi_mcp/internal/manifest │
│ - /api/melodi_mcp/internal/tools │
│ - /api/melodi_mcp/internal/tools/... │
└───────────────────────────────────────┘2. Spécification du Contrat Interne MELODI (v1)
Le serveur communique avec l'instance MELODI ERP via une API REST sécurisée. Le préfixe d'accès (MELODI_API_PREFIX) est configurable (par défaut /api/melodi_mcp/internal, mais peut être configuré par exemple sur /internal/mcp ou /api/v1/mcp).
En-têtes obligatoires & contextuels
Authorization: Bearer <MELODI_API_KEY>(ouX-Melodi-Service-Token: <TOKEN>)X-Correlation-ID: <UUID>: Identifiant de traçabilité unique généré par appel.X-Melodi-User-ID: <USER_ID>(facultatif) : Identité de l'utilisateur délégué si authentifié.
Routes requises côté MELODI
Méthode | Route dynamique | Rôle |
|
| État de santé du module ERP et connectivité BD |
|
| Manifeste du module (version, révision, capacités) |
|
| Catalogue complet des outils autorisés avec schémas JSON Schema |
|
| Exécution synchrone d'un outil métier |
3. Prérequis & Installation
Prérequis
Python 3.10 ou supérieur (testé et validé sous Python 3.12).
pipou un gestionnaire d'environnement virtuel standard.
Installation
# 1. Naviguer dans le dossier du projet
cd melodi_mcp_server
# 2. Créer l'environnement virtuel
python3 -m venv venv
source venv/bin/activate
# 3. Installer le paquet en mode éditable avec ses dépendances
pip install --upgrade pip
pip install -e ".[dev]"4. Configuration
Copiez le fichier .env.example vers .env et adaptez les variables :
cp .env.example .envVariable | Défaut | Description |
|
| URL de base de votre instance MELODI ERP |
|
| Préfixe configurable des routes de l'API MCP MELODI |
| (vide) | Clé secrète de service pour s'authentifier auprès de l'ERP |
|
| Timeout des requêtes HTTP vers MELODI (en secondes) |
|
| Vérification TLS des certificats HTTPS |
|
| Mode de transport : |
|
| Adresse d'écoute en mode HTTP |
|
| Port d'écoute en mode HTTP |
| (vide) | Clé secrète de cryptage/signature JWT (HS256) partagée avec MELODI ERP pour valider l'en-tête |
| (vide) | Clé d'infrastructure optionnelle vérifiée à l'intérieur du claim |
|
| Activer la console d'administration web |
|
| Préfixe d'accès à la console d'administration |
|
| Clé d'API d'authentification pour la console d'administration |
|
| Fréquence de resynchronisation automatique du catalogue |
|
| Plafond de taille des arguments reçus |
|
| Plafond de taille des réponses acceptées |
|
| Niveau de journalisation ( |
5. Démarrage & Transports (STDIO & HTTP)
Mode 1 : STDIO (Usage local avec Claude Desktop / CLI)
En mode stdio, le flux JSON-RPC transite exclusivement sur l'entrée/sortie standard (stdin/stdout). Tous les logs de diagnostic sont strictement redirigés vers stderr pour ne jamais corrompre le protocole.
# Démarrage direct via la commande de script
melodi-mcp-server --transport stdio
# Ou via le binaire Python :
./venv/bin/python -m melodi_mcp_server.main --transport stdioMode 2 : HTTP / SSE & Console d'Administration
Idéal pour les déploiements locaux ou sur serveur dédié.
melodi-mcp-server --transport http --host 0.0.0.0 --port 8765Endpoints exposés en mode HTTP :
/sseou/mcp: Endpoint de streaming MCP pour les clients distants./health: Bilan de santé opérationnel (JSON)./admin: Console d'administration web responsive.
Mode 3 : Déploiement Conteneurisé avec Docker & Docker Compose
Un Dockerfile multi-stage (léger, sécurisé avec utilisateur non-root appuser et healthcheck intégré) ainsi qu'un fichier docker-compose.yml sont fournis pour un déploiement instantané.
1. Lancement avec Docker Compose :
# Démarrer le serveur en tâche de fond (port 8765)
docker compose up -d
# Consulter les journaux en direct
docker compose logs -f melodi-mcp-server
# Vérifier l'état de santé du conteneur
docker compose ps
# Arrêter les services
docker compose downDansdocker-compose.yml, la variable MELODI_BASE_URL pointe par défaut sur http://host.docker.internal:8000 via l'instruction extra_hosts pour joindre automatiquement une instance MELODI ERP s'exécutant sur votre machine hôte. Vous pouvez surcharger cette valeur dans votre fichier .env.
2. Utilisation de l'Agent interactif avec Docker :
Pour lancer l'agent CLI interactif directement au sein d'un conteneur relié au serveur :
docker compose run --rm agent3. Construction et exécution manuelle avec Docker :
# Construire l'image
docker build -t melodi-mcp-server .
# Lancer le conteneur
docker run -d \
--name melodi-mcp-server \
-p 8765:8765 \
-e MELODI_BASE_URL="http://host.docker.internal:8000" \
-e MELODI_API_KEY="votre_cle_secrete_melodi" \
melodi-mcp-server6. Console d'Administration Web (/admin)
La console d'administration web intégrée est 100% autonome (HTML, CSS et JS embarqués sans aucune dépendance externe CDN, opérationnelle en réseau isolé ou air-gapped).
Accessible par défaut sur : http://localhost:8765/admin
Fonctionnalités disponibles
Statut & Métriques temps réel : Uptime, état de liaison avec MELODI ERP, latence mesurée en millisecondes, total des requêtes, taux de succès.
Explorateur d'Outils dynamique : Tableau interactif avec recherche temps réel, distinction lecture/écriture, timeout et inspecteur de schéma JSON Schema.
Synchronisation à chaud (Force Sync) : Bouton d'action pour rafraîchir immédiatement le catalogue depuis MELODI sans redémarrage.
Historique des appels récents : Journal d'activité avec durée d'exécution, statut et identifiants de corrélation (avec masquage des secrets).
Protection optionnelle : Verrouillage possible par clé d'API via
ADMIN_API_KEY.
7. Cycle de Vie & Synchronisation Dynamique
Démarrage tolérant aux pannes : Si MELODI ERP est temporairement indisponible au boot, le serveur démarre en état
DEGRADEDet tente une reconnexion périodique sans planter.Suivi des révisions (
catalog_revision) : Le serveur compare la révision renvoyée par MELODI pour éviter tout parsing superflu si les définitions n'ont pas changé.Remplacement atomique : Lors d'une mise à jour de catalogue, le registre en mémoire est remplacé atomiquement sous verrou asynchrone (
asyncio.Lock), garantissant qu'aucun client ne voie un catalogue partiel.Fermeture propre (Graceful Shutdown) : Libération immédiate des tâches de fond et fermeture du pool de connexions HTTP (
MelodiAsyncClient.aclose()).
8. Sécurité & Confidentialité
Authentification unifiée par jeton JWT (
Authorization) : Grâce au middlewareMcpAuthMiddleware, la connexion des clients MCP distant s'effectue via un unique en-têteAuthorization: Bearer <jwt>. Le jeton JWT est signé en HS256 avec la clé secrètejwt_secret(configurable dans le dashboard ou viaMCP_JWT_SECRET) et contient à la fois la clé MCP infrastructure (mcp_api_key) et l'identifiant personnel utilisateur de l'ERP (user_id).Sanitisation des logs : Un filtre de journalisation (
SecretMaskingFormatter) expurge automatiquement tout jeton Bearer, mot de passe ou clé d'API des journaux.Validation stricte des schémas : Les arguments envoyés par les clients sont validés localement via
jsonschema.Draft7Validatoravant toute transmission à l'ERP.Garde-fous sur les outils sensibles : Les outils marqués
requires_confirmation: trueexigent explicitement l'argument_confirmed: truepour s'exécuter.Aucune exécution de code arbitraire : Seuls les outils déclarés et autorisés par MELODI sont acceptés. L'ERP conserve l'autorité absolue sur les permissions finales.
9. Connexion avec un Client MCP (VS Code, Copilot, Claude Desktop, Cursor)
Option A : Connexion HTTP (VS Code / Copilot Agent / Cursor)
Dans votre fichier .mcp.json ou la configuration de votre client :
{
"mcpServers": {
"melodi": {
"type": "http",
"url": "http://localhost:8765/mcp",
"headers": {
"Authorization": "Bearer <TOKEN_JWT_GENERE_DANS_MELODI_ERP>"
}
}
}
}Le token JWT est généré dans le module MCP de MELODI ERP. Il doit être signé enHS256 avec la clé secrète configurée dans melodi_mcp_server et comporter au minimum :
{
"mcp_api_key": "votre_cle_mcp_si_definie",
"user_id": "votre_identifiant_utilisateur_melodi"
}Option B : Connexion STDIO locale (Claude Desktop / VS Code)
Pour connecter Claude Desktop à melodi_mcp_server en mode processus local :
Sous Linux / macOS :
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"melodi_erp": {
"command": "/home/gomsugaetant/Documents/byt3lab/projets/melodi_mcp_server/venv/bin/melodi-mcp-server",
"args": ["--transport", "stdio"],
"env": {
"MELODI_BASE_URL": "http://localhost:8000",
"MELODI_API_PREFIX": "/api/melodi_mcp/internal",
"MELODI_API_KEY": "votre_cle_secrete_melodi"
}
}
}
}Option C : Connexion Automatique OAuth 2.0 (ChatGPT Custom GPTs / Actions, Claude & Clients IA)
Pour connecter des clients IA distants supportant OAuth 2.0 :
Découverte automatique (RFC 8414) :
http://localhost:8765/.well-known/oauth-authorization-server(et/.well-known/openid-configuration)URL d'Autorisation :
http://localhost:8765/oauth/authorizeURL de Jeton (Token URL) :
http://localhost:8765/oauth/tokenEnregistrement dynamique (RFC 7591) :
http://localhost:8765/oauth/register
Lors de la première connexion, le client IA redirige l'utilisateur vers la mire d'autorisation web. L'utilisateur y colle simplement son jeton JWT généré dans MELODI ERP. Le serveur MCP valide la signature, vérifie que le jeton n'est pas révoqué, et fournit le jeton d'accès au client IA pour exécuter les outils en son nom. "MELODI_BASE_URL": "http://localhost:8000", "MELODI_API_PREFIX": "/api/melodi_mcp/internal", "MELODI_API_KEY": "votre_cle_secrete_melodi" } } } }
---
## 10. Tests Automatisés
La suite de tests automatisés utilise `pytest`, `pytest-asyncio` et `respx` pour simuler l'ensemble des scénarios sans nécessiter de serveur MELODI réel.
```bash
# Exécution de l'intégralité des tests unitaires et d'intégration
./venv/bin/pytest -v tests/Couverture des 24 exigences formelles :
Tests 1 à 2b : Chargement config, validation des rejets, préfixes d'API personnalisables.
Tests 3 à 6 : Client HTTP asynchrone, authentification, timeouts, manifest et catalogue.
Tests 7 à 11 & 18 : Registre dynamique, conversion
Tool, collisions de noms, suppression d'outils obsolètes, suivi de révision.Tests 12 à 17 & 22 : Exécution lecture/écriture, confirmation requise, timeouts, erreurs métier et revalidation ERP.
Tests 19 & 21 : Non-divulgation de secrets dans les logs, fermeture gracieuse.
Test 20 : Cycle de vie du serveur et transport.
Tests 23 & 24 : Dashboard d'administration (rendu HTML, APIs JSON de statut, synchronisation forcée).
11. Limites Connues & Perspectives
Module ERP en cours d'implémentation : Le serveur est prêt et aligné sur le contrat
v1. Dès que le modulemelodi_mcpsera déployé dans l'ERP, aucune modification de code ne sera requise côté serveur.Persistance locale des métriques : Les métriques de la console d'administration sont conservées en mémoire vive (anneau circulaire des 50 derniers appels). Une extension SQLite pourra être ajoutée si un archivage d'audit persistant sur disque est nécessaire.
Maintenance
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Remote MCP server exposing SMI Aware tools, resources, and skills over Streamable HTTP.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Host any HTTP API as MCP tools with a tamper-evident cross-agent settlement ledger.
Related MCP Servers
- FlicenseCqualityDmaintenanceSchema-driven MCP server that exposes all Paperclip API operations as typed MCP tools over stdio or Streamable HTTP, supporting both authenticated and local_mode deployments.100-
- AlicenseNot gradedqualityBmaintenanceSelf-hosted MCP gateway that applies deterministic, compiled policy to tool discovery, invocation, and outbound data flow, with no model in the enforcement path. Every decision emits a hash-chained receipt sealed with Ed25519 and verifiable using public keys only.Apache 2.0
- FlicenseNot gradedqualityBmaintenanceEnables centralized routing, discovery, namespacing, and execution of tools from multiple remote MCP servers over HTTP/SSE, aggregating them behind a unified MCP gateway with dynamic server management.-
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to discover and execute operational tools such as database mutations and system diagnostics over stdio, with deterministic structured outputs and Langfuse observability.ISC