n8nclaude-codemcpintegratie
n8n + Claude Code MCP integratie
20 januari 202614 min leestijdDoor Albert Barth
n8n + Claude Code MCP Integratie: De Ultieme Gids
Model Context Protocol (MCP) is een van de meest opwindende ontwikkelingen in AI tooling. Het maakt het mogelijk om AI assistenten zoals Claude direct te verbinden met externe tools en services. Door n8n te combineren met Claude Code via MCP, krijg je een krachtige setup waarbij Claude workflows kan triggeren, data kan ophalen en acties kan uitvoeren in de echte wereld.
Wat is Model Context Protocol (MCP)?
MCP is een open protocol ontwikkeld door Anthropic dat AI modellen in staat stelt om veilig te communiceren met externe systemen. Het fungeert als een gestandaardiseerde brug tussen Claude en de buitenwereld.
Kernconcepten van MCP
1. Resources Resources zijn data-endpoints die Claude kan lezen. Denk aan:
- Bestanden op je computer
- Database records
- API responses
- Real-time data feeds
2. Tools Tools zijn acties die Claude kan uitvoeren:
- Code executie
- API calls maken
- Bestanden aanmaken/wijzigen
- Workflows triggeren
3. Prompts Voorgedefinieerde prompt templates die Claude kan gebruiken voor specifieke taken.
Waarom MCP + n8n?
De combinatie van MCP en n8n biedt unieke voordelen:
| Aspect | Voordeel |
|---|---|
| **Bi-directionele communicatie** | Claude kan n8n workflows triggeren EN data ontvangen |
| **Rijke context** | n8n kan realtime data leveren aan Claude's beslissingen |
| **Automatisering** | Combineer Claude's redeneerkunst met n8n's 400+ integraties |
| **Veiligheid** | MCP's security model + n8n's access controls |
| **Schaalbaarheid** | n8n handelt de execution af, Claude focust op beslissingen |
Prerequisites
Voordat je begint, heb je nodig:
- Claude Code (Claude's coding assistant CLI)
- Installatie:
npm install -g @anthropic-ai/claude-code - Anthropic API key
- n8n Instance
- Cloud account OF self-hosted installatie
- Webhook functionaliteit (standaard inbegrepen)
- Node.js (versie 18+)
- Voor het draaien van de MCP server
- Basis kennis van:
- n8n workflow creatie
- Claude Code gebruik
- JSON en REST APIs
Stap 1: n8n Webhook Configureren
Eerst maken we een n8n workflow met een webhook endpoint dat Claude kan aanroepen.
1.1 Nieuwe Workflow Aanmaken
- Open n8n
- Klik op "Add workflow"
- Noem het "Claude MCP Integration"
1.2 Webhook Node Toevoegen
Node: Webhook
HTTP Method: POST
Path: /claude-mcp
Authentication: Header Auth
- Name: X-API-Key
- Value: [genereer een secure key]
Response: Immediately respond
Response Code: 2001.3 Request Router Toevoegen
Na de webhook, voeg een Switch node toe om verschillende MCP acties te routeren:
Node: Switch
Routing Key: {{$json.body.action}}
Rules:
1. action === 'query_database' → Database pad
2. action === 'send_email' → Email pad
3. action === 'create_task' → Task pad
4. action === 'get_status' → Status pad
Default: Error response1.4 Voorbeeld Database Query Pad
Node: PostgreSQL (of Supabase)
Operation: Execute Query
Query: {{$json.body.query}}
→ Respond to Webhook
Response Body:
{
"success": true,
"data": {{$json.data}},
"count": {{$json.data.length}}
}1.5 Voorbeeld Email Pad
Node: Email Send (SendGrid/Mailgun)
To: {{$json.body.to}}
Subject: {{$json.body.subject}}
Body: {{$json.body.message}}
→ Respond to Webhook
Response Body:
{
"success": true,
"message_id": "{{$json.id}}"
}1.6 Activeer de Workflow
- Klik op "Active" toggle
- Kopieer de Production webhook URL
- Test met cURL:
curl -X POST https://your-n8n.com/webhook/claude-mcp \
-H "Content-Type: application/json" \
-H "X-API-Key: your-api-key" \
-d '{"action": "get_status", "data": {}}'Stap 2: MCP Server voor n8n Maken
Nu maken we een MCP server die Claude Code kan gebruiken om met n8n te communiceren.
2.1 Project Setup
mkdir n8n-mcp-server
cd n8n-mcp-server
npm init -y
npm install @modelcontextprotocol/sdk node-fetch2.2 MCP Server Code
Maak een bestand
server.js:import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const N8N_WEBHOOK_URL = process.env.N8N_WEBHOOK_URL;
const N8N_API_KEY = process.env.N8N_API_KEY;
// Helper functie voor n8n calls
async function callN8n(action, data = {}) {
const response = await fetch(N8N_WEBHOOK_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': N8N_API_KEY
},
body: JSON.stringify({ action, ...data })
});
if (!response.ok) {
throw new Error(`n8n error: ${response.status}`);
}
return response.json();
}
// MCP Server initialiseren
const server = new Server({
name: 'n8n-integration',
version: '1.0.0'
}, {
capabilities: {
tools: {}
}
});
// Tool: Database Query
server.setRequestHandler('tools/list', async () => ({
tools: [
{
name: 'query_database',
description: 'Voer een SQL query uit op de database via n8n',
inputSchema: {
type: 'object',
properties: {
query: {
type: 'string',
description: 'De SQL query om uit te voeren'
},
params: {
type: 'array',
description: 'Query parameters voor prepared statements'
}
},
required: ['query']
}
},
{
name: 'send_email',
description: 'Verstuur een email via n8n',
inputSchema: {
type: 'object',
properties: {
to: { type: 'string', description: 'Ontvanger email adres' },
subject: { type: 'string', description: 'Email onderwerp' },
message: { type: 'string', description: 'Email inhoud' }
},
required: ['to', 'subject', 'message']
}
},
{
name: 'create_task',
description: 'Maak een nieuwe taak aan in het project management systeem',
inputSchema: {
type: 'object',
properties: {
title: { type: 'string' },
description: { type: 'string' },
assignee: { type: 'string' },
due_date: { type: 'string', format: 'date' },
priority: { type: 'string', enum: ['low', 'medium', 'high'] }
},
required: ['title']
}
},
{
name: 'get_workflow_status',
description: 'Check de status van n8n workflows',
inputSchema: {
type: 'object',
properties: {
workflow_name: { type: 'string' }
}
}
},
{
name: 'trigger_workflow',
description: 'Trigger een specifieke n8n workflow',
inputSchema: {
type: 'object',
properties: {
workflow_id: { type: 'string' },
input_data: { type: 'object' }
},
required: ['workflow_id']
}
}
]
}));
// Tool execution handler
server.setRequestHandler('tools/call', async (request) => {
const { name, arguments: args } = request.params;
try {
let result;
switch (name) {
case 'query_database':
result = await callN8n('query_database', {
query: args.query,
params: args.params || []
});
break;
case 'send_email':
result = await callN8n('send_email', {
to: args.to,
subject: args.subject,
message: args.message
});
break;
case 'create_task':
result = await callN8n('create_task', {
title: args.title,
description: args.description || '',
assignee: args.assignee,
due_date: args.due_date,
priority: args.priority || 'medium'
});
break;
case 'get_workflow_status':
result = await callN8n('get_status', {
workflow_name: args.workflow_name
});
break;
case 'trigger_workflow':
result = await callN8n('trigger_workflow', {
workflow_id: args.workflow_id,
input_data: args.input_data || {}
});
break;
default:
throw new Error(`Unknown tool: ${name}`);
}
return {
content: [{
type: 'text',
text: JSON.stringify(result, null, 2)
}]
};
} catch (error) {
return {
content: [{
type: 'text',
text: `Error: ${error.message}`
}],
isError: true
};
}
});
// Server starten
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
console.error('n8n MCP Server running...');
}
main().catch(console.error);2.3 Package.json Configureren
{
"name": "n8n-mcp-server",
"version": "1.0.0",
"type": "module",
"main": "server.js",
"bin": {
"n8n-mcp": "./server.js"
},
"dependencies": {
"@modelcontextprotocol/sdk": "^0.5.0",
"node-fetch": "^3.3.0"
}
}Stap 3: Claude Code Configureren
Nu configureren we Claude Code om de MCP server te gebruiken.
3.1 Claude Code Settings
Open je Claude Code configuratie bestand. De locatie verschilt per OS:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
3.2 MCP Server Toevoegen
Voeg de n8n MCP server toe aan je configuratie:
{
"mcpServers": {
"n8n": {
"command": "node",
"args": ["/path/to/n8n-mcp-server/server.js"],
"env": {
"N8N_WEBHOOK_URL": "https://your-n8n.com/webhook/claude-mcp",
"N8N_API_KEY": "your-secure-api-key"
}
}
}
}3.3 Herstart Claude Code
Na het aanpassen van de configuratie, herstart Claude Code om de MCP server te laden.
Stap 4: Praktijkvoorbeelden
Nu je setup compleet is, hier zijn praktische voorbeelden van wat je kunt doen.
Voorbeeld 1: Data Ophalen en Analyseren
Claude, haal alle orders op van deze week en geef me een samenvatting.Achter de schermen:
- Claude roept
query_databasetool aan - n8n voert de query uit op je database
- Data wordt teruggestuurd naar Claude
- Claude analyseert en vat samen
Voorbeeld 2: Geautomatiseerde Rapportage
Claude, maak een rapport van de verkoopcijfers en email het naar het sales team.Flow:
query_database→ Haal verkoopcijfers op- Claude analyseert en formatteert rapport
send_email→ Verstuur naar sales@company.com
Voorbeeld 3: Task Management
Claude, maak een taak aan voor het development team om de bug in de checkout flow te fixen.Claude roept aan:
{
"tool": "create_task",
"arguments": {
"title": "Fix checkout flow bug",
"description": "Er is een bug gemeld in de checkout flow die...",
"assignee": "development-team",
"priority": "high",
"due_date": "2024-01-20"
}
}Voorbeeld 4: Workflow Orchestratie
Claude, trigger de lead nurturing workflow voor alle nieuwe signups van vandaag.Flow:
query_database→ Haal nieuwe signups op- Voor elke signup:
trigger_workflow→ Start nurturing sequence - Claude bevestigt aantal gestarte workflows
Advanced: Bi-directionele Communicatie
Tot nu toe hebben we Claude naar n8n laten communiceren. Je kunt ook n8n naar Claude laten communiceren.
n8n naar Claude via API
In n8n kun je de Anthropic API aanroepen:
Node: HTTP Request
Method: POST
URL: https://api.anthropic.com/v1/messages
Headers:
- x-api-key: {{$env.ANTHROPIC_API_KEY}}
- anthropic-version: 2023-06-01
- Content-Type: application/json
Body:
{
"model": "claude-3-sonnet-20240229",
"max_tokens": 1024,
"messages": [{
"role": "user",
"content": "Analyseer deze data: {{$json.data}}"
}]
}Event-driven Claude Triggers
Je kunt n8n gebruiken om Claude te "wakker maken" wanneer er iets belangrijks gebeurt:
Trigger: Database Trigger (nieuwe klacht)
↓
Code Node: Bereid context voor
↓
HTTP Request: Anthropic API
- "Analyseer deze klacht en stel een response voor"
↓
IF: Is urgent?
├── Ja → Slack alert + Auto-response
└── Nee → Queue voor reviewSecurity Best Practices
Bij het verbinden van AI met echte systemen is security cruciaal:
1. API Key Management
# Gebruik environment variables, nooit hardcode
export N8N_API_KEY=$(openssl rand -hex 32)2. Rate Limiting
Voeg rate limiting toe aan je n8n webhook:
// In een Code node aan het begin
const MAX_REQUESTS_PER_MINUTE = 30;
const clientId = $json.headers['x-client-id'] || 'default';
// Check rate limit in Redis/database
const requests = await getRequestCount(clientId, '1m');
if (requests >= MAX_REQUESTS_PER_MINUTE) {
return [{
json: { error: 'Rate limit exceeded' }
}];
}3. Input Validatie
Valideer alle input voordat je het verwerkt:
// SQL injection preventie
const allowedTables = ['orders', 'products', 'customers'];
const table = $json.body.table;
if (!allowedTables.includes(table)) {
throw new Error('Invalid table name');
}
// Prepared statements gebruiken
const query = 'SELECT * FROM ?? WHERE id = ?';
const params = [table, $json.body.id];4. Audit Logging
Log alle acties voor compliance en debugging:
// Log elke MCP actie
const auditLog = {
timestamp: new Date().toISOString(),
action: $json.body.action,
user: $json.headers['x-user-id'],
input: $json.body,
result: $json.result,
ip: $json.headers['x-forwarded-for']
};
// Naar audit database
await supabase.from('mcp_audit_logs').insert(auditLog);5. Scoped Permissions
Beperk wat Claude kan doen:
// Permission check
const userPermissions = await getUserPermissions($json.userId);
const requiredPermission = actionPermissionMap[$json.action];
if (!userPermissions.includes(requiredPermission)) {
throw new Error('Permission denied');
}Troubleshooting
Probleem: MCP Server start niet
Oplossing:
- Check Node.js versie:
node --version(moet 18+ zijn) - Controleer pad in configuratie
- Test server handmatig:
node server.js - Check logs:
tail -f ~/.claude/logs/mcp.log
Probleem: n8n webhook reageert niet
Oplossing:
- Controleer of workflow actief is
- Test webhook URL met cURL
- Check n8n logs voor errors
- Verifieer API key header
Probleem: Claude ziet de tools niet
Oplossing:
- Herstart Claude Code volledig
- Controleer JSON syntax in config
- Check MCP server logs
- Verifieer
tools/listresponse
Conclusie
De combinatie van n8n en Claude via MCP opent een wereld van mogelijkheden. Je krijgt Claude's intelligentie en redeneerkunst, gecombineerd met n8n's praktische automatiseringen en 400+ integraties.
De setup kost wat tijd, maar het resultaat is een krachtig systeem waarbij je met natuurlijke taal complexe taken kunt uitvoeren. Van database queries tot email automation tot workflow orchestratie - alles toegankelijk via een gesprek met Claude.
Begin simpel, test grondig, en bouw uit naarmate je meer vertrouwen krijgt in de integratie. De mogelijkheden zijn vrijwel onbeperkt.
Wil je meer leren over n8n of Claude Code? Bekijk onze andere artikelen:
Zelf aan de slag met Vibe Coding?
Leer hoe je met AI-tools werkende apps bouwt. Onze praktische cursussen nemen je stap voor stap mee.
Blijf op de hoogte
Ontvang maandelijks de nieuwste tips over vibe coding, AI tools en exclusieve content.
Meer artikelen
Welke ChatGPT versie moet je kiezen?
Free, Plus of Team? Complete vergelijking van alle ChatGPT versies met prijzen en aanbevelingen.
AI tutorial voor beginners: leer AI in 1 uur
Start met AI in 1 uur. Geen technische kennis nodig. Praktische oefeningen en uitleg in jip-en-janneke taal voor iedereen die AI wil leren gebruiken.
Hoe maak je een app van je website? Complete gids 2026
Zet je website om naar een app. PWA, native wrapper of rebuild? Complete gids met voor- en nadelen, stap-voor-stap uitleg en kostenanalyse.