@awesomate/hosting-mcp 0.15.0 → 0.16.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 CHANGED
@@ -40031,7 +40031,7 @@ server.registerTool(
40031
40031
  server.registerTool(
40032
40032
  "awesomate_get_context",
40033
40033
  {
40034
- description: "Call this FIRST each session. Returns the connected Awesomate account: plan, capabilities (shell access), plan limits, scopes this token can exercise, token expiry (warn the user if within 7 days), cPanel routing when provisioned, and skill.updateAvailable \u2014 if true, the local awesomate-hosting skill files are older than this server; tell the user to re-run Connect Claude Code from hub.awesomate.ai/sites to refresh them (this also renews the token).",
40034
+ description: "Call this FIRST each session. Returns the connected Awesomate account: plan, capabilities (shell access), plan limits, scopes this token can exercise, token expiry (warn the user if within 7 days), cPanel routing when provisioned, and skill.updateAvailable \u2014 if true, the local Awesomate skill files are older than this server; run awesomate_skill_update to refresh them in place (new content loads next session \u2014 mention once, finish the current task first). If the token is also near expiry, re-running Connect Claude Code from hub.awesomate.ai/sites refreshes skills AND renews the token in one go.",
40035
40035
  inputSchema: {}
40036
40036
  },
40037
40037
  async () => {
@@ -40285,10 +40285,10 @@ server.registerTool(
40285
40285
  server.registerTool(
40286
40286
  "awesomate_support",
40287
40287
  {
40288
- description: "Help the user with the service itself \u2014 questions, being stuck, or reaching a human. action 'faq' {q} searches the published help library (answer FROM the results; never invent policy or pricing). action 'create_ticket' {subject, message} opens a support ticket \u2014 draft it in the user's words, SHOW it, and get an explicit yes before sending; it emails the Awesomate team and returns a portal URL. action 'list_tickets' shows their tickets and status. Use the awesomate-support skill for the full flow. Not for building \u2014 route n8n work to awesomate-n8n and hosting to awesomate-hosting.",
40288
+ description: "Help the user with the service itself \u2014 questions, being stuck, or reaching a human. action 'faq' {q} searches the published help library (answer FROM the results; never invent policy or pricing). action 'help_docs' {q} searches the full Help Centre articles live \u2014 use when the FAQ has no good answer, and cite the returned article URLs. action 'create_ticket' {subject, message} opens a support ticket \u2014 draft it in the user's words, SHOW it, and get an explicit yes before sending; it emails the Awesomate team and returns a portal URL. action 'list_tickets' shows their tickets and status. Use the awesomate-support skill for the full flow. Not for building \u2014 route n8n work to awesomate-n8n and hosting to awesomate-hosting.",
40289
40289
  inputSchema: {
40290
- action: external_exports.enum(["faq", "create_ticket", "list_tickets"]),
40291
- q: external_exports.string().optional().describe("faq only: the question"),
40290
+ action: external_exports.enum(["faq", "help_docs", "create_ticket", "list_tickets"]),
40291
+ q: external_exports.string().optional().describe("faq and help_docs: the question or topic"),
40292
40292
  subject: external_exports.string().optional().describe("create_ticket only"),
40293
40293
  message: external_exports.string().optional().describe("create_ticket only: the body, in the user's words")
40294
40294
  }
@@ -40299,6 +40299,10 @@ server.registerTool(
40299
40299
  if (action === "faq") {
40300
40300
  return textResult(await hubGet(cfg, `/api/help/faq${q ? `?q=${encodeURIComponent(q)}` : ""}`));
40301
40301
  }
40302
+ if (action === "help_docs") {
40303
+ if (!q) return errorResult(new Error("help_docs needs q"));
40304
+ return textResult(await hubGet(cfg, `/api/help/docs?q=${encodeURIComponent(q)}`));
40305
+ }
40302
40306
  if (action === "list_tickets") {
40303
40307
  return textResult(await hubGet(cfg, "/api/support/tickets"));
40304
40308
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awesomate/hosting-mcp",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "description": "Awesomate MCP server \u2014 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",
@@ -37,8 +37,9 @@ once (plus `awesomate_get_limits` before any create/change) and cache:
37
37
  - **`patExpiresAt`** — within ~7 days, or any 401: re-run the setup prompt at
38
38
  **hub.awesomate.ai/sites → Connect Claude Code** to refresh the token.
39
39
  - **`skill.updateAvailable`** — this skill's local files are older than the MCP
40
- server. Mention once (don't nag); the same Connect re-run refreshes the skill
41
- and renews the token in one go. Not urgent finish the user's request first.
40
+ server. Mention once (don't nag); run `awesomate_skill_update` to refresh in
41
+ place (new content loads next session). If the token is also near expiry, the
42
+ Connect re-run above does both. Not urgent — finish the user's request first.
42
43
  - **`cpanel`** routing (host/user), present once hosting is provisioned.
43
44
 
44
45
  If `awesomate_get_context` fails with a connectivity error, it's the user's
@@ -20,18 +20,22 @@ also carries the plan). Describe what a plan or upgrade INCLUDES from
20
20
  balance without spending anything. Never quote a plan, price, or balance
21
21
  from memory.
22
22
 
23
- ## 1. FAQ first
23
+ ## 1. FAQ first, then help docs
24
24
 
25
25
  For any "how do I", "why does", "what is" question about the service:
26
26
 
27
27
  1. Call `awesomate_support {action:'faq', q:'<their question>'}`.
28
28
  2. Answer FROM the returned entries, in your own plain words. Cite nothing
29
29
  the FAQ and tools didn't say — no invented policy, no guessed pricing.
30
- 3. If the FAQ answers it, you're done. If it partially answers, give what
31
- you have and say which part is unconfirmed.
32
- 4. If it doesn't answer it: "I don't have a confirmed answer for that. Want
30
+ 3. If the FAQ misses or only partially answers, call
31
+ `awesomate_support {action:'help_docs', q:'<topic>'}` a live search of
32
+ the full Help Centre articles. Answer from the excerpts and give the
33
+ article's URL so the user can read the full steps.
34
+ 4. If neither answers it: "I don't have a confirmed answer for that. Want
33
35
  me to ask the Awesomate team? I'll draft a support ticket for you to
34
- approve first." Then go to §2 if they say yes.
36
+ approve first." Then go to §2 if they say yes. (An empty help_docs
37
+ result can also mean the search is temporarily down — the response's
38
+ help_centre_url is always safe to offer for browsing.)
35
39
 
36
40
  ## 2. Ticket flow — talking to a human
37
41