@awesomate/hosting-mcp 0.18.0 → 0.19.1

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.
@@ -3,6 +3,34 @@
3
3
  Diagnosis playbook. Work the flow top-to-bottom; do not jump to fixes before
4
4
  you have the failing execution's detail.
5
5
 
6
+
7
+ ## "Could not create the draft" / writes fail while reads work
8
+
9
+ If reads, `awesomate_n8n_context` and `validate` all succeed but every WRITE
10
+ (create draft, activate, promote, test-fire) fails, the cause is almost always
11
+ the account's stored n8n API key — not the hub, not Cloudflare, not the
12
+ workflow JSON. Validation runs on Awesomate's side and never touches the
13
+ instance, which is exactly why it keeps passing.
14
+
15
+ The server says so explicitly: HTTP **409** with `code: n8n_credential_invalid`.
16
+ Older builds reported this as a 502, which reads like an outage — if you see a
17
+ bare 502 on writes only, suspect the key before you suspect the platform.
18
+
19
+ **Tell the user to do this, in this order:**
20
+
21
+ 1. Open their n8n (the response's `instanceUrl`, e.g. `https://<slug>.awesomate.io`)
22
+ → **Settings → n8n API** → **Create an API key**. Copy it.
23
+ 2. Open **https://hub.awesomate.ai/n8n/settings** → paste it into
24
+ **"New n8n API Key"** → save. The status chip should go from
25
+ *Key rejected* to *Connected*.
26
+ 3. Retry the action.
27
+
28
+ Do not retry before they confirm the new key is saved, and do not go probing
29
+ hub or Cloudflare status — a genuine hub problem breaks reads too.
30
+
31
+ Common causes: the key was revoked or regenerated in n8n, or the instance was
32
+ rebuilt (a rebuilt instance shows 0 workflows and invalidates every old key).
33
+
6
34
  ## Diagnosis flow
7
35
 
8
36
  1. `awesomate_n8n_context` — confirm consent flags, capabilities, and the
@@ -20,9 +20,10 @@ Be honest about limits: these are the signals that *let* you rank and be cited
20
20
  - **WordPress** → drive it through WP-CLI via the awesomate-hosting skill
21
21
  (`wp` passthrough). Install a free SEO plugin + let it generate the sitemap
22
22
  rather than hand-writing files (see §WordPress).
23
- - **A shop (WooCommerce)** → also use the `woo-agent-storefront` skill for
24
- AI-shopping feeds + a store `llms.txt`, and `woo-catalog-perfection` for
25
- product-data quality. This skill covers the site-level SEO around it.
23
+ - **A shop (WooCommerce)** → same WordPress path, plus `Product` JSON-LD on
24
+ product pages and product-data quality (real titles, descriptions, images,
25
+ prices) drive it through WP-CLI like any WordPress site. This skill
26
+ covers the site-level SEO around the shop.
26
27
 
27
28
  ## 1. Static / Node — write these
28
29
 
@@ -56,6 +57,10 @@ Through the awesomate-hosting skill's `wp` passthrough:
56
57
  - Confirm the sitemap is live (`/sitemap_index.xml` or `/sitemap.xml`) and
57
58
  `robots.txt` references it.
58
59
  - Add an `llms.txt` at the site root for AI discoverability (the plugin won't).
60
+ - Posts and pages can be created/updated directly via `awesomate_wp_post`
61
+ (drafts first — the user approves publishing). Useful for adding the content
62
+ pages that back up `llms.txt` — a services overview, an FAQ, an about page —
63
+ when the site is thin on machine-readable substance.
59
64
  - WordPress is the recommended stack precisely when SEO/organic reach matters —
60
65
  lean into it here.
61
66
 
@@ -74,6 +79,36 @@ Through the awesomate-hosting skill's `wp` passthrough:
74
79
  Tell the user the next step is submitting the sitemap in Google Search Console
75
80
  (you can't do that for them) — offer a one-paragraph how-to if they want it.
76
81
 
82
+ ## 4. Ongoing upkeep — the seo-healthcheck
83
+
84
+ SEO decays quietly: a plugin update flips an option, an edge rule starts
85
+ challenging crawlers, a sitemap stops regenerating. Run this routine whenever
86
+ the user asks to "check SEO", and after any content change:
87
+
88
+ 1. **Content in the raw HTML** — `curl -s https://DOMAIN/page` and confirm the
89
+ key content is actually in the response, not rendered later by JavaScript.
90
+ 2. **Sitemap** — `/sitemap.xml` (WP: `/sitemap_index.xml`) returns 200 and
91
+ `<lastmod>` is fresh. A months-old lastmod on a site that changed last week
92
+ means generation is broken, not that nothing changed.
93
+ 3. **robots.txt + llms.txt** — both exist, and `llms.txt` still mentions the
94
+ current offerings. A stale llms.txt misdescribes the business to every AI
95
+ assistant that reads it.
96
+ 4. **AI crawlers not blocked at the edge** —
97
+ `curl -A "GPTBot" -s -o /dev/null -w "%{http_code}" https://DOMAIN/`
98
+ (repeat with `ClaudeBot`) returns 200, not 403 or a challenge page.
99
+ Where to fix each case: [references/ai-discoverability.md](references/ai-discoverability.md).
100
+ 5. **WordPress only: `blog_public` must be 1** — one checkbox ("Discourage
101
+ search engines") silently de-indexes the whole site. Read it via
102
+ `awesomate_run_wp_cli` with args `['option','get','blog_public']`; if it's
103
+ 0, fix with `['option','update','blog_public','1']` (allowlisted).
104
+
105
+ Report pass/fail per check, with the fix for each failure.
106
+
107
+ **Make it automatic:** offer — once — to build a scheduled n8n workflow (via
108
+ the awesomate-n8n skill) that runs these checks weekly and emails the user the
109
+ result. A weekly email is what turns "SEO as ongoing" from a good intention
110
+ into a mechanism.
111
+
77
112
  ## Hard rules
78
113
  - Never fabricate content, reviews, or business facts to "help SEO".
79
114
  - Never claim these guarantee a ranking — they make the site *eligible* and