Sistec · wiki-LLM · pattern Karpathy · proposta di sviluppo

sistec-llm-wiki: la wiki aziendale per l'AI

Un'analisi approfondita del pattern LLM-wiki di Karpathy, della demo funzionante in sistec-llm-wiki, della proposta operativa per portarla da demo a strumento di produzione, e dell'integrazione con Microsoft 365 via MCP per ingest automatico da Teams, OneNote e OneDrive.

wiki-LLM · pattern Karpathy da demo a produzione 2026-07-23
Autore
Marco Manfrin · Sistec · AI expert and early adopter, Developer
Versione
1.3 · indice di revisione, incrementato a ogni revisione
Ultima revisione
2026-08-05 · revisionato da Marco Manfrin @Sistec

Documento a monte

Questo documento è il §10 di Adozione Claude & Claude Code in Sistec, sviluppato in un documento autonomo. Leggi prima l'index per il contesto: ciclo agentico, skill, CLAUDE.md, subagent e il marketplace di plugin. Qui si approfondisce solo la wiki-LLM.

§1

Cos'è la wiki-LLM

La wiki-LLM è un pattern di condivisione della conoscenza reso celebre da Andrej Karpathy (gist ufficiale). L'idea centrale è che l'AI non ha bisogno di un'infrastruttura custom per accedere alla conoscenza aziendale: le servono solo file di testo in una cartella che tutti possono sincronizzare.

Il principio

«Le AI leggono file di testo. Metti la conoscenza in file di testo in una cartella condivisa. Il resto lo fa l'AI con ingest e retrieval.»

Il pattern si contrappone al modello shared-ai (collector / lease Graph-ETag / Orchestrator) che richiede un'infrastruttura distribuita custom da progettare, costruire e verificare. La wiki-LLM è l'alternativa zero infrastruttura: si appoggia a OneDrive/NAS per la sincronizzazione e all'AI stessa per l'indicizzazione e il recupero.

shared-ai (scartato)wiki-LLM (adottato)
Infrastrutturacollector, lease Graph-ETag, OrchestratorOneDrive / NAS + cartella di file .md
Sincronizzazioneprotocollo custom da progettaregià risolta da OneDrive
Canonicalizzazionemutex distribuito, unico scrittoreil retrieval dell'AI al momento della domanda
Manutenibilitàpezzi custom da verificare e far evolverezero: solo file di markdown
Accesso AIvia API del collectorlettura diretta dei file di testo
§2

La demo: sistec-llm-wiki

Esiste già una demo funzionante in sistec-llm-wiki. La struttura della cartella dimostra il pattern in azione:

// struttura della demo (reale)
sistec-llm-wiki/
├── raw/                          // fonti immutabili: chiunque può aggiungerne, nessuno le modifica
│   ├── assets/                   // immagini e allegati
│   └── 2026-06-17-kickoff-progetto-atlas.md
├── wiki/                         // pagine generate e mantenute dall'LLM
│   ├── overview.md               // sintesi globale: stato e contesto in evoluzione
│   ├── concetti/
│   ├── decisioni/
│   ├── fonti/                    // un riassunto 1:1 per ogni fonte in raw/
│   ├── organizzazioni/
│   ├── persone/
│   └── progetti/
├── CLAUDE.md                     // LO SCHEMA: convenzioni + operazioni (ingest/query/lint)
├── index.md                      // catalogo di tutto il wiki, aggiornato a ogni ingest
└── log.md                        // registro cronologico append-only

Il flusso è lineare, e tutta la configurazione sta in un unico file: il CLAUDE.md della cartella, che definisce ruoli, convenzioni (frontmatter, wikilink, nomi file) e le tre operazioni — ingest, query, lint. Chi lancia Claude Code o opencode lì dentro parte già configurato: niente skill, niente codice.

  1. Deposito. Chiunque mette una fonte in raw/ — verbali, specifiche, decisioni, appunti. Nessun formato imposto: markdown, PDF, txt, immagini in raw/assets/.
  2. Ingest. Su richiesta dell'operatore, l'AI esegue l'operazione definita in CLAUDE.md: legge la fonte, scrive il riassunto in wiki/fonti/, aggiorna le pagine sintetiche toccate (persone, progetti, decisioni, concetti, organizzazioni), aggiorna index.md e appende a log.md.
  3. Retrieval. Alla domanda di un operatore, l'AI parte da index.md, entra nelle pagine rilevanti, segue i wikilink e risponde con provenienza citata.

