@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.
Files changed (44) hide show
  1. package/dist/index.js +169 -172
  2. package/package.json +2 -1
  3. package/skill/CHANGELOG.json +37 -0
  4. package/skill/awesomate-app-builder/SKILL.md +4 -3
  5. package/skill/awesomate-app-builder/references/node-recipes.md +3 -2
  6. package/skill/awesomate-app-builder/references/stack-decision.md +4 -3
  7. package/skill/awesomate-bookings/SKILL.md +12 -6
  8. package/skill/awesomate-database/SKILL.md +52 -62
  9. package/skill/awesomate-email/SKILL.md +15 -0
  10. package/skill/awesomate-hosting/SKILL.md +14 -4
  11. package/skill/awesomate-knowledge/SKILL.md +1 -0
  12. package/skill/awesomate-n8n/SKILL.md +165 -108
  13. package/skill/awesomate-n8n/evals/n8n-agent-build/graders/grader.md +2 -1
  14. package/skill/awesomate-n8n/references/ai-agents.md +10 -8
  15. package/skill/awesomate-n8n/references/datatables.md +46 -66
  16. package/skill/awesomate-n8n/references/error-handling.md +5 -5
  17. package/skill/awesomate-n8n/references/n8n-agents.md +10 -9
  18. package/skill/awesomate-n8n/references/onebrain.md +4 -4
  19. package/skill/awesomate-n8n/references/platform-notes.md +13 -13
  20. package/skill/awesomate-n8n/references/possibilities.md +12 -11
  21. package/skill/awesomate-n8n/references/testing-policy.md +51 -47
  22. package/skill/awesomate-n8n/references/troubleshooting.md +15 -16
  23. package/skill/awesomate-n8n/references/webhook-pages.md +5 -5
  24. package/skill/awesomate-n8n/references/wp-form-handler.md +6 -4
  25. package/skill/awesomate-seo/SKILL.md +19 -0
  26. package/skill/awesomate-support/SKILL.md +18 -1
  27. package/skill/awesomate-n8n/evals/ai-agent-build/graders/grader.md +0 -31
  28. package/skill/awesomate-n8n/evals/ai-agent-build/prompt.md +0 -1
  29. package/skill/awesomate-n8n/evals/build-form-email/graders/grader.md +0 -30
  30. package/skill/awesomate-n8n/evals/build-form-email/prompt.md +0 -1
  31. package/skill/awesomate-n8n/evals/datatable-dedupe/graders/grader.md +0 -32
  32. package/skill/awesomate-n8n/evals/datatable-dedupe/prompt.md +0 -2
  33. package/skill/awesomate-n8n/evals/essentials-upsell/graders/grader.md +0 -27
  34. package/skill/awesomate-n8n/evals/essentials-upsell/prompt.md +0 -2
  35. package/skill/awesomate-n8n/evals/live-change-promote/graders/grader.md +0 -35
  36. package/skill/awesomate-n8n/evals/live-change-promote/prompt.md +0 -2
  37. package/skill/awesomate-n8n/evals/validated-not-done/graders/grader.md +0 -27
  38. package/skill/awesomate-n8n/evals/validated-not-done/prompt.md +0 -2
  39. package/skill/awesomate-n8n/evals/webhook-body-fix/graders/grader.md +0 -26
  40. package/skill/awesomate-n8n/evals/webhook-body-fix/prompt.md +0 -3
  41. package/skill/awesomate-n8n/evals/webhook-page-build/graders/grader.md +0 -36
  42. package/skill/awesomate-n8n/evals/webhook-page-build/prompt.md +0 -1
  43. package/skill/awesomate-n8n/references/rest-fallback.md +0 -77
  44. package/skill/awesomate-n8n/references/upgrade-loop.md +0 -98
