@awesomate/hosting-mcp 0.22.0 → 0.22.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.
package/dist/index.js CHANGED
@@ -41224,7 +41224,7 @@ server.registerTool(
41224
41224
  server.registerTool(
41225
41225
  "awesomate_site_create",
41226
41226
  {
41227
- description: "Create a WordPress site on the user's hosting. Plan limits are enforced server-side (429/403 with an upgrade hint if they're at their cap \u2014 relay it). Ask 'live or dev?' first per the awesomate-hosting skill. Returns the new site's admin details.",
41227
+ description: "Create a WordPress site on the user's hosting. Plan limits are enforced server-side (429/403 with an upgrade hint if they're at their cap \u2014 relay it; 409 means WordPress already exists at that domain). Ask 'live or dev?' first per the awesomate-hosting skill. Omit `domain` and the next free siteN.{primary} subdomain is chosen for you. ASYNC and returns only {success:true} \u2014 no domain, no admin details: poll awesomate_list_sites to learn the name, and expect HTTPS to refuse connections for a minute or two while AutoSSL issues even though the site is already serving over http. See 'After creating a site' in the skill.",
41228
41228
  inputSchema: {
41229
41229
  domain: external_exports.string().optional().describe("Custom domain if they have one; omit for a default *.awesomate.site subdomain"),
41230
41230
  siteTitle: external_exports.string().optional(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awesomate/hosting-mcp",
3
- "version": "0.22.0",
3
+ "version": "0.22.1",
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",
@@ -89,6 +89,21 @@ proxy failures, resuming a connect, support report) ·
89
89
  `references/rest-fallback.md` (no `awesomate_*` tools — serve over REST) ·
90
90
  `references/voice.md` (how to talk to a non-technical owner).
91
91
 
92
+ ## After creating a site
93
+
94
+ Creation is queued, not instant, and the certificate lags the install. For a
95
+ minute or two afterwards `https://` refuses the connection while `http://`
96
+ already returns real WordPress HTML — and `sslActive` in the site list may
97
+ already read `true`, because it reports intent rather than the live cert.
98
+
99
+ That combination is the expected intermediate state, not a contradiction and
100
+ not a failed build. Confirm over plain HTTP, say the certificate is still
101
+ issuing, and poll until HTTPS answers. Never delete and recreate the site or
102
+ start debugging DNS on the strength of it.
103
+
104
+ New sites come up on the host's default theme (`hello-elementor`). A fresh
105
+ install is not evidence that a custom theme shipped.
106
+
92
107
  ## 0a. Tool map — reach for it when
93
108
 
94
109
  | Tool | Reach for it when |
@@ -100,7 +115,7 @@ proxy failures, resuming a connect, support report) ·
100
115
  | `awesomate_get_hosting_status` | Is hosting provisioned at all — eligible/provisioned flags, in-progress step, primary domain, DNS targets. Check before suggesting any site action |
101
116
  | `awesomate_get_hosting_account` | cPanel account details: package, server, provisioned-at, masked username |
102
117
  | `awesomate_list_sites` | What WordPress sites exist on this account |
103
- | `awesomate_site_create` | Spin up a new WordPress site (check limits first) |
118
+ | `awesomate_site_create` | Spin up a new WordPress site (check limits first). Async — poll `awesomate_list_sites` for the name, and expect HTTPS to fail for a minute or two while AutoSSL issues; see **After creating a site** below |
104
119
  | `awesomate_list_domains` | What domains are attached, and to which site |
105
120
  | `awesomate_domain_add` | Attach a custom domain to a site |
106
121
  | `awesomate_dns_check` | Live answer to "where does this domain actually point" — before and after any DNS change |
@@ -26,5 +26,50 @@ GET with `Authorization: Bearer <pat>`:
26
26
  | `awesomate_list_domains` | `GET {apiBase}/api/client-hosting/domains` |
27
27
  | `awesomate_get_limits` | `GET {apiBase}/api/client-hosting/limits` |
28
28
 
29
+ ## Creating a site over REST
30
+
31
+ `POST {apiBase}/api/client-hosting/sites` (JSON, same bearer) is the fallback
32
+ for `awesomate_site_create`. Three things about it trip people up:
33
+
34
+ - **The body field is `siteTitle`, not `title`.** An unknown key is ignored
35
+ silently, so the site ends up titled after its domain. `domain`, `themeSlug`,
36
+ `adminEmail` and `intent` are the other accepted keys; all are optional.
37
+ - **Omit `domain` and the server picks the next free `siteN.{primary}`** —
38
+ the first install takes the bare primary domain, then `site2`, `site3`, and
39
+ so on. Pass `domain` explicitly if the user named one.
40
+ - **The response is bare `{"success":true}`** — no domain, no id. It does not
41
+ tell you what got built, so read the name back from `GET /sites`.
42
+
43
+ Refusals are specific and worth relaying verbatim: `403` means the plan's site
44
+ cap is reached (staging clones are excluded from the count), `409` means
45
+ WordPress already exists at that domain.
46
+
47
+ ## Provisioning is async — do not call it broken
48
+
49
+ The POST returns as soon as the install is queued. Poll
50
+ `GET {apiBase}/api/client-hosting/sites` until the new hostname appears rather
51
+ than assuming the call failed.
52
+
53
+ Then expect a **gap of a minute or two where HTTPS does not answer at all**
54
+ while AutoSSL issues the certificate. During that window the symptom looks
55
+ alarming but is normal and self-resolving:
56
+
57
+ | Check | During issuance | Meaning |
58
+ |---|---|---|
59
+ | `curl https://…` | `000` / connection failed | Cert not issued **yet** |
60
+ | `curl http://…` | `200`, real WordPress HTML | The site is genuinely built |
61
+ | `dig +short` | resolves to the hosting IP | DNS is fine |
62
+ | `/sites` `sslActive` | may already say `true` | Reports intent, not the live cert |
63
+
64
+ So: an HTTPS failure straight after creation is not a failed build. Confirm
65
+ over plain HTTP, tell the user the certificate is still issuing, and poll
66
+ HTTPS until it answers. Do not delete and recreate the site, and do not go
67
+ hunting through DNS or Cloudflare — `sslActive: true` alongside a dead HTTPS
68
+ port is the expected intermediate state, not a contradiction.
69
+
70
+ New sites come up on the host's default theme (currently
71
+ `hello-elementor`). If the user asked for a custom theme, that is still ahead
72
+ of you — the fresh install is not evidence their theme shipped.
73
+
29
74
  Serve the request with these now, then suggest restarting Claude Code at a
30
75
  natural break so the richer MCP integration loads.