aimcpsviluppatoresicurezza

Lascia che la tua IA invii segreti senza darglieli.

Come il MCP di PrivateNote consegna file via email, Slack, Discord e WhatsApp — senza che il modello li legga

Aggiornato 11 settembre 20267 minuti di letturaPrivateNote.ai

Il tuo assistente può inviare oggi un contratto, una password o un CSV. Non dovrebbe dover leggere quei file per farlo. Passa percorsi locali al MCP di PrivateNote e metti solo un link che si autodistrugge nel canale che già usi.

Punti chiave

  • Passa percorsi di file, non i byte: l’MCP locale cifra così il modello non ha bisogno del payload.
  • Approvi un’anteprima che vincola byte esatti, opzioni e destinazione. Creare una nota non è il permesso di inviarla.
  • Email, Slack, Discord e WhatsApp devono portare solo l’URL PrivateNote dopo sendAuthorized — mai il file. Lascia spento il one-shot se l’agente può anche inviare messaggi.
  • L’URL decifrabile è una capability al portatore che l’agente può vedere dopo la conferma. Non registrarla. Dopo la consegna, controlla l’apertura o revoca una nota non aperta.

La parte utile di un assistente IA non è che possa leggere un contratto, un file di password o un export clienti. La parte utile è che possa far arrivare quel payload alla persona giusta, sul canale in cui già vive, senza trasformare l’assistente in una copia del segreto.

È il lavoro di ogni giorno: mandare un PDF a un cliente via email, lasciare una password di staging a un collega su Slack, consegnare un token di bot a un moderatore su Discord, o mettere un login monouso in un thread WhatsApp. Le persone lo fanno già incollando. Gli agenti rendono l’incolla più veloce — e la fuga più ampia, perché il segreto finisce anche nel contesto del modello, nella trascrizione della chat e in ogni log che l’host conserva.

Il server MCP di PrivateNote è costruito per la separazione opposta. L’agente orchestra. Un processo locale gestisce il segreto. Tu approvi il file esatto e la destinazione. Email, Slack, Discord e WhatsApp portano solo un link. Al modello si dice di passare percorsi di file, non byte. La cifratura avviene sulla tua macchina dopo la conferma. Quello che torna è un URL il cui frammento tiene la chiave — lo stesso modello del link segreto monouso dell’app web. Creare una nota non è il permesso di inviarla.


Il lavoro è inviare, non sapere

La maggior parte dei consigli «IA + segreti» assume ancora che il modello debba vedere la credenziale per aiutare. È vero se vuoi che il modello spieghi il file, riscriva il contratto o debugghi la chiave. Non è vero se vuoi che lo consegni.

La consegna è un problema di logistica: quale file, quale persona, quale canale, quanto deve durare l’accesso, se deve bruciare dopo la prima vista. Nessuna di queste decisioni richiede il testo in chiaro. Richiedono uno strumento che possa leggere un percorso locale, cifrare e restituire un handle che il resto dello stack ha il permesso di vedere.

È a questo che serve privatenote-mcp. Gli host che rispettano le istruzioni MCP ricevono, in ordine: se l’utente ha nominato un file locale, passa il percorso assoluto; non aprirlo, non farne cat e non riassumerlo; chiama create_private_note (un’anteprima); aspetta la tua approvazione; poi chiama confirm_private_note. Solo dopo un altro strumento può inviare l’URL — e solo alla destinazione che hai approvato.

La regola

Se l’assistente può completare il compito con un percorso, non deve completarlo con il contenuto. Incollare nel prompt è l’ultima risorsa — dopo che il segreto è già nella chat.

Perché i canali che già usi tengono la copia sbagliata

Email, Slack, Discord e WhatsApp sono bravi nella conversazione. Sono pessime casseforti. La cifratura in transito, anche end-to-end, non decide per quanto resta una copia ricercabile sui dispositivi, negli export del workspace, nei backup cloud o nelle anteprime delle notifiche. È la stessa distinzione di perché l’email è il posto peggiore per i segreti e perché i segreti non vanno mai incollati in chat.

  • L’email conserva gli allegati in entrambe le caselle, sui server di posta, nei legal hold e in «cerca in tutta la posta». Inoltrare moltiplica copie che poi non puoi revocare.
  • Slack è indicizzato dal workspace. Admin, export di compliance e funzioni IA che riassumono i canali possono ritrovare una password mesi dopo.
  • Discord sembra effimero su un server affollato. Non lo è. Pin, ricerca e DM tengono token di bot e segreti da admin accanto ai meme.
  • WhatsApp è spesso l’unico canale che un fornitore o un cliente aprirà davvero. È anche una casella di famiglia: gli screenshot viaggiano, i computer collegati si sincronizzano e i backup sopravvivono al lavoro.