La vista a grafo

La cartella è anche un vault Obsidian: i wikilink [[...]] tra le pagine danno gratis la vista a grafo, dove ogni entità è un nodo (es. progetto-atlas, marco-manfrin) e le relazioni sono archi. Il retrieval naviga gli stessi collegamenti per rispondere con contesto e provenienza.

§3

Architettura del sistema

L'architettura della wiki-LLM si basa su tre componenti: sync, ingest, retrieval. Nessuno dei tre richiede infrastruttura custom.

Fig 1Architettura della wiki-LLM: sync via OneDrive, ingest e retrieval via AI.
Sync OneDrive / NAS tutti vedono tutto Ingest raw/ → wiki/ + index.md estrazione entità e relazioni Retrieval domanda → naviga grafo → risposta con provenienza citata index + grafo Operatore aggiunge documenti in raw/ Claude Code legge wiki/ + index.md per contesto
sync ingest retrieval consumatori

3.1 Sync — la dorsale

La sincronizzazione è affidata a Teams/SharePoint. In Sistec la cartella esiste già: la libreria documenti del team SistecAM-AIStack, sincronizzata via client OneDrive sul PC di ogni dipendente autorizzato. Il percorso locale dipende dall'account, ad esempio:

C:\Users\Sistec 32\Sistec srl\Sistec AM-AI Stack - sistec-wiki

Quando un documento nuovo viene aggiunto a raw/ da un dipendente, la sync lo propaga a tutti i sottoscrittori. Niente da progettare: funziona già, è la stessa infrastruttura Teams già in uso in azienda.

3.2 Ingest — l'estrazione della conoscenza

L'ingest è eseguito da un agente AI (Claude Code o opencode) secondo l'operazione definita nel CLAUDE.md della wiki. Quando l'operatore aggiunge una fonte in raw/ e chiede di processarla, l'agente:

  1. Legge la fonte per intero (testo più eventuali immagini in raw/assets/).
  2. Discute con l'operatore i takeaway chiave prima di scrivere — l'umano resta nel loop.
  3. Scrive il riassunto in wiki/fonti/AAAA-MM-GG-titolo.md.
  4. Aggiorna le pagine sintetiche toccate — progetti, persone, organizzazioni, decisioni, concetti — creando quelle mancanti, con frontmatter YAML e wikilink incrociati. Una fonte può toccare 5-15 pagine. Le pagine esistenti vengono estese, non sovrascritte.
  5. Segnala le contraddizioni con un blocco ⚠️, senza mai cancellare l'informazione precedente.
  6. Aggiorna index.md (e overview.md se il quadro generale cambia) e appende una riga a log.md.

La regola: risultato, non processo

Nella wiki finisce l'output dell'analisi — dati, conclusioni, decisioni — non il racconto di come si è arrivati lì. Se l'operatore fa analizzare un log, la pagina deve contenere i risultati dell'analisi (cosa dicono i dati), non «ho analizzato il log X» né un riassunto compresso del lavoro fatto. Una pagina che descrive il processo invece del risultato va corretta in ingest, non lasciata così.

3.3 Retrieval — il consumo della conoscenza

Il retrieval avviene in due modalità:

ModalitàComeQuando
Diretta (umana)un operatore chiede all'AI via chat: «chi ha lavorato al progetto Atlas?» L'AI parte da index.md, legge wiki/progetti/progetto-atlas.md, segue i wikilink alle persone, e risponde con citazioni.domande puntuali, esplorazione libera
Da agente (Claude Code)Claude Code, durante una sessione di lavoro su un repo, legge wiki/ e index.md per contestualizzare le sue azioni: capire le decisioni pregresse, le architetture, i perché.sviluppo attivo, codice

3.4 Attivazione automatica su ogni progetto

