Un nuovo MCP per connettere Claude e NotebookLM
Un server MCP per connettere Claude e NotebookLM, le sue funzionalità principali riguardano il miglioramento del prompt ed il controllo delle allucinazioni.
Chi segue i miei tutorial sa che ultimamente sto parlando dell’integrazione tra Claude Desktop e NotebookLM tramite un server MCP. Nella terza parte di questa serie ho raccontato un’analisi comparativa di giurisprudenza sull’intelligenza artificiale, con sentenze caricate in NotebookLM e interrogate attraverso Claude Desktop.
La prova ha funzionato, ma il testo generato presentava imprecisioni. Passaggi complessi erano stati semplificati oltre il lecito, alcuni concetti interpretati con una certa libertà non sempre adatta a un contesto professionale.
Eppure la promessa iniziale di questa serie era proprio quella di unire il meglio dei due sistemi. Da una parte le capacità di Claude nell’elaborazione, nella sintesi, nella generazione di output in formati diversi; dall’altra la capacità di NotebookLM di ancorare ogni risposta a documenti specifici. Il problema che stavo incontrando metteva in discussione proprio questa promessa.
Per essere precisi, il testo generato non conteneva errori o distorsioni della realtà, piuttosto c’erano leggere imprecisioni che ho potuto individuare perché conoscevo i casi. In ogni caso il testo finale è corretto perché sono intervenuto a correggerlo con Claude.
La mia soluzione è stata creare una variazione del server MCP esistente, sviluppata per risolvere i problemi trovati. L’ho rilasciata su Github, scaricabile liberamente e gratuitamente, per chi vuole andare subito a vedere il progetto basta cliccare su questo link, nel resto dell’articolo racconto cos’è.
Un circolo vizioso in andata e ritorno
Analizzando cosa stava succedendo mi sono reso conto che il problema non stava in un singolo punto, ma in un circolo vizioso che si sviluppava in due direzioni.
In andata: quando l’utente chiede a Claude di interrogare NotebookLM con una domanda molto semplice come “analizza le sentenze presenti nei documenti” lascia un margine di interpretazione enorme. Claude passa questa richiesta generica a NotebookLM, che fa il suo lavoro rispondendo in modo coerente con la domanda ricevuta. Una domanda semplice produce una risposta semplice, con un livello di dettaglio proporzionato alla genericità della richiesta. NotebookLM non sta sbagliando: sta facendo esattamente quello che gli è stato chiesto.
Nel ritorno la risposta di NotebookLM, già semplificata, arriva a Claude. E Claude fa quello che sa fare: completa, arricchisce, contestualizza. È progettato per essere utile, e “utile” spesso significa integrare le informazioni con conoscenze di background, specie quando le informazioni ricevute sono approssimative.
Il risultato finale è un testo che mescola contenuto documentale e conoscenza generale, dove diventa difficile distinguere cosa viene dai documenti e cosa dalla “cultura generale” di Claude. In molti casi questo comportamento va bene. Ma se sto analizzando documenti legali voglio sapere cosa dicono quei documenti, non cosa Claude pensa che dovrebbero dire. Se sto facendo fact-checking su una ricerca mi serve la citazione esatta, non una parafrasi abbellita.
Per quanto possa sembrare contraddittorio dopo quello che ho detto, l’MCP originale di Gérôme Dexheimer non ha difetti ma semplicemente non interviene sulla formulazione delle richieste. Se un utente strutturasse bene la propria domanda, specificando vincoli e formato di output, otterrebbe risultati migliori anche con quella versione. Il problema non è il tool, è che la qualità del risultato dipende interamente dalla disciplina dell’utente nel formulare richieste precise ogni volta.
Rendere sistematica una buona pratica
Se il problema nasce da richieste troppo generiche, la soluzione è fare in modo che le richieste siano sempre strutturate, indipendentemente da come l’utente le formula.
C’è differenza tra chiedere a un assistente
- raccontami cosa dice il contratto
e chiedergli
- elenca le clausole del contratto citando il numero di pagina per ciascuna, e se una clausola standard non è presente segnalalo esplicitamente
La seconda domanda non lascia spazio all’interpretazione creativa.
Una domanda strutturata non è solo più lunga. È una domanda che contiene vincoli operativi espliciti: usare solo le informazioni presenti nei documenti, citare le fonti per ogni affermazione, dichiarare esplicitamente quando un’informazione non è disponibile.
In contesti professionali come l’analisi legale, la ricerca accademica o il fact-checking, questa fedeltà alle fonti (in gergo tecnico si parla di source fidelity) non è un optional ma il requisito minimo per considerare affidabile un output. Un utente disciplinato potrebbe ottenere questo risultato anche con l’MCP originale, formulando ogni volta richieste precise e complete. Ma non si riesce sempre a essere disciplinati, e non va bene uno strumento “abbastanza fedele quando mi ricordo di essere preciso“.
Lo sviluppo del mio fork è nato proprio dal desiderio di automatizzare una buona pratica che altrimenti dipenderebbe dalla disciplina dell’utente, non è un ridurre le capacità di Claude, ma un indirizzarle automaticamente.
Come funziona la strutturazione automatica
La soluzione che ho sviluppato si chiama notebooklm-mcp-structured, è un fork del server MCP notebooklm-mcp di Gérôme Dexheimer.
L’idea si basa sul funzionamento del protocollo MCP, ogni tool ha una descrizione che Claude legge prima di utilizzarlo. Normalmente questa descrizione spiega cosa fa il tool e quali parametri accetta. Nel mio fork la descrizione del tool ask_question contiene anche istruzioni dettagliate su come strutturare le domande prima di inviarle a NotebookLM.
Quando un utente chiede qualcosa, Claude legge queste istruzioni che lo portano a trasformare la domanda semplice in un prompt strutturato. Il server MCP non fa nulla di speciale: passa la domanda a NotebookLM così come l’ha ricevuta, ma prima guida Claude nel formulare la domanda giusta. Le stesse istruzioni sono pensate anche per guidare Claude nella successiva fase di elaborazione delle informazioni ricevuto in risposta da NotebookLM, soprattutto per limitare la tendenza di Claude a completare le risposte.
Per una completa descrizione tecnica rimando alla pagina su Github, il link è più avanti, qui mostro alcune funzionalità.
Nel test su DaVinci Resolve ho fatto volutamente una richiesta generica
Buongiorno Claude, dal notebook dedicato a DaVinci 20 puoi elencare le funzionalità basate su AI?
proprio per verificare che il sistema strutturasse autonomamente la domanda. La query che Claude ha generato specificava il compito, i vincoli operativi, il formato di output richiesto per ogni funzionalità trovata, e le istruzioni per gestire le informazioni mancanti. Tutto questo senza che io dovessi scriverlo.
ISTRUZIONI PER LA RISPOSTA
COMPITO: Identifica e cataloga tutte le funzionalità basate su intelligenza artificiale presenti nella documentazione di DaVinci Resolve 20
VINCOLI OPERATIVI
Usa ESCLUSIVAMENTE informazioni esplicite nei documenti caricati
NON aggiungere conoscenze esterne su funzionalità AI di DaVinci Resolve
Se un’informazione non è presente, dichiara: “[NON PRESENTE NEI DOCUMENTI]”
FORMATO OUTPUT RICHIESTO Per ogni funzionalità AI trovata:
NOME FUNZIONALITÀ: [nome ufficiale]
DESCRIZIONE: [cosa fa, basata sui documenti]
CONTESTO D’USO: [in quale fase/pannello di DaVinci viene utilizzata]
EVIDENZE: “citazioni dirette dai documenti” [Fonte: sezione/pagina]
CITAZIONI
Ogni affermazione DEVE includere la fonte
Usa citazioni dirette tra virgolette dove possibile
GESTIONE INFORMAZIONI MANCANTI
Se una funzionalità AI non è documentata nei file caricati, dichiaralo esplicitamente
Il sistema mantiene anche il contesto delle conversazioni con l’uso di sessioni persistenti. Quando si fanno più domande sullo stesso argomento i follow-up possono fare riferimento alle risposte precedenti senza dover ripetere ogni volta il contesto, la differenza tra interrogare un archivio e conversare con qualcuno che ricorda cosa avete già discusso.
Le istruzioni di strutturazione coprono diversi aspetti. I vincoli operativi specificano che la risposta deve basarsi esclusivamente sulle informazioni presenti nei documenti caricati, senza aggiungere conoscenze esterne. La gestione delle informazioni mancanti richiede di dichiarare esplicitamente quando un dato non è presente, invece di inferirlo.
È possibile anche interrogare più notebook come una libreria, Claude ricorda le informazioni ricevute dal primo e questo permette di confrontarle con quelle ricevute dai successivi notebook interrogati. Questa funzionalità non è ancora presente in NotebookLM.
C’è anche un sistema di adattamento al tipo di domanda: una richiesta di confronto produce un output organizzato per elementi, somiglianze, differenze e sintesi; una richiesta di elenco produce voci numerate con descrizioni e fonti; una richiesta di analisi produce soggetto, osservazioni, evidenze e conclusioni.
Claude a riconoscere la lingua dell’utente e adattare le istruzioni, sa distinguere una richiesta di confronto da una richiesta di elenco, sa gestire casi ambigui, sa adattarsi al contesto della conversazione.
Un paio di note su NotebookLM:
Non gestisce bene le linee decorative all’inizio dei prompt. Sequenze di caratteri come righe di uguale o trattini causano timeout. Le istruzioni specificano quindi di usare solo intestazioni in testo semplice.
Da poco tempo NotebookLM salva le chat, questo vuol dire che è possibile aprire il notebook in NotebookLM per vedere sia la richiesta di Claude passata dal MCP, sia la risposta di NotebookLM che è stata inviata indietro verso l’MCP, che contiene tutti i link di riferimento interni. Questo permette di verificare sia l’effettiva richiesta arrivata a NotebookLM, sia l’effettiva risposta rimanda a Claude.
Un caso concreto: la documentazione di DaVinci Resolve
La prova di notebooklm-mcp-structured si può valutare nel quarto articolo della serie, la creazione di materiale didattico sulle funzionalità AI di DaVinci Resolve 20, partendo dai sette manuali ufficiali caricati in NotebookLM. Quel progetto è stato il primo test reale del fork.
Nello sviluppo della chat non sono dovuto intervenire per correggere imprecisioni, le interazioni ci sono state solo per raffinare il materiale prodotto. Questo ha velocizzato tutto il processo, con un testo di qualità già all’inizio dell’interazione.
Dove trovare lo strumento
Il progetto è open source, scaricabile liberamente e gratuitamente dalla pagina del progetto su GitHub è questa.
È anche disponibile il manuale.
L’installazione segue lo standard dei server MCP per Claude Desktop; la documentazione completa è nel repository.
Per utilizzarlo servono Claude Desktop configurato per i server MCP e un account Google per accedere a NotebookLM. La prima configurazione richiede qualche minuto; il README guida passo passo attraverso il processo.
Il progetto originale di Gérôme Dexheimer resta il riferimento per chi cerca un’integrazione Claude-NotebookLM senza la componente di strutturazione. Il mio fork aggiunge uno strato specifico per casi d’uso dove la fedeltà alle fonti è prioritaria.
Limiti da conoscere
La strutturazione delle domande migliora significativamente la fedeltà alle fonti, ma non la garantisce al cento per cento. I modelli linguistici possono comunque commettere errori, e la validazione umana resta necessaria per output critici. Lo strumento riduce il lavoro di verifica, non lo elimina.
Il sistema è stato testato estensivamente con l’italiano. Per altre lingue il design dovrebbe garantire un funzionamento analogo (Claude gestisce nativamente la traduzione delle istruzioni) ma non ho dati di test diretti.
NotebookLM ha limiti di quota: cinquanta query giornaliere per account gratuiti, di più per account a pagamento.
Chi volesse contribuire con miglioramenti, correzioni o test in altre lingue è benvenuto, per questo il codice è rilasciato sotto licenza MIT.
Chiudere il cerchio
Quando ho iniziato a esplorare l’integrazione tra Claude e NotebookLM l’obiettivo era capire se fosse possibile combinare la potenza conversazionale di Claude con la capacità di NotebookLM di ancorare le risposte a documenti specifici.
La risposta è sì, ma con una precisazione importante: la combinazione funziona bene solo quando Claude sa come formulare le domande. E Claude sa come formulare le domande quando qualcuno gli spiega come farlo.
I modelli linguistici sono strumenti potenti ma generici. La loro efficacia in contesti specifici dipende da quanto precisamente riusciamo a comunicare cosa ci serve. A volte basta una buona formulazione della richiesta, a volte serve costruire un’infrastruttura che guidi sistematicamente quella formulazione.
Questo articolo è una tappa del Percorso Claude e NotebookLM via MCP, che lo unisce ad altri articoli del blog su questo tema.