Il punto non è abbandonare quegli strumenti. Il punto è smettere di metterci il payload. Restano la busta. La nota è la lettera. I destinatari continuano a non aver bisogno di un account PrivateNote: aprono il link in un browser, come qualsiasi altro URL che già gli mandi.


La divisione in tre

RuoloCosa può vedereCosa non deve vedere
Agente IA (Cursor, Claude, Codex)Chi, quale percorso, quale canale, scadenza, burn-after-read. Dopo la tua conferma: l’URL decifrabileByte del file, password, corpo della nota. Non deve inviare l’URL finché non hai approvato quella destinazione
MCP PrivateNote (processo Node locale)I file su disco, solo per la cifraturaNiente che poi restituisca in chiaro
Email / Slack / Discord / WhatsAppL’URL PrivateNote (e un oggetto leggibile)L’allegato, la credenziale, la passphrase

L’MCP non invia l’email né il messaggio Slack al posto tuo. Creare una nota non è autorizzazione a inviarla. Dopo che approvi un’anteprima che nomina canale e destinatario esatti, il risultato può includere sendAuthorized: true — allora uno strumento di mail o chat può inviare solo l’URL a quella destinazione. Se nessuna destinazione è stata approvata, sendAuthorized è false e l’agente deve darti l’URL da incollare, non attivare un altro strumento.

L’URL è una capability al portatore: chiunque la abbia può aprire la nota. L’host MCP attuale restituisce secureUrl nel risultato dello strumento, quindi l’agente può osservare il link anche se non può osservare i byte del file. Non registrarla, non committarla, non copiarla in strumenti estranei. Trattala come il segreto.

Il resto del payload restituito è piccolo: noteId, expiresAt, burnAfterReading e, quando serve, passwordProtected e attachedFileNames. I nomi dei file sono metadati, non contenuti — evita comunque di mettere un segreto nel nome.


Cosa fa davvero l’MCP sulla tua macchina

