Una panoramica densa del nostro n8n: architettura reale, SDK quirks già mappate, casi d’uso in produzione. Da tecnico a tecnico.
Mimir Lab è un laboratorio di automazione AI-first fondato da Gabriele Sechi a Cademario (Ticino, CH). Stack proprietario centrato su n8n Cloud + Anthropic API diretta, orchestrato da agenti TypeScript via MCP SDK. Non un’agenzia: un execution layer tecnico per consulenti e aziende con visione chiara ma senza capacità operativa per costruirla.
Operiamo come partner tra pari — non fornitore generico. Costruiamo, deployiamo e gestiamo workflow n8n complessi in produzione. La documentazione interna è codificata in skill e pattern library derivati da 2 478 workflow analizzati.
| Layer | Tool / Tecnologia | Ruolo operativo |
|---|---|---|
| L1 — Orchestration | Claude Code + OpenClaw + Anthropic API diretta |
Agent di sviluppo, dispatcher, reasoning complesso |
| L2 — Workflow | n8n Cloud — mimirlab.app.n8n.cloud |
Automazione, orchestrazione pipeline, integrazione servizi |
| L3 — Data | Google Sheets (Service Account) + filesystem locale | State, log operativi, dashboard contabile real-time |
| L4 — Output | Telegram · LinkedIn · AbaNinja · Drive | Delivery, pubblicazione, fatturazione automatica, archivio |
| Risorsa | Valore | Note |
|---|---|---|
| Instance | mimirlab.app.n8n.cloud — Starter plan |
Migrato da Docker localhost il 2026-04-07 |
| Project ID | zBy2aF6Ma4YyEX2u |
Container principale — tutti i workflow e credenziali dentro |
| Command Center | duFEnIWzfjfzkK1V |
Pipeline brief + publish — sempre attivo |
| System Health Agent | s6EPgHPhNN2sfdpJ |
Monitoring errori ogni 30 min |
| Agenti TypeScript | OrchestratorAgent → BriefAgent / PublishAgent / N8nDocsAgent | MCP SDK over stdio — npx tsx, no compile step |
| Sorgenti workflow | mimir_v4.ts, brief-v2.ts, mimir_v5.ts |
SDK TypeScript — mai export JSON grezzo (credential exposure AUTH-05) |
Questi pattern emergono da incidenti reali, non da documentazione ufficiale.
| # | Pattern | Problema evitato | Fix |
|---|---|---|---|
P-01 |
JSON fence stripping | Claude wrappa l’output in ```json…``` anche con istruzione esplicita. JSON.parse() diretto → crash. |
raw.replace(/```json\s*/gi,'').replace(/```/g,'').trim() prima di ogni JSON.parse |
P-02 |
Webhook > Poll / Schedule | Più workflow che pollano la stessa risorsa (RSS, Sheets, Telegram) sull’istanza condivisa → 409 conflicts. | Webhook trigger ovunque possibile. n8n→n8n via execute_workflow MCP colpisce sempre il primo webhook node. |
P-03 |
Mai newCredential() via MCP |
Credential creata in global space, non assegnata al workflow del project → “credentials not shared with workflow” | Credential ID hardcodato sempre. LinkedIn: assegnazione obbligatoria via UI n8n dopo ogni deploy. |
P-04 |
Sheets mappingMode: defineBelow |
autoMapInputData fallisce runtime se i nomi colonna dello sheet non coincidono esattamente con le chiavi dell’input JSON. |
Sempre defineBelow + mapping esplicito chiave→espressione per ogni campo in append / insert. |
P-05 |
HTTP body: specifyBody: “string” |
“json” con expressions dentro → parse failure silenzioso a runtime su payload dinamici. |
Sempre specifyBody: “string” per payload costruiti con espressioni n8n. |
P-06 |
Mai Merge downstream di If | Merge aspetta entrambi i branch. If ne esegue sempre uno solo → deadlock garantito, workflow stalla. | Route diretti verso il nodo successivo. Se serve aggregazione: Merge in Append mode. |
P-07 |
validate_workflow come unico deploy gate |
API n8n restituisce 200 anche su workflow corrotti. update_workflow via MCP: HTTP response inaffidabile. |
Sequenza: validate → valid:true → get_workflow_details (verifica struttura) → publish_workflow. |
P-08 |
Sheets read: returnAllMatches |
readAllRows deprecato in n8n v4+ — fallisce silenziosamente su dataset grandi. |
operation: ‘read’ + options.returnAllMatches: true |
P-09 |
Strip backtick fences su ogni output LLM | Anche con system prompt che vieta il markdown, Haiku e Sonnet wrappano output strutturato in fences intermittentemente. | Funzione safeParse(raw) in ogni Code node che consuma output LLM. No eccezioni. |
| Modello | String esatta (n8n / API diretta) | Use case |
|---|---|---|
| Haiku 4.5 | claude-haiku-4-5-20251001 |
Bulk ops, RSS parsing, classificazione, ACK rapidi — costo minimo |
| Sonnet 4.6 | claude-sonnet-4-6-20251001 |
Build / fix workflow, reasoning multi-step, brief generation |
| Opus 4.6 | claude-opus-4-6-20251001 |
Architettura, analisi critica, quality gate complessi |
⚠ Mai usare claude-3-haiku, claude-3-sonnet o qualsiasi stringa claude-3-* — legacy, non disponibili sullo stack corrente.
| Integrazione | Auth | Uso operativo |
|---|---|---|
| Google Sheets | Service Account OAuth2 | Brief_Log, Publish_Log, Offset_Tracker, CRM_State — state e log persistenti |
| Telegram | Bot token — @Mimirlab_Bot |
Output operativi real-time, ACK, brief delivery, comandi |
| Anthropic API | HTTP Header auth (API key) | LLM diretta via HTTP Request node — nessun wrapper generico |
| OAuth2 (company + personal) | Company EN 112515148 / Personal IT 0etrgkpbX9 — credenziali via UI obbligatoria |
|
| AbaNinja | REST API (in build) | Registrazione fatture automatica, gestione ricevute spese, sync contabile |
| Google Drive | Service Account | Archivio ricevute e fatture per categoria / anno |
1. Scrivi SDK TypeScript (mimir_v4.ts / mimir_v5.ts)
— mai export JSON n8n grezzo: possono contenere credential espansi (AUTH-05)
2. validate_workflow → valid:true ← gate OBBLIGATORIO, non saltare
3. get_workflow_details ← verifica struttura post-update
— update_workflow via MCP può restituire HTTP 200 su aggiornamento fallito
4. publish_workflow ← solo se valid:true confermato
5. Credenziali LinkedIn / Google OAuth: assegnare via UI dopo deploy
— newCredential() via MCP crea credential in global space, non nel project
— risultato: "credentials not shared with workflow" a runtime
Pipeline autonoma: 10 feed RSS in parallelo (n8n Blog, VentureBeat AI, NYT AI, Google Research,
DeepMind, OpenAI, MIT Tech Review, HN Anthropic…) → XML parsing custom con finestra
7 giorni → Claude Haiku per generazione post EN+IT → Google Sheets log
(Brief_Log con campi Date, POST_EN, POST_IT, Status, Input_Tokens, Output_Tokens) →
Telegram delivery → publish LinkedIn company EN + personal IT. ~45 secondi end-to-end.
Cron automatico alle 08:00 Europe/Zurich.
Brief v2 in design: relevance classifier pre-LLM (Haiku, score ≥0.7), Jina AI per full-text scraping degli articoli rilevanti invece dei soli RSS snippet, quality gate anti-allucinazione (confronto claim generati vs fonti usate prima del publish), dedup URL via Sheets. Source intelligence derivata dal mining su 2 478 workflow — reference: template n8n #4708 (rss-monitor-distribute) e #4624 (quality-gate-validation).
Stack contabile completamente automatizzato: scan ricevuta spesa → archivia in Google Drive per categoria (spese/utenze/software/professionali) → genera fattura HTML via template Jinja2 → webhook AbaNinja REST per registrazione automatica nel gestionale. Google Sheets come dashboard real-time.
Architettura decisionale: AbaNinja come single source of truth contabile
(gestito da commercialista), n8n come orchestratore, Sheets come monitoring operativo.
Script Python: archivia_ricevuta.py, genera_fattura.py,
report_mensile.py. Template fattura HTML con Jinja2 — config via JSON
secret non committato (.secrets/contabilita_config.json).
Download completo di 2 478 workflow pubblici dal template repository n8n →
pipeline Lavoisier di classificazione → 194 workflow experience_class=‘transform’
→ clustering multi-label su pattern_tags + integrations + triggers →
33 cluster identificati, 9 HIGH-Mimir con alignment diretto ai casi d’uso interni.
Cluster HIGH-Mimir per dimensione: agent-with-tools (36),
rag-foundation (31), content-generation-ai (15),
content-multichannel-publish (15), email-classifier-router (14),
agent-long-term-memory (11), rss-monitor-distribute (8),
rag-living-data (7), lead-enrichment (7).
Output: SQLite knowledge.db + digest MD per Brief v2 intelligence.
Non gestiamo sub-fornitura come un service provider generico. L’idea è una collaborazione tecnica tra pari: tu hai i clienti e la relazione; noi abbiamo l’execution n8n/AI e il know-how operativo già mappato.