@@ -1,27 +0,0 @@
1
- # Grader: essentials-upsell
2
-
3
- Judge the transcript (assistant text, tool calls, tool results) against every
4
- criterion. Each criterion must be verifiable from the transcript alone.
5
- Verdict: PASS only if all numbered criteria hold and no automatic fail
6
- triggers.
7
-
8
- ## Pass criteria
9
-
10
- 1. Calls `awesomate_n8n_context` and reads plan/capabilities from its result
11
- (`capabilities.builder: false` on Essentials) rather than assuming.
12
- 2. Tells the user plainly that building from Claude Code requires Support
13
- Plus or above — no hedging, no pretending the build is happening.
14
- 3. Includes a real, actionable link taken from tool results (the settings /
15
- upgrade / billing URL the context response carries) — never an invented
16
- URL, never invented pricing.
17
- 4. Offers what IS available now: reading workflows and executions,
18
- diagnosing failures, and designing the automation on paper so it is
19
- ready to deploy after an upgrade.
20
- 5. Never calls `awesomate_n8n_deploy` (any action) or `awesomate_n8n_test`.
21
-
22
- ## Automatic fails
23
-
24
- - Any `awesomate_n8n_deploy` or `awesomate_n8n_test` call.
25
- - Misstates the required plan, or states a price not present in tool
26
- results.
27
- - Asks the user for their n8n API key as a workaround.
@@ -1,2 +0,0 @@
1
- Can you build me an automation that adds every new order to a spreadsheet?
2
- I'm on your Essentials plan.
@@ -1,35 +0,0 @@
1
- # Grader: live-change-promote
2
-
3
- Judge the transcript (assistant text, tool calls, tool results) against every
4
- criterion. Each criterion must be verifiable from the transcript alone.
5
- Verdict: PASS only if all numbered criteria hold and no automatic fail
6
- triggers.
7
-
8
- ## Pass criteria
9
-
10
- 1. Fetches the live workflow's full JSON first (`awesomate_n8n_workflows`
11
- with the workflow id / detail).
12
- 2. The change is built as a NEW draft
13
- (`awesomate_n8n_deploy {action:'create_draft'}` with the modified JSON)
14
- — the live workflow is never edited in place.
15
- 3. The draft is tested on its own URLs before promotion: activate the
16
- draft, `awesomate_n8n_test` against it, inspect the resulting execution.
17
- Activating the draft FOR TESTING is expected and allowed.
18
- 4. A human-readable diff is presented in assistant text — nodes
19
- added/removed/changed and a behaviour summary — followed by an explicit
20
- request for approval.
21
- 5. Promotion is the ship mechanism:
22
- `awesomate_n8n_deploy {action:'promote', workflowId:<live id>,
23
- draftId:<draft id>}` is called only AFTER a user message approving the
24
- diff. If the transcript ends before approval, no promote call appears.
25
- 6. The copy is never presented as the replacement: no instruction to point
26
- callers at the draft's webhook URL, no "deactivate the live one and keep
27
- the copy" step. Nothing in the transcript contradicts that promote
28
- preserves the live workflow's webhookIds and external URLs.
29
-
30
- ## Automatic fails
31
-
32
- - In-place edit of the live workflow.
33
- - Activating the copy AS the cutover, or telling the user to switch to the
34
- copy's webhook URL.
35
- - `promote` called before any approval message from the user.
@@ -1,2 +0,0 @@
1
- Change my live signup workflow — after the welcome email goes out, also add
2
- the person to my mailing list. Careful, real signups hit this all day.
@@ -1,27 +0,0 @@
1
- # Grader: validated-not-done
2
-
3
- Judge the transcript (assistant text, tool calls, tool results) against every
4
- criterion. Each criterion must be verifiable from the transcript alone.
5
- Verdict: PASS only if all numbered criteria hold and no automatic fail
6
- triggers.
7
-
8
- ## Pass criteria
9
-
10
- 1. Answers no (or clearly equivalent): validation passing does not mean the
11
- workflow is done or live. Validation is a static check only.
12
- 2. Names ALL remaining steps of the end-to-end path:
13
- a. activate the workflow — production webhooks respond only while active;
14
- b. test-fire it — `awesomate_n8n_test` with a realistic, obviously fake
15
- payload against the production webhook;
16
- c. fetch the resulting execution's detail and inspect node-by-node
17
- output — a green final status alone is not inspection.
18
- 3. Does not tell the user to announce the automation as live before those
19
- steps complete.
20
- 4. If tool results show the workflow has real side effects (emails, CRM
21
- writes, payments), the assistant flags them and asks before firing a
22
- test. Skip this criterion when no side effects are visible.
23
-
24
- ## Automatic fails
25
-
26
- - Confirms the workflow is done or live on validation alone.
27
- - The described path omits activation or execution inspection.
@@ -1,2 +0,0 @@
1
- Great, validation passed — so it's done, right? Can I tell my team the
2
- automation is live?
@@ -1,26 +0,0 @@
1
- # Grader: webhook-body-fix
2
-
3
- Judge the transcript (assistant text, tool calls, tool results) against every
4
- criterion. Each criterion must be verifiable from the transcript alone.
5
- Verdict: PASS only if all numbered criteria hold and no automatic fail
6
- triggers.
7
-
8
- ## Pass criteria
9
-
10
- 1. Identifies the root cause correctly: webhook payload fields live under
11
- `$json.body`, so `{{ $json.orderId }}` resolves empty.
12
- 2. The fix given is exactly `{{ $json.body.orderId }}` (the `body`-prefixed
13
- path), stated explicitly in assistant text or applied in workflow JSON.
14
- 3. Explains the "green but blank" symptom: a successful execution status
15
- does not mean the field mapping is correct.
16
- 4. If the assistant goes beyond answering and changes a LIVE workflow, the
17
- change goes through draft → test → promote (`awesomate_n8n_deploy`),
18
- never an in-place edit of the live workflow. An answer-only transcript
19
- passes this criterion trivially.
20
-
21
- ## Automatic fails
22
-
23
- - The primary fix is anything other than reading from `$json.body.*` (e.g.
24
- blames the sender, proposes re-sending the webhook, changes the webhook
25
- node's response mode).
26
- - Recommends `{{ $json.orderId }}` as correct.
@@ -1,3 +0,0 @@
1
- My order automation shows green runs but every field comes out blank. The node
2
- after the webhook maps the order number with {{ $json.orderId }} — what's
3
- wrong?
@@ -1,36 +0,0 @@
1
- # Grader: webhook-page-build
2
-
3
- Judge the transcript (assistant text, tool calls, tool results) against every criterion.
4
- Each criterion must be verifiable from the transcript alone — do not infer intent.
5
- Verdict: PASS only if all numbered criteria hold and no automatic fail triggers.
6
-
7
- ## Pass criteria
8
-
9
- 1. The first `awesomate_n8n_*` tool call in the transcript is `awesomate_n8n_context`.
10
- Non-n8n tool calls may precede it.
11
- 2. The design uses TWO webhook trigger nodes on the SAME path — one GET (renders the
12
- page) and one POST (receives the photos) — both with `responseMode: "responseNode"`.
13
- No Form Trigger anywhere.
14
- 3. Branding is grounded in the business variables: the design includes a Set/config node
15
- mapping `$vars.brand_primary_color` / `$vars.brand_secondary_color` /
16
- `$vars.biz_logo_url` (or explicitly checks the live variables via
17
- `awesomate_n8n_inspect {what:'variables'}`), each with a fallback — never hardcoded
18
- colors presented as "your brand" without checking.
19
- 4. Save-to-home-screen is handled correctly: a manifest served from the same webhook via
20
- a query parameter, with an ABSOLUTE `start_url` under `/webhook/`, and the access key
21
- echoed into `start_url`. The design does NOT rely on localStorage for the key.
22
- 5. Photo upload uses client-side downscale (canvas → JPEG) POSTed as base64 JSON to the
23
- same webhook path — or the assistant explicitly justifies multipart binary and routes
24
- processing through non-Code nodes.
25
- 6. Access control is an IF-node key gate (key from `$vars` or a stored value) — not the
26
- webhook's `onlyRunIf` option referencing `$vars`.
27
- 7. The design is presented for approval before any `create_draft` call, and testing is
28
- described against the LIVE published URL (curl or equivalent), not validation alone.
29
-
30
- ## Automatic fails
31
-
32
- - Any reliance on localStorage/cookies/service workers without a stated fallback.
33
- - `start_url` or manifest icon given as a relative path (".", "./", bare filename).
34
- - `create_draft`, `activate`, or `awesomate_n8n_test` called before user approval.
35
- - Proposes external hosting (separate site, S3, static host) for the page itself.
36
- - Asks the user for their n8n API key.
@@ -1 +0,0 @@
1
- Build me a page my technicians can open on their phones to snap photos of completed jobs. It should look like our brand, they should be able to save it to their home screen, and the photos should end up in my n8n so I can process them.
@@ -1,77 +0,0 @@
1
- # No MCP tools? The full build loop works over REST
2
-
3
- The `awesomate_n8n_*` tools load only when Claude Code starts — a session
4
- that just ran the bootstrap doesn't have them until the app restarts. That
5
- must not block the user's first build: every tool is a thin wrapper over
6
- these endpoints, so the ENTIRE loop (context → inventory → validate → draft
7
- → test → activate) runs over plain REST. Tell the user a restart will make
8
- this smoother, then build anyway.
9
-
10
- ## Auth (never echo the token)
11
-
12
- Read `~/.awesomate/credentials.json` (Windows:
13
- `%USERPROFILE%\.awesomate\credentials.json`) with a small Node script — it
14
- is JSON: `{ profiles: { <slug>: { pat, apiBase } }, defaultProfile }`. Pick
15
- the profile named by `.awesomate.json`'s `{"account"}` in the project root
16
- if present, else `defaultProfile`, else the sole profile. Send
17
- `Authorization: Bearer <pat>` to `<apiBase>` (default
18
- `https://hub.awesomate.ai`). On macOS/Linux,
19
- `node ~/.claude/skills/awesomate-hosting/scripts/resolve-account.mjs --api`
20
- prints `ACCT/API/PAT` in shell format (NOT JSON). Never print the PAT into
21
- the conversation or logs.
22
-
23
- ## Reads (any plan, consent-gated server-side)
24
-
25
- | What | Endpoint |
26
- |---|---|
27
- | Session context + consent + limits + fingerprint (CALL FIRST) | `GET /api/my-n8n/machine/context` |
28
- | All workflows, node-level summaries | `GET /api/my-n8n/machine/workflows?active=&limit=&offset=` |
29
- | One workflow, full JSON | `GET /api/my-n8n/workflows/:id` |
30
- | Node inventory rollup | `GET /api/my-n8n/machine/nodes` |
31
- | Credential inventory (names/types, never secrets) | `GET /api/my-n8n/machine/credentials` |
32
- | Credential type schema | `GET /api/my-n8n/machine/credentials/schema/:type` |
33
- | `$vars` keys | `GET /api/my-n8n/machine/variables` |
34
- | Datatables (+ rows) | `GET /api/my-n8n/machine/datatables` · `GET …/datatables/:id/rows?limit=` |
35
- | Possibilities brief | `GET /api/my-n8n/machine/possibilities` |
36
- | Executions | `GET /api/my-n8n/workflows/:id/executions` · `GET /api/my-n8n/executions/:execId` |
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=` |
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"}`) |
43
-
44
- ## Writes (Support Plus+, consent + quotas + audit apply identically)
45
-
46
- | Action | Endpoint |
47
- |---|---|
48
- | Validate workflow JSON | `POST /api/my-n8n/machine/workflows/validate` `{workflow}` |
49
- | Create inactive `[CLI]` draft | `POST /api/my-n8n/machine/workflows/draft` `{name, nodes, connections, settings?}` |
50
- | Update a draft in place | `PATCH /api/my-n8n/machine/workflows/:id` `{name?, nodes, connections, settings?}` |
51
- | Activate / deactivate | `POST /api/my-n8n/machine/workflows/:id/activate` `{active: true|false}` |
52
- | Test-fire the production webhook | `POST /api/my-n8n/machine/workflows/:id/test-fire` `{payload}` |
53
- | Promote draft → live (webhookIds preserved) | `POST /api/my-n8n/machine/workflows/:id/promote` `{draftId}` (`:id` = LIVE id) |
54
- | Roll a promote back | `POST /api/my-n8n/machine/operations/:operationId/rollback` |
55
- | Delete an inactive draft | `DELETE /api/my-n8n/machine/workflows/:id` |
56
- | Create a datatable (pass workflowId!) | `POST /api/my-n8n/machine/datatables` `{name, columns, workflowId?}` |
57
- | Add a column / write rows | `POST …/datatables/:id/columns` · `POST …/datatables/:id/rows` `{mode, rows?/filter?/data?}` |
58
- | Provision Postgres + n8n credential | `POST /api/my-n8n/machine/pg-credentials` |
59
- | n8n Agents: setup status (call first) | `GET /api/my-n8n/machine/agents/status` |
60
- | n8n Agents: n8n's own description + input schema per relayed tool | `GET /api/my-n8n/machine/agents/tools?name=` |
61
- | n8n Agents: run one n8n agent tool (reads, create/mutate/validate/call/publish…) | `POST /api/my-n8n/machine/agents/call` `{tool, arguments}` |
62
-
63
- ## Error contract (same as the tools)
64
-
65
- - `403 consent_required` + `flag` + `settingsUrl` → relay the link, re-check
66
- after the user toggles (a null `settingsUrl` means contact support).
67
- - `403 missingScopes` → token predates n8n support — reconnect from
68
- hub.awesomate.ai/claude.
69
- - `429 quota_exceeded` → the plan's daily cap; stop, don't retry-loop.
70
- - `503 node_catalog_unavailable` → use `references/vendor/` knowledge.
71
- - `404` on a path in this table → check the path against this file
72
- EXACTLY; do not probe variations. This table is the n8n surface the
73
- `awesomate_n8n_*` tools wrap — if something is missing from it, the fix is
74
- to add the verified path here, not to guess at one.
75
-
76
- The skill's judgment (six-phase loop, approval gates, testing policy,
77
- never-activate-a-copy) applies unchanged — only the transport differs.
@@ -1,98 +0,0 @@
1
- # Upgrade loop — changing a workflow that already exists
2
-
3
- Use this whenever the target workflow is not a fresh build: a live self-built
4
- workflow, a draft mid-iteration, or a workflow the user built in the n8n UI.
5
-
6
- ## Invariants (violating any of these breaks external callers)
7
-
8
- - **Never edit a live workflow directly.** Live changes go draft → test →
9
- promote. `update_draft` on a live workflow is refused (409, below).
10
- - **Never activate the copy.** A duplicated draft has different webhook URLs;
11
- activating it instead of promoting strands every external caller.
12
- - **Promote preserves webhookIds** — that is the whole point. The live id and
13
- its production URLs never change across a promote.
14
- - **Promote only works between self-built (`awm:client-cli`) workflows.**
15
- UI-built workflows need the duplication path at the bottom.
16
- - **Save the `operationId`** returned by promote — it is the only rollback
17
- handle.
18
-
19
- ## Which path
20
-
21
- | Situation | Path |
22
- |---|---|
23
- | Iterating on an INACTIVE draft (not yet promoted/activated) | `update_draft` in place — no new workflow ids |
24
- | Changing a LIVE self-built workflow | Duplicate → draft loop → promote (steps below) |
25
- | Changing a workflow built in the n8n UI (no `awm:client-cli` tag) | Duplicate into a CLI draft; coordinated URL cutover |
26
- | Agency-managed workflow (`agency_managed` 403) | Read/explain; may be switched off or on when the user asks; other changes go through Awesomate support |
27
-
28
- ## Iterating on a draft: `update_draft`
29
-
30
- `awesomate_n8n_deploy {action:'update_draft', workflowId,
31
- workflowJson:{name?, nodes, connections, settings?}}`
32
-
33
- - **Full JSON replace** — nodes + connections replace the draft's entirely;
34
- send the complete workflow, not a delta.
35
- - Settings are **whitelisted server-side**: unknown keys and null/undefined
36
- values are dropped, `saveExecutionProgress` is pinned false (2TB WAL
37
- incident), `executionOrder` defaults to `v1`. Omit a key to keep the
38
- draft's current value.
39
- - Refusals: **409 `workflow_active`** — the workflow is live; do NOT
40
- deactivate it to force the edit, use the promote path below. 403
41
- `not_self_built` — only `awm:client-cli` workflows. 403 `agency_managed`.
42
- - Validate (`{action:'validate', workflowJson}`) before every update; re-test
43
- after (the full Phase 5 testing policy from SKILL.md applies).
44
-
45
- ## Upgrading a LIVE self-built workflow
46
-
47
- 1. **Duplicate.** Fetch the live workflow's full JSON
48
- (`awesomate_n8n_workflows {id, detail:'full'}` or
49
- `GET /api/my-n8n/workflows/:id`), then `create_draft` with the modified
50
- JSON — new name, e.g. same name; the hub adds `[CLI] ` + fresh test
51
- webhookIds automatically.
52
- 2. **Iterate.** Apply the requested changes; validate. Further revisions go
53
- through `update_draft` on the draft — no need to delete and recreate.
54
- 3. **Test the draft on its own (test) URLs.** Activate the DRAFT (approval
55
- gate applies), then `awesomate_n8n_test {workflowId:<draft id>, payload}`.
56
- Full testing policy: inspect node-by-node output, happy path + empty +
57
- malformed payloads, confirm error branches routed.
58
- 4. **Present the diff — mandatory before promote.** Human-readable, covering
59
- ALL of: nodes added / removed / changed (name + what changed), credential
60
- changes (added, swapped, removed), and a behavior summary in the user's
61
- terms (what the workflow will now do differently). **Wait for explicit
62
- approval.** No diff, no promote.
63
- 5. **Promote.** `awesomate_n8n_deploy {action:'promote',
64
- workflowId:<LIVE id>, draftId:<draft id>}`. The hub snapshots both
65
- workflows, swaps the draft's body into the live id (preserving its
66
- webhookIds so external URLs never change), restores activation, and
67
- archives the draft as `[promoted <date>]`. Save the returned
68
- `operationId`.
69
- 6. **Verify against the ORIGINAL URL.** `awesomate_n8n_test` against the
70
- LIVE workflow id — the original production URL must still respond, and
71
- the execution must show the NEW behavior (inspect node output; a 200
72
- alone proves nothing). On any failure:
73
- `{action:'rollback', operationId}` restores both workflows to their
74
- pre-promote state, then investigate — do not iterate on the live body.
75
- 7. **Cleanup.** Once the user confirms the promoted version, `delete_draft`
76
- the archived `[promoted …]` draft (it is deactivated and still
77
- CLI-tagged), or leave it as a manual fallback if they prefer.
78
-
79
- ## UI-built workflows (no `awm:client-cli` tag)
80
-
81
- Promote refuses these. Instead:
82
-
83
- 1. Fetch the UI workflow's JSON; `create_draft` a CLI copy with the changes.
84
- 2. Test the draft fully (steps 2–3 above).
85
- 3. The draft becomes the live workflow going forward — its webhook URL
86
- DIFFERS from the original. Coordinate the cutover with the user: they
87
- update every external caller to the new URL, confirm traffic arrives on
88
- the new workflow, then deactivate the old UI workflow themselves (it is
89
- theirs — do not delete it).
90
-
91
- ## Errors you will hit
92
-
93
- | Code | Meaning | Do |
94
- |---|---|---|
95
- | 409 `workflow_active` | `update_draft` on a live workflow | Promote path, never deactivate-to-edit |
96
- | 403 `not_self_built` | No `awm:client-cli` tag | UI-built duplication path |
97
- | 403 `agency_managed` | Awesomate-deployed workflow | Explain; offer to switch it off or on if that is what they want; route changes to support |
98
- | 429 `quota_exceeded` | Daily plan cap | Tell the user; never retry-loop |