Due workflow n8n che girano davvero (non slide), uno costruito sul tuo caso flotta, e gli SDK quirk già mappati da chi ha shippato. 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 |
Sai cos’è n8n — non te lo spieghiamo. Il punto è un altro: la distanza tra “so montare un workflow” e “lo gestisco in produzione senza che si rompa”. Lì sta il valore, e lì si vede chi ha davvero shippato: gestione errori su ogni side-effect, niente deadlock sui branch, parsing difensivo dell’output AI, deploy gated da validazione. I due workflow qui sotto lo mostrano su casi veri, con esecuzioni reali — non a parole.
Se ti serve allineare la terminologia che usiamo nei canvas qui sotto.
Da dove parte il flusso: webhook HTTP, schedule cron, evento da un servizio.
Ogni nodo trasforma o instrada i dati. Set, Code, IF, Switch, chiamate API e AI.
IF e Switch dirammano: percorsi diversi a seconda dei dati (tier lead, evento turno…).
Le azioni reali: scrivi su CRM/DB, notifica Telegram, crea una bozza, logga.
Showcase Lead Intake — un workflow che riceve un lead da form, lo valida, controlla il CRM, lo fa classificare da Claude (hot / warm / cold), e poi diramma azioni differenziate prima di loggare e rispondere. 15 nodi, un singolo workflow.
Non è un mockup: l’abbiamo costruito, validato ed eseguito davvero
su mimirlab.app.n8n.cloud il 4 giugno 2026, con una chiamata Anthropic reale.
Clicca un nodo per leggerne il dettaglio, o premi Esegui demo per vedere
scorrere l’esecuzione reale (lead “hot”).
Seleziona un nodo nel canvas per vederne il ruolo e il quirk n8n gestito in produzione, oppure lancia la demo per seguire l’esecuzione nodo per nodo.
Cosa fa ogni nodo del workflow Showcase Lead Intake, e il quirk n8n gestito in produzione. Lo stesso testo che vedi cliccando i nodi qui sopra, ma tutto in un colpo.
POST, con responseMode: responseNode per rispondere a valle.$json.body?.x ?? $json.x, normalizza l’email, calcola il flag valid.$("Normalize & Validate") anche dopo il branching.alwaysOutputData per gestire il “nuovo lead” + onError: continueRegularOutput.is_existing_contact.$json è il contatto, non il lead.claude-3-*.```json, parse difensivo con fallback, clamp dei valori.```json nonostante l’istruzione contraria.rules.values con conditions complete; ogni ramo ha la sua azione.#sales-alerts con urgency e intent.onError: continueRegularOutput: se Slack è giù il flusso prosegue.qualifiedtobuy.append (non il default): dopo uno Switch il default deadlocca.mappingMode: defineBelow: evita lo schema drift di autoMapInputData.Lo stesso motore, un dominio diverso: gestione turni di una flotta mista (mezzi grandi con tachigrafo e piccoli senza). Il driver, al mattino, prende un veicolo; il sistema valida l’abbinamento patente↔mezzo (B vs C/C1 + CQC), registra stato veicolo e km, traccia le pause live, e a fine turno calcola la conformità ore leggendo la regola applicabile al mezzo.
Anche questo è costruito ed eseguito davvero sul cloud Mimir
(esecuzioni reali #1141 fine turno e #1142 blocco patente).
L’input arriverebbe da una Mini App Telegram “schedina” —
qui mostrata come payload sul webhook. Le anagrafiche e le regole (IT/UE) sono una
tabella di config, non codice: la flotta mista è gestita per riga.
Seleziona un nodo per vederne il ruolo e il quirk gestito, o lancia la demo per seguire un turno reale: mattina con check patente, pause live, fine turno con verifica conformità ore.
Cosa fa ogni nodo del workflow Fleet Driver Intake & Compliance. Anagrafiche (driver, veicoli) e regole vivono in una tabella di config: la flotta mista IT/CH è gestita per riga, non per codice. Mini App Telegram “schedina” = UI driver futura (qui input come payload sul webhook).
event_type, driver_id, vehicle_id + campi del momento.responseMode: responseNode + onError: continueRegularOutput: il driver riceve sempre una risposta.valid (event_type valido + driver + veicolo).rule_set arriva dall’anagrafica veicolo → flotta mista IT/CH per riga.event_type: inizio / pausa / fine turno (+ fallback).rule_set del mezzo → flag violazioni.@Mimirlab_Bot.| 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.
Siamo un lab piccolo, lo diciamo chiaro. Per questo: niente lock-in. I workflow e il codice che costruiamo per i tuoi clienti sono tuoi — esportabili e importabili sulla tua istanza n8n in autonomia, anche se domani sparissimo.
Capacity: scope concordati con finestre di consegna realistiche. Ti diciamo no quando siamo pieni, invece di accumulare ritardi sul tuo cliente.
Documentazione: ogni consegna lascia walkthrough + workflow.json (come quello del caso flotta, già nella cartella condivisa). Resti operativo anche senza di noi.
workflow.json del caso flotta è già
nella cartella condivisa — importalo sulla tua istanza n8n e fallo girare tu.