Quando l’agente chiama create_private_note, un processo Node.js locale — non il modello — rende canonico il percorso, lo controlla contro l’allowlist del workspace, calcola l’hash del file e ti mostra un’anteprima. Non restituisce ancora un URL decifrabile. Dopo la tua approvazione, confirm_private_note riapre lo stesso file, verifica dispositivo, inode, dimensione e SHA-256, e cifra quei byte. Se il file è cambiato, la conferma fallisce; l’agente deve ricominciare. Il testo cifrato AES-256-GCM viene inviato in POST a PrivateNote. La chiave di decifratura sta nel frammento dell’URL (#…). I browser non inviano i frammenti ai server. L’API conserva un blob cifrato. Senza il frammento, quel blob è rumore.

Preferisci i parametri di percorso così l’host non deve mai mettere il segreto negli argomenti della chiamata costruiti dal modello:

  • contentFilePath — file UTF-8 che diventa il corpo della nota (una password, un codice di recupero, un’istruzione breve).
  • filePath / filePaths — allegati locali (PDF, CSV, immagini). Richiede sign_in. Massimo combinato di 20 file.
  • passwordFilePath — la prima riga di un file locale diventa la passphrase di rivelazione (wrap Argon2id). Invia quella passphrase fuori banda, mai nello stesso messaggio del link.
  • content e password — ultima risorsa, solo se l’utente ha già incollato il segreto in chat e non esiste un file.

La policy predefinita è una consegna, non un archivio: burnAfterReading è true, expiresIn è 24 ore per default. Più corto è meglio se il destinatario aspetta dall’altra parte di Slack. La vista multipla (burnAfterReading: false) richiede un account Premium. Allegati, verifica del destinatario, notifiche di apertura e list/revoke richiedono una sessione autenticata; gate e avvisi richiedono anche un piano a pagamento.

I percorsi sono vincolati. Di default si possono leggere solo file sotto il workspace (la directory di lavoro del processo MCP). Imposta PRIVATENOTE_MCP_ALLOWED_ROOTS se devi aggiungere cartelle. Chiavi SSH, directory di credenziali cloud e il file di sessione MCP sono sempre bloccati, anche se consenti $HOME o /.


Approvi la consegna esatta — non un nome di percorso

Un agente che può creare un link decifrabile e inviare email o Slack è un confused deputy: potrebbe cifrare il file sbagliato, o mandare il link giusto alla persona sbagliata, in un solo turno. Il default di PrivateNote è che tu autorizzi tre cose insieme: i byte esatti del file, le opzioni esatte della nota (scadenza, burn-after-read) e la destinazione esatta.

L’anteprima deve mostrare la destinazione quando l’invio è richiesto, per esempio «Send via: Email / Recipient: alice@example.com». Approvare quello non deve mai autorizzare un altro indirizzo o un altro canale Slack. confirm_private_note accetta solo confirmationId. L’agente non può sovrascrivere percorso, destinatario, canale, scadenza o politica di distruzione in fase di conferma.

Creare una nota senza destinazione restituisce sendAuthorized: false. È voluto. Un link in chat resta sensibile — ma non è il permesso di spedirlo per email.

Non attivare il one-shot se l’agente può inviare

PRIVATENOTE_MCP_ALLOW_ONE_SHOT salta l’anteprima umana. L’agente non può accenderlo come argomento dello strumento, e cambiare l’ambiente in seguito non ha effetto finché non riavvii il server MCP. Lascialo spento. Accenderlo mentre lo stesso host può inviare email, Slack, Discord o file lascia che il modello crei un link decifrabile e lo spedisca in un passo — compreso il file sbagliato o il destinatario sbagliato. L’allowlist dei percorsi vale ancora; non sostituisce la tua approvazione.

Collegalo una volta

Serve Node.js 18+. Dopo il salvataggio, riavvia il client MCP perché carichi schemi e istruzioni degli strumenti attuali. Le note di installazione complete sono sulla pagina di integrazione MCP.

~/.cursor/mcp.json · Claude Desktop usa lo stesso blocco
{
  "mcpServers": {
    "privatenote": {
      "command": "npx",
      "args": ["-y", "privatenote-mcp"]
    }
  }
}

Codex CLI: codex mcp add privatenote -- npx -y privatenote-mcp. Scrive ~/.codex/config.toml. Le note specifiche di Codex sono in Usare PrivateNote con OpenAI Codex.

Self-hosted: imposta PRIVATENOTE_API_BASE_URL e PRIVATENOTE_WEB_ORIGIN nel blocco env dell’MCP così il testo cifrato non lascia la tua infrastruttura. Opzionalmente PRIVATENOTE_MCP_ALLOWED_ROOTS. Non aggiungere PRIVATENOTE_MCP_ALLOW_ONE_SHOT salvo un host di automazione molto ristretto e senza strumenti di invio.


Uso quotidiano: email

L’email è ancora il modo in cui le aziende mandano contratti, NDA, fatture con dati bancari ed export clienti. Il modo in cui fallisce è allegare il file. La casella tiene poi una copia decifrabile per anni, anche dal lato del destinatario, nelle tracce BCC e nell’e-discovery.

Lo schema MCP: l’agente conosce già l’indirizzo di Alice e i due PDF locali. Non deve aprire quei PDF. Fa il sign-in se serve, chiama create_private_note con filePaths, sendChannel e sendRecipient così l’anteprima nomina Alice, aspetta la tua approvazione, poi confirm_private_note. Solo allora lo strumento di posta può mettere solo secureUrl nel corpo. Se usi la verifica del destinatario, chi legge deve dimostrare di possedere l’indirizzo prima che la nota si sblocchi — quel gate non invia la mail; lo fa ancora il tuo strumento di posta.

Quello che dici
Invia questi due file ad Alice via email.
Proteggili con la password in /absolute/path/client-password.txt.
Non esporre file né password al modello:
/absolute/path/contract.pdf
/absolute/path/nda.pdf
  • L’agente chiama sign_in se non c’è una sessione del plugin, poi create_private_note con filePaths, passwordFilePath, sendChannel: "email" e sendRecipient. Approvi l’anteprima. Poi confirm_private_note.
  • L’oggetto può dire «pacchetto contratto» — non deve citare clausole del PDF.
  • Invia la passphrase in un secondo messaggio, una chiamata o una condivisione del password manager — mai nella stessa mail del link. Vedi come condividere una password in modo sicuro.
  • Per un destinatario nominato su un piano a pagamento: requireRecipientVerification: true e recipientEmail: "alice@example.com".

È lo stesso modello di consegna di inviare documenti sensibili in modo sicuro, tranne che l’assistente può eseguirlo senza diventare lettore del pacchetto.


Uso quotidiano: Slack

Slack è dove succede la reperibilità. Password del database di staging, token di deploy e «il CSV della finanza» finiscono in un thread perché tutti sono già lì. La ricerca del workspace trasforma quel deposito in una wiki interna permanente di segreti.

Chiedi una consegna basata sul percorso e una miccia corta. Quindici minuti bastano se il collega è online. Brucia dopo la lettura così un hit di ricerca successivo è un link morto, non una credenziale viva. Tratta l’URL come il segreto: non postarlo in un canale pubblico; usa un DM o un canale privato dedicato.

Quello che dici
Manda a Mark la password del database da /absolute/path/secrets/db-password.txt su Slack.
Lettura unica, scade tra 15 minuti.
Non leggere il file nella chat.
  • create_private_note con contentFilePath, expiresIn: "15m", burnAfterReading: true e la destinazione Slack vincolata in anteprima. Approva, poi confirm_private_note.
  • Se Slack è collegato come altro strumento MCP, l’agente può postare solo secureUrl alla destinazione approvata dopo che sendAuthorized è true. Altrimenti ti dà l’URL da incollare.
  • Dopo che Mark l’ha aperto, ruota la password se era un segreto di staging condiviso — la nota ha ridotto le copie rimaste; non ha reso unica una credenziale condivisa.

Uso quotidiano: Discord

Discord è il canale ops predefinito di molte community di prodotto e team vicini al gioco. Token di bot, chiavi Cloudflare e «ecco il foglio degli utenti segnalati» vengono incollati nei DM dei mod perché Discord è dove stanno i mod.

Un messaggio Discord resta un messaggio archiviato. I membri del server con il ruolo giusto, i backup dei dispositivi e la ricerca di Discord lo terranno. Lo schema MCP è identico a Slack: cifra il file o il token in locale, metti il link nel DM, imposta una scadenza breve. Se il token era già stato incollato prima sullo stesso server, ruotalo — avvolgere un segreto già trapelato non annulla la fuga.

Quello che dici
Manda in DM al responsabile della community il token del bot in /absolute/path/secrets/discord-bot.txt
e l’export di moderazione in /absolute/path/reports/export.csv.
Lettura unica, 1 ora, non aprire quei file.
  • Gli allegati richiedono sign_in. Una nota solo token può usare contentFilePath senza sessione.
  • Vincola la destinazione Discord in anteprima, approvala, poi confirm_private_note. Solo allora uno strumento Discord può inviare l’URL.
  • Preferisci un DM utente a un incolla nel canale mod. Un «canale privato» è comunque una trascrizione.
  • Se l’export include dati personali, aggiungi un file passphrase e comunica la passphrase al responsabile in una chiamata vocale.

Uso quotidiano: WhatsApp

WhatsApp è il canale che usi quando l’altra persona non entra su Slack e non controllerà l’email fino a lunedì. Un fornitore, un assistente di family office, un cliente al telefono. La cifratura end-to-end è reale. Lo è anche la persistenza: la chat è un registro, spesso su più dispositivi, spesso in backup.

Non serve che installino PrivateNote. Serve che tocchino un link. Il lavoro dell’assistente è preparare quel link da un file locale che hai già — PDF della fattura, password del Wi-Fi, codice portale monouso — senza leggerlo prima nel thread di Cursor o Claude. Approvi comunque l’anteprima (file esatto e destinazione WhatsApp) prima che confirm_private_note crei l’URL.

Quello che dici
Invia il pacchetto di onboarding in /absolute/path/client/onboarding.pdf
ad Ana su WhatsApp. Brucia dopo la lettura, scade domani.
Non leggere il PDF.

WhatsApp mostra l’anteprima degli URL. Quell’anteprima è la landing di PrivateNote, non il file decifrato. Comunque: non mettere la passphrase nella stessa chat. Se il numero potrebbe essere sbagliato, crea la nota, invia il link e revoca se non l’ha mai aperta. Avvocati e altri mittenti professionali che hanno bisogno di una pagina di rivelazione brandizzata invece di una bolla verde dovrebbero leggere consegna sicura ai clienti per gli studi.


Accedi quando il payload è un file

Le note solo testo da contentFilePath si possono creare senza account, entro gli stessi limiti pubblici del sito. L’allegato è diverso. L’MCP deve chiamare prima sign_in. Si apre una pagina di approvazione nel browser (la concessione è già nell’URL — non c’è un codice da digitare). Dopo che clicchi Approve, l’agente richiama sign_in con pollDeviceCode. La sessione sta in ~/.config/privatenote/mcp-session.json ed è inviata come Authorization: Bearer. Non sostituisce la sessione cookie del sito.

  • L’agente esegue sign_in() — si apre il browser
  • Clicchi Approve sulla pagina PrivateNote
  • L’agente interroga con pollDeviceCode, poi whoami()
  • L’agente chiama create_private_note con percorsi di file (anteprima — ancora nessuna URL)
  • Approvi i file esatti, la scadenza e la destinazione
  • L’agente chiama confirm_private_note, poi tu (o un altro strumento) invii solo secureUrl sul canale umano

whoami mostra l’account connesso. sign_out cancella il file di sessione del plugin. Tratta quel file come una credenziale di questa macchina.

Installa privatenote-mcp in Cursor, Claude Desktop o Codex. L’agente tiene il flusso; il processo locale tiene il segreto.

Apri la guida di setup MCP


La riserva onesta sulla privacy

L’affermazione forte — «l’IA non ha mai visto i byte del file» — regge quando l’host rispetta le istruzioni path-first e non hai mai incollato il payload nel prompt. Non significa che l’agente non possa vedere secureUrl dopo la conferma. Una normale chiamata di tool MCP può ancora esporre gli argomenti all’host. Per questo gli strumenti preferiscono i percorsi: l’argomento è /Users/you/secrets/db-password.txt, non la password.

Se scrivi create a PrivateNote for sk_live_abc123, un provider di modelli cloud può elaborare quella stringa prima che l’MCP parta. PrivateNote continuerà a conservare solo testo cifrato, e Slack riceverà solo un link. Hai migliorato la fuga a valle. Non hai tenuto il segreto fuori dal modello. Per la massima privacy, tieni i segreti nei file (o usa l’estensione VS Code / Cursor così l’editor cifra senza l’agente) e di’ all’assistente il percorso.

  • Non chiedere al modello di «controllare prima il PDF» o di riassumerlo. Questo forza una lettura con un altro strumento.
  • Non mettere la passphrase nello stesso Slack, WhatsApp o email dell’URL.
  • Tratta secureUrl come il segreto. L’agente può vederla nel risultato dello strumento. Non committarla, non registrarla, non incollarla in un canale Discord pubblico.
  • Ricarica il client MCP dopo l’upgrade di privatenote-mcp così istruzioni e schemi restano aggiornati. Lascia spento il one-shot.

Domande frequenti

Il MCP di PrivateNote invia da solo Slack, Discord, WhatsApp o email?

No. Cifra in locale e restituisce un URL più metadati. La consegna usa quello che già usi — un altro server MCP (Gmail, Slack, …) oppure tu che incolli il link. Creare una nota non è il permesso di inviarla. sendAuthorized è true solo se hai approvato quel canale e quel destinatario esatti nell’anteprima.

Perché devo confermare prima che il link venga creato?

La conferma vincola i byte esatti del file, le opzioni della nota e la destinazione. Senza, un agente che ha anche strumenti di mail o chat potrebbe cifrare il file sbagliato o mandare il link giusto alla persona sbagliata in un turno. La modalità one-shot salta questa anteprima. Lasciala spenta, soprattutto se lo stesso host può inviare messaggi o file.

L’agente può vedere l’URL decifrabile?

Sì, nell’host MCP attuale. secureUrl è restituito nel risultato dello strumento così uno strumento di consegna può inviarlo. L’agente non deve comunque vedere i byte del file. Possedere l’URL può sbloccare la nota — trattala come una capability al portatore, non come «il modello non può accedere al segreto».

Il destinatario deve installare qualcosa?

No. Apre il link completo in un browser normale. Non serve un account PrivateNote per rivelare una nota. Può ancora servire una passphrase o la verifica email se hai attivato quei gate.

Posso allegare file senza accedere?

No. Allegati, list/revoke, verifica del destinatario e notifiche di apertura richiedono sign_in. Una nota solo testo da contentFilePath si può creare senza sessione, entro i limiti pubblici.

E se l’assistente legge comunque il file?

Allora il confine di privacy è già rotto per quel turno. Le istruzioni MCP dicono agli host di non farlo. Se il tuo client le ignora, continua a usare l’estensione dell’editor o l’app web, e non puntare l’agente sul file. Puoi comunque inviare l’URL prodotta dall’estensione.

Il burn-after-read ferma gli screenshot?

No. Quando un destinatario legittimo decifra la nota, può copiare, fotografare o ricaricare. Burn-after-read e scadenza riducono le copie rimaste sul servizio e nella cronologia della chat. Non possono cancellare da remoto ciò che qualcuno ha già catturato. Per i documenti, l’accesso ai file in sola lettura su Business riduce il download occasionale; non è un divieto di fotografare.

Lascia che l’agente invii il link. Tieni il file fuori dal modello.

Installa privatenote-mcp, puntalo a percorsi locali e continua a usare email, Slack, Discord e WhatsApp come buste — non come casseforti. Lascia spento il one-shot se lo stesso host può inviare messaggi o file.

PrivateNote on LaunchNest