All skills
czlonkowski avatar

/n8n-code-python

@b604bea

Write Python code in n8n Code nodes. Use when writing Python in n8n, using _input/_json/_node syntax, working with standard library, or need to understand Python limitations in n8n Code nodes. Use this skill when the user specifically requests Python for an n8n Code node. Note — JavaScript is recommended for 95% of use cases — only use Python when the user explicitly prefers it or the task requires Python-specific standard library capabilities (regex, hashlib, statistics). EXCEPTION — for Python in the AI-agent-callable Custom Code Tool (@n8n/n8n-nodes-langchain.toolCode), use the n8n-code-tool skill instead (input is _query, return must be a string).

Use this Skill: https://skilld.dev/gh/czlonkowski/n8n-mcp/n8n-code-python

This session only. Nothing lands on disk.

README.md

≈2.4k tokens on demand. Your agent reads this file only when SKILL.md points to it.

n8n Code Python Skill

Expert guidance for writing Python code in n8n Code nodes.


⚠️ Important: JavaScript First

Use JavaScript for 95% of use cases.

Python in n8n has NO external libraries (no requests, pandas, numpy).

When to use Python:

  • You have complex Python-specific logic
  • You need Python's standard library features
  • You're more comfortable with Python than JavaScript

When to use JavaScript (recommended):

  • HTTP requests (this.helpers.httpRequest available)
  • Date/time operations (Luxon library included)
  • Most data transformations
  • When in doubt

What This Skill Teaches

Core Concepts

  1. Critical Limitation: No external libraries
  2. Data Access: _input.all(), _input.first(), _input.item
  3. Webhook Gotcha: Data is under _json["body"]
  4. Return Format: Must return [{"json": {...}}]
  5. Standard Library: json, datetime, re, base64, hashlib, etc.

Top 5 Error Prevention

This skill emphasizes error prevention:

  1. ModuleNotFoundError (trying to import external libraries)
  2. Empty code / missing return
  3. KeyError (dictionary access without .get())
  4. IndexError (list access without bounds checking)
  5. Incorrect return format

These 5 errors are the most common in Python Code nodes.


Skill Activation

This skill activates when you:

  • Write Python in Code nodes
  • Ask about Python limitations
  • Need to know available standard library
  • Troubleshoot Python Code node errors
  • Work with Python data structures

Example queries:

  • "Can I use pandas in Python Code node?"
  • "How do I access webhook data in Python?"
  • "What Python libraries are available?"
  • "Write Python code to process JSON"
  • "Why is requests module not found?"

File Structure

SKILL.md

Quick start and overview

  • When to use Python vs JavaScript
  • Critical limitation (no external libraries)
  • Mode selection (All Items vs Each Item)
  • Data access overview
  • Return format requirements
  • Standard library overview

DATA_ACCESS.md

Complete data access patterns

  • _input.all() - Process all items
  • _input.first() - Get first item
  • _input.item - Current item (Each Item mode)
  • _node["Name"] - Reference other nodes
  • Webhook body structure (critical gotcha!)
  • Pattern selection guide

STANDARD_LIBRARY.md

Available Python modules

  • json - JSON parsing
  • datetime - Date/time operations
  • re - Regular expressions
  • base64 - Encoding/decoding
  • hashlib - Hashing
  • urllib.parse - URL operations
  • math, random, statistics
  • What's NOT available (requests, pandas, numpy)
  • Workarounds for missing libraries

COMMON_PATTERNS.md

10 production-tested patterns

  1. Multi-source data aggregation
  2. Regex-based filtering
  3. Markdown to structured data
  4. JSON object comparison
  5. CRM data transformation
  6. Release notes processing
  7. Array transformation
  8. Dictionary lookup
  9. Top N filtering
  10. String aggregation

ERROR_PATTERNS.md

Top 5 errors with solutions

  1. ModuleNotFoundError (external libraries)
  2. Empty code / missing return
  3. KeyError (dictionary access)
  4. IndexError (list access)
  5. Incorrect return format
  • Error prevention checklist
  • Quick fix reference
  • Testing patterns

Integration with Other Skills

This skill works with:

n8n Expression Syntax

  • Python uses code syntax, not {{}} expressions
  • Data access patterns differ ($ vs _)

n8n MCP Tools Expert

  • Use MCP tools to validate Code node configurations
  • Check node setup with get_node

n8n Workflow Patterns

  • Code nodes fit into larger workflow patterns
  • Often used after HTTP Request or Webhook nodes

n8n Code JavaScript

  • Compare Python vs JavaScript approaches
  • Understand when to use which language
  • JavaScript recommended for 95% of cases

n8n Node Configuration

  • Configure Code node mode (All Items vs Each Item)
  • Set up proper connections

Success Metrics

After using this skill, you should be able to:

  • Know the limitation: Python has NO external libraries
  • Choose language: JavaScript for 95% of cases, Python when needed
  • Access data: Use _input.all(), _input.first(), _input.item
  • Handle webhooks: Access data via _json["body"]
  • Return properly: Always return [{"json": {...}}]
  • Avoid KeyError: Use .get() for dictionary access
  • Use standard library: Know what's available (json, datetime, re, etc.)
  • Prevent errors: Avoid top 5 common errors
  • Choose alternatives: Use n8n nodes when libraries needed
  • Write production code: Use proven patterns