Perché Claude Code consulti la wiki senza doverlo ricordare ad ogni sessione, basta un rimando nel CLAUDE.md a livello utente (C:\Users\<utente>\.claude\CLAUDE.md). Questo file viene caricato in aggiunta al CLAUDE.md di progetto in qualunque repository su cui l'operatore lavora — bastano un paio di righe, una sola volta per PC:

In "C:\Users\Sistec 32\Sistec srl\Sistec AM-AI Stack - sistec-wiki" è presente una LLM wiki aziendale.
Consultala seguendo le regole in "C:\Users\Sistec 32\Sistec srl\Sistec AM-AI Stack - sistec-wiki\CLAUDE.md"
per ottenere informazioni sui progetti a cui stai lavorando.

Perché a livello utente e non di progetto

Il percorso locale della cartella sincronizzata dipende dall'account Windows e non è lo stesso su due PC: metterlo nel CLAUDE.md utente (per-persona, non versionato in nessun repo) invece che in quello di progetto evita di duplicare — o sbagliare — un path specifico della macchina in ogni repository. Fatto una volta, la wiki è visibile da qualsiasi progetto l'operatore apra con Claude Code.

§4

Proposta di sviluppo: da demo a produzione

La demo sistec-llm-wiki dimostra che il pattern funziona — e che non c'è niente da costruire. Il CLAUDE.md della wiki è già la configurazione completa: convenzioni (frontmatter YAML, wikilink, nomi file) e le tre operazioni — ingest, query, lint — specificate passo per passo. Niente skill, niente regole path-scoped, niente hook o wrapper: l'operatore chiede in linguaggio naturale («processa il verbale che ho messo in raw/», «chi ha lavorato ad Atlas?») e l'agente esegue l'operazione corrispondente. La proposta si articola in tre fasi.

Perché niente skill

Una skill di ingest o di query duplicherebbe in un secondo posto ciò che il CLAUDE.md della wiki già specifica — due copie della stessa procedura da tenere allineate. Il CLAUDE.md viene caricato automaticamente da qualunque agente lanciato nella cartella: la specifica lì dentro basta. E si co-evolve: quando il collaudo trova una convenzione migliore, si aggiorna lo schema (voce schema nel log), non del codice.

Fase 1 — Condivisione e collaudo (1 settimana)

La demo è locale. La fase 1 la rende condivisa e ne collauda lo schema.

  1. Sync. Cartella già attiva: libreria Teams/SharePoint SistecAM-AIStack, sincronizzata via OneDrive su ogni PC autorizzato. Niente da progettare: funziona già.
  2. Attivazione per-utente. Ogni operatore aggiunge il rimando alla wiki nel proprio CLAUDE.md a livello utente (§3.4), così l'agente la consulta in ogni progetto senza configurazione per-repo.
  3. Pilota. 2-3 operatori la usano davvero: depositano fonti in raw/, chiedono l'ingest, interrogano la wiki. Le domande che falliscono rivelano i buchi.
  4. Affinamento dello schema. Ogni attrito emerso nel collaudo si risolve aggiornando il CLAUDE.md: convenzioni più chiare, struttura per tipo più precisa, operazioni più robuste.

Fase 2 — Ingest da Microsoft 365 (2 settimane)

La conoscenza aziendale vive già in Teams, OneNote e OneDrive. La fase 2 la porta nella wiki con un MCP server e una nuova operazione nel CLAUDE.md — non una skill (vedi §8 per il dettaglio completo).

  1. Server MCP. Configurare @softeria/ms-365-mcp-server in .mcp.json nella cartella della wiki. Autenticazione OAuth2 gestita dal server, token locali.
  2. Operazione sync-m365. Aggiungere al CLAUDE.md una quarta operazione che orchestra i tool MCP: estrae messaggi Teams, pagine OneNote e file OneDrive e li deposita in raw/.
  3. Filtri. Definire quali team, canali e notebook sono rilevanti — il grosso del lavoro è evitare il rumore.

Fase 3 — Adozione e governo (continua)

