Entity Enricher levert een ingebouwde Model Context Protocol-server op /api/mcp — toon je schema's, verrijk een entiteit, bekijk het resultaat en los een classificatiewaarschuwing op allemaal vanuit één Claude-chat. Geen workfloweditor nodig.
Andere vorm, andere use case. De n8n- en Make-connectors verpakken de API voor workflowautomatisering: triggers, geplande runs, meerstaps-pipelines, persistente status. MCP verpakt het voor interactieve chat: ad-hocvragen, verkennende enrichments, vervolgverduidelijkingen. Workflows hebben een batch-vorm, chats een gespreksvorm — het oppervlak verschilt en de UX dus ook.
De killerfeature die alleen MCP ontgrendelt: interactief hervatten van classificatie. Wanneer de pre-flight-classificatie je entiteit afwijst (je vroeg bijvoorbeeld om "Titan" te verrijken tegen een Planeet-schema, maar Titan is een maan), moeten n8n/Make automatisch annuleren omdat ze niet-interactief zijn. MCP toont de waarschuwing aan Claude, Claude vraagt je om te bevestigen, en bij "ja" draait de tool opnieuw zonder de classificatie. Geen mislukking midden in de pijplijn, geen opnieuw beginnen vanaf nul.
Voor claude.ai, Claude Code, Cursor en elke MCP-client die de standaard OAuth-flow ondersteunt. Geen API-sleutel om aan te maken of te plakken — de client ontdekt de autorisatieserver automatisch.
https://entityenricher.ai/api/mcp/.Voor clients die via een JSON-bestand worden geconfigureerd in plaats van een interactieve aanmelding (Claude Desktop, Continue, Zed).
ent_…-waarde — die wordt maar één keer getoond.Bewerk voor Claude Desktop het bestand ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) of %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"entityenricher": {
"url": "https://entityenricher.ai/api/mcp/",
"headers": { "X-API-Key": "ent_your_key_here" }
}
}
}Start Claude Desktop opnieuw op. Hetzelfde fragment werkt voor Claude Code, Cursor, Continue en Zed — elke MCP-compatibele client.
In een nieuwe chat: "Toon mijn Entity Enricher-schema's en verrijk Sanofi vervolgens tegen het schema voor farmaceutische bedrijven met Claude Sonnet." Claude ontdekt de tools automatisch, kiest de juiste, vraagt je om het model en de schemakeuze te bevestigen, en streamt het resultaat inline.
54 tools dekken het volledige vocabulaire van verrijking, schema-opbouw, Database Sync en semantische ID's. Het gedrag is identiek aan de REST-endpoints die ze omhullen (dezelfde validatie, facturering, planlimieten) — krijgt de web-UI een fix, dan krijgt MCP die ook. Langlopend werk (batchverrijking, voorbeelden genereren, benchmarkruns) verloopt asynchroon: de start-tool geeft een job_id terug, Claude pollt get_job_status en haalt de opgeslagen resultaten uit je records zodra de job klaar is.
| Categorie | Tool | Beschrijving |
|---|---|---|
| Ontdekking | list_models | Toont modelsleutels, nominale mogelijkheden, automatisch geselecteerde standaardwaarden en de profile_limits van je abonnement. Geef de voorkeur aan automatische selectie: beschikbaarheid garandeert niet elk providerquota of elke gecombineerde media-/toolmodus. |
| Schema's | list_schemas | Toon opgeslagen JSON-schema's in je organisatie, vastgezette eerst. |
| Schema's | get_schema | Haal de volledige inhoud van een schema op via UUID. |
| Schema's | generate_sample | Genereer 1..N bewerkbare voorbeeldcontracten in één taak (de eerste definieert de veldenset; de rest zijn snelle instantievarianten met dezelfde velden) in kennismodus (geen bijlagen, optioneel zoeken op het web) of bronmodus (bijlagen zijn maatgevend en de planner mag vragen stellen). Bespreek ingrijpende bewerkingen met de gebruiker voordat je een schema aanmaakt. |
| Schema's | create_schema_from_sample | Genereer en sla automatisch een schema op vanuit entity_samples (1..N voorbeelden van één entiteitstype — vereniging van velden, nullable waar ontbrekend, echt waargenomen voorbeelden), een sample_record_id, of bewerkte gegevens plus de aan het record gekoppelde bijlagen. Semantische ID's zijn opt-in; suggesties worden beoordeeld, nooit automatisch toegepast. |
| Schema's | save_schema | Sla een schema op dat Claude direct heeft geschreven — geen LLM-aanroep, geen kosten, gevalideerd aan serverzijde. |
| Schema's | update_schema | Hernoem een opgeslagen schema, vervang de inhoud, wijzig de tags, zet het vast of schakel de ambiguïteitscontrole in of uit — zonder LLM-aanroep. |
| Schema's | get_schema_part | Lees een deel van een schema zonder het volledige document: de index van benoemde types, een $defs/$enums-definitie, een objectsubtree of één eigenschapkaart met de bijbehorende relaties en flags. |
| Schema's | update_schema_property | Bewerk één eigenschap via het pad — hernoemen, type of $ref, beschrijving, voorbeelden, flags — of verwijder hem, met validatie aan serverzijde; geen round-trip van de volledige inhoud. |
| Schema's | add_schema_property | Voeg een scalaire, geneste object- of $ref-eigenschap toe aan de root, een genest object of een $defs-type. |
| Schema's | move_schema_property | Verplaats één eigenschap naar een andere container — de root, een genest object of een $defs-type — met behoud van de flags en expertise. |
| Schema's | publish_schema | Publiceer de werkkopie van een gekoppeld schema als het contract waartegen verrijking en de database syncs draaien. Structurele wijzigingen worden pas hier van kracht — en een net gekoppelde sync levert niets tot de eerste publicatie van het schema. validate_only=true toont een voorbeeld van de migratie-diff. |
| Schema's | analyze_sample | Analyseer sample-JSON op eigenschapsnamen die in de context van hun ouder meer dan één lezing toelaten — of helemaal geen — en op gerelateerde items die entiteitsfeiten mengen met feiten per ouder. Stateless rapport met de concurrerende interpretaties en voorgestelde hernoemingen; er wordt niets gewijzigd. |
| Schema's | analyze_schema | Voer de controles op ambiguïteit en identiteitsafbakening uit op een opgeslagen schema en schrijf annotaties per eigenschap — een herschreven beschrijving per dubbelzinnige naam, omdat een actief schema niet hernoemd kan worden. Standaard incrementeel; met force=true wordt alles opnieuw geanalyseerd. |
| Schema's | delete_schema | Soft-delete een opgeslagen schema op UUID. |
| Verrijking | enrich_entity | Multi-modelverrijking met optionele auto-fusie. Accepteert een optionele lijst met attachment_ids. Bij classificatieconflicten wordt een respons zonder fout teruggegeven, zodat Claude de gebruiker kan vragen te bevestigen en het opnieuw te proberen. |
| Verrijking | start_batch_enrichment | Verrijk een onbeperkt aantal entiteiten asynchroon — geen vaste limiet op batchgrootte, begrensd door het live-gebruiksquotum van je abonnement — volledige pipeline per entiteit met automatische fusie. Geeft een job_id terug; resultaten komen in je records terecht. |
| Verrijking | fetch_entities | Haal een JSON-array van entiteiten op van een externe REST API aan serverzijde (bearer / api_key / basic auth) — combineert met batchverrijking. |
| Verrijking | retry_expertises | Voer alleen de mislukte expertisedomeinen van een record opnieuw uit en voeg herstelde waarden terug samen — geen dubbele betaling voor wat al is geslaagd. |
| Verrijking | merge_records | Voeg 2+ bestaande records samen tot één gefuseerd resultaat — op basis van regels of met een LLM-arbitragemodel. |
| Jobs | get_job_status | Peil asynchrone taken op voortgang, resultaten, fouten en verduidelijkingsvragen. Probeer na een compatibiliteitsfout met een expliciet model één keer opnieuw met automatische selectie in plaats van modellen af te wisselen. |
| Jobs | cancel_job | Annuleer een job die in behandeling is, actief is of gepauzeerd is. |
| Jobs | answer_job_question | Beantwoord de verduidelijkingsvragen van een gepauzeerde job en hervat hem — de interactieve helft van generate_sample. |
| Benchmarks | list_benchmark_scenarios | Toon je opgeslagen benchmarkscenario's (herbruikbare verrijkingstests). |
| Benchmarks | get_benchmark_scenario | Eén scenario met de per model gescoorde resultaten (kwaliteit / kosten / snelheid). |
| Benchmarks | create_benchmark_scenario | Maak een scenario: schema + vaste entiteit + strategie + beoordelingsjudge. Owner-rol + een plan met benchmarks vereist. |
| Benchmarks | update_benchmark_scenario | Werk de testdefinitie of scoreconfiguratie van een scenario bij; bestaande resultaten worden als verouderd gemarkeerd. |
| Benchmarks | set_benchmark_reference | Sla de gouden referentie-output op en markeer hem als geverifieerd — vereist vóór een run. |
| Benchmarks | delete_benchmark_scenario | Verwijder een scenario en de bijbehorende resultaten. |
| Benchmarks | run_benchmark | Voer een scenario uit op een expliciete modellijst, elk actief model van geselecteerde providers, of alle actieve modellen — elk resultaat wordt automatisch gescoord tegen de referentie. |
| Records | list_records | Blader door records van verrijking, sample-/schemageneratie, schemabewerking, playground, classificatie, arbitrage en ambiguïteitsanalyse, met filters op succes, model, job en zoekterm. |
| Records | get_record | Volledige gestructureerde output + validatiefouten voor één record. |
| Records | get_stats | Geaggregeerde organisatiestatistieken: totalen, slagingspercentage, tokens, kosten. |
| Bijlagen | upload_attachment | Upload een base64-bestand en retourneer de bijlage-ID plus de vereiste modelcapaciteit. Door de ID aan generate_sample door te geven, wordt de bronmodus geactiveerd. |
| Bijlagen | delete_attachment | Verwijder een bijlage op ID — een handige opschoonstap na de verrijking. |
| Database Sync | list_database_syncs | Toon de database syncs die op een opgeslagen schema zijn geregistreerd, met aantallen openstaande delta's en de opties van elke sync. |
| Database Sync | create_database_sync | Verbind een database met een opgeslagen schema en zet de enrichments ervan om in relationele SQL-delta's voor je eigen PostgreSQL. Het schema wordt ongepubliceerd gekoppeld en het databasemodel wordt op de achtergrond geclassificeerd — controleer het en publish_schema start dan de feed. |
| Database Sync | classify_database_model | Voer de classificatie van het databasemodel opnieuw uit nadat je een gekoppeld schema hebt bewerkt: een LLM stelt voor elke nieuwe of gewijzigde property de key, het SQL-type, de index en het eigenaarschap voor. De eerste doorloop start vanzelf zodra de database verbonden is. |
| Database Sync | delete_database_sync | Verwijder een database sync en de in de wachtrij staande delta's — de tabellen van je replica worden nooit aangeraakt. Optionele teardown-flags verwijderen ook de entiteitsstatus en het databasemodel van schema's die zonder database achterblijven. |
| Database Sync | create_database_credential | Geef de sync-client-credential van een database sync (opnieuw) uit — de koppelingsstap van de ee-database-workflow, teruggegeven met de install- en pair-commando's. |
| Database Sync | fetch_database_deltas | Haal het volgende FIFO-venster van SQL-delta's op voor een database sync — claim=true least het voor bevestigde levering, claim=false is een herhaalbare read. |
| Database Sync | ack_database_deltas | Bevestig toegepaste delta's tot aan een id: geeft de lease vrij en past de purge-opties van de sync toe. |
| Database Sync | assign_sync_host | Wijs de synchost toe (of wis hem) die een database sync in beheerde modus inricht — de host claimt de credential, maakt de fysieke database aan als die ontbreekt en start met synchroniseren, zonder handmatige koppeling. |
| Database Sync | list_entity_states | Blader door de huidige entiteitstatus van een schema — de ontdubbelde rijen volgens last-write-wins die de entiteitlaag bevat en die elke gekoppelde database spiegelt, niet de records per run van list_records. |
| Database Sync | sync_records_to_database | Injecteer opgeslagen verrijkingsuitvoer in de database sync van een schema — opnieuw gevalideerd tegen het gepubliceerde contract en daarna door de toelatingspoort geleid. |
| Semantische ID's | list_semantic_concepts | Blader door het conceptvocabulaire van de organisatie met de bijbehorende typefacetten — of, met view="duplicates", door de conceptparen net onder de resolutiedrempel. |
| Semantische ID's | get_semantic_concept | Eén concept volledig: oppervlaktevormen, identiteitsbronsleutels, gekoppelde records en de dichtstbijzijnde buren met gelijkenissen (alleen gedefinieerd binnen de eigen slice van concepttype en embeddingmodel). |
| Semantische ID's | probe_semantic_concept | Voer de resolutieladder voor een tekst uit als dry-run — wat een verrijking ermee zou doen — zonder iets aan te maken. Test voordat je toevoegt. |
| Semantische ID's | add_semantic_concept | Voeg een concept toe met gebruik 0, of met alias_of een nieuwe oppervlaktevorm van een bestaand concept. Wordt geweigerd, met vermelding van het bestaande concept, wanneer de tekst al binnen de drempel gedekt is. |
| Semantische ID's | update_concept_alias | Verwijder een oppervlaktevorm van een concept, of promoveer er een tot canonieke vorm. De laatste oppervlaktevorm wordt geweigerd — het concept verwijderen is de taak van de verwijderflow. |
| Semantische ID's | import_semantic_concepts | Los tot 1000 identiteitsteksten op via de verrijkingsladder: standaard een rapport per rij, met mint=true worden de missers aangemaakt (eigenaar). |
| Semantische ID's | merge_semantic_concepts | Voeg het ene concept samen in het andere. impact_only=true (standaard) rapporteert de impactradius; de samenvoeging zelf (eigenaar) verwijst aliassen en entiteiten opnieuw door en laat elke gekoppelde database convergeren. |
| Semantische ID's | delete_semantic_concepts | Verwijder concepten op id, hele typen, of alleen ongebruikte. impact_only=true (standaard) rapporteert eerst de aantallen en de betrokken schema's/databases; verwijderen herstelt zichzelf, maar verbreekt de convergentie met opgeslagen id's. |
| Semantische ID's | migrate_semantic_embeddings | Status, botsingsvoorbeeld, starten of annuleren van de embeddingmodel-migratie van de organisatie — de enige manier om bestaande concepten tussen embeddingmodellen te verplaatsen. |
Laat attachment_ids weg. Het model ontwerpt een herbruikbaar voorbeeld op basis van zijn kennis, en enable_web_search=true kan externe feiten onderbouwen.
Geef attachment_ids door. De planner behandelt de bestanden als gezaghebbend: hij transcribeert documentwaarden of beschrijft alleen kenmerken die zichtbaar zijn op een foto. Velden en extra instructies kunnen geen ongerelateerde externe feiten toevoegen.
Wat je als extra instructies meegeeft, wordt óf opgevolgd, óf teruggemeld als niet-opgevolgd. Waar een deterministische regel iets moest terugdraaien wat je had gevraagd — bijvoorbeeld een vorm die de generator niet kan produceren — bevat de voltooide taak een lijst warnings die dat vermeldt. Geef die door aan de gebruiker: een stilzwijgend genegeerde instructie is precies hoe een voorbeeld ongemerkt fout raakt.
Voor een hybride verzoek zoals het identificeren van een auto op een foto en het onderzoeken van de publieke verschijningen ervan, roep je generate_sample twee keer aan: eerst in bronmodus met webzoeken uit, daarna zonder bijlagen met gebruik van de bevestigde identiteit en webzoeken aan. Combineer de resultaten in het gesprek; Entity Enricher houdt afzonderlijke records bij zodat bronwaarnemingen en onderzochte feiten een aparte herkomst behouden.
Houd model=auto aan tenzij je expliciet een model nodig hebt. Automatische selectie past de vereisten voor de taak, bijlagen en webzoeken toe; een beschikbare modelsleutel kan alsnog te maken krijgen met providerspecifieke quota of beperkingen bij gecombineerde tools.
Vóór het genereren van het schema beoordeelt de client de reikwijdte van de entiteit, sleutels, typen, kardinaliteit, ontbrekende representatieve velden en geneste relaties. Ingrijpende wijzigingen worden gegroepeerd voor jouw goedkeuring; feitelijke waarden en structuur worden nooit stilzwijgend gewijzigd.
Voor relationele tabellen, stamgegevens, kennisgrafen of herbruikbare geneste entiteiten vraagt de client of er semantische ID's moeten worden gegenereerd. Deze vereisen een embeddingmodel van de organisatie en brengen embeddingkosten met zich mee, dus ze blijven standaard uitgeschakeld.
Geef entity_data door voor een nieuw of bewerkt voorbeeld, of sample_record_id om opgeslagen JSON en de bijbehorende bijlagen opnieuw te gebruiken. Als je beide doorgeeft, wordt de bewerkte JSON gebruikt terwijl de bijlagen behouden blijven. Expliciete attachment_ids, inclusief een lege lijst, overschrijven de overerving.
Na het genereren controleert de client de conformiteit van het voorbeeld, sleutels, annotaties, expertise, relaties en de dekking van semantische ID's. Structurele suggesties vereisen het bewerken en opnieuw genereren van het voorbeeld; wijzigingen die alleen annotaties betreffen vereisen nog steeds jouw goedkeuring. Niets wordt automatisch toegepast.
Met resources kan Claude data doorbladeren zonder een tool-aanroep te verbruiken — de LLM-client behandelt ze als bestanden. Beide resourcetypen worden als Markdown weergegeven voor goedkope inline-weergave.
| URI-sjabloon | Beschrijving |
|---|---|
| enricher://schemas/{schema_id} | Een opgeslagen schema weergegeven als Markdown — metadata-header + de GeneratedJsonSchema als een afgebakend JSON-blok. |
| enricher://records/{record_id} | Een eerder verrijkingsrecord weergegeven als Markdown — metadata + gestructureerde output + validatiefouten. |
Wanneer je enrich_entity vraagt om een classificatiemodel te gebruiken en de entiteit niet overeenkomt met het schematype, retourneert de tool een niet-fout-respons met gestructureerde details. Claude leest het, toont je de redenering en probeert het (na jouw bevestiging) opnieuw met force_after_classification_warning=true — waardoor de classifier bij de nieuwe poging wordt overgeslagen.
{
"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 en Make annuleren automatisch bij deze status omdat ze de gebruiker niet halverwege de pipeline iets kunnen vragen. MCP kan dat wel, en dat ene verschil is waarom de connector bestaat.
Dezelfde interactiviteit drijft een tweede flow aan: wanneer generate_sample met brondocumenten draait, kan de planner pauzeren met structurele verduidelijkingsvragen. Claude geeft ze aan je door en hervat de job met answer_job_question — ronde na ronde, totdat de sample is gegenereerd.
Toolfouten worden geprojecteerd in gestructureerde dicts met een error_code-veld, zodat Claude patronen kan herkennen in plaats van vrije tekst te parsen. De HTTP-laag wordt netjes gemapt: 402 → quota- of creditfout, 422 → classificatiewaarschuwing, 504 → time-out, 502 → upstream LLM-fout.
| error_code | Wanneer |
|---|---|
| invalid_request | Ongeldige UUID, wederzijds uitsluitende argumenten (schema_id + target_schema), of validatie van de request-body mislukt. |
| prompt_limit_reached | Dagelijks / wekelijks / maandelijks prompt-quotum uitgeput (HTTP 402). De body bevat period, limit, used en needed. |
| insufficient_credits | Org heeft facturering ingeschakeld maar het creditsaldo is te laag om de taak te starten (HTTP 402). De body bevat het saldo en een aankoop-URL. |
| model_limit_exceeded | Meer modellen aangevraagd dan het plan toestaat (HTTP 402). Geeft limiet + aangevraagd terug. |
| language_limit_exceeded | Meer talen aangevraagd dan het plan toestaat (HTTP 402). |
| concurrent_job_limit_reached | Te veel actieve verrijkingstaken voor deze organisatie. Wacht of upgrade je abonnement. |
| classification_warning | ⚡ Geen fout: de pre-flight classifier heeft de entiteit afgewezen. Het antwoord bevat de classificatiecontext zodat Claude de gebruiker kan vragen om te bevestigen en opnieuw te proberen met force_after_classification_warning=true. |
| benchmarks_not_in_plan | Benchmarktools vereisen de owner-rol en een plan met Model Benchmarks (HTTP 403). |
| ambiguity_check_disabled | analyze_schema is aangeroepen op een schema waarvan de ambiguïteitscontrole is uitgeschakeld (HTTP 400). Schakel deze eerst weer in via update_schema met ambiguity_check_enabled=true. |
| enrichment_timeout | Job overschreed timeout_seconds. Overweeg minder modellen of splits de entity. |
| schema_generation_timeout | Schemageneratie heeft timeout_seconds overschreden. |
| schema_generation_failed | Upstream-LLM-fout tijdens schema-generatie (HTTP 502). |
| model_output_invalid | Het model gaf uitvoer terug die niet overeenkomt met het schema (HTTP 502). De body bevat de naam van het model, het pad van de problematische eigenschap en retryable: true — roep de tool opnieuw aan of kies een sterker model. |
| cancelled | Job werd tijdens de run geannuleerd (HTTP 499). |
| not_found | Schema- of record-ID bestaat niet in je organisatie. |
| http_error | Verzamelpost voor HTTP-fouten zonder gestructureerde detailinhoud. |
get_stats dekt samenvattingen aan de chatkant; de volledige dashboards blijven in de app.