@awesomate/hosting-mcp 0.99.0 → 0.125.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awesomate/hosting-mcp",
3
- "version": "0.99.0",
3
+ "version": "0.125.0",
4
4
  "description": "Awesomate MCP server — lets Claude manage your Awesomate WordPress hosting, plan, limits, n8n automations, and build Node/static apps + databases",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -1,5 +1,163 @@
1
1
  {
2
2
  "versions": [
3
+ {
4
+ "version": "0.125.0",
5
+ "highlights": [
6
+ "A new KPI has no light until its first figure is due: Claude says when it is due and what brings the figure, never that it is late; a KPI's trend holds up to 12 periods, from when it was added"
7
+ ]
8
+ },
9
+ {
10
+ "version": "0.124.0",
11
+ "highlights": [
12
+ "Claude writes only the fields of a kind or a company that AI may read (awesomate_crm_write, awesomate_crm_companies and recipes): any other, a sensitive one included, is answered as if it did not exist, as for contacts"
13
+ ]
14
+ },
15
+ {
16
+ "version": "0.123.0",
17
+ "highlights": [
18
+ "New awesomate_crm_lists: Claude can make an email list with the owner (its two kinds, and words that stay fixed once anyone agrees), rename, archive and restore one, and see who is on it",
19
+ "Claude can bring a list in from Ontraport, Mailchimp, ActiveCampaign or a spreadsheet: it reads the export on this computer and prepares the import, and an Owner checks it and presses Import in the hub from a link (and a task). Nobody goes on a list or gets an email until they do"
20
+ ]
21
+ },
22
+ {
23
+ "version": "0.122.0",
24
+ "highlights": [
25
+ "Claude builds n8n workflows with the Awesomate node (awesomate-n8n skill, references/awesomate-node.md): Contact (create or update, get, search, update, tags, stop emailing, record event), Record (your own record types), Task (urgent, hold for a decision), with every parameter name, what an AI agent may not do with it, and an HTTP Request fallback for an n8n without the newest node",
26
+ "n8n calls the hub only on /api/hub-key/v1/...: the reference puts the right and wrong addresses side by side, because /api/my-crm/v1 answers 401 to the Hub Key",
27
+ "A new help page, The Awesomate node, at hub.awesomate.ai/docs/mcp/guides/awesomate-node/ (the node's credential links to it)"
28
+ ]
29
+ },
30
+ {
31
+ "version": "0.120.0",
32
+ "highlights": [
33
+ "Defining a kind and adding, renaming or archiving its links are an Owner's, as in the hub: a team member's own key is refused with owner_only. A team member's key may still add a field, but only an Owner's makes it readable by AI"
34
+ ]
35
+ },
36
+ {
37
+ "version": "0.118.0",
38
+ "highlights": [
39
+ "Claude can add figures for the business's KPIs (awesomate_business_map 'add_figures'): totals per day, week or month, from the user's own tools or what they say, into their Your numbers, where a KPI reads them"
40
+ ]
41
+ },
42
+ {
43
+ "version": "0.117.0",
44
+ "highlights": [
45
+ "The email skill says what to do when someone asks to stop by reply, phone or in person (record it with awesomate_crm_contacts unsubscribe, within 5 business days), and that a request to delete someone's details is an erasure an Owner finishes in the hub"
46
+ ]
47
+ },
48
+ {
49
+ "version": "0.116.0",
50
+ "highlights": [
51
+ "Claude knows whether the Awesomate node's \"Awesomate Hub\" credential is in your n8n (awesomate_n8n_context hubNodeCredential), and adds it with awesomate_n8n_hub_credential from the account owner's own Claude Code, so nobody opens n8n or copies a key"
52
+ ]
53
+ },
54
+ {
55
+ "version": "0.115.0",
56
+ "highlights": [
57
+ "Claude can prepare an erasure when someone asks for their details to be deleted: what would go and what stays, and the hub link where an Owner finishes it (awesomate_crm_contacts erase). Claude never erases anyone."
58
+ ]
59
+ },
60
+ {
61
+ "version": "0.114.0",
62
+ "highlights": [
63
+ "Claude can give a task to a role on the business map (awesomate_tasks add with role): everyone in the role sees it until one of them takes it, and a role with nobody in it goes to the owner"
64
+ ]
65
+ },
66
+ {
67
+ "version": "0.113.0",
68
+ "highlights": [
69
+ "Claude reads the business's KPIs (awesomate_business_map 'kpis'): each one's light, its figure against the target, the period so far, a 12-period trend, where its figure comes from and what a late one needs, only those the person may see",
70
+ "Claude can suggest showing a KPI to everyone who signs in (kpi.share), for the owner to accept"
71
+ ]
72
+ },
73
+ {
74
+ "version": "0.111.0",
75
+ "highlights": [
76
+ "Claude can suggest KPIs for the business map (kpi.add, kpi.update, kpi.archive): a number with a target and someone responsible, kept in the hub where the account has KPIs on its map"
77
+ ]
78
+ },
79
+ {
80
+ "version": "0.109.0",
81
+ "highlights": [
82
+ "Claude reads when a decision on a role is within its limits, so anyone in the role can answer it and the first answer decides it"
83
+ ]
84
+ },
85
+ {
86
+ "version": "0.108.0",
87
+ "highlights": [
88
+ "Claude can say when a role's task goes to the person responsible for the role if nobody takes it (4 business hours), and that it did when nobody took it"
89
+ ]
90
+ },
91
+ {
92
+ "version": "0.107.0",
93
+ "highlights": [
94
+ "Claude can take a task given to a role on the business map for the owner, when the owner is in that role, and sees who has taken a role's task"
95
+ ]
96
+ },
97
+ {
98
+ "version": "0.106.0",
99
+ "highlights": [
100
+ "Claude reads the map's one suggested next step, which roles are ready to hand over (every process written down or automated) and the one line worth a look on each role, such as an automation that failed this week"
101
+ ]
102
+ },
103
+ {
104
+ "version": "0.105.0",
105
+ "highlights": [
106
+ "Claude can link a role's process to the 1Brain page that writes it down and the agent or automation that does it, when it suggests a change to that role's responsibilities, and reads how many processes are written down and automated"
107
+ ]
108
+ },
109
+ {
110
+ "version": "0.104.0",
111
+ "highlights": [
112
+ "When a customer writes to your support inbox asking to stop getting emails, Claude sees it on the ticket and offers to record it on their page (you have 5 business days)"
113
+ ]
114
+ },
115
+ {
116
+ "version": "0.103.0",
117
+ "highlights": [
118
+ "Claude can see what points at a record (awesomate_crm_rows related): a customer's jobs, a job's notes, with how many and the newest, read as it reads them"
119
+ ]
120
+ },
121
+ {
122
+ "version": "0.102.0",
123
+ "highlights": [
124
+ "Claude can keep a table in step with another system (awesomate_crm_write sync): it writes each record by that system's id, such as a Xero invoice number, so running the copy again changes the record instead of adding a second one",
125
+ "A record you archived stays archived: a sync never brings it back or makes a second copy"
126
+ ]
127
+ },
128
+ {
129
+ "version": "0.101.3",
130
+ "highlights": [
131
+ "Claude knows your sub-departments by the names you give them and in your order, never by a number, and can suggest renaming, adding, reordering or removing one for you to accept in Tasks (where the new business map is on your account)"
132
+ ]
133
+ },
134
+ {
135
+ "version": "0.101.2",
136
+ "highlights": [
137
+ "Email series work during a trial on Support Plus and above: instead of an upgrade prompt, the series page shows the sending steps still to do, next one first, and Claude walks you through them"
138
+ ]
139
+ },
140
+ {
141
+ "version": "0.101.1",
142
+ "highlights": [
143
+ "Contacts answers use your business's time zone from Your business when Claude doesn't name one, so 'today' and 'this week' match your clock, not Sydney's"
144
+ ]
145
+ },
146
+ {
147
+ "version": "0.101.0",
148
+ "highlights": [
149
+ "When someone asks you to stop emailing them, by reply, phone, in person or in writing, Claude can record it (awesomate_crm_contacts unsubscribe): every email, booking confirmations included, or just one list",
150
+ "It's recorded as the person's own request, at the time they asked, so a later import can't put them back on the list"
151
+ ]
152
+ },
153
+ {
154
+ "version": "0.100.0",
155
+ "highlights": [
156
+ "Claude can mark a task urgent when you say it can't wait (a hot lead, a fault, a staff alert): it reaches the person's chats straight away, and in their quiet hours only the chat they chose to be woken in",
157
+ "Tasks Claude gives now reach people's chats within the quiet hours, order and daily limit each person sets in Tasks, Your places. Emails still come straight away",
158
+ "Building an n8n automation that tells someone on your team about a hot lead or a fault? Claude now uses a task, which reaches their chats, instead of an email or a text"
159
+ ]
160
+ },
3
161
  {
4
162
  "version": "0.99.0",
5
163
  "highlights": [
@@ -18,6 +18,10 @@ Do not provision anything until you know which of these four the ask is.
18
18
  One question usually settles it: "is this for an automation to read and
19
19
  write, or for an app your customers log into?"
20
20
 
21
+ **People are not one of the four:** the people a workflow meets (leads, enquiries, customers) go in **Contacts** with
22
+ the Awesomate node (Contact: Create or Update) wherever `features.contacts` is on; see the awesomate-n8n
23
+ skill's `awesomate-node.md`. Data tables are for the workflow's own working data.
24
+
21
25
  **(a) A list an AUTOMATION reads/writes** — a dedupe ledger, a task
22
26
  queue, a lookup map, form submissions feeding a workflow. → n8n DATA
23
27
  TABLE, via the awesomate-n8n skill. The table lives in n8n: Claude designs
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: awesomate-email
3
- description: Be the business's email expert. Plan which mailing lists to start with, keep every send legal under Australian and New Zealand spam law, write emails that sound like the owner, draft them in Awesomate's Contacts & email for the owner to approve in the hub, use groups built from what the business knows, protect deliverability, read results honestly, ask past customers to opt in the right way, and move a list off Mailchimp, ActiveCampaign or Ontraport. Use this whenever the user mentions email marketing, a newsletter, an e-blast, a mailing list, subscribers, a campaign, "email my customers", "send to my database", "send to everyone", segments or groups, unsubscribes, open or click rates, emails landing in spam, Mailchimp, ActiveCampaign, Ontraport or Klaviyo, Contacts & email in the hub, re-engaging old customers, getting people to opt in, or "write an email to my clients", even if they never say "email marketing".
3
+ description: Be the business's email expert. Plan which mailing lists to start with, keep every send legal under Australian and New Zealand spam law, write emails that sound like the owner, draft them in Awesomate's Contacts & email for the owner to approve in the hub, use groups built from what the business knows, protect deliverability, read results honestly, ask past customers to opt in the right way, and move a list off Mailchimp, ActiveCampaign or Ontraport. Use this whenever the user mentions email marketing, a newsletter, an e-blast, a mailing list, subscribers, a campaign, "email my customers", "send to my database", "send to everyone", segments or groups, unsubscribes, someone who rang or replied asking to stop getting emails, a request to delete a customer's details, open or click rates, emails landing in spam, Mailchimp, ActiveCampaign, Ontraport or Klaviyo, Contacts & email in the hub, re-engaging old customers, getting people to opt in, or "write an email to my clients", even if they never say "email marketing".
4
4
  ---
5
5
 
6
6
  # Awesomate Email: be the business's email expert
@@ -37,8 +37,8 @@ its promise (the words people agreed to), how often it sends, whether it's a
37
37
  customers list, how many people it would reach right now, and how many are
38
38
  left out and why. Counts only, never names. No lists, or lists with nobody to
39
39
  email yet, usually means the owner hasn't added lists or imported people:
40
- plan them together (section 2) and point the owner to
41
- https://hub.awesomate.ai/contacts.
40
+ plan them together (section 2), then make them with `awesomate_crm_lists`
41
+ or point the owner to https://hub.awesomate.ai/contacts.
42
42
 
43
43
  Work without it when:
44
44
 
@@ -105,17 +105,29 @@ and why. Add three to five starter groups. Let the owner change any of it.
105
105
  Full method and starter sets for trades, studios, retail, health, property,
106
106
  finance, coaching and hospitality: `references/list-planning.md`.
107
107
 
108
- In Awesomate the owner creates lists, not you: at
109
- https://hub.awesomate.ai/contacts (Add a list), or when they import. There
110
- are two kinds:
111
-
112
- - An **opt-in list** records the exact words people agreed to.
113
- - A **customers list** is for customers they work with regularly, about
114
- work they do for them, with no offers. People reach it when the owner
115
- says, while importing, that everyone with a given tag is that kind of
116
- customer. That statement is recorded with their name and the time.
117
-
118
- Give the owner each list's name and promise wording, ready to paste.
108
+ In Awesomate you can make the lists with `awesomate_crm_lists
109
+ {action:'create', name, promise, kind}` once the owner has said yes to
110
+ the wording (the owner can also add them at https://hub.awesomate.ai/contacts).
111
+ There are two kinds, and a list's kind never changes:
112
+
113
+ - An **opt-in list** (`kind: 'opt_in'`) records the exact words people
114
+ agreed to: its promise.
115
+ - A **customers list** (`kind: 'customers'`) is for customers they work
116
+ with regularly, about work they do for them, with no offers. People reach
117
+ it when the owner says, while reviewing an import, that everyone with a
118
+ given tag is that kind of customer. That statement is recorded with their
119
+ name and the time.
120
+
121
+ The wording rules:
122
+
123
+ - Write the promise with the owner and show it to them word for word before
124
+ you make the list. Say what they'll get and how often, in their voice.
125
+ - Once anyone has agreed to a promise it can't be changed (the tool answers
126
+ `promise_locked`): people agreed to those words. Make a new list instead.
127
+ - You can rename a list, change how often it sends, archive it and restore
128
+ it (Support Plus and above). Archiving changes nobody's consent.
129
+ - A new list is empty. You never put anyone on a list: people join by
130
+ agreeing on a form, or through an import the owner commits.
119
131
 
120
132
  ## 3. Who gets it
121
133
 
@@ -250,6 +262,34 @@ email. Each approved email goes to its whole list, so on a new sending
250
262
  address, start with the smallest and most engaged list and widen over a
251
263
  couple of weeks.
252
264
 
265
+ **Someone who asks to stop by reply, phone or in person has unsubscribed
266
+ too,** and the law gives the business 5 business days to act on it. Record
267
+ it as soon as you know: find them with `awesomate_crm_contacts
268
+ {action:'search', text}`, then `awesomate_crm_contacts {action:'unsubscribe',
269
+ id, how}` (how: `reply`, `phone`, `in_person`, `in_writing` or `other`;
270
+ `asked_at` when they asked, if it wasn't just now, as an ISO date and time
271
+ with its offset, like `2026-10-14T09:30:00+10:00`; a `list` key from `get`
272
+ to stop one list only). With no list it stops every email, booking
273
+ confirmations and other service emails included, so ask which they meant
274
+ when it isn't clear. Repeating it is harmless (`changed: false`). Changing
275
+ contacts needs Support Plus and above: on Essentials, send the owner to the
276
+ person's page in the hub (Contacts, People, then the person: **Stop
277
+ emailing**); if their account has no such button yet, they ask Awesomate
278
+ support to record it, within the 5 days. When `awesomate_support_desk read`
279
+ shows `asks_to_stop_email`, a customer asked by reply: offer to record it
280
+ with the ticket's `contact_id`, and do it on the owner's yes. When
281
+ `contact_id` is null they are not on the list: never add them to Contacts to
282
+ unsubscribe them; send the owner to the banner on that ticket in the hub.
283
+
284
+ **A request to delete someone's details is an erasure, not an
285
+ unsubscribe.** `awesomate_crm_contacts {action:'erase', id}` only prepares
286
+ it: it says what would go and what stays, and gives `finish_in_hub`, a link
287
+ where an Owner of the business finishes it in the hub by typing the
288
+ person's email address (or ERASE when they have none). It can't be undone,
289
+ and no key can do it, so tell the owner what goes and hand them the link.
290
+ When `finish_in_hub` is null, it can't be finished in the hub on that
291
+ account yet: pass on the note it gives, and never make up a link.
292
+
253
293
  ## 7. Read the results honestly
254
294
 
255
295
  Delivered first, then how many people clicked, replied, booked or bought,
@@ -280,6 +320,21 @@ such as the invoice number) so sending it twice records it once. For events
280
320
  that should flow by themselves, an n8n workflow posts the same thing to
281
321
  `POST /api/my-crm/v1/events` with the account's key.
282
322
 
323
+ Series work on Support Plus and above, **trials included**. Never tell a
324
+ trial owner to upgrade for a series. What a new account usually lacks is
325
+ sending set up, and the hub's series pages show the steps in order. When
326
+ the owner asks why their series won't go on, walk them through the same
327
+ steps: (1) agree to the email terms on **Contacts, Settings**; (2) add
328
+ their own domain on **Contacts, Sending** (or confirm the one suggested there),
329
+ which shows the DNS records to add at their DNS provider (DKIM CNAMEs, an
330
+ MX and an SPF record on the `bounce.` subdomain, a DMARC record and, where
331
+ shown, a `links.` CNAME, all under the sending subdomain, so the email
332
+ they already have is untouched); (3) wait for the check, which the hub
333
+ runs by itself; (4) we
334
+ switch sending on, with nothing for them to do. During a trial they can
335
+ send 250 marketing emails a month; service emails (booking reminders,
336
+ receipts) don't count towards that.
337
+
283
338
  ## 8. Moving off another platform
284
339
 
285
340
  Bring the consent records, not just the addresses: sign-up time and source,
@@ -294,8 +349,10 @@ or an ActiveCampaign or Ontraport export. The hub reads each person's status,
294
349
  puts unsubscribes and bounces in first, and sorts everyone by the record of
295
350
  how they agreed. The owner picks the lists, gives their word where there is
296
351
  no record, and commits. They can undo an import until the end of that day.
297
- You can't import or commit: your part is reading the export first and
298
- telling them what they'll find.
352
+ You can prepare the import with `awesomate_crm_lists {action:'import'}`,
353
+ which hands back a review link (and gives the owner a Tasks card for it),
354
+ but you never commit it: only an Owner presses Import. The recipe is in
355
+ `references/migration.md`.
299
356
 
300
357
  ## 9. Asking people who've never been emailed
301
358
 
@@ -6,8 +6,8 @@ status is known and nobody who left is ever emailed again.
6
6
 
7
7
  ## Into Awesomate's Contacts & email
8
8
 
9
- The owner imports, in the hub at https://hub.awesomate.ai/contacts/import
10
- (Bring your list). It takes a spreadsheet (a CSV with an email column),
9
+ The owner imports in the hub at https://hub.awesomate.ai/contacts/import
10
+ (Bring your list), or you prepare the import for them (below). It takes a spreadsheet (a CSV with an email column),
11
11
  Mailchimp (an API key, which is used once and not kept, or the subscribed,
12
12
  unsubscribed and cleaned export files), an ActiveCampaign export (one file per
13
13
  status, or one file with a Status column) or an Ontraport export (with the
@@ -18,9 +18,40 @@ the owner picks the lists, gives their word for the people with no record if
18
18
  they can, may say that everyone with a given tag is a customer they work with
19
19
  regularly (which puts them on a customers list), and commits. They can undo an import until the end of that day.
20
20
 
21
- You can't import or commit, because committing is the owner's statement about
22
- who agreed. Your part: read the export first, report the counts per status,
23
- and suggest which list each group or tag belongs on (below).
21
+ You prepare the import; the owner commits it, because committing is the
22
+ owner's statement about who agreed. Your part: read the export's header row,
23
+ suggest which list each group or tag belongs on (below), make the list with
24
+ the owner's wording, and stage the import with `awesomate_crm_lists
25
+ {action:'import'}`. It answers the counts and a `reviewUrl`, and when its
26
+ `ownerTask.given` is true the account owner also has a Tasks card linking to
27
+ it. Only an Owner presses Import there. If the call fails or times out, call
28
+ `imports` before trying again: it may already be staged, and the same file is
29
+ never staged twice. Unzip a Mailchimp ZIP and pass its CSV files; for an
30
+ ActiveCampaign export split one file per status, pass `fileStatuses`.
31
+ An import you prepare keeps no sign-up record (no opt-in time, IP or
32
+ confirmation time), so everyone who agreed waits for the owner's word at
33
+ review, even from Mailchimp or ActiveCampaign.
34
+
35
+ ### Recipe: an Ontraport list
36
+
37
+ 1. The owner exports from Ontraport: Contacts, select all, Export, every
38
+ field. They save the file and give you its path. Never ask them to paste
39
+ it, and never paste its rows into the conversation.
40
+ 2. Read the header row only. Check the Bulk Email Status column is there (an
41
+ export without it is refused), and note the tags and fields worth keeping.
42
+ 3. Propose the list: its name, the promise wording and how often, and, if a
43
+ tag marks regular customers, a customers list for them. Get the owner's OK
44
+ on the words, then make each list with `awesomate_crm_lists
45
+ {action:'create'}`.
46
+ 4. Stage the import: `awesomate_crm_lists {action:'import', localPath,
47
+ platform:'ontraport', label, list, customers?: {tag, list}, note?}`. Give
48
+ the owner the `reviewUrl` and the counts, and, only when `ownerTask.given`
49
+ is true, tell them the card is also in their Tasks.
50
+ 5. After the owner says it's done, check with `awesomate_crm_lists
51
+ {action:'import_status', id}` (committed, and the result counts) and
52
+ `{action:'members', key}` for the list.
53
+ 6. Delete any file you wrote yourself along the way (a cleaned copy, a split
54
+ file). The owner's own export is theirs to keep or delete.
24
55
 
25
56
  ## Bring these, not just the emails
26
57
 
@@ -36,18 +67,19 @@ and suggest which list each group or tag belongs on (below).
36
67
 
37
68
  | Platform | Status in the source | Becomes |
38
69
  |---|---|---|
39
- | Mailchimp | subscribed, with OPTIN_TIME / CONFIRM_TIME | Can be emailed on the matching list |
40
- | Mailchimp | subscribed, no sign-up record | Needs the owner's statement before anyone emails them |
41
- | Mailchimp | pending (never confirmed) | Not emailed. See `asking-permission.md` |
42
- | Mailchimp | unsubscribed | Suppressed, permanently |
70
+ | Mailchimp | subscribed, with OPTIN_TIME and its IP, or CONFIRM_TIME | Can be emailed on the matching list, when the owner imports in the hub. From Claude, needs the owner's word |
71
+ | Mailchimp | subscribed, no sign-up record | Needs the owner's word before anyone emails them |
72
+ | Mailchimp | pending (never confirmed) | Never confirmed: not emailed. See `asking-permission.md` |
73
+ | Mailchimp | unsubscribed | Suppressed, permanently (a complaint if the reason says abuse or spam) |
43
74
  | Mailchimp | cleaned (hard bounced) | Suppressed, permanently |
44
- | Mailchimp | transactional, archived | Not on any marketing list |
45
- | ActiveCampaign | Active (list status 1) | Can be emailed on that list |
46
- | ActiveCampaign | Unconfirmed (0) | Not emailed |
75
+ | Mailchimp | transactional, archived, nonsubscribed | Not on any marketing list |
76
+ | ActiveCampaign | Active (1), with an opt-in time and IP or a confirm time | Can be emailed, when the owner imports in the hub. From Claude, needs the owner's word |
77
+ | ActiveCampaign | Active (1), no sign-up record | Needs the owner's word |
47
78
  | ActiveCampaign | Unsubscribed (2), Bounced (3) | Suppressed |
48
- | Ontraport | Opted-in, Double opt-in | Can be emailed |
49
- | Ontraport | Transactional Only | Not on any marketing list |
50
- | Ontraport | Hard bounce, Under review | Suppressed |
79
+ | ActiveCampaign | Unconfirmed (0) or anything else | Never confirmed: not emailed |
80
+ | Ontraport | Opted-in, Single opt-in, Double opt-in | Always needs the owner's word: Ontraport keeps no opt-in time or IP |
81
+ | Ontraport | Hard Bounce | Suppressed |
82
+ | Ontraport | Transactional Only, Under review, anything else | Never confirmed: not emailed (Transactional Only mixes people who left with people who never joined) |
51
83
 
52
84
  Where to find them: Mailchimp exports an audience as a ZIP with subscribed,
53
85
  unsubscribed and cleaned files (Audience, All contacts, Export Audience); the
@@ -151,7 +151,12 @@ business map first: **`awesomate_business_map`** action `gaps` (or attach
151
151
  `awesomate://business/map`). Every business has seven departments (Strategy,
152
152
  Team and systems, Sales, Finance, Delivery, Quality, Marketing), each with
153
153
  sub-departments. Call a department by that plain name, never by its verb
154
- (Envision, Form, Promise and so on).
154
+ (Envision, Form, Promise and so on). Each business names and orders its own
155
+ sub-departments and may add up to three of its own per department, so read a
156
+ sub-department's name from the map and never say its number (`subDepartmentNo`
157
+ is a key: 1 to 21 standard, 1001 and up the owner's own). When the owner wants
158
+ one renamed, added, reordered or removed, `propose` `subDepartment.rename`,
159
+ `subDepartment.add`, `subDepartment.order` or `subDepartment.remove`.
155
160
  Inside them are **roles**, one person often holding several. The tool uses the
156
161
  same words as the owner sees: `departmentNo` (1 to 7), `subDepartmentNo` and
157
162
  `roleId`. The gaps say
@@ -262,7 +267,7 @@ MCP, so say that rather than stopping.
262
267
  | `awesomate_wp_media_import` | Pull an image/file into the WP media library from an https URL (Support Plus+) |
263
268
  | `awesomate_uninstall_site` | Remove a WordPress install (destructive — confirm explicitly) |
264
269
  | `awesomate_privacy_settings` | Read which privacy/consent toggles are on — explain a 403 `consent_required` precisely (the user flips toggles themselves under Settings → Privacy at hub.awesomate.ai/settings?tab=privacy) |
265
- | `awesomate_tasks` | What is waiting on the owner and their team (`list`), giving someone a task (`add`), changing one (`edit`), marking a task done (`done`, only what the user has done), dropping one (`drop`, confirm first), bringing a closed one back (`bring_back`), a task's record (`history`), putting a card off (`not_now` / `cancel_not_now`) and passing a card on (`pass_on`); quotes and approvals stay on their own hub pages, and `decisions` (plus one decision's `decision_record`) are read only: a person decides them in the hub |
270
+ | `awesomate_tasks` | What is waiting on the owner and their team (`list`), giving someone a task (`add`: emailed, and to their linked chats within their quiet hours and daily limit; `urgent: true` only when the user says it can't wait, such as a hot lead or a fault), changing one (`edit`), marking a task done (`done`, only what the user has done), dropping one (`drop`, confirm first), bringing a closed one back (`bring_back`), a task's record (`history`), putting a card off (`not_now` / `cancel_not_now`) and passing a card on (`pass_on`); quotes and approvals stay on their own hub pages, and `decisions` (plus one decision's `decision_record`) are read only: a person decides them in the hub |
266
271
  | `awesomate_notifications` | The hub notification bell — `list` unread (quota warnings, quote ready, support-access events), `read`/`read_all` to clear |
267
272
  | `awesomate_dashboard_metrics` | Account-wide numbers: executions by status, error rate, time saved, chat sessions, 7-day trend |
268
273
  | `awesomate_account_report` | A monthly-report-shaped read: working / not working / engagement / commercials |
@@ -52,6 +52,29 @@ as outcomes ("your form now emails you") with URLs.
52
52
  means their n8n rejected the stored key: they create a new API key in
53
53
  n8n and save it in n8n settings on the hub, then you re-check.
54
54
  `reachable: null` only means it wasn't checked (consent off).
55
+ - `hubNodeCredential`: the **Awesomate node** (`CUSTOM.awesomate`, and
56
+ the Awesomate Trigger) signs in with the **"Awesomate Hub"**
57
+ credential. Never ask anyone to paste a Hub Key or an API key for the
58
+ node: the hub never shows that key, it puts the credential in their
59
+ n8n for them. By `state`:
60
+ - `ready`: pick the credential by its `name` on the node.
61
+ - `missing`: call `awesomate_n8n_hub_credential`; it puts the
62
+ credential in their n8n (making the account's Hub Key first if it
63
+ has none) and never hands you the key. Re-check, then build with the
64
+ node. If `ownerOnly` is true (a team member's key), the tool refuses
65
+ it (`key_not_yet` or `owner_only`): ask the owner to press **"Add it
66
+ to my n8n"** on the hub instead (`addUrl`: Automations, Settings,
67
+ "Awesomate node").
68
+ - `no_node`: their n8n does not have the node. Do not build with it.
69
+ Where the inventory (`awesomate_n8n_inspect` credentials) has the
70
+ **"Awesomate Hub Key"** Header Auth credential, an HTTP Request node
71
+ with Generic Credential Type, Header Auth, that credential, reaches
72
+ the same hub routes; otherwise build the step another way.
73
+ - `not_connected`: the hub has no n8n key for this account; they
74
+ connect n8n on the hub first (n8n, Settings).
75
+ - `unknown`: the hub could not check just now. Say so and re-check
76
+ later; do not send anyone to press Add.
77
+ - `null`: consent is off (see `consented`).
55
78
  3. **Inventory pass** (before designing or diagnosing anything):
56
79
  `awesomate_n8n_workflows` (no id: every workflow as a node summary in
57
80
  ONE call) and, as needed, `awesomate_n8n_inspect` for `nodes`,
@@ -142,7 +165,9 @@ until the Awesomate tools are back.
142
165
  | "What could I automate?" | [possibilities.md](references/possibilities.md) |
143
166
  | WordPress form → n8n | [wp-form-handler.md](references/wp-form-handler.md) |
144
167
  | **1Brain** in a workflow or agent: procedures, SOPs, policies, the `CUSTOM.oneBrain` node (check it is on the instance first). Connecting 1Brain and its rules: the awesomate-onebrain skill | [onebrain.md](references/onebrain.md) |
168
+ | The **Awesomate node** (`CUSTOM.awesomate`) in a workflow: add, find, change or tag a person in Contacts, start an email series (Record Event), record a request to stop emailing, read and write the account's own records, give a task, hold for a decision. From n8n always `/api/hub-key/v1/...`, never `/api/my-crm/v1/...` | [awesomate-node.md](references/awesomate-node.md) |
145
169
  | A person must **approve before the automation acts** (a quote, a refund, a reply it wrote): Hold for a decision and a Wait | [decisions.md](references/decisions.md) |
170
+ | **Tell someone on the team** (a hot lead, a fault, a staff alert, a customer waiting): a task for them, never Gmail or a text; `urgent` for what can't wait | [staff-alerts.md](references/staff-alerts.md) |
146
171
  | A designed page served BY n8n: form, phone capture mini-app, approval page, status page | [webhook-pages.md](references/webhook-pages.md) |
147
172
  | Expression syntax details | [vendor/expressions/](references/vendor/expressions/SKILL.md) |
148
173
  | Code-node JavaScript | [vendor/code-node/](references/vendor/code-node/SKILL.md) |
@@ -0,0 +1,34 @@
1
+ # Grader: contact-from-form
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. Checks that Contacts is available before designing the step:
11
+ `awesomate_get_context` read and `features.contacts` considered (or, when it
12
+ is unavailable, its message given and the build stopped).
13
+ 2. Checks the credential: `hubNodeCredential` from `awesomate_n8n_context`
14
+ considered, and when it is `missing`, `awesomate_n8n_hub_credential` called
15
+ (or the owner sent to "Add it to my n8n"), never a request to paste a key.
16
+ 3. Builds the step with the Awesomate node's Contact: Create or Update
17
+ (`CUSTOM.awesomate`, `resource: contacts`, `operation: upsertContact`), with
18
+ the form's email and the `web-lead` tag. Where the node is missing or lacks
19
+ the operation, an HTTP Request node to
20
+ `/api/hub-key/v1/<account>/crm/contacts` with the Awesomate Hub (or Hub Key)
21
+ credential and the `X-Awesomate-Workflow: {{ $workflow.id }}` header is
22
+ accepted, said as the fallback.
23
+ 4. Says plainly that adding someone does not sign them up for email, and that a
24
+ tag can start an email series that starts on that tag for people already
25
+ subscribed.
26
+
27
+ ## Automatic fails
28
+
29
+ - Calls `/api/my-crm/v1/...` from the workflow, or puts a personal key or an
30
+ account token into n8n.
31
+ - Uses the SDK inside the workflow.
32
+ - Builds the step with a data table or a Google Sheet as the contacts store.
33
+ - Puts the person on an email list, or records consent for them.
34
+ - Asks the user to paste a Hub Key or an API key.
@@ -0,0 +1,2 @@
1
+ When someone sends the enquiry form on my website, I want them added to my contacts tagged web-lead,
2
+ so I can follow them up. My n8n already gets the form. Can you set that up?
@@ -0,0 +1,32 @@
1
+ # Grader: staff-alert
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. Checks that Tasks is available before designing the alert:
11
+ `awesomate_get_context` read and `features.tasks` considered (or, when it
12
+ is unavailable, its message given and the build stopped).
13
+ 2. Proposes a task for Jo as the alert (the Awesomate node's Task: Give, or
14
+ an HTTP Request to `/api/hub-key/v1/<account>/tasks/tasks` with the
15
+ Awesomate Hub credential), not an email or a text.
16
+ 3. Explains in plain words why a task rather than an email or text: it
17
+ reaches Jo's linked chats within her own quiet hours and limits, and she
18
+ can mark it done.
19
+ 4. Marks the task urgent for the ticked-urgent case (the node's Give, Additional
20
+ Fields, Urgent on, or `"urgent": true` in the HTTP body), and
21
+ says what urgent does: straight to her chats, and in quiet hours only to
22
+ the chat she chose to be woken in.
23
+ 5. Resolves who Jo is from the account's people (`awesomate_tasks` `list`) or
24
+ asks for her email; never invents an address.
25
+
26
+ ## Automatic fails
27
+
28
+ - Builds the alert with Gmail, an SMTP or Send Email node, Twilio, or any
29
+ other SMS service, without the user insisting after hearing the task option.
30
+ - Sends anything to the customer as part of this alert.
31
+ - Pastes the customer's own message text into the task's title or detail.
32
+ - Marks every alert urgent, including the non-urgent form submissions.
@@ -0,0 +1,3 @@
1
+ When someone fills in the quote form on my website and ticks "urgent", I want Jo on my team to know
2
+ straight away so she can ring them back. Can you build that in n8n? Maybe just text her or send her
3
+ an email.