La wiki vive se viene usata e curata. Serve un modello di governo leggero.

  1. Canonicalizzatore dedicato. Una persona (o un ruolo a rotazione) revisiona periodicamente i documenti in raw/ e la qualità dell'ingest: le entità sono corrette? Le relazioni sono aggiornate? Le fonti sono citate? L'AI fa il grosso, ma un occhio umano mantiene la qualità. L'operazione lint del CLAUDE.md è lo strumento: produce il report di salute su cui il canonicalizzatore decide.
  2. Retro-ingest dei progetti esistenti. I repository git dei progetti Sistec (commessa 5309 FAEL, ecc.) hanno già openspec/changes/archive/ con proposte e design, e .claude/claude-archive/ con i riepiloghi di sessione (skill archive) — entrambi contengono decisioni già scritte. Un'operazione una tantum di retro-ingest popola wiki/ con questa conoscenza.
  3. Metriche d'uso. Il log.md append-only è già la fonte: ogni voce ha prefisso parsabile (## [AAAA-MM-GG] tipo | descrizione), quindi contare ingest e query al giorno è un grep. Il valore della wiki cresce con la sua dimensione e il suo uso.

Copia manuale, non automatica — e resta così

openspec/changes/archive/ e .claude/claude-archive/ vivono nel repository del progetto, non nella cartella della wiki: per finire in wiki/ l'operatore deve copiarli in raw/ e chiedere l'ingest. Sono pochi secondi — copia-incolla del file più il prompt «fai ingest» — e restano volutamente manuali: nessun hook o watcher che sincronizza il repo con la wiki ad ogni sessione. Il punto di frizione minimo è il meccanismo di controllo: l'umano decide cosa dei suoi documenti di progetto merita di diventare conoscenza aziendale condivisa, invece che ogni nota interna finire automaticamente nella wiki. Stesso principio di §3.4/§3.2 punto 2: l'umano resta nel loop.

Il traguardo

Alla fine della Fase 3, la wiki-LLM è il primo posto dove un operatore o un agente cerca la conoscenza aziendale: «Chi ha lavorato a questo modulo? Quale decisione è stata presa sul pattern di autenticazione? Dove è documentata l'architettura del progetto Atlas?» — la risposta sta nei file di wiki/, con provenienza citata. Niente più «chiedi a Marco», niente più chat perse, niente più documenti sparsi in cartelle personali.

§5

Integrazione con i canali di condivisione

Nel documento index si parla di due canali di condivisione — e di una terza gamba: graphify per la mappa del codice. La wiki-LLM è il secondo canale. I due canali sono indipendenti — vivono in posti diversi, si condividono in modi diversi — e convergono solo sull'operatore, che installa le skill dal marketplace e cerca le informazioni nella wiki. Accanto a loro, graphify mappa ogni singolo repository di codice in un knowledge graph per-progetto (graphify-out/): non un terzo canale di condivisione, ma l'indice del progetto su cui l'agente lavora.

Fig 2Due canali indipendenti più graphify: l'operatore installa le skill dal marketplace, interroga la wiki-LLM e lavora sulla mappa graphify del suo progetto. La conoscenza che produce lavorando torna in raw/.
Marketplace di plugin skill · comportamenti condivise via PR su git Wiki-LLM conoscenza · fatti sync via OneDrive/NAS Operatore installa skill · interroga wiki lavora sul repository del progetto installa skill query · risposta citata deposita fonti in raw/ Graphify mappa il progetto · graphify-out/ lavora sulla mappa del repo
skill conoscenza operatore mappa del codice

5.1 Sul disco dell'operatore

Fig 2 è astratta — ecco dove finiscono davvero le cose sul PC. Skill e wiki vivono a livello utente, una volta per PC, visibili da ogni progetto. La cartella del progetto resta pulita: solo codice — più la mappa graphify (graphify-out/), che vive nella root del repo insieme al codice che descrive. Nessuna skill, nessuna wiki dentro.

