Become a member!

Non solo MCP. Un vero agente AI, embedded nella tua applicazione Delphi.

🌐
Questo articolo è disponibile anche in altre lingue:
🇬🇧 English  •  🇪🇸 Español  •  🇩🇪 Deutsch  •  🇧🇷 Português

Sono le 8:30. Il direttore commerciale apre il Gestionale Agentico. Nella lista delle mail in arrivo c’è già una richiesta di Rossi:

“Salve, vorrei fare un ordine urgente: 5 laptop e 3 webcam, con lo sconto solito. Potete confermarmi entro oggi? Grazie, Rossi.”

Senza uscire dal gestionale, apre la chat dell’agente e scrive: “Gestisci la richiesta.”

In meno di trenta secondi, l’agente AI ha fatto tutto:

  • Letto la mail direttamente dal gestionale
  • Identificato il cliente dall’indirizzo email
  • Consultato i quattro ordini precedenti nello storico
  • Capito che “lo sconto solito” è il 5% (mai esplicitato in nessun campo del database, ricavato solo leggendo lo storico)
  • Creato l’ordine in bozza, con i prodotti giusti e lo sconto corretto
  • Scritto la bozza dell’email di conferma, pronta per l’invio

L’agente AI non ha spedito nulla da solo. Ha preparato tutto e si è fermato ad aspettare. Il direttore commerciale legge il riepilogo: cliente giusto, prodotti giusti, sconto 5% con la motivazione (“storico ordini: sempre 5%”), bozza email di conferma già scritta. Tutto corretto. Clicca su “Approva e invia”. Solo a quel punto la mail parte e l’ordine viene confermato nel sistema.

Lo stesso flusso eseguito a mano richiede di passare alla casella mail, aprire il cliente nel gestionale, navigare lo storico ordini su più schermate per ricavare lo sconto non esplicitato, aprire il modulo ordine, inserire i prodotti uno per uno, applicare lo sconto, tornare al client mail e scrivere la conferma. Una decina di minuti in condizioni ottimali, con attenzione alta e zero interruzioni. L’agente AI ha impiegato trenta secondi.

Ha detto una frase al suo gestionale. E il gestionale ha capito. E ha agito.


mcp-server-delphi è una libreria open source per Delphi (Apache 2.0) che permette di costruire applicazioni agentiche con il Model Context Protocol (MCP). Include un loop agentico embedded scritto interamente in Delphi, un server MCP (trasporto stdio e Streamable HTTP) e un client MCP. Si integra nativamente con DMVCFramework e supporta OpenAI API come motore di ragionamento.


Da Server a Agente: il salto qualitativo

Nel post precedente abbiamo visto come esporre i tool del tuo gestionale al protocollo MCP: il modo in cui Claude, Gemini e altri assistenti AI si connettono al software esterno. Un server MCP è già potente: permette a un assistente esterno di interrogare il tuo database, creare ordini, leggere la situazione clienti.

Il progetto mcp-server-delphi non è solo una libreria per costruire server MCP. È una piattaforma per costruire agenti AI embedded nella tua applicazione Delphi.

La differenza è sostanziale:

MCP Server (passivo) Agente embedded (attivo)
Un client AI esterno si connette e chiama tool Il loop AI gira dentro la tua app Delphi
L’intelligenza è nel client (Claude, Gemini…) L’intelligenza orchestra i tuoi tool dall’interno
L’utente lavora fuori dal gestionale L’utente parla con il gestionale
I dati passano da un servizio esterno I tool girano dentro l’app: controllo totale su cosa esporre al modello

Un’applicazione che incorpora questo loop non è semplicemente un software che “supporta MCP”: è un’applicazione agentica. L’intelligenza non è ospitata altrove e non dipende da un client esterno: ragiona sui tuoi dati, usa i tuoi tool, rispetta le tue regole.

E allo stesso tempo, la tua applicazione espone anche un server MCP: così Claude Desktop, Gemini CLI o qualsiasi altro client AI compatibile può comunque connettersi dall’esterno. Non è un’alternativa: è entrambe le cose insieme.


