AgentSkillsCN

09 Community Nodes

09 社区节点

SKILL.md

n8n Community Nodes & Extensions

Discover, evaluate, and safely use community-contributed nodes and extensions

Overview

Community nodes extend n8n beyond its 500+ built-in integrations. As of January 2026, the ecosystem includes 5,834+ community nodes with an average growth of 13.6 new nodes daily.

Critical: Following the January 2026 supply chain attack, security evaluation is mandatory before installing any community node.


1. Security First (CRITICAL)

The January 2026 Supply Chain Attack

A coordinated attack targeted the n8n ecosystem with malicious npm packages disguised as legitimate integrations (Google Ads, Stripe, Salesforce connectors). The packages harvested OAuth tokens and API credentials.

Attack vectors used:

  • Typosquatting popular package names
  • Impersonating verified integrations
  • Exfiltrating credentials via outbound HTTP requests

What Community Nodes Can Access

Community nodes run with full n8n privileges:

Access LevelRisk
Environment variablesCan read all $env values
File systemFull read/write to n8n's filesystem
NetworkArbitrary outbound HTTP requests
CredentialsDecrypted API keys and OAuth tokens at runtime
SystemFull Node.js runtime access

There is NO sandboxing between node code and the n8n runtime.

Security Checklist Before Installing

code
[ ] Check package author history
[ ] Review download count (low = higher risk)
[ ] Examine GitHub repo for source code
[ ] Check last update date (stale = potential risk)
[ ] Read package.json for dependencies
[ ] Search for security advisories
[ ] Prefer verified nodes when available
[ ] Test in isolated environment first

Red Flags to Avoid

Red FlagWhy It's Dangerous
Empty or minimal descriptionMay be hiding malicious intent
Random author namePseudonymous accounts used in attacks
Very low downloads (<100)Unvetted package
No GitHub repositoryCan't audit source code
Excessive dependenciesLarger attack surface
Recent creation + popular nameTyposquatting attempt

Environment Variable Protection

bash
# Disable community nodes entirely (most secure)
N8N_COMMUNITY_PACKAGES_ENABLED=false

# If you must use community nodes, audit installed packages
docker exec n8n npm list --depth=0

2. Verified vs Unverified Nodes

Verified Nodes (n8n Cloud)

Verified nodes have passed n8n's security review and are available on n8n Cloud.

Verification requirements:

  • MIT license
  • No external dependencies
  • Design compliance
  • Security audit passed

Currently verified partners (as of January 2026):

CategoryVerified Nodes
AI/VoiceElevenLabs
SearchBrave Search API, SerpApi, Tavily
PDFPDF.co, pdforge, CraftMyPDF
DataBright Data, Qdrant, Chat Data
VideoBeyond Presence
SecuritySOCRadar
TranslationStraker
Task ManagementVikunja
CRMSignifyCRM, KlickTipp
DevelopmentYepCode, Cronlytic
OtherClickSend, Easy Redmine, Fireflies, gotoHuman, Ledgers, Parsera, ScrapeGraphAI, Scrapeless, Browserflow, Mallabe

Unverified Nodes (Self-Hosted Only)

Available only on self-hosted instances. Use at your own risk.


3. Top Community Nodes by Downloads

Data from NCNodes as of January 2026:

Most Popular Overall

PackageDownloadsDescription
n8n-nodes-globals455,052Global constants across workflows
@mendable/n8n-nodes-firecrawl160,744Web scraping and crawling
n8n-nodes-deepseek59,452DeepSeek AI integration
n8n-nodes-rd-station-crm54,108RD Station CRM API
@devlikeapro/n8n-nodes-waha45,402WhatsApp HTTP API

By Category

Communication & Messaging

PackageDownloadsUse Case
@devlikeapro/n8n-nodes-waha45,402WhatsApp automation
n8n-nodes-evolution-api30,000+WhatsApp channel hub
n8n-nodes-chat-data13,901Chatbot management
n8n-nodes-quepasa8,850Quepasa platform
n8n-nodes-chatwoot5,000+ChatWoot integration

AI & Language Models