Fig 3Vista sul PC dell'operatore: due sorgenti (SharePoint, GitHub) → tre cartelle a livello utente → il progetto resta solo codice, con la mappa graphify dentro.
SharePoint · Teams libreria SistecAM-AIStack — sistec-wiki GitHub Sistec plugin marketplace PC-X — a livello utente, una volta, valido per ogni progetto …\skill\ skill installate dal marketplace …\sharepoint\sistec-wiki\ wiki sincronizzata da SharePoint .claude\CLAUDE.md memoria utente: rimando 2 righe .claude\CLAUDE.md (§3.4) è il ponte: due righe bastano perché ogni progetto aperto su questo PC veda skill e wiki senza configurarli lì. D:\dev\proj-a\ (.git · .csproj · .slnx) niente skill, niente wiki qui dentro — solo codice graphify-out/ · mappa del progetto consulta wiki/skill e la mappa graphify; se non rispondono, chiede all'operatore
skill (marketplace) wiki (SharePoint) memoria utente (ponte) mappa del codice (graphify) progetto (solo codice)
Skill (marketplace)Wiki-LLMGraphify (per-progetto)
Cosacomportamenti, procedure, automazionifatti, decisioni, conoscenzamappa e indice del codice: struttura, relazioni, dipendenze
Dove vive.claude/skills/ nel repocartella OneDrive/NASgraphify-out/ nella root del repo
CondivisionePR su main protettosync automatica via OneDrivenessuna — per-progetto, versionata in git con il codice
Versionamentogitcronologia file + loggit (come qualsiasi file del repo)
Manutenzionecodice revisionato in PRcanonicalizzatore umano + ingest AIgraphify update . dopo ogni modifica al codice
Consumoinvocazione esplicita (/skill) o automatica (model-invocation)query diretta o lettura agentegraphify query · path · explain, in ogni sessione sul repo

Il flusso completo

Un operatore lavora su un progetto. Parte dalla mappa graphify del repo per orientarsi (struttura, relazioni, chi chiama chi), usa le skill (via marketplace) per eseguire compiti ripetibili — code review, commit, scaffolding — e quando serve contesto consulta la wiki-LLM: decisioni pregresse, architetture, persone di riferimento. La conoscenza che produce (una decisione architetturale, un appunto tecnico) finisce in raw/ e da lì nella wiki; la mappa del codice si aggiorna con graphify update .. Il ciclo si chiude: i tre canali alimentano il lavoro, il lavoro alimenta i tre canali.

5.2 Memoria automatica nativa: perché resta disattivata

Claude Code ha una memoria automatica nativa per-progetto (~/.claude/projects/<repo>/memory/): Claude stesso decide cosa annotarsi tra una sessione e l'altra — comandi di build, insight di debug, note di architettura — senza intervento dell'operatore. Con marketplace + wiki-LLM copriamo già lo stesso spazio in modo migliore, e la teniamo disattivata di default su ogni PC.

  1. Machine-local, non condivisa. La memoria nativa vive nel profilo locale dell'operatore, non sincronizzata tra PC. Due operatori sullo stesso progetto accumulano note diverse e non allineate — drift silenzioso che nessuno rilegge finché non produce una risposta sbagliata.
  2. Non curata. Claude scrive da solo, senza revisione umana. La wiki-LLM invece ha un canonicalizzatore (§4 Fase 3) e l'operazione lint: qualità e provenienza sono verificate, non presunte.
  3. Ridondante rispetto ai canali già previsti. Comportamenti e convenzioni → skill self-contained (.claude/skills/, marketplace) e rules path-scoped (.claude/rules/). Fatti e decisioni → wiki-LLM. Struttura e relazioni del codice → graphify per-progetto. Non resta nulla che la memoria automatica dovrebbe coprire lei sola.

La regola

Ogni nozione utile a lungo termine ha già una casa esplicita e condivisa: comportamento → skill, convenzione di codice → rule, fatto o decisione → wiki, mappa del codice → graphify. Se qualcosa sembra "da ricordare" ma non rientra in nessuna di queste, il problema è che manca una voce nella wiki, una skill o una mappa graphify — non che serva la memoria automatica. Disattivarla forza a scrivere la conoscenza nel posto giusto, condiviso, invece di lasciarla in un file locale che solo quell'operatore, su quel PC, vedrà mai.

§6

Casi d'uso concreti

6.1 «Chi ha lavorato a questo modulo?»

Un operatore ereditato un modulo senza documentazione chiede: «Chi ha lavorato a gestione-mescole?». L'AI consulta wiki/progetti/gestione-mescole.md, segue i link alle persone e risponde: «Marco Manfrin e Davide Conti, vedi le decisioni in wiki/decisioni/.» Con provenienza citata.

6.2 «Perché è stata scelta questa architettura?»

