@automatelab/ai-seo-mcp 0.6.0 → 0.7.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.
Files changed (64) hide show
  1. package/dist/index.js +20 -1
  2. package/dist/index.js.map +1 -1
  3. package/dist/lib/agentic.d.ts +1 -1
  4. package/dist/lib/agentic.d.ts.map +1 -1
  5. package/dist/lib/agentic.js +8 -5
  6. package/dist/lib/agentic.js.map +1 -1
  7. package/dist/lib/deprecated-schema-types.json +10 -0
  8. package/dist/lib/fetch.d.ts.map +1 -1
  9. package/dist/lib/fetch.js +18 -0
  10. package/dist/lib/fetch.js.map +1 -1
  11. package/dist/lib/schema-types.json +38 -1
  12. package/dist/lib/schema.d.ts +2 -0
  13. package/dist/lib/schema.d.ts.map +1 -1
  14. package/dist/lib/schema.js +16 -4
  15. package/dist/lib/schema.js.map +1 -1
  16. package/dist/lib/score-citability.d.ts +9 -0
  17. package/dist/lib/score-citability.d.ts.map +1 -0
  18. package/dist/lib/score-citability.js +94 -0
  19. package/dist/lib/score-citability.js.map +1 -0
  20. package/dist/lib/score-content.d.ts +8 -0
  21. package/dist/lib/score-content.d.ts.map +1 -0
  22. package/dist/lib/score-content.js +52 -0
  23. package/dist/lib/score-content.js.map +1 -0
  24. package/dist/lib/score-eeat.d.ts +16 -0
  25. package/dist/lib/score-eeat.d.ts.map +1 -0
  26. package/dist/lib/score-eeat.js +149 -0
  27. package/dist/lib/score-eeat.js.map +1 -0
  28. package/dist/lib/score-evidence.d.ts +10 -0
  29. package/dist/lib/score-evidence.d.ts.map +1 -0
  30. package/dist/lib/score-evidence.js +84 -0
  31. package/dist/lib/score-evidence.js.map +1 -0
  32. package/dist/lib/score.d.ts +48 -7
  33. package/dist/lib/score.d.ts.map +1 -1
  34. package/dist/lib/score.js +46 -10
  35. package/dist/lib/score.js.map +1 -1
  36. package/dist/lib/ssrf.d.ts +6 -0
  37. package/dist/lib/ssrf.d.ts.map +1 -0
  38. package/dist/lib/ssrf.js +71 -0
  39. package/dist/lib/ssrf.js.map +1 -0
  40. package/dist/output-schemas.d.ts +212 -31
  41. package/dist/output-schemas.d.ts.map +1 -1
  42. package/dist/output-schemas.js +31 -2
  43. package/dist/output-schemas.js.map +1 -1
  44. package/dist/tools/audit-page.d.ts +6 -10
  45. package/dist/tools/audit-page.d.ts.map +1 -1
  46. package/dist/tools/audit-page.js +59 -4
  47. package/dist/tools/audit-page.js.map +1 -1
  48. package/dist/tools/check-sitemap.d.ts +11 -0
  49. package/dist/tools/check-sitemap.d.ts.map +1 -1
  50. package/dist/tools/check-sitemap.js +1 -1
  51. package/dist/tools/check-sitemap.js.map +1 -1
  52. package/dist/tools/generate-llms-txt.d.ts +1 -0
  53. package/dist/tools/generate-llms-txt.d.ts.map +1 -1
  54. package/dist/tools/generate-llms-txt.js +50 -26
  55. package/dist/tools/generate-llms-txt.js.map +1 -1
  56. package/dist/tools/generate-pricing-md.d.ts +24 -0
  57. package/dist/tools/generate-pricing-md.d.ts.map +1 -0
  58. package/dist/tools/generate-pricing-md.js +167 -0
  59. package/dist/tools/generate-pricing-md.js.map +1 -0
  60. package/dist/tools/validate-llms-txt.d.ts +4 -4
  61. package/dist/types.d.ts +9 -1
  62. package/dist/types.d.ts.map +1 -1
  63. package/package.json +1 -1
  64. package/src/lib/schema-types.json +38 -1
