Arthur Ria 6f54d765c4 L5.1 : fenetre verbatim sur le blob data de get_workflow_details
La reponse embarquait la definition EasyBuilder complete, au-dela du seuil de
rejet du client MCP (~70 000 caracteres, D24). Deux parametres de fenetre au
schema (D23) : max_data_chars (defaut 20 000) et data_offset (defaut 0). Les
metadonnees du workflow restent completes dans chaque tranche ; seul `data`
est fenetre, et dataTotalChars est porte par toute reponse.

La tranche est verbatim -- decoupe de chaine, rien d'autre. Ne jamais resumer
ni parser ce blob : la concatenation des tranches doit reconstituer la
definition a l'octet pres. Verifie : 20 000 + 20 000 + 20 000 + 11 512 =
71 512, concatenation identique au blob d'origine (premiers et derniers
caracteres compris).

Mesures avant/apres (protocole, LIMAGRAIN, longueur de content[0].text) :

  StackerCrane_LocationIsAccessibleByExtractor_PR   79 092 -> 23 117
    (blob data : 71 512, desormais annonce par dataTotalChars)
  CST_SendRejectContainersToPK (CustomApp)         101 816 -> 23 023
    (blob data : 92 362)
  StackerCrane_LoadMovementForOutboundTask_PR       10 587 -> 10 652
    (blob de 9 013 : sous le defaut, objet workflow identique a l'octet pres,
     ni truncated ni hint -- les +65 caracteres sont les trois champs de
     fenetre, contrat "total toujours porte" de D24)

Gardes de valeur dans le code de l'outil, pas dans le wrapper (D23 ne valide
que les noms) : data_offset: -5 et max_data_chars: 1.5 echouent avant tout
appel reseau avec un message nommant l'attendu.

Baseline preservee : 23 outils, 6 resources.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-25 15:08:13 +02:00

WMS MCP Server

Serveur MCP qui donne à Claude un accès en lecture à un WMS EasyWMS (Mecalux), pour le diagnostic et l'analyse.

Concrètement, dans Claude Desktop :

« Combien de commandes sont bloquées en statut Release sur LIMAGRAIN ? » « Trouve les workflows qui touchent au réapprovisionnement. » « Cherche Order 4711 dans les logs. » « Quels paramètres sont surchargés sur l'entrepôt 2 ? »

Architecture : 100 % API REST. Aucun accès direct à Oracle — voir D1 dans DECISIONS.md.


Ce que le serveur expose

23 outils répartis en 8 familles :

Famille Outils
Requêtes WMS query_wms_entities, count_wms_entities, get_entity_schema, search_wms_data
API brutes call_query_api, execute_command
Workflows search_workflows, get_workflow_details, list_workflow_categories
Application Dictionary get_application_summary, get_ad_elements, search_ad_elements, get_ad_element_details, list_ad_types
Métadonnées get_entity_metadata, generic_search
Configuration get_system_parameters
Profils list_wms_profiles, get_current_wms_profile, switch_wms_profile
Logs read_recent_logs, list_log_files, search_logs

6 resources de contexte : wms://entities, wms://entity-schemas, wms://query-examples, workflows://overview, api://catalog, logs://guide.

Multi-WMS. Plusieurs backends (clients, tenants) coexistent dans un seul serveur ; Claude bascule à la demande avec switch_wms_profile.


Installation

Prérequis : Node.js 18+ et un accès réseau au WMS (VPN si nécessaire).

npm install

Copiez .env.example en .env et renseignez au moins un profil :

WMS_API_AUTH=Basic R05BOklFNGU3aXFoZHQ=
WMS_APPLICATION=EasyWMS
WMS_API_PATH=/ApplicationService/api
WMS_TOKEN_PATH=/EasySTS/OAuth/Token
WORKFLOW_API_PATH=/AD/api

WMS_PROFILES=AD
DEFAULT_WMS_PROFILE=AD

AD_HOST=10.255.255.2
AD_USERNAME=...
AD_PASSWORD=...
AD_TENANT=AD
AD_SAAS=false

Vérifiez la connectivité — le test est en lecture seule :

npm test

Sortie attendue : 4/4 tests reussis. En cas d'échec, voir MONITORING.md §7.


Brancher Claude Desktop

Éditez %APPDATA%\Claude\claude_desktop_config.json :

{
  "mcpServers": {
    "wms": {
      "command": "node",
      "args": ["D:\\chemin\\vers\\mcp-wms-api\\src\\index.js"]
    }
  }
}

Puis fermez et rouvrez complètement Claude Desktop. Les logs du serveur apparaissent dans %APPDATA%\Claude\logs\.


Ajouter un WMS

  1. Ajoutez son nom à WMS_PROFILES (séparateur : virgule).
  2. Définissez <NOM>_HOST, <NOM>_USERNAME, <NOM>_PASSWORD, <NOM>_TENANT.
  3. Mettez <NOM>_SAAS=true si le WMS est hébergé dans le cloud Mecalux — les outils de log seront alors désactivés pour ce profil, à dessein.

Les URL se construisent à partir du host : rien d'autre à dupliquer. Testez avec npm test -- <NOM>.


Compiler un exécutable Windows

npm run build

Produit dist/wms-mcp-server.exe (~76 Mo, autonome, cible node22-win-x64).

Placez le .env à côté de l'exe : en mode packagé, c'est là qu'il est lu, et aucun credential n'est embarqué dans le binaire (D7). Les avertissements Cannot find module '@modelcontextprotocol/sdk/…' pendant le build sont normaux et sans effet (D18).

Déploiement type sur la VM :

C:\WMS\mcp\wms-mcp-server.exe
C:\WMS\mcp\.env

Documentation

Fichier Contenu
CLAUDE.md Architecture, inventaire des outils, conventions de code
DECISIONS.md Pourquoi le code est ainsi + pièges vérifiés en production
MONITORING.md Superviser le serveur MCP : logs, token, caches, symptômes
ROADMAP.md Travaux planifiés par lot, et ce qui a été écarté
docs/logs.md Accès aux logs du WMS
docs/ Références EasyWMS (API, entités)

Sécurité

  • .env et dist/ sont ignorés par git — ne les committez jamais.
  • La validation TLS est désactivée pour accepter les certificats auto-signés des WMS on-premise (D15).
  • ⚠️ L'historique git contient un ancien fichier de configuration avec des mots de passe en clair (commit b59cbb3). Ces credentials sont à considérer comme compromis — voir D20.
S
Description
MCP runtime - queries EasyWMS, logs, état système
Readme 984 KiB
Languages
JavaScript 96.5%
PowerShell 3.5%