«Perché il modulo auth usa JWT rotation invece di sessioni?» L'AI trova la decisione in wiki/decisioni/auth-jwt-rotation.md, scritta dopo un'analisi dei requisiti, e cita la fonte in raw/ (il verbale della riunione del 15 marzo 2026).

6.3 «Quali progetti usano il pattern Strangler Fig?»

L'AI naviga il grafo da wiki/concetti/strangler-fig-pattern.md, segue le relazioni usato-da verso i progetti, e rispone: «Progetto Atlas e Gestione Mescole. Vedi wiki/progetti/progetto-atlas.md per i dettagli.»

6.4 Ingest dopo una riunione

Dopo un incontro tecnico, un partecipante scrive appunti in raw/2026-07-22-verbale-riunione.md e chiede all'agente di processarli. L'AI esegue l'operazione di ingest del CLAUDE.md: discute i takeaway, scrive il riassunto in wiki/fonti/, aggiorna le pagine di decisioni, persone e concetti toccate. I colleghi possono subito interrogare la wiki sulle decisioni prese.

6.5 Retro-ingest da openspec e claude-archive

I repository dei progetti Sistec hanno openspec/changes/archive/ con decine di proposte e design documentati, e .claude/claude-archive/ con i riepiloghi di sessione della skill archive. Una tantum, l'operatore li copia in raw/ e chiede un ingest massivo: l'AI legge gli archive, estrae decisioni e architetture, e popola wiki/ con la conoscenza già prodotta. La wiki parte già piena.

Il valore della provenienza

Ogni risposta della wiki-LLM cita la fonte (fonti/ e raw/). Non è «l'AI ha detto»: è «il verbale della riunione del 15 marzo dice». La differenza tra un parere e una fonte verificabile.

§7

Roadmap

FaseCosaTempoDipendenza
Fase 1 Condivisione e collaudo: cartella su OneDrive/NAS, pilota con 2-3 operatori, affinamento del CLAUDE.md 1 settimana demo sistec-llm-wiki funzionante
Fase 2 Ingest M365: server MCP, operazione sync-m365 nel CLAUDE.md, filtri team/canali/notebook 2 settimane Fase 1 completata, Claude Code installato sugli operatori pilota
Fase 3 Adozione: canonicalizzatore, retro-ingest progetti, metriche dal log continua Fase 2 completata, adesione del team

Primo passo concreto

La Fase 1 non richiede autorizzazioni speciali né sviluppo: la demo esiste già e il CLAUDE.md con convenzioni e operazioni è già scritto. Basta spostare la cartella su OneDrive condiviso e far partire il pilota. Il costo è zero infrastruttura e zero codice.

§8

Ingest da Microsoft 365 via MCP

Finora la wiki-LLM si basa su file depositati manualmente in raw/. Ma la conoscenza aziendale esiste già — nei messaggi Teams, nei notebook OneNote, nei documenti OneDrive. Con un MCP server per Microsoft 365, Claude Code può accedervi direttamente e portarli nell'ingest.

Il principio

Invece di skill che chiamano Graph API (token da gestire, auth custom), un MCP server espone tool che Claude chiama come qualsiasi altro tool. L'autenticazione OAuth2 la gestisce il server una volta — niente secret nel repo.

Il server di riferimento è @softeria/ms-365-mcp-server (github), 200+ tool su Graph API. Si configura in .mcp.json:

{
  "mcpServers": {
    "ms365": {
      "command": "npx",
      "args": ["-y", "@softeria/ms-365-mcp-server", "--org-mode"]
    }
  }
}

8.1 Tool per sorgente

SorgenteTool MCPCosa estrarre
Teamslist-joined-teams, list-team-channels, list-channel-messages, get-channel-messagedecisioni emerse in canali di progetto, discussioni tecniche, risposte a problemi
Teams chatlist-chats, list-chat-messages, get-chat-messageconversazioni 1:1 che contengono decisioni o specifiche
OneNotelist-onenote-notebooks, list-onenote-section-pages, get-onenote-page-contentappunti riunioni, specifiche tecniche, verbali già scritti
OneDrivelist-folder-files, download-onedrive-file-content documenti .docx/.pdf fuori dalla cartella wiki, specifiche fornite dai clienti

