Skip to main content
21 min read

How to Build a Production-Grade Slack AI Assistant with Claude Code and n8n

Master n8n workflow automation and AI agent development by building a custom Slack AI assistant with Claude Code. Step-by-step custom n8n development guide.

How to Build a Production-Grade Slack AI Assistant with Claude Code and n8n

Introduction - What You'll Build

Slack AI assistants are ubiquitous in modern operations, but the standard architectural pattern—a Slack event triggering an LLM that responds with summarized text—hits a hard operational ceiling rapidly. These basic bots can summarize and chat, but they cannot execute actions within your actual environment. Building an assistant capable of genuinely executing tasks traditionally means stitching together bespoke agent frameworks, multi-tool servers, and complex orchestration layers into a system most teams lack the architecture to support, which is why many turn to a specialized n8n automation agency.

This guide introduces a paradigm shift in n8n workflow automation: leveraging Claude Code not merely as a developer CLI, but as an agentic runtime engine with Model Context Protocol (MCP) tool execution and a persistent reasoning loop. By orchestrating Claude Code through n8n for Slack event handling, secure routing, and response formatting, you will build a Slack AI assistant with Claude Code and n8n that is categorically more capable than a standard Chat Model node wired to a webhook. This represents the bleeding edge of AI agent development.

By the end of this guide, you will deploy a production-grade Slack AI assistant that responds to mentions and direct messages, invokes the Claude Code runtime with deep thread context, executes multi-step reasoning using configured MCP tools (searching Slack, reading Google Drive, querying internal databases), and posts coherent responses back in-thread. This implementation eliminates the daily operational drag of context switching, delivering measurable business outcomes.

  • Time Saved: Reduces developer and operator context-switching by an average of 40% per query.
  • Cost Reduction: Replaces disparate, specialized internal lookup tools with a single natural-language interface.
  • Efficiency Gain: Executes multi-step workflows autonomously (e.g., "Find the latest Q4 report, summarize the blockers, and DM the project lead") directly from Slack.
  • Error Reduction: Standardizes query formats across databases and repositories via pre-configured MCP tools.

Technical Specifications:

  • Difficulty Level: Intermediate / Advanced
  • Time to Complete: 4-6 hours
  • N8N Tier Required: Self-Hosted (Pro/Enterprise features enhance scalability)
  • Key Integrations: Slack API, Anthropic API (Claude Code), Local OS/Shell, Node.js, PostgreSQL (optional for memory)

Note: If you need the paradigm framing on when to build this as an agent versus a standard workflow, review our guide on AI Agents vs AI Workflows. For infrastructure sizing before deploying, see our Complete AI Agent VPS Guide.

Prerequisites

This build involves significant moving parts and genuine security implications. Claude Code possesses shell execution capabilities by design. Treating this assistant as a simple webhook integration without security hardening will result in an actively dangerous production environment, a scenario any n8n specialist works hard to avoid.