@@ -0,0 +1,167 @@
1
+ // Tool: pricing.generate
2
+ // Generates a machine-readable /pricing.md for AI agents (agent commerce).
3
+ //
4
+ // LLM-driven shopping/agent flows increasingly look for a structured pricing
5
+ // file the way they look for llms.txt. Opaque, JS-rendered pricing tables get
6
+ // filtered out. This tool discovers the site's pricing page, extracts tier
7
+ // names and price lines heuristically, and emits a spec-light pricing.md.
8
+ // Deterministic; no LLM; read-only (returns the file content as a string).
9
+ import { z } from "zod";
10
+ import { politeFetch } from "../lib/fetch.js";
11
+ import { parseHead, parseBody, extractSections } from "../lib/html.js";
12
+ export const generatePricingMdInputSchema = z.object({
13
+ domain: z
14
+ .string()
15
+ .min(3)
16
+ .describe("Hostname or origin to generate pricing.md for, e.g. `example.com`. The tool finds the pricing page (or uses `pricing_url`), extracts tiers and prices, and returns a machine-readable pricing.md string. Read-only."),
17
+ pricing_url: z
18
+ .string()
19
+ .url()
20
+ .optional()
21
+ .describe("Explicit pricing page URL. If omitted, the tool probes common paths (/pricing, /plans, /pricing/)."),
22
+ });
23
+ const PRICE_RE = /(\$|€|£|usd|eur|gbp)\s?\d[\d,]*(\.\d+)?(\s?\/\s?(mo|month|yr|year|user|seat|user\/mo))?|\b\d[\d,]*(\.\d+)?\s?(\/\s?(mo|month|yr|year))|\bfree\b|\bcontact (us|sales)\b|\bcustom pricing\b/gi;
24
+ const TIER_HINT = /\b(free|freemium|starter|basic|standard|pro|professional|plus|premium|team|teams|business|growth|scale|enterprise|individual|personal)\b/i;
25
+ function normalizeDomain(domain) {
26
+ if (domain.startsWith("http://") || domain.startsWith("https://")) {
27
+ try {
28
+ return new URL(domain).hostname;
29
+ }
30
+ catch {
31
+ return domain;
32
+ }
33
+ }
34
+ return domain.replace(/\/$/, "");
35
+ }
36
+ export async function generatePricingMdTool(input, hostDelays, robotsCache) {
37
+ const hostname = normalizeDomain(input.domain);
38
+ const delays = hostDelays ?? new Map();
39
+ const robots = robotsCache ?? new Map();
40
+ const validation_issues = [];
41
+ // Discover the pricing page.
42
+ const candidates = input.pricing_url
43
+ ? [input.pricing_url]
44
+ : [`https://${hostname}/pricing`, `https://${hostname}/pricing/`, `https://${hostname}/plans`, `https://${hostname}/plans/`];
45
+ let sourceUrl = null;
46
+ let html = null;
47
+ for (const url of candidates) {
48
+ try {
49
+ const res = await politeFetch(url, { respectRobots: true, hostDelays: delays, robotsCache: robots });
50
+ const ct = res.headers["content-type"] ?? "";
51
+ if (ct.includes("html")) {
52
+ sourceUrl = res.finalUrl || url;
53
+ html = res.body;
54
+ break;
55
+ }
56
+ }
57
+ catch { /* try next */ }
58
+ }
59
+ const siteName = hostname;
60
+ if (!html || !sourceUrl) {
61
+ validation_issues.push({
62
+ severity: "warning",
63
+ category: "presence",
64
+ where: "/pricing.md",
65
+ message: "No pricing page found to derive pricing.md from.",
66
+ fix: "Pass pricing_url explicitly, or publish a /pricing page. A template scaffold is returned below for you to fill in.",
67
+ estimated_impact: "low",
68
+ });
69
+ return {
70
+ domain: hostname,
71
+ pricing_md: templateScaffold(siteName),
72
+ source_url: null,
73
+ tiers_detected: 0,
74
+ validation_issues,
75
+ suggested_path: "/pricing.md",
76
+ };
77
+ }
78
+ const head = parseHead(html);
79
+ const body = parseBody(html, sourceUrl);
80
+ const sections = extractSections(html);
81
+ // Tier candidates: sections whose heading names a plan or whose text carries a price.
82
+ const tiers = [];
83
+ for (const s of sections) {
84
+ if (!s.heading)
85
+ continue;
86
+ const headingIsTier = TIER_HINT.test(s.heading) && s.heading.length < 40;
87
+ const prices = Array.from(new Set((s.text.match(PRICE_RE) ?? []).map((p) => p.trim()))).slice(0, 4);
88
+ if (headingIsTier || (prices.length > 0 && s.heading.length < 50)) {
89
+ tiers.push({ name: s.heading.replace(/\s+/g, " ").trim(), prices });
90
+ }
91
+ }
92
+ // Fallback: pull bare price lines if no tier sections matched.
93
+ const pagePrices = Array.from(new Set((body.bodyText.match(PRICE_RE) ?? []).map((p) => p.trim()))).slice(0, 8);
94
+ const lines = [];
95
+ const title = head.ogTitle ?? head.title ?? `${siteName} pricing`;
96
+ lines.push(`# ${title}`);
97
+ lines.push("");
98
+ lines.push(`> Machine-readable pricing for AI agents. Source: ${sourceUrl}`);
99
+ lines.push("");
100
+ if (tiers.length > 0) {
101
+ for (const t of tiers) {
102
+ lines.push(`## ${t.name}`);
103
+ lines.push(t.prices.length ? `- Price: ${t.prices.join(" · ")}` : "- Price: (not detected — fill in)");
104
+ lines.push("");
105
+ }
106
+ }
107
+ else if (pagePrices.length > 0) {
108
+ lines.push("## Prices");
109
+ for (const p of pagePrices)
110
+ lines.push(`- ${p}`);
111
+ lines.push("");
112
+ validation_issues.push({
113
+ severity: "info",
114
+ category: "structure",
115
+ where: "/pricing.md",
116
+ message: "Prices found but not grouped into named tiers.",
117
+ fix: "Give each plan its own H2/H3 heading on the pricing page so tiers can be extracted cleanly.",
118
+ });
119
+ }
120
+ else {
121
+ validation_issues.push({
122
+ severity: "warning",
123
+ category: "structure",
124
+ where: "/pricing.md",
125
+ message: "Pricing page found but no prices detected (likely JS-rendered or image-based).",
126
+ fix: "Render prices as real text/tables, not images or JS-only widgets, so agents (and this tool) can read them.",
127
+ estimated_impact: "medium",
128
+ });
129
+ return {
130
+ domain: hostname,
131
+ pricing_md: templateScaffold(siteName) + `\n<!-- source: ${sourceUrl} (no machine-readable prices found) -->\n`,
132
+ source_url: sourceUrl,
133
+ tiers_detected: 0,
134
+ validation_issues,
135
+ suggested_path: "/pricing.md",
136
+ };
137
+ }
138
+ return {
139
+ domain: hostname,
140
+ pricing_md: lines.join("\n"),
141
+ source_url: sourceUrl,
142
+ tiers_detected: tiers.length,
143
+ validation_issues,
144
+ suggested_path: "/pricing.md",
145
+ };
146
+ }
147
+ function templateScaffold(siteName) {
148
+ return [
149
+ `# ${siteName} pricing`,
150
+ "",
151
+ "> Machine-readable pricing for AI agents.",
152
+ "",
153
+ "## Free",
154
+ "- Price: $0",
155
+ "- For: getting started",
156
+ "",
157
+ "## Pro",
158
+ "- Price: $TODO / month",
159
+ "- For: TODO",
160
+ "",
161
+ "## Enterprise",
162
+ "- Price: Contact sales",
163
+ "- For: TODO",
164
+ "",
165
+ ].join("\n");
166
+ }
167
+ //# sourceMappingURL=generate-pricing-md.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-pricing-md.js","sourceRoot":"","sources":["../../src/tools/generate-pricing-md.ts"],"names":[],"mappings":"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"}
@@ -7,19 +7,19 @@ export declare const validateLlmsTxtInputSchema: z.ZodEffects<z.ZodObject<{
7
7
  check_links: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
8
8
  }, "strip", z.ZodTypeAny, {
9
9
  check_links: boolean;
10
- url?: string | undefined;
11
10
  content?: string | undefined;
12
- }, {
13
11
  url?: string | undefined;
12
+ }, {
14
13
  content?: string | undefined;
14
+ url?: string | undefined;
15
15
  check_links?: boolean | undefined;
16
16
  }>, {
17
17
  check_links: boolean;
18
- url?: string | undefined;
19
18
  content?: string | undefined;
20
- }, {
21
19
  url?: string | undefined;
20
+ }, {
22
21
  content?: string | undefined;
22
+ url?: string | undefined;
23
23
  check_links?: boolean | undefined;
24
24
  }>;
