Skip to content
Skillpedia
General coding48k · #3656

n8n-code-tool

Lets your agent write and debug code for custom tools. It handles schemas and return formats. Useful for creating AI tools that interact with n8n.

What it does

This tool helps you write and fix JavaScript or Python code for a specific n8n function called 'Custom Code Tool'. It ensures your code works correctly within that environment.

When to use it

  • ✓When you need to write code that will be executed by n8n's 'Custom Code Tool'.
  • ✓When debugging or fixing JavaScript or Python code already used in the 'Custom Code Tool'.
  • ✓To understand the rules and limitations of how code interacts with n8n's 'Custom Code Tool'.

Example of what to ask your AI

“Write JavaScript code for the Custom Code Tool that takes a name and returns 'Hello, [name]!'”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/n8n-code-tool/SKILL.md

Ready-to-paste message

Use this skill to help me: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/n8n-code-tool/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

You provide the JavaScript or Python code. The tool checks if it follows the rules of n8n's 'Custom Code Tool' and suggests fixes if needed.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add sickn33/agentic-awesome-skills --skill n8n-code-tool

Or download just the file:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/n8n-code-tool/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

n8n Custom Code Tool

When to Use

Use this skill specifically for code executed by the AI-agent-callable n8n Custom Code Tool. Use the separate JavaScript or Python Code-node skills for ordinary workflow Code nodes.

Do not hardcode secrets or accept arbitrary executable code from untrusted input. Constrain inputs with a schema, validate outputs, allowlist any network destinations, and ask before testing a tool whose code can write data or invoke an external service.

Expert guidance for writing code inside @n8n/n8n-nodes-langchain.toolCode — the tool an AI Agent can invoke, not the regular workflow Code node.


⚠️ This is NOT the Code node

The Custom Code Tool looks like a Code node in the editor — same JavaScript editor, similar layout — but it is a completely different node from a different package with a different runtime contract.

Code node Custom Code Tool
Node type n8n-nodes-base.code @n8n/n8n-nodes-langchain.toolCode
Package n8n-nodes-base @n8n/n8n-nodes-langchain
Invoked by Previous node (workflow flow) AI Agent (LangChain)
Input $input.all() — item stream query — string or object from LLM
Return [{json: {...}}] (items array) A string
$fromAI() N/A Not available (see Errors)
HTTP helper this.helpers.httpRequest (auth helpers blocked) Not exposed to the tool sandbox
State Per-run execution data No getContext, no $getWorkflowStaticData

If you treat it like a Code node, it fails. The rest of this skill covers the Code Tool's actual contract.


Quick Start

Minimal JavaScript Code Tool

// `query` is whatever the AI sent (a string by default)
return `You asked: ${query}`;

Minimal Python Code Tool

# `_query` is whatever the AI sent (a string by default)
return f"You asked: {_query}"

Essential Rules

  1. Return a string. Numbers are auto-converted. Anything else throws "The response property should be a string, but it is an object".
  2. Input variable is fixed: query (JS), _query (Python). You cannot rename it.
  3. Do NOT use $fromAI() inside the Code Tool sandbox — it throws "No execution data available".
  4. Do NOT use [{json: {...}}] return format — that's for Code nodes. Throws "Wrong output type returned".
  5. Use a descriptive tool name (letters/numbers/underscores, v1.1+). The agent calls the tool by its name.
  6. Write a precise description — the LLM decides whether to invoke the tool based on it.

The Two Input Modes

The Code Tool has two input shapes, controlled by specifyInputSchema:

Mode 1: Unstructured (default, specifyInputSchema: false)

The AI passes a single string as query. If you need multiple fields, the AI has to stuff them into that one string and you parse them out. In practice, LLMs will happily pass a JSON string if your description tells them to.

// Parse a JSON string the AI sent
let params;
try {
  params = typeof query === 'string' ? JSON.parse(query) : query;
} catch (e) {
  throw new Error('Expected a JSON object. Parser said: ' + e.message);
}
const price = Number(params.price);
const months = Number(params.months);
// ...
return JSON.stringify({ monthly_payment: /* ... */ });

Pros: simplest to set up, one field to describe. Cons: no schema validation — if the LLM forgets a field, the tool throws at runtime.

Best for: quick prototypes, tools with one natural input (a question, a URL, a text blob).

Mode 2: Structured (specifyInputSchema: true)

The tool becomes a LangChain DynamicStructuredTool. The LLM sees a typed argument schema and passes a validated object as query. You access fields directly.

// query is now an object matching your schema
const price = query.price;
const months = query.months;
const residual_percent = query.residual_percent;

const monthly = computeAnnuity(price, months, residual_percent);
return JSON.stringify({ monthly_payment: monthly });

Schema is defined via either:

  • schemaType: "fromJson" + jsonSchemaExample (n8n v≥1.3) — paste an example JSON, n8n infers the schema
  • schemaType: "manual" + inputSchema — write a full JSON Schema yourself

Pros: LLM gets type hints, invalid calls rejected before your code runs, cleaner code.

…

FAQ

What's the difference between the 'Custom Code Tool' and a regular Code node in n8n?

The 'Custom Code Tool' is used by an AI Agent and has different input/output rules compared to a regular Code node, which is executed by your workflow's flow.

What happens if my code doesn't return a string?

The 'Custom Code Tool' expects code to return a string. If it returns another type (like an object or array), the code will fail, and an error message will be shown.

Can I use variables like '$fromAI()' or the '[{json: {...}}]' return format?

No, these features are not available in the 'Custom Code Tool'. Using them will result in errors.

Details

Original description by the author

Write and debug JavaScript or Python for the AI-callable n8n Custom Code Tool, including schemas, sandbox limits, and return formats.

repo: sickn33/agentic-awesome-skills

Popularity

GitHub stars
48k
Ranking position
#3656
License
MIT
Updated
10/15/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills