@awesomate/hosting-mcp 0.85.0 → 0.86.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
@@ -41680,6 +41680,7 @@ var TITLES = {
41680
41680
  awesomate_skill_update: "Update Awesomate skills",
41681
41681
  awesomate_site_create: "Create WordPress site",
41682
41682
  awesomate_site_audit: "Audit site for SEO and AEO",
41683
+ awesomate_ai_visibility: "Check how often AI apps name the business",
41683
41684
  awesomate_php_extensions: "Check or fix PHP extensions",
41684
41685
  awesomate_uninstall_site: "Delete WordPress site",
41685
41686
  awesomate_snapshot_site: "Snapshot site",
@@ -44341,6 +44342,54 @@ server.registerTool(
44341
44342
  }
44342
44343
  }
44343
44344
  );
44345
+ server.registerTool(
44346
+ "awesomate_ai_visibility",
44347
+ {
44348
+ description: "How often the real ChatGPT and Gemini apps name the business when its customers ask the questions it sells to, for ONE of the user's public sites (Support Plus and above). `status` returns the latest score (0 to 100, with a likely range), how many answers named the business, the questions where neither app named it (the content gaps), the businesses named instead and the sites the apps relied on: use those to decide what to fix with the awesomate-seo skill (a page that answers a missed question, the directories and review sites the apps cite, the Google Business Profile, which Gemini reads for local questions). `check` starts a new check (about five minutes, runs in the background; read it later with `status`). Approving the questions is the owner's own click in the hub, never this tool: if the questions are not approved, send the owner to the site's page in the hub. Owner checks are limited to 3 per site per week; never start one just to see whether anything changed within a day. Weekly checks are the owner's choice, switched on in the hub.",
44349
+ inputSchema: {
44350
+ domain: external_exports.string().min(3).max(253).describe("one of the user's public sites, as the address customers use"),
44351
+ action: external_exports.enum(["status", "check"]).default("status").describe("status reads the latest result; check starts a new check")
44352
+ },
44353
+ annotations: annotate("awesomate_ai_visibility", MUTATING)
44354
+ },
44355
+ async ({ domain, action }) => {
44356
+ try {
44357
+ const dom = encodeURIComponent(domain.toLowerCase());
44358
+ if (action === "check") return textResult(await hubPost(requireConfig(), `/api/ai-visibility/sites/${dom}/checks`, {}));
44359
+ const v = await hubGet(requireConfig(), `/api/ai-visibility/sites/${dom}`);
44360
+ const latest = v?.latest;
44361
+ const s = latest?.summary;
44362
+ const scored = (latest?.questions ?? []).filter((q2) => q2.kind !== "branded");
44363
+ const rowsFor = (q2) => (s?.questions ?? []).filter((r) => r.questionId === q2.id);
44364
+ const measured = scored.filter((q2) => rowsFor(q2).some((r) => r.of > 0));
44365
+ const gaps = s ? measured.filter((q2) => !rowsFor(q2).some((r) => r.named > 0)).map((q2) => q2.text) : [];
44366
+ const unmeasured = s ? scored.filter((q2) => !measured.includes(q2)).map((q2) => q2.text) : [];
44367
+ return textResult({
44368
+ domain: v?.domain,
44369
+ questions_approved: Boolean(v?.profile?.approvedAt),
44370
+ weekly: v?.profile?.weekly ?? null,
44371
+ running: v?.running ? { done: v.running.progress?.done, total: v.running.progress?.total } : null,
44372
+ last_check_failed: Boolean(v?.lastFailed),
44373
+ latest: s ? {
44374
+ checked_at: latest.finishedAt,
44375
+ score: s.score,
44376
+ likely_range: latest.range,
44377
+ named_in: `${s.namedIn} of ${s.of} answers`,
44378
+ score_by_app: s.byEngine,
44379
+ rank: s.rank ? `${s.rank} of ${s.marketSize} businesses named` : "not named",
44380
+ questions_never_named: gaps,
44381
+ questions_not_measured: unmeasured,
44382
+ named_instead: (s.market ?? []).filter((m) => !m.isTarget).slice(0, 8).map((m) => `${m.name} (${m.score})`),
44383
+ sites_the_apps_relied_on: (s.hosts ?? []).slice(0, 8).map((h) => `${h.host} (${h.answers} answers)`)
44384
+ } : null,
44385
+ history: (v?.history ?? []).slice(0, 8).map((h) => ({ at: h.at, score: h.score })),
44386
+ next_step: !v?.profile ? "No questions yet: the owner sets them up on the site\u2019s page in the hub (Website, the site, AI visibility)." : !v.profile.approvedAt ? "The questions need the owner\u2019s approval in the hub before a check can run." : !s ? 'No finished check yet: start one with action "check", or wait for the running one.' : "Pick the questions never named and the sites the apps relied on, and fix those first."
44387
+ });
44388
+ } catch (err) {
44389
+ return errorResult(err);
44390
+ }
44391
+ }
44392
+ );
44344
44393
  server.registerTool(
44345
44394
  "awesomate_wp_media_import",
44346
44395
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awesomate/hosting-mcp",
3
- "version": "0.85.0",
3
+ "version": "0.86.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,11 @@
1
1
  {
2
2
  "versions": [
3
+ {
4
+ "version": "0.86.0",
5
+ "highlights": [
6
+ "Claude can read how often ChatGPT and Gemini name your business for your site (awesomate_ai_visibility): the score, the questions where neither app names you, who they name instead and the sites they rely on, so it knows what to fix first. Approving the questions stays your own click in the hub."
7
+ ]
8
+ },
3
9
  {
4
10
  "version": "0.85.0",
5
11
  "highlights": [
@@ -490,13 +496,13 @@
490
496
  "highlights": [
491
497
  "Search your knowledge base with filters and ask questions within a slice of your content",
492
498
  "People & entities: your knowledge base now recognises who appears in your content, and you can name and merge them",
493
- "Build AI agents from your own content — drafted, tested privately, and published only when you approve"
499
+ "Build AI agents from your own content \u2014 drafted, tested privately, and published only when you approve"
494
500
  ]
495
501
  },
496
502
  {
497
503
  "version": "0.14.0",
498
504
  "highlights": [
499
- "Tools built for business owners, not developers — plain-language answers about your account, plan and limits",
505
+ "Tools built for business owners, not developers \u2014 plain-language answers about your account, plan and limits",
500
506
  "New support skill: get help, understand credits, or request a done-for-you build without leaving Claude",
501
507
  "New database skill: Claude picks the right place to keep your data and sets it up for you"
502
508
  ]
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: awesomate-seo
3
- description: Make the user's site findable by Google AND quotable by AI assistants (SEO + AEO). Runs the build gates with awesomate_site_audit, then fixes what fails: title/meta/Open Graph, sitemap.xml, robots.txt, canonical tags, JSON-LD, answer-shaped content structure, and llms.txt. Works for static sites, Node apps, and WordPress. Use when the user says "SEO", "AEO", "GEO", "answer engine optimisation", "get found on Google", "get cited by ChatGPT", "rank higher", "make my site discoverable", "sitemap", "meta tags", "schema", or after building/changing any public page. Companion to awesomate-app-builder.
3
+ description: Make the user's site findable by Google AND quotable by AI assistants (SEO + AEO). Runs the build gates with awesomate_site_audit, then fixes what fails: title/meta/Open Graph, sitemap.xml, robots.txt, canonical tags, JSON-LD, answer-shaped content structure, and llms.txt. Works for static sites, Node apps, and WordPress. Use when the user says "SEO", "AEO", "GEO", "answer engine optimisation", "get found on Google", "get cited by ChatGPT", "does ChatGPT recommend us", "AI visibility", "rank higher", "make my site discoverable", "sitemap", "meta tags", "schema", or after building/changing any public page. Companion to awesomate-app-builder.
4
4
  ---
5
5
 
6
6
  # Awesomate SEO — get found on Google and AI
@@ -229,6 +229,31 @@ the awesomate-n8n skill) that runs these checks weekly and emails the user the
229
229
  result. A weekly email is what turns "SEO as ongoing" from a good intention
230
230
  into a mechanism.
231
231
 
232
+ ## 5. Is it working? AI visibility (Support Plus and above)
233
+
234
+ The gates above say whether a page CAN be found. `awesomate_ai_visibility` says whether the real
235
+ ChatGPT and Gemini apps actually name the business when its customers ask. Use it when the user
236
+ asks "does ChatGPT recommend us", "are we showing up in AI", or after a round of fixes.
237
+
238
+ - `action: "status"` returns the score (0 to 100, with a likely range), the questions where neither
239
+ app named the business, who they named instead, and the sites the apps relied on.
240
+ - **Fix from that evidence, in this order:**
241
+ 1. a page on the site that directly answers each question never named, in the customer's words
242
+ and naming the place the business serves;
243
+ 2. the directories, review sites and "best of" lists the apps relied on: get the business on
244
+ them, or ask the owner to;
245
+ 3. the Google Business Profile (category, services, reviews), because Gemini answers local
246
+ questions from Google Maps.
247
+ - **Do not promise a lift from schema or llms.txt.** Studies found none. They are good hygiene,
248
+ not a visibility fix.
249
+ - `action: "check"` starts a new check (about five minutes). Owner checks are limited to 3 per site
250
+ per week, and sites the owner put on weekly checks are re-checked automatically: check again only after a
251
+ real change, never to watch the number within a day.
252
+ - **The owner approves the questions, in the hub, never you.** If `questions_approved` is false,
253
+ send them to the site's page in the hub (Website, the site, AI visibility).
254
+ - Scores move slowly and vary between checks. Read the trend over several weeks, and never tell
255
+ the owner a single check proves a fix worked.
256
+
232
257
  ## Hard rules
233
258
  - Never fabricate content, reviews, or business facts to "help SEO".
234
259
  - Never claim these guarantee a ranking — they make the site *eligible* and