Entity Enricher include un server Model Context Protocol integrato su /api/mcp — elencate i vostri schemi, arricchite un'entità, ispezionate il risultato e risolvete un avviso di classificazione tutto all'interno di un'unica chat di Claude. Nessun editor di flussi di lavoro richiesto.
Forma diversa, caso d'uso diverso. I connettori n8n e Make incapsulano l'API per l'automazione dei flussi di lavoro: trigger, esecuzioni pianificate, pipeline multi-step, stato persistente. MCP la incapsula per la chat interattiva: domande ad hoc, arricchimenti esplorativi, chiarimenti di follow-up. I flussi di lavoro hanno una forma a batch, le chat una forma conversazionale — la superficie cambia e con essa la UX.
La funzionalità straordinaria che solo MCP sblocca: ripresa interattiva della classificazione. Quando il classificatore preliminare rifiuta la sua entità (ad esempio ha chiesto di arricchire "Titano" rispetto a uno schema Pianeta, ma Titano è una luna), n8n/Make devono annullare automaticamente perché non sono interattivi. MCP mostra l'avviso a Claude, Claude le chiede di confermare e, in caso di "sì", lo strumento viene rieseguito senza il classificatore. Nessun fallimento a metà della pipeline, nessuna riesecuzione da zero.
Per claude.ai, Claude Code, Cursor e qualsiasi client MCP che supporti il flusso OAuth standard. Nessuna API key da creare o incollare: il client individua automaticamente il server di autorizzazione.
https://entityenricher.ai/api/mcp/.Per i client configurati tramite un file JSON anziché con un accesso interattivo (Claude Desktop, Continue, Zed).
ent_…: viene mostrato una sola volta.Per Claude Desktop, modificate ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) oppure %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"entityenricher": {
"url": "https://entityenricher.ai/api/mcp/",
"headers": { "X-API-Key": "ent_your_key_here" }
}
}
}Riavviare Claude Desktop. Lo stesso snippet funziona con Claude Code, Cursor, Continue e Zed, ossia qualsiasi client compatibile con MCP.
In una nuova chat: "Elenca i miei schemi Entity Enricher, quindi arricchisci Sanofi rispetto allo schema dell'azienda farmaceutica usando Claude Sonnet." Claude individua automaticamente gli strumenti, sceglie quello giusto, le chiede di confermare la scelta del modello e dello schema e trasmette il risultato in linea.
54 strumenti coprono l'intera superficie del vocabolario di enrichment, creazione di schema, Database Sync e ID semantici. Il comportamento è identico a quello degli endpoint REST che incapsulano (stessa validazione, fatturazione, limiti di piano): quando l'interfaccia web riceve una correzione, la riceve anche MCP. Le operazioni di lunga durata (enrichment in batch, generazione di campioni, esecuzioni di benchmark) sono asincrone: lo strumento di avvio restituisce un job_id, Claude interroga get_job_status e recupera gli output salvati dai suoi record al termine del job.
| Categoria | Strumento | Descrizione |
|---|---|---|
| Scoperta | list_models | Elenca le chiavi dei modelli, le capacità nominali, le impostazioni predefinite selezionate automaticamente e i profile_limits del vostro piano. Preferire la selezione automatica: la disponibilità non garantisce tutte le quote del provider o la modalità combinata media/strumenti. |
| Schemi | list_schemas | Elenca gli schema JSON salvati nella tua organizzazione, con quelli fissati per primi. |
| Schemi | get_schema | Recupera il contenuto completo di uno schema tramite UUID. |
| Schemi | generate_sample | Genera 1..N contratti di esempio modificabili in un unico job (il primo definisce l'insieme di campi; gli altri sono rapide varianti di istanza con gli stessi campi) in modalità conoscenza (nessun allegato, ricerca web facoltativa) o modalità sorgente (gli allegati sono autorevoli e il planner può porre domande). Rivedere le modifiche rilevanti con l'utente prima di creare uno schema. |
| Schemi | create_schema_from_sample | Genera e salva automaticamente uno schema da entity_samples (1..N campioni di un unico tipo di entità — unione dei campi, nullable dove mancanti, esempi reali osservati), un sample_record_id, oppure dati modificati con i relativi allegati collegati al record. Gli ID semantici sono facoltativi; i suggerimenti vengono rivisti, mai applicati automaticamente. |
| Schemi | save_schema | Salvare uno schema creato direttamente da Claude — nessuna chiamata LLM, nessun costo, validato lato server. |
| Schemi | update_schema | Rinomina, sostituisce il contenuto, riassegna i tag, fissa o attiva/disattiva il controllo di ambiguità su uno schema salvato senza alcuna chiamata all'LLM. |
| Schemi | get_schema_part | Leggi una parte di uno schema senza il documento completo: l'indice dei tipi denominati, una definizione $defs/$enums, un sottoalbero di oggetto o una singola scheda di proprietà con le relative relazioni e flag. |
| Schemi | update_schema_property | Modifica una singola proprietà tramite percorso — nome, tipo o $ref, descrizione, esempi, flag — oppure rimuovila, con validazione lato server; nessun round-trip del contenuto completo. |
| Schemi | add_schema_property | Aggiungi una proprietà scalare, un oggetto annidato o un $ref alla radice, a un oggetto annidato o a un tipo in $defs. |
| Schemi | move_schema_property | Sposta una proprietà in un altro contenitore — la radice, un oggetto annidato o un tipo $defs — conservandone i flag e la competenza. |
| Schemi | publish_schema | Pubblica la copia di lavoro di uno schema collegato come contratto su cui operano l'arricchimento e i suoi database sync. Le modifiche strutturali diventano effettive solo qui — e un sync appena collegato non invia nulla fino alla prima pubblicazione del suo schema. validate_only=true mostra un'anteprima del diff di migrazione. |
| Schemi | analyze_sample | Analizza il JSON di esempio alla ricerca di nomi di proprietà che ammettono più di una lettura nel contesto del proprio elemento padre — o nessuna — e di elementi correlati che mescolano dati dell'entità e dati specifici del padre. Report stateless con le interpretazioni concorrenti e le ridenominazioni suggerite; nulla viene modificato. |
| Schemi | analyze_schema | Esegue i controlli di ambiguità e di ambito dell'identità su uno schema salvato e scrive le annotazioni per singola proprietà: una descrizione riscritta per ogni nome ambiguo, poiché uno schema attivo non può essere rinominato. Incrementale per impostazione predefinita; force=true rianalizza tutto. |
| Schemi | delete_schema | Eliminare in modo soft uno schema salvato tramite UUID. |
| Arricchimento | enrich_entity | Arricchimento multi-modello con fusione automatica opzionale. Accetta un elenco opzionale attachment_ids. Le discrepanze di classificazione restituiscono una risposta senza errori, così che Claude possa chiedere all'utente di confermare e riprovare. |
| Arricchimento | start_batch_enrichment | Arricchisci un numero qualsiasi di entità in modo asincrono — nessun limite fisso alla dimensione del batch, vincolato dalla quota di utilizzo attivo del tuo piano — pipeline completa per ogni entità con fusione automatica. Restituisce un job_id; i risultati compaiono nei tuoi record. |
| Arricchimento | fetch_entities | Recuperare un array JSON di entità da un'API REST esterna lato server (bearer / api_key / basic auth) — si abbina all'arricchimento batch. |
| Arricchimento | retry_expertises | Rieseguire solo i domini di competenza falliti di un record, unendo i valori recuperati — nessun nuovo pagamento per ciò che è già andato a buon fine. |
| Arricchimento | merge_records | Unire 2 o più record esistenti in un unico risultato fuso — basato su regole o con un modello di arbitraggio LLM. |
| Job | get_job_status | Interroga i processi asincroni per avanzamento, risultati, errori e domande di chiarimento. Dopo un errore di compatibilità con un modello esplicito, riprovare una volta con la selezione automatica invece di alternare i modelli. |
| Job | cancel_job | Annullare un job in attesa, in esecuzione o in pausa. |
| Job | answer_job_question | Rispondere alle domande di chiarimento di un job in pausa e riprenderlo — la metà interattiva di generate_sample. |
| Benchmark | list_benchmark_scenarios | Elencare gli scenari di benchmark salvati (test di arricchimento riutilizzabili). |
| Benchmark | get_benchmark_scenario | Uno scenario con i suoi risultati con punteggio per modello (qualità / costo / velocità). |
| Benchmark | create_benchmark_scenario | Creare uno scenario: schema + entità fissa + strategia + giudice di punteggio. Richiesti il ruolo di proprietario + un piano con benchmark. |
| Benchmark | update_benchmark_scenario | Aggiornare la definizione di test o la configurazione di punteggio di uno scenario; i risultati esistenti vengono contrassegnati come obsoleti. |
| Benchmark | set_benchmark_reference | Salvare l'output di riferimento gold e contrassegnarlo come verificato — richiesto prima di un'esecuzione. |
| Benchmark | delete_benchmark_scenario | Eliminare uno scenario e i suoi risultati. |
| Benchmark | run_benchmark | Eseguire uno scenario su un elenco esplicito di modelli, su ogni modello attivo dei provider selezionati o su tutti i modelli attivi — ogni risultato riceve automaticamente un punteggio rispetto al riferimento. |
| Record | list_records | Sfoglia i record di arricchimento, generazione di esempio/schema, modifica di schema, playground, classificazione, arbitraggio e analisi di ambiguità, con filtri per esito, modello, job e ricerca. |
| Record | get_record | Output strutturato completo + errori di validazione per un record. |
| Record | get_stats | Statistiche aggregate dell'organizzazione: totali, tasso di successo, token, costo. |
| Allegati | upload_attachment | Carica un file base64 e restituisce il relativo ID allegato più la capacità del modello richiesta. Passando l'ID a generate_sample si attiva la modalità sorgente. |
| Allegati | delete_attachment | Elimina un allegato tramite ID — un comodo passaggio di pulizia post-arricchimento. |
| Database Sync | list_database_syncs | Elenca i database sync registrati su uno schema salvato, con i conteggi dei delta in sospeso e le opzioni di ciascun sync. |
| Database Sync | create_database_sync | Collega un database a uno schema salvato, trasformando i suoi enrichment in delta SQL relazionali per il tuo PostgreSQL. Lo schema viene collegato senza essere pubblicato e il modello del database viene classificato in background: esaminalo, poi publish_schema avvia il feed. |
| Database Sync | classify_database_model | Riesegui la classificazione del modello del database dopo aver modificato uno schema collegato: un LLM propone la chiave, il tipo SQL, l'indice e la titolarità di ogni proprietà nuova o modificata. Il primo passaggio viene eseguito automaticamente quando il database è connesso. |
| Database Sync | delete_database_sync | Elimina un database sync e i suoi delta in coda — le tabelle della propria replica non vengono mai toccate. Flag di smantellamento opzionali eliminano anche lo stato entità e il modello di database degli schemi rimasti senza database. |
| Database Sync | create_database_credential | (Ri)emette la credenziale sync-client di un database sync — il passaggio di associazione del workflow ee-database, restituita insieme ai comandi di installazione e di associazione. |
| Database Sync | fetch_database_deltas | Recupera la successiva finestra FIFO di delta SQL per un database sync — claim=true la assegna in lease per la consegna con conferma, claim=false è una lettura ripetibile. |
| Database Sync | ack_database_deltas | Conferma i delta applicati fino a un id: rilascia il lease e applica le opzioni di eliminazione del sync. |
| Database Sync | assign_sync_host | Assegna (o rimuove) l’host di sincronizzazione che effettua il provisioning di una sincronizzazione del database in modalità gestita — l’host rivendica la credenziale, crea il database fisico se assente e avvia la sincronizzazione, senza abbinamenti manuali. |
| Database Sync | list_entity_states | Esplora lo stato attuale delle entità di uno schema — le righe deduplicate, con priorità all’ultima scrittura, che il livello entità conserva e che ogni database collegato rispecchia, non i record per singola esecuzione di list_records. |
| Database Sync | sync_records_to_database | Inietta nel database sync di uno schema gli output di arricchimento memorizzati — nuovamente convalidati rispetto al contratto pubblicato e quindi sottoposti al gate di ammissione. |
| ID semantici | list_semantic_concepts | Esplora il vocabolario di concetti dell'organizzazione con le relative sfaccettature di tipo — oppure, con view="duplicates", le coppie di concetti appena al di sotto della soglia di risoluzione. |
| ID semantici | get_semantic_concept | Un concetto nel dettaglio: forme superficiali, chiavi di origine dell'identità, record collegati e i suoi vicini più prossimi con le similarità (definite solo all'interno della porzione relativa al proprio tipo di concetto e modello di embedding). |
| ID semantici | probe_semantic_concept | Simula la scala di risoluzione per un testo — ciò che ne farebbe un arricchimento — senza creare nulla. Sonda prima di aggiungere. |
| ID semantici | add_semantic_concept | Aggiunge un concetto con utilizzo 0 oppure, tramite alias_of, una nuova forma superficiale di un concetto esistente. Rifiutato con l'indicazione del concetto già presente quando il testo è già coperto alla soglia. |
| ID semantici | update_concept_alias | Rimuove una forma superficiale di un concetto oppure ne promuove una a canonica. L'ultima forma superficiale viene rifiutata: eliminare il concetto è compito del flusso di eliminazione. |
| ID semantici | import_semantic_concepts | Risolve fino a 1000 testi di identità attraverso la scala di arricchimento: per impostazione predefinita un report per riga, creando i concetti mancanti con mint=true (proprietario). |
| ID semantici | merge_semantic_concepts | Incorpora un concetto in un altro. impact_only=true (predefinito) riporta l'ampiezza dell'impatto; l'unione vera e propria (proprietario) reindirizza alias ed entità e fa convergere ogni database collegato. |
| ID semantici | delete_semantic_concepts | Elimina concetti per id, per tipi interi o solo quelli inutilizzati. impact_only=true (predefinito) riporta prima i conteggi e gli schemi/database interessati; l'eliminazione si auto-ripara ma interrompe la convergenza con gli id memorizzati. |
| ID semantici | migrate_semantic_embeddings | Stato, anteprima delle collisioni, avvio o annullamento della migrazione del modello di embedding dell'organizzazione: l'unico modo per spostare i concetti esistenti tra modelli di embedding. |
Omettere attachment_ids. Il modello progetta un campione riutilizzabile a partire dalla sua conoscenza e enable_web_search=true può fondare i fatti esterni.
Passare attachment_ids. Il pianificatore considera i file come autorevoli: trascrive i valori dei documenti o descrive solo gli attributi visibili in una foto. I campi e le istruzioni aggiuntive non possono aggiungere fatti esterni non correlati.
Qualsiasi istruzione aggiuntiva venga trasmessa è rispettata oppure segnalata come non rispettata. Quando una regola deterministica ha dovuto annullare una sua richiesta — ad esempio una struttura che il generatore non può produrre — il job completato riporta un elenco di warnings che lo indica. Le trasmetta all'utente: un'istruzione ignorata in silenzio è il modo in cui un campione finisce per essere errato senza che se ne accorga.
Per una richiesta ibrida, come identificare un'auto da una foto e ricercarne le apparizioni pubbliche, chiamare generate_sample due volte: prima in modalità sorgente con la ricerca web disattivata, poi senza allegati utilizzando l'identità confermata e la ricerca web attivata. Combinare i risultati nella conversazione; Entity Enricher mantiene record separati in modo che le osservazioni della sorgente e i fatti ricercati conservino provenienze distinte.
Mantenere model=auto a meno che non sia esplicitamente necessario un modello. La selezione automatica applica i requisiti di attività, allegati e ricerca web; una chiave di modello disponibile può comunque incontrare quote specifiche del provider o restrizioni sugli strumenti combinati.
Prima della generazione dello schema, il client esamina l'ambito dell'entità, le chiavi, i tipi, la cardinalità, i campi rappresentativi mancanti e le relazioni annidate. Le modifiche rilevanti vengono raggruppate per la vostra approvazione; i valori fattuali e la struttura non vengono mai modificati in modo silenzioso.
Per tabelle relazionali, dati master, knowledge graph o entità annidate riutilizzabili, il client chiede se generare gli ID semantici. Richiedono un modello di embedding dell'organizzazione e comportano un costo di embedding aggiuntivo, pertanto rimangono disattivati per impostazione predefinita.
Passare entity_data per un campione nuovo o modificato, oppure sample_record_id per riutilizzare il JSON memorizzato e i relativi allegati collegati. Passando entrambi si utilizza il JSON modificato mantenendo gli allegati. Un valore esplicito di attachment_ids, inclusa una lista vuota, ha la precedenza sull'ereditarietà.
Dopo la generazione, il client verifica la conformità del campione, le chiavi, le annotazioni, la competenza, le relazioni e la copertura degli ID semantici. I suggerimenti strutturali richiedono la modifica del campione e la rigenerazione; anche le modifiche alle sole annotazioni richiedono la vostra approvazione. Nulla viene applicato automaticamente.
Le risorse consentono a Claude di esplorare i dati senza consumare una chiamata a strumento: il client LLM le tratta come file. Entrambi i tipi di risorsa vengono visualizzati in Markdown per una resa inline economica.
| Template URI | Descrizione |
|---|---|
| enricher://schemas/{schema_id} | Uno schema salvato rappresentato come Markdown — intestazione dei metadati + il GeneratedJsonSchema come blocco JSON delimitato. |
| enricher://records/{record_id} | Un record di arricchimento passato rappresentato come Markdown — metadati + output strutturato + errori di validazione. |
Quando si chiede a enrich_entity di usare un modello di classificazione e l'entità non corrisponde al tipo dello schema, lo strumento restituisce una risposta non di errore con dettagli strutturati. Claude la legge, ti espone il ragionamento e (previa tua conferma) riprova con force_after_classification_warning=true — che esclude il classificatore al nuovo tentativo.
{
"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 e Make si annullano automaticamente in questo stato perché non possono interpellare l'utente durante la pipeline. MCP può farlo, e questa singola differenza è il motivo per cui esiste il connettore.
La stessa interattività alimenta un secondo flusso: quando generate_sample viene eseguito con documenti sorgente, il suo pianificatore potrebbe mettersi in pausa con domande di chiarimento strutturali. Claude le inoltra all'utente e riprende il job con answer_job_question — round dopo round, finché il campione non viene generato.
Gli errori degli strumenti vengono proiettati in dict strutturati con un campo error_code, così Claude può eseguire il pattern-matching anziché analizzare testo libero. Il livello HTTP effettua una mappatura pulita: 402 → errore di quota o di credito, 422 → avviso di classificazione, 504 → timeout, 502 → errore dell'LLM upstream.
| error_code | Quando |
|---|---|
| invalid_request | UUID malformato, argomenti mutuamente esclusivi (schema_id + target_schema) o convalida del corpo della richiesta non riuscita. |
| prompt_limit_reached | Quota di prompt giornaliera / settimanale / mensile esaurita (HTTP 402). Il corpo include periodo, limite, utilizzati e necessari. |
| insufficient_credits | L'org ha la fatturazione attiva ma il saldo dei crediti è troppo basso per avviare il lavoro (HTTP 402). Il corpo include il saldo e un URL di acquisto. |
| model_limit_exceeded | Richiesti più modelli di quanti ne consenta il piano (HTTP 402). Riporta il limite e la quantità richiesta. |
| language_limit_exceeded | Richieste più lingue di quante ne consenta il piano (HTTP 402). |
| concurrent_job_limit_reached | Troppi processi di arricchimento attivi per questa organizzazione. Attenda o aggiorni il piano. |
| classification_warning | ⚡ Non è un errore: il classificatore preliminare ha rifiutato l'entità. La risposta include il contesto di classificazione affinché Claude possa chiedere all'utente di confermare e riprovare con force_after_classification_warning=true. |
| benchmarks_not_in_plan | Gli strumenti di benchmark richiedono il ruolo di proprietario e un piano che includa i Model Benchmarks (HTTP 403). |
| ambiguity_check_disabled | analyze_schema è stato chiamato su uno schema il cui controllo di ambiguità è disattivato (HTTP 400). Riattivarlo prima tramite update_schema con ambiguity_check_enabled=true. |
| enrichment_timeout | Il job ha superato timeout_seconds. Suggeriamo di ridurre i modelli o di suddividere l'entity. |
| schema_generation_timeout | La generazione dello schema ha superato timeout_seconds. |
| schema_generation_failed | Errore LLM upstream durante la generazione dello schema (HTTP 502). |
| model_output_invalid | Il model ha restituito un output non conforme allo schema (HTTP 502). Il corpo della risposta indica il model, il percorso della proprietà non valida e retryable: true — richiami lo strumento oppure scelga un model più potente. |
| cancelled | Il job è stato annullato durante l'esecuzione (HTTP 499). |
| not_found | Lo schema o l'ID del record non esiste nella vostra organizzazione. |
| http_error | Gestione generica per gli errori HTTP privi di un corpo di dettaglio strutturato. |
get_stats copre i riepiloghi lato chat; le dashboard complete restano nell'app.