@awesomate/hosting-mcp 0.19.1 → 0.20.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/dist/index.js +234 -24
- package/package.json +2 -2
- package/skill/CHANGELOG.json +16 -2
- 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 +37 -4
- package/skill/awesomate-knowledge/references/from-your-files.md +121 -0
- package/skill/awesomate-knowledge/references/showing-media.md +59 -0
- 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 +3 -1
- package/skill/awesomate-seo/SKILL.md +109 -20
- package/skill/awesomate-support/SKILL.md +59 -12
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# From the user's own files to a live, answering agent
|
|
2
|
+
|
|
3
|
+
The end-to-end path when someone says "train this on my documents and put a
|
|
4
|
+
chat on my website". Every step below has a tool; none of it needs the hub UI
|
|
5
|
+
except buying an allowance pack and reading an agent's API key.
|
|
6
|
+
|
|
7
|
+
Do the steps in order. The one rule that matters: **never build on content you
|
|
8
|
+
have not verified is actually in there.** An agent published over a failed
|
|
9
|
+
ingest answers confidently from nothing.
|
|
10
|
+
|
|
11
|
+
## 1. Agree the file list, and what it will cost
|
|
12
|
+
|
|
13
|
+
Ingest spends real money against a monthly allowance. Before uploading
|
|
14
|
+
anything:
|
|
15
|
+
|
|
16
|
+
- `awesomate_knowledge_status` — plan, consent, and the month-to-date usage
|
|
17
|
+
against the included quota. If `upgrade_required`, relay it and stop.
|
|
18
|
+
- List the candidate files for the user and get an explicit yes on the set.
|
|
19
|
+
Say roughly what it will consume: documents bill as pages (~1 page per
|
|
20
|
+
100 KB), audio and video as media-hours.
|
|
21
|
+
- If the allowance is exhausted, a call returns `pack_required`: **nothing was
|
|
22
|
+
ingested and nothing was bought**. State the price (1 credit = $100) and let
|
|
23
|
+
them buy it in the hub. Never imply you purchased anything.
|
|
24
|
+
|
|
25
|
+
Media is far more expensive than documents. A folder of PDFs is cheap; three
|
|
26
|
+
hours of video is not. Say so before, not after.
|
|
27
|
+
|
|
28
|
+
## 2. Upload, one file at a time
|
|
29
|
+
|
|
30
|
+
`awesomate_knowledge_upload { path, title? }` — a LOCAL path on their machine.
|
|
31
|
+
The MCP server reads the file off disk and streams it to the hub, so the file
|
|
32
|
+
contents never pass through the conversation and a 100 MB PDF costs no context.
|
|
33
|
+
|
|
34
|
+
- One call per file. Report progress as you go; never loop silently through
|
|
35
|
+
twenty files.
|
|
36
|
+
- 100 MB per file. Bigger media goes through the hub at Knowledge → Sources.
|
|
37
|
+
- A folder path is rejected on purpose — list it, agree the files, then upload.
|
|
38
|
+
- Public URLs and whole sitemaps stay on `awesomate_knowledge_sources`
|
|
39
|
+
`{action:'add'}`. Use that for their website; use upload for their disk.
|
|
40
|
+
|
|
41
|
+
## 3. Wait for ingestion, and check it actually succeeded
|
|
42
|
+
|
|
43
|
+
`awesomate_knowledge_sources {action:'jobs'}` until the job reports
|
|
44
|
+
`succeeded`. Transcription of audio/video takes minutes, not seconds.
|
|
45
|
+
|
|
46
|
+
**The JOBS list is the authority on whether an upload worked — not
|
|
47
|
+
`failed_sources`, and not the source list.** A job that fails during document
|
|
48
|
+
processing never creates a source row, so `{action:'summary'}` still reports
|
|
49
|
+
`failed_sources: 0` and the library total is unchanged. Measured live on
|
|
50
|
+
2026-09-01: an upload failed with a platform error while summary read
|
|
51
|
+
`total: 75, failed_sources: 0`. If you check the summary instead of the job,
|
|
52
|
+
a failed ingest looks exactly like one that was never attempted.
|
|
53
|
+
|
|
54
|
+
So: read the job's `status` AND its `error`, and relay the error text to the
|
|
55
|
+
user. Two real ones seen in the wild, both platform-side configuration rather
|
|
56
|
+
than anything wrong with their file:
|
|
57
|
+
|
|
58
|
+
- `new row violates row-level security policy for table "documents"` —
|
|
59
|
+
document/markdown ingestion is not currently permitted for that tenant.
|
|
60
|
+
- `transcription_not_configured: DEEPGRAM_API_KEY is not set` — audio/video
|
|
61
|
+
cannot be transcribed on that deployment yet.
|
|
62
|
+
|
|
63
|
+
Neither is fixable by the user or by retrying. Say plainly that the upload
|
|
64
|
+
reached Awesomate and failed on our side, and raise it with support
|
|
65
|
+
(awesomate-support skill) rather than re-uploading and spending allowance again.
|
|
66
|
+
|
|
67
|
+
Then `{action:'summary'}` for the whole-library counts once the job has
|
|
68
|
+
actually succeeded.
|
|
69
|
+
|
|
70
|
+
## 4. Probe the content before building anything on it
|
|
71
|
+
|
|
72
|
+
`awesomate_knowledge_ask` with five real questions the user cares about, and
|
|
73
|
+
**one question you know the content cannot answer**. A base that answers the
|
|
74
|
+
fifth is not grounded, and that is the single most valuable thing to catch
|
|
75
|
+
before a customer sees it. Show the citations.
|
|
76
|
+
|
|
77
|
+
## 5. Draft the agent
|
|
78
|
+
|
|
79
|
+
`awesomate_knowledge_agents {action:'create', goal}` — describe what the agent
|
|
80
|
+
is for and the platform drafts instructions, scope, tone and test questions
|
|
81
|
+
from the account's own content. It saves as a **private draft**; nothing is
|
|
82
|
+
live and nothing is lost.
|
|
83
|
+
|
|
84
|
+
Then `{action:'test', agentId, message}` — free and unmetered, and the right
|
|
85
|
+
way to check behaviour. Test the awkward cases: something out of scope, a
|
|
86
|
+
pricing question, a complaint, an ambiguous question. Confirm the refusal
|
|
87
|
+
wording is what the business would actually want to say.
|
|
88
|
+
|
|
89
|
+
Editing fields, policies, and API keys is hub UI only (Knowledge → Agents).
|
|
90
|
+
|
|
91
|
+
## 6. Publish only with explicit approval
|
|
92
|
+
|
|
93
|
+
`{action:'publish', agentId}` makes it live **immediately for every key bound
|
|
94
|
+
to the agent**. Ask first, publish, then read the version back and confirm.
|
|
95
|
+
|
|
96
|
+
## 7. Put it where their customers are
|
|
97
|
+
|
|
98
|
+
Two destinations. Ask which they want; do not assume.
|
|
99
|
+
|
|
100
|
+
**A chat on their existing website — via n8n.** This is usually the right
|
|
101
|
+
answer, and the plumbing is already provisioned. See
|
|
102
|
+
`references/n8n-connection.md`: the hub creates the scope credential and the
|
|
103
|
+
`knowledge_answer` tool. Build the workflow with the awesomate-n8n skill
|
|
104
|
+
(Chat Trigger or Webhook -> AI Agent with the `knowledge_answer` tool ->
|
|
105
|
+
Respond), test it, promote it, and give them the webhook URL to embed. Read
|
|
106
|
+
`awesomate-n8n/references/ai-agents.md` before designing the agent node.
|
|
107
|
+
|
|
108
|
+
**A standalone page or app — via the app builder.** When they want a hosted
|
|
109
|
+
"ask our docs" page rather than a widget on an existing site, use the
|
|
110
|
+
awesomate-app-builder skill. A Node app calls the agent server-side so the key
|
|
111
|
+
stays out of the browser: get the agent's API key from the hub (shown once),
|
|
112
|
+
store it with the awesomate-credentials secret-drop flow, and never put it in
|
|
113
|
+
page JavaScript. A static site cannot hold a secret — if the page must call the
|
|
114
|
+
agent directly, route it through their n8n webhook instead.
|
|
115
|
+
|
|
116
|
+
## What to tell the user at the end
|
|
117
|
+
|
|
118
|
+
The library size, what it cost against their allowance, the agent's live
|
|
119
|
+
version, where it is reachable, and how to add more later. If anything failed
|
|
120
|
+
to ingest, say which files and why — a knowledge base with a silent hole is
|
|
121
|
+
worse than a smaller one they trust.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Showing an image or video the knowledge base cited
|
|
2
|
+
|
|
3
|
+
A citation on its own is a title and a locator. To actually DISPLAY the asset
|
|
4
|
+
you need a media URL, and the rules differ depending on whether you are showing
|
|
5
|
+
it in chat or embedding it in something that has to keep working.
|
|
6
|
+
|
|
7
|
+
## Getting the URL
|
|
8
|
+
|
|
9
|
+
`awesomate_knowledge_ask` citations do **not** carry media URLs — they return
|
|
10
|
+
`{ref, title, kind, section_path, locator, url, excerpt}`. When a citation's
|
|
11
|
+
`kind` is `image`, `video` or `audio` and the user wants to see it, follow up
|
|
12
|
+
with a search:
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
awesomate_knowledge_search { q: "<the cited title>", kind: "image", include_media: true }
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
`include_media: true` is what adds `url` and `poster_url` to the hits (over
|
|
19
|
+
REST it is `&include=media` on `/api/knowledge/explore` — easy to miss, and
|
|
20
|
+
without it you get titles with nothing to display). `poster_url` is the still
|
|
21
|
+
frame for a video; `url` is the asset itself.
|
|
22
|
+
|
|
23
|
+
Prefer `doc` filtering when you have the doc id from the citation — it resolves
|
|
24
|
+
the exact asset rather than the best text match for its title.
|
|
25
|
+
|
|
26
|
+
## The constraint that decides your architecture
|
|
27
|
+
|
|
28
|
+
**These URLs are presigned and expire in minutes.** They are for showing
|
|
29
|
+
something to the user right now, in this conversation. They are NOT a link you
|
|
30
|
+
can put in a page, save in a data table, email, or hand to a customer.
|
|
31
|
+
|
|
32
|
+
So:
|
|
33
|
+
|
|
34
|
+
- **Showing it in chat, now** — fetch with `include_media` and display it.
|
|
35
|
+
Fine. Re-fetch if the user comes back later; do not reuse an old URL.
|
|
36
|
+
- **Building a page, app, or an n8n chat that displays assets** — a presigned
|
|
37
|
+
URL will 403 by the time a visitor loads it. Do not embed one. There is
|
|
38
|
+
currently **no stable, routable media URL** for knowledge assets, so the
|
|
39
|
+
page must resolve the asset at request time:
|
|
40
|
+
- the app calls `explore?include=media` server-side (holding the key
|
|
41
|
+
server-side, never in browser JavaScript) and returns a fresh URL per
|
|
42
|
+
request, or
|
|
43
|
+
- it proxies the bytes through the app's own route, or
|
|
44
|
+
- for anything long-lived, upload the asset to somewhere with a durable URL
|
|
45
|
+
(WordPress media via `awesomate_wp_media_import`, or the app's own static
|
|
46
|
+
assets) and reference THAT, using the knowledge base for the text.
|
|
47
|
+
|
|
48
|
+
Say this to the user plainly when they ask for a gallery or an image-rich page:
|
|
49
|
+
the knowledge base is the index, not the CDN. Getting that wrong produces a
|
|
50
|
+
page that looks right when built and is full of broken images an hour later.
|
|
51
|
+
|
|
52
|
+
## Deciding quickly
|
|
53
|
+
|
|
54
|
+
| The user wants | Do |
|
|
55
|
+
|---|---|
|
|
56
|
+
| "show me that photo" | search with `include_media`, display it |
|
|
57
|
+
| "which images mention X" | search `kind:image`, list titles + show a few |
|
|
58
|
+
| a gallery page / a site section | resolve server-side per request, or re-host the assets; never embed a presigned URL |
|
|
59
|
+
| an n8n chat that returns images | have the workflow call the search endpoint at answer time and return fresh URLs in the reply |
|
|
@@ -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.
|
|
@@ -49,7 +49,9 @@ rebuilt (a rebuilt instance shows 0 workflows and invalidates every old key).
|
|
|
49
49
|
5. `awesomate_n8n_executions {executionId, debug: true}` — node-level output
|
|
50
50
|
data. Requires `error_content_analysis` consent:
|
|
51
51
|
- `403 consent_required` → give the user the `settingsUrl` from the error
|
|
52
|
-
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).
|
|
53
55
|
- `tooLarge: true` → payload over 15MB. Use the summary in the response;
|
|
54
56
|
do NOT retry hoping for the full payload.
|
|
55
57
|
6. Node behaving strangely rather than erroring → check its schema with
|
|
@@ -17,13 +17,42 @@ Be honest about limits: these are the signals that *let* you rank and be cited
|
|
|
17
17
|
|
|
18
18
|
- **Static site or Node app** (from awesomate-app-builder) → you write the files
|
|
19
19
|
directly into the project (below), commit, and deploy.
|
|
20
|
-
- **WordPress** → drive it through
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
- **WordPress** → drive it through the hosting tools via the awesomate-hosting
|
|
21
|
+
skill. Install a free SEO plugin + let it generate the sitemap rather than
|
|
22
|
+
hand-writing files (see §WordPress). **Check the plan gate first.**
|
|
23
23
|
- **A shop (WooCommerce)** → same WordPress path, plus `Product` JSON-LD on
|
|
24
24
|
product pages and product-data quality (real titles, descriptions, images,
|
|
25
|
-
prices)
|
|
26
|
-
|
|
25
|
+
prices). This skill covers the site-level SEO around the shop.
|
|
26
|
+
|
|
27
|
+
### Plan gate — check before promising any WordPress change
|
|
28
|
+
|
|
29
|
+
**Every PAT-authenticated hosting WRITE is Support Plus and above**:
|
|
30
|
+
`awesomate_run_wp_cli`, `awesomate_wp_post`, `awesomate_wp_media_import`,
|
|
31
|
+
`awesomate_wp_settings`, plus `awesomate_site_create` and
|
|
32
|
+
`awesomate_domain_add`. On **Essentials** they all return **403
|
|
33
|
+
`upgrade_required`** — the server enforces it, so no retry or rewording gets
|
|
34
|
+
through.
|
|
35
|
+
|
|
36
|
+
This matters more here than anywhere else: **Essentials is the plan that
|
|
37
|
+
gets exactly one WordPress site**, so it is the most likely plan for someone
|
|
38
|
+
asking about SEO. Get `plan` from `awesomate_get_context` at the start and
|
|
39
|
+
branch honestly.
|
|
40
|
+
|
|
41
|
+
**On Essentials, assume no tool touches their WordPress at all.** Note that
|
|
42
|
+
`awesomate_run_wp_cli` is gated even for its READS (`option get`,
|
|
43
|
+
`plugin list`) — the whole route is behind the write gate, so "just reading
|
|
44
|
+
the options" is not a way round it. The account-level reads do work
|
|
45
|
+
(`awesomate_get_context`, `awesomate_list_sites`, `awesomate_list_domains`,
|
|
46
|
+
`awesomate_dns_check`, `awesomate_site_uptime`).
|
|
47
|
+
|
|
48
|
+
**What Essentials CAN do — which is most of the value:** audit and advise
|
|
49
|
+
from the outside. `curl` the pages, the sitemap, robots.txt and the rendered
|
|
50
|
+
HTML; combine that with what they tell you; then produce the exact changes —
|
|
51
|
+
the titles and descriptions to paste, the JSON-LD block, the llms.txt
|
|
52
|
+
content, which plugin to install and where its settings live. They apply
|
|
53
|
+
them in wp-admin; you verify by fetching the live page again. Say that up
|
|
54
|
+
front — *"I can audit the site and write every change out for you to paste
|
|
55
|
+
in; me making them directly needs Support Plus"* — not after a 403.
|
|
27
56
|
|
|
28
57
|
## 1. Static / Node — write these
|
|
29
58
|
|
|
@@ -50,20 +79,69 @@ affected `<head>` tags, `sitemap.xml` `<lastmod>`, and `llms.txt`.
|
|
|
50
79
|
|
|
51
80
|
## 2. WordPress
|
|
52
81
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
82
|
+
**Find the domain, don't ask for it.** `awesomate_list_sites` and
|
|
83
|
+
`awesomate_list_domains` tell you what sites exist and which domain is
|
|
84
|
+
attached to which. Ask only when the answer is genuinely ambiguous (more
|
|
85
|
+
than one site, and the user hasn't said which).
|
|
86
|
+
|
|
87
|
+
**Snapshot before you change a live site.** `awesomate_snapshot_site` first,
|
|
88
|
+
and tell the user the `snapshotId` — the hosting skill requires this and SEO
|
|
89
|
+
work is exactly the kind of change that touches the whole site at once (a
|
|
90
|
+
plugin, a theme option, an indexing flag). `awesomate_rollback_site` is the
|
|
91
|
+
undo.
|
|
92
|
+
|
|
93
|
+
Then, on Support Plus and above:
|
|
94
|
+
|
|
95
|
+
- **Install + activate an SEO plugin** — `awesomate_run_wp_cli` with args
|
|
96
|
+
`['plugin','install','wordpress-seo','--activate']` for Yoast, or the
|
|
97
|
+
user's preference. Slugs only, never a URL or zip. This part works.
|
|
98
|
+
- **Configuring it does NOT work from here.** The wp-cli gate allows
|
|
99
|
+
`option update` for exactly ten core options, and `wpseo_titles` and
|
|
100
|
+
friends are not among them; their values are JSON full of spaces, which
|
|
101
|
+
the argument charset gate refuses anyway. So: you install and activate,
|
|
102
|
+
then hand off — *"Yoast is installed. Open Settings → Yoast SEO in
|
|
103
|
+
wp-admin and I'll talk you through the title template and the social
|
|
104
|
+
image, or give me the values and I'll write out exactly what to paste."*
|
|
105
|
+
Don't burn attempts discovering this at runtime.
|
|
57
106
|
- Confirm the sitemap is live (`/sitemap_index.xml` or `/sitemap.xml`) and
|
|
58
|
-
`robots.txt` references it.
|
|
59
|
-
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
107
|
+
`robots.txt` references it — `curl` the live URLs.
|
|
108
|
+
- **Posts and pages** via `awesomate_wp_post` (drafts first — the user
|
|
109
|
+
approves publishing). Useful for the content pages that back up
|
|
110
|
+
`llms.txt` — a services overview, an FAQ, an about page — when the site is
|
|
111
|
+
thin on machine-readable substance.
|
|
112
|
+
- **The og:image / logo** goes in via `awesomate_wp_media_import` — one https
|
|
113
|
+
URL per call, returns an `attachmentId` you can reference from a post or
|
|
114
|
+
hand to the SEO plugin's social settings. It cannot read a local file:
|
|
115
|
+
the image has to be reachable on the web first.
|
|
116
|
+
- **Site title, tagline, timezone, search visibility** → `awesomate_wp_settings`
|
|
117
|
+
(§4), never wp-cli — those values contain spaces.
|
|
64
118
|
- WordPress is the recommended stack precisely when SEO/organic reach matters —
|
|
65
119
|
lean into it here.
|
|
66
120
|
|
|
121
|
+
### Files at the site root: say what's actually possible
|
|
122
|
+
|
|
123
|
+
§1's `robots.txt` / `sitemap.xml` / `llms.txt` advice is for **static sites
|
|
124
|
+
and Node apps**, where you write the file into the project and deploy it.
|
|
125
|
+
**On WordPress there is no tool that writes a file to the site.**
|
|
126
|
+
`awesomate_run_wp_cli` cannot (no file verbs are allowlisted), `wp_post`
|
|
127
|
+
writes posts and pages, and `wp_media_import` takes an https URL. Don't
|
|
128
|
+
promise the file and then discover this.
|
|
129
|
+
|
|
130
|
+
On WordPress those three come from:
|
|
131
|
+
|
|
132
|
+
- **`robots.txt` and `sitemap.xml`** — the SEO plugin generates both
|
|
133
|
+
(WordPress serves a virtual robots.txt; Yoast and friends add the sitemap
|
|
134
|
+
and the reference to it). That's why installing the plugin is step one.
|
|
135
|
+
- **`llms.txt`** — no plugin makes one. Either the user places the file over
|
|
136
|
+
SSH or cPanel's File Manager (`scripts/ssh-connect.sh` in the hosting
|
|
137
|
+
skill, Support Plus+), or you publish the same content as a normal page
|
|
138
|
+
with `awesomate_wp_post` and link it — a real page is crawlable and
|
|
139
|
+
editable, and gets most of the benefit.
|
|
140
|
+
|
|
141
|
+
**You can always generate the content.** Write the exact `llms.txt` body,
|
|
142
|
+
the robots rules, the JSON-LD block, and tell them precisely where each goes
|
|
143
|
+
— that is the useful half, and it works on every plan.
|
|
144
|
+
|
|
67
145
|
## 3. Verify
|
|
68
146
|
- `robots.txt` and `sitemap.xml` (or the WP sitemap) return 200 at the root.
|
|
69
147
|
- Each key page has a unique title + description and valid JSON-LD (no syntax
|
|
@@ -90,17 +168,28 @@ the user asks to "check SEO", and after any content change:
|
|
|
90
168
|
2. **Sitemap** — `/sitemap.xml` (WP: `/sitemap_index.xml`) returns 200 and
|
|
91
169
|
`<lastmod>` is fresh. A months-old lastmod on a site that changed last week
|
|
92
170
|
means generation is broken, not that nothing changed.
|
|
93
|
-
3. **robots.txt + llms.txt** — both exist,
|
|
94
|
-
|
|
95
|
-
|
|
171
|
+
3. **robots.txt + llms.txt** — both exist (on WordPress, `llms.txt` may be
|
|
172
|
+
the page standing in for it — check whichever they have), and the content
|
|
173
|
+
still mentions the current offerings. A stale llms.txt misdescribes the
|
|
174
|
+
business to every AI assistant that reads it.
|
|
96
175
|
4. **AI crawlers not blocked at the edge** —
|
|
97
176
|
`curl -A "GPTBot" -s -o /dev/null -w "%{http_code}" https://DOMAIN/`
|
|
98
177
|
(repeat with `ClaudeBot`) returns 200, not 403 or a challenge page.
|
|
99
178
|
Where to fix each case: [references/ai-discoverability.md](references/ai-discoverability.md).
|
|
100
179
|
5. **WordPress only: `blog_public` must be 1** — one checkbox ("Discourage
|
|
101
180
|
search engines") silently de-indexes the whole site. Read it via
|
|
102
|
-
`awesomate_run_wp_cli` with args `['option','get','blog_public']
|
|
103
|
-
0, fix with
|
|
181
|
+
`awesomate_run_wp_cli` with args `['option','get','blog_public']`. If it's
|
|
182
|
+
0, fix it with **`awesomate_wp_settings {domain, searchEngineVisible:
|
|
183
|
+
true}`** — that path also flushes the object cache, which the wp-cli
|
|
184
|
+
`option update` does not, so the change actually shows on the live site
|
|
185
|
+
instead of sitting behind a stale cache. (A page or CDN cache may still
|
|
186
|
+
need its own refresh.)
|
|
187
|
+
6. **"My site vanished from Google" is often not SEO at all.** Before
|
|
188
|
+
auditing tags, check the two things that take a site off the internet:
|
|
189
|
+
`awesomate_dns_check` (is the domain still pointing at the hosting?) and
|
|
190
|
+
`awesomate_site_uptime` (30-day availability and incidents). A domain
|
|
191
|
+
that stopped resolving, or a site that was down for two days, explains a
|
|
192
|
+
ranking drop far better than a meta description does.
|
|
104
193
|
|
|
105
194
|
Report pass/fail per check, with the fix for each failure.
|
|
106
195
|
|
|
@@ -12,13 +12,21 @@ doing it. For tone, read the voice reference installed at
|
|
|
12
12
|
|
|
13
13
|
## 0. Orient
|
|
14
14
|
|
|
15
|
-
On the first support question in a session, call `
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
On the first support question in a session, call `awesomate_get_context` —
|
|
16
|
+
it carries the LIVE plan and limits. Use `awesomate_whoami` only to confirm
|
|
17
|
+
WHICH account you're connected to: it's a zero-network read of a file
|
|
18
|
+
written when the token was minted, so straight after an upgrade it still
|
|
19
|
+
reports the OLD plan — and "I just upgraded" is one of the commonest
|
|
20
|
+
support moments. Describe what a plan or upgrade INCLUDES from
|
|
21
|
+
`awesomate_get_plan_features`, not memory.
|
|
22
|
+
|
|
23
|
+
For a live credit balance, call `awesomate_get_limits` and read
|
|
24
|
+
`dimensions.workflowCredits.balance` — that works on every plan.
|
|
25
|
+
(`awesomate_request_build`'s free preview also reports a balance, but only
|
|
26
|
+
on Pro and Embedded, and it returns the reservation-aware `available` —
|
|
27
|
+
what's actually spendable once credits promised to builds in flight are
|
|
28
|
+
set aside — rather than the raw balance.) Never quote a plan, price, or
|
|
29
|
+
balance from memory.
|
|
22
30
|
|
|
23
31
|
## 1. FAQ first, then help docs
|
|
24
32
|
|
|
@@ -56,6 +64,15 @@ When the user wants a human, or §1 came up empty:
|
|
|
56
64
|
|
|
57
65
|
## 3. Done-for-you build — spending a credit
|
|
58
66
|
|
|
67
|
+
**Build requests are Pro and Embedded only.** Check the plan from
|
|
68
|
+
`awesomate_get_context` BEFORE you start this flow: on Essentials the token
|
|
69
|
+
has no `requests:write` scope, and on Support Plus the route re-checks
|
|
70
|
+
wizard access live and returns an honest `upgrade_required` 403 — either
|
|
71
|
+
way the user hits a wall mid-flow if you didn't say so upfront. On those
|
|
72
|
+
plans, say it in one line ("done-for-you builds are on Pro — here's the
|
|
73
|
+
link if you want it"), offer a ticket (§2) instead, and help fully with
|
|
74
|
+
what you can build yourself.
|
|
75
|
+
|
|
59
76
|
Offer this when the ask exceeds what you can build from here, or the user
|
|
60
77
|
would rather hand it off ("can you guys just do it?"). It submits a request
|
|
61
78
|
to the Awesomate team, who scope, build, test, and deliver it.
|
|
@@ -78,20 +95,50 @@ to the Awesomate team, who scope, build, test, and deliver it.
|
|
|
78
95
|
|
|
79
96
|
## 4. Plans and billing — honest, never pushy
|
|
80
97
|
|
|
81
|
-
- "What plan am I on?" / "what do I get?" → `
|
|
82
|
-
plan
|
|
98
|
+
- "What plan am I on?" / "what do I get?" → `awesomate_get_context` for the
|
|
99
|
+
live plan (never `awesomate_whoami` — its plan is a cached file that goes
|
|
100
|
+
stale the moment they upgrade), `awesomate_get_plan_features` for what it
|
|
101
|
+
includes — report as facts.
|
|
83
102
|
- "How much to upgrade?" / "what would X plan give me?" →
|
|
84
103
|
`awesomate_get_plan_features` for what the plan includes, then point them
|
|
85
104
|
at hub.awesomate.ai/billing to see the price and upgrade. Name the plan once, link, move on.
|
|
86
105
|
All purchases happen
|
|
87
106
|
in the BROWSER at those links — never take payment details in chat.
|
|
88
|
-
- Credits: one currency, $100 each, spendable on
|
|
89
|
-
|
|
107
|
+
- Credits: one currency, $100 each, spendable on an automation or build
|
|
108
|
+
request and on Knowledge Base ingestion packs. Say "credits", never "free
|
|
109
|
+
workflows". If they ask about anything else a credit might buy, check
|
|
110
|
+
rather than assume — those are the spend paths that exist.
|
|
90
111
|
- If a feature the user wants is on a higher plan, say so once, honestly
|
|
91
112
|
("that's on Support Plus — here's the link if you want it"), then help
|
|
92
113
|
fully within what their plan allows. Never manufacture urgency.
|
|
93
114
|
|
|
94
|
-
## 5.
|
|
115
|
+
## 5. Things only these tools can tell you
|
|
116
|
+
|
|
117
|
+
- **`awesomate_notifications {action:'list'}` is the ONLY channel where
|
|
118
|
+
Awesomate pushes to the client** — knowledge quota warnings, "your quote
|
|
119
|
+
is ready", support-access events. Check it whenever the user asks about a
|
|
120
|
+
pending request, a quote, or "did anyone get back to me?". Relay unread
|
|
121
|
+
items in one line, then mark them read (`read` / `read_all`). It sends
|
|
122
|
+
nothing; it only reads their bell.
|
|
123
|
+
- **"How is my account doing?"** → `awesomate_dashboard_metrics` (executions
|
|
124
|
+
by status, error rate, time saved, 7-day trend, most recent failure) and
|
|
125
|
+
`awesomate_account_report` (monthly-report shaped: what's working, what
|
|
126
|
+
isn't, engagement, commercials). Tell the story in their words — never
|
|
127
|
+
paste the JSON at a business owner. A `null` section means "couldn't be
|
|
128
|
+
read right now", never zero.
|
|
129
|
+
- **A fix already prepared, waiting on a ticket.** `awesomate_n8n_findings`
|
|
130
|
+
lists the error analyzer's findings for this account. `fixReady: true`
|
|
131
|
+
means a reviewed fix exists — that is exactly when to raise a support
|
|
132
|
+
ticket (§2) asking to have it applied, quoting the workflow and the
|
|
133
|
+
finding's plain-language summary. `needsClientAction: true` means only the
|
|
134
|
+
user can fix it (an expired login, a third-party quota) — tell them what
|
|
135
|
+
to do rather than opening a ticket.
|
|
136
|
+
- **A 403 that mentions consent is a toggle, not a bug.** Call
|
|
137
|
+
`awesomate_privacy_settings` to see exactly which toggle is off, name it,
|
|
138
|
+
and send them to hub.awesomate.ai/n8n/settings. You cannot flip it
|
|
139
|
+
for them, and there is deliberately no tool that can.
|
|
140
|
+
|
|
141
|
+
## 6. Hard rules
|
|
95
142
|
|
|
96
143
|
- **Never invent policy or pricing.** If the FAQ and tools don't say it,
|
|
97
144
|
say so and offer to check with the team via a ticket (§2).
|