@automatelab/ai-seo-mcp 0.1.1 → 0.1.3
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/README.md +61 -141
- package/dist/index.js +213 -40
- package/dist/index.js.map +1 -1
- package/dist/lib/config.js +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/scorecard-html.d.ts +21 -0
- package/dist/lib/scorecard-html.d.ts.map +1 -0
- package/dist/lib/scorecard-html.js +167 -0
- package/dist/lib/scorecard-html.js.map +1 -0
- package/dist/tools/audit-canonical.d.ts.map +1 -1
- package/dist/tools/audit-canonical.js +9 -2
- package/dist/tools/audit-canonical.js.map +1 -1
- package/dist/tools/audit-page.d.ts +15 -0
- package/dist/tools/audit-page.d.ts.map +1 -1
- package/dist/tools/audit-page.js +54 -3
- package/dist/tools/audit-page.js.map +1 -1
- package/dist/tools/check-robots.d.ts.map +1 -1
- package/dist/tools/check-robots.js +4 -1
- package/dist/tools/check-robots.js.map +1 -1
- package/dist/tools/check-sitemap.d.ts.map +1 -1
- package/dist/tools/check-sitemap.js +12 -2
- package/dist/tools/check-sitemap.js.map +1 -1
- package/dist/tools/check-technical.d.ts.map +1 -1
- package/dist/tools/check-technical.js +9 -2
- package/dist/tools/check-technical.js.map +1 -1
- package/dist/tools/diff-pages.d.ts +58 -0
- package/dist/tools/diff-pages.d.ts.map +1 -0
- package/dist/tools/diff-pages.js +120 -0
- package/dist/tools/diff-pages.js.map +1 -0
- package/dist/tools/generate-llms-txt.d.ts.map +1 -1
- package/dist/tools/generate-llms-txt.js +25 -5
- package/dist/tools/generate-llms-txt.js.map +1 -1
- package/dist/tools/score-ai-overview-eligibility.d.ts.map +1 -1
- package/dist/tools/score-ai-overview-eligibility.js +9 -2
- package/dist/tools/score-ai-overview-eligibility.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const diffPagesInputSchema: z.ZodObject<{
|
|
3
|
+
url_a: z.ZodString;
|
|
4
|
+
url_b: z.ZodString;
|
|
5
|
+
query: z.ZodOptional<z.ZodString>;
|
|
6
|
+
respect_robots: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
respect_robots: boolean;
|
|
9
|
+
url_a: string;
|
|
10
|
+
url_b: string;
|
|
11
|
+
query?: string | undefined;
|
|
12
|
+
}, {
|
|
13
|
+
url_a: string;
|
|
14
|
+
url_b: string;
|
|
15
|
+
respect_robots?: boolean | undefined;
|
|
16
|
+
query?: string | undefined;
|
|
17
|
+
}>;
|
|
18
|
+
export type DiffPagesInput = z.infer<typeof diffPagesInputSchema>;
|
|
19
|
+
export interface DimensionDiff {
|
|
20
|
+
a: number;
|
|
21
|
+
b: number;
|
|
22
|
+
/** Which URL has the higher score for this dimension, or 'tie' if equal. */
|
|
23
|
+
advantage: "a" | "b" | "tie";
|
|
24
|
+
}
|
|
25
|
+
export interface DiffPagesResult {
|
|
26
|
+
url_a: string;
|
|
27
|
+
url_b: string;
|
|
28
|
+
query?: string;
|
|
29
|
+
/** Which URL is more citation-worthy overall, or 'tie' if within 5 points. */
|
|
30
|
+
better_for_citation: "a" | "b" | "tie";
|
|
31
|
+
scores: {
|
|
32
|
+
a: number;
|
|
33
|
+
b: number;
|
|
34
|
+
};
|
|
35
|
+
delta: {
|
|
36
|
+
schema: DimensionDiff;
|
|
37
|
+
structure: DimensionDiff;
|
|
38
|
+
robots: DimensionDiff;
|
|
39
|
+
entity_density: DimensionDiff;
|
|
40
|
+
freshness: DimensionDiff;
|
|
41
|
+
technical: DimensionDiff;
|
|
42
|
+
authority: DimensionDiff;
|
|
43
|
+
sitemap: DimensionDiff;
|
|
44
|
+
};
|
|
45
|
+
/** Categories (or entities) present on B but absent from A's findings (A is missing these). */
|
|
46
|
+
missing_in_a: string[];
|
|
47
|
+
/** Categories (or entities) present on A but absent from B's findings (B is missing these). */
|
|
48
|
+
missing_in_b: string[];
|
|
49
|
+
/** Prioritized, actionable recommendations for improving URL A's citation probability. */
|
|
50
|
+
fix_recommendations_for_a: Array<{
|
|
51
|
+
category: string;
|
|
52
|
+
message: string;
|
|
53
|
+
fix: string;
|
|
54
|
+
estimated_impact?: "high" | "medium" | "low";
|
|
55
|
+
}>;
|
|
56
|
+
}
|
|
57
|
+
export declare function diffPages(input: DiffPagesInput): Promise<DiffPagesResult>;
|
|
58
|
+
//# sourceMappingURL=diff-pages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-pages.d.ts","sourceRoot":"","sources":["../../src/tools/diff-pages.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EA0B/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,4EAA4E;IAC5E,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,mBAAmB,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC;IACvC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,KAAK,EAAE;QACL,MAAM,EAAE,aAAa,CAAC;QACtB,SAAS,EAAE,aAAa,CAAC;QACzB,MAAM,EAAE,aAAa,CAAC;QACtB,cAAc,EAAE,aAAa,CAAC;QAC9B,SAAS,EAAE,aAAa,CAAC;QACzB,SAAS,EAAE,aAAa,CAAC;QACzB,SAAS,EAAE,aAAa,CAAC;QACzB,OAAO,EAAE,aAAa,CAAC;KACxB,CAAC;IACF,+FAA+F;IAC/F,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,+FAA+F;IAC/F,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,0FAA0F;IAC1F,yBAAyB,EAAE,KAAK,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,gBAAgB,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;KAC9C,CAAC,CAAC;CACJ;AAwDD,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CA2D/E"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
// Tool: diff_pages
|
|
2
|
+
// Compares two URLs (e.g. user's page vs competitor) and returns a structured
|
|
3
|
+
// breakdown of why one is more citation-worthy than the other.
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { auditPage } from "./audit-page.js";
|
|
6
|
+
export const diffPagesInputSchema = z.object({
|
|
7
|
+
url_a: z
|
|
8
|
+
.string()
|
|
9
|
+
.url()
|
|
10
|
+
.describe("First URL to compare - typically your own page. Must be a fully-qualified http(s) URL that returns HTTP 200 (redirects are followed)."),
|
|
11
|
+
url_b: z
|
|
12
|
+
.string()
|
|
13
|
+
.url()
|
|
14
|
+
.describe("Second URL to compare - typically a competitor's page. Must be a fully-qualified http(s) URL that returns HTTP 200 (redirects are followed)."),
|
|
15
|
+
query: z
|
|
16
|
+
.string()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("Optional target search query both pages are competing for (e.g. 'how to connect Zapier to Notion'). When provided, it is surfaced in fix_recommendations_for_a as context. Does not alter the scoring algorithm - scoring is based on audit_page's existing rubric."),
|
|
19
|
+
respect_robots: z
|
|
20
|
+
.boolean()
|
|
21
|
+
.optional()
|
|
22
|
+
.default(true)
|
|
23
|
+
.describe("If true (default), respect robots.txt before fetching each URL. Set false only when auditing your own sites where you have intentionally blocked crawlers."),
|
|
24
|
+
});
|
|
25
|
+
/** Return "a", "b", or "tie" based on score values (tie within 5 points). */
|
|
26
|
+
function advantage(aScore, bScore) {
|
|
27
|
+
if (Math.abs(aScore - bScore) <= 5)
|
|
28
|
+
return "tie";
|
|
29
|
+
return aScore > bScore ? "a" : "b";
|
|
30
|
+
}
|
|
31
|
+
/** Derive missing_in_a and missing_in_b by comparing findings categories. */
|
|
32
|
+
function deriveMissing(findingsA, findingsB) {
|
|
33
|
+
const categoriesInA = new Set(findingsA.filter((f) => f.severity === "critical" || f.severity === "warning").map((f) => f.category));
|
|
34
|
+
const categoriesInB = new Set(findingsB.filter((f) => f.severity === "critical" || f.severity === "warning").map((f) => f.category));
|
|
35
|
+
// Collect distinct finding messages in each set to surface actionable gaps
|
|
36
|
+
const messagesInA = new Set(findingsA.filter((f) => f.severity === "critical" || f.severity === "warning").map((f) => f.message));
|
|
37
|
+
const messagesInB = new Set(findingsB.filter((f) => f.severity === "critical" || f.severity === "warning").map((f) => f.message));
|
|
38
|
+
// missing_in_a: findings B has (problems B solved that A hasn't addressed) - i.e. categories B has clean that A doesn't
|
|
39
|
+
// Cleaner interpretation: dimensions where B scores higher represent gaps A has
|
|
40
|
+
const missingInA = [];
|
|
41
|
+
for (const msg of messagesInB) {
|
|
42
|
+
if (!messagesInA.has(msg)) {
|
|
43
|
+
missingInA.push(msg);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const missingInB = [];
|
|
47
|
+
for (const msg of messagesInA) {
|
|
48
|
+
if (!messagesInB.has(msg)) {
|
|
49
|
+
missingInB.push(msg);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// If no message-level gaps, fall back to category-level gaps
|
|
53
|
+
if (missingInA.length === 0) {
|
|
54
|
+
for (const cat of categoriesInB) {
|
|
55
|
+
if (!categoriesInA.has(cat))
|
|
56
|
+
missingInA.push(`${cat} issues (present on B but not A)`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (missingInB.length === 0) {
|
|
60
|
+
for (const cat of categoriesInA) {
|
|
61
|
+
if (!categoriesInB.has(cat))
|
|
62
|
+
missingInB.push(`${cat} issues (present on A but not B)`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return { missingInA, missingInB };
|
|
66
|
+
}
|
|
67
|
+
export async function diffPages(input) {
|
|
68
|
+
// Run both audits in parallel
|
|
69
|
+
const [resultA, resultB] = await Promise.all([
|
|
70
|
+
auditPage({ url: input.url_a, include_raw_html: false, generate_report: false, respect_robots: input.respect_robots }),
|
|
71
|
+
auditPage({ url: input.url_b, include_raw_html: false, generate_report: false, respect_robots: input.respect_robots }),
|
|
72
|
+
]);
|
|
73
|
+
const dimA = resultA.dimension_scores;
|
|
74
|
+
const dimB = resultB.dimension_scores;
|
|
75
|
+
const delta = {
|
|
76
|
+
schema: { a: dimA.schema, b: dimB.schema, advantage: advantage(dimA.schema, dimB.schema) },
|
|
77
|
+
structure: { a: dimA.structure, b: dimB.structure, advantage: advantage(dimA.structure, dimB.structure) },
|
|
78
|
+
robots: { a: dimA.robots, b: dimB.robots, advantage: advantage(dimA.robots, dimB.robots) },
|
|
79
|
+
entity_density: { a: dimA.entity_density, b: dimB.entity_density, advantage: advantage(dimA.entity_density, dimB.entity_density) },
|
|
80
|
+
freshness: { a: dimA.freshness, b: dimB.freshness, advantage: advantage(dimA.freshness, dimB.freshness) },
|
|
81
|
+
technical: { a: dimA.technical, b: dimB.technical, advantage: advantage(dimA.technical, dimB.technical) },
|
|
82
|
+
authority: { a: dimA.authority, b: dimB.authority, advantage: advantage(dimA.authority, dimB.authority) },
|
|
83
|
+
sitemap: { a: dimA.sitemap, b: dimB.sitemap, advantage: advantage(dimA.sitemap, dimB.sitemap) },
|
|
84
|
+
};
|
|
85
|
+
const overallAdvantage = advantage(resultA.score, resultB.score);
|
|
86
|
+
const { missingInA, missingInB } = deriveMissing(resultA.findings, resultB.findings);
|
|
87
|
+
// fix_recommendations_for_a: A's own critical + warning findings, sorted by impact
|
|
88
|
+
const impactOrder = { high: 0, medium: 1, low: 2 };
|
|
89
|
+
const severityOrder = { critical: 0, warning: 1, info: 2 };
|
|
90
|
+
const recsForA = [...resultA.findings]
|
|
91
|
+
.filter((f) => f.severity === "critical" || f.severity === "warning")
|
|
92
|
+
.sort((a, b) => {
|
|
93
|
+
const ia = impactOrder[a.estimated_impact ?? "low"] ?? 2;
|
|
94
|
+
const ib = impactOrder[b.estimated_impact ?? "low"] ?? 2;
|
|
95
|
+
if (ia !== ib)
|
|
96
|
+
return ia - ib;
|
|
97
|
+
return (severityOrder[a.severity] ?? 2) - (severityOrder[b.severity] ?? 2);
|
|
98
|
+
})
|
|
99
|
+
.map((f) => ({
|
|
100
|
+
category: f.category,
|
|
101
|
+
message: f.message,
|
|
102
|
+
fix: f.fix,
|
|
103
|
+
estimated_impact: f.estimated_impact,
|
|
104
|
+
}));
|
|
105
|
+
const output = {
|
|
106
|
+
url_a: input.url_a,
|
|
107
|
+
url_b: input.url_b,
|
|
108
|
+
better_for_citation: overallAdvantage,
|
|
109
|
+
scores: { a: resultA.score, b: resultB.score },
|
|
110
|
+
delta,
|
|
111
|
+
missing_in_a: missingInA,
|
|
112
|
+
missing_in_b: missingInB,
|
|
113
|
+
fix_recommendations_for_a: recsForA,
|
|
114
|
+
};
|
|
115
|
+
if (input.query) {
|
|
116
|
+
output.query = input.query;
|
|
117
|
+
}
|
|
118
|
+
return output;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=diff-pages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-pages.js","sourceRoot":"","sources":["../../src/tools/diff-pages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-llms-txt.d.ts","sourceRoot":"","sources":["../../src/tools/generate-llms-txt.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAWjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"generate-llms-txt.d.ts","sourceRoot":"","sources":["../../src/tools/generate-llms-txt.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAWjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;EA0BrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,OAAO,EAAE,CAAC;IAC7B,cAAc,EAAE,WAAW,CAAC;CAC7B;AAaD,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,oBAAoB,EAC3B,UAAU,CAAC,EAAE,YAAY,EACzB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,aAAa,CAAC,CA4IxB"}
|
|
@@ -7,11 +7,31 @@ import { XMLParser } from "fast-xml-parser";
|
|
|
7
7
|
import { checkSitemap } from "./check-sitemap.js";
|
|
8
8
|
import { groupPagesBySection, generateLlmsTxt as buildLlmsTxt, generateLlmsFullTxt, validateLlmsTxtContent, } from "../lib/llms-txt.js";
|
|
9
9
|
export const generateLlmsTxtInputSchema = z.object({
|
|
10
|
-
domain: z
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
domain: z
|
|
11
|
+
.string()
|
|
12
|
+
.min(3)
|
|
13
|
+
.describe("Hostname or origin to generate llms.txt for. Examples: `example.com`, `https://example.com`. The tool reads the domain's sitemap, fetches up to `max_pages` of them, and synthesizes a spec-compliant llms.txt grouped by section. Issues N+1 HTTP GETs: one for the sitemap, then one per sampled page. Read-only."),
|
|
14
|
+
max_pages: z
|
|
15
|
+
.number()
|
|
16
|
+
.int()
|
|
17
|
+
.min(1)
|
|
18
|
+
.max(100)
|
|
19
|
+
.optional()
|
|
20
|
+
.default(30)
|
|
21
|
+
.describe("How many pages to sample from the sitemap when building section groupings. Default 30. Each page is fetched (one HTTP GET per page) - keep this low for large sites or rate-limited hosts."),
|
|
22
|
+
include_full: z
|
|
23
|
+
.boolean()
|
|
24
|
+
.optional()
|
|
25
|
+
.default(false)
|
|
26
|
+
.describe("If true, also generate llms-full.txt (the expanded variant containing full page text, not just URLs and titles). Default false. The llms-full.txt output can be large; only enable when you actually plan to host both files."),
|
|
27
|
+
site_name: z
|
|
28
|
+
.string()
|
|
29
|
+
.optional()
|
|
30
|
+
.describe("Override the site name used in the generated llms.txt header. If omitted, inferred from the homepage's <title> tag."),
|
|
31
|
+
site_description: z
|
|
32
|
+
.string()
|
|
33
|
+
.optional()
|
|
34
|
+
.describe("Override the site description used in the generated llms.txt header. If omitted, inferred from the homepage's meta description."),
|
|
15
35
|
});
|
|
16
36
|
function normalizeDomain(domain) {
|
|
17
37
|
if (domain.startsWith("http://") || domain.startsWith("https://")) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-llms-txt.js","sourceRoot":"","sources":["../../src/tools/generate-llms-txt.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,0EAA0E;AAE1E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAqB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,mBAAmB,EACnB,eAAe,IAAI,YAAY,EAC/B,mBAAmB,EACnB,sBAAsB,GAEvB,MAAM,oBAAoB,CAAC;AAG5B,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"generate-llms-txt.js","sourceRoot":"","sources":["../../src/tools/generate-llms-txt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"score-ai-overview-eligibility.d.ts","sourceRoot":"","sources":["../../src/tools/score-ai-overview-eligibility.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,qCAAqC;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"score-ai-overview-eligibility.d.ts","sourceRoot":"","sources":["../../src/tools/score-ai-overview-eligibility.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,qCAAqC;;;;;;;;;EAUhD,CAAC;AAEH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC;AAEpG,MAAM,WAAW,2BAA2B;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,yBAAyB,EAAE,MAAM,CAAC;IAClC,OAAO,EAAE;QACP,qBAAqB,EAAE,MAAM,CAAC;QAC9B,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,gBAAgB,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1E,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,+BAA+B,EACtC,UAAU,CAAC,EAAE,YAAY,EACzB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,2BAA2B,CAAC,CAqLtC"}
|
|
@@ -6,8 +6,15 @@ import { parseHead, parseBody } from "../lib/html.js";
|
|
|
6
6
|
import { parseJsonLd, getAllSchemaTypes } from "../lib/schema.js";
|
|
7
7
|
import { freshnessScore } from "../lib/score.js";
|
|
8
8
|
export const scoreAiOverviewEligibilityInputSchema = z.object({
|
|
9
|
-
url: z
|
|
10
|
-
|
|
9
|
+
url: z
|
|
10
|
+
.string()
|
|
11
|
+
.url()
|
|
12
|
+
.describe("Public URL to score. The tool fetches the URL once and runs deterministic, rule-based scoring across six factors (semantic completeness, structured data, E-E-A-T signals, entity density, freshness, technical hygiene) using published 2025-2026 correlation studies. No LLM calls. Read-only HTTP GET."),
|
|
13
|
+
respect_robots: z
|
|
14
|
+
.boolean()
|
|
15
|
+
.optional()
|
|
16
|
+
.default(true)
|
|
17
|
+
.describe("If true (default), respect robots.txt before fetching. Set false only for auditing your own site where you've intentionally blocked crawlers."),
|
|
11
18
|
});
|
|
12
19
|
export async function scoreAiOverviewEligibility(input, hostDelays, robotsCache) {
|
|
13
20
|
const result = await politeFetch(input.url, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"score-ai-overview-eligibility.js","sourceRoot":"","sources":["../../src/tools/score-ai-overview-eligibility.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,6FAA6F;AAE7F,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAqB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5D,GAAG,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"score-ai-overview-eligibility.js","sourceRoot":"","sources":["../../src/tools/score-ai-overview-eligibility.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@automatelab/ai-seo-mcp",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"mcpName": "io.github.AutomateLab-tech/ai-seo",
|
|
5
|
-
"description": "
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"mcpName": "io.github.AutomateLab-tech/ai-seo-mcp",
|
|
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",
|
|
7
7
|
"author": "automatelab.tech",
|
|
8
|
-
"homepage": "https://github.com/AutomateLab-tech/ai-seo",
|
|
8
|
+
"homepage": "https://github.com/AutomateLab-tech/ai-seo-mcp",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
11
|
-
"url": "https://github.com/AutomateLab-tech/ai-seo.git"
|
|
11
|
+
"url": "https://github.com/AutomateLab-tech/ai-seo-mcp.git"
|
|
12
12
|
},
|
|
13
13
|
"engines": { "node": ">=20" },
|
|
14
14
|
"type": "module",
|