Agent skill

n8n Custom Code Tool Guide

by czlonkowski in czlonkowski/n8n-skills

Explains the n8n Custom Code Tool's actual runtime contract so an AI-agent-callable tool doesn't get written like a regular workflow Code node.

MITAuto-check passedProductivity & Automation

Install n8n Custom Code Tool Guide

skills CLI
$ npx skills add czlonkowski/n8n-skills --skill n8n-code-tool -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install czlonkowski/n8n-skills n8n-code-tool --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/czlonkowski/n8n-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/n8n-code-tool .claude/skills/n8n-code-tool && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
n8n-code-tool
GitHub stars
6.4k
Token cost
~4k tokens
SKILL.md length
1,407 words
Files
4
Skills in repo
15
Repo updated
First seen
Licence
MIT

At a glance

Explains the n8n Custom Code Tool's actual runtime contract so an AI-agent-callable tool doesn't get written like a regular workflow Code node.

  • Works in 6 steps: Return a string. Numbers are… → Input variable is fixed: query (JS),… → Do NOT use $fromAI() inside the Code… → …
  • Building a Code Tool that an AI Agent in n8n can call
  • SKILL.md covers ⚠️ This is NOT the Code node, Quick Start, The Two Input Modes and Return Format, plus 8 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

This skill contrasts the two nodes directly: the Code Tool is invoked by an AI Agent with a query string or object rather than an item stream, must return a plain string rather than an items array, and has no $fromAI, $input, or HTTP helpers available in its sandbox, so treating it like a Code node throws errors such as a wrong output type or no execution data available.

It lists essential rules, returning a string with the fixed input variable name per language, writing a precise tool name and description since the LLM decides whether to call the tool from them, and covers the two input modes controlled by specifyInputSchema, unstructured versus a defined JSON schema for structured arguments, plus when to reach for toolWorkflow or an HTTP Request Tool instead.

When your agent uses it

  • Building a Code Tool that an AI Agent in n8n can call
  • Debugging a Code Tool error like a wrong output type
  • Defining a structured input schema for a Code Tool's arguments

Example prompts

  • “Write a Code Tool that looks up order status by order ID.”
  • “Fix this Code Tool error: response property should be a string.”
  • “Add a structured input schema to this n8n Code Tool.”

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  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.

What it can do on your machine

Read from SKILL.md and the folder at commit 19cd793. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are javascript, python and json).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • docs.n8n.io
    • github.com
    • js.langchain.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

n8n Custom Code Tool Guide loads about 4k tokens when it runs. Until then it costs about 237 tokens; SKILL.md has 1,407 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~237
When it runs · the whole SKILL.md, loaded when a task matches
~4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from czlonkowski/n8n-skills at commit 19cd793, republished under its MIT licence (© czlonkowski). 1,407 words, ~4,028 tokens.

Download SKILL.mdSave it as .claude/skills/n8n-code-tool/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
n8n-code-tool
description
Write JavaScript or Python for the n8n Custom Code Tool (@n8n/n8n-nodes-langchain.toolCode) — the AI-agent-callable tool, NOT the workflow Code node. Use when building a Code Tool attached to an AI Agent, writing code that an LLM will invoke, parsing the `query` input, returning a string result, defining an input schema for structured arguments (specifyInputSchema, jsonSchemaExample, DynamicStructuredTool), or troubleshooting errors like "Wrong output type returned", "No execution data available", "The response property should be a string, but it is an object", "Cannot assign to read only property 'name'", or an AI agent that refuses to call the tool. Covers the critical differences between Code node and Code Tool: return format (string vs `[{json:{...}}]`), unavailability of `$fromAI`/`$input`/`$helpers` in the Code Tool sandbox, naming rules for AI invocation, and when to use `toolWorkflow`/HTTP Request Tool instead.

n8n Custom Code Tool

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 nodeCustom Code Tool
Node typen8n-nodes-base.code@n8n/n8n-nodes-langchain.toolCode
Packagen8n-nodes-base@n8n/n8n-nodes-langchain
Invoked byPrevious node (workflow flow)AI Agent (LangChain)
Input$input.all() — item streamquery — string or object from LLM
Return[{json: {...}}] (items array)A string
$fromAI()N/ANot available (see Errors)
HTTP helperthis.helpers.httpRequest (auth helpers blocked)Not exposed to the tool sandbox
StatePer-run execution dataNo 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
javascript
// `query` is whatever the AI sent (a string by default)
return `You asked: ${query}`;
Minimal Python Code Tool
python
# `_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.

javascript
// 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.

javascript
// 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. Cons: a little more setup; requires n8n version with schema support.

Best for: production tools with multiple typed parameters (calculators, API wrappers, anything with numeric fields the LLM tends to stringify).

See: INPUT_SCHEMA.md for complete schema setup.


Return Format

The return value must be a string. The LLM reads it as the tool's observation.

javascript
// ✅ String
return "42";

// ✅ Number (auto-converted to string by n8n)
return 42;

// ✅ JSON-encoded structured result (recommended for rich output)
return JSON.stringify({ result: 42, currency: "SEK" });

// ❌ Raw object → "The response property should be a string, but it is an object"
return { result: 42 };

// ❌ Workflow item format → "Wrong output type returned"
return [{ json: { result: 42 } }];

// ❌ Array → "The response property should be a string, but it is an object"
return [1, 2, 3];
Best practice: JSON-stringify structured results

When your tool has more than a trivial scalar output, return a JSON string:

javascript
return JSON.stringify({
  monthly_payment_sek: 5405,
  loan_amount: 351920,
  total_cost_of_credit: 63295
});

The LLM parses JSON reliably and can pick the fields it needs to present to the user.

Error handling: the agent reads your failures

Errors don't just stop the workflow — they go back to the LLM, which usually corrects its call and retries. Use that:

javascript
// Option A: throw — n8n surfaces the message to the agent
if (!isFinite(price)) throw new Error('price must be a number, e.g. 439900');

// Option B: return an error string — agent reads it like any tool result
if (!isFinite(price)) return JSON.stringify({ error: 'price must be a number, e.g. 439900' });

Either way, write error messages for the LLM: state what was wrong and what a valid call looks like. A bare throw new Error('invalid input') wastes the retry; an instructive message usually fixes the next call.


Tool Name and Description

These fields are NOT documentation — they are the tool contract the LLM sees. Treat them as prompt engineering.

Name
  • Must match [A-Za-z0-9_]+ (v1.1+). No spaces, no hyphens, no emoji.
  • Use a verb-y descriptive name: calculate_car_loan, get_weather, search_orders.
  • The agent calls the tool by this name. Code Tool (the default) is useless — the agent won't know when to call it.
Description
  • Explain when to use it and what to send.
  • If unstructured mode, include an example of the JSON string the LLM should send.
  • If structured mode, the schema speaks for itself — just describe purpose.

Unstructured example (JSON-in-string pattern):

Deterministiskt beräknar månadskostnad för billån. Anropa med EN JSON-sträng:
{"price":439900,"down_payment":87980,"interest_rate":6.95,"months":36,"residual_percent":50}
Fält: price (SEK), down_payment (SEK), interest_rate (% per år), months, residual_percent (0-99).

Structured example (schema-defined):

Deterministically computes the monthly car-loan payment given price, down payment, 
annual interest rate, term, and residual percent. Use whenever the user asks for 
monthly cost, total credit cost, or loan breakdown.

Top Errors and Fixes

Error 1: "There was an error: 'Cannot assign to read only property \"name\" of object: Error: No execution data available'"

Cause: you called $fromAI() inside the Code Tool sandbox.

Fix: $fromAI() is a helper for other tool-enabled nodes (HTTP Request Tool, SendGrid Tool, toolWorkflow, etc.) — it's not exposed inside toolCode. Read the AI's input from query directly (or use specifyInputSchema for structured fields).

Error 2: "Wrong output type returned"

Cause: you returned a workflow-style array like [{ json: { ... } }]. That's the Code node contract, not the Code Tool contract.

Fix: return a string. For structured data, return JSON.stringify(output).

Error 3: "The response property should be a string, but it is an object"

Cause: you returned a plain object or array.

Fix: JSON.stringify() the result, or coerce to a string.

Show full SKILL.md (586 more words)Show less
Error 4: AI never calls the tool

Cause: tool name is generic (Code Tool, My Tool) or description doesn't clearly state when to use it.

Fix: rename to a verb-y name (calculate_car_loan), and rewrite the description to explicitly state the trigger conditions (e.g. "Use this whenever the user asks about monthly cost").

Error 5: AI sends garbage into query

Cause: unstructured tool with a vague description. The LLM guesses at the format.

Fix: either (a) include a concrete JSON example in the description, or (b) switch to specifyInputSchema: true so the LLM gets a typed schema.

See: ERROR_PATTERNS.md for full catalog with reproductions.


What's NOT Available in the Sandbox

The Code Tool sandbox is narrower than the Code node sandbox. Don't assume helpers carry over:

HelperCode nodeCode Tool
$input.all(), $input.first(), $input.item✅❌
$node["NodeName"]✅❌
$json, $binary✅❌
$fromAI()❌❌ (despite sitting next to an AI agent)
this.helpers.httpRequest()✅❌
DateTime (Luxon)✅✅ (standard in JS sandbox)
$jmespath()✅❌
this.getContext(...)✅❌
$getWorkflowStaticData(...)✅❌

Implication: the Code Tool is for pure computation. If you need an HTTP call, an API lookup, or cross-invocation state, use a different tool node:

  • HTTP Request Tool for external API calls
  • toolWorkflow (Call Sub-workflow Tool) for multi-step logic with access to the full Code node sandbox
  • MCP / database tools for persistent state

When to Use Code Tool vs Alternatives

Use Code Tool when:

  • ✅ Pure deterministic computation (math, parsing, formatting, validation)
  • ✅ Lightweight transformations the LLM shouldn't do itself (precision math, regex)
  • ✅ You want the code inline in the workflow, not in a separate sub-workflow

Use toolWorkflow (Call Sub-workflow Tool) when:

  • ✅ You need multiple parameters with clean $fromAI() typing
  • ✅ You need access to this.helpers, credentials, or other nodes
  • ✅ Logic is reusable across agents
  • ✅ You want structured typed inputs WITHOUT writing a JSON Schema

Use HTTP Request Tool when:

  • ✅ The tool is fundamentally a single API call
  • ✅ You want per-parameter $fromAI() bindings in URL/query/body

Rule of thumb: if you find yourself wanting $fromAI(), you probably want toolWorkflow instead of toolCode.


Complete Working Example

A production calculator tool (unstructured, JSON-in-string pattern):

json
{
  "parameters": {
    "name": "calculate_car_loan",
    "description": "Computes monthly car-loan payment using an annuity formula with residual/balloon. Call with a single JSON string. Example: {\"price\":439900,\"down_payment\":87980,\"interest_rate\":6.95,\"months\":36,\"residual_percent\":50,\"setup_fee\":695,\"monthly_admin_fee\":59}. Required: price, down_payment, interest_rate, months, residual_percent. Optional: setup_fee, monthly_admin_fee (default 0).",
    "language": "javaScript",
    "jsCode": "let params;\ntry {\n  params = typeof query === 'string' ? JSON.parse(query) : query;\n} catch (e) {\n  throw new Error('Invalid JSON: ' + e.message);\n}\n\nconst price           = Number(params.price);\nconst down_payment    = Number(params.down_payment);\nconst interest_rate   = Number(params.interest_rate);\nconst months          = Number(params.months);\nconst residual_percent= Number(params.residual_percent);\nconst setup_fee       = Number(params.setup_fee ?? 0) || 0;\nconst monthly_admin_fee = Number(params.monthly_admin_fee ?? 0) || 0;\n\nif (!isFinite(price) || price <= 0) throw new Error('price must be > 0');\nif (down_payment < 0 || down_payment >= price) throw new Error('down_payment must be in [0, price)');\n\nconst principal = price - down_payment;\nconst residual  = price * (residual_percent / 100);\nconst r = interest_rate / 100 / 12;\nconst growth = Math.pow(1 + r, months);\nconst base = r === 0\n  ? (principal - residual) / months\n  : (principal - residual / growth) * r / (1 - 1 / growth);\nconst monthly_payment = base + monthly_admin_fee;\n\nreturn JSON.stringify({\n  monthly_payment_sek: Math.round(monthly_payment),\n  loan_amount: Math.round(principal),\n  residual_value_sek: Math.round(residual),\n  total_cost_of_credit: Math.round(monthly_payment * months + residual + setup_fee - principal)\n});"
  },
  "type": "@n8n/n8n-nodes-langchain.toolCode",
  "typeVersion": 1.3,
  "name": "calculate_car_loan"
}

Wire it into an AI Agent via the ai_tool connection type.


Integration with Other Skills

n8n-code-javascript: the Code node skill. Most JavaScript patterns (arrays, map/filter, DateTime) transfer — but I/O contract is different. Don't copy data-access code.

n8n-node-configuration: specifyInputSchema is a classic displayOptions-driven conditional field. Use get_node({detail: "standard"}) on @n8n/n8n-nodes-langchain.toolCode to see schema-related properties.

n8n-workflow-patterns: Code Tool sits inside the "AI Agent with tools" pattern. An agent typically has several tools; Code Tool is the "local compute" option.

n8n-validation-expert: the three Code Tool errors listed above have clear signatures — if validation surfaces "Wrong output type returned", you know to switch from array-of-items to a string.


Quick Reference Checklist

Before deploying a Code Tool:

  • Node type is @n8n/n8n-nodes-langchain.toolCode (not nodes-base.code)
  • Tool name is descriptive, verb-y, snake_case (e.g. calculate_car_loan)
  • Description states when to use the tool and (if unstructured) shows a JSON example
  • Input read from query (JS) or _query (Python)
  • No $fromAI() in the code body
  • No $input / $json / $helpers — those aren't in the sandbox
  • Return is a string (use JSON.stringify() for structured output)
  • Wired into an AI Agent via ai_tool connection
  • Tested with the exact kind of input the LLM will send (JSON in a string, or schema-validated object)

Additional Resources

Official sources

Remember: the Code Tool is a LangChain tool wearing a Code-node UI. Contract is: string in, string out. Everything else follows from that.

© czlonkowski, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files in skills/n8n-code-tool of czlonkowski/n8n-skills.

  • SKILL.md
  • ERROR_PATTERNS.md
  • INPUT_SCHEMA.md
  • README.md

Open the folder on GitHubat commit 19cd793

Compare with similar skills

n8n Custom Code Tool Guide next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

n8n Custom Code Tool Guide compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
n8n Custom Code Tool Guide this skillczlonkowski/n8n-skills6.4k—~4kAutomated safety check: PassMIT
N8n Code Toolsickn33/agentic-awesome-skills47k1 repos~4.1kAutomated safety check: PassMIT
N8n Code Pythondavila7/claude-code-templates32k7 repos~4.5kAutomated safety check: PassMIT
Routerbase API Integrationaiskillstore/marketplace430—~964Automated safety check: PassNone
Deepagents Setup Configurationsoba-labs/langchain-agent-skills107—~1.9kAutomated safety check: PassMIT
Langgraph Testing Evaluationsoba-labs/langchain-agent-skills107—~2.3kAutomated safety check: PassMIT

Similar skills

  • N8n Code Tool

    sickn33/agentic-awesome-skills

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

    47k GitHub starsUsed in 1 repo~4.1k tokens
    Productivity & AutomationAuto-check passed
  • N8n Code Python

    davila7/claude-code-templates

    Write Python code in n8n Code nodes. An agent skill from davila7/claude-code-templates.

    32k GitHub starsUsed in 7 repos~4.5k tokens
    Productivity & AutomationAuto-check passed
  • Routerbase API Integration

    aiskillstore/marketplace

    Integrate applications with RouterBase, the OpenAI-compatible model gateway at https://routerbase.com/v1.

    430 GitHub stars~964 tokensUpdated today
    AI & LLM EngineeringAuto-check passed
  • Deepagents Setup Configuration

    soba-labs/langchain-agent-skills

    Initialize, validate, and troubleshoot Deep Agents projects in Python or JavaScript using the deepagents package.

    107 GitHub stars~1.9k tokensUpdated 1 mo ago
    AI & LLM EngineeringAuto-check passed
  • Langgraph Testing Evaluation

    soba-labs/langchain-agent-skills

    A skill your agent uses when you need to test or evaluate LangGraph/LangChain agents: writing unit or integration tests, generating test scaffolds, mocking LLM/tool behavior, running trajectory…

    107 GitHub stars~2.3k tokensUpdated 1 mo ago
    AI & LLM EngineeringAuto-check passed
  • Official

    Guides designing and building an official Apify integration for a company's product: workflow-automation apps, AI agent plugins, AI framework packages or direct API clients.

    2.4k GitHub stars~3.1k tokensUpdated today
    Backend & APIsAuto-check passed

More from czlonkowski/n8n-skills

