Entity Enricher embarque un serveur Model Context Protocol intégré à l'adresse /api/mcp — listez vos schémas, enrichissez une entité, inspectez le résultat et résolvez un avertissement de classification, le tout depuis une seule conversation Claude. Aucun éditeur de workflow requis.
Forme différente, cas d'usage différent. Les connecteurs n8n et Make encapsulent l'API pour l'automatisation de workflows : déclencheurs, exécutions planifiées, pipelines multi-étapes, état persistant. MCP l'encapsule pour le chat interactif : questions ponctuelles, enrichissements exploratoires, clarifications de suivi. Les workflows suivent une logique de traitement par lot, les chats une logique conversationnelle — la surface diffère, tout comme l'expérience utilisateur.
La fonctionnalité phare que seul MCP débloque : la reprise interactive de classification. Lorsque le classificateur de pré-vérification rejette votre entité (par ex. vous avez demandé d'enrichir « Titan » avec un schéma Planète, mais Titan est une lune), n8n/Make doivent annuler automatiquement car ils ne sont pas interactifs. MCP fait remonter l'avertissement à Claude, Claude vous demande confirmation, et si vous répondez « oui », l'outil se relance sans le classificateur. Pas d'échec en cours de pipeline, pas de reprise depuis zéro.
Pour claude.ai, Claude Code, Cursor et tout client MCP prenant en charge le flux OAuth standard. Aucune clé API à créer ou à coller — le client découvre automatiquement le serveur d'autorisation.
https://entityenricher.ai/api/mcp/.Pour les clients configurés via un fichier JSON plutôt que par une connexion interactive (Claude Desktop, Continue, Zed).
ent_… — elle n'est affichée qu'une seule fois.Pour Claude Desktop, modifiez ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) ou %APPDATA%\Claude\claude_desktop_config.json (Windows) :
{
"mcpServers": {
"entityenricher": {
"url": "https://entityenricher.ai/api/mcp/",
"headers": { "X-API-Key": "ent_your_key_here" }
}
}
}Redémarrez Claude Desktop. Le même extrait fonctionne avec Claude Code, Cursor, Continue et Zed — tout client compatible MCP.
Dans une nouvelle conversation : "Listez mes schémas Entity Enricher, puis enrichissez Sanofi avec le schéma d'entreprise pharmaceutique en utilisant Claude Sonnet." Claude découvre automatiquement les outils, choisit le bon, vous demande de confirmer le choix du modèle et du schéma, puis affiche le résultat en continu directement dans la conversation.
Les 54 outils couvrent l'intégralité du vocabulaire : enrichissement, création de schémas, database sync et ID sémantiques. Leur comportement est identique à celui des endpoints REST qu'ils encapsulent (mêmes validations, même facturation, mêmes limites de forfait) — lorsqu'un correctif arrive dans l'interface web, MCP en bénéficie aussi. Les traitements longs (enrichissement par lot, génération d'échantillons, exécutions de benchmark) sont asynchrones : l'outil de démarrage renvoie un job_id, Claude interroge get_job_status, puis récupère les sorties persistées depuis vos enregistrements une fois le job terminé.
| Catégorie | Outil | Description |
|---|---|---|
| Découverte | list_models | Listez les clés de modèle, les capacités nominales, les valeurs par défaut sélectionnées automatiquement et les profile_limits de votre forfait. Préférez la sélection automatique : la disponibilité ne garantit pas chaque quota de provider ni chaque mode combiné média/outil. |
| Schémas | list_schemas | Liste les schémas JSON enregistrés de votre organisation, les épinglés en premier. |
| Schémas | get_schema | Récupérez le contenu complet d'un schéma par UUID. |
| Schémas | generate_sample | Générez 1..N contrats d'exemple modifiables en une seule tâche (le premier définit l'ensemble des champs ; les autres sont des variantes d'instance rapides aux mêmes champs) en mode connaissance (aucune pièce jointe, recherche web facultative) ou en mode source (les pièces jointes font autorité et le planificateur peut poser des questions). Passez en revue les modifications importantes avec l'utilisateur avant de créer un schéma. |
| Schémas | create_schema_from_sample | Générez et enregistrez automatiquement un schéma à partir d'entity_samples (1..N échantillons d'un même type d'entité — union des champs, nullable si absent, exemples réels observés), d'un sample_record_id, ou de données modifiées ainsi que de ses pièces jointes liées à l'enregistrement. Les identifiants sémantiques sont facultatifs ; les suggestions sont passées en revue, jamais appliquées automatiquement. |
| Schémas | save_schema | Persistez un schéma rédigé directement par Claude — sans appel LLM, sans coût, validé côté serveur. |
| Schémas | update_schema | Renommer, remplacer le contenu, réétiqueter, épingler ou activer/désactiver la vérification d'ambiguïté sur un schéma enregistré, sans appel LLM. |
| Schémas | get_schema_part | Lisez une partie d'un schéma sans charger le document complet : l'index des types nommés, une définition $defs/$enums, un sous-arbre d'objet ou la fiche d'une seule propriété avec ses relations et ses indicateurs. |
| Schémas | update_schema_property | Modifiez une propriété par son chemin — renommage, type ou $ref, description, exemples, indicateurs — ou supprimez-la, avec validation côté serveur ; sans aller-retour sur le contenu complet. |
| Schémas | add_schema_property | Ajoutez une propriété scalaire, un objet imbriqué ou une propriété $ref à la racine, à un objet imbriqué ou à un type $defs. |
| Schémas | move_schema_property | Déplacez une propriété vers un autre conteneur — la racine, un objet imbriqué ou un type $defs — en conservant ses indicateurs et son expertise. |
| Schémas | publish_schema | Publier la copie de travail d'un schéma lié en tant que contrat sur lequel s'appuient l'enrichissement et ses synchronisations de base de données. Les modifications structurelles ne prennent effet qu'ici — et une synchronisation fraîchement liée n'envoie rien avant la première publication de son schéma. validate_only=true prévisualise le diff de migration. |
| Schémas | analyze_sample | Analyse le JSON d'exemple à la recherche de noms de propriétés admettant plusieurs lectures dans le contexte de leur parent — ou aucune — et d'éléments liés mêlant des faits sur l'entité et des faits propres à chaque parent. Rapport sans état présentant les interprétations concurrentes et des renommages suggérés ; rien n'est modifié. |
| Schémas | analyze_schema | Exécuter les vérifications d'ambiguïté et de portée d'identité sur un schéma enregistré et écrire des annotations par propriété — une description réécrite pour chaque nom ambigu, un schéma actif ne pouvant pas être renommé. Incrémental par défaut, force=true réanalyse tout. |
| Schémas | delete_schema | Effectuez une suppression logique d'un schéma enregistré par UUID. |
| Enrichissement | enrich_entity | Enrichissement multi-modèles avec fusion automatique optionnelle. Accepte une liste attachment_ids facultative. Les divergences de classification renvoient une réponse sans erreur afin que Claude puisse demander confirmation à l'utilisateur et réessayer. |
| Enrichissement | start_batch_enrichment | Enrichissez un nombre illimité d'entités de manière asynchrone — sans limite fixe de taille de traitement par lot, dans la limite du quota d'utilisation en temps réel de votre forfait — pipeline complet par entité avec fusion automatique. Renvoie un job_id ; les résultats apparaissent dans vos enregistrements. |
| Enrichissement | fetch_entities | Récupérez un tableau JSON d'entités depuis une API REST externe côté serveur (authentification bearer / api_key / basic) — se combine avec l'enrichissement par lot. |
| Enrichissement | retry_expertises | Réexécutez uniquement les domaines d'expertise en échec d'un enregistrement, en réintégrant les valeurs récupérées — sans nouveau paiement pour ce qui a déjà réussi. |
| Enrichissement | merge_records | Fusionnez 2 enregistrements ou plus en un seul résultat fusionné — basé sur des règles ou avec un modèle d'arbitrage LLM. |
| Tâches | get_job_status | Interrogez les tâches asynchrones pour connaître leur progression, leurs résultats, leurs échecs et les questions de clarification. Après un échec de compatibilité de modèle explicite, réessayez une fois avec la sélection automatique plutôt que d'enchaîner les modèles. |
| Tâches | cancel_job | Annulez une tâche en attente, en cours ou en pause. |
| Tâches | answer_job_question | Répondez aux questions de clarification d'une tâche en pause et reprenez-la — la moitié interactive de generate_sample. |
| Benchmarks | list_benchmark_scenarios | Listez vos scénarios de benchmark enregistrés (tests d'enrichissement réutilisables). |
| Benchmarks | get_benchmark_scenario | Un scénario avec ses résultats notés par modèle (qualité / coût / vitesse). |
| Benchmarks | create_benchmark_scenario | Créez un scénario : schéma + entité fixe + stratégie + juge de notation. Rôle propriétaire + un forfait avec benchmarks requis. |
| Benchmarks | update_benchmark_scenario | Mettez à jour la définition de test ou la configuration de notation d'un scénario ; les résultats existants sont marqués comme obsolètes. |
| Benchmarks | set_benchmark_reference | Enregistrez la sortie de référence gold et marquez-la comme vérifiée — requis avant une exécution. |
| Benchmarks | delete_benchmark_scenario | Supprimez un scénario et ses résultats. |
| Benchmarks | run_benchmark | Exécutez un scénario sur une liste de modèles explicite, sur tous les modèles actifs de fournisseurs sélectionnés ou sur tous les modèles actifs — chaque résultat est noté automatiquement par rapport à la référence. |
| Enregistrements | list_records | Parcourez les enregistrements d'enrichissement, de génération d'exemple/de schéma, de modification de schéma, de playground, de classification, d'arbitrage et d'analyse d'ambiguïté, avec des filtres de réussite, de modèle, de tâche et de recherche. |
| Enregistrements | get_record | Sortie structurée complète + erreurs de validation pour un enregistrement. |
| Enregistrements | get_stats | Statistiques agrégées de l'organisation : totaux, taux de réussite, tokens, coût. |
| Pièces jointes | upload_attachment | Téléversez un fichier base64 et renvoyez son ID de pièce jointe ainsi que la capacité de modèle requise. Transmettre l'ID à generate_sample active le mode source. |
| Pièces jointes | delete_attachment | Supprimez une pièce jointe par son ID — une étape de nettoyage post-enrichissement bien pratique. |
| Database Sync | list_database_syncs | Lister les synchronisations de base de données enregistrées sur un schéma enregistré, avec le nombre de deltas en attente et les options de chaque synchronisation. |
| Database Sync | create_database_sync | Connectez une base de données à un schéma enregistré, transformant ses enrichissements en deltas SQL relationnels pour votre propre PostgreSQL. Le schéma est lié sans être publié et le modèle de base de données est classé en arrière-plan — vérifiez-le, puis publish_schema démarre le flux. |
| Database Sync | classify_database_model | Relancez la classification du modèle de base de données après avoir modifié un schéma lié : un LLM propose la clé, le type SQL, l'index et la propriété de chaque nouvelle propriété ou propriété modifiée. Le premier passage s'exécute automatiquement lorsque la base de données est connectée. |
| Database Sync | delete_database_sync | Supprimer une synchronisation de base de données et ses deltas en file d'attente — les tables de votre réplica ne sont jamais modifiées. Des indicateurs de démantèlement facultatifs suppriment aussi l'état d'entité et le modèle de base de données des schémas ne disposant plus d'aucune base de données. |
| Database Sync | create_database_credential | (Ré)émettre l'identifiant sync-client d'une synchronisation de base de données — l'étape d'appairage du workflow ee-database, renvoyée avec les commandes d'installation et d'appairage. |
| Database Sync | fetch_database_deltas | Récupérer la prochaine fenêtre FIFO de deltas SQL pour une synchronisation de base de données — claim=true la réserve pour une livraison avec accusé de réception, claim=false est une lecture rejouable. |
| Database Sync | ack_database_deltas | Accuser réception des deltas appliqués jusqu'à un id : libère le bail et applique les options de purge de la synchronisation. |
| Database Sync | assign_sync_host | Attribuer (ou effacer) l'hôte de synchronisation qui provisionne un database sync en mode géré — l'hôte revendique l'identifiant, crée la base de données physique si elle n'existe pas et démarre la synchronisation, sans appairage manuel. |
| Database Sync | list_entity_states | Parcourir l'état actuel des entités d'un schéma — les lignes dédupliquées, en dernier écrit gagnant, que conserve la couche entité et que reflète chaque base de données liée, et non les enregistrements par exécution de list_records. |
| Database Sync | sync_records_to_database | Injectez les sorties d'enrichissement stockées dans la Database Sync d'un schéma — revalidées par rapport au contrat publié, puis soumises au contrôle d'admission. |
| ID sémantiques | list_semantic_concepts | Parcourez le vocabulaire de concepts de l'organisation avec ses facettes de type — ou, avec view="duplicates", les paires de concepts juste en dessous du seuil de résolution. |
| ID sémantiques | get_semantic_concept | Un concept en détail : formes de surface, clés sources d'identité, enregistrements liés et ses plus proches voisins avec leurs similarités (définies uniquement au sein de sa propre tranche type de concept / modèle d'embedding). |
| ID sémantiques | probe_semantic_concept | Simulez l'échelle de résolution pour un texte — ce qu'un enrichissement en ferait — sans rien créer. Sondez avant d'ajouter. |
| ID sémantiques | add_semantic_concept | Ajoutez un concept avec un usage à 0, ou, via alias_of, une nouvelle forme de surface d'un concept existant. Refusé, avec le concept en place, lorsque le texte est déjà couvert au seuil. |
| ID sémantiques | update_concept_alias | Supprimez une forme de surface d'un concept, ou promouvez-en une comme canonique. La dernière forme de surface est refusée — supprimer le concept relève du flux de suppression. |
| ID sémantiques | import_semantic_concepts | Résolvez jusqu'à 1000 textes d'identité via l'échelle d'enrichissement : un rapport ligne par ligne par défaut, avec création des concepts manquants si mint=true (propriétaire). |
| ID sémantiques | merge_semantic_concepts | Fusionnez un concept dans un autre. impact_only=true (par défaut) indique l'étendue des impacts ; la fusion elle-même (propriétaire) réoriente les alias et les entités et fait converger chaque base de données liée. |
| ID sémantiques | delete_semantic_concepts | Supprimez des concepts par id, des types entiers, ou uniquement les inutilisés. impact_only=true (par défaut) indique d'abord les décomptes et les schémas/bases de données concernés ; la suppression s'auto-répare mais rompt la convergence avec les ids stockés. |
| ID sémantiques | migrate_semantic_embeddings | Statut, aperçu des collisions, démarrage ou annulation de la migration de modèle d'embedding de l'organisation — le seul moyen de faire passer des concepts existants d'un modèle d'embedding à un autre. |
Omettez attachment_ids. Le modèle conçoit un échantillon réutilisable à partir de ses connaissances, et enable_web_search=true peut ancrer des faits externes.
Transmettez attachment_ids. Le planificateur considère les fichiers comme faisant autorité : il transcrit les valeurs des documents ou décrit uniquement les attributs visibles sur une photo. Les champs et les instructions supplémentaires ne peuvent pas ajouter de faits externes sans rapport.
Toute instruction supplémentaire que vous transmettez est soit respectée, soit signalée comme non respectée. Lorsqu'une règle déterministe a dû annuler ce que vous aviez demandé — une structure que le générateur ne peut pas produire, par exemple — la tâche terminée comporte une liste warnings qui l'indique. Relayez-la à l'utilisateur : une instruction ignorée en silence, c'est ainsi qu'un échantillon devient discrètement erroné.
Pour une requête hybride telle que l'identification d'une voiture à partir d'une photo et la recherche de ses apparitions publiques, appelez generate_sample deux fois : d'abord en mode source avec la recherche web désactivée, puis sans pièces jointes en utilisant l'identité confirmée et la recherche web activée. Combinez les résultats dans la conversation ; Entity Enricher conserve des enregistrements séparés afin que les observations issues des sources et les faits recherchés conservent une provenance distincte.
Conservez model=auto sauf si vous avez explicitement besoin d'un modèle. La sélection automatique applique les exigences de tâche, de pièce jointe et de recherche web ; une clé de modèle disponible peut tout de même rencontrer des quotas spécifiques au provider ou des restrictions d'outils combinés.
Avant la génération du schéma, le client examine la portée de l'entité, les clés, les types, la cardinalité, les champs représentatifs manquants et les relations imbriquées. Les modifications importantes sont regroupées pour votre approbation ; les valeurs factuelles et la structure ne sont jamais modifiées silencieusement.
Pour les tables relationnelles, les données de référence, les graphes de connaissances ou les entités imbriquées réutilisables, le client demande s'il faut générer des ID sémantiques. Ils nécessitent un modèle d'embedding de l'organisation et engendrent un coût d'embedding, ils restent donc désactivés par défaut.
Transmettez entity_data pour un échantillon nouveau ou modifié, ou sample_record_id pour réutiliser le JSON stocké et ses pièces jointes liées. Transmettre les deux utilise le JSON modifié tout en conservant les pièces jointes. Un attachment_ids explicite, y compris une liste vide, remplace l'héritage.
Après la génération, le client vérifie la conformité de l'échantillon, les clés, les annotations, l'expertise, les relations et la couverture des ID sémantiques. Les suggestions structurelles nécessitent de modifier l'échantillon puis de régénérer ; les modifications limitées aux annotations requièrent tout de même votre approbation. Rien n'est appliqué automatiquement.
Les ressources permettent à Claude de parcourir des données sans consommer d'appel d'outil — le client LLM les traite comme des fichiers. Les deux types de ressources s'affichent en Markdown pour un rendu en ligne économique.
| Modèle d'URI | Description |
|---|---|
| enricher://schemas/{schema_id} | Un schéma enregistré rendu en Markdown — en-tête de métadonnées + le GeneratedJsonSchema sous forme de bloc JSON délimité. |
| enricher://records/{record_id} | Un enregistrement d'enrichissement passé rendu en Markdown — métadonnées + sortie structurée + erreurs de validation. |
Lorsque vous demandez à enrich_entity d'utiliser un modèle de classification et que l'entité ne correspond pas au type du schéma, l'outil renvoie une réponse sans erreur avec des détails structurés. Claude la lit, vous présente le raisonnement et (après votre confirmation) réessaie avec force_after_classification_warning=true — ce qui désactive le classificateur lors de la nouvelle tentative.
{
"success": false,
"error_code": "classification_warning",
"message": "Pre-flight classification rejected the entity. ...",
"classification": {
"status": "mismatch",
"reasoning": "Titan is a moon of Saturn, not a planet.",
"confidence": 0.97
},
"job_id": "..."
}n8n et Make annulent automatiquement dans cet état car ils ne peuvent pas interroger l'utilisateur en cours de pipeline. MCP le peut, et cette seule différence justifie l'existence du connecteur.
La même interactivité alimente un second flux : lorsque generate_sample s'exécute avec des documents sources, son planificateur peut se mettre en pause avec des questions de clarification structurelles. Claude vous les relaie et reprend la tâche avec answer_job_question — cycle après cycle, jusqu'à ce que l'échantillon soit généré.
Les erreurs d'outil sont projetées dans des dictionnaires structurés avec un champ error_code afin que Claude puisse faire une correspondance de motifs au lieu d'analyser du texte libre. La couche HTTP s'y mappe proprement : 402 → erreur de quota ou de crédit, 422 → avertissement de classification, 504 → délai dépassé, 502 → défaillance du LLM en amont.
| error_code | Quand |
|---|---|
| invalid_request | UUID mal formé, arguments mutuellement exclusifs (schema_id + target_schema) ou échec de la validation du corps de la requête. |
| prompt_limit_reached | Quota de prompts quotidien / hebdomadaire / mensuel épuisé (HTTP 402). Le corps de la réponse inclut period, limit, used, needed. |
| insufficient_credits | L'organisation a la facturation activée mais le solde de crédits est trop faible pour démarrer la tâche (HTTP 402). Le corps de la réponse inclut le solde et une URL d'achat. |
| model_limit_exceeded | Plus de modèles demandés que le forfait n'en autorise (HTTP 402). Renvoie la limite + le nombre demandé. |
| language_limit_exceeded | Plus de langues demandées que le forfait n'en autorise (HTTP 402). |
| concurrent_job_limit_reached | Trop de tâches d'enrichissement actives pour cette organisation. Patientez ou passez à un forfait supérieur. |
| classification_warning | ⚡ Non-erreur : le classificateur préliminaire a rejeté l'entité. La réponse contient le contexte de classification afin que Claude puisse demander confirmation à l'utilisateur et réessayer avec force_after_classification_warning=true. |
| benchmarks_not_in_plan | Les outils de benchmark nécessitent le rôle propriétaire et un forfait incluant les Model Benchmarks (HTTP 403). |
| ambiguity_check_disabled | analyze_schema a été appelé sur un schéma dont la vérification d'ambiguïté est désactivée (HTTP 400). Réactivez-la d'abord via update_schema avec ambiguity_check_enabled=true. |
| enrichment_timeout | La tâche a dépassé timeout_seconds. Essayez avec moins de modèles ou en divisant l'entité. |
| schema_generation_timeout | La génération du schéma a dépassé timeout_seconds. |
| schema_generation_failed | Erreur LLM en amont lors de la génération du schéma (HTTP 502). |
| model_output_invalid | Le modèle a renvoyé une sortie qui ne correspond pas au schéma (HTTP 502). Le corps de la réponse indique le modèle, le chemin de la propriété en cause et retryable: true — appelez à nouveau l'outil, ou choisissez un modèle plus puissant. |
| cancelled | La tâche a été annulée en cours d'exécution (HTTP 499). |
| not_found | Le schéma ou l'ID d'enregistrement n'existe pas dans votre organisation. |
| http_error | Cas générique pour les erreurs HTTP sans corps de détail structuré. |
get_stats fournit les résumés côté chat ; les tableaux de bord complets restent dans l'application.