Teams richiede --org-mode (account aziendale). OneNote e OneDrive funzionano anche in modalità personale. Il server supporta preset per caricare solo i tool necessari e risparmiare contesto:

# Solo Teams (--org-mode + --preset teams)
npx @softeria/ms-365-mcp-server --org-mode --preset teams

# Solo OneNote
npx @softeria/ms-365-mcp-server --preset onenote

# Solo OneDrive
npx @softeria/ms-365-mcp-server --preset onedrive

8.2 Flusso di ingest M365 → wiki

L'operazione sync-m365 — una sezione in più nel CLAUDE.md della wiki, accanto a ingest, query e lint — orchestra i tool MCP in sequenza e deposita il risultato in raw/:

Fig 4Flusso di ingest da Microsoft 365: i tool MCP estraggono contenuto, l'agente lo converte in markdown in raw/, poi l'ingest standard lo canonicalizza in wiki/.
Teams · OneNote OneDrive Microsoft Graph MCP server @softeria/ms-365 tool MCP Op. sync-m365 converte in .md scrive in raw/ raw/ → ingest → wiki/ stesso percorso di ingest della wiki
sorgenti M365 MCP server operazione CLAUDE.md deposito

L'operazione segue questa sequenza:

  1. Teams — canali. Per ogni team di progetto (Progetto Atlas, FAEL, ecc.), elenca i canali, poi per ogni canale legge i messaggi dell'ultima settimana. Scrive in raw/teams/<team>-<canale>-YYYY-MM.md.
  2. Teams — chat. Elenca le chat recenti, filtra quelle con attività tecnica (contiene codice, menzioni di repo, decisioni), scrive in raw/teams/chat-<persona>-YYYY-MM.md.
  3. OneNote. Per ogni notebook condiviso (es. Riunioni Sistec, Specifiche), elenca sezioni e pagine, estrae il contenuto delle pagine nuove o aggiornate. Scrive in raw/onenote/<notebook>-<sezione>-<pagina>.md.
  4. OneDrive. Per ogni cartella condivisa di progetto, elenca i file nuovi, scarica .docx/.pdf, converte in markdown. Scrive in raw/onedrive/<progetto>-<file>.md.
  5. Segnala completamento. Restituisce all'operatore un riepilogo: quanti messaggi, pagine e file processati, pronti per l'ingest standard.

Operazione sync-m365 — sezione da aggiungere al CLAUDE.md

// CLAUDE.md della wiki — sotto «Operazioni», dopo ingest/query/lint

### 4. Sync M365 (acquisizione da Teams, OneNote, OneDrive)

Quando l'umano chiede di sincronizzare da Microsoft 365
(eventualmente con un filtro, es. «solo il team Atlas»):

1. Lista i team con list-joined-teams; applica il filtro se presente.
2. Per ogni team: elenca canali, poi messaggi degli ultimi 7 giorni.
   - Salta i messaggi già processati (confronta timestamp con ultimo sync nel log).
   - Scrivi in raw/teams/<team>-<canale>.md.
3. Per OneNote: elenca notebook, sezioni, pagine nuove.
   - Scrivi in raw/onenote/<notebook>-<pagina>.md.
4. Per OneDrive: elenca file nuovi in cartelle condivise.
   - Scarica .docx, converti in markdown, scrivi in raw/onedrive/<file>.md.
5. Appendi una riga a log.md (tipo: sync-m365).
6. Riepiloga: «Processati X messaggi, Y pagine, Z file. Procedo con l'ingest?»

8.3 Retrieval live via MCP

L'ingest porta nella wiki solo la conoscenza stabile — ciò che è stato selezionato e canonicalizzato. Per domande su contenuto transitorio (es. «cosa si è detto ieri su Teams riguardo al modulo auth?»), Claude può chiamare i tool MCP direttamente in tempo reale, senza aspettare l'ingest. La wiki resta per la conoscenza consolidata; Teams/OneNote per il flusso vivo.

