Workflows efficiënt bijwerken met workflow-diffs (tokenbesparing)
Gebaseerd op czlonkowski/n8n-mcp @ f895e5e, licentie MIT
Dit bestand is door ToolBrain vertaald en inhoudelijk gewijzigd op 2026-08-30, op basis van
"Workflow Diff Examples" uit czlonkowski/n8n-mcp (MIT), zie
https://github.com/czlonkowski/n8n-mcp/blob/f895e5ecc732aed31e2ca9748027034f5b19cccd/docs/workflow-diff-examples.md
en ../LICENSES/n8n-mcp-MIT.txt.
Wanneer een AI-assistent een n8n-workflow moet aanpassen, is de voor de hand liggende aanpak om
de hele workflow-JSON opnieuw te versturen. Bij een workflow met tientallen nodes kost dat veel
tokens en vergroot het de kans dat er per ongeluk iets anders verandert dan bedoeld. De tool
n8n_update_partial_workflow lost dit op door alleen de gewenste wijzigingen (operations) door
te geven, in plaats van de volledige workflow.
Waarom dit iets uitmaakt
- 80-90% minder tokenverbruik per bewerking
- Preciezere, expliciete wijzigingen
- Duidelijkere intentie per operatie
- Kleiner risico dat je per ongeluk een ongerelateerd deel van de workflow raakt
Basisstructuur
{
"id": "workflow-id-hier",
"operations": [
{
"type": "operatie-type",
"...veld-specifieke-eigenschappen..."
}
]
}Soorten operaties
Node-operaties
Node toevoegen
{
"type": "addNode",
"description": "HTTP Request-node toevoegen om data op te halen",
"node": {
"name": "Haal gebruikersdata op",
"type": "n8n-nodes-base.httpRequest",
"position": [600, 300],
"parameters": {
"url": "https://api.voorbeeld.nl/users",
"method": "GET",
"authentication": "none"
}
}
}Node verwijderen
{ "type": "removeNode", "nodeName": "Oude Node", "description": "Verwijder verouderde node" }Node bijwerken
{
"type": "updateNode",
"nodeName": "HTTP Request",
"changes": {
"parameters.url": "https://nieuwe-api.voorbeeld.nl/v2/users",
"parameters.headers.parameters": [
{ "name": "Authorization", "value": "Bearer {{$credentials.apiKey}}" }
]
},
"description": "API-endpoint bijwerken naar v2"
}Node verplaatsen (moveNode met een nieuwe position), en node aan/uit zetten
(disableNode/enableNode) werken analoog.
Connectie-operaties
Connectie toevoegen
{
"type": "addConnection",
"source": "Webhook",
"target": "Verwerk Data",
"sourceOutput": "main",
"targetInput": "main",
"description": "Koppel webhook aan verwerker"
}Connectie verwijderen (removeConnection) en connectie herbedraden
(rewireConnection, met from/to om een bestaande koppeling naar een andere node te leiden)
werken analoog.
Slimme parameters voor IF- en Switch-nodes: in plaats van een technische sourceIndex kun je
semantisch verwijzen naar een tak:
{ "type": "addConnection", "source": "IF", "target": "Succes-afhandeling", "branch": "true" }{ "type": "addConnection", "source": "IF", "target": "Foutafhandeling", "branch": "false" }{ "type": "addConnection", "source": "Switch", "target": "Handler A", "case": 0 }Metadata-operaties
Ook de workflownaam (updateName), workflow-instellingen zoals executietimeout of tijdzone
(updateSettings), en tags (addTag) zijn op deze manier gericht aan te passen, zonder de rest
van de workflow aan te raken.
Complete voorbeelden
Een paar realistische scenario's: een Slack-melding toevoegen na een verwerkingsstap, meerdere webhook-paden tegelijk hernoemen plus de workflownaam bijwerken, een verouderde node vervangen door een moderne Code-node inclusief het omleggen van de connecties, en een foutafhandelingspad toevoegen met een Error Trigger-node en een e-mailnotificatie. Ook grote, samengestelde batches werken: één voorbeeld in de bron combineert tien nieuwe nodes, alle bijbehorende connecties, een naamswijziging, instellingen en drie tags in één enkel verzoek van 26 operaties — er geldt geen limiet meer op het aantal operaties per aanroep.
Best practices
- Geef elke operatie een duidelijke naam en beschrijving
- Groepeer gerelateerde wijzigingen in één verzoek
- Test eerst met
validateOnly: truevoordat je de operaties echt toepast - Verwijs bij voorkeur naar nodes via hun naam, niet via een intern ID
- Maak kleine, gerichte wijzigingen in plaats van grote structurele ingrepen ineens
Veelvoorkomende fouten
- Dubbele node-namen (elke naam moet uniek zijn binnen de workflow)
- Ongeldige node-types (gebruik altijd het volledige pakket-prefix, bijv.
n8n-nodes-base.webhook) - Verwijzingen naar connecties die niet bestaan
- Circulaire afhankelijkheden tussen connecties
Controleer bij elke aanroep de response op validatiefouten en pas de operaties daarop aan.
Hoe transactionaliteit werkt
De diff-engine verwerkt operaties strikt op volgorde: elke operatie valideert tegen de
workflowstatus zoals die is op dát moment in de batch. Een connectie-operatie ziet dus alleen de
nodes die eerdere operaties al hebben toegevoegd, en een removeConnection wordt gevalideerd
vóórdat een latere updateNode-hernoeming zijn verwijzingen bijwerkt. Wanneer updateNode een
node hernoemt, worden alle verwijzingen naar die node in de connecties direct na die operatie
bijgewerkt — niet pas aan het einde van de hele batch.
- Sequentiële uitvoering: operaties lopen in de volgorde van aanroep; elke operatie valideert tegen de tussenstand.
- Hernoeming per operatie doorgevoerd: connectiereferenties (zowel sleutels als doelnamen) worden direct bijgewerkt zodra een hernoeming plaatsvindt.
- Geen limiet op het aantal operaties per verzoek.
- Atomisch by default: als één operatie faalt, wordt de hele batch teruggedraaid, tenzij je
continueOnError: truemeegeeft voor een best-effort-modus.
Uitzondering: addConnection vóór de bijbehorende addNode
Voor achterwaartse compatibiliteit met het oudere patroon "eerst alle connecties, dan de nodes"
geldt één automatische herordening: een addConnection of rewireConnection die verwijst naar
een node die verderop in dezelfde batch wordt toegevoegd, zorgt ervoor dat die addNode
automatisch net vóór die eerste verwijzing wordt "opgetild". Dit is de enige automatische
herordening — andere combinaties (zoals een removeConnection vóór de bijbehorende addNode)
worden niet meer herordend en resulteren in een validatiefout.
Toch is het advies: schrijf operaties in de logische volgorde — eerst de node toevoegen, dan pas
de connectie. Dat sluit aan bij wat de diff-engine daadwerkelijk doet, maakt de batch
leesbaarder, en voorkomt verrassingen als je later continueOnError: true gebruikt (waar de
volgorde van fouten er wél toe doet).
Praktijkvoorbeeld (NL)
Een Nederlandse boekhoudadministratiekantoor heeft een n8n-workflow van veertig nodes die
maandelijks facturen uit Moneybird ophaalt, ze categoriseert en doorstuurt naar de juiste
klantmap in Google Drive. Een collega wil één klein ding wijzigen: het e-mailadres in de
foutmelding-node moet naar een nieuw algemeen postvak in plaats van naar een oud-collega die is
vertrokken. In plaats van de AI-assistent de volledige workflow van veertig nodes opnieuw te
laten versturen (en zo het risico te lopen dat er ergens anders per ongeluk iets verschuift),
stuurt de assistent alleen een updateNode-operatie met de aangepaste
parameters.toEmail-waarde voor die ene foutafhandelings-node. Het kantoor test dit eerst met
validateOnly: true, ziet dat de validatie slaagt zonder de workflow al echt aan te passen, en
past de wijziging dan pas definitief toe — met een duidelijke description, zodat in de
wijzigingshistorie van n8n meteen te zien is wat er is aangepast en waarom.