25
25
  export type ValidateLlmsTxtInput = z.infer<typeof validateLlmsTxtInputSchema>;
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export type Severity = "critical" | "warning" | "info";
2
- export type FindingCategory = "schema" | "robots" | "technical" | "freshness" | "structure" | "authority" | "presence" | "sitemap" | "llms_txt";
2
+ export type FindingCategory = "schema" | "robots" | "technical" | "freshness" | "structure" | "authority" | "presence" | "sitemap" | "llms_txt" | "citation" | "evidence" | "trust" | "entity" | "content";
3
3
  export interface Finding {
4
4
  /** Severity determines triage priority. critical = blocks citation, warning = hurts probability, info = nice-to-have. */
5
5
  severity: Severity;
@@ -12,6 +12,10 @@ export interface Finding {
12
12
  fix: string;
13
13
  /** Estimated impact on AI citation probability if this finding is resolved. Omit for info-level findings. */
14
14
  estimated_impact?: "high" | "medium" | "low";
15
+ /** Falsifiability: the observable signal that would prove the fix did NOT work. Optional. */
16
+ failure_signal?: string;
17
+ /** Falsifiability: the leading indicator to monitor to confirm the fix is landing. Optional. */
18
+ leading_indicator?: string;
15
19
  }
16
20
  export interface AuditResult {
17
21
  url: string;
@@ -39,6 +43,10 @@ export type ToolError = {
39
43
  type: "parse_error";
40
44
  url: string;
41
45
  detail: string;
46
+ } | {
47
+ type: "blocked_host";
48
+ url: string;
49
+ reason: string;
42
50
  } | {
43
51
  type: "fetch_error";
44
52
  url: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvD,MAAM,MAAM,eAAe,GACvB,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,UAAU,GACV,SAAS,GACT,UAAU,CAAC;AAEf,MAAM,WAAW,OAAO;IACtB,yHAAyH;IACzH,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,eAAe,CAAC;IAC1B,6HAA6H;IAC7H,KAAK,EAAE,MAAM,CAAC;IACd,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,GAAG,EAAE,MAAM,CAAC;IACZ,6GAA6G;IAC7G,gBAAgB,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CACpC;AAED,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvD,MAAM,MAAM,eAAe,GACvB,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,UAAU,GACV,SAAS,GACT,UAAU,GACV,UAAU,GACV,UAAU,GACV,OAAO,GACP,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,WAAW,OAAO;IACtB,yHAAyH;IACzH,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,eAAe,CAAC;IAC1B,6HAA6H;IAC7H,KAAK,EAAE,MAAM,CAAC;IACd,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,GAAG,EAAE,MAAM,CAAC;IACZ,6GAA6G;IAC7G,gBAAgB,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC7C,6FAA6F;IAC7F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gGAAgG;IAChG,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CACpC;AAED,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automatelab/ai-seo-mcp",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "mcpName": "io.github.AutomateLab-tech/ai-seo-mcp",
5
5
  "description": "AI Citation Toolkit - audit, score, and rewrite web pages for AI-citation eligibility. AEO/GEO/LLM visibility for any MCP client.",
6
6
  "license": "MIT",
@@ -52,5 +52,42 @@
52
52
  "Brand",
53
53
  "Intangible",
54
54
  "Thing",
55
- "Place"
55
+ "Place",
56
+ "ItemList",
57
+ "CollectionPage",
58
+ "ProfilePage",
59
+ "QAPage",
60
+ "Service",
61
+ "OfferCatalog",
62
+ "WebPageElement",
63
+ "SiteNavigationElement",
64
+ "Table",
65
+ "Comment",
66
+ "DiscussionForumPosting",
67
+ "SocialMediaPosting",
68
+ "DefinedTerm",
69
+ "DefinedTermSet",
70
+ "PropertyValue",
71
+ "Quotation",
72
+ "HowToDirection",
73
+ "MenuItem",
74
+ "Menu",
75
+ "JobPosting",
76
+ "VideoGame",
77
+ "Episode",
78
+ "PodcastEpisode",
79
+ "Movie",
80
+ "TVSeries",
81
+ "MusicRecording",
82
+ "GeoShape",
83
+ "Country",
84
+ "AdministrativeArea",
85
+ "EducationalOccupationalCredential",
86
+ "Occupation",
87
+ "Audience",
88
+ "FinancialProduct",
89
+ "Vehicle",
90
+ "RealEstateListing",
91
+ "Apartment",
92
+ "House"
56
93
  ]