{"workflow":{"id":13592,"name":"Orchestrate enterprise MCP AI tool access with Claude and Google Sheets","views":21,"recentViews":0,"totalViews":21,"createdAt":"2026-02-22T15:07:11.018Z","description":"A secure, scalable enterprise AI orchestration layer built on the Model Context Protocol (MCP). This workflow standardizes tool access across all business systems, enforces permission-based data handling, applies contextual reasoning via Claude AI, and provides a single governance plane for multi-agent AI deployments.\n\n### How it works\n\n1. **Receive AI Agent Request** - Unified MCP webhook accepts tool or context requests from any agent\n2. **Enterprise Auth & RBAC** - Validates JWT, resolves role-based access controls, enforces tenant isolation\n3. **Context Assembly** - Builds full enterprise context: user profile, org policies, active sessions, prior tool calls\n4. **Claude AI Orchestration** - Reasons over context to select optimal tool chain, validate intent, plan execution\n5. **Policy Enforcement Engine** - Applies data classification, DLP rules, and geo/time-based restrictions\n6. **Multi-System Tool Dispatch** - Routes to CRM, ERP, HRMS, Data Warehouse, or custom APIs in parallel\n7. **Response Aggregation** - Merges multi-tool results, applies post-processing and redaction rules\n8. **Compliance Logging** - SOC2/ISO27001-ready audit trail with data lineage tracking\n9. **Return Enriched Context** - Delivers MCP-compliant response with reasoning trace back to agent\n\n### Setup Steps\n\n1. Import workflow into n8n\n2. Configure credentials:\n   - **Anthropic API** - Claude AI for orchestration and contextual reasoning\n   - **Google Sheets** - RBAC policy store, session registry, audit log\n   - **SMTP / Slack** - Security and compliance notifications\n   - **JWT Secret** - For enterprise token validation\n3. Populate the RBAC policy sheet with roles, permissions, and data classifications\n4. Configure your enterprise system endpoints in the tool dispatch nodes\n5. Set your tenant IDs and org-level data policies\n6. Activate workflow and register the webhook URL with your AI agent platform\n\n### Sample Enterprise MCP Request\n```json\n{\n  \"mcpVersion\": \"1.1\",\n  \"agentId\": \"sales-agent-prod-007\",\n  \"jwtToken\": \"eyJhbGciOiJIUzI1NiJ9...\",\n  \"tenantId\": \"ORG-ACME-001\",\n  \"userId\": \"john.doe@acme.com\",\n  \"userRole\": \"sales_manager\",\n  \"toolRequests\": [\n    { \"toolName\": \"crm.get_pipeline\", \"parameters\": { \"region\": \"APAC\" } },\n    { \"toolName\": \"erp.get_inventory\", \"parameters\": { \"sku\": \"PROD-001\" } }\n  ],\n  \"agentGoal\": \"Prepare a quarterly sales brief for the APAC team meeting\",\n  \"dataClassification\": \"INTERNAL\",\n  \"sessionId\": \"sess-xyz-001\"\n}\n```\n\n### Enterprise Features\n- **Multi-tenant isolation** — strict org boundary enforcement\n- **RBAC + ABAC** — role and attribute-based access control per tool per data class\n- **Data Loss Prevention (DLP)** — redacts PII/secrets before returning to agent\n- **Contextual AI reasoning** — Claude plans the optimal tool chain for agent goals\n- **SOC2 / ISO 27001** audit trail with data lineage\n- **Geo & time-based policy** — restrict tool access by region or business hours\n\n**Explore More LinkedIn & Social Automation:**  \n[Contact us](https://www.oneclickitsolution.com/contact-us/) to design AI-powered lead nurturing, content engagement, and multi-platform reply workflows tailored to your growth strategy.\n","workflow":{"id":"aOB31uw3PCRkygAt","meta":{"instanceId":"dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281","templateCredsSetupCompleted":true},"name":"MCP Enterprise AI Control Layer with Claude AI","tags":[],"nodes":[{"id":"a82ebe3f-7654-469c-a024-fa44486fef2c","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-16,32],"parameters":{"width":780,"height":1296,"content":"## MCP Enterprise AI Control Layer with Claude AI\n\nA secure, scalable enterprise AI orchestration layer built on the Model Context Protocol (MCP). This workflow standardizes tool access across all business systems, enforces permission-based data handling, applies contextual reasoning via Claude AI, and provides a single governance plane for multi-agent AI deployments.\n\n### How it works\n\n1. **Receive AI Agent Request** - Unified MCP webhook accepts tool or context requests from any agent\n2. **Enterprise Auth & RBAC** - Validates JWT, resolves role-based access controls, enforces tenant isolation\n3. **Context Assembly** - Builds full enterprise context: user profile, org policies, active sessions, prior tool calls\n4. **Claude AI Orchestration** - Reasons over context to select optimal tool chain, validate intent, plan execution\n5. **Policy Enforcement Engine** - Applies data classification, DLP rules, and geo/time-based restrictions\n6. **Multi-System Tool Dispatch** - Routes to CRM, ERP, HRMS, Data Warehouse, or custom APIs in parallel\n7. **Response Aggregation** - Merges multi-tool results, applies post-processing and redaction rules\n8. **Compliance Logging** - SOC2/ISO27001-ready audit trail with data lineage tracking\n9. **Return Enriched Context** - Delivers MCP-compliant response with reasoning trace back to agent\n\n### Setup Steps\n\n1. Import workflow into n8n\n2. Configure credentials:\n   - **Anthropic API** - Claude AI for orchestration and contextual reasoning\n   - **Google Sheets** - RBAC policy store, session registry, audit log\n   - **SMTP / Slack** - Security and compliance notifications\n   - **JWT Secret** - For enterprise token validation\n3. Populate the RBAC policy sheet with roles, permissions, and data classifications\n4. Configure your enterprise system endpoints in the tool dispatch nodes\n5. Set your tenant IDs and org-level data policies\n6. Activate workflow and register the webhook URL with your AI agent platform\n\n### Sample Enterprise MCP Request\n```json\n{\n  \"mcpVersion\": \"1.1\",\n  \"agentId\": \"sales-agent-prod-007\",\n  \"jwtToken\": \"eyJhbGciOiJIUzI1NiJ9...\",\n  \"tenantId\": \"ORG-ACME-001\",\n  \"userId\": \"john.doe@acme.com\",\n  \"userRole\": \"sales_manager\",\n  \"toolRequests\": [\n    { \"toolName\": \"crm.get_pipeline\", \"parameters\": { \"region\": \"APAC\" } },\n    { \"toolName\": \"erp.get_inventory\", \"parameters\": { \"sku\": \"PROD-001\" } }\n  ],\n  \"agentGoal\": \"Prepare a quarterly sales brief for the APAC team meeting\",\n  \"dataClassification\": \"INTERNAL\",\n  \"sessionId\": \"sess-xyz-001\"\n}\n```\n\n### Enterprise Features\n- **Multi-tenant isolation** — strict org boundary enforcement\n- **RBAC + ABAC** — role and attribute-based access control per tool per data class\n- **Data Loss Prevention (DLP)** — redacts PII/secrets before returning to agent\n- **Contextual AI reasoning** — Claude plans the optimal tool chain for agent goals\n- **SOC2 / ISO 27001** audit trail with data lineage\n- **Geo & time-based policy** — restrict tool access by region or business hours"},"typeVersion":1},{"id":"d235129f-95d6-468b-a6cf-4b6048e85fcc","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[960,464],"parameters":{"color":3,"width":440,"height":360,"content":"## 1. Enterprise Auth, RBAC & Context Assembly"},"typeVersion":1},{"id":"0f2c36e7-1926-4645-95c9-4e143e2bae11","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1424,208],"parameters":{"color":5,"width":780,"height":812,"content":"## 2. AI Orchestration & Policy Enforcement"},"typeVersion":1},{"id":"481fcca8-7706-4813-812d-5070326f0df5","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[2240,112],"parameters":{"color":3,"width":608,"height":940,"content":"## 3. Multi-System Tool Dispatch"},"typeVersion":1},{"id":"e9e6399c-5c60-4ace-a01c-48972a237745","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[2896,272],"parameters":{"color":5,"width":924,"height":828,"content":"## 4. Aggregation, DLP Redaction, Audit & MCP Response"},"typeVersion":1},{"id":"293a3eef-0079-42a5-8002-09dc1ea300cc","name":"Receive Enterprise AI Agent Request","type":"n8n-nodes-base.webhook","position":[1008,640],"webhookId":"mcp-enterprise-control-webhook","parameters":{"path":"mcp-enterprise","options":{},"httpMethod":"POST","responseMode":"responseNode"},"typeVersion":2},{"id":"8b987331-a09d-4a27-b387-2c45dc5bbae6","name":"Enterprise Auth, JWT and RBAC Validation","type":"n8n-nodes-base.code","position":[1232,640],"parameters":{"mode":"runOnceForEachItem","jsCode":"const body = $input.item.json.body || $input.item.json;\n\n// ---- MCP Schema validation ----\nconst required = ['mcpVersion', 'agentId', 'jwtToken', 'tenantId', 'userId', 'toolRequests', 'agentGoal'];\nconst missing = required.filter(f => !body[f]);\nif (missing.length > 0) {\n  throw new Error(`Enterprise MCP Schema Violation — Missing fields: ${missing.join(', ')}`);\n}\n\n// ---- MCP version check ----\nconst supportedVersions = ['1.0', '1.1', '1.2'];\nif (!supportedVersions.includes(body.mcpVersion)) {\n  throw new Error(`Unsupported MCP version: ${body.mcpVersion}`);\n}\n\n// ---- JWT validation (simplified — use proper JWT library in production) ----\nconst jwtParts = body.jwtToken.split('.');\nif (jwtParts.length !== 3) {\n  throw new Error('Invalid JWT format: token must have 3 parts');\n}\n// Decode JWT payload (base64)\nlet jwtPayload;\ntry {\n  const base64Payload = jwtParts[1].replace(/-/g, '+').replace(/_/g, '/');\n  jwtPayload = JSON.parse(Buffer.from(base64Payload, 'base64').toString('utf8'));\n} catch (e) {\n  throw new Error('JWT payload decode failed: ' + e.message);\n}\n\n// Validate JWT claims\nconst now = Math.floor(Date.now() / 1000);\nif (jwtPayload.exp && jwtPayload.exp < now) {\n  throw new Error(`JWT token expired at ${new Date(jwtPayload.exp * 1000).toISOString()}`);\n}\nif (jwtPayload.iss && jwtPayload.iss !== 'enterprise-idp') {\n  throw new Error(`JWT issuer mismatch: expected 'enterprise-idp', got '${jwtPayload.iss}'`);\n}\n\n// ---- Tenant isolation check ----\nconst jwtTenant = jwtPayload.tenantId || jwtPayload.org;\nif (jwtTenant && jwtTenant !== body.tenantId) {\n  throw new Error(`Tenant isolation violation: JWT tenant '${jwtTenant}' does not match request tenant '${body.tenantId}'`);\n}\n\n// ---- Tool request validation ----\nif (!Array.isArray(body.toolRequests) || body.toolRequests.length === 0) {\n  throw new Error('toolRequests must be a non-empty array');\n}\nif (body.toolRequests.length > 10) {\n  throw new Error(`Too many tool requests: ${body.toolRequests.length}. Maximum is 10 per orchestration call`);\n}\n\n// Validate each tool name format\nconst toolPattern = /^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$/;\nfor (const tr of body.toolRequests) {\n  if (!tr.toolName || !toolPattern.test(tr.toolName)) {\n    throw new Error(`Invalid toolName format: '${tr.toolName}'. Must match category.action`);\n  }\n}\n\n// ---- RBAC role normalization ----\nconst validRoles = ['viewer', 'analyst', 'sales_rep', 'sales_manager', 'hr_admin', 'finance_admin', 'it_admin', 'super_admin', 'ai_agent'];\nconst userRole = body.userRole?.toLowerCase() || 'viewer';\nif (!validRoles.includes(userRole)) {\n  throw new Error(`Unknown role: '${userRole}'. Valid roles: ${validRoles.join(', ')}`);\n}\n\n// Role privilege levels\nconst roleLevels = {\n  'viewer': 1, 'analyst': 2, 'sales_rep': 3, 'sales_manager': 4,\n  'hr_admin': 4, 'finance_admin': 4, 'it_admin': 5, 'super_admin': 6, 'ai_agent': 3\n};\n\n// ---- Build enterprise request context ----\nconst enterpriseRequest = {\n  // Gateway metadata\n  gatewayRequestId: `ECTL-${Date.now()}-${Math.random().toString(36).substr(2, 9).toUpperCase()}`,\n  mcpVersion: body.mcpVersion,\n  receivedAt: new Date().toISOString(),\n\n  // Agent identity\n  agentId: body.agentId.trim(),\n  agentGoal: body.agentGoal.trim(),\n  sessionId: body.sessionId || `sess-${Date.now()}`,\n\n  // Enterprise identity\n  tenantId: body.tenantId.trim().toUpperCase(),\n  userId: body.userId.trim().toLowerCase(),\n  userRole,\n  roleLevel: roleLevels[userRole] || 1,\n  department: body.department || jwtPayload.department || 'UNKNOWN',\n  costCenter: body.costCenter || jwtPayload.costCenter || null,\n  geoRegion: body.geoRegion || jwtPayload.region || 'GLOBAL',\n  jwtClaims: jwtPayload,\n\n  // Tool requests\n  toolRequests: body.toolRequests,\n  toolCount: body.toolRequests.length,\n\n  // Data classification\n  dataClassification: body.dataClassification || 'INTERNAL',\n  maxResponseClassification: body.maxResponseClassification || 'INTERNAL',\n\n  // Execution preferences\n  parallelExecution: body.parallelExecution !== false,\n  maxExecutionTimeMs: Math.min(parseInt(body.maxExecutionTimeMs) || 30000, 60000),\n  dryRun: body.dryRun === true,\n\n  // Tracing\n  traceId: body.traceId || `trace-${Date.now()}`,\n  correlationId: body.correlationId || null,\n  sourceIP: body.sourceIP || 'NOT_CAPTURED',\n\n  status: 'AUTHENTICATED'\n};\n\nreturn { json: { enterpriseRequest } };"},"typeVersion":2},{"id":"ee5a3af1-59e6-409a-bf92-aa8e1d50790e","name":"Fetch RBAC Policies for Role and Tools","type":"n8n-nodes-base.googleSheets","position":[1456,448],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"id","value":"="},"documentId":{"__rl":true,"mode":"id","value":"="}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4.5,"continueOnFail":true},{"id":"8443a71f-8cd9-4fdd-98e7-dd6956d7ba5f","name":"Fetch Active Session and Prior Context","type":"n8n-nodes-base.googleSheets","position":[1456,640],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"id","value":"="},"documentId":{"__rl":true,"mode":"id","value":"="}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4.5,"continueOnFail":true},{"id":"9f28db33-810a-4c6d-baa5-9ff93e76d080","name":"Build Enterprise Context Package","type":"n8n-nodes-base.code","position":[1680,608],"parameters":{"mode":"runOnceForEachItem","jsCode":"const enterpriseRequest = $('Enterprise Auth, JWT and RBAC Validation').item.json.enterpriseRequest;\nconst rbacPolicies = $('Fetch RBAC Policies for Role and Tools').all().map(i => i.json);\nconst sessionData = $('Fetch Active Session and Prior Context').all();\n\n// Build allowed tools map from RBAC policies\nconst allowedTools = {};\nconst deniedTools = [];\n\nfor (const policy of rbacPolicies) {\n  if (policy.permission === 'ALLOW') {\n    allowedTools[policy.toolName] = {\n      allowedDataClasses: policy.allowedDataClasses?.split(',').map(d => d.trim()) || ['PUBLIC', 'INTERNAL'],\n      maxRecords: parseInt(policy.maxRecords) || 1000,\n      allowWrite: policy.allowWrite === 'true',\n      allowDelete: policy.allowDelete === 'false',\n      requiresApproval: policy.requiresApproval === 'true',\n      fieldRestrictions: policy.fieldRestrictions?.split(',').map(f => f.trim()) || []\n    };\n  }\n}\n\n// Check each requested tool against RBAC\nconst authorizedRequests = [];\nconst unauthorizedRequests = [];\n\nfor (const toolRequest of enterpriseRequest.toolRequests) {\n  const policy = allowedTools[toolRequest.toolName] || allowedTools[`${toolRequest.toolName.split('.')[0]}.*`];\n  if (policy || enterpriseRequest.roleLevel >= 5) {\n    // it_admin and super_admin bypass most tool restrictions\n    authorizedRequests.push({\n      ...toolRequest,\n      policy: policy || { allowedDataClasses: ['CONFIDENTIAL'], maxRecords: 10000, allowWrite: true }\n    });\n  } else {\n    unauthorizedRequests.push(toolRequest.toolName);\n  }\n}\n\nif (authorizedRequests.length === 0) {\n  throw new Error(\n    `RBAC Denial: Role '${enterpriseRequest.userRole}' has no permission for any of the requested tools: ${enterpriseRequest.toolRequests.map(t => t.toolName).join(', ')}`\n  );\n}\n\n// Restore session history\nconst sessionRecord = sessionData.length > 0 ? sessionData[0].json : null;\nconst sessionHistory = sessionRecord ? JSON.parse(sessionRecord.toolCallHistory || '[]') : [];\nconst sessionAge = sessionRecord ? Math.floor((Date.now() - new Date(sessionRecord.createdAt).getTime()) / 60000) : 0;\n\n// Geo + time policy check\nconst hour = new Date().getUTCHours();\nconst isBusinessHours = hour >= 6 && hour <= 22; // 06:00–22:00 UTC\nconst geoAllowed = !['RESTRICTED_REGION_1', 'RESTRICTED_REGION_2'].includes(enterpriseRequest.geoRegion);\n\nif (!geoAllowed) {\n  throw new Error(`Geo-policy violation: Access from region '${enterpriseRequest.geoRegion}' is restricted`);\n}\n\nreturn {\n  json: {\n    enterpriseRequest,\n    contextPackage: {\n      rbacSummary: {\n        totalPolicies: rbacPolicies.length,\n        authorizedTools: authorizedRequests.map(t => t.toolName),\n        unauthorizedTools: unauthorizedRequests,\n        authorizedCount: authorizedRequests.length,\n        deniedCount: unauthorizedRequests.length\n      },\n      authorizedRequests,\n      sessionContext: {\n        sessionId: enterpriseRequest.sessionId,\n        isNewSession: !sessionRecord,\n        sessionAgeMinutes: sessionAge,\n        priorToolCallCount: sessionHistory.length,\n        recentToolCalls: sessionHistory.slice(-5)\n      },\n      environmentContext: {\n        isBusinessHours,\n        geoRegion: enterpriseRequest.geoRegion,\n        geoAllowed,\n        utcHour: hour\n      }\n    }\n  }\n};"},"typeVersion":2},{"id":"76cbacda-f0c3-47cc-a4d5-8c092ed13ca6","name":"Claude AI Contextual Orchestration and Tool Planning","type":"@n8n/n8n-nodes-langchain.agent","position":[1904,608],"parameters":{"text":"=You are an enterprise AI orchestration engine with deep knowledge of business systems, data governance, and multi-agent coordination. Your role is to reason over the enterprise context, plan the optimal tool execution strategy, validate every tool call for safety and policy compliance, and produce a structured execution plan.\n\n**Enterprise Request:**\n- Gateway Request ID: {{ $json.enterpriseRequest.gatewayRequestId }}\n- Tenant: {{ $json.enterpriseRequest.tenantId }}\n- Agent ID: {{ $json.enterpriseRequest.agentId }}\n- Agent Goal: {{ $json.enterpriseRequest.agentGoal }}\n- User: {{ $json.enterpriseRequest.userId }} (Role: {{ $json.enterpriseRequest.userRole }}, Level: {{ $json.enterpriseRequest.roleLevel }})\n- Department: {{ $json.enterpriseRequest.department }}\n- Geo Region: {{ $json.enterpriseRequest.geoRegion }}\n- Data Classification Ceiling: {{ $json.enterpriseRequest.maxResponseClassification }}\n- Session Age: {{ $json.contextPackage.sessionContext.sessionAgeMinutes }} minutes\n- Prior Tool Calls This Session: {{ $json.contextPackage.sessionContext.priorToolCallCount }}\n- Is Business Hours: {{ $json.contextPackage.environmentContext.isBusinessHours }}\n\n**Requested Tool Calls ({{ $json.contextPackage.rbacSummary.authorizedCount }} authorized of {{ $json.enterpriseRequest.toolCount }} requested):**\n{{ JSON.stringify($json.contextPackage.authorizedRequests, null, 2) }}\n\n**Denied Tools (RBAC):**\n{{ JSON.stringify($json.contextPackage.rbacSummary.unauthorizedTools, null, 2) }}\n\n**Recent Session History:**\n{{ JSON.stringify($json.contextPackage.sessionContext.recentToolCalls, null, 2) }}\n\n**Orchestration Tasks:**\n1. Analyze the agent goal and determine if the authorized tool set is sufficient to achieve it\n2. Identify optimal execution order and any dependencies between tools (e.g. tool B needs output from tool A)\n3. Flag any tool calls that appear anomalous, excessive, or misaligned with the stated agent goal\n4. Assess data sensitivity of the planned tool calls and recommend redaction needs\n5. Recommend whether parallel or sequential execution is safer given the goal and tool types\n6. Identify any tools that should be deferred, require human approval, or be skipped entirely\n7. Provide contextual reasoning that will be included in the audit trace\n\n**Enterprise Policy Rules:**\n- Tools accessing CONFIDENTIAL or RESTRICTED data require explicit goal justification\n- Write/mutating tools require sequential execution (never parallel) unless explicitly safe\n- Super-admin tools (user mgmt, tenant config) always require human confirmation\n- Agents must not chain more than 5 tool calls in a single request without elevated role\n- PII fields must be redacted in responses unless the requesting role has PII clearance\n- Cross-tenant data access is strictly prohibited\n\n**Response Format (JSON only, no markdown):**\n{\n  \"goalAchievable\": true,\n  \"goalAlignmentScore\": 91,\n  \"executionPlan\": [\n    {\n      \"step\": 1,\n      \"toolName\": \"crm.get_pipeline\",\n      \"executionMode\": \"parallel | sequential\",\n      \"dependsOn\": [],\n      \"priority\": \"high | medium | low\",\n      \"estimatedRiskLevel\": \"LOW\",\n      \"requiresHumanApproval\": false,\n      \"skipReason\": null,\n      \"orchestratorNotes\": \"Safe read-only call, no PII expected\"\n    }\n  ],\n  \"parallelGroups\": [[\"crm.get_pipeline\", \"erp.get_inventory\"], [\"analytics.run_report\"]],\n  \"sequentialTools\": [],\n  \"skipList\": [],\n  \"skipReasons\": {},\n  \"overallRiskLevel\": \"LOW | MEDIUM | HIGH | CRITICAL\",\n  \"overallRiskScore\": 18,\n  \"dataClassificationRequired\": \"INTERNAL\",\n  \"piiLikely\": false,\n  \"piiTools\": [],\n  \"redactionRecommended\": false,\n  \"redactionFields\": [],\n  \"humanApprovalRequired\": false,\n  \"humanApprovalTools\": [],\n  \"estimatedCompletionMs\": 3500,\n  \"orchestrationNotes\": \"Brief explanation of the plan for the audit log\",\n  \"warningsForAgent\": [\"list of non-blocking warnings the agent should know\"],\n  \"goalGapAnalysis\": \"What the agent can and cannot achieve with the authorized tool set\"\n}","options":{"systemMessage":"You are an enterprise AI orchestration engine. Respond with valid JSON only — no markdown, no code blocks, no preamble. Apply strict enterprise data governance principles. Always err on the side of caution for mutating or high-risk tool calls."},"promptType":"define"},"typeVersion":1.6},{"id":"0e792162-53ba-49bf-a3f4-9906c9fed8f3","name":"Claude AI Model","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[1984,832],"parameters":{"model":"=claude-sonnet-4-20250514","options":{"temperature":0.15}},"credentials":{"anthropicApi":{"id":"credential-id","name":"Anthropic account - test"}},"typeVersion":1},{"id":"a43b9b81-c3a6-40cf-879f-27ce35ae43fc","name":"Parse Orchestration Plan and Enforce Policies","type":"n8n-nodes-base.code","position":[2256,608],"parameters":{"mode":"runOnceForEachItem","jsCode":"const aiResponse = $input.item.json;\nlet aiText = aiResponse.response || aiResponse.output || aiResponse.text || '';\n\nif (aiResponse.content && Array.isArray(aiResponse.content)) {\n  aiText = aiResponse.content[0]?.text || '';\n}\n\nconst cleanText = aiText.replace(/```json\\s*/g, '').replace(/```\\s*/g, '').trim();\n\nlet orchestrationPlan;\ntry {\n  orchestrationPlan = JSON.parse(cleanText);\n} catch (e) {\n  throw new Error(`Failed to parse orchestration plan: ${e.message}. Raw: ${cleanText.substring(0, 200)}`);\n}\n\n// Pull upstream context\nconst upstream = $('Build Enterprise Context Package').item.json;\n\n// Hard block on CRITICAL risk\nif (orchestrationPlan.overallRiskLevel === 'CRITICAL') {\n  throw new Error(\n    `Enterprise Policy Block: CRITICAL risk orchestration plan rejected. Risk score: ${orchestrationPlan.overallRiskScore}. Notes: ${orchestrationPlan.orchestrationNotes}`\n  );\n}\n\n// Filter execution plan to only non-skipped tools\nconst activeTools = (orchestrationPlan.executionPlan || []).filter(\n  step => !step.skipReason && !orchestrationPlan.skipList?.includes(step.toolName)\n);\n\n// Build tool dispatch map with parameters\nconst toolDispatchMap = {};\nfor (const authorizedReq of upstream.contextPackage.authorizedRequests) {\n  toolDispatchMap[authorizedReq.toolName] = authorizedReq.parameters || {};\n}\n\nreturn {\n  json: {\n    enterpriseRequest: upstream.enterpriseRequest,\n    contextPackage: upstream.contextPackage,\n    orchestrationPlan,\n    activeTools,\n    toolDispatchMap,\n    requiresHumanApproval: orchestrationPlan.humanApprovalRequired,\n    redactionRequired: orchestrationPlan.redactionRecommended,\n    redactionFields: orchestrationPlan.redactionFields || [],\n    piiTools: orchestrationPlan.piiTools || [],\n    plannedAt: new Date().toISOString()\n  }\n};"},"typeVersion":2},{"id":"f776c1b3-488c-4720-b9d4-dbc321382c15","name":"Dispatch — CRM System","type":"n8n-nodes-base.httpRequest","position":[2480,448],"parameters":{"url":"https://YOUR_CRM_API/api/v2/mcp-dispatch","method":"POST","options":{"timeout":12000},"jsonBody":"={\n  \"tools\": {{ JSON.stringify($json.activeTools.filter(t => t.toolName.startsWith('crm.'))) }},\n  \"parameters\": {{ JSON.stringify(Object.fromEntries(Object.entries($json.toolDispatchMap).filter(([k]) => k.startsWith('crm.')))) }},\n  \"userId\": \"{{ $json.enterpriseRequest.userId }}\",\n  \"tenantId\": \"{{ $json.enterpriseRequest.tenantId }}\",\n  \"requestId\": \"{{ $json.enterpriseRequest.gatewayRequestId }}\"\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer YOUR_TOKEN_HERE"},{"name":"X-Tenant-ID","value":"={{ $json.enterpriseRequest.tenantId }}"},{"name":"X-Gateway-Request-ID","value":"={{ $json.enterpriseRequest.gatewayRequestId }}"},{"name":"X-User-Role","value":"={{ $json.enterpriseRequest.userRole }}"},{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.2,"continueOnFail":true},{"id":"c85e587e-3d1f-4aec-b859-967c189b7af8","name":"Dispatch — ERP System","type":"n8n-nodes-base.httpRequest","position":[2480,640],"parameters":{"url":"https://YOUR_ERP_API/api/v2/mcp-dispatch","method":"POST","options":{"timeout":12000},"jsonBody":"={\n  \"tools\": {{ JSON.stringify($json.activeTools.filter(t => t.toolName.startsWith('erp.'))) }},\n  \"parameters\": {{ JSON.stringify(Object.fromEntries(Object.entries($json.toolDispatchMap).filter(([k]) => k.startsWith('erp.')))) }},\n  \"userId\": \"{{ $json.enterpriseRequest.userId }}\",\n  \"tenantId\": \"{{ $json.enterpriseRequest.tenantId }}\",\n  \"requestId\": \"{{ $json.enterpriseRequest.gatewayRequestId }}\"\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer YOUR_TOKEN_HERE"},{"name":"X-Tenant-ID","value":"={{ $json.enterpriseRequest.tenantId }}"},{"name":"X-Gateway-Request-ID","value":"={{ $json.enterpriseRequest.gatewayRequestId }}"},{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.2,"continueOnFail":true},{"id":"32ad4f69-1c7d-45e1-b577-b145ce2aae94","name":"Dispatch — Analytics and Data Warehouse","type":"n8n-nodes-base.httpRequest","position":[2480,832],"parameters":{"url":"https://YOUR_ANALYTICS_API/api/v2/mcp-dispatch","method":"POST","options":{"timeout":20000},"jsonBody":"={\n  \"tools\": {{ JSON.stringify($json.activeTools.filter(t => t.toolName.startsWith('analytics.') || t.toolName.startsWith('data.'))) }},\n  \"parameters\": {{ JSON.stringify(Object.fromEntries(Object.entries($json.toolDispatchMap).filter(([k]) => k.startsWith('analytics.') || k.startsWith('data.')))) }},\n  \"userId\": \"{{ $json.enterpriseRequest.userId }}\",\n  \"tenantId\": \"{{ $json.enterpriseRequest.tenantId }}\",\n  \"maxClassification\": \"{{ $json.enterpriseRequest.maxResponseClassification }}\",\n  \"requestId\": \"{{ $json.enterpriseRequest.gatewayRequestId }}\"\n}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer YOUR_TOKEN_HERE"},{"name":"X-Tenant-ID","value":"={{ $json.enterpriseRequest.tenantId }}"},{"name":"X-Gateway-Request-ID","value":"={{ $json.enterpriseRequest.gatewayRequestId }}"},{"name":"X-Data-Classification","value":"={{ $json.enterpriseRequest.dataClassification }}"},{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.2,"continueOnFail":true},{"id":"12826b7a-bf7a-4013-9f6a-caebd014f04e","name":"Merge All System Dispatch Results","type":"n8n-nodes-base.merge","position":[2704,640],"parameters":{"mode":"mergeByPosition"},"typeVersion":3},{"id":"70059601-b742-4e7e-8d59-b6173c1b1b07","name":"Aggregate Results and Apply DLP Redaction","type":"n8n-nodes-base.code","position":[2928,640],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Collect all dispatch results\nconst crmResult = $('Dispatch — CRM System').item.json;\nconst erpResult = $('Dispatch — ERP System').item.json;\nconst analyticsResult = $('Dispatch — Analytics and Data Warehouse').item.json;\nconst orchestrationData = $('Parse Orchestration Plan and Enforce Policies').item.json;\n\n// ---- Aggregate raw results ----\nconst rawResults = {\n  crm: crmResult?.error ? { error: crmResult.error, status: 'FAILED' } : (crmResult || { status: 'SKIPPED' }),\n  erp: erpResult?.error ? { error: erpResult.error, status: 'FAILED' } : (erpResult || { status: 'SKIPPED' }),\n  analytics: analyticsResult?.error ? { error: analyticsResult.error, status: 'FAILED' } : (analyticsResult || { status: 'SKIPPED' })\n};\n\n// ---- DLP Redaction Engine ----\nconst PII_PATTERNS = [\n  { field: 'email', pattern: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}/g, replacement: '[EMAIL_REDACTED]' },\n  { field: 'phone', pattern: /\\b\\d{3}[-.]?\\d{3}[-.]?\\d{4}\\b/g, replacement: '[PHONE_REDACTED]' },\n  { field: 'ssn', pattern: /\\b\\d{3}-\\d{2}-\\d{4}\\b/g, replacement: '[SSN_REDACTED]' },\n  { field: 'creditCard', pattern: /\\b\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}\\b/g, replacement: '[CC_REDACTED]' },\n  { field: 'apiKey', pattern: /([Aa]pi[_-]?[Kk]ey|[Tt]oken|[Ss]ecret)[\"']?\\s*[:=]\\s*[\"']?[a-zA-Z0-9_\\-]{20,}/g, replacement: '[CREDENTIAL_REDACTED]' }\n];\n\nconst ROLE_HAS_PII_CLEARANCE = ['hr_admin', 'it_admin', 'super_admin'].includes(\n  orchestrationData.enterpriseRequest.userRole\n);\n\nfunction redactText(text) {\n  if (typeof text !== 'string') return text;\n  let redacted = text;\n  for (const pattern of PII_PATTERNS) {\n    redacted = redacted.replace(pattern.pattern, pattern.replacement);\n  }\n  return redacted;\n}\n\nfunction deepRedact(obj, depth = 0) {\n  if (depth > 8) return obj;\n  if (typeof obj === 'string') return redactText(obj);\n  if (Array.isArray(obj)) return obj.map(item => deepRedact(item, depth + 1));\n  if (obj && typeof obj === 'object') {\n    const result = {};\n    for (const [key, value] of Object.entries(obj)) {\n      // Redact entire field if it's a known sensitive field name\n      const sensitiveKeys = ['password', 'secret', 'token', 'apiKey', 'api_key', 'private_key', 'ssn', 'dob', 'dateOfBirth'];\n      if (sensitiveKeys.some(sk => key.toLowerCase().includes(sk))) {\n        result[key] = '[FIELD_REDACTED]';\n      } else {\n        result[key] = deepRedact(value, depth + 1);\n      }\n    }\n    return result;\n  }\n  return obj;\n}\n\n// Apply redaction based on role clearance and orchestration recommendation\nconst applyRedaction = orchestrationData.redactionRequired && !ROLE_HAS_PII_CLEARANCE;\nconst processedResults = applyRedaction ? deepRedact(rawResults) : rawResults;\n\n// ---- Compute execution summary ----\nconst systemStatuses = Object.entries(rawResults).map(([system, result]) => ({\n  system,\n  status: result.error ? 'FAILED' : result.status === 'SKIPPED' ? 'SKIPPED' : 'SUCCESS',\n  hasData: !result.error && result.status !== 'SKIPPED' && Object.keys(result).length > 0\n}));\n\nconst successCount = systemStatuses.filter(s => s.status === 'SUCCESS').length;\nconst failureCount = systemStatuses.filter(s => s.status === 'FAILED').length;\nconst skippedCount = systemStatuses.filter(s => s.status === 'SKIPPED').length;\n\nreturn {\n  json: {\n    enterpriseRequest: orchestrationData.enterpriseRequest,\n    orchestrationPlan: orchestrationData.orchestrationPlan,\n    contextPackage: orchestrationData.contextPackage,\n    redactionApplied: applyRedaction,\n    redactionFields: orchestrationData.redactionFields,\n    results: processedResults,\n    executionSummary: {\n      totalSystems: 3,\n      successCount,\n      failureCount,\n      skippedCount,\n      systemStatuses,\n      overallSuccess: failureCount === 0\n    },\n    aggregatedAt: new Date().toISOString()\n  }\n};"},"typeVersion":2},{"id":"d7f1ab6e-451f-4dbc-b8b0-748da71af581","name":"Send Policy and Security Alert","type":"n8n-nodes-base.emailSend","position":[3152,416],"webhookId":"268597cd-9389-4266-a119-027656cfeac7","parameters":{"options":{},"subject":"=[MCP ENTERPRISE ALERT] {{ $json.orchestrationPlan.overallRiskLevel }} Risk Orchestration — {{ $json.enterpriseRequest.tenantId }} | {{ $json.enterpriseRequest.agentId }}","toEmail":"=","fromEmail":"="},"credentials":{"smtp":{"id":"credential-id","name":"SMTP account"}},"typeVersion":2.1,"continueOnFail":true},{"id":"d432bb79-6ba8-45e0-80f0-8358e13fdf4d","name":"Write SOC2 Compliance Audit Log","type":"n8n-nodes-base.googleSheets","position":[3152,608],"parameters":{"columns":{"value":{},"schema":[],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"id","value":"="},"documentId":{"__rl":true,"mode":"id","value":"="}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4.5,"continueOnFail":true},{"id":"b712c7a8-c736-4c27-8f13-2c0fbe5111fd","name":"Update Session Registry","type":"n8n-nodes-base.googleSheets","position":[3152,800],"parameters":{"columns":{"value":{},"schema":[],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"id","value":"="},"documentId":{"__rl":true,"mode":"id","value":"="}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4.5,"continueOnFail":true},{"id":"111a1e21-32f6-435b-8e56-92ee63d632e2","name":"Build Final MCP Enterprise Response","type":"n8n-nodes-base.code","position":[3376,640],"parameters":{"mode":"runOnceForEachItem","jsCode":"const data = $input.item.json;\n\n// Build clean, MCP-compliant enterprise response\nreturn {\n  json: {\n    // MCP response envelope\n    mcpVersion: data.enterpriseRequest.mcpVersion,\n    gatewayRequestId: data.enterpriseRequest.gatewayRequestId,\n    requestId: data.enterpriseRequest.sessionId,\n    traceId: data.enterpriseRequest.traceId,\n\n    // Execution outcome\n    success: data.executionSummary.overallSuccess,\n    isDryRun: data.enterpriseRequest.dryRun,\n\n    // Tool results per system (DLP-redacted)\n    results: data.results,\n\n    // Execution summary for agent\n    executionSummary: data.executionSummary,\n\n    // Orchestration insights for agent\n    orchestrationInsights: {\n      goalAchievable: data.orchestrationPlan.goalAchievable,\n      goalAlignmentScore: data.orchestrationPlan.goalAlignmentScore,\n      goalGapAnalysis: data.orchestrationPlan.goalGapAnalysis,\n      warningsForAgent: data.orchestrationPlan.warningsForAgent || [],\n      toolsSkipped: data.orchestrationPlan.skipList || [],\n      skipReasons: data.orchestrationPlan.skipReasons || {}\n    },\n\n    // Governance metadata\n    governance: {\n      overallRiskLevel: data.orchestrationPlan.overallRiskLevel,\n      redactionApplied: data.redactionApplied,\n      redactionFields: data.redactionFields,\n      humanApprovalRequired: data.orchestrationPlan.humanApprovalRequired,\n      humanApprovalTools: data.orchestrationPlan.humanApprovalTools || [],\n      dataClassification: data.enterpriseRequest.dataClassification,\n      rbacDeniedTools: data.contextPackage.rbacSummary.unauthorizedTools\n    },\n\n    // Timing\n    respondedAt: new Date().toISOString()\n  }\n};"},"typeVersion":2},{"id":"cf0b540a-e21a-4b2b-8b04-e88b3eebf203","name":"Return MCP Enterprise Result to Agent","type":"n8n-nodes-base.respondToWebhook","position":[3600,640],"parameters":{"options":{"responseHeaders":{"entries":[{"name":"Content-Type","value":"application/json"},{"name":"X-MCP-Gateway-Request-ID","value":"={{ $json.gatewayRequestId }}"},{"name":"X-MCP-Risk-Level","value":"={{ $json.governance.overallRiskLevel }}"},{"name":"X-MCP-Tenant-ID","value":"={{ $json.gatewayRequestId.split('-')[0] }}"},{"name":"X-MCP-Trace-ID","value":"={{ $json.traceId }}"}]}},"respondWith":"json","responseBody":"={{ JSON.stringify($json, null, 2) }}"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"7f258627-e824-442b-a44d-fd6cc6a38fe0","connections":{"Claude AI Model":{"ai_languageModel":[[{"node":"Claude AI Contextual Orchestration and Tool Planning","type":"ai_languageModel","index":0}]]},"Dispatch — CRM System":{"main":[[{"node":"Merge All System Dispatch Results","type":"main","index":0}]]},"Dispatch — ERP System":{"main":[[{"node":"Merge All System Dispatch Results","type":"main","index":1}]]},"Update Session Registry":{"main":[[{"node":"Build Final MCP Enterprise Response","type":"main","index":0}]]},"Send Policy and Security Alert":{"main":[[{"node":"Build Final MCP Enterprise Response","type":"main","index":0}]]},"Write SOC2 Compliance Audit Log":{"main":[[{"node":"Build Final MCP Enterprise Response","type":"main","index":0}]]},"Build Enterprise Context Package":{"main":[[{"node":"Claude AI Contextual Orchestration and Tool Planning","type":"main","index":0}]]},"Merge All System Dispatch Results":{"main":[[{"node":"Aggregate Results and Apply DLP Redaction","type":"main","index":0}]]},"Build Final MCP Enterprise Response":{"main":[[{"node":"Return MCP Enterprise Result to Agent","type":"main","index":0}]]},"Receive Enterprise AI Agent Request":{"main":[[{"node":"Enterprise Auth, JWT and RBAC Validation","type":"main","index":0}]]},"Fetch Active Session and Prior Context":{"main":[[{"node":"Build Enterprise Context Package","type":"main","index":0}]]},"Fetch RBAC Policies for Role and Tools":{"main":[[{"node":"Build Enterprise Context Package","type":"main","index":0}]]},"Enterprise Auth, JWT and RBAC Validation":{"main":[[{"node":"Fetch RBAC Policies for Role and Tools","type":"main","index":0},{"node":"Fetch Active Session and Prior Context","type":"main","index":0}]]},"Aggregate Results and Apply DLP Redaction":{"main":[[{"node":"Send Policy and Security Alert","type":"main","index":0},{"node":"Write SOC2 Compliance Audit Log","type":"main","index":0},{"node":"Update Session Registry","type":"main","index":0}]]},"Dispatch — Analytics and Data Warehouse":{"main":[[{"node":"Merge All System Dispatch Results","type":"main","index":1}]]},"Parse Orchestration Plan and Enforce Policies":{"main":[[{"node":"Dispatch — CRM System","type":"main","index":0},{"node":"Dispatch — ERP System","type":"main","index":0},{"node":"Dispatch — Analytics and Data Warehouse","type":"main","index":0}]]},"Claude AI Contextual Orchestration and Tool Planning":{"main":[[{"node":"Parse Orchestration Plan and Enforce Policies","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":23,"nodeTypes":{"n8n-nodes-base.code":{"count":5},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.emailSend":{"count":1},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-base.httpRequest":{"count":3},"n8n-nodes-base.googleSheets":{"count":4},"@n8n/n8n-nodes-langchain.agent":{"count":1},"n8n-nodes-base.respondToWebhook":{"count":1},"@n8n/n8n-nodes-langchain.lmChatAnthropic":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Oneclick AI Squad","username":"oneclick-ai","bio":"The AI Squad Initiative is a pioneering effort to build, automate and scale AI-powered workflows using n8n.io. Our mission is to help individuals and businesses integrate AI agents seamlessly into their daily operations  from automating tasks and enhancing productivity to creating innovative, intelligent solutions. We design modular, reusable AI workflow templates that empower creators, developers and teams to supercharge their automation with minimal effort and maximum impact.","verified":true,"links":["https://www.oneclickitsolution.com/"],"avatar":"https://gravatar.com/avatar/848fca91367142f65f9e5c55d64e5c9952b160d7b060d103b52aa343c6bc7b3d?r=pg&d=retro&size=200"},"nodes":[{"id":11,"icon":"fa:envelope","name":"n8n-nodes-base.emailSend","codex":{"data":{"alias":["SMTP","email","human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.sendemail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/sendemail/"}]},"categories":["Communication","HITL","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Send Email","color":"#00bb88"},"iconData":{"icon":"envelope","type":"icon"},"displayName":"Send Email","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":9,"name":"Core Nodes"},{"id":28,"name":"HITL"}]},{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":24,"icon":"file:merge.svg","name":"n8n-nodes-base.merge","codex":{"data":{"alias":["Join","Concatenate","Wait"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-sync-data-between-two-systems/","icon":"🏬","label":"How to synchronize data between two systems (one-way vs. two-way sync"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Merge"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Merge","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":535,"icon":"file:webhook.svg","name":"n8n-nodes-base.respondToWebhook","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"transform\"]","defaults":{"name":"Respond to Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Respond to Webhook","typeVersion":2,"nodeCategories":[{"id":7,"name":"Utility"},{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1145,"icon":"file:anthropic.svg","name":"@n8n/n8n-nodes-langchain.lmChatAnthropic","codex":{"data":{"alias":["claude","sonnet","opus"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatanthropic/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Anthropic Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzdEN0Q4NyIgZD0iTTMyLjczIDBoLTYuOTQ1TDM4LjQ1IDMyaDYuOTQ1ek0xMi42NjUgMCAwIDMyaDcuMDgybDIuNTktNi43MmgxMy4yNWwyLjU5IDYuNzJoNy4wODJMMTkuOTI5IDB6bS0uNzAyIDE5LjMzNyA0LjMzNC0xMS4yNDYgNC4zMzQgMTEuMjQ2eiIvPjwvc3ZnPg=="},"displayName":"Anthropic Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":5,"name":"Engineering"},{"id":48,"name":"AI RAG"}],"image":[]}}