All 15 skills in this repo
  • n8n Binary Data Handling

    czlonkowski/n8n-skills

    Explains how n8n keeps file bytes in $binary apart from structured $json data, and how to read, write and preserve binary across nodes, agent tools and chat.

    6.4k GitHub stars~3.9k tokensUpdated 21 days ago
    Auto-check passed
  • n8n Code Node JavaScript

    czlonkowski/n8n-skills

    Guides writing JavaScript in n8n Code nodes: picking an execution mode, reading input data, returning items, using built-in helpers and avoiding common errors.

    6.4k GitHub stars~4.9k tokensUpdated 21 days ago
    Auto-check passed
  • Native Python in n8n Code Nodes

    czlonkowski/n8n-skills

    Explains how to write native Python in n8n Code nodes, including the two input variables, blocked imports and fixes for common errors.

    6.4k GitHub stars~2.8k tokensUpdated 21 days ago
    Auto-check passed
  • n8n Error Handling

    czlonkowski/n8n-skills

    Wires n8n workflows so failures are visible and recoverable: per-node error outputs, retries, error workflows and correct 4xx and 5xx webhook responses.

    6.4k GitHub stars~5.1k tokensUpdated 21 days ago
    Auto-check passed
  • n8n Multi-Instance Targeting

    czlonkowski/n8n-skills

    Keeps an n8n MCP session pointed at the right n8n instance, with rules for discovering, switching and verifying the target before credential writes and for recovering from misroutes.

    6.4k GitHub stars~3.2k tokensUpdated 21 days ago
    Auto-check passed
  • n8n Node Configuration

    czlonkowski/n8n-skills

    Explains how to configure n8n nodes correctly: which fields each operation requires, how property dependencies show or hide fields, and which get_node detail level to use.

    6.4k GitHub stars~4.5k tokensUpdated 21 days ago
    Auto-check passed

Questions about n8n Custom Code Tool Guide

What does n8n Custom Code Tool Guide do?

Explains the n8n Custom Code Tool's actual runtime contract so an AI-agent-callable tool doesn't get written like a regular workflow Code node. This skill contrasts the two nodes directly: the Code Tool is invoked by an AI Agent with a query string or object rather than an item stream, must return a plain string rather than an items array, and has no $fromAI, $input, or HTTP helpers available in its sandbox, so treating it like a Code node throws errors such as a wrong output type or no execution data available.

When should I use n8n Custom Code Tool Guide?

n8n Custom Code Tool Guide fits situations like: building a Code Tool that an AI Agent in n8n can call; debugging a Code Tool error like a wrong output type; defining a structured input schema for a Code Tool's arguments.

How do I install n8n Custom Code Tool Guide in Claude Code?

Run `npx skills add czlonkowski/n8n-skills --skill n8n-code-tool -a claude-code`. Or copy the skill folder (skills/n8n-code-tool in czlonkowski/n8n-skills) into .claude/skills/n8n-code-tool in your project. Claude Code loads it when a task matches its description.

How do I install n8n Custom Code Tool Guide in Codex?

Run `npx skills add czlonkowski/n8n-skills --skill n8n-code-tool -a codex`. Or copy the skill folder (skills/n8n-code-tool in czlonkowski/n8n-skills) into .agents/skills/n8n-code-tool in your project. Codex loads it when a task matches its description.

Can I use n8n Custom Code Tool Guide in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add czlonkowski/n8n-skills --skill n8n-code-tool -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/n8n-code-tool, .gemini/skills/n8n-code-tool, .github/skills/n8n-code-tool and .opencode/skills/n8n-code-tool in your project.

What does n8n Custom Code Tool Guide need to run?

SKILL.md names no scripts, command-line tools or credentials: n8n Custom Code Tool Guide is instructions for the agent only.

Does n8n Custom Code Tool Guide access the network?

SKILL.md names 3 domains. As links in the text: docs.n8n.io, github.com and js.langchain.com. This is read from the text; nothing was executed.

Is n8n Custom Code Tool Guide safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does n8n Custom Code Tool Guide use?

n8n Custom Code Tool Guide is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does n8n Custom Code Tool Guide use?

About 4k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to n8n Custom Code Tool Guide?

Skills that share tags, products or a category with n8n Custom Code Tool Guide: N8n Code Tool (sickn33/agentic-awesome-skills, 47k stars), N8n Code Python (davila7/claude-code-templates, 32k stars), Routerbase API Integration (aiskillstore/marketplace, 430 stars) and Deepagents Setup Configuration (soba-labs/langchain-agent-skills, 107 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains n8n Custom Code Tool Guide?

czlonkowski (a GitHub user) maintains it in czlonkowski/n8n-skills, which has 6,387 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on September 16, 2026.

Source: czlonkowski/n8n-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.