@awesomate/hosting-mcp 0.86.0 → 0.88.2
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/dist/index.js +169 -172
- package/package.json +2 -1
- package/skill/CHANGELOG.json +37 -0
- package/skill/awesomate-app-builder/SKILL.md +4 -3
- package/skill/awesomate-app-builder/references/node-recipes.md +3 -2
- package/skill/awesomate-app-builder/references/stack-decision.md +4 -3
- package/skill/awesomate-bookings/SKILL.md +12 -6
- package/skill/awesomate-database/SKILL.md +52 -62
- package/skill/awesomate-email/SKILL.md +15 -0
- package/skill/awesomate-hosting/SKILL.md +14 -4
- package/skill/awesomate-knowledge/SKILL.md +1 -0
- package/skill/awesomate-n8n/SKILL.md +165 -108
- package/skill/awesomate-n8n/evals/n8n-agent-build/graders/grader.md +2 -1
- package/skill/awesomate-n8n/references/ai-agents.md +10 -8
- package/skill/awesomate-n8n/references/datatables.md +46 -66
- package/skill/awesomate-n8n/references/error-handling.md +5 -5
- package/skill/awesomate-n8n/references/n8n-agents.md +10 -9
- package/skill/awesomate-n8n/references/onebrain.md +4 -4
- package/skill/awesomate-n8n/references/platform-notes.md +13 -13
- package/skill/awesomate-n8n/references/possibilities.md +12 -11
- package/skill/awesomate-n8n/references/testing-policy.md +51 -47
- package/skill/awesomate-n8n/references/troubleshooting.md +15 -16
- package/skill/awesomate-n8n/references/webhook-pages.md +5 -5
- package/skill/awesomate-n8n/references/wp-form-handler.md +6 -4
- package/skill/awesomate-seo/SKILL.md +19 -0
- package/skill/awesomate-support/SKILL.md +18 -1
- package/skill/awesomate-n8n/evals/ai-agent-build/graders/grader.md +0 -31
- package/skill/awesomate-n8n/evals/ai-agent-build/prompt.md +0 -1
- package/skill/awesomate-n8n/evals/build-form-email/graders/grader.md +0 -30
- package/skill/awesomate-n8n/evals/build-form-email/prompt.md +0 -1
- package/skill/awesomate-n8n/evals/datatable-dedupe/graders/grader.md +0 -32
- package/skill/awesomate-n8n/evals/datatable-dedupe/prompt.md +0 -2
- package/skill/awesomate-n8n/evals/essentials-upsell/graders/grader.md +0 -27
- package/skill/awesomate-n8n/evals/essentials-upsell/prompt.md +0 -2
- package/skill/awesomate-n8n/evals/live-change-promote/graders/grader.md +0 -35
- package/skill/awesomate-n8n/evals/live-change-promote/prompt.md +0 -2
- package/skill/awesomate-n8n/evals/validated-not-done/graders/grader.md +0 -27
- package/skill/awesomate-n8n/evals/validated-not-done/prompt.md +0 -2
- package/skill/awesomate-n8n/evals/webhook-body-fix/graders/grader.md +0 -26
- package/skill/awesomate-n8n/evals/webhook-body-fix/prompt.md +0 -3
- package/skill/awesomate-n8n/evals/webhook-page-build/graders/grader.md +0 -36
- package/skill/awesomate-n8n/evals/webhook-page-build/prompt.md +0 -1
- package/skill/awesomate-n8n/references/rest-fallback.md +0 -77
- package/skill/awesomate-n8n/references/upgrade-loop.md +0 -98
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: awesomate-n8n
|
|
3
|
-
description: Build, test, and fix the user's Awesomate-hosted n8n automations, data tables, and AI agents. Use when the user says "build me an automation", "automate this", "connect X to Y", "why did my workflow fail", "create a data table", "build an AI agent / chatbot", "make an n8n agent", "an agent I can talk to in Slack/Telegram", "what automations do I have", "what could I automate", or mentions n8n, workflows, executions, webhooks, the 1Brain node, or {slug}.awesomate.io. Reads and n8n Agents on every plan;
|
|
3
|
+
description: Build, test, and fix the user's Awesomate-hosted n8n automations, data tables, and AI agents. Use when the user says "build me an automation", "automate this", "connect X to Y", "why did my workflow fail", "create a data table", "build an AI agent / chatbot", "make an n8n agent", "an agent I can talk to in Slack/Telegram", "what automations do I have", "what could I automate", or mentions n8n, workflows, executions, webhooks, the 1Brain node, or {slug}.awesomate.io. Reads and n8n Agents on every plan; installing Awesomate templates needs Support Plus+; workflows are built through the client's own n8n MCP server, which Awesomate never sees or limits. Companion to awesomate-hosting: same connection, same PAT.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Awesomate n8n
|
|
6
|
+
# Awesomate n8n: your automations from Claude Code
|
|
7
7
|
|
|
8
8
|
The user's business runs n8n workflows on an Awesomate-hosted instance. You
|
|
9
9
|
can know their WHOLE instance (every workflow, every node, every connection),
|
|
10
10
|
look up live documentation for 500+ nodes and 2,500+ community templates,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
read every execution node by node, build n8n Agents, and install Awesomate's
|
|
12
|
+
curated templates. Workflows themselves are written through the instance's
|
|
13
|
+
OWN MCP server (n8n 2.x ships one), which the user connects to their Claude
|
|
14
|
+
Code. Awesomate never sees that traffic, sets no limits on it and keeps no
|
|
15
|
+
count. Their n8n API key never reaches this machine; every hub read is
|
|
16
|
+
consent-gated and audited on Awesomate's side.
|
|
15
17
|
|
|
16
18
|
**Routing rule:** live facts about THEIR instance come from tools; judgment
|
|
17
19
|
and patterns come from references; node schemas come from
|
|
@@ -24,24 +26,27 @@ as outcomes ("your form now emails you") with URLs.
|
|
|
24
26
|
|
|
25
27
|
## 0. First run (every session)
|
|
26
28
|
|
|
27
|
-
1. `awesomate_whoami
|
|
28
|
-
resolves to. Wrong slug
|
|
29
|
-
tool response is stamped `account: <slug
|
|
30
|
-
2. `awesomate_n8n_context
|
|
31
|
-
- `consented: false
|
|
29
|
+
1. `awesomate_whoami`: n8n tools act on whichever ACCOUNT this folder
|
|
30
|
+
resolves to. Wrong slug? Stop and fix the pin/connection first. Every
|
|
31
|
+
tool response is stamped `account: <slug>`. Watch it.
|
|
32
|
+
2. `awesomate_n8n_context`, and cache the result:
|
|
33
|
+
- `consented: false`: give the user the `settingsUrl` and tell them
|
|
32
34
|
where it lands: **n8n → Settings → Privacy** at
|
|
33
|
-
`hub.awesomate.ai/settings?tab=privacy` → "
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
`hub.awesomate.ai/settings?tab=privacy` → "Let Claude Code work with
|
|
36
|
+
your automations". Privacy moved there; the plain `/settings` page no
|
|
37
|
+
longer has it (old `?tab=privacy` links just redirect). Wait, then
|
|
38
|
+
re-check.
|
|
39
|
+
- `403 missingScopes`: the token predates n8n support. Reconnect from
|
|
36
40
|
hub.awesomate.ai/claude (Connect Claude Code card).
|
|
37
|
-
- `capabilities.
|
|
38
|
-
Be honest about it once, then help fully
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
- `
|
|
42
|
-
|
|
41
|
+
- `capabilities.templateInstall: false`: Awesomate template installs
|
|
42
|
+
(§3a) are Support Plus+. Be honest about it once, then help fully with
|
|
43
|
+
everything else: reads, n8n Agents, and building through their own n8n
|
|
44
|
+
MCP server all work on every plan.
|
|
45
|
+
- `capabilities.variant`: FFMPEG variants have the media community
|
|
46
|
+
nodes; Standard does not. Never assume a node exists. Verify.
|
|
47
|
+
- `instance`: community packages + counts (your recon baseline).
|
|
43
48
|
3. **Inventory pass** (before designing or diagnosing anything):
|
|
44
|
-
`awesomate_n8n_workflows` (no id
|
|
49
|
+
`awesomate_n8n_workflows` (no id: every workflow as a node summary in
|
|
45
50
|
ONE call) and, as needed, `awesomate_n8n_inspect` for `nodes`,
|
|
46
51
|
`credentials`, `variables`, `datatables`. Cache this world picture for
|
|
47
52
|
the session; refresh after your own writes.
|
|
@@ -54,19 +59,19 @@ as outcomes ("your form now emails you") with URLs.
|
|
|
54
59
|
map, add its `instructionLine` from `awesomate_business_map` action `job`.
|
|
55
60
|
|
|
56
61
|
Read [references/platform-notes.md](references/platform-notes.md) BEFORE
|
|
57
|
-
designing or diagnosing
|
|
62
|
+
designing or diagnosing. It is the live truth for THIS platform ($vars not
|
|
58
63
|
$env, `$json.body`, task-runner limits, activation semantics). When it
|
|
59
64
|
conflicts with anything under `references/vendor/`, platform-notes wins.
|
|
60
65
|
|
|
61
|
-
## 0a. Health sweep
|
|
66
|
+
## 0a. Health sweep: the guardian pattern
|
|
62
67
|
|
|
63
68
|
At the START of any n8n session, alongside the context call: run
|
|
64
69
|
`awesomate_n8n_errors` **with `days: 7`** and `awesomate_n8n_kpis` once. The
|
|
65
|
-
`days` parameter is not optional in practice
|
|
70
|
+
`days` parameter is not optional in practice: the tool defaults to **30**,
|
|
66
71
|
so omitting it sweeps a month and dresses old, already-fixed failures up as
|
|
67
72
|
this week's news. If something is failing, surface it in ONE line in the
|
|
68
|
-
user's language
|
|
69
|
-
look?"
|
|
73
|
+
user's language ("two of your automations failed overnight. Want me to
|
|
74
|
+
look?") before proceeding with the asked task. If everything is green, say
|
|
70
75
|
nothing and get on with it. Never let the sweep hijack the session; the
|
|
71
76
|
user's ask comes first unless they say otherwise.
|
|
72
77
|
|
|
@@ -74,63 +79,64 @@ user's ask comes first unless they say otherwise.
|
|
|
74
79
|
instance has no error history and no error-reporter workflow installed yet,
|
|
75
80
|
so the sweep returns empty for the same reason it would on a flawless one.
|
|
76
81
|
Check the inventory before you interpret it: no workflows, or workflows with
|
|
77
|
-
no executions, means *there is nothing here yet
|
|
78
|
-
("nothing has run yet, so there's nothing to report
|
|
82
|
+
no executions, means *there is nothing here yet*. Say that, plainly
|
|
83
|
+
("nothing has run yet, so there's nothing to report. Want to build the
|
|
79
84
|
first one?"). Never let "no errors found" imply "everything is working".
|
|
80
85
|
|
|
81
86
|
When diagnosing, trust `errorSummary` only when `confident: true` (it then
|
|
82
87
|
also carries `errorType`, `code`, `lastNodeExecuted`). When `confident:
|
|
83
|
-
false`, the failing-node name came from a heuristic and may be WRONG
|
|
88
|
+
false`, the failing-node name came from a heuristic and may be WRONG. Verify
|
|
84
89
|
the named node actually exists in the workflow before editing anything.
|
|
85
90
|
|
|
86
91
|
## 1. Tools
|
|
87
92
|
|
|
88
93
|
| Task | Tool |
|
|
89
94
|
|---|---|
|
|
90
|
-
| Session context, consent,
|
|
95
|
+
| Session context, consent, capabilities, fingerprint | `awesomate_n8n_context` |
|
|
91
96
|
| All workflows (node-level summaries) / one workflow (`detail: full\|structure`) | `awesomate_n8n_workflows` |
|
|
92
97
|
| Node inventory, datatables (+rows), possibilities, credentials, $vars | `awesomate_n8n_inspect` |
|
|
93
98
|
| Instance KPIs: exec totals, error rate, avg/p95 duration, time saved, 7d-vs-prior deltas (per-workflow adds `last_error_at` + `clean_days`) | `awesomate_n8n_kpis` |
|
|
94
|
-
| Instance-WIDE error events grouped by fingerprint (category, workflow, node, occurrences, first/last seen)
|
|
99
|
+
| Instance-WIDE error events grouped by fingerprint (category, workflow, node, occurrences, first/last seen): "what is broken across everything" | `awesomate_n8n_errors` |
|
|
95
100
|
| Execution/table/DB byte sizes + 24h per-workflow offenders ("your executions weigh 4GB") | `awesomate_n8n_storage` |
|
|
96
101
|
| AI error-analyzer findings: clientSummary, needsClientAction, fixReady (Pro/Embedded + the **"Enable AI Error Diagnosis"** toggle under n8n → Settings → Privacy; read-only) | `awesomate_n8n_findings` |
|
|
97
|
-
| Account-wide numbers in one call: executions by status, error rate, time saved, workflows total/active, chat sessions, 7-day trend, most recent live failure
|
|
102
|
+
| Account-wide numbers in one call: executions by status, error rate, time saved, workflows total/active, chat sessions, 7-day trend, most recent live failure. The single best source for a status update or weekly report | `awesomate_dashboard_metrics` |
|
|
98
103
|
| Executions list / detail / node-by-node debug | `awesomate_n8n_executions` |
|
|
99
104
|
| Node schemas, node search, community templates, node-level validation | `awesomate_n8n_node_docs` |
|
|
100
|
-
| Validate / create draft / update draft / activate / promote / rollback / delete draft | `awesomate_n8n_deploy` |
|
|
101
105
|
| **n8n Agents** (the Agents tab, n8n 2.41+, every plan): status, then create / edit / validate / test / publish / channels via n8n's own agent tools | `awesomate_n8n_agents` |
|
|
102
|
-
|
|
|
103
|
-
| Awesomate's template library: list, detail, install_plan (pauses on a missing credential), install, redeem, installs, activate, test, rollback | `awesomate_n8n_library` |
|
|
106
|
+
| Awesomate's template library (Support Plus+): list, detail, install_plan (pauses on a missing credential), install, redeem, installs, activate, test, rollback | `awesomate_n8n_library` |
|
|
104
107
|
| Book a session with the Awesomate team from their credits (session_types, slots, book, mine) | `awesomate_book_session` |
|
|
105
|
-
|
|
|
106
|
-
| Provision a Postgres DB + n8n credential | `awesomate_n8n_provision_pg` |
|
|
107
|
-
| Wire a tested webhook workflow into one of their hosted apps (stores URL + secret on the app; returns the secret ONCE for the workflow's header check) | `awesomate_n8n_attach_to_app` |
|
|
108
|
+
| Wire any production webhook URL on their n8n into one of their hosted apps (stores URL + secret on the app; returns the secret ONCE for the workflow's header check) | `awesomate_n8n_attach_to_app` |
|
|
108
109
|
| Refresh these skills from the latest package | `awesomate_skill_update` |
|
|
109
110
|
|
|
111
|
+
**Writing workflows is not an Awesomate tool.** Creating, editing, publishing
|
|
112
|
+
and running a workflow happens through the n8n instance's own MCP server,
|
|
113
|
+
connected to this Claude Code by the user (§3, Phase 4). Reads, agents,
|
|
114
|
+
template installs and app wiring are the hub's; the workflow JSON goes
|
|
115
|
+
straight to their n8n.
|
|
116
|
+
|
|
110
117
|
No `awesomate_n8n_*` tools in this session (fresh bootstrap, or the server
|
|
111
|
-
didn't load)? Suggest a Claude Code restart once
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
118
|
+
didn't load)? Suggest a Claude Code restart once. If the n8n MCP server IS
|
|
119
|
+
connected, you can still design and write workflows with it meanwhile; you
|
|
120
|
+
just cannot ground the design in the hub's inventory or read executions
|
|
121
|
+
until the Awesomate tools are back.
|
|
115
122
|
|
|
116
|
-
## 2. References
|
|
123
|
+
## 2. References: read on demand
|
|
117
124
|
|
|
118
125
|
| When | Read |
|
|
119
126
|
|---|---|
|
|
120
127
|
| Before any design or diagnosis | [platform-notes.md](references/platform-notes.md) |
|
|
121
128
|
| Designing tests, judging "is it done" | [testing-policy.md](references/testing-policy.md) |
|
|
122
129
|
| Anything involving data tables | [datatables.md](references/datatables.md) |
|
|
123
|
-
| An **n8n Agent** (Agents tab, Slack/Telegram channels, schedules, "set it up once, use it anywhere")
|
|
130
|
+
| An **n8n Agent** (Agents tab, Slack/Telegram channels, schedules, "set it up once, use it anywhere"), or unsure which kind of agent | [n8n-agents.md](references/n8n-agents.md) |
|
|
124
131
|
| An AI Agent NODE inside a workflow / LLM steps | [ai-agents.md](references/ai-agents.md) |
|
|
125
132
|
| A workflow is failing | [troubleshooting.md](references/troubleshooting.md) |
|
|
126
133
|
| Error plans, error workflows, notify-the-owner on failure | [error-handling.md](references/error-handling.md) |
|
|
127
134
|
| A weekly business report / "email me my numbers" | [recurring-reports.md](references/recurring-reports.md) |
|
|
128
|
-
| Changing a LIVE workflow | [upgrade-loop.md](references/upgrade-loop.md) |
|
|
129
135
|
| "What could I automate?" | [possibilities.md](references/possibilities.md) |
|
|
130
136
|
| WordPress form → n8n | [wp-form-handler.md](references/wp-form-handler.md) |
|
|
131
137
|
| **1Brain** in a workflow or agent: procedures, SOPs, policies, the `CUSTOM.oneBrain` node (check it is on the instance first). Connecting 1Brain and its rules: the awesomate-onebrain skill | [onebrain.md](references/onebrain.md) |
|
|
132
138
|
| A person must **approve before the automation acts** (a quote, a refund, a reply it wrote): Hold for a decision and a Wait | [decisions.md](references/decisions.md) |
|
|
133
|
-
| A designed page served BY n8n
|
|
139
|
+
| A designed page served BY n8n: form, phone capture mini-app, approval page, status page | [webhook-pages.md](references/webhook-pages.md) |
|
|
134
140
|
| Expression syntax details | [vendor/expressions/](references/vendor/expressions/SKILL.md) |
|
|
135
141
|
| Code-node JavaScript | [vendor/code-node/](references/vendor/code-node/SKILL.md) |
|
|
136
142
|
| Node configuration patterns | [vendor/node-configuration/](references/vendor/node-configuration/SKILL.md) |
|
|
@@ -139,55 +145,85 @@ they're blocked on a restart.
|
|
|
139
145
|
|
|
140
146
|
## 3. The build loop (follow ALL six phases)
|
|
141
147
|
|
|
142
|
-
**Phase 1
|
|
143
|
-
criteria, error handling
|
|
148
|
+
**Phase 1: Discovery.** Understand inputs/outputs, trigger, success
|
|
149
|
+
criteria, error handling, in the user's words. Check the inventory FIRST:
|
|
144
150
|
reuse existing credentials, $vars, tables, workflows. Email decision tree:
|
|
145
151
|
existing Gmail/Google credential → reference its ID · none → offer an
|
|
146
|
-
API-key credential (SMTP / Resend / SendGrid
|
|
152
|
+
API-key credential (SMTP / Resend / SendGrid, instant) OR guided Gmail
|
|
147
153
|
OAuth. A credential existing ≠ working.
|
|
148
154
|
|
|
149
155
|
**Say the credential catch before they pick, not after it fails.** No tool
|
|
150
|
-
creates a credential on their instance
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
**Phase 2 — Design.** Resolve EVERY planned node and typeVersion via
|
|
163
|
-
`awesomate_n8n_node_docs` (search similar community templates too — a
|
|
156
|
+
creates a credential on their instance. Every credential, API-key ones
|
|
157
|
+
included, the user creates in n8n at `{instanceUrl}/home/credentials`; you
|
|
158
|
+
then re-check the inventory to verify it exists. **Gmail and any other OAuth
|
|
159
|
+
credential can only ever be finished in the browser**: the consent screen is
|
|
160
|
+
Google's, so that branch always ends with them, no matter what you try. Flag
|
|
161
|
+
it while they're choosing: *"Either way you'll paste it in on your n8n. An
|
|
162
|
+
SMTP or Resend key is one box and a minute; Gmail means clicking through
|
|
163
|
+
Google's permission screen. Tell me which and I'll give you the exact steps,
|
|
164
|
+
then pick it up from there."*
|
|
165
|
+
|
|
166
|
+
**Phase 2: Design.** Resolve EVERY planned node and typeVersion via
|
|
167
|
+
`awesomate_n8n_node_docs` (search similar community templates too: a
|
|
164
168
|
proven template beats a blank canvas). Propose the architecture as an arrow
|
|
165
169
|
diagram (`Webhook -> Validate -> Send Email -> Respond`). Reasoning/
|
|
166
170
|
execution separation; descriptive node names; every external call has an
|
|
167
171
|
error plan. Externally-called workflows use a **webhook trigger with an
|
|
168
|
-
explicit path
|
|
172
|
+
explicit path**, never a Form Trigger. Data the automation must remember
|
|
169
173
|
between runs → data table ([datatables.md](references/datatables.md)).
|
|
170
174
|
|
|
171
|
-
**Phase 3
|
|
175
|
+
**Phase 3: Confirmation.** Present the design in plain words and wait for
|
|
172
176
|
explicit approval. Never create anything on their instance without it.
|
|
173
177
|
|
|
174
|
-
**Phase 4
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
**
|
|
178
|
+
**Phase 4: Implementation, through their n8n's own MCP server.** Writing
|
|
179
|
+
happens on their n8n, not through Awesomate.
|
|
180
|
+
|
|
181
|
+
- **Is it connected?** Look for the n8n server's tools in this session
|
|
182
|
+
(`search_workflows`, `get_workflow_details`, `create_workflow`,
|
|
183
|
+
`update_workflow`, `publish_workflow`, `execute_workflow`; the server is
|
|
184
|
+
usually named `n8n`). If they are there, build.
|
|
185
|
+
- **If it is not connected, say so and hand the user the two steps.** Do not
|
|
186
|
+
pretend any Awesomate tool can create or change a workflow; none can.
|
|
187
|
+
1. Switch on MCP access and get the key, in their own n8n: **Settings →
|
|
188
|
+
MCP access** on `{instanceUrl}`. The hub's **Set it up for me** button
|
|
189
|
+
under **n8n Agents access** on `hub.awesomate.ai/n8n/settings` also
|
|
190
|
+
switches MCP access on. The key is theirs; never ask them to paste it
|
|
191
|
+
into the chat.
|
|
192
|
+
2. Add it to their Claude Code, in a terminal, with their own key in place
|
|
193
|
+
of the placeholder:
|
|
194
|
+
`claude mcp add --transport http n8n {instanceUrl}/mcp-server/http --header "Authorization: Bearer <their MCP key>"`
|
|
195
|
+
then restart Claude Code and carry on. Until then, keep designing:
|
|
196
|
+
everything up to Phase 3 needs only the Awesomate reads.
|
|
197
|
+
- Compose the workflow JSON from the approved design. Check every node
|
|
198
|
+
against `awesomate_n8n_node_docs validate_node` before you write it, and
|
|
199
|
+
fix every error-severity issue (known false positives are listed in
|
|
200
|
+
platform-notes). Keep `settings.saveExecutionProgress` false yourself; the
|
|
201
|
+
hub no longer enforces it.
|
|
202
|
+
- Create it with the n8n server's create tool. It lands unpublished. Give
|
|
203
|
+
the workflow a name the user will recognise in their n8n list; nothing
|
|
204
|
+
prefixes or tags it for you now. A webhook's production URL is
|
|
205
|
+
`{instanceUrl}/webhook/<path>`: take the path from the workflow you
|
|
206
|
+
created and `instanceUrl` from `awesomate_n8n_context`; never guess the
|
|
207
|
+
hostname.
|
|
208
|
+
- Data tables: the user creates them in n8n (Data tables in the left menu),
|
|
209
|
+
or you do it through the n8n server if it offers a data-table tool; read
|
|
210
|
+
them back with `awesomate_n8n_inspect {what:'datatables'}` and reference
|
|
211
|
+
them by name. Full rules: [datatables.md](references/datatables.md).
|
|
212
|
+
- Iterate with the n8n server's update tool on the same workflow id. Never
|
|
213
|
+
recreate under a new id: the webhook URLs change.
|
|
214
|
+
|
|
215
|
+
**Phase 5: Testing (mandatory; validated ≠ tested).** Full policy:
|
|
182
216
|
[testing-policy.md](references/testing-policy.md). Short form: approval →
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
217
|
+
publish through the n8n server → run it (the n8n server's execute tool, a
|
|
218
|
+
POST to the production webhook with obviously fake data, or ask the user to
|
|
219
|
+
trigger it) → inspect the execution node-by-node (`awesomate_n8n_executions`
|
|
220
|
+
with `debug: true`) → happy path + empty + malformed + error-branch routing →
|
|
221
|
+
report what ran and what the human must verify ("check your inbox").
|
|
187
222
|
|
|
188
|
-
**Phase 6
|
|
189
|
-
the webhook URL, and what happens next.
|
|
190
|
-
|
|
223
|
+
**Phase 6: Wrap-up.** Give the workflow URL (`{instanceUrl}/workflow/{id}`),
|
|
224
|
+
the webhook URL, and what happens next. Remove any temporary test triggers
|
|
225
|
+
and, with their OK, any throwaway workflows you created along the way
|
|
226
|
+
(unpublish first, then delete, through the n8n server).
|
|
191
227
|
|
|
192
228
|
## 3a. Installing an Awesomate template (bundle)
|
|
193
229
|
|
|
@@ -243,12 +279,27 @@ check; use it when the member has a token, otherwise use the catalog.
|
|
|
243
279
|
|
|
244
280
|
## 4. Changing a LIVE workflow
|
|
245
281
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
282
|
+
A live workflow is changed through the n8n server's update tool on its OWN
|
|
283
|
+
id, then republished. **Never build a copy and "activate the copy" in its
|
|
284
|
+
place**: the copy has different webhook URLs and every external caller
|
|
285
|
+
breaks. The order:
|
|
286
|
+
|
|
287
|
+
1. Read the live workflow (`get_workflow_details`) and the inventory; note
|
|
288
|
+
its webhook paths and `settings.errorWorkflow`.
|
|
289
|
+
2. Make the change in a throwaway copy first when the edit is more than a
|
|
290
|
+
parameter tweak, test it there, and read the execution with
|
|
291
|
+
`awesomate_n8n_executions` debug. The copy is for testing only; it never
|
|
292
|
+
goes live.
|
|
293
|
+
3. Present a human-readable diff of what will change in the live one and
|
|
294
|
+
wait for explicit approval.
|
|
295
|
+
4. Apply the same change to the LIVE workflow id with the update tool, keep
|
|
296
|
+
the webhook paths, and republish it.
|
|
297
|
+
5. Verify the ORIGINAL URL still answers (a test fire or the user's own
|
|
298
|
+
trigger), then inspect the new run. Delete the throwaway copy.
|
|
299
|
+
|
|
300
|
+
There is no automatic rollback now. Before step 4 keep the live workflow's
|
|
301
|
+
full JSON from step 1 so that, if the new version misbehaves, you can put the
|
|
302
|
+
previous one back with the same update tool.
|
|
252
303
|
|
|
253
304
|
## 5. Diagnosing a failure
|
|
254
305
|
|
|
@@ -257,36 +308,42 @@ usually upstream) → `debug: true` for node-level output → check against
|
|
|
257
308
|
[troubleshooting.md](references/troubleshooting.md) → explain in the user's
|
|
258
309
|
terms with the exact fix. Trust `errorSummary` only on `confident: true`
|
|
259
310
|
(§0a). While you're there, check whether the workflow has an error plan at
|
|
260
|
-
all
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
311
|
+
all ([error-handling.md](references/error-handling.md)). Self-built
|
|
312
|
+
workflows: fix through the n8n server's update tool (§4 when it is live), then
|
|
313
|
+
re-run and re-inspect. Agency-managed (`agency_managed` error): read and
|
|
314
|
+
explain freely, and switch it off or on if the user asks (say what it does
|
|
315
|
+
first); any other change goes through Awesomate support.
|
|
264
316
|
|
|
265
317
|
## 6. "What could I automate?"
|
|
266
318
|
|
|
267
319
|
`awesomate_n8n_inspect {what:'possibilities'}` returns facts; YOU make the
|
|
268
|
-
suggestions
|
|
320
|
+
suggestions: grounded, ≤8, honestly labelled with what each needs. Rules:
|
|
269
321
|
[possibilities.md](references/possibilities.md). Offer it once, in one
|
|
270
322
|
sentence, after the first inventory pass when the user's ask is vague. One
|
|
271
|
-
standing recipe worth offering: the weekly business pulse
|
|
272
|
-
[recurring-reports.md](references/recurring-reports.md).
|
|
323
|
+
standing recipe worth offering: the weekly business pulse
|
|
324
|
+
([recurring-reports.md](references/recurring-reports.md)).
|
|
273
325
|
|
|
274
326
|
## 7. Hard rules
|
|
275
327
|
|
|
276
|
-
- **Never ask for their n8n API key.** Unreachable =
|
|
277
|
-
route to settings or reconnect.
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
- **
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
328
|
+
- **Never ask for their n8n API key, or their n8n MCP key.** Unreachable =
|
|
329
|
+
consent/scope/plan: route to settings or reconnect. The MCP key goes into
|
|
330
|
+
their own `claude mcp add` command, never into the chat.
|
|
331
|
+
- **Explicit approval gates:** before creating a workflow (design
|
|
332
|
+
confirmation), publishing, changing a live workflow, deleting anything
|
|
333
|
+
(workflows or rows), installing or rolling back a template, and any test
|
|
334
|
+
with non-email side effects (CRM writes, payments: STOP and ask).
|
|
335
|
+
- **Agency-deployed workflows and their data tables are read-only.** The
|
|
336
|
+
hub enforces it for its own tools; honour it through the n8n server too.
|
|
337
|
+
Switch on/off only, on the user's say-so; every other change goes to
|
|
338
|
+
Awesomate support.
|
|
339
|
+
- **Never activate a copy of a live workflow.** Change the live one on its
|
|
340
|
+
own id (§4).
|
|
341
|
+
- **`saveExecutionProgress` stays false.** Nothing enforces it for you any
|
|
342
|
+
more: set it false on every workflow you write and never switch it on to
|
|
343
|
+
get richer debug data (`debug: true` on executions is the inspection
|
|
344
|
+
path).
|
|
345
|
+
- **Real side effects run in tests:** the user's own email, `[TEST]`
|
|
346
|
+
prefixes, tell them first.
|
|
290
347
|
- **WordPress forms:** POST server-side from WP to the webhook (forwarder
|
|
291
|
-
snippet
|
|
348
|
+
snippet, [wp-form-handler.md](references/wp-form-handler.md)), never
|
|
292
349
|
from the browser.
|
|
@@ -8,7 +8,8 @@ triggers.
|
|
|
8
8
|
## Pass criteria
|
|
9
9
|
|
|
10
10
|
1. The right primitive: the build uses `awesomate_n8n_agents` (an n8n Agent),
|
|
11
|
-
not a workflow with a Chat Trigger + AI Agent node
|
|
11
|
+
not a workflow with a Chat Trigger + AI Agent node written through the n8n
|
|
12
|
+
MCP server.
|
|
12
13
|
2. Setup is checked first: `awesomate_n8n_agents {action:"status"}` is called
|
|
13
14
|
before any `create_agent`. If it reports `keyConfigured:false` or a setup
|
|
14
15
|
code, the assistant relays the setup steps in plain words and does NOT ask
|
|
@@ -127,14 +127,16 @@ n8n's chat widget can embed the agent on any site. chatTrigger config:
|
|
|
127
127
|
- CORS `allowedOrigins`: no trailing slashes, no spaces after commas.
|
|
128
128
|
- No structured output parser on the final agent (see above).
|
|
129
129
|
|
|
130
|
-
## Test and
|
|
131
|
-
|
|
132
|
-
- E2E =
|
|
133
|
-
|
|
134
|
-
then `awesomate_n8n_executions {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
-
|
|
130
|
+
## Test and publish
|
|
131
|
+
|
|
132
|
+
- E2E = publish + production webhook + poll executions. Publish through the
|
|
133
|
+
n8n MCP server, fire the production webhook (or the n8n server's execute
|
|
134
|
+
tool), then `awesomate_n8n_executions {workflowId}` to find the run and
|
|
135
|
+
`awesomate_n8n_executions {executionId, debug: true}` for node-by-node
|
|
136
|
+
detail.
|
|
137
|
+
- A change to a live agent workflow goes onto its own id (SKILL.md §4); a
|
|
138
|
+
copy mints new webhookIds.
|
|
139
|
+
- `saveExecutionProgress` stays FALSE (set it yourself; quadratic-write
|
|
138
140
|
incident). Agent/tool loops around `splitInBatches` need an
|
|
139
141
|
`executionTimeout`.
|
|
140
142
|
- Agent + chat workflows also run their published version — republish after
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
# Datatables
|
|
1
|
+
# Datatables: client-side playbook
|
|
2
2
|
|
|
3
3
|
n8n data tables: small operational stores a workflow reads/writes at runtime.
|
|
4
4
|
Read with `awesomate_n8n_inspect {what: "datatables"}` (tables, columns, row
|
|
5
|
-
counts).
|
|
5
|
+
counts, rows). Tables are created and edited in n8n itself: the user opens
|
|
6
|
+
**Data tables** in their n8n's left menu, or Claude creates one through the
|
|
7
|
+
n8n MCP server when that server offers a data-table tool. No Awesomate tool
|
|
8
|
+
creates or writes a table.
|
|
6
9
|
|
|
7
10
|
## Right store or wrong store
|
|
8
11
|
|
|
@@ -12,94 +15,71 @@ counts). Write with `awesomate_n8n_datatable_write` (Support Plus+ plans only).
|
|
|
12
15
|
| Task queue / retry list a workflow drains | Datatable |
|
|
13
16
|
| Lookup map (SKU→label, email→owner) | Datatable |
|
|
14
17
|
| Cursor/state between runs (last-synced timestamp) | Datatable |
|
|
15
|
-
| Real app data (users, orders, content) | The app's own database
|
|
18
|
+
| Real app data (users, orders, content) | The app's own database, never a datatable |
|
|
16
19
|
| Analytics, event history, anything unbounded | External store (app DB, sheet, warehouse) |
|
|
17
20
|
|
|
18
21
|
Rule of thumb: bounded row count, flat rows, no joins, consumed by the
|
|
19
|
-
automation itself.
|
|
20
|
-
creates have a daily plan quota (`quota_exceeded` — limits in
|
|
21
|
-
`awesomate_n8n_context`).
|
|
22
|
+
automation itself. n8n caps an instance at 50 tables.
|
|
22
23
|
|
|
23
|
-
## Creating
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
awesomate_n8n_datatable_write {action: "create", name, columns: [{name, type?}], workflowId}
|
|
27
|
-
```
|
|
24
|
+
## Creating: same project as the workflow
|
|
28
25
|
|
|
29
26
|
- **Datatables resolve PER PROJECT at runtime.** A workflow in project A
|
|
30
27
|
referencing a table in project B fails on every run with
|
|
31
|
-
`Could not find the data table: '<id>'`
|
|
28
|
+
`Could not find the data table: '<id>'` while the table, its columns, and
|
|
32
29
|
permissions are all perfectly intact. When the id matches and structure
|
|
33
30
|
looks fine, the project link is what's broken.
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
`
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
## Writes only touch self-created tables
|
|
62
|
-
|
|
63
|
-
`insert` / `update` / `delete_rows` / `add_column` work only on tables created
|
|
64
|
-
through Claude Code. Anything else → `403 not_self_created` — including tables
|
|
65
|
-
provisioned by Awesomate template deploys. Those belong to managed
|
|
66
|
-
automations; do not work around the refusal. Reads are unrestricted:
|
|
67
|
-
`awesomate_n8n_inspect` lists every table.
|
|
68
|
-
|
|
69
|
-
## Row operations
|
|
70
|
-
|
|
71
|
-
| action | Requires | Notes |
|
|
72
|
-
|---|---|---|
|
|
73
|
-
| `insert` | `rows`: 1–100 objects | Chunk larger batches |
|
|
74
|
-
| `update` | non-empty `filter` + `data` object | `data` is one object, not an array |
|
|
75
|
-
| `delete_rows` | non-empty `filter` — REQUIRED | There is deliberately no delete-all. To empty a table, delete by filter or recreate it |
|
|
31
|
+
- So the table is created **inside the project that owns the workflow**
|
|
32
|
+
(on a single-user instance that is the owner's personal project; check
|
|
33
|
+
`awesomate_n8n_workflows` for which project a workflow sits in). Tell the
|
|
34
|
+
user which project to be in when they create it, and read it back with
|
|
35
|
+
`awesomate_n8n_inspect` to confirm before the workflow references it.
|
|
36
|
+
- Design the full column set up front: n8n's REST API cannot alter a table,
|
|
37
|
+
so a column added later means the user does it in n8n's Data tables UI or
|
|
38
|
+
the table is recreated. Column `type`: `string` | `number` | `boolean` |
|
|
39
|
+
`date` (default `string`). Column names: letters/digits/underscores,
|
|
40
|
+
starting with a letter, no spaces (n8n's row API references columns bare,
|
|
41
|
+
so a spaced name is unwritable even though PG would accept it).
|
|
42
|
+
- Reference tables **by name** in the Data table node, never by id: a
|
|
43
|
+
rebuilt table keeps its name and gets a new id.
|
|
44
|
+
- Walk the user through it in their words: "open Data tables, click Add,
|
|
45
|
+
name it `sent_invoices`, add these three columns, done". Then confirm with
|
|
46
|
+
`awesomate_n8n_inspect {what: "datatables"}`.
|
|
47
|
+
|
|
48
|
+
## Rows
|
|
49
|
+
|
|
50
|
+
Rows are written by the workflow itself (Data table node: insert, update,
|
|
51
|
+
delete with a filter) and read back with `awesomate_n8n_inspect`. To put
|
|
52
|
+
seed rows in by hand, the user pastes them in n8n's Data tables UI. There is
|
|
53
|
+
no delete-all; to empty a table, delete by filter or recreate it.
|
|
54
|
+
|
|
55
|
+
Tables that arrived with an Awesomate template belong to that managed
|
|
56
|
+
automation: read them freely, never change their schema or rows.
|
|
76
57
|
|
|
77
58
|
## The dedupe gate pattern (rowNotExists)
|
|
78
59
|
|
|
79
|
-
Insert-if-absent as a barrier before side effects
|
|
80
|
-
datatable exists in a client workflow
|
|
60
|
+
Insert-if-absent as a barrier before side effects: the main reason a
|
|
61
|
+
datatable exists in a client workflow.
|
|
81
62
|
|
|
82
63
|
1. Table with one key column (e.g. `event_id` string) plus any audit columns.
|
|
83
64
|
2. In the workflow, BEFORE the side effect (email, API call, charge): Data
|
|
84
|
-
table node with the **row-does-not-exist** operation matching the key
|
|
85
|
-
|
|
65
|
+
table node with the **row-does-not-exist** operation matching the key.
|
|
66
|
+
Only unseen items pass.
|
|
86
67
|
3. Insert the key immediately after the gate, BEFORE the side effect.
|
|
87
68
|
Insert-first gives at-most-once (right for emails and charges);
|
|
88
69
|
insert-after gives at-least-once (duplicates on crash/retry).
|
|
89
|
-
4. The gate and insert are separate node steps, not a transaction
|
|
70
|
+
4. The gate and insert are separate node steps, not a transaction: a webhook
|
|
90
71
|
delivered twice in the same instant can pass both. Acceptable for dedupe;
|
|
91
72
|
not a locking primitive.
|
|
92
73
|
|
|
93
74
|
Queue-drain workflows (`splitInBatches` over a table) need `executionTimeout`
|
|
94
|
-
set, and `saveExecutionProgress` stays FALSE
|
|
75
|
+
set, and `saveExecutionProgress` stays FALSE. Both are platform invariants
|
|
76
|
+
you keep yourself.
|
|
95
77
|
|
|
96
78
|
## Failure decode
|
|
97
79
|
|
|
98
80
|
| Symptom | Meaning | Fix |
|
|
99
81
|
|---|---|---|
|
|
100
|
-
| `Could not find the data table: '<id>'` at runtime | Project scope, not existence | Recreate
|
|
101
|
-
|
|
|
102
|
-
|
|
|
103
|
-
|
|
|
104
|
-
| `429 datatable_cap_reached` / `quota_exceeded` | 50-table cap or daily create quota | Stop; reuse or delete tables, or wait for the daily reset |
|
|
105
|
-
| `501 datatables_unsupported` | Instance's n8n version predates data tables | No datatable path — use an external store |
|
|
82
|
+
| `Could not find the data table: '<id>'` at runtime | Project scope, not existence | Recreate the table inside the workflow's project; check `awesomate_n8n_inspect {what: "datatables"}` vs the workflow's project |
|
|
83
|
+
| Data table node cannot see a column | Column name has a space or starts with a digit | Rename it in n8n's Data tables UI |
|
|
84
|
+
| Table count stuck at 50 | n8n's per-instance cap | Reuse or delete tables |
|
|
85
|
+
| Data tables missing from n8n's menu | Instance's n8n version predates data tables | No datatable path; use an external store |
|