Server MCP (claude.ai / Claude Desktop / Code / Cursor) - Documentazione Entity Enricher

Server MCP (Claude Desktop / Code / Cursor)

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.

Perché MCP, se ci sono già n8n + Make?

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.

Avvio rapido

Opzione 1 — OAuth (consigliata)

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.

  1. Aggiungere Entity Enricher come connettore (in claude.ai: Impostazioni → Connettori → Aggiungi connettore personalizzato, oppure selezionarlo dalla directory) con l'URL https://entityenricher.ai/api/mcp/.
  2. Il browser apre la schermata di consenso di Entity Enricher: effettuare l'accesso se necessario e fare clic su Autorizza. La connessione agisce per conto dell'utente con il suo stesso ruolo.
  3. È possibile gestire o revocare la connessione in qualsiasi momento da API Keys → App connesse: la revoca interrompe immediatamente l'accesso.

Opzione 2 — API key (configurazione JSON statica)

Per i client configurati tramite un file JSON anziché con un accesso interattivo (Claude Desktop, Continue, Zed).

  1. 1. Crea una chiave API
    Nell'interfaccia web di Entity Enricher: Impostazioni → Chiavi API → Nuova chiave di accesso organizzazione. Scelga un ruolo (operator per sola lettura, editor per creare/modificare schemi, owner per il controllo completo). Copi il valore ent_…: viene mostrato una sola volta.
  2. 2. Registrarsi nel client MCP

    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.

Prova

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.

Strumenti

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.

CategoriaStrumentoDescrizione
Scopertalist_modelsElenca 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.
Schemilist_schemasElenca gli schema JSON salvati nella tua organizzazione, con quelli fissati per primi.
Schemiget_schemaRecupera il contenuto completo di uno schema tramite UUID.
Schemigenerate_sampleGenera 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.
Schemicreate_schema_from_sampleGenera 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.
Schemisave_schemaSalvare uno schema creato direttamente da Claude — nessuna chiamata LLM, nessun costo, validato lato server.
Schemiupdate_schemaRinomina, sostituisce il contenuto, riassegna i tag, fissa o attiva/disattiva il controllo di ambiguità su uno schema salvato senza alcuna chiamata all'LLM.
Schemiget_schema_partLeggi 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.
Schemiupdate_schema_propertyModifica una singola proprietà tramite percorso — nome, tipo o $ref, descrizione, esempi, flag — oppure rimuovila, con validazione lato server; nessun round-trip del contenuto completo.
Schemiadd_schema_propertyAggiungi una proprietà scalare, un oggetto annidato o un $ref alla radice, a un oggetto annidato o a un tipo in $defs.
Schemimove_schema_propertySposta una proprietà in un altro contenitore — la radice, un oggetto annidato o un tipo $defs — conservandone i flag e la competenza.
Schemipublish_schemaPubblica 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.
Schemianalyze_sampleAnalizza 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.
Schemianalyze_schemaEsegue 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.
Schemidelete_schemaEliminare in modo soft uno schema salvato tramite UUID.
Arricchimentoenrich_entityArricchimento 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.
Arricchimentostart_batch_enrichmentArricchisci 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.
Arricchimentofetch_entitiesRecuperare un array JSON di entità da un'API REST esterna lato server (bearer / api_key / basic auth) — si abbina all'arricchimento batch.
Arricchimentoretry_expertisesRieseguire solo i domini di competenza falliti di un record, unendo i valori recuperati — nessun nuovo pagamento per ciò che è già andato a buon fine.
Arricchimentomerge_recordsUnire 2 o più record esistenti in un unico risultato fuso — basato su regole o con un modello di arbitraggio LLM.
Jobget_job_statusInterroga 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.
Jobcancel_jobAnnullare un job in attesa, in esecuzione o in pausa.
Jobanswer_job_questionRispondere alle domande di chiarimento di un job in pausa e riprenderlo — la metà interattiva di generate_sample.
Benchmarklist_benchmark_scenariosElencare gli scenari di benchmark salvati (test di arricchimento riutilizzabili).
Benchmarkget_benchmark_scenarioUno scenario con i suoi risultati con punteggio per modello (qualità / costo / velocità).
Benchmarkcreate_benchmark_scenarioCreare uno scenario: schema + entità fissa + strategia + giudice di punteggio. Richiesti il ruolo di proprietario + un piano con benchmark.
Benchmarkupdate_benchmark_scenarioAggiornare la definizione di test o la configurazione di punteggio di uno scenario; i risultati esistenti vengono contrassegnati come obsoleti.
Benchmarkset_benchmark_referenceSalvare l'output di riferimento gold e contrassegnarlo come verificato — richiesto prima di un'esecuzione.
Benchmarkdelete_benchmark_scenarioEliminare uno scenario e i suoi risultati.
Benchmarkrun_benchmarkEseguire 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.
Recordlist_recordsSfoglia 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.
Recordget_recordOutput strutturato completo + errori di validazione per un record.
Recordget_statsStatistiche aggregate dell'organizzazione: totali, tasso di successo, token, costo.
Allegatiupload_attachmentCarica 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.
Allegatidelete_attachmentElimina un allegato tramite ID — un comodo passaggio di pulizia post-arricchimento.
Database Synclist_database_syncsElenca i database sync registrati su uno schema salvato, con i conteggi dei delta in sospeso e le opzioni di ciascun sync.
Database Synccreate_database_syncCollega 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 Syncclassify_database_modelRiesegui 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 Syncdelete_database_syncElimina 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 Synccreate_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 Syncfetch_database_deltasRecupera 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 Syncack_database_deltasConferma i delta applicati fino a un id: rilascia il lease e applica le opzioni di eliminazione del sync.
Database Syncassign_sync_hostAssegna (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 Synclist_entity_statesEsplora 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 Syncsync_records_to_databaseInietta 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 semanticilist_semantic_conceptsEsplora 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 semanticiget_semantic_conceptUn 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 semanticiprobe_semantic_conceptSimula la scala di risoluzione per un testo — ciò che ne farebbe un arricchimento — senza creare nulla. Sonda prima di aggiungere.
ID semanticiadd_semantic_conceptAggiunge 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 semanticiupdate_concept_aliasRimuove 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 semanticiimport_semantic_conceptsRisolve 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 semanticimerge_semantic_conceptsIncorpora 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 semanticidelete_semantic_conceptsElimina 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 semanticimigrate_semantic_embeddingsStato, 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.

Modalità di generazione del campione

Modalità conoscenza

Omettere attachment_ids. Il modello progetta un campione riutilizzabile a partire dalla sua conoscenza e enable_web_search=true può fondare i fatti esterni.

Modalità sorgente

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.

Le sue istruzioni aggiuntive sono vincolanti

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.

Approvare il campione, quindi rivedere lo schema

Il campione è il contratto

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.

Scegliere ID semantici stabili quando utile

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.

Risorse

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 URIDescrizione
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.

La funzionalità straordinaria: ripresa interattiva della classificazione

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.

Codici di errore

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_codeQuando
invalid_requestUUID malformato, argomenti mutuamente esclusivi (schema_id + target_schema) o convalida del corpo della richiesta non riuscita.
prompt_limit_reachedQuota di prompt giornaliera / settimanale / mensile esaurita (HTTP 402). Il corpo include periodo, limite, utilizzati e necessari.
insufficient_creditsL'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_exceededRichiesti più modelli di quanti ne consenta il piano (HTTP 402). Riporta il limite e la quantità richiesta.
language_limit_exceededRichieste più lingue di quante ne consenta il piano (HTTP 402).
concurrent_job_limit_reachedTroppi 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_planGli strumenti di benchmark richiedono il ruolo di proprietario e un piano che includa i Model Benchmarks (HTTP 403).
ambiguity_check_disabledanalyze_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_timeoutIl job ha superato timeout_seconds. Suggeriamo di ridurre i modelli o di suddividere l'entity.
schema_generation_timeoutLa generazione dello schema ha superato timeout_seconds.
schema_generation_failedErrore LLM upstream durante la generazione dello schema (HTTP 502).
model_output_invalidIl 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.
cancelledIl job è stato annullato durante l'esecuzione (HTTP 499).
not_foundLo schema o l'ID del record non esiste nella vostra organizzazione.
http_errorGestione generica per gli errori HTTP privi di un corpo di dettaglio strutturato.

Omissioni deliberate

Vedi anche