Come funziona l’agentic loop

Quando l’utente scrive un messaggio nella chat del gestionale, non succede una semplice chiamata API. Il loop agentico (scritto interamente in Delphi) fa questo:

  1. Invia il messaggio al modello AI (OpenAI API) insieme alla lista di tutti i tool disponibili
  2. Il modello risponde con una o più tool call: chiede di eseguire funzioni reali nel gestionale
  3. Il loop esegue i tool, raccoglie i risultati
  4. Rimanda tutto al modello, che può chiamare altri tool, o rispondere all’utente
  5. Ripete finché il modello non ha una risposta completa

Un messaggio come “Elabora questa mail e crea l’ordine” può generare 10-15 tool call in sequenza: ricerca cliente, verifica fido, analisi storico sconti, creazione ordine, aggiunta righe, invio email di conferma. L’agente AI esegue ogni passo rispettando le regole di business già presenti nel codice, senza uscire dall’applicazione.

Il modello non “sa” come funziona il tuo ERP. Sa leggere le descrizioni dei tool che gli esponi. Il resto lo fa il tuo codice Delphi. Questo è il cuore dell’approccio agentico: non un chatbot che risponde, ma un agente AI che pianifica, agisce e porta a termine task complessi in autonomia, chiedendo conferma all’umano solo quando serve.

Ecco un esempio concreto: questa è la richiesta reale inviata nella chat del Gestionale Agentico.

“Crea un ordine per Verdi Distribuzione: 3 proiettori e 2 tablet Android. Applica sconto 8% su tutto, conferma l’ordine e pianifica la consegna tra 7 giorni alle 10:00.”

Il Gestionale Agentico in azione: l’utente chiede di creare un ordine per Verdi Distribuzione (3 proiettori + 2 tablet Android), applicare lo sconto dell'8%, confermare l’ordine e pianificare la consegna a 7 giorni. L’agente AI elabora l’intera sequenza in autonomia e presenta il riepilogo in attesa di approvazione.

L’agente AI ha elaborato l’intera richiesta in autonomia: ha cercato il cliente Verdi Distribuzione, creato l’ordine con i prodotti richiesti, verificato le giacenze a magazzino, applicato lo sconto dell'8%, confermato l’ordine e pianificato l’appuntamento di consegna. Ogni passo si basa sulla business logic aziendale già presente nell’applicazione, esposta all’agente AI tramite i tool del MCP server. Nessun dato è uscito dall’infrastruttura aziendale.


Il momento più importante: quando l’AI si ferma

Nelle demo dal vivo mostro sempre questo scenario: l’agente AI sta elaborando un ordine complesso, ha già cercato il cliente, verificato il fido, selezionato i prodotti. Poi, invece di andare avanti da solo, apre un popup modale Delphi con una domanda:

“Ho trovato tre varianti del prodotto richiesto. Quale preferisci? (A) Standard, (B) Pro, (C) Premium”

Il thread AI è sospeso. Il loop aspetta. L’utente risponde. L’agente AI riprende.

Questo è il tool ask_user: una funzione che l’AI può chiamare ogni volta che ha bisogno di una scelta umana. Non è una limitazione, è il punto di forza del sistema.

Nella realtà aziendale, non tutti i processi sono definiti in modo rigido. Ci sono eccezioni, contesti particolari, relazioni commerciali che un algoritmo non può conoscere. Il direttore commerciale sa che quel cliente va trattato diversamente questa settimana. Sa che quello sconto non si applica in quel contesto. Sa che l’ordine è urgente per una ragione che non è scritta da nessuna parte. Quella discrezionalità non è un difetto del processo, è valore umano insostituibile.

Con ask_user, l’agente AI non cerca di sostituire quel giudizio: si ferma, espone le opzioni, e aspetta. L’AI porta la velocità. L’umano porta il contesto. Il risultato è un processo che non perde flessibilità rispetto a prima, ma guadagna una velocità che prima non era nemmeno immaginabile.

Non stai automatizzando le decisioni. Stai automatizzando tutto il lavoro di preparazione che ci sta attorno.


