diff --git a/docs/ai-interfaces/context-lake.md b/docs/ai-interfaces/context-lake.md
index 2ce47006b2..f67a4b9f83 100644
--- a/docs/ai-interfaces/context-lake.md
+++ b/docs/ai-interfaces/context-lake.md
@@ -101,6 +101,17 @@ Define your organizational semantics once—service definitions, environment typ
+## External agents and AI workflows
+
+External AI agents and automation workflows can leverage Port's Context Lake to make intelligent, context-aware decisions without needing direct access to your entire toolchain. Instead of building custom integrations for each tool, external systems can query Port's unified knowledge layer to understand your organization's structure, relationships, and standards.
+
+### n8n integration
+
+Port provides a custom n8n node that simplifies integration with Port's AI agents and Context Lake. To get started:
+
+1. **[Set up Port's n8n custom node](/guides/all/setup-port-n8n-node)** — Install and configure the Port node in your n8n instance
+2. **[Build automation workflows](/guides/all/remediate-vulnerability-with-n8n-and-port)** — See an example of using Port as a context lake for vulnerability management workflows
+
## Getting started
Building your Context Lake is a natural part of setting up Port:
diff --git a/docs/guides/all/remediate-vulnerability-with-n8n-and-port.md b/docs/guides/all/remediate-vulnerability-with-n8n-and-port.md
new file mode 100644
index 0000000000..f51e372386
--- /dev/null
+++ b/docs/guides/all/remediate-vulnerability-with-n8n-and-port.md
@@ -0,0 +1,468 @@
+---
+displayed_sidebar: null
+description: Use Port as a context lake for n8n workflows to enrich vulnerability management with service metadata, ownership, and dependencies
+---
+
+# Remediate security vulnerability with n8n and Port AI
+
+Security teams often struggle to quickly understand the full context of vulnerabilities when they're detected. Raw vulnerability data from scanners like Snyk lacks critical operational context: which services are affected, who owns them, what environments are impacted, and what dependencies exist.
+
+This guide demonstrates how to use **Port as a context lake** to enrich n8n workflows with comprehensive service metadata. When a vulnerability is detected, n8n queries Port's AI agent to retrieve contextual information about affected services, ownership, environments, and dependencies. This enriched context enables two powerful workflows:
+
+1. **Targeted Slack notifications** — Send vulnerability alerts directly to owning teams with full context
+2. **AI-powered remediation** — Route vulnerabilities to coding agents with complete service context for automated fixes
+
+
+
+## Common use cases
+
+- **Contextual vulnerability alerts** — Enrich security notifications with service ownership, dependencies, and environment information
+- **Automated remediation routing** — Route vulnerabilities to appropriate teams or AI agents based on service context
+- **Incident management** — Provide operational context for security incidents, outages, or deployment events
+
+## Prerequisites
+
+Before you begin, ensure you have:
+
+- Completed the [onboarding process](/getting-started/overview)
+- A Port account with [AI agents feature enabled](/ai-interfaces/ai-agents/overview#access-to-the-feature)
+- Security vulnerabilities synced into Port (e.g., via [Snyk](/build-your-software-catalog/sync-data-to-catalog/code-quality-security/snyk/), [Wiz](/build-your-software-catalog/sync-data-to-catalog/code-quality-security/wiz), or [SonarQube](/build-your-software-catalog/sync-data-to-catalog/code-quality-security/sonarqube))
+- You have completed the setup in the [Set up Port's n8n custom node guide](../all/setup-port-n8n-node.md)
+- You have completed the setup in the [Trigger Claude Code from Port guide](https://docs.port.io/guides/all/trigger-claude-code-from-port) (Optional)
+- Slack workspace and [developer token](https://api.slack.com/) (for the notification workflow)
+- [OpenAI API key](https://platform.openai.com/api-keys) (for AI remediation workflow)
+
+
+## Set up the Port context retriever agent
+
+The context retriever agent is an AI agent that uses Port's catalog as a knowledge base to provide contextual enrichment for any entity or event. It analyzes inputs (like vulnerability details) and returns structured information about affected services, owners, environments, scorecards, dependencies and more.
+
+### Create the context retriever agent
+
+1. Go to the [AI Agents](https://app.getport.io/_ai_agents) page of your portal
+2. Click on `+ AI Agent`
+3. Toggle `Json mode` on
+4. Copy and paste the following JSON schema
+
+
+ Context Retriever Agent (Click to expand)
+
+ ```json showLineNumbers
+ {
+ "identifier": "context_retriever_agent",
+ "title": "Context Retriever Agent",
+ "icon": "Details",
+ "team": [],
+ "properties": {
+ "description": "AI agent that provides contextual enrichment for any entity or event using the Port catalog as a knowledge base",
+ "status": "active",
+ "prompt": "You are an assistant that provides **contextual enrichment** for any entity or event using the **Port catalog** as a knowledge base. Your goal is to retrieve relevant context that helps downstream systems, agents, or security teams understand how a given entity fits within the broader ecosystem.\n\nYou will receive an input describing an **entity or event**.\nAnalyze the input and use the Port catalog to return structured contextual information.\n\n**Example inputs include:**\n\n* A detected security vulnerability\n* An active incident or outage\n* A new deployment or release event\n* A system health anomaly\n\n---\n\n### **For each input, provide the following:**\n\n1. Affected service identifier\n2. Ownership or responsible team(s)\n3. Communication channels such as Slack channel name\n4. Related environments or deployment targets\n5. Dependencies or linked entities in the Port catalog (e.g., repositories, cloud resources, deployments, last X pull requests, or issues)\n6. Relevant scorecards the define and track engineering standards, KPIs, and quality metrics\n7. Any additional metadata or relationships that provide useful operational context\n\n---\n\n### **Output Format**\n\nReturn the result as **structured JSON** with the following keys:\n\n`identifier`, `title`, `related_services`, `owners`, `slack_channel`, `environments`, `dependencies`, `scorecards` and `notes`.\n\n**Example output:**\n\n```json\n{\n \"identifier\": \"INC-1023\",\n \"title\": \"Database connection timeout in payments service\",\n \"affected_service\": \"port-labs/payment-service\",\n \"owners\": [\"payments-team\"],\n \"slack_channel\": \"tech-general\",\n \"environments\": [\"production\"],\n \"dependencies\": [\"postgres-cluster-prod\", \"redis-cache\"],\n \"scorecards\": [\"production-readiness not met\", \"code maturity passed\"],\n \"notes\": \"The issue affects all payment operations in production. Linked to previous incident INC-1009.\"\n}\n```\n\nIf a field cannot be determined, return it as an empty string or an empty list.",
+ "execution_mode": "Automatic",
+ "tools": [
+ "^(list|get|search|track|describe)_.*"
+ ]
+ },
+ "relations": {}
+ }
+ ```
+
+
+5. Click `Create` to save the agent
+
+
+## Import the n8n workflow template
+
+1. Open your n8n instance
+2. Click on **Workflows** → **Import from File** or **Import from URL**
+3. Copy the workflow JSON from the template below
+
+
+ n8n Workflow Template (Click to expand)
+
+ ```json showLineNumbers
+ {
+ "name": "AI-Assisted Vulnerability Remediation",
+ "nodes": [
+ {
+ "parameters": {
+ "httpMethod": "POST",
+ "path": "security/vulnerability_detected",
+ "options": {}
+ },
+ "name": "Webhook Trigger",
+ "type": "n8n-nodes-base.webhook",
+ "typeVersion": 1,
+ "position": [
+ -928,
+ 96
+ ],
+ "webhookDescription": "Triggered when a new vulnerability is detected",
+ "id": "da38b906-9eda-4157-891e-13f828cb9b5c",
+ "webhookId": "67326f7b-22c3-46c0-9f9f-805fc1401647"
+ },
+ {
+ "parameters": {
+ "resource": "chat",
+ "model": "gpt-4o-mini",
+ "prompt": {
+ "messages": [
+ {
+ "content": "=You are a cybersecurity assistant. Given the following vulnerability details, summarize the issue, assess impact, and generate a clear remediation plan.\n\nVulnerability:{{ $('Webhook Trigger').item.json.body.vulnerability_id }}\nDescription: {{ $('Webhook Trigger').item.json.body.description }}\nSeverity: {{ $('Webhook Trigger').item.json.body.severity }}\n\nContext: {{ $json.result.message }}\n\nYour response must be a single valid JSON object only, without any code block formatting, markdown, explanations, or extra text. \nDo not include ```json or ``` or any surrounding characters — just raw JSON.\n\nRequired output schema:\n{\n \"summary\": \"\",\n \"impact\": \"\",\n \"remediation_plan\": \"\",\n \"is_fixable\": boolean true or false\n}"
+ }
+ ]
+ },
+ "options": {},
+ "requestOptions": {}
+ },
+ "name": "OpenAI Remediation Plan",
+ "type": "n8n-nodes-base.openAi",
+ "typeVersion": 1,
+ "position": [
+ -64,
+ 96
+ ],
+ "id": "b72c278e-6aaa-4b51-873c-921c0d4d0dab",
+ "credentials": {
+ "openAiApi": {
+ "id": "jsaQyiVUkiZdKJuz",
+ "name": "OpenAi account"
+ }
+ }
+ },
+ {
+ "parameters": {
+ "channel": "#security-updates",
+ "text": "=⚠️ *AI Remediation Workflow Error*\nNode: {{$node.name}}\nError: {{$error.message}}",
+ "otherOptions": {},
+ "attachments": []
+ },
+ "name": "Error Alert Slack",
+ "type": "n8n-nodes-base.slack",
+ "typeVersion": 1,
+ "position": [
+ -384,
+ 320
+ ],
+ "id": "f8f1726a-df54-48d4-adb7-005a49bfa541",
+ "credentials": {
+ "slackApi": {
+ "id": "GoOLAtWBRwTADKc8",
+ "name": "Slack account"
+ }
+ }
+ },
+ {
+ "parameters": {},
+ "name": "Error Trigger",
+ "type": "n8n-nodes-base.errorTrigger",
+ "typeVersion": 1,
+ "position": [
+ -848,
+ 320
+ ],
+ "id": "a7cf6d6c-e1eb-4d90-afd0-e714d92c7a54"
+ },
+ {
+ "parameters": {
+ "channel": "={{ $('Process Port AI Response').item.json.result.message.parseJson().slack_channel || \"\" }}",
+ "text": "={{ \n`🚨 *Vulnerability Alert*\n\n*ID:* ${$('Webhook Trigger').item.json.body.vulnerability_id}\n*Severity:* ${$('Webhook Trigger').item.json.body.severity}\n*Summary:* ${$node[\"OpenAI Remediation Plan\"].json[\"message\"][\"content\"].parseJson().summary}\n*Impact:* ${$node[\"OpenAI Remediation Plan\"].json[\"message\"][\"content\"].parseJson().impact}\n*Remediation Plan:* ${$node[\"OpenAI Remediation Plan\"].json[\"message\"][\"content\"].parseJson().remediation_plan}\n\n_Workflow: AI-Assisted Remediation_`\n}}\n",
+ "otherOptions": {},
+ "attachments": []
+ },
+ "name": "Send Slack Message",
+ "type": "n8n-nodes-base.slack",
+ "typeVersion": 1,
+ "position": [
+ 800,
+ 112
+ ],
+ "id": "8bfb94df-43ca-42f8-8b81-aad696ec540d",
+ "credentials": {
+ "slackApi": {
+ "id": "GoOLAtWBRwTADKc8",
+ "name": "Slack account"
+ }
+ }
+ },
+ {
+ "parameters": {
+ "conditions": {
+ "boolean": [
+ {
+ "value1": "={{ $json.message.content.parseJson().is_fixable }}",
+ "value2": "={{ true }}"
+ }
+ ]
+ }
+ },
+ "name": "Is Fixable?",
+ "type": "n8n-nodes-base.if",
+ "typeVersion": 1,
+ "position": [
+ 208,
+ 96
+ ],
+ "id": "7493e053-5178-48f4-bbef-71daecaa399f"
+ },
+ {
+ "parameters": {
+ "method": "POST",
+ "url": "https://api.getport.io/v1/actions/run_claude_code_demo/runs",
+ "authentication": "genericCredentialType",
+ "genericAuthType": "httpBearerAuth",
+ "sendBody": true,
+ "specifyBody": "json",
+ "jsonBody": "={{ {\n properties: {\n service: $('Process Port AI Response').item.json.result.message.parseJson().affected_service || \"\",\n prompt: \"Generate a code fix for the security vulnerability based on the AI-provided summary \" + $json.message.content.parseJson().summary + \".\\n\\nHere is the information about the security vulnerability remediation plan:\\n\" + $json.message.content.parseJson().remediation_plan + \"\\n\\nAfter generating the code, open a PR with a description summarizing what was fixed and why.\"\n }\n} }}",
+ "options": {}
+ },
+ "type": "n8n-nodes-base.httpRequest",
+ "typeVersion": 4.3,
+ "position": [
+ 496,
+ -128
+ ],
+ "id": "ad946b73-bc0d-4caf-8907-99d6cd6d2671",
+ "name": "Trigger Claude Code",
+ "credentials": {
+ "httpBearerAuth": {
+ "id": "w6HyPPyI9LWW6Xgl",
+ "name": "Bearer Auth account"
+ }
+ }
+ },
+ {
+ "parameters": {
+ "agentIdentifier": "context_retriever_agent",
+ "prompt": "=You are an assistant that provides contextual enrichment for vulnerabilities using the Port catalog as a knowledge base. A new security vulnerability has been detected.\nVulnerability Details:\n- Identifier:{{ $('Webhook Trigger').item.json.body.vulnerability_id }}\n- Description:{{ $('Webhook Trigger').item.json.body.description }}\n- Severity:{{ $('Webhook Trigger').item.json.body.severity }}\n\nUsing the Port catalog (which stores data about services, components, environments, owners, and relationships), return relevant contextual information that will help downstream AI agents or security teams understand how this vulnerability relates to other entities. Specifically, retrieve:\n1. The affected service or repo linked to this vulnerability\n2. Ownership or responsible team(s)\n3. Communication channels such as Slack channel name\n4. Related environments or deployment targets\n5. Dependencies or linked entities in the Port catalog (for example, linked repositories, cloud resources, or microservices)\n6. Any additional metadata that can help prioritize or triage this vulnerability.\n\n Format the response as structured JSON with the following keys: `identifier`, `title`, `affected_service`, `slack_channel`, `owners`, `environments`, `dependencies`, and `notes`.",
+ "labels": "{\n \"source\": \"n8n-workflow\",\n \"use_case\": \"vulnerability-context-enrichment\"\n }",
+ "model": "gpt-5"
+ },
+ "type": "CUSTOM.portIo",
+ "typeVersion": 1,
+ "position": [
+ -624,
+ 96
+ ],
+ "id": "ad298688-35d1-4278-9e1d-fca3856eb02d",
+ "name": "Get Context From Port",
+ "credentials": {
+ "portIoApi": {
+ "id": "a9s5zHKi57ADlTON",
+ "name": "Port.io account"
+ }
+ }
+ },
+ {
+ "parameters": {
+ "operation": "getInvocation",
+ "invocationId": "={{ $json.invocationIdentifier }}"
+ },
+ "type": "CUSTOM.portIo",
+ "typeVersion": 1,
+ "position": [
+ -352,
+ 96
+ ],
+ "id": "f80eed76-7b4d-4b1e-a69d-cad360241c13",
+ "name": "Process Port AI Response",
+ "credentials": {
+ "portIoApi": {
+ "id": "a9s5zHKi57ADlTON",
+ "name": "Port.io account"
+ }
+ }
+ }
+ ],
+ "pinData": {},
+ "connections": {
+ "Webhook Trigger": {
+ "main": [
+ [
+ {
+ "node": "Get Context From Port",
+ "type": "main",
+ "index": 0
+ }
+ ]
+ ]
+ },
+ "OpenAI Remediation Plan": {
+ "main": [
+ [
+ {
+ "node": "Is Fixable?",
+ "type": "main",
+ "index": 0
+ }
+ ]
+ ]
+ },
+ "Error Trigger": {
+ "main": [
+ [
+ {
+ "node": "Error Alert Slack",
+ "type": "main",
+ "index": 0
+ }
+ ]
+ ]
+ },
+ "Is Fixable?": {
+ "main": [
+ [
+ {
+ "node": "Trigger Claude Code",
+ "type": "main",
+ "index": 0
+ }
+ ],
+ [
+ {
+ "node": "Send Slack Message",
+ "type": "main",
+ "index": 0
+ }
+ ]
+ ]
+ },
+ "Trigger Claude Code": {
+ "main": [
+ [
+ {
+ "node": "Send Slack Message",
+ "type": "main",
+ "index": 0
+ }
+ ]
+ ]
+ },
+ "Get Context From Port": {
+ "main": [
+ [
+ {
+ "node": "Process Port AI Response",
+ "type": "main",
+ "index": 0
+ }
+ ]
+ ]
+ },
+ "Process Port AI Response": {
+ "main": [
+ [
+ {
+ "node": "OpenAI Remediation Plan",
+ "type": "main",
+ "index": 0
+ }
+ ]
+ ]
+ }
+ },
+ "active": false,
+ "settings": {
+ "executionOrder": "v1"
+ },
+ "versionId": "0d68ebcf-c7ab-489d-9713-9a23694454ac",
+ "meta": {
+ "templateCredsSetupCompleted": true,
+ "instanceId": "e9a36cfd74df34fd103d5f6c7fed0e3d25bfc51a5d136cd0fb7eba9c77b96ae3"
+ },
+ "id": "eNhr3iawT6LAYacO",
+ "tags": []
+ }
+ ```
+
+
+ :::tip Default value replacement
+ Replace `` with the Slack channel where you want notifications sent if Port cannot find a specific channel for the vulnerability.
+
+ Similarly, replace `` with your default infrastructure repository. This will be used if no repository or service is linked to the vulnerability in Port as part of the coding agent execution.
+ :::
+
+4. After importing, configure the following credentials in n8n:
+ - **Port.io credentials** — Use the Port.io credential you created during node installation (contains your Client ID and Client Secret)
+ - **Slack credentials** — Add your Slack API token
+ - **OpenAI credentials** — Add your OpenAI API key
+
+### Configure the workflow
+
+The workflow consists of several key nodes:
+
+1. **Webhook Trigger** — Receives vulnerability alerts from Snyk or other security scanners
+2. **Get Context From Port** — Uses Port's custom node to invoke the context retriever agent and retrieve service metadata
+3. **Process Port AI Response** — Uses Port's custom node to get the full AI response with context (handles async invocation automatically)
+4. **OpenAI Remediation Plan** — Generates a remediation plan using the enriched context from Port
+5. **Is Fixable?** — Routes to either automated fix or notification based on the remediation plan
+6. **Trigger Claude Code** — (Optional) Triggers automated code fix via Port action
+7. **Send Slack Message** — Sends notification to Slack with context
+8. **Error Trigger** and **Error Alert Slack** — Handle workflow errors gracefully
+
+
+## Workflow patterns
+
+The n8n workflow demonstrates two primary patterns for using Port as a context lake:
+
+### Pattern 1: Targeted Slack notifications
+
+When a vulnerability is detected, the workflow:
+
+1. Receives the vulnerability alert via webhook
+2. Queries Port's context retriever agent to get:
+ - Affected services
+ - Owning teams
+ - Slack channel
+ - Related environments
+ - Dependencies
+3. Sends a targeted Slack notification to the owning team with full context
+
+This ensures security alerts reach the right people with all the information they need to prioritize and respond.
+
+### Pattern 2: AI-powered remediation
+
+For fixable vulnerabilities, the workflow:
+
+1. Retrieves context from Port (same as Pattern 1)
+2. Generates a remediation plan using OpenAI with the enriched context
+3. Routes to Claude Code (or another coding agent) to automatically generate a fix
+4. Opens a pull request with the fix
+
+The Port context ensures the AI agent understands the service architecture, dependencies, and best practices before generating code.
+
+## Test the workflow
+
+### Test with a sample vulnerability
+
+1. **Trigger the webhook** with a sample payload:
+
+ ```json
+ {
+ "vulnerability_id": "CVE-2025-10023",
+ "description": "Buffer overflow in crypto library 2.1.4",
+ "severity": "high"
+ }
+ ```
+
+2. **Verify Port context retrieval** — Check that the "Get Context From Port" and "Process Port AI Response" nodes successfully retrieve:
+ - Related services
+ - Ownership information
+ - Environment details
+ - Dependencies
+
+3. **Check Slack notification** — Verify the notification includes:
+ - Vulnerability details
+ - Service context from Port
+ - Remediation plan
+
+
+
+
+4. **Verify AI remediation** (if applicable) — Confirm that fixable vulnerabilities trigger the coding agent with proper context
+
+## Related resources
+
+- [Remediate vulnerabilities with AI](/guides/all/remediate-vulnerability-with-ai) — Use Port AI agents to automatically enrich and fix vulnerabilities
+- [Trigger Claude Code from Port](/guides/all/trigger-claude-code-from-port) — Set up Claude Code integration with Port
+- [Set up the Task Manager AI agent](/guides/all/setup-task-manager-ai-agent) — Create an AI agent to manage and prioritize development tasks
+
diff --git a/docs/guides/all/setup-port-n8n-node.md b/docs/guides/all/setup-port-n8n-node.md
new file mode 100644
index 0000000000..a3ba5daad2
--- /dev/null
+++ b/docs/guides/all/setup-port-n8n-node.md
@@ -0,0 +1,237 @@
+---
+displayed_sidebar: null
+description: Install and configure Port's custom n8n node to integrate Port AI agents and workflows with n8n automation
+---
+
+# Set up Port's n8n custom node
+
+Port provides a custom n8n node (`n8n-nodes-portio`) that simplifies integration with Port's AI agents and API. Instead of making manual HTTP requests for authentication, invocation, and response retrieval, the Port node handles all of this automatically, making it easy to build powerful automation workflows that leverage Port's Context Lake.
+
+This guide walks you through installing and configuring Port's custom n8n node in your n8n instance.
+
+
+
+## Prerequisites
+
+Before you begin, ensure you have:
+
+- **npm installed** — Required for installing the Port n8n node package. npm comes with Node.js, [install Node.js](https://nodejs.org/) if you don't have it.
+- **A working n8n instance** — Either n8n Cloud or a self-hosted instance. If you don't have one, follow n8n's [guide on using Docker](https://docs.n8n.io/hosting/installation/installation/docker/).
+- **Port API credentials** — Your Port `Client ID` and `Client Secret`. [Learn how to get them](/build-your-software-catalog/custom-integration/api/#find-your-port-credentials).
+- **A Port account with AI features enabled** — Required for using Port AI agents in your workflows.
+- We recommend [creating a dedicated service account](https://docs.port.io/sso-rbac/users-and-teams/manage-users-teams/#service-accounts) in Port for each workflow or agent integration. This improves security and makes it easier to manage credentials.
+
+## Set up n8n instance
+
+If you don't have an n8n instance running, you can set one up using Docker. The location where you mount the n8n data directory is important; this is where you will install the Port n8n node package.
+
+### Using Docker (bind mount)
+
+Using a bind mount allows the container to read/write directly to your local filesystem, making it easier to install and manage the Port n8n node package.
+
+1. **Create a directory for n8n data** (we will call this `$n8n_HOME`):
+
+ ```bash
+ mkdir -p ~/n8n-data
+ ```
+
+2. **Run n8n with a bind mount**:
+
+ ```bash
+ docker volume create n8n_data
+
+ docker run -it --rm \
+ --name n8n \
+ -p 5678:5678 \
+ -e GENERIC_TIMEZONE="Africa/Accra" \
+ -e TZ="Africa/Accra" \
+ -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
+ -e N8N_RUNNERS_ENABLED=true \
+ -e N8N_COMMUNITY_PACKAGES_ENABLED=true \
+ -v ~/n8n-data:/home/node/.n8n \
+ docker.n8n.io/n8nio/n8n
+ ```
+
+ :::tip Community packages enabled
+ The `N8N_COMMUNITY_PACKAGES_ENABLED=true` environment variable is required for n8n to load community-installed nodes like the Port n8n node.
+ :::
+
+ :::tip Timezone configuration
+ Replace `"Africa/Accra"` with your preferred timezone. The `GENERIC_TIMEZONE` and `TZ` environment variables should match.
+ :::
+
+ :::tip Bind mount path
+ Replace `~/n8n-data` with the actual local path you want to use such as `/Users/janedoe/n8n-data`. Anything n8n writes to `/home/node/.n8n` (inside the container) will persist directly to your local directory.
+ :::
+
+3. **Access n8n** — Open your browser and navigate to `http://localhost:5678`.
+
+### Using Docker Compose
+
+If you prefer using Docker Compose, create a `docker-compose.yml` file:
+
+```yaml showLineNumbers
+version: '3'
+services:
+ n8n:
+ image: docker.n8n.io/n8nio/n8n
+ ports:
+ - "5678:5678"
+ environment:
+ - GENERIC_TIMEZONE=Europe/Madrid
+ - TZ=Europe/Madrid
+ - N8N_COMMUNITY_PACKAGES_ENABLED=true
+ volumes:
+ - ./n8n-data:/home/node/.n8n
+```
+
+ :::tip Community packages enabled
+ The `N8N_COMMUNITY_PACKAGES_ENABLED=true` environment variable is required for n8n to load community-installed nodes like the Port n8n node.
+ :::
+
+Then run:
+
+```bash
+# Navigate to the directory containing your docker compose file
+cd /path/to/your/compose/file/directory
+
+# Pull latest version
+docker compose pull
+
+# Start the container
+docker compose up -d
+```
+
+## Install Port's n8n node
+
+Now that you have n8n running, let's install Port's custom node using npm.
+
+### Install the npm package
+
+1. **Navigate to your n8n data directory** (the `$n8n_HOME` directory you created earlier):
+
+ ```bash
+ cd ~/n8n-data
+ ```
+
+2. **Install the Port n8n node package**:
+
+ ```bash
+ mkdir -p custom
+ cd custom
+ npm i @port-labs/n8n-nodes-portio-experimental
+ ```
+
+ :::tip Package location
+ The package is installed in the `custom` folder in your n8n data directory (`$n8n_HOME`).
+ :::
+
+3. **Restart your n8n instance**:
+
+ - **If using Docker**: Stop the container (`Ctrl+C` or `docker stop n8n`) and start it again with the same command.
+ - **If using Docker Compose**: Run `docker compose restart`.
+
+:::tip Package information
+The Port n8n node package is available on npm at [@port-labs/n8n-nodes-portio-experimental](https://www.npmjs.com/package/@port-labs/n8n-nodes-portio-experimental). The package is currently in experimental status.
+:::
+
+## Quick start
+
+Now that the Port node is installed, let us verify it works by creating a simple workflow.
+
+### Add a Port node to your workflow
+
+1. **Create a new workflow** in your n8n instance.
+
+
+
+2. **Add a trigger** — For testing, add a **Manual Trigger** node so you can trigger the workflow manually by clicking the **Execute Workflow** button.
+
+
+
+3. **Add the Port node**:
+ - Click the **+** button on the left side of the screen to add a new node
+ - Search for `port` in the node search
+
+
+
+4. **Select a Port node** — Click the "Port.io" search result and select "General Purpose AI Interaction" (this is the easiest one to test with).
+
+
+
+5. **Connect the nodes** — Drag from the **+** icon on the trigger node to the left side of the Port AI node to connect them.
+
+
+
+ :::tip Success!
+ You have successfully deployed your first Port n8n node! The node is now available in your n8n instance.
+ :::
+
+### Configure Port credentials
+
+Before you can use the Port node, you need to add your Port API credentials.
+
+1. **Open the Port node** — Double-click the Port AI node you just added.
+
+2. **Create a new credential**:
+ - At the top of the node configuration, you will see a dropdown named `Credential to connect with`
+ - Click this dropdown and select `Create new credential`
+
+3. **Enter your Port credentials**:
+ - **Client ID** — Your Port Client ID
+ - **Client Secret** — Your Port Client Secret
+
+
+
+ :::tip Finding your credentials
+ If you're not sure how to get your Port credentials, see the [Port API documentation](/build-your-software-catalog/custom-integration/api/#find-your-port-credentials).
+ :::
+
+4. **Save the credential** — Click "Save" to store the credential.
+
+ :::tip Multiple credentials
+ You can store multiple Port account credentials in n8n and select which one to use for each node. This is useful if you work with multiple Port organizations.
+ :::
+
+## Verify the installation
+
+To verify everything is working:
+
+1. **Configure the Port node** — In the **General Purpose AI Interaction** node:
+ - Select your Port credential from the dropdown
+ - Enter a simple prompt like "List all ec2 instances in the eu-west region"
+ - Save the node
+
+
+2. **Execute the workflow** — Click **Execute Workflow** to test the connection.
+
+3. **Check the output** — If successful, you should see the AI response in the node output.
+
+## What's next?
+
+Now that you have Port's n8n node installed and configured, you can:
+
+- **Build automation workflows** — Use Port's Context Lake to enrich your n8n workflows with organizational context
+- **Integrate with AI agents** — Invoke Port AI agents from n8n workflows
+- **Query the catalog** — Access service metadata, ownership, dependencies, and more
+
+## Related guides
+
+- [Remediate security vulnerability with n8n and Port AI](/guides/all/remediate-vulnerability-with-n8n-and-port) — Example workflow using Port as a context lake for vulnerability management
+- [Port n8n nodes repository](https://github.com/port-labs/port-n8n-nodes) — Source code and detailed documentation for the Port n8n nodes
+
+## Troubleshooting
+
+### Node not appearing in n8n
+
+- **Check package installation** — Verify that `npm i @port-labs/n8n-nodes-portio-experimental` completed successfully. Check for a `node_modules` directory in your `$n8n_HOME` directory.
+- **Verify environment variable** — Ensure `N8N_COMMUNITY_PACKAGES_ENABLED=true` is set in your Docker configuration
+- **Check installation location** — Make sure the package is installed in the same directory that's mounted to `/home/node/.n8n` in the Docker container
+- **Restart n8n** — Community packages are only loaded when n8n starts, so a restart is required after installation
+
+### Credential errors
+
+- **Verify credentials** — Double-check that your Client ID and Client Secret are correct
+- **Check AI features** — Ensure your Port account has AI features enabled
+- **Test API access** — Try making a direct API call to verify your credentials work
+
diff --git a/src/components/guides-section/consts.js b/src/components/guides-section/consts.js
index c94f6acece..d5b417a24f 100644
--- a/src/components/guides-section/consts.js
+++ b/src/components/guides-section/consts.js
@@ -1526,6 +1526,20 @@ export const availableGuides = [
tags: ["Self Healing Incidents", "AI", "Jira", "PagerDuty", "Slack"],
logos: ["Jira", "PagerDuty", "Slack"],
link: "/guides/all/orchestrate-incident-response-with-ai",
+ },
+ {
+ title: "Remediate security vulnerability with n8n and Port AI",
+ description: "Remediate security vulnerabilities with n8n and Port AI using Port's AI agents and automations",
+ tags: ["Security", "n8n", "Webhook", "AI"],
+ logos: ["n8n", "Webhook", "AI"],
+ link: "/guides/all/remediate-vulnerability-with-n8n-and-port",
+ },
+ {
+ title: "Setup Port's n8n custom node",
+ description: "Setup Port's n8n custom node to integrate Port's AI agents and Context Lake with n8n workflows",
+ tags: ["n8n", "AI"],
+ logos: ["n8n", "AI"],
+ link: "/guides/all/setup-port-n8n-node",
}
]
diff --git a/static/img/guides/n8n-port-node/1-n8n-create-workflow-button.png b/static/img/guides/n8n-port-node/1-n8n-create-workflow-button.png
new file mode 100644
index 0000000000..9fd0514788
Binary files /dev/null and b/static/img/guides/n8n-port-node/1-n8n-create-workflow-button.png differ
diff --git a/static/img/guides/n8n-port-node/2-n8n-manual-trigger-workflow.png b/static/img/guides/n8n-port-node/2-n8n-manual-trigger-workflow.png
new file mode 100644
index 0000000000..cb70414df6
Binary files /dev/null and b/static/img/guides/n8n-port-node/2-n8n-manual-trigger-workflow.png differ
diff --git a/static/img/guides/n8n-port-node/3-n8n-search-port-node.png b/static/img/guides/n8n-port-node/3-n8n-search-port-node.png
new file mode 100644
index 0000000000..f8f8920f6a
Binary files /dev/null and b/static/img/guides/n8n-port-node/3-n8n-search-port-node.png differ
diff --git a/static/img/guides/n8n-port-node/4-n8n-general-node.png b/static/img/guides/n8n-port-node/4-n8n-general-node.png
new file mode 100644
index 0000000000..3179edf585
Binary files /dev/null and b/static/img/guides/n8n-port-node/4-n8n-general-node.png differ
diff --git a/static/img/guides/n8n-port-node/5-n8n-connect-port-node.png b/static/img/guides/n8n-port-node/5-n8n-connect-port-node.png
new file mode 100644
index 0000000000..ad3903e385
Binary files /dev/null and b/static/img/guides/n8n-port-node/5-n8n-connect-port-node.png differ
diff --git a/static/img/guides/n8n-port-node/6-n8n-port-credentials.png b/static/img/guides/n8n-port-node/6-n8n-port-credentials.png
new file mode 100644
index 0000000000..f3bed57817
Binary files /dev/null and b/static/img/guides/n8n-port-node/6-n8n-port-credentials.png differ
diff --git a/static/img/guides/n8n-port-node/7-n8n-example-question.png b/static/img/guides/n8n-port-node/7-n8n-example-question.png
new file mode 100644
index 0000000000..240a119213
Binary files /dev/null and b/static/img/guides/n8n-port-node/7-n8n-example-question.png differ
diff --git a/static/img/guides/port-context-lake-n8n-workflow.png b/static/img/guides/port-context-lake-n8n-workflow.png
new file mode 100644
index 0000000000..f0f5b3948e
Binary files /dev/null and b/static/img/guides/port-context-lake-n8n-workflow.png differ
diff --git a/static/img/guides/security-vuln-n8n-slack-notif.png b/static/img/guides/security-vuln-n8n-slack-notif.png
new file mode 100644
index 0000000000..772b544399
Binary files /dev/null and b/static/img/guides/security-vuln-n8n-slack-notif.png differ