Quick Reference

Data Access

all_items = _input.all()
first_item = _input.first()
current_item = _input.item  # Each Item mode only
other_node = _node["NodeName"]

Webhook Data

webhook = _input.first()["json"]
body = webhook.get("body", {})
name = body.get("name")

Safe Dictionary Access

# ✅ Use .get() with defaults
value = data.get("field", "default")

# ❌ Risky - may raise KeyError
value = data["field"]

Return Format

# ✅ Correct format
return [{"json": {"result": "success"}}]

# ❌ Wrong - plain dict
return {"result": "success"}

Standard Library

# ✅ Available
import json
import datetime
import re
import base64
import hashlib

# ❌ NOT available
import requests  # ModuleNotFoundError!
import pandas    # ModuleNotFoundError!
import numpy     # ModuleNotFoundError!

Common Use Cases

Use Case 1: Process Webhook Data

webhook = _input.first()["json"]
body = webhook.get("body", {})

return [{
    "json": {
        "name": body.get("name"),
        "email": body.get("email"),
        "processed": True
    }
}]

Use Case 2: Filter and Transform

all_items = _input.all()

active = [
    {"json": {**item["json"], "filtered": True}}
    for item in all_items
    if item["json"].get("status") == "active"
]

return active

Use Case 3: Aggregate Statistics

import statistics

all_items = _input.all()
amounts = [item["json"].get("amount", 0) for item in all_items]

return [{
    "json": {
        "total": sum(amounts),
        "average": statistics.mean(amounts) if amounts else 0,
        "count": len(amounts)
    }
}]

Use Case 4: Parse JSON String

import json

data = _input.first()["json"]["body"]
json_string = data.get("payload", "{}")

try:
    parsed = json.loads(json_string)
    return [{"json": parsed}]
except json.JSONDecodeError:
    return [{"json": {"error": "Invalid JSON"}}]

Limitations and Workarounds

Limitation 1: No HTTP Requests Library

Problem: No requests library Workaround: Use HTTP Request node or JavaScript

Limitation 2: No Data Analysis Library

Problem: No pandas or numpy Workaround: Use list comprehensions and standard library

Limitation 3: No Database Drivers

Problem: No psycopg2, pymongo, etc. Workaround: Use n8n database nodes (Postgres, MySQL, MongoDB)

Limitation 4: No Web Scraping

Problem: No beautifulsoup4 or selenium Workaround: Use HTML Extract node


Best Practices

  1. Use JavaScript for most cases (95% recommendation)
  2. Use .get() for dictionaries (avoid KeyError)
  3. Check lengths before indexing (avoid IndexError)
  4. Always return proper format: [{"json": {...}}]
  5. Access webhook data via ["body"]
  6. Use standard library only (no external imports)
  7. Handle empty input (check if items:)
  8. Test both modes (All Items and Each Item)

When Python is the Right Choice

Use Python when:

  • Complex text processing (re module)
  • Mathematical calculations (math, statistics)
  • Date/time manipulation (datetime)
  • Cryptographic operations (hashlib)
  • You have existing Python logic to reuse
  • Team is more comfortable with Python

Use JavaScript instead when:

  • Making HTTP requests
  • Working with dates (Luxon included)
  • Most data transformations
  • When in doubt

Learning Path

Beginner:

  1. Read SKILL.md - Understand the limitation
  2. Try DATA_ACCESS.md examples - Learn _input patterns
  3. Practice safe dictionary access with .get()

Intermediate: 4. Study STANDARD_LIBRARY.md - Know what's available 5. Try COMMON_PATTERNS.md examples - Use proven patterns 6. Learn ERROR_PATTERNS.md - Avoid common mistakes

Advanced: 7. Combine multiple patterns 8. Use standard library effectively 9. Know when to switch to JavaScript 10. Write production-ready code


Support

Questions?

  • Check ERROR_PATTERNS.md for common issues
  • Review COMMON_PATTERNS.md for examples
  • Consider using JavaScript instead

Related Skills:

  • n8n Code JavaScript - Alternative (recommended for 95% of cases)
  • n8n Expression Syntax - For {{}} expressions in other nodes
  • n8n Workflow Patterns - Bigger picture workflow design

Version

Version: 1.0.0 Status: Production Ready Compatibility: n8n Code node (Python mode)


Credits

Part of the n8n-skills project.

Conceived by Romuald Członkowski


Remember: JavaScript is recommended for 95% of use cases. Use Python only when you specifically need Python's standard library features.

Source: SKILL.md on GitHub

1 warning9d3 checks · Risk SAFE
  • Gen Agent Trust Hub9d

    The skill provides comprehensive documentation and templates for writing Python code within n8n workflows. It correctly emphasizes the platform's security boundaries and limitations, such as the lack of external library support. No malicious behaviors were detected.

  • Socket9d

    No alerts

  • Snyk9d

    Risk: MEDIUM · 1 issue

Signed by skilld at b604bea. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 3 days ago.

Activeupdated 3 months ago

README badge

README badge for czlonkowski/n8n-mcp/n8n-code-python