Il gestionale agentico in azione: altri scenari

Mail complessa: 2 email + 1 ordine

Un’unica mail con due richieste distinte: “Mandatemi il riepilogo delle fatture aperte, e aggiungetemi anche un ordine bozza per la linea abbigliamento.”

L’agente AI analizza la mail, elenca esplicitamente le due richieste, le esegue in sequenza: 12-15 tool call, due email di risposta scritte e salvate, un ordine bozza creato. Tutto visibile nel log dei tool nella chat, tutto tracciabile, tutto dentro il gestionale. Un operatore che gestisce la stessa mail a mano (aprire le fatture, scrivere il riepilogo, creare l’ordine, scrivere due email distinte) impegna facilmente venti o trenta minuti. Qui siamo sotto i due minuti.

Recupero crediti con ragionamento

“Per i clienti con fatture scadute da più di 30 giorni, calcola un indice di urgenza e pianifica gli appuntamenti di sollecito.”

L’indice di urgenza (importo x giorni di ritardo, con un fattore diverso per i clienti storici) non esiste nel database. L’AI lo calcola, ordina i clienti per priorità e crea gli appuntamenti con titoli differenziati in base al profilo di rischio. Fatto in pochi secondi su tutti i clienti morosi. A mano, estrarre la lista, calcolare l’indice per ciascuno, aprire l’agenda e pianificare ogni appuntamento richiede almeno mezz’ora, e si fa raramente proprio per questo.


DMVCFramework: il vantaggio strutturale

Definire un tool: annotazione, implementazione, registrazione

Definire un tool si riduce ad annotare la firma della funzione:

type
  TMyTools = class(TMCPToolProvider)
  public
    [MCPTool('reverse_string', 'Reverses a string')]
    function ReverseString(
      [MCPParam('The string to reverse')] const Value: string
    ): TMCPToolResult;

    [MCPTool('concat_strings', 'Concatenates two strings with a separator')]
    function ConcatStrings(
      [MCPParam('First string')] const A: string;
      [MCPParam('Second string')] const B: string
    ): TMCPToolResult;
  end;

Il framework scopre tutto via RTTI, genera lo schema JSON, registra i tool nel server MCP e li rende disponibili sia all’agente AI embedded sia a qualsiasi client esterno. Nessun file di configurazione, nessun XML, nessuna registrazione manuale.

Per un ERP reale il pattern è identico, cambiano solo i nomi e la business logic:

[MCPTool('create_order', 'Creates a new order for the specified customer')]
function CreateOrder(
  [MCPParam('Customer ID')] const CustomerID: Integer;
  [MCPParam('Discount percentage (0-100)')] const Discount: Double
): TMCPToolResult;

Non devi imparare un nuovo framework. Non devi riscrivere la business logic. Devi solo decidere quali funzionalità rendere accessibili all’AI e annotarle.

Il bridge: da REST a MCP senza toccare una riga

Se hai già un’applicazione DMVCFramework con controller REST in produzione, c’è un percorso ancora più diretto: il bridge MCP, ispirato al meccanismo analogo di FastMCP. Hai un controller come questo:

[MVCPath('/api/books')]
TBooksController = class(TMVCController)
public
  [MVCPath]
  [MVCHTTPMethod([httpGET])]
  [MVCDoc('Returns the list of all books')]
  procedure GetBooks;

  [MVCPath('/search')]
  [MVCHTTPMethod([httpGET])]
  [MVCDoc('Searches books by title keyword. Use limit to cap results (default 10)')]
  procedure SearchBooks(
    const [MVCFromQueryString('q')] q: string;
    const [MVCFromQueryString('limit', '10')] limit: Integer
  );
end;

Per esporre tutto come MCP server basta una chiamata nel Web Module:

TMCPServer.Instance.RegisterFromEngine(Engine, 'http://localhost:8080');

Zero modifiche al controller. Zero codice di wrapping. Le tue API diventano tool dell’agente AI nel tempo che ci vuole per aggiungere una riga.

⚠️ Nota sul bridge