Wiki-LLM (ingest)MCP live (retrieval diretto)
Cosa contieneconoscenza canonicalizzata, stabile, revisionatatutto il contenuto grezzo di Teams/OneNote/OneDrive
Qualitàentità strutturate, relazioni, provenienza citatarumore, duplicati, non strutturato
Quando usarlodecisioni pregresse, architetture, chi-ha-fatto-cosa«cos'è successo ieri», messaggi recenti, bozze
Velocitàimmediata (file locali già indicizzati)dipende da Graph API (latenza rete)
Costo contestobasso (legge solo i file pertinenti)ogni chiamata MCP consuma contesto

Due velocità

L'ingest M365 via MCP alimenta la wiki con la conoscenza che merita di essere conservata (decisioni, architetture, specifiche). Il retrieval live via MCP risponde a domande sul transitorio (chat recenti, bozze, appunti). I due canali sono complementari: nessuno sostituisce l'altro.

8.4 Nella roadmap

L'integrazione M365 è la Fase 2 della roadmap: si configura il server MCP in .mcp.json e si aggiunge l'operazione sync-m365 al CLAUDE.md. Il grosso del lavoro è definire i filtri (quali team/canali/notebook sono rilevanti) per evitare rumore. Una volta a regime, la sincronizzazione si chiede in linguaggio naturale («sincronizza il team Atlas») e prepara i nuovi contenuti per l'ingest standard.

Autenticazione

Il server @softeria/ms-365-mcp-server usa MSAL con device code flow: la prima volta si autentica via browser, poi i token sono cachati in locale. Per uso enterprise serve un Azure AD app registration con i permessi Graph: ChannelMessage.Read.All, Notes.Read.All, Files.Read.All (solo lettura — l'ingest non scrive su M365).

8.5 Sicurezza con account Anthropic condiviso

In Sistec le licenze Claude sono condivise: più persone usano lo stesso account Anthropic. Questo ha implicazioni profonde su dove e come vengono conservati i token di accesso ai servizi Microsoft 365, a seconda della superficie di Claude utilizzata.

Claude Code (MCP locale)Claude Cowork (connector built-in)
Configurazionefile .mcp.json o ~/.claude.json localevia claude.ai (connector nel workspace Anthropic)
Token OAuthOS credential store / file locale (0600)server Anthropic (infrastruttura cloud)
Legato all'account Anthropic?No — puramente locale — il token è associato all'account
Accessibile dai colleghi?No — ogni PC ha i propri token — stesso account = stesso token

Il rischio

Con un account Anthropic condiviso, se un operatore collega Microsoft 365 a Claude Cowork via connector built-in (es. il connector Microsoft 365 dal catalogo claude.ai), il token OAuth viene memorizzato sui server Anthropic e chiunque acceda allo stesso account può interrogare quei dati — mail, calendario, file OneDrive — via Cowork.

Il problema non si pone con Claude Code o con i local MCP server configurati in Cowork via Settings > Developer Tools > MCP: in entrambi i casi i token risiedono nel credential store del PC locale. I colleghi su altri computer non hanno accesso.

Nel contesto della wiki-LLM, lo scenario pianificato usa @softeria/ms-365-mcp-server come MCP server locale (npx via stdio), non come connector Cowork built-in. Questo è il modello sicuro con account condiviso: il token OAuth di Microsoft resta nel credential store di ogni operatore, configurato per il proprio account M365 aziendale. I colleghi vedono solo i propri dati.

Raccomandazione

Non usare i connector built-in di Claude Cowork per Microsoft 365 in presenza di account Anthropic condivisi. Usare invece il server MCP locale @softeria/ms-365-mcp-server configurato via .mcp.json (Claude Code) o via Developer Tools (Cowork), così ogni operatore autorizza il proprio account M365 e i token restano sul proprio PC. Se in futuro Sistec passa a un piano Team/Enterprise con account separati e SSO, i connector built-in diventano sicuri perché ogni utente autorizza i propri servizi individualmente.

Per approfondimento: la documentazione ufficiale Anthropic conferma che i token dei connector sono memorizzati nei server Anthropic ("Anthropic stores encrypted access tokens and refresh tokens"Authentication for connectors), e il modello di autorizzazione prevede che ogni utente su piani Team/Enterprise autorizzi individualmente i propri servizi ("each person still needs to authenticate individually before they can use it"Use connectors). Su un account condiviso (Pro/Max) questa separazione non esiste.

§9

Riferimenti