@n8n/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +88 -0
- package/bin/n8n-cli.mjs +5 -0
- package/dist/base-command.d.ts +40 -0
- package/dist/base-command.js +161 -0
- package/dist/base-command.js.map +1 -0
- package/dist/build.tsbuildinfo +1 -0
- package/dist/client.d.ts +80 -0
- package/dist/client.js +282 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/audit/index.d.ts +17 -0
- package/dist/commands/audit/index.js +28 -0
- package/dist/commands/audit/index.js.map +1 -0
- package/dist/commands/config/set-api-key.d.ts +9 -0
- package/dist/commands/config/set-api-key.js +20 -0
- package/dist/commands/config/set-api-key.js.map +1 -0
- package/dist/commands/config/set-url.d.ts +9 -0
- package/dist/commands/config/set-url.js +23 -0
- package/dist/commands/config/set-url.js.map +1 -0
- package/dist/commands/config/show.d.ts +6 -0
- package/dist/commands/config/show.js +18 -0
- package/dist/commands/config/show.js.map +1 -0
- package/dist/commands/credential/create.d.ts +21 -0
- package/dist/commands/credential/create.js +42 -0
- package/dist/commands/credential/create.js.map +1 -0
- package/dist/commands/credential/delete.d.ts +19 -0
- package/dist/commands/credential/delete.js +22 -0
- package/dist/commands/credential/delete.js.map +1 -0
- package/dist/commands/credential/get.d.ts +19 -0
- package/dist/commands/credential/get.js +22 -0
- package/dist/commands/credential/get.js.map +1 -0
- package/dist/commands/credential/list.d.ts +17 -0
- package/dist/commands/credential/list.js +25 -0
- package/dist/commands/credential/list.js.map +1 -0
- package/dist/commands/credential/schema.d.ts +19 -0
- package/dist/commands/credential/schema.js +25 -0
- package/dist/commands/credential/schema.js.map +1 -0
- package/dist/commands/credential/transfer.d.ts +20 -0
- package/dist/commands/credential/transfer.js +28 -0
- package/dist/commands/credential/transfer.js.map +1 -0
- package/dist/commands/data-table/add-rows.d.ts +21 -0
- package/dist/commands/data-table/add-rows.js +31 -0
- package/dist/commands/data-table/add-rows.js.map +1 -0
- package/dist/commands/data-table/create.d.ts +18 -0
- package/dist/commands/data-table/create.js +29 -0
- package/dist/commands/data-table/create.js.map +1 -0
- package/dist/commands/data-table/delete-rows.d.ts +20 -0
- package/dist/commands/data-table/delete-rows.js +30 -0
- package/dist/commands/data-table/delete-rows.js.map +1 -0
- package/dist/commands/data-table/delete.d.ts +19 -0
- package/dist/commands/data-table/delete.js +22 -0
- package/dist/commands/data-table/delete.js.map +1 -0
- package/dist/commands/data-table/get.d.ts +19 -0
- package/dist/commands/data-table/get.js +22 -0
- package/dist/commands/data-table/get.js.map +1 -0
- package/dist/commands/data-table/list.d.ts +17 -0
- package/dist/commands/data-table/list.js +22 -0
- package/dist/commands/data-table/list.js.map +1 -0
- package/dist/commands/data-table/rows.d.ts +22 -0
- package/dist/commands/data-table/rows.js +35 -0
- package/dist/commands/data-table/rows.js.map +1 -0
- package/dist/commands/data-table/update-rows.d.ts +21 -0
- package/dist/commands/data-table/update-rows.js +36 -0
- package/dist/commands/data-table/update-rows.js.map +1 -0
- package/dist/commands/data-table/upsert-rows.d.ts +21 -0
- package/dist/commands/data-table/upsert-rows.js +36 -0
- package/dist/commands/data-table/upsert-rows.js.map +1 -0
- package/dist/commands/execution/delete.d.ts +19 -0
- package/dist/commands/execution/delete.js +22 -0
- package/dist/commands/execution/delete.js.map +1 -0
- package/dist/commands/execution/get.d.ts +20 -0
- package/dist/commands/execution/get.js +32 -0
- package/dist/commands/execution/get.js.map +1 -0
- package/dist/commands/execution/list.d.ts +19 -0
- package/dist/commands/execution/list.js +37 -0
- package/dist/commands/execution/list.js.map +1 -0
- package/dist/commands/execution/retry.d.ts +19 -0
- package/dist/commands/execution/retry.js +22 -0
- package/dist/commands/execution/retry.js.map +1 -0
- package/dist/commands/execution/stop.d.ts +19 -0
- package/dist/commands/execution/stop.js +22 -0
- package/dist/commands/execution/stop.js.map +1 -0
- package/dist/commands/login.d.ts +6 -0
- package/dist/commands/login.js +84 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +6 -0
- package/dist/commands/logout.js +20 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/project/add-member.d.ts +21 -0
- package/dist/commands/project/add-member.js +32 -0
- package/dist/commands/project/add-member.js.map +1 -0
- package/dist/commands/project/create.d.ts +17 -0
- package/dist/commands/project/create.js +22 -0
- package/dist/commands/project/create.js.map +1 -0
- package/dist/commands/project/delete.d.ts +19 -0
- package/dist/commands/project/delete.js +22 -0
- package/dist/commands/project/delete.js.map +1 -0
- package/dist/commands/project/get.d.ts +19 -0
- package/dist/commands/project/get.js +22 -0
- package/dist/commands/project/get.js.map +1 -0
- package/dist/commands/project/list.d.ts +17 -0
- package/dist/commands/project/list.js +22 -0
- package/dist/commands/project/list.js.map +1 -0
- package/dist/commands/project/members.d.ts +20 -0
- package/dist/commands/project/members.js +25 -0
- package/dist/commands/project/members.js.map +1 -0
- package/dist/commands/project/remove-member.d.ts +20 -0
- package/dist/commands/project/remove-member.js +29 -0
- package/dist/commands/project/remove-member.js.map +1 -0
- package/dist/commands/project/update.d.ts +20 -0
- package/dist/commands/project/update.js +25 -0
- package/dist/commands/project/update.js.map +1 -0
- package/dist/commands/skill/install.d.ts +14 -0
- package/dist/commands/skill/install.js +128 -0
- package/dist/commands/skill/install.js.map +1 -0
- package/dist/commands/source-control/pull.d.ts +17 -0
- package/dist/commands/source-control/pull.js +25 -0
- package/dist/commands/source-control/pull.js.map +1 -0
- package/dist/commands/tag/create.d.ts +17 -0
- package/dist/commands/tag/create.js +22 -0
- package/dist/commands/tag/create.js.map +1 -0
- package/dist/commands/tag/delete.d.ts +19 -0
- package/dist/commands/tag/delete.js +22 -0
- package/dist/commands/tag/delete.js.map +1 -0
- package/dist/commands/tag/list.d.ts +17 -0
- package/dist/commands/tag/list.js +22 -0
- package/dist/commands/tag/list.js.map +1 -0
- package/dist/commands/tag/update.d.ts +20 -0
- package/dist/commands/tag/update.js +25 -0
- package/dist/commands/tag/update.js.map +1 -0
- package/dist/commands/user/get.d.ts +19 -0
- package/dist/commands/user/get.js +22 -0
- package/dist/commands/user/get.js.map +1 -0
- package/dist/commands/user/list.d.ts +17 -0
- package/dist/commands/user/list.js +22 -0
- package/dist/commands/user/list.js.map +1 -0
- package/dist/commands/variable/create.d.ts +18 -0
- package/dist/commands/variable/create.js +25 -0
- package/dist/commands/variable/create.js.map +1 -0
- package/dist/commands/variable/delete.d.ts +19 -0
- package/dist/commands/variable/delete.js +22 -0
- package/dist/commands/variable/delete.js.map +1 -0
- package/dist/commands/variable/list.d.ts +17 -0
- package/dist/commands/variable/list.js +22 -0
- package/dist/commands/variable/list.js.map +1 -0
- package/dist/commands/variable/update.d.ts +21 -0
- package/dist/commands/variable/update.js +32 -0
- package/dist/commands/variable/update.js.map +1 -0
- package/dist/commands/workflow/activate.d.ts +19 -0
- package/dist/commands/workflow/activate.js +22 -0
- package/dist/commands/workflow/activate.js.map +1 -0
- package/dist/commands/workflow/create.d.ts +18 -0
- package/dist/commands/workflow/create.js +28 -0
- package/dist/commands/workflow/create.js.map +1 -0
- package/dist/commands/workflow/deactivate.d.ts +19 -0
- package/dist/commands/workflow/deactivate.js +22 -0
- package/dist/commands/workflow/deactivate.js.map +1 -0
- package/dist/commands/workflow/delete.d.ts +19 -0
- package/dist/commands/workflow/delete.js +22 -0
- package/dist/commands/workflow/delete.js.map +1 -0
- package/dist/commands/workflow/get.d.ts +19 -0
- package/dist/commands/workflow/get.js +25 -0
- package/dist/commands/workflow/get.js.map +1 -0
- package/dist/commands/workflow/list.d.ts +20 -0
- package/dist/commands/workflow/list.js +36 -0
- package/dist/commands/workflow/list.js.map +1 -0
- package/dist/commands/workflow/tags.d.ts +20 -0
- package/dist/commands/workflow/tags.js +35 -0
- package/dist/commands/workflow/tags.js.map +1 -0
- package/dist/commands/workflow/transfer.d.ts +20 -0
- package/dist/commands/workflow/transfer.js +28 -0
- package/dist/commands/workflow/transfer.js.map +1 -0
- package/dist/commands/workflow/update.d.ts +21 -0
- package/dist/commands/workflow/update.js +31 -0
- package/dist/commands/workflow/update.js.map +1 -0
- package/dist/config.d.ts +14 -0
- package/dist/config.js +82 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +112 -0
- package/dist/index.js +119 -0
- package/dist/index.js.map +1 -0
- package/dist/output.d.ts +9 -0
- package/dist/output.js +161 -0
- package/dist/output.js.map +1 -0
- package/package.json +45 -0
- package/skills/n8n-cli/SKILL.md +268 -0
package/dist/output.js
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatOutput = formatOutput;
|
|
4
|
+
exports.applyJqFilter = applyJqFilter;
|
|
5
|
+
function pickColumns(data, columns) {
|
|
6
|
+
const result = {};
|
|
7
|
+
for (const col of columns) {
|
|
8
|
+
result[col] = data[col];
|
|
9
|
+
}
|
|
10
|
+
return result;
|
|
11
|
+
}
|
|
12
|
+
function formatValue(value) {
|
|
13
|
+
if (value === null || value === undefined)
|
|
14
|
+
return '-';
|
|
15
|
+
if (typeof value === 'boolean')
|
|
16
|
+
return value ? 'true' : 'false';
|
|
17
|
+
if (typeof value === 'string') {
|
|
18
|
+
return value.length > 60 ? value.slice(0, 57) + '...' : value;
|
|
19
|
+
}
|
|
20
|
+
if (typeof value === 'number')
|
|
21
|
+
return String(value);
|
|
22
|
+
if (typeof value === 'object')
|
|
23
|
+
return JSON.stringify(value);
|
|
24
|
+
return typeof value === 'bigint' ? String(value) : JSON.stringify(value);
|
|
25
|
+
}
|
|
26
|
+
function renderTable(data, columns, noHeader) {
|
|
27
|
+
if (data.length === 0)
|
|
28
|
+
return 'No results.';
|
|
29
|
+
const cols = columns ?? Object.keys(data[0]);
|
|
30
|
+
const rows = data.map((row) => pickColumns(row, cols));
|
|
31
|
+
const widths = {};
|
|
32
|
+
for (const col of cols) {
|
|
33
|
+
widths[col] = col.length;
|
|
34
|
+
for (const row of rows) {
|
|
35
|
+
const len = formatValue(row[col]).length;
|
|
36
|
+
if (len > widths[col])
|
|
37
|
+
widths[col] = len;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const lines = rows.map((row) => cols.map((c) => formatValue(row[c]).padEnd(widths[c])).join(' '));
|
|
41
|
+
if (noHeader) {
|
|
42
|
+
return lines.join('\n');
|
|
43
|
+
}
|
|
44
|
+
const header = cols.map((c) => c.toUpperCase().padEnd(widths[c])).join(' ');
|
|
45
|
+
const separator = cols.map((c) => '-'.repeat(widths[c])).join(' ');
|
|
46
|
+
return [header, separator, ...lines].join('\n');
|
|
47
|
+
}
|
|
48
|
+
function formatOutput(data, options) {
|
|
49
|
+
const { format, columns, idField = 'id', noHeader } = options;
|
|
50
|
+
switch (format) {
|
|
51
|
+
case 'json':
|
|
52
|
+
return JSON.stringify(data, null, 2);
|
|
53
|
+
case 'id-only': {
|
|
54
|
+
if (Array.isArray(data)) {
|
|
55
|
+
return data
|
|
56
|
+
.map((item) => {
|
|
57
|
+
const val = item[idField];
|
|
58
|
+
return val !== null && val !== undefined ? `${val}` : '';
|
|
59
|
+
})
|
|
60
|
+
.join('\n');
|
|
61
|
+
}
|
|
62
|
+
if (typeof data === 'object' && data !== null && idField in data) {
|
|
63
|
+
return String(data[idField]);
|
|
64
|
+
}
|
|
65
|
+
return '';
|
|
66
|
+
}
|
|
67
|
+
case 'table':
|
|
68
|
+
default: {
|
|
69
|
+
if (Array.isArray(data)) {
|
|
70
|
+
return renderTable(data, columns, noHeader);
|
|
71
|
+
}
|
|
72
|
+
if (typeof data === 'object' && data !== null) {
|
|
73
|
+
const entries = Object.entries(data);
|
|
74
|
+
if (noHeader) {
|
|
75
|
+
return entries.map(([, v]) => formatValue(v)).join('\n');
|
|
76
|
+
}
|
|
77
|
+
const maxKeyLen = Math.max(...entries.map(([k]) => k.length));
|
|
78
|
+
return entries.map(([k, v]) => `${k.padEnd(maxKeyLen)} ${formatValue(v)}`).join('\n');
|
|
79
|
+
}
|
|
80
|
+
return String(data);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function parseJqPath(expr) {
|
|
85
|
+
const segments = [];
|
|
86
|
+
let i = 0;
|
|
87
|
+
if (expr[0] === '.')
|
|
88
|
+
i++;
|
|
89
|
+
while (i < expr.length) {
|
|
90
|
+
if (expr[i] === '[') {
|
|
91
|
+
i++;
|
|
92
|
+
if (expr[i] === ']') {
|
|
93
|
+
segments.push({ type: 'iterate' });
|
|
94
|
+
i++;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
let numStr = '';
|
|
98
|
+
while (i < expr.length && expr[i] !== ']') {
|
|
99
|
+
numStr += expr[i];
|
|
100
|
+
i++;
|
|
101
|
+
}
|
|
102
|
+
segments.push({ type: 'index', index: parseInt(numStr, 10) });
|
|
103
|
+
i++;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else if (expr[i] === '.') {
|
|
107
|
+
i++;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
let name = '';
|
|
111
|
+
while (i < expr.length && expr[i] !== '.' && expr[i] !== '[') {
|
|
112
|
+
name += expr[i];
|
|
113
|
+
i++;
|
|
114
|
+
}
|
|
115
|
+
if (name) {
|
|
116
|
+
segments.push({ type: 'field', name });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return segments;
|
|
121
|
+
}
|
|
122
|
+
function evaluateJq(data, segments, startIdx) {
|
|
123
|
+
let current = data;
|
|
124
|
+
for (let i = startIdx; i < segments.length; i++) {
|
|
125
|
+
const seg = segments[i];
|
|
126
|
+
if (current === null || current === undefined)
|
|
127
|
+
return current;
|
|
128
|
+
switch (seg.type) {
|
|
129
|
+
case 'field':
|
|
130
|
+
if (typeof current === 'object' && current !== null) {
|
|
131
|
+
current = current[seg.name];
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
break;
|
|
137
|
+
case 'index':
|
|
138
|
+
if (Array.isArray(current)) {
|
|
139
|
+
current = current[seg.index];
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
break;
|
|
145
|
+
case 'iterate':
|
|
146
|
+
if (Array.isArray(current)) {
|
|
147
|
+
return current.map((item) => evaluateJq(item, segments, i + 1));
|
|
148
|
+
}
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return current;
|
|
153
|
+
}
|
|
154
|
+
function applyJqFilter(data, expression) {
|
|
155
|
+
const expr = expression.trim();
|
|
156
|
+
if (expr === '.')
|
|
157
|
+
return data;
|
|
158
|
+
const segments = parseJqPath(expr);
|
|
159
|
+
return evaluateJq(data, segments, 0);
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@n8n/cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Client CLI for n8n — manage workflows, executions, and credentials from the terminal",
|
|
5
|
+
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
|
+
"bin": {
|
|
7
|
+
"n8n-cli": "bin/n8n-cli.mjs"
|
|
8
|
+
},
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"types": "dist/index.d.ts",
|
|
11
|
+
"files": [
|
|
12
|
+
"bin",
|
|
13
|
+
"dist",
|
|
14
|
+
"skills"
|
|
15
|
+
],
|
|
16
|
+
"oclif": {
|
|
17
|
+
"bin": "n8n-cli",
|
|
18
|
+
"commands": {
|
|
19
|
+
"strategy": "explicit",
|
|
20
|
+
"target": "./dist/index.js",
|
|
21
|
+
"identifier": "commands"
|
|
22
|
+
},
|
|
23
|
+
"topicSeparator": " "
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@oclif/core": "^4.5.2"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/node": "25.5.0",
|
|
30
|
+
"vitest": "^3.1.3",
|
|
31
|
+
"@n8n/typescript-config": "1.3.0"
|
|
32
|
+
},
|
|
33
|
+
"scripts": {
|
|
34
|
+
"clean": "rimraf dist .turbo",
|
|
35
|
+
"dev": "pnpm watch",
|
|
36
|
+
"typecheck": "tsc --noEmit",
|
|
37
|
+
"build": "tsc -p tsconfig.build.json",
|
|
38
|
+
"format": "biome format --write .",
|
|
39
|
+
"format:check": "biome ci .",
|
|
40
|
+
"lint": "eslint src --quiet",
|
|
41
|
+
"lint:fix": "eslint src --fix",
|
|
42
|
+
"watch": "tsc -p tsconfig.build.json --watch",
|
|
43
|
+
"test": "vitest run"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: n8n-cli
|
|
3
|
+
description: Use the n8n CLI to manage workflows, credentials, executions, and more on an n8n instance. Use when the user asks to interact with n8n, automate workflows, manage credentials, or operate their instance from the command line.
|
|
4
|
+
allowed-tools: Bash(n8n-cli:*), Bash(echo:*), Bash(cat:*), Read, Write
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# n8n CLI
|
|
8
|
+
|
|
9
|
+
The `n8n-cli` command-line tool manages an n8n instance via its REST API.
|
|
10
|
+
It auto-detects piped output and switches to JSON, making it composable for scripts and LLM tool use.
|
|
11
|
+
|
|
12
|
+
## Setup
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# Interactive login (saves to ~/.n8n-cli/config.json)
|
|
16
|
+
n8n-cli login
|
|
17
|
+
|
|
18
|
+
# Or configure directly
|
|
19
|
+
n8n-cli config set-url https://my-instance.n8n.cloud
|
|
20
|
+
n8n-cli config set-api-key n8n_api_...
|
|
21
|
+
|
|
22
|
+
# Or use environment variables (no config file needed)
|
|
23
|
+
export N8N_URL=https://my-instance.n8n.cloud
|
|
24
|
+
export N8N_API_KEY=n8n_api_...
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Global Flags
|
|
28
|
+
|
|
29
|
+
Every command supports these flags:
|
|
30
|
+
|
|
31
|
+
| Flag | Short | Description |
|
|
32
|
+
|------|-------|-------------|
|
|
33
|
+
| `--url` | `-u` | Instance URL (overrides config/env) |
|
|
34
|
+
| `--apiKey` | `-k` | API key (overrides config/env) |
|
|
35
|
+
| `--format` | `-f` | Output format: `table`, `json`, `id-only` |
|
|
36
|
+
| `--json` | | Shorthand for `--format=json` |
|
|
37
|
+
| `--jq` | | jq-style filter (implies `--json`), e.g. `'.[0].id'`, `'.[].name'` |
|
|
38
|
+
| `--quiet` | `-q` | Suppress output |
|
|
39
|
+
| `--no-header` | | Hide table headers (for `awk`/`cut` parsing) |
|
|
40
|
+
| `--debug` | | Print HTTP details to stderr |
|
|
41
|
+
|
|
42
|
+
**Auto-JSON:** When stdout is piped (not a TTY), output defaults to JSON automatically.
|
|
43
|
+
|
|
44
|
+
## Workflows
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# List all workflows
|
|
48
|
+
n8n-cli workflow list
|
|
49
|
+
|
|
50
|
+
# Filter workflows
|
|
51
|
+
n8n-cli workflow list --active
|
|
52
|
+
n8n-cli workflow list --tag=production
|
|
53
|
+
n8n-cli workflow list --name="My Workflow"
|
|
54
|
+
n8n-cli workflow list --limit=5
|
|
55
|
+
|
|
56
|
+
# Get a single workflow (full JSON with nodes and connections)
|
|
57
|
+
n8n-cli workflow get <id>
|
|
58
|
+
|
|
59
|
+
# Extract just node names from a workflow
|
|
60
|
+
n8n-cli workflow get <id> --jq '.nodes[].name'
|
|
61
|
+
|
|
62
|
+
# Create a workflow from JSON
|
|
63
|
+
n8n-cli workflow create --file=workflow.json
|
|
64
|
+
cat workflow.json | n8n-cli workflow create --stdin
|
|
65
|
+
|
|
66
|
+
# Update a workflow
|
|
67
|
+
n8n-cli workflow update <id> --file=updated.json
|
|
68
|
+
cat updated.json | n8n-cli workflow update <id> --stdin
|
|
69
|
+
|
|
70
|
+
# Activate / deactivate
|
|
71
|
+
n8n-cli workflow activate <id>
|
|
72
|
+
n8n-cli workflow deactivate <id>
|
|
73
|
+
|
|
74
|
+
# Delete a workflow
|
|
75
|
+
n8n-cli workflow delete <id>
|
|
76
|
+
|
|
77
|
+
# Transfer to another project
|
|
78
|
+
n8n-cli workflow transfer <id> --project=<projectId>
|
|
79
|
+
|
|
80
|
+
# List tags on a workflow
|
|
81
|
+
n8n-cli workflow tags <id>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Executions
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# List recent executions
|
|
88
|
+
n8n-cli execution list
|
|
89
|
+
n8n-cli execution list --workflow=<id> --status=error --limit=10
|
|
90
|
+
# status options: canceled, error, running, success, waiting
|
|
91
|
+
|
|
92
|
+
# Get execution details
|
|
93
|
+
n8n-cli execution get <id>
|
|
94
|
+
n8n-cli execution get <id> --include-data # includes full node I/O
|
|
95
|
+
|
|
96
|
+
# Retry a failed execution
|
|
97
|
+
n8n-cli execution retry <id>
|
|
98
|
+
|
|
99
|
+
# Stop a running execution
|
|
100
|
+
n8n-cli execution stop <id>
|
|
101
|
+
|
|
102
|
+
# Delete an execution
|
|
103
|
+
n8n-cli execution delete <id>
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Credentials
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
# List credentials
|
|
110
|
+
n8n-cli credential list
|
|
111
|
+
|
|
112
|
+
# Get credential metadata (not secrets)
|
|
113
|
+
n8n-cli credential get <id>
|
|
114
|
+
|
|
115
|
+
# Get the schema for a credential type (shows required fields)
|
|
116
|
+
n8n-cli credential schema notionApi
|
|
117
|
+
n8n-cli credential schema slackOAuth2Api
|
|
118
|
+
|
|
119
|
+
# Create a credential
|
|
120
|
+
n8n-cli credential create --type=notionApi --name='My Notion' --data='{"apiKey":"..."}'
|
|
121
|
+
n8n-cli credential create --type=notionApi --name='My Notion' --file=cred.json
|
|
122
|
+
cat cred.json | n8n-cli credential create --type=notionApi --name='My Notion' --stdin
|
|
123
|
+
|
|
124
|
+
# Delete / transfer
|
|
125
|
+
n8n-cli credential delete <id>
|
|
126
|
+
n8n-cli credential transfer <id> --project=<projectId>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Tip:** Use `credential schema <type>` to discover required fields before creating.
|
|
130
|
+
|
|
131
|
+
## Projects
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
n8n-cli project list
|
|
135
|
+
n8n-cli project get <id>
|
|
136
|
+
n8n-cli project create --name="My Project"
|
|
137
|
+
n8n-cli project update <id> --name="New Name"
|
|
138
|
+
n8n-cli project delete <id>
|
|
139
|
+
|
|
140
|
+
# Team management
|
|
141
|
+
n8n-cli project members <id>
|
|
142
|
+
n8n-cli project add-member <id> --user=<userId> --role=<role>
|
|
143
|
+
n8n-cli project remove-member <id> --user=<userId>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Tags
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
n8n-cli tag list
|
|
150
|
+
n8n-cli tag create --name=production
|
|
151
|
+
n8n-cli tag update <id> --name=staging
|
|
152
|
+
n8n-cli tag delete <id>
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Variables
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
n8n-cli variable list
|
|
159
|
+
n8n-cli variable create --key=API_ENDPOINT --value=https://api.example.com
|
|
160
|
+
n8n-cli variable update <id> --key=API_ENDPOINT --value=https://new-api.example.com
|
|
161
|
+
n8n-cli variable delete <id>
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Data Tables
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
# CRUD
|
|
168
|
+
n8n-cli data-table list
|
|
169
|
+
n8n-cli data-table get <id>
|
|
170
|
+
n8n-cli data-table create --name=Inventory --columns='[{"name":"item","type":"string"},{"name":"qty","type":"number"}]'
|
|
171
|
+
n8n-cli data-table delete <id>
|
|
172
|
+
|
|
173
|
+
# Row operations
|
|
174
|
+
n8n-cli data-table rows <id>
|
|
175
|
+
n8n-cli data-table add-rows <id> --file=rows.json
|
|
176
|
+
n8n-cli data-table update-rows <id> --file=rows.json
|
|
177
|
+
n8n-cli data-table upsert-rows <id> --file=rows.json
|
|
178
|
+
n8n-cli data-table delete-rows <id> --ids=row1,row2,row3
|
|
179
|
+
|
|
180
|
+
# All row commands support --stdin
|
|
181
|
+
cat rows.json | n8n-cli data-table add-rows <id> --stdin
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Users
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
n8n-cli user list
|
|
188
|
+
n8n-cli user get <id>
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Other
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
# Security audit
|
|
195
|
+
n8n-cli audit
|
|
196
|
+
n8n-cli audit --categories=credentials,nodes
|
|
197
|
+
|
|
198
|
+
# Source control
|
|
199
|
+
n8n-cli source-control pull
|
|
200
|
+
|
|
201
|
+
# View config
|
|
202
|
+
n8n-cli config show
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Composability Patterns
|
|
206
|
+
|
|
207
|
+
The CLI is designed to be piped and composed:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# Get all workflow IDs
|
|
211
|
+
n8n-cli workflow list --jq '.[].id'
|
|
212
|
+
|
|
213
|
+
# Get the name of the first workflow
|
|
214
|
+
n8n-cli workflow list --jq '.[0].name'
|
|
215
|
+
|
|
216
|
+
# Export a workflow to a file
|
|
217
|
+
n8n-cli workflow get 1234 --json > workflow-backup.json
|
|
218
|
+
|
|
219
|
+
# Find failing executions for a workflow
|
|
220
|
+
n8n-cli execution list --workflow=1234 --status=error --json
|
|
221
|
+
|
|
222
|
+
# Pipe workflow JSON for modification
|
|
223
|
+
n8n-cli workflow get 1234 --json | jq '.name = "Updated Name"' | n8n-cli workflow update 1234 --stdin
|
|
224
|
+
|
|
225
|
+
# Table output without headers for shell parsing
|
|
226
|
+
n8n-cli workflow list --no-header | awk '{print $1}'
|
|
227
|
+
|
|
228
|
+
# Debug API calls
|
|
229
|
+
n8n-cli workflow list --debug 2>debug.log
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Workflow JSON Structure
|
|
233
|
+
|
|
234
|
+
When creating or updating workflows, the JSON follows this structure:
|
|
235
|
+
|
|
236
|
+
```json
|
|
237
|
+
{
|
|
238
|
+
"name": "My Workflow",
|
|
239
|
+
"nodes": [
|
|
240
|
+
{
|
|
241
|
+
"name": "Start",
|
|
242
|
+
"type": "n8n-nodes-base.manualTrigger",
|
|
243
|
+
"position": [250, 300],
|
|
244
|
+
"parameters": {}
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"name": "HTTP Request",
|
|
248
|
+
"type": "n8n-nodes-base.httpRequest",
|
|
249
|
+
"position": [450, 300],
|
|
250
|
+
"parameters": {
|
|
251
|
+
"url": "https://api.example.com/data",
|
|
252
|
+
"method": "GET"
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
],
|
|
256
|
+
"connections": {
|
|
257
|
+
"Start": {
|
|
258
|
+
"main": [[{ "node": "HTTP Request", "type": "main", "index": 0 }]]
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Key points:
|
|
265
|
+
- `nodes[].type` follows the pattern `n8n-nodes-base.<nodeName>` for built-in nodes
|
|
266
|
+
- `connections` is keyed by source node name, with `main` output arrays
|
|
267
|
+
- Each connection specifies target `node`, `type` (usually `main`), and output `index`
|
|
268
|
+
- Use `workflow get <id> --json` to see real examples from the instance
|