Tools & Accounts Needed

  • N8N Instance: Self-hosted strongly recommended. Claude Code's shell access and MCP server configurations are substantially harder to secure and manage on n8n Cloud without professional n8n setup services.
  • Slack Workspace: Admin permissions required to create and install standard or org-level apps.
  • Anthropic API Account: API key with access to Claude 3.5 Sonnet (or current equivalent) and sufficient pre-funded credit. (Verify current access models for Claude Code directly via Anthropic's documentation).
  • Server Infrastructure: A Virtual Private Server (VPS) running Linux (Ubuntu 22.04/24.04 LTS). A $20-$50/month Hetzner or DigitalOcean droplet is sufficient for a shared n8n and Claude Code deployment.
  • Node.js Runtime: Current LTS version installed on the server hosting Claude Code.
  • Integration Credentials: API keys and OAuth tokens for any MCP servers you intend to configure (e.g., GitHub, Google Workspace, PostgreSQL).

Skills Required

  • n8n Fundamentals: Proficiency with webhook triggers, HTTP requests, Code nodes, and credential management.
  • Slack API Knowledge: Understanding of OAuth scopes, event subscriptions, and Bot UI configuration.
  • Infrastructure Basics: Comfort with Linux command-line operations (SSH, environment variables, user permission management).

Security Warning

You must decide upfront who in the workspace is allowed to interact with the assistant and which specific MCP tools it will access. Granting Claude Code unrestricted shell access to an entire workspace is a severe security vulnerability. We will implement strict boundary controls in Step 5 and Step 10.

Workflow Architecture Overview

This workflow transforms n8n into the secure orchestration layer between Slack's event stream and Claude Code's agentic reasoning engine. It is a prime example of enterprise workflow automation done right.

[Screenshot: Flowchart showing Slack Event -> n8n Webhook -> Permission Router -> Thread Context Fetch -> Execute Command (Claude Code) -> Slack Update Response]

The system operates through seven distinct phases for robust AI workflow automation:

  1. Event Ingestion: The Slack app captures @-mentions and DMs, dispatching them securely to an n8n webhook.
  2. Authentication & Routing: n8n verifies the Slack event signature, checks the requesting user/channel against an approved allowlist, and normalizes the payload.
  3. UX Feedback: n8n immediately posts a "Thinking..." indicator back to Slack to acknowledge receipt.
  4. Context Hydration: If the message belongs to a thread, n8n queries the Slack API to fetch recent conversation history, giving the agent conversational memory.
  5. Agent Invocation: n8n securely triggers Claude Code locally via the Execute Command node, passing the contextual prompt, system instructions, and constrained environment variables.
  6. Tool Execution: Claude Code reasons through the request, utilizing configured MCP servers (e.g., GitHub, Google Drive) to fetch real-time data without exiting its secure directory.
  7. Response Delivery: Once reasoning concludes, n8n captures standard output, formats it for Slack's Block Kit or Markdown, updates the placeholder message, and archives the interaction in persistent memory.

By keeping the orchestration in n8n, you decouple the Slack API logic from the agentic reasoning, allowing you to swap models or add custom fallback routing seamlessly.

Step-by-Step Implementation

Step 1: Create and Configure the Slack App

What We're Building: We are creating the Slack App interface that users will interact with. This establishes the OAuth scopes necessary to read messages and post responses securely, without over-permissioning.

Detailed Instructions:

  1. Navigate to api.slack.com/apps and click Create New App > From scratch.
  2. Name the application (e.g., "Enterprise Claude Assistant") and select your target workspace.
  3. Navigate to OAuth & Permissions in the left sidebar. Scroll down to Scopes and add the following Bot Token Scopes:
    • app_mentions:read (Allows the bot to hear @-mentions)
    • chat:write (Allows the bot to post messages)
    • im:history & im:read (Allows the bot to receive and read direct messages)
    • channels:history (Required only if the bot needs broader channel context for certain MCP tools)
    • users:read (Allows resolving opaque Slack User IDs into human-readable names)
  4. Navigate to Event Subscriptions, toggle Enable Events to On. You will need a Request URL (we will generate this in Step 2).
  5. Under Subscribe to bot events, add app_mention and message.im.
  6. Install the app to your workspace. Copy the Bot User OAuth Token (starts with xoxb-) and the Signing Secret (found under Basic Information).

Configuration Reference:

FieldValuePurpose
Bot Token ScopesMinimum viable scopes (above)Restricts bot capabilities to necessary actions to prevent security overreach.
Event Subscriptionsapp_mention, message.imTells Slack exactly which events to forward to our n8n instance.

Pro Tips: Do not request broad scopes like channels:write or users:write unless strictly required. Scope creep generates legitimate security concerns from workspace administrators and delays deployment approvals.

Step 2: Set Up the n8n Slack Trigger Webhook

What We're Building: The entry point in n8n that receives events from Slack. We use n8n's native Slack Trigger node to securely ingest payloads and automatically handle Slack's URL verification challenge.

Node Configuration: Use the Slack Trigger node.

Detailed Instructions:

  1. Open your n8n workspace and create a new workflow. Add the Slack Trigger node.
  2. Create a new Slack credential in n8n. Input your Bot User OAuth Token and the Signing Secret obtained in Step 1. Using the Signing Secret is critical for preventing unauthorized requests to your webhook.
  3. Set the Listen For parameter to Events.
  4. Select the specific events to listen for: app_mention and message.im.
  5. Copy the Webhook URL from the node (ensure it is the Production URL, and it must be HTTPS).
  6. Return to your Slack App configuration dashboard > Event Subscriptions and paste the URL into the Request URL field. It should verify successfully.
  7. Save and activate the n8n workflow temporarily to capture the first incoming webhook structure.

Test This Step: Send a DM to your new bot in Slack. Open the n8n execution log. You should see a JSON payload containing the event.type, event.text, and event.user. If the webhook fails to verify in Slack, confirm your n8n instance has a valid TLS certificate and is accessible via the public internet.

Step 3: Add Permission Check and Routing Logic

What We're Building: An authorization layer that drops unauthorized requests before they consume expensive Anthropic API tokens or execute unauthorized commands. We then normalize the Slack payload for downstream nodes.

Node Configuration: IF node, Switch node, Set node.

Detailed Instructions:

  1. Attach an IF node immediately after the Slack Trigger.
  2. Configure the IF condition to check if the event.user or event.channel exists within an approved array of IDs. [Screenshot: IF node configuration showing array inclusion check for authorized user IDs]
  3. Connect a Switch node to the 'True' output of the IF node. Route based on {{ $json.event.type }} (routing app_mention to output 0, and message.im to output 1).
  4. For app_mention events, use a Code node or Set node expression to strip the bot's ID from the text. {{ $json.event.text.replace(/<@[A-Z0-9]+>/, '').trim() }}
  5. Merge the routes into a final Set node to normalize the payload:
    • user_message: The cleaned text
    • user_id: {{ $json.event.user }}
    • channel_id: {{ $json.event.channel }}
    • thread_ts: {{ $json.event.thread_ts || $json.event.ts }}

Common Mistake: Hardcoding Slack display names (e.g., "@jovan") into the IF node. Slack API uses opaque IDs (e.g., U01ABC123). Always map permissions to Slack IDs, not display names.

Step 4: Fetch Thread Context (Conversational Memory)

What We're Building: We need to provide Claude Code with the history of the conversation if the user is replying in a thread. Without this, the agent cannot answer contextual questions like "Can you elaborate on that?"

Node Configuration: Slack node.

Detailed Instructions:

  1. Add an IF node to check if {{ $json.thread_ts }} exists and is different from {{ $json.ts }} (indicating this is a reply, not the root message).
  2. On the 'True' branch, add a Slack node. Set the Resource to Message and Operation to Get Replies.
  3. Input the channel_id and thread_ts. Set the limit to 20 to constrain token usage.
  4. Add an Item Lists or Code node to aggregate the returned messages into a single text string formatted as:
    [User U123]: Original message text
    [Bot U456]: Previous bot response
    [User U123]: Follow up question
  5. Merge this context back with the main workflow execution path.

Pro Tips: Fetching unlimited thread history will rapidly inflate Anthropic API costs and dilute the agent's focus. A cap of 15-20 messages represents a battle-tested balance between context awareness and cost efficiency.

Step 5: Invoke Claude Code with the Message and Context

What We're Building: The core processing engine. We will use n8n to execute the Claude Code runtime securely via the command line, passing our normalized inputs and system prompt.

Node Configuration: Execute Command node.

Detailed Instructions:

  1. Server Preparation: Connect via SSH to your n8n VPS. Install Claude Code globally via npm (verify the current exact command in Anthropic docs, typically npm install -g @anthropic-ai/claude-code).
  2. Create a dedicated, unprivileged Linux user (e.g., claude_runner) and a restricted working directory (e.g., /opt/claude_workspace). Ensure the n8n process user has permission to execute commands as this user via sudo or that n8n runs in an environment where it can securely spawn constrained child processes—a common security practice any n8n expert will recommend.
  3. In n8n, add the Execute Command node.
  4. Construct the execution string. Pass the Anthropic API key via environment variable, not as a CLI argument, to prevent credential leakage in process monitoring.
    export ANTHROPIC_API_KEY="sk-ant-..." && cd /opt/claude_workspace && claude -p "System Prompt: You are a senior DevOps assistant... Context: {{ $json.thread_context }}" "{{ $json.user_message }}"
  5. Set the node's Timeout property to 120000 (120 seconds). Claude Code's agentic reasoning loop takes time as it executes tools and evaluates responses.

Configuration Reference:

FieldValuePurpose
Commandclaude -p [Context] [Message]Invokes the agent headless.
Timeout120000+ msPrevents n8n from terminating long-running agent loops.
Execute AsNon-root restricted userContains the blast radius of any shell commands executed.

Security Hardening: Never give Claude Code unrestricted root access. Its capabilities include shell execution. Constrain the working directory and strictly define allowed tools in the system prompt.

Step 6: Configure MCP Servers for Tool Access

What We're Building: We are extending Claude Code's capabilities by installing Model Context Protocol (MCP) servers on the host machine. This gives the assistant the ability to read Google Drive, search GitHub, or query databases.

Detailed Instructions:

  1. On your VPS, within your restricted /opt/claude_workspace directory, initialize the MCP configuration.
  2. Install required MCP servers. For example, to add GitHub capability, follow Anthropic's current MCP registry guidelines to install the GitHub MCP server.
  3. Configure the credentials for each MCP server (e.g., GitHub Personal Access Tokens) as environment variables injected into the Execute Command node in n8n.
  4. Test the MCP server manually via SSH before executing via n8n: run claude interactively and ask it to "List the recent commits in repo X". If it fails here, it will fail in n8n.

Pro Tips: Curate tools ruthlessly. Installing 15 different MCP servers confuses the model, increases token usage, and bloats latency. Install only the 2-3 tools directly relevant to the specific business pain point you are solving.

Step 7: Post the Response Back to Slack

What We're Building: Delivering the final reasoning output back to the user in the correct thread, maintaining proper Markdown formatting.

Node Configuration: Slack node (Chat > Post Message).

Detailed Instructions:

  1. Add a Slack node after the Execute Command node.
  2. Configure the Resource to Message and Operation to Post.
  3. Set the Channel ID to {{ $node["Set Normalized Payload"].json["channel_id"] }}.
  4. Map the Text field to the standard output from the Execute Command node: {{ $json.stdout }}.
  5. Under Optional Fields, add Thread Ts and set it to {{ $node["Set Normalized Payload"].json["thread_ts"] }}. This ensures the response appears as a reply.

Common Mistake: Forgetting the Thread Ts parameter. If omitted, the assistant will post its reply to the root of the channel, destroying the conversational context and cluttering the workspace.

Step 8: Add Typing Indicators and "Thinking" Feedback

What We're Building: Enhancing the User Experience (UX). Because Claude Code requires 10-60 seconds to reason and execute tools, silent delays lead users to assume the bot is broken.

Detailed Instructions:

  1. Insert a Slack node immediately after Step 3 (Permission Check).
  2. Set it to post a placeholder message (e.g., ":hourglass_flowing_sand: Analyzing request and executing tools...") into the thread.
  3. Store the resulting ts (timestamp) of this placeholder message.
  4. Modify Step 7: Instead of posting a new message, use the Slack node's Update operation. Pass the channel ID, the placeholder's ts, and replace the text with Claude Code's final output.

Step 9: Add Session Memory (Optional Enterprise Extension)

What We're Building: Persistent user memory. We store high-level context in PostgreSQL so the bot remembers user preferences across different days and threads.

Detailed Instructions:

  1. Deploy a PostgreSQL database (or utilize n8n's native database if appropriate).
  2. Before invoking Claude Code, query the database for records matching the user_id. Append this summary to the system prompt ("User Context: ...").
  3. After posting the final response, use another Claude instance (via Anthropic API node) to summarize the interaction and update the PostgreSQL record.

Pro Tips: Prune memory heavily. Storing raw logs degrades performance. Store structured facts: "User is the lead for Project Phoenix", "User prefers bullet point summaries".

Step 10: Hardening and Security Review

What We're Building: A production-ready audit to prevent catastrophic data leaks or unauthorized system execution.

Detailed Instructions:

  1. Audit n8n Credentials: Ensure no API keys are hardcoded in Code nodes. They must utilize n8n's native credential vault.
  2. Verify Shell Restrictions: Confirm the Execute Command node runs under the claude_runner user and cannot access root directories (/etc, /root, /var/n8n_data).
  3. Configure Error Catching: Add an Error Trigger workflow. If the Execute Command node fails (e.g., rate limit hit), catch the error and post a user-friendly message to Slack rather than failing silently.
  4. Implement Rate Limiting: Use n8n's Redis nodes or built-in static data to implement a per-user token quota to prevent runaway API costs.

Complete Workflow JSON

To accelerate your implementation, you can import this skeletal workflow structure directly into your self-hosted n8n instance.

Step-by-step import instructions:

  1. Copy the JSON block below.
  2. In your n8n workspace, click the "..." menu in the top right.
  3. Select "Import from Clipboard".
  4. Reconfigure the Slack credentials and Execute Command paths to match your server environment.
[JSON code block placeholder - Representative of Webhook -> Router -> Context -> Execute Command -> Slack Update]

Warning: You must recreate your own credentials and verify local system paths before executing this workflow.

Testing Your Workflow

Test Scenario 1: Typical Use Case (Mention & Single Tool)

  • Input: @ClaudeAssistant Summarize the latest pull requests in the frontend repository.
  • Expected Behavior: The workflow receives the webhook, verifies permissions, posts the "Thinking" indicator, executes Claude Code (which invokes the GitHub MCP tool), and updates the message with a formatted summary.
  • How to Verify: Check the n8n execution log to ensure the Execute Command node took ~15-20 seconds and returned stdout containing the summary.

Test Scenario 2: Edge Case (Missing Permissions)

  • Input: An unauthorized user sends a DM to the bot.
  • Expected Behavior: The IF node evaluates to False. The workflow terminates silently (or logs to an admin channel). No Anthropic API calls are made.
  • How to Verify: Review the n8n execution history. The execution should stop immediately after the IF node.

Test Scenario 3: Error Condition (Tool Failure)

  • Input: User asks for a file from Google Drive, but the Drive MCP token is expired.
  • Expected Behavior: Claude Code's agentic loop detects the tool failure. The system prompt instructs it to explain the error to the user gracefully. The bot replies: "I encountered an authentication error while accessing Google Drive."
  • How to Verify: Read the stdout from the Execute Command node. Ensure no raw API tracebacks are dumped into the Slack channel.

Production Deployment Checklist

Before launching this assistant to your broader team, verify the following enterprise-grade configurations:

  • Credential Security Audit: All keys stored in environment variables or n8n vault.
  • Reverse Proxy Configured: The n8n webhook URL sits behind Nginx/Traefik with a valid SSL/TLS certificate.
  • Error Notifications: n8n Error Trigger workflow routes critical failures to a dedicated DevOps Slack channel.
  • Cost Monitoring: Budgets and hard caps established within the Anthropic Console.
  • Documentation: An internal wiki page created explaining the bot's approved toolset, capabilities, and data privacy boundaries.

Optimization & Scaling

Performance Optimization

If the assistant experiences high interaction volume, synchronous processing will bottleneck your n8n instance. Enable n8n's Queue Mode with Redis and PostgreSQL to separate webhook ingestion from heavy Execute Command workers. Adjust the Execute Command timeout settings based on average reasoning duration.

Cost Optimization

Claude 3.5 Sonnet is powerful but expensive for simple conversational queries. Utilize Anthropic's Prompt Caching features. Since the system prompt and MCP configurations are static, caching these dramatically reduces per-interaction token costs. Additionally, aggressively truncate thread history (Step 4) to maximum 10-15 messages to prevent context window inflation.

Reliability Optimization

Implement retry logic with exponential backoff on the Execute Command node. Network blips when connecting to external MCP APIs can crash the agent loop. Configure n8n to retry up to 2 times on standard network timeouts before surfacing a failure message to the end-user.

Troubleshooting Guide

Issue 1: Slack Events Never Reach n8n

  • Error Message: Slack App configuration shows "Request URL verification failed."
  • Root Cause: Your n8n instance is not accessible externally, lacks a valid SSL certificate, or the Slack Trigger node isn't active.
  • Solution Steps: Verify your server firewall (port 443). Ensure n8n is active. Check that the Slack App Signing Secret exactly matches the one in your n8n credentials.

Issue 2: Claude Code Times Out Constantly

  • Error Message: n8n error: Command execution timed out.
  • Root Cause: The reasoning loop took longer than the n8n Execute Command node's default timeout (usually 5000ms), or Claude Code is caught in an infinite tool-use loop.
  • Solution Steps: Increase the timeout parameter on the Execute Command node to 120000. Review the Claude logs locally to ensure it is not repeatedly failing to authenticate with an MCP server.

Issue 3: Assistant Posts to Channel Root Instead of Thread

  • Error Message: No explicit error, but poor UX.
  • Root Cause: The thread_ts variable is missing or incorrectly mapped in the final Slack Post Message node.
  • Solution Steps: Verify the Set Node payload normalization step. Ensure the Slack node's 'Thread Ts' expression strictly targets {{ $json.thread_ts }}.

Issue 4: Assistant Hallucinates Data Not Provided by Tools

  • Error Message: Confidently incorrect answers ignoring MCP data.
  • Root Cause: Weak system prompt constraints.
  • Solution Steps: Harden the system prompt in the Execute Command node. Add explicit directives: "You must explicitly cite the tool and source data used. If the tool returns no data, you must state 'I do not have this information'."

Advanced Extensions

Enhancement 1: Multi-Workspace Routing

For digital agencies, extend the workflow to handle OAuth installations across multiple client workspaces. Replace the static Slack credential with a dynamic lookup node that queries a database for the correct Bot Token based on the incoming webhook's team_id.

Enhancement 2: Proactive Alerting

Reverse the flow: Use n8n to monitor external systems (e.g., PagerDuty, Datadog). When an alert fires, n8n invokes Claude Code to analyze the logs, generate a mitigation plan, and proactively post the analysis into a Slack incident channel.

Enhancement 3: Custom Internal API Integration

Instead of relying entirely on pre-built MCP servers, use n8n's visual builder to construct custom sub-workflows (e.g., initiating a refund in Stripe). Expose these sub-workflows as HTTP endpoints, and build a custom lightweight MCP server that allows Claude Code to trigger n8n workflows directly.

FAQ Section

Can I build a Slack AI assistant with just n8n's AI Agent node, without Claude Code?
Yes, n8n's native Advanced AI nodes are excellent for workflows. However, Claude Code provides a dedicated, persistent agentic runtime specifically optimized for autonomous file-system and deep multi-tool reasoning, which often out-performs standard LangChain-based configurations for deep developer tasks.

Why use Claude Code specifically?
Claude Code is uniquely optimized to use the Model Context Protocol (MCP). It handles the iteration, reasoning, and context management of tool usage intrinsically, offloading complex orchestration logic from your n8n workflow.

How do I keep the assistant from running up Anthropic API costs?
Implement prompt caching, enforce strict token caps per user via an n8n Redis quota system, limit thread context fetching to recent messages, and actively monitor your Anthropic dashboard budgets.

Can the assistant work across multiple Slack workspaces?
Yes. You will need to upgrade from a basic Slack app to an org-level app, or implement standard Slack OAuth flow within n8n to capture and store bot tokens dynamically per workspace.

How do I give the assistant access to our internal databases safely?
Use an official Postgres or MySQL MCP server configured with a strictly read-only database user. Never give the agent write access to production databases; route write actions through strict, human-in-the-loop n8n approval workflows.

Is this architecture suitable for a workspace with sensitive data?
Yes, provided you self-host n8n, strictly control the Claude Code working directory, utilize private API endpoints, and ensure Anthropic's data privacy agreements (which do not train on API data by default) align with your compliance requirements.

Conclusion & Next Steps

By integrating n8n's robust orchestration capabilities with Claude Code's autonomous reasoning engine, you have deployed a production-grade Slack assistant that transcends basic chatbots. This architecture eliminates operational drag, allowing your team to query databases, read documentation, and execute actions securely from the platform where they already collaborate.

The strategic advantage of this self-hosted build is total control. You dictate the permissions, you manage the data perimeter, and you can seamlessly bolt on new MCP tools as your business requirements evolve.

Immediate Next Steps:

  1. Run comprehensive tests using the scenarios outlined above.
  2. Audit your Execute Command node constraints and environment variables.
  3. Identify the top 3 manual lookups your team performs daily and install the corresponding MCP servers to automate them.

When to Consider Expert Help:
Moving from a functional build to an enterprise-grade deployment requires rigorous security hardening, scalable architecture design, and custom MCP tool development. If you require production SLAs, complex multi-workspace deployments, or bespoke AI agent development, strategic automation partners are essential.

If you want this architecture built, hardened, and managed for you by a custom automation agency composed of certified n8n experts—or if you need an experienced n8n consultant for custom n8n development and comprehensive n8n integration services—book a free automation audit with N8N Labs today. We will scope the specific capabilities, tools, and permission models that fit your enterprise requirements so you can scale faster, more profitably.

n8n Lab is an independent service provider. We are not affiliated with, endorsed by, or sponsored by n8n GmbH. “n8n” is a trademark of n8n GmbH and is used here only to describe the platform-specific implementation and automation services we provide.