PackageDownloadsUse Case
n8n-nodes-deepseek59,452DeepSeek AI
@elevenlabs/n8n-nodes-elevenlabs10,000+Voice synthesis
@watzon/n8n-nodes-perplexity5,000+Perplexity AI
n8n-nodes-mcp3,000+Model Context Protocol

Web Scraping & Data

PackageDownloadsUse Case
@mendable/n8n-nodes-firecrawl160,744Web crawling
@apify/n8n-nodes-apify15,000+Web automation
n8n-nodes-puppeteer10,000+Browser automation
n8n-nodes-serpapi8,000+Search results
n8n-nodes-supadata5,000+YouTube data

Utilities

PackageDownloadsUse Case
n8n-nodes-globals455,052Global constants
n8n-nodes-tesseractjs8,000+OCR text extraction
n8n-nodes-logger6,000+Centralized logging
n8n-nodes-datastore4,000+In-memory storage

4. Installation Methods

Method 1: n8n UI (Recommended for Cloud/Self-Hosted)

code
Settings → Community Nodes → Install a community node
Enter: package-name (e.g., n8n-nodes-globals)
Click: Install

Note: Only verified nodes appear on n8n Cloud.

Method 2: npm (Self-Hosted Only)

bash
# Install to n8n's node_modules
cd ~/.n8n
npm install n8n-nodes-package-name

# Restart n8n
pm2 restart n8n
# or
docker-compose restart n8n

Method 3: Docker (Persistent Installation)

dockerfile
FROM n8nio/n8n:latest

# Install community nodes
RUN cd /usr/local/lib/node_modules/n8n && \
    npm install n8n-nodes-globals \
    n8n-nodes-tesseractjs \
    n8n-nodes-deepseek

Or via environment variable:

yaml
# docker-compose.yml
services:
  n8n:
    image: n8nio/n8n
    environment:
      - N8N_COMMUNITY_PACKAGES=n8n-nodes-globals,n8n-nodes-tesseractjs

Method 4: Environment Variable Auto-Install

bash
# Comma-separated list of packages to install on startup
N8N_COMMUNITY_PACKAGES="n8n-nodes-globals,n8n-nodes-deepseek"

5. MCP Integration (Model Context Protocol)

MCP enables AI agents to interact with external tools and data sources.

Built-in MCP Nodes

n8n includes native MCP support:

NodePurpose
MCP Server TriggerExpose workflows as MCP tools
MCP Client ToolCall external MCP servers from n8n

MCP Server Trigger Configuration

Expose a workflow as an MCP tool:

json
{
  "nodes": [
    {
      "type": "n8n-nodes-base.mcpTrigger",
      "typeVersion": 1,
      "name": "MCP Server Trigger",
      "parameters": {
        "toolName": "search_database",
        "toolDescription": "Search the product database by query"
      }
    }
  ]
}

MCP Client Tool Configuration

Call external MCP servers:

json
{
  "type": "@n8n/n8n-nodes-langchain.toolMcp",
  "typeVersion": 1,
  "parameters": {
    "sseEndpoint": "https://mcp-server.example.com/sse",
    "authentication": "bearerAuth"
  },
  "credentials": {
    "httpBearerAuth": {
      "id": "credential-id"
    }
  }
}

Community MCP Node

For advanced MCP usage:

bash
# Install community MCP node
npm install n8n-nodes-mcp

# Required environment variable for AI Agent tool usage
N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true

Package: nerding-io/n8n-nodes-mcp


6. AI & LangChain Nodes

Built-in AI Nodes (@n8n/n8n-nodes-langchain)

Agent Types

NodePurpose
agentMain AI agent with tool calling
chainLlmSimple LLM chain
chainRetrievalQaRAG question answering
chainSummarizationDocument summarization

Language Models

NodeProvider
lmChatOpenAiOpenAI GPT-4, GPT-4o
lmChatAnthropicClaude 3.5, Claude 4
lmChatOllamaLocal Ollama models
lmChatAzureOpenAiAzure OpenAI
lmChatGoogleVertexGoogle Vertex AI
lmChatGroqGroq (fast inference)
lmChatDeepSeekDeepSeek models

Built-in AI Tools

