@awesomate/hosting-mcp 0.19.0 → 0.19.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 +78 -13
- package/package.json +1 -1
- package/skill/CHANGELOG.json +13 -0
- package/skill/awesomate-app-builder/SKILL.md +53 -3
- package/skill/awesomate-app-builder/references/stack-decision.md +36 -9
- package/skill/awesomate-app-builder/references/wp-migrate.md +4 -2
- package/skill/awesomate-credentials/SKILL.md +41 -4
- package/skill/awesomate-database/SKILL.md +60 -15
- package/skill/awesomate-github/SKILL.md +49 -8
- package/skill/awesomate-github/scripts/github-setup.mjs +4 -1
- package/skill/awesomate-hosting/SKILL.md +131 -20
- package/skill/awesomate-hosting/references/voice.md +1 -1
- package/skill/awesomate-knowledge/SKILL.md +14 -4
- package/skill/awesomate-n8n/SKILL.md +37 -11
- package/skill/awesomate-n8n/references/error-handling.md +3 -1
- package/skill/awesomate-n8n/references/platform-notes.md +3 -1
- package/skill/awesomate-n8n/references/recurring-reports.md +13 -6
- package/skill/awesomate-n8n/references/rest-fallback.md +7 -2
- package/skill/awesomate-n8n/references/troubleshooting.md +31 -1
- package/skill/awesomate-seo/SKILL.md +109 -20
- package/skill/awesomate-support/SKILL.md +59 -12
|
@@ -50,7 +50,10 @@ if (run('gh', ['auth', 'status']).status !== 0) {
|
|
|
50
50
|
|
|
51
51
|
// --- 1. .gitignore excludes .env ------------------------------------------
|
|
52
52
|
const giPath = join(cwd, '.gitignore');
|
|
53
|
-
|
|
53
|
+
// .awesomate/ is the secret-drop inbox — the credentials skill tells users it is
|
|
54
|
+
// ignored, and the SECRET_RE guard only catches known key SHAPES, so a database
|
|
55
|
+
// URL or bare token in there would otherwise be committable.
|
|
56
|
+
const needed = ['.env', '.env.local', '.awesomate/', '*.log', '.DS_Store', 'node_modules/'];
|
|
54
57
|
let gi = existsSync(giPath) ? readFileSync(giPath, 'utf8') : '';
|
|
55
58
|
const have = new Set(gi.split(/\r?\n/).map((l) => l.trim()));
|
|
56
59
|
const toAdd = needed.filter((n) => !have.has(n));
|
|
@@ -20,11 +20,15 @@ description: >
|
|
|
20
20
|
|
|
21
21
|
You are helping the user run their **Awesomate-hosted WordPress** through the
|
|
22
22
|
**Awesomate Hosting MCP** (tools prefixed `awesomate_`). For WordPress work,
|
|
23
|
-
use the tools you have: `awesomate_run_wp_cli` for
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
use the tools you have: `awesomate_run_wp_cli` for the allowlisted verbs
|
|
24
|
+
(plugin/theme list, activate, install-by-slug, update, cache flush, `option
|
|
25
|
+
get`, the `list` reads — §0a has the full gate and its gaps);
|
|
26
|
+
`awesomate_wp_settings` for title/tagline/timezone and other core settings;
|
|
27
|
+
`awesomate_wp_post` for creating/updating posts and pages (drafts by
|
|
28
|
+
default); `awesomate_wp_media_import` for pulling media in by URL. For
|
|
29
|
+
anything beyond those — visual page-builder edits, theme design work, core
|
|
30
|
+
updates, user management — point the user at their WP admin (1-click SSO
|
|
31
|
+
link) rather than improvising.
|
|
28
32
|
|
|
29
33
|
## 0. First run — orient before acting
|
|
30
34
|
|
|
@@ -45,21 +49,45 @@ once (plus `awesomate_get_limits` before any create/change) and cache:
|
|
|
45
49
|
**hub.awesomate.ai/sites → Connect Claude Code** to refresh the token.
|
|
46
50
|
- **`skill.updateAvailable`** — covers all nine skills; the local files are
|
|
47
51
|
older than the MCP server. Mention it ONCE per session, with the what's-new
|
|
48
|
-
line the context includes, and offer to run `awesomate_skill_update`.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
line the context includes, and offer to run `awesomate_skill_update`. Its
|
|
53
|
+
response carries `restart.instruction` — the ONE step for THIS user's
|
|
54
|
+
surface, detected from the session itself (terminal / VS Code / desktop
|
|
55
|
+
app). Relay that line verbatim. Never read out a menu of surfaces: a
|
|
56
|
+
Windows desktop-app user told to "type `exit`" is being given a step that
|
|
57
|
+
does not exist for them. If the response includes `restart.note2` (the
|
|
58
|
+
surface could not be detected), ask the user how they run Claude Code
|
|
59
|
+
rather than guessing steps. Never raise the update mid-task, never nag
|
|
60
|
+
twice in a session. If `serverVersion` is still older than
|
|
61
|
+
`latestMcpVersion` after a restart, the npx cache is stale — the remedy is
|
|
53
62
|
`rm -rf ~/.npm/_npx`, then restart again.
|
|
54
63
|
- **`cpanel`** routing (host/user), present once hosting is provisioned.
|
|
55
64
|
|
|
56
65
|
If `awesomate_get_context` fails with a connectivity error, it's the user's
|
|
57
66
|
network or the API base — not an auth problem; say so.
|
|
58
67
|
|
|
68
|
+
### Hosting not set up yet (the most likely day-one state)
|
|
69
|
+
|
|
70
|
+
If `awesomate_get_context` returns **`provisioned: false`**, or the hosting
|
|
71
|
+
tools 404 with `"No hosting account"`, this account has a connection but no
|
|
72
|
+
hosting yet. Nothing else in this skill works until that changes, and
|
|
73
|
+
**there is no MCP tool that provisions hosting** — don't hunt for one, and
|
|
74
|
+
don't retry the 404.
|
|
75
|
+
|
|
76
|
+
Say it plainly and send them to the one place it happens: *"Your Awesomate
|
|
77
|
+
account isn't hosting a site yet. Set that up at hub.awesomate.ai/sites —
|
|
78
|
+
takes a couple of minutes — then come back and I can work on it."* Then
|
|
79
|
+
stop; offer the n8n / app-builder / SEO work that doesn't need hosting
|
|
80
|
+
instead of stalling on it.
|
|
81
|
+
|
|
82
|
+
Read `references/voice.md` before writing to the user — most people here
|
|
83
|
+
are business owners, not developers, and that file is the tone this skill
|
|
84
|
+
is written in.
|
|
85
|
+
|
|
59
86
|
References: `references/multi-account.md` (profiles, pins, resolution order,
|
|
60
87
|
wrong account) · `references/connect-troubleshooting.md` (bootstrap, sandbox/
|
|
61
88
|
proxy failures, resuming a connect, support report) ·
|
|
62
|
-
`references/rest-fallback.md` (no `awesomate_*` tools — serve over REST)
|
|
89
|
+
`references/rest-fallback.md` (no `awesomate_*` tools — serve over REST) ·
|
|
90
|
+
`references/voice.md` (how to talk to a non-technical owner).
|
|
63
91
|
|
|
64
92
|
## 0a. Tool map — reach for it when
|
|
65
93
|
|
|
@@ -69,6 +97,8 @@ proxy failures, resuming a connect, support report) ·
|
|
|
69
97
|
| `awesomate_get_context` | Session start — plan, capabilities, PAT expiry, `attention`, skill updates |
|
|
70
98
|
| `awesomate_get_limits` | Before any create/change — live plan limits + workflow/AI-editor credit balances |
|
|
71
99
|
| `awesomate_get_plan_features` | The live plan ladder, so upgrade talk is accurate |
|
|
100
|
+
| `awesomate_get_hosting_status` | Is hosting provisioned at all — eligible/provisioned flags, in-progress step, primary domain, DNS targets. Check before suggesting any site action |
|
|
101
|
+
| `awesomate_get_hosting_account` | cPanel account details: package, server, provisioned-at, masked username |
|
|
72
102
|
| `awesomate_list_sites` | What WordPress sites exist on this account |
|
|
73
103
|
| `awesomate_site_create` | Spin up a new WordPress site (check limits first) |
|
|
74
104
|
| `awesomate_list_domains` | What domains are attached, and to which site |
|
|
@@ -79,11 +109,12 @@ proxy failures, resuming a connect, support report) ·
|
|
|
79
109
|
| `awesomate_list_snapshots` | What restore points a site has |
|
|
80
110
|
| `awesomate_rollback_site` | Restore a snapshot after something went wrong (confirm first) |
|
|
81
111
|
| `awesomate_site_staging_create` / `_promote` / `_discard` | Private full copy on awesomate.dev to review changes; publish or throw away (§5a) |
|
|
82
|
-
| `awesomate_run_wp_cli` |
|
|
112
|
+
| `awesomate_run_wp_cli` | The 10 allowlisted WP-CLI verbs only (see below) — plugin/theme list, activate, install-by-slug, update; `cache flush`; `option get`; `post`/`media`/`menu`/`comment`/`user list` |
|
|
113
|
+
| `awesomate_wp_settings` | Site title, tagline, timezone, date/time format, posts-per-page, search-engine visibility — THE path for any multi-word value, and it flushes the cache (Support Plus+) |
|
|
83
114
|
| `awesomate_wp_post` | Create/update/read a WP post or page — drafts by default (writes are Support Plus+) |
|
|
84
115
|
| `awesomate_wp_media_import` | Pull an image/file into the WP media library from an https URL (Support Plus+) |
|
|
85
116
|
| `awesomate_uninstall_site` | Remove a WordPress install (destructive — confirm explicitly) |
|
|
86
|
-
| `awesomate_privacy_settings` | Read which privacy/consent toggles are on — explain a 403 `consent_required` precisely (the user flips toggles themselves at hub.awesomate.ai/settings
|
|
117
|
+
| `awesomate_privacy_settings` | Read which privacy/consent toggles are on — explain a 403 `consent_required` precisely (the user flips toggles themselves under n8n → Settings → Privacy at hub.awesomate.ai/n8n/settings) |
|
|
87
118
|
| `awesomate_notifications` | The hub notification bell — `list` unread (quota warnings, quote ready, support-access events), `read`/`read_all` to clear |
|
|
88
119
|
| `awesomate_dashboard_metrics` | Account-wide numbers: executions by status, error rate, time saved, chat sessions, 7-day trend |
|
|
89
120
|
| `awesomate_account_report` | A monthly-report-shaped read: working / not working / engagement / commercials |
|
|
@@ -91,6 +122,36 @@ proxy failures, resuming a connect, support report) ·
|
|
|
91
122
|
| `awesomate_support` | Raise a support ticket / reach a human |
|
|
92
123
|
| `awesomate_request_build` | Request a done-for-you build (spends a credit — confirm first) |
|
|
93
124
|
|
|
125
|
+
### What WP-CLI CANNOT do from here
|
|
126
|
+
|
|
127
|
+
`awesomate_run_wp_cli` is not a WP-CLI passthrough. Ten verbs are allowed,
|
|
128
|
+
each with its own predicate; everything else returns **400
|
|
129
|
+
`wp_cli_not_allowed`**. Know the gaps before you promise anything:
|
|
130
|
+
|
|
131
|
+
- **`user` allows `list` only.** No password reset, no adding or removing
|
|
132
|
+
users, no changing the admin email, no role changes. A locked-out user
|
|
133
|
+
goes through the 1-click WP-admin SSO link or cPanel, not through you.
|
|
134
|
+
- **`core` allows `version` and `check-update` only.** **There is no way to
|
|
135
|
+
update WordPress core from Claude.** You can tell them an update is
|
|
136
|
+
waiting; they apply it in wp-admin. (Plugins and themes DO have `update`.)
|
|
137
|
+
- **No `search-replace`, no `db` anything, no `plugin delete` /
|
|
138
|
+
`theme delete`, no `option delete`.** Changing a site's URL, resetting or
|
|
139
|
+
dumping the database, and removing a plugin outright all happen in
|
|
140
|
+
wp-admin, over SSH (`scripts/ssh-connect.sh`, Support Plus+), or via the
|
|
141
|
+
hub — never as a tool call.
|
|
142
|
+
- **`option update` is a 10-option allowlist** (blogname, blogdescription,
|
|
143
|
+
timezone_string, date_format, time_format, start_of_week, posts_per_page,
|
|
144
|
+
blog_public, default_comment_status, default_ping_status) — and use
|
|
145
|
+
`awesomate_wp_settings` for those anyway.
|
|
146
|
+
- **Arguments cannot contain spaces** (letters, digits and `-_./=:@+,`
|
|
147
|
+
only). The remote shell re-parses them, so the gate refuses anything
|
|
148
|
+
quoted. Any multi-word value — a business name, a tagline, post content —
|
|
149
|
+
is impossible here: `awesomate_wp_settings` or `awesomate_wp_post`.
|
|
150
|
+
- **Installs take wp.org slugs only** — never a URL or a zip.
|
|
151
|
+
|
|
152
|
+
A 400 is a policy answer, not a transport hiccup: don't rephrase and retry.
|
|
153
|
+
(A 502 `wp_cli_unavailable` IS transient — that one you can retry.)
|
|
154
|
+
|
|
94
155
|
## 1. The plan model (so your nudges are accurate)
|
|
95
156
|
|
|
96
157
|
| Plan | WP sites | Hosted apps | Custom domains | Shell / Claude Code | Notes |
|
|
@@ -121,6 +182,19 @@ Never attempt SSH, WP-CLI, snapshot/rollback, staging, deploy, multi-site —
|
|
|
121
182
|
those tools will 403. Instead, surface the specific limit and what
|
|
122
183
|
Support Plus/Pro unlocks (§4), and link the hub billing page.
|
|
123
184
|
|
|
185
|
+
**The plan table's "1 site / 1 custom domain" is not a Claude allowance.**
|
|
186
|
+
On Essentials, a PAT is read-and-advise: `awesomate_site_create`,
|
|
187
|
+
`awesomate_domain_add` and every WordPress write (`awesomate_wp_post`,
|
|
188
|
+
`awesomate_wp_media_import`, `awesomate_wp_settings`,
|
|
189
|
+
`awesomate_run_wp_cli`) return **403 `upgrade_required`** — the server
|
|
190
|
+
enforces it, so no phrasing gets past it. That site and that domain are
|
|
191
|
+
real; they are created and changed **in the hub UI at
|
|
192
|
+
hub.awesomate.ai/sites**, by the user, with deliberate clicks. Say exactly
|
|
193
|
+
that rather than letting them discover it as a failure: *"Your plan lets me
|
|
194
|
+
read and advise on your hosting. Creating the site itself is a couple of
|
|
195
|
+
clicks at hub.awesomate.ai/sites — I'll walk you through it — or Support
|
|
196
|
+
Plus lets me do it from here."*
|
|
197
|
+
|
|
124
198
|
### Support Plus and above (shell) — full workflow
|
|
125
199
|
|
|
126
200
|
You additionally have: jailed SSH to the client's own cPanel account, WP-CLI
|
|
@@ -137,9 +211,13 @@ at it. Their dev copy is invisible to Google and AI crawlers by policy.
|
|
|
137
211
|
|
|
138
212
|
## 3. Safety rules (non-negotiable)
|
|
139
213
|
|
|
140
|
-
- **Before ANY change to a live site** — plugin/theme
|
|
141
|
-
|
|
142
|
-
`snapshotId`. If it goes wrong,
|
|
214
|
+
- **Before ANY change to a live site** — a plugin/theme update, a settings
|
|
215
|
+
change, a content write, a deploy — call **`awesomate_snapshot_site`**
|
|
216
|
+
first and tell the user the `snapshotId`. If it goes wrong,
|
|
217
|
+
`awesomate_rollback_site` restores files + DB. Snapshot first too when the
|
|
218
|
+
USER is about to do something heavy themselves in wp-admin or over SSH (a
|
|
219
|
+
URL change / `search-replace`, a core update, a database import): you
|
|
220
|
+
can't run those, but you can hand them a restore point before they start.
|
|
143
221
|
- **WP content writes are snapshot-first and drafts-first.** Before the FIRST
|
|
144
222
|
content write of a session on a live site (an `awesomate_wp_post` write, a
|
|
145
223
|
content-touching WP-CLI command), take one `awesomate_snapshot_site`.
|
|
@@ -148,12 +226,38 @@ at it. Their dev copy is invisible to Google and AI crawlers by policy.
|
|
|
148
226
|
to publish.
|
|
149
227
|
- **Confirm before destructive actions** — `awesomate_rollback_site`,
|
|
150
228
|
`awesomate_site_staging_promote` (replaces live), `_site_staging_discard`
|
|
151
|
-
(loses unpublished staging work),
|
|
152
|
-
|
|
229
|
+
(loses unpublished staging work), deleting content. State exactly what
|
|
230
|
+
will be lost and wait for an explicit "yes". The same care applies when
|
|
231
|
+
you're TALKING someone through a destructive step you cannot run for them
|
|
232
|
+
(dropping tables, `wp db reset`, deleting a plugin) — snapshot first, spell
|
|
233
|
+
out what it destroys, and let them run it.
|
|
153
234
|
- **Site deletion has no MCP tool.** The user deletes sites themselves at
|
|
154
235
|
**hub.awesomate.ai** — deep-link them there; never script around it.
|
|
155
236
|
- Prefer building/testing in **WordPress Studio locally**, then deploy (§5).
|
|
156
|
-
-
|
|
237
|
+
- Read before you write: `option get`, `plugin list`, `theme list` cost
|
|
238
|
+
nothing and tell you what the current state actually is.
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
### Changing site title, tagline and other WordPress settings
|
|
242
|
+
|
|
243
|
+
Use **`awesomate_wp_settings`** (domain + any of: title, tagline, timezone,
|
|
244
|
+
dateFormat, timeFormat, postsPerPage, searchEngineVisible). It flushes the
|
|
245
|
+
object cache for you, so the change actually shows on the live site.
|
|
246
|
+
|
|
247
|
+
**Do not reach for `awesomate_run_wp_cli` for these.** Its arguments cannot
|
|
248
|
+
contain spaces — the transport re-parses them on the remote shell, so the
|
|
249
|
+
charset gate refuses anything with a space. `option update blogname "Care
|
|
250
|
+
Connect AI"` will always be rejected there, and a business name is multi-word
|
|
251
|
+
by definition. Same rule for post and page content: that is `awesomate_wp_post`.
|
|
252
|
+
|
|
253
|
+
`awesomate_run_wp_cli` remains right for space-free operations: plugin/theme
|
|
254
|
+
list, activate, install by slug, `option get`, `cache flush`, listing posts,
|
|
255
|
+
media, users and comments.
|
|
256
|
+
|
|
257
|
+
Snapshot before the session's first change to a live site
|
|
258
|
+
(`awesomate_snapshot_site`), and tell the user the snapshot id so they know
|
|
259
|
+
rollback exists. `searchEngineVisible: false` de-indexes the site — always
|
|
260
|
+
confirm that one explicitly before setting it.
|
|
157
261
|
|
|
158
262
|
## 4. Limits & upgrade etiquette
|
|
159
263
|
|
|
@@ -198,7 +302,14 @@ AI crawlers — anyone with the link can view, perfect for client review).
|
|
|
198
302
|
|
|
199
303
|
- `awesomate_site_staging_create <live domain>` — clones files + DB, rewrites
|
|
200
304
|
URLs. One staging copy per site (409 `staging_exists` → promote or discard
|
|
201
|
-
first). Takes a few minutes on large sites.
|
|
305
|
+
first). Takes a few minutes on large sites. On an account whose primary
|
|
306
|
+
site this is, the copy lands at `staging.{slug}.awesomate.dev`; a second
|
|
307
|
+
site keeps its own first label.
|
|
308
|
+
- **A 409 `no_dev_domain` is not your mistake.** Some accounts have no
|
|
309
|
+
awesomate.dev address on file yet, and staging needs one. The message says
|
|
310
|
+
so: relay it and offer to raise it with support (`awesomate_support`) —
|
|
311
|
+
there is no tool that adds the dev address, so don't retry or improvise a
|
|
312
|
+
staging copy on a live domain.
|
|
202
313
|
- Make the changes ON the staging domain (WP-CLI / wp-admin / deploy.sh with
|
|
203
314
|
`--domain <staging domain>`), send the user the staging URL to review.
|
|
204
315
|
- `awesomate_site_staging_promote <live domain>` — publishes staging over live.
|
|
@@ -45,7 +45,7 @@ doubt: outcome first, cost before spend, one question at a time.
|
|
|
45
45
|
9. **Confirm names and anything hard to undo before acting.** App names
|
|
46
46
|
become web addresses; deletes are forever.
|
|
47
47
|
Bad: "Created app xk9-test-2."
|
|
48
|
-
Good: "I'll call it 'bookings' — that becomes bookings.acme.awesomate.
|
|
48
|
+
Good: "I'll call it 'bookings' — that becomes bookings.acme.awesomate.app.
|
|
49
49
|
OK?"
|
|
50
50
|
|
|
51
51
|
10. **When something fails, say what you're doing about it.** Never paste a
|
|
@@ -30,10 +30,17 @@ platform's answer beats anything you remember.
|
|
|
30
30
|
- `upgrade_required: true` → relay the included upsell copy + billing
|
|
31
31
|
link once, honestly, then help within what reads allow. Never retry
|
|
32
32
|
into the gate.
|
|
33
|
-
- `consent.knowledge_platform_enabled: false` → the user must
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
- `consent.knowledge_platform_enabled: false` → the user must turn it on
|
|
34
|
+
themselves: hub.awesomate.ai/n8n/settings, under the heading
|
|
35
|
+
**"Knowledge Base"**, the toggle **"Send My Content to the Knowledge
|
|
36
|
+
Platform"**. Name it exactly like that — one heading and one switch, so
|
|
37
|
+
they can find it without hunting. You cannot flip it for them, and
|
|
38
|
+
there is no tool that can. If you're unsure which toggle is blocking
|
|
39
|
+
(or a knowledge call 403s), call `awesomate_privacy_settings` — it
|
|
40
|
+
reads which consents are on or off and names the one that's stopping
|
|
41
|
+
you. Explain what it consents to (their selected content is indexed in
|
|
42
|
+
Sydney, kept isolated to their account, deletable any time; turning it
|
|
43
|
+
off suspends the Knowledge Base immediately), wait, re-check.
|
|
37
44
|
- `tenant: null` or `status: 'provisioning'` → not enabled yet /
|
|
38
45
|
still building; `usage` → month-to-date vs `usage.included` quota.
|
|
39
46
|
3. Only then design: what content exists, what's already ingested, what the
|
|
@@ -110,6 +117,9 @@ enough to route through explicit REST calls the user has just approved.
|
|
|
110
117
|
| Action | Endpoint |
|
|
111
118
|
|---|---|
|
|
112
119
|
| Status / provision / sources / jobs / agent / ask | `GET\|POST /api/knowledge/{status,provision,sources,jobs,agent,chat}` (tool equivalents) |
|
|
120
|
+
| Faceted search (what `awesomate_knowledge_search` calls) | `GET /api/knowledge/explore?q=…` + the same facet params |
|
|
121
|
+
| Business-data warehouse (what `awesomate_knowledge_data` calls) | `GET /api/knowledge/data/{metrics,datasets,datasets/:id,imports,imports/:id}` · `PATCH /api/knowledge/data/datasets/:id` · `POST /api/knowledge/data/imports/:id/:action` · `POST /api/knowledge/data/query` (read-only SQL) |
|
|
122
|
+
| Agent builder (what `awesomate_knowledge_agents` calls) | `GET\|POST /api/knowledge/agents` · `GET\|PATCH\|DELETE /api/knowledge/agents/:agent_id` · `POST /api/knowledge/agents/:agent_id/{publish,suspend,resume}` |
|
|
113
123
|
| Entity layer probe (`available` false = not enabled yet, stop) | `GET /api/knowledge/entities` |
|
|
114
124
|
| People list / detail | `GET /api/knowledge/people?status=named\|unknown\|hidden\|all` · `GET /api/knowledge/people/:id` |
|
|
115
125
|
| Name or hide/unhide a person (after approval) | `PATCH /api/knowledge/people/:id` `{display_name}` or `{status: "hidden"\|"unknown"}` |
|
|
@@ -28,8 +28,11 @@ as outcomes ("your form now emails you") with URLs.
|
|
|
28
28
|
resolves to. Wrong slug → stop and fix the pin/connection first. Every
|
|
29
29
|
tool response is stamped `account: <slug>` — watch it.
|
|
30
30
|
2. `awesomate_n8n_context` — cache the result:
|
|
31
|
-
- `consented: false` → give the user the `settingsUrl`
|
|
32
|
-
|
|
31
|
+
- `consented: false` → give the user the `settingsUrl` and tell them
|
|
32
|
+
where it lands: **n8n → Settings → Privacy** at
|
|
33
|
+
`hub.awesomate.ai/n8n/settings` → "Allow Claude Code to Build n8n
|
|
34
|
+
Workflows". Privacy moved there; the plain `/settings` page no longer
|
|
35
|
+
has it (old `?tab=privacy` links just redirect). Wait, then re-check.
|
|
33
36
|
- `403 missingScopes` → token predates n8n support — reconnect from
|
|
34
37
|
hub.awesomate.ai/sites (Connect Claude Code card).
|
|
35
38
|
- `capabilities.builder: false` → reads only; building is Support Plus+.
|
|
@@ -52,12 +55,22 @@ conflicts with anything under `references/vendor/`, platform-notes wins.
|
|
|
52
55
|
## 0a. Health sweep — the guardian pattern
|
|
53
56
|
|
|
54
57
|
At the START of any n8n session, alongside the context call: run
|
|
55
|
-
`awesomate_n8n_errors`
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
`awesomate_n8n_errors` **with `days: 7`** and `awesomate_n8n_kpis` once. The
|
|
59
|
+
`days` parameter is not optional in practice — the tool defaults to **30**,
|
|
60
|
+
so omitting it sweeps a month and dresses old, already-fixed failures up as
|
|
61
|
+
this week's news. If something is failing, surface it in ONE line in the
|
|
62
|
+
user's language — "two of your automations failed overnight — want me to
|
|
63
|
+
look?" — before proceeding with the asked task. If everything is green, say
|
|
64
|
+
nothing and get on with it. Never let the sweep hijack the session; the
|
|
65
|
+
user's ask comes first unless they say otherwise.
|
|
66
|
+
|
|
67
|
+
**Zeros on a new account are not a clean bill of health.** A brand-new
|
|
68
|
+
instance has no error history and no error-reporter workflow installed yet,
|
|
69
|
+
so the sweep returns empty for the same reason it would on a flawless one.
|
|
70
|
+
Check the inventory before you interpret it: no workflows, or workflows with
|
|
71
|
+
no executions, means *there is nothing here yet* — say that, plainly
|
|
72
|
+
("nothing has run yet, so there's nothing to report — want to build the
|
|
73
|
+
first one?"). Never let "no errors found" imply "everything is working".
|
|
61
74
|
|
|
62
75
|
When diagnosing, trust `errorSummary` only when `confident: true` (it then
|
|
63
76
|
also carries `errorType`, `code`, `lastNodeExecuted`). When `confident:
|
|
@@ -74,7 +87,8 @@ the named node actually exists in the workflow before editing anything.
|
|
|
74
87
|
| 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` |
|
|
75
88
|
| Instance-WIDE error events grouped by fingerprint (category, workflow, node, occurrences, first/last seen) — "what is broken across everything" | `awesomate_n8n_errors` |
|
|
76
89
|
| Execution/table/DB byte sizes + 24h per-workflow offenders ("your executions weigh 4GB") | `awesomate_n8n_storage` |
|
|
77
|
-
| AI error-analyzer findings: clientSummary, needsClientAction, fixReady (Pro/Embedded + the "AI
|
|
90
|
+
| AI error-analyzer findings: clientSummary, needsClientAction, fixReady (Pro/Embedded + the **"Enable AI Error Diagnosis"** toggle under n8n → Settings → Privacy; read-only) | `awesomate_n8n_findings` |
|
|
91
|
+
| 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` |
|
|
78
92
|
| Executions list / detail / node-by-node debug | `awesomate_n8n_executions` |
|
|
79
93
|
| Node schemas, node search, community templates, node-level validation | `awesomate_n8n_node_docs` |
|
|
80
94
|
| Validate / create draft / update draft / activate / promote / rollback / delete draft | `awesomate_n8n_deploy` |
|
|
@@ -117,8 +131,20 @@ criteria, error handling — in the user's words. Check the inventory FIRST:
|
|
|
117
131
|
reuse existing credentials, $vars, tables, workflows. Email decision tree:
|
|
118
132
|
existing Gmail/Google credential → reference its ID · none → offer an
|
|
119
133
|
API-key credential (SMTP / Resend / SendGrid — instant) OR guided Gmail
|
|
120
|
-
OAuth
|
|
121
|
-
|
|
134
|
+
OAuth. A credential existing ≠ working.
|
|
135
|
+
|
|
136
|
+
**Say the credential catch before they pick, not after it fails.** No tool
|
|
137
|
+
creates a credential on their instance — the one exception is
|
|
138
|
+
`awesomate_n8n_provision_pg`, which makes a Postgres one. Everything else,
|
|
139
|
+
API-key credentials included, the user creates in n8n at
|
|
140
|
+
`{instanceUrl}/home/credentials`; you then re-check the inventory to verify
|
|
141
|
+
it exists. **Gmail and any other OAuth credential can only ever be finished
|
|
142
|
+
in the browser** — the consent screen is Google's, so that branch always
|
|
143
|
+
ends with them, no matter what you try. Flag it while they're choosing:
|
|
144
|
+
*"Either way you'll paste it in on your n8n — an SMTP or Resend key is one
|
|
145
|
+
box and a minute; Gmail means clicking through Google's permission screen.
|
|
146
|
+
Tell me which and I'll give you the exact steps, then pick it up from
|
|
147
|
+
there."*
|
|
122
148
|
|
|
123
149
|
**Phase 2 — Design.** Resolve EVERY planned node and typeVersion via
|
|
124
150
|
`awesomate_n8n_node_docs` (search similar community templates too — a
|
|
@@ -81,7 +81,9 @@ reconnecting a credential), and `fixReady` (a fix exists). It is read-only:
|
|
|
81
81
|
use it to explain and prioritise, not as a substitute for your own diagnosis
|
|
82
82
|
of the execution data. On a 403, the plan or the toggle is the reason —
|
|
83
83
|
`awesomate_privacy_settings` (hosting skill) tells you which; the user flips
|
|
84
|
-
toggles themselves at
|
|
84
|
+
toggles themselves under **n8n → Settings → Privacy** at
|
|
85
|
+
hub.awesomate.ai/n8n/settings — the one for this tool is labelled
|
|
86
|
+
**"Enable AI Error Diagnosis"**.
|
|
85
87
|
|
|
86
88
|
## 5. What to do when you inherit a workflow with no plan
|
|
87
89
|
|
|
@@ -73,7 +73,9 @@ trust this file.
|
|
|
73
73
|
debug: true}` decodes an execution into per-node input/output and the
|
|
74
74
|
real error. Use it instead of guessing from the summary. It is gated on
|
|
75
75
|
the client's `error_content_analysis` privacy toggle (default OFF) — on
|
|
76
|
-
a consent refusal, ask the user to enable it
|
|
76
|
+
a consent refusal, ask the user to enable it under **n8n → Settings →
|
|
77
|
+
Privacy** at `hub.awesomate.ai/n8n/settings` (Privacy moved off the plain
|
|
78
|
+
`/settings` page; old `?tab=privacy` links redirect there);
|
|
77
79
|
never work around the gate.
|
|
78
80
|
|
|
79
81
|
## Credentials
|
|
@@ -11,8 +11,8 @@ the boundary between them.
|
|
|
11
11
|
## The boundary (read this before promising anything)
|
|
12
12
|
|
|
13
13
|
- **Hub metrics** — execution counts, error rates, time saved, site uptime,
|
|
14
|
-
knowledge usage — come from YOUR tools (`
|
|
15
|
-
`awesomate_n8n_errors`, `awesomate_site_uptime`,
|
|
14
|
+
knowledge usage — come from YOUR tools (`awesomate_dashboard_metrics`,
|
|
15
|
+
`awesomate_n8n_kpis`, `awesomate_n8n_errors`, `awesomate_site_uptime`,
|
|
16
16
|
`awesomate_knowledge_status`). Those tools authenticate with the user's
|
|
17
17
|
PAT on this machine. **A workflow inside their n8n cannot call them**, and
|
|
18
18
|
it can't query n8n's own execution database either.
|
|
@@ -29,10 +29,17 @@ hub metrics.
|
|
|
29
29
|
When the user asks "how's everything going?" or it's report time, assemble
|
|
30
30
|
it live:
|
|
31
31
|
|
|
32
|
-
1. `
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
1. `awesomate_dashboard_metrics` — **start here.** The account-wide aggregate
|
|
33
|
+
in one call: executions by status, error rate, time saved, workflows
|
|
34
|
+
total/active, chat sessions and unique users (30d), a 7-day daily trend,
|
|
35
|
+
and the most recent live-workflow failure. It is the single best source
|
|
36
|
+
for a status update or weekly report; the rest fill in around it.
|
|
37
|
+
2. `awesomate_n8n_kpis` — per-workflow detail and 7d-vs-prior deltas.
|
|
38
|
+
3. `awesomate_n8n_errors` with **`days: 7`** — anything broken, grouped. Pass
|
|
39
|
+
the days: the tool defaults to 30, which turns a weekly report into a
|
|
40
|
+
monthly one without saying so.
|
|
41
|
+
4. `awesomate_site_uptime` — per-domain availability and incidents.
|
|
42
|
+
5. `awesomate_knowledge_status` — usage vs quota, if they have a knowledge base.
|
|
36
43
|
|
|
37
44
|
Present it as a short plain-language summary — five lines, not a dashboard:
|
|
38
45
|
what ran, what it saved, what failed (and whether it's fixed), site status.
|
|
@@ -35,6 +35,10 @@ the conversation or logs.
|
|
|
35
35
|
| Possibilities brief | `GET /api/my-n8n/machine/possibilities` |
|
|
36
36
|
| Executions | `GET /api/my-n8n/workflows/:id/executions` · `GET /api/my-n8n/executions/:execId` |
|
|
37
37
|
| Node-by-node execution debug | `GET /api/my-n8n/machine/executions/:execId/debug` |
|
|
38
|
+
| Instance KPIs (the health sweep) | `GET /api/my-n8n/kpis` · per-workflow: `GET /api/my-n8n/workflows/:id/kpis` |
|
|
39
|
+
| Instance-wide error events, grouped | `GET /api/my-n8n/errors?days=7&limit=` — **pass `days`**, it defaults to 30 |
|
|
40
|
+
| Execution/table/DB byte sizes + 24h offenders | `GET /api/my-n8n/machine/storage` |
|
|
41
|
+
| AI error-analyzer findings (Pro/Embedded) | `GET /api/my-n8n/machine/findings?limit=` |
|
|
38
42
|
| Live node docs + community templates | `POST /api/my-n8n/machine/node-catalog/:tool` — tool ∈ search_nodes, get_node, search_templates, get_template, validate_node, tools_documentation; body = the tool's args (e.g. `{"query":"gmail"}`, `{"nodeType":"n8n-nodes-base.gmail"}`) |
|
|
39
43
|
|
|
40
44
|
## Writes (Support Plus+, consent + quotas + audit apply identically)
|
|
@@ -62,8 +66,9 @@ the conversation or logs.
|
|
|
62
66
|
- `429 quota_exceeded` → the plan's daily cap; stop, don't retry-loop.
|
|
63
67
|
- `503 node_catalog_unavailable` → use `references/vendor/` knowledge.
|
|
64
68
|
- `404` on a path in this table → check the path against this file
|
|
65
|
-
EXACTLY; do not probe variations
|
|
66
|
-
|
|
69
|
+
EXACTLY; do not probe variations. This table is the n8n surface the
|
|
70
|
+
`awesomate_n8n_*` tools wrap — if something is missing from it, the fix is
|
|
71
|
+
to add the verified path here, not to guess at one.
|
|
67
72
|
|
|
68
73
|
The skill's judgment (six-phase loop, approval gates, testing policy,
|
|
69
74
|
never-activate-a-copy) applies unchanged — only the transport differs.
|
|
@@ -3,6 +3,34 @@
|
|
|
3
3
|
Diagnosis playbook. Work the flow top-to-bottom; do not jump to fixes before
|
|
4
4
|
you have the failing execution's detail.
|
|
5
5
|
|
|
6
|
+
|
|
7
|
+
## "Could not create the draft" / writes fail while reads work
|
|
8
|
+
|
|
9
|
+
If reads, `awesomate_n8n_context` and `validate` all succeed but every WRITE
|
|
10
|
+
(create draft, activate, promote, test-fire) fails, the cause is almost always
|
|
11
|
+
the account's stored n8n API key — not the hub, not Cloudflare, not the
|
|
12
|
+
workflow JSON. Validation runs on Awesomate's side and never touches the
|
|
13
|
+
instance, which is exactly why it keeps passing.
|
|
14
|
+
|
|
15
|
+
The server says so explicitly: HTTP **409** with `code: n8n_credential_invalid`.
|
|
16
|
+
Older builds reported this as a 502, which reads like an outage — if you see a
|
|
17
|
+
bare 502 on writes only, suspect the key before you suspect the platform.
|
|
18
|
+
|
|
19
|
+
**Tell the user to do this, in this order:**
|
|
20
|
+
|
|
21
|
+
1. Open their n8n (the response's `instanceUrl`, e.g. `https://<slug>.awesomate.io`)
|
|
22
|
+
→ **Settings → n8n API** → **Create an API key**. Copy it.
|
|
23
|
+
2. Open **https://hub.awesomate.ai/n8n/settings** → paste it into
|
|
24
|
+
**"New n8n API Key"** → save. The status chip should go from
|
|
25
|
+
*Key rejected* to *Connected*.
|
|
26
|
+
3. Retry the action.
|
|
27
|
+
|
|
28
|
+
Do not retry before they confirm the new key is saved, and do not go probing
|
|
29
|
+
hub or Cloudflare status — a genuine hub problem breaks reads too.
|
|
30
|
+
|
|
31
|
+
Common causes: the key was revoked or regenerated in n8n, or the instance was
|
|
32
|
+
rebuilt (a rebuilt instance shows 0 workflows and invalidates every old key).
|
|
33
|
+
|
|
6
34
|
## Diagnosis flow
|
|
7
35
|
|
|
8
36
|
1. `awesomate_n8n_context` — confirm consent flags, capabilities, and the
|
|
@@ -21,7 +49,9 @@ you have the failing execution's detail.
|
|
|
21
49
|
5. `awesomate_n8n_executions {executionId, debug: true}` — node-level output
|
|
22
50
|
data. Requires `error_content_analysis` consent:
|
|
23
51
|
- `403 consent_required` → give the user the `settingsUrl` from the error
|
|
24
|
-
response and stop; they enable it under Settings → Privacy
|
|
52
|
+
response and stop; they enable it under **n8n → Settings → Privacy** at
|
|
53
|
+
`hub.awesomate.ai/n8n/settings` (the plain `/settings` page no longer
|
|
54
|
+
carries Privacy; old `?tab=privacy` links redirect there).
|
|
25
55
|
- `tooLarge: true` → payload over 15MB. Use the summary in the response;
|
|
26
56
|
do NOT retry hoping for the full payload.
|
|
27
57
|
6. Node behaving strangely rather than erroring → check its schema with
|