Questo vale anche nel mondo FastMCP: il bridge è uno strumento di bootstrap, non una soluzione definitiva per la produzione. I modelli AI ottengono risultati significativamente migliori con tool progettati e curati ad hoc: descrizioni pensate per guidare il ragionamento del modello, parametri ridotti all'essenziale, nomi che rispecchiano l'intenzione e non la struttura HTTP. Il bridge ti fa partire subito e valutare le possibilità in pochi minuti; il passo successivo è rifinire i tool con intenzione.

Man-in-the-loop: non una limitazione, una scelta

C’è una conversazione che sento spesso quando presento queste demo:

“Ma se l’AI può creare ordini, modificare il database, mandare mail: chi controlla che non faccia cose sbagliate?”

La risposta è: tu, by design.

Ogni tool che esponi è codice Delphi tuo. Puoi far sì che create_order crei sempre l’ordine in bozza, richiedendo una conferma esplicita prima della conferma definitiva. Puoi usare ask_user ogni volta che l’AI deve scegliere tra alternative. Puoi applicare tutte le stesse regole di autorizzazione che già hai nel gestionale, perché il tool è eseguito nel contesto della sessione utente corrente.

L’AI non bypassa le tue regole di business. Le esegue. La differenza è che ora puoi orchestrarle in linguaggio naturale.


🎤 ITDevCon 2026 Spring Edition, 8 maggio - Roma

Tutto quello che hai letto in questo post (le demo, il codice, l’architettura) lo mostrerò dal vivo alla prossima ITDevCon 2026 Spring Edition, in presenza l’8 maggio 2026 a Roma. La Spring Edition, a differenza dell’edizione principale autunnale, si svolge solo in italiano.

Vedremo insieme:

  • Il loop agentico in azione: dalla mail all’ordine in tempo reale
  • Come progettare tool MCP che l’AI usa bene (descrizioni, parametri, risultati)
  • Il tool ask_user e il pattern man-in-the-loop nella pratica
  • Come aggiungere l’agente AI a un’applicazione DMVCFramework esistente
  • Architettura dual-mode: agente embedded + server MCP per client esterni
  • Demo dal vivo con il codice sorgente aperto

Se stai pensando di portare l’AI nel tuo gestionale Delphi, questa sessione è il punto di partenza più diretto che puoi trovare. Registrati su itdevcon.it.


📚 Corso dedicato in arrivo: MCP e Agentic AI con Delphi

Per chi vuole andare in profondità con un percorso strutturato, sto preparando un corso dedicato su MCP e Agentic AI con Delphi. Sarà disponibile a breve su bit Time Professionals.

Il corso coprirà:

  • Fondamenti del protocollo MCP e dell’agentic loop
  • Progettazione di tool provider efficaci per sistemi gestionali reali
  • Gestione del man-in-the-loop: quando l’AI deve fermarsi e chiedere
  • Deployment, sicurezza e performance in ambienti di produzione
  • Scenari avanzati: multi-tool orchestration, gestione errori, logging

Oltre alla formazione, bit Time Professionals offre anche consulenze specializzate per aiutare le aziende a integrare concretamente l’AI nei propri sistemi. Stiamo già lavorando con aziende in tutto il mondo per portare le capacità agentiche nei loro applicativi esistenti (Delphi, Python, C# e non solo), dall’analisi delle opportunità all’implementazione in produzione. Se hai un progetto specifico in mente, contattaci.

Restate sintonizzati: i dettagli del corso saranno annunciati nelle prossime settimane.


Aggiungi un agente AI al tuo gestionale Delphi: inizia oggi

Il progetto è open source, licenza Apache 2.0.

Pagina del progetto e documentazione


Il tuo gestionale Delphi ha già tutto il valore. I dati ci sono. La business logic c’è. Le regole ci sono.

Mancava solo un agente AI che vivesse dentro di esso: capace di capire il linguaggio naturale, orchestrare i tool, rispettare le regole di business e fermarsi a chiedere quando serve. Non un MCP server passivo in attesa di istruzioni da fuori. Un’applicazione agentica, a tutti gli effetti.

Ora c’è.


Comments

comments powered by Disqus