ToolPurpose
toolHttpRequestMake HTTP requests
toolCodeExecute JavaScript/Python
toolCalculatorMathematical operations
toolWikipediaWikipedia search
toolWorkflowCall other n8n workflows
toolVectorStoreQuery vector databases
toolMcpCall MCP servers

Memory Types

NodeStorage
memoryBufferWindowIn-memory (window)
memoryPostgresChatPostgreSQL
memoryRedisChatRedis
memoryXataXata database
memorySqliteSQLite

Custom AI Tool Pattern

Turn any workflow into an AI tool using the Tool Workflow node:

javascript
// Sub-workflow that becomes an AI tool
// Receives: $json.query from the AI agent

const searchResults = await fetch(`https://api.example.com/search?q=${$json.query}`);
const data = await searchResults.json();

return [{
  json: {
    response: data.results.map(r => r.title).join('\n')
  }
}];

7. Vector Store Integrations

For RAG (Retrieval-Augmented Generation) applications:

Built-in Vector Stores

Vector StoreUse CaseSelf-Hosted
PineconeProduction RAGNo
QdrantHigh performanceYes
SupabasePostgres-basedYes
WeaviateOpen-sourceYes
MilvusLarge scaleYes
PGVectorPostgreSQL extensionYes
ChromaLocal developmentYes

Vector Store Configuration

json
{
  "type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
  "typeVersion": 1,
  "parameters": {
    "pineconeIndex": "my-index",
    "pineconeNamespace": "documents",
    "topK": 5
  },
  "credentials": {
    "pineconeApi": {
      "id": "credential-id",
      "name": "Pinecone API"
    }
  }
}

Embedding Models

NodeProvider
embeddingsOpenAiOpenAI ada-002, text-embedding-3
embeddingsCohereCohere
embeddingsOllamaLocal Ollama
embeddingsHuggingFaceInferenceHugging Face

8. Building Custom Nodes

Quick Start

bash
# Scaffold a new node package
npm create @n8n/node

# Or clone the starter template
git clone https://github.com/n8n-io/n8n-nodes-starter.git
cd n8n-nodes-starter
npm install

Package Structure

code
n8n-nodes-my-package/
├── package.json           # Node registration
├── nodes/
│   └── MyNode/
│       ├── MyNode.node.ts  # Node implementation
│       └── myNode.svg      # Node icon
├── credentials/
│   └── MyCredential.credentials.ts
└── dist/                   # Compiled output

package.json Requirements

json
{
  "name": "n8n-nodes-my-package",
  "version": "1.0.0",
  "description": "My custom n8n node",
  "license": "MIT",
  "n8n": {
    "n8nNodesApiVersion": 1,
    "nodes": [
      "dist/nodes/MyNode/MyNode.node.js"
    ],
    "credentials": [
      "dist/credentials/MyCredential.credentials.js"
    ]
  },
  "devDependencies": {
    "@n8n/n8n-nodes-langchain": "^1.0.0",
    "n8n-workflow": "^1.0.0",
    "typescript": "^5.0.0"
  }
}

Node Implementation (Declarative Style - Recommended)

typescript
import {
  INodeType,
  INodeTypeDescription,
} from 'n8n-workflow';

export class MyApiNode implements INodeType {
  description: INodeTypeDescription = {
    displayName: 'My API',
    name: 'myApi',
    icon: 'file:myApi.svg',
    group: ['transform'],
    version: 1,
    subtitle: '={{$parameter["operation"]}}',
    description: 'Interact with My API',
    defaults: {
      name: 'My API',
    },
    inputs: ['main'],
    outputs: ['main'],
    credentials: [
      {
        name: 'myApiCredentials',
        required: true,
      },
    ],
    requestDefaults: {
      baseURL: 'https://api.example.com/v1',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
      },
    },
    properties: [
      {
        displayName: 'Resource',
        name: 'resource',
        type: 'options',
        noDataExpression: true,
        options: [
          { name: 'User', value: 'user' },
          { name: 'Item', value: 'item' },
        ],
        default: 'user',
      },
      {
        displayName: 'Operation',
        name: 'operation',
        type: 'options',
        noDataExpression: true,
        displayOptions: {
          show: { resource: ['user'] },
        },
        options: [
          { name: 'Get', value: 'get', action: 'Get a user' },
          { name: 'List', value: 'list', action: 'List users' },
        ],
        default: 'get',
      },
    ],
  };
}

Node Implementation (Programmatic Style)

typescript
import {
  IExecuteFunctions,
  INodeExecutionData,
  INodeType,
  INodeTypeDescription,
} from 'n8n-workflow';

export class MyNode implements INodeType {
  description: INodeTypeDescription = {
    displayName: 'My Node',
    name: 'myNode',
    group: ['transform'],
    version: 1,
    description: 'Process data with custom logic',
    defaults: { name: 'My Node' },
    inputs: ['main'],
    outputs: ['main'],
    properties: [
      {
        displayName: 'Field',
        name: 'field',
        type: 'string',
        default: '',
        required: true,
      },
    ],
  };

  async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
    const items = this.getInputData();
    const field = this.getNodeParameter('field', 0) as string;

    const results = items.map(item => ({
      json: {
        ...item.json,
        processed: true,
        field,
      },
    }));

    return [results];
  }
}

Development Commands

bash
npm run dev       # Start n8n with hot reload
npm run build     # Compile TypeScript
npm run lint      # Validate code quality
npm run lint:fix  # Auto-fix issues
npm run release   # Manage version releases

Publishing to npm

bash
# 1. Build production code
npm run build

# 2. Test locally
npm run dev

# 3. Publish to npm
npm publish

# 4. (Optional) Submit for verification via n8n Creator Portal

9. Discovery Resources

Official Sources

SourceURLUse Case
npm Registrynpm search n8n-nodesBrowse all packages
NCNodes Directoryncnodes.comCurated list with stats
awesome-n8nGitHubCommunity-curated list
n8n Community Forumcommunity.n8n.ioDiscussions & support
GitHub Topicsn8n-node, n8n-community-nodeSource code repos

npm Search Commands

bash
# Search for community nodes
npm search n8n-nodes

# Check package info
npm info n8n-nodes-package-name

# View package security
npm audit n8n-nodes-package-name

GitHub Search

code
topic:n8n-node language:TypeScript
"n8n-nodes-" in:name

10. Troubleshooting

Node Not Appearing

  1. Restart n8n after installation
  2. Check npm output for errors
  3. Verify package name is correct
  4. Check n8n version compatibility
  5. Review logs: docker-compose logs n8n

Node Errors

ErrorSolution
"Node type not found"Package not installed or wrong name
"Credential not found"Add credentials in n8n Settings
"Version mismatch"Update n8n or the package
"Permission denied"Check file permissions in Docker

Dependency Conflicts

bash
# Clear n8n cache
rm -rf ~/.n8n/node_modules/.cache

# Reinstall community nodes
npm install n8n-nodes-package-name --force

Security Incident Response

If you suspect a malicious node:

  1. Immediately disable the node in workflows
  2. Rotate all credentials used by workflows with that node
  3. Check outbound connections in network logs
  4. Uninstall the package: npm uninstall n8n-nodes-package-name
  5. Report to n8n: community@n8n.io

11. Best Practices Summary

Do

  • Prefer built-in nodes over community alternatives
  • Use verified nodes on n8n Cloud when available
  • Audit source code before installing
  • Test in isolated environment first
  • Keep community nodes updated
  • Monitor n8n security advisories
  • Use isolated service accounts with limited privileges

Don't

  • Install nodes with low download counts without auditing
  • Use community nodes for sensitive credential handling
  • Skip security review for "popular" packages
  • Ignore deprecation or security warnings
  • Run unverified nodes in production without testing

Environment Hardening

bash
# Disable community nodes if not needed
N8N_COMMUNITY_PACKAGES_ENABLED=false

# Restrict outbound network access
# (via firewall rules or Docker network policies)

# Use read-only filesystem for n8n container
# (where possible)

# Regular security audits
npm audit

Related Skills

SkillWhen to Use
02-workflow-patternsAI Agent workflow architectures
03-node-configurationConfigure any node properly
04-mcp-tools-expertUse n8n-mcp tools for discovery
05-code-javascriptCustom JavaScript logic
06-code-pythonCustom Python logic

References