@rivi-software/agentic-seo-check 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +210 -2
- package/dist/brand.d.ts +11 -0
- package/dist/brand.js +22 -0
- package/dist/brand.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +194 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/audit.d.ts +72 -0
- package/dist/core/audit.js +452 -0
- package/dist/core/audit.js.map +1 -0
- package/dist/core/concurrency.d.ts +4 -0
- package/dist/core/concurrency.js +39 -0
- package/dist/core/concurrency.js.map +1 -0
- package/dist/core/crawl.d.ts +40 -0
- package/dist/core/crawl.js +324 -0
- package/dist/core/crawl.js.map +1 -0
- package/dist/core/fetch.d.ts +27 -0
- package/dist/core/fetch.js +186 -0
- package/dist/core/fetch.js.map +1 -0
- package/dist/core/html/dom.d.ts +13 -0
- package/dist/core/html/dom.js +17 -0
- package/dist/core/html/dom.js.map +1 -0
- package/dist/core/html/extract.d.ts +10 -0
- package/dist/core/html/extract.js +207 -0
- package/dist/core/html/extract.js.map +1 -0
- package/dist/core/html/structured-data.d.ts +21 -0
- package/dist/core/html/structured-data.js +220 -0
- package/dist/core/html/structured-data.js.map +1 -0
- package/dist/core/html/text.d.ts +23 -0
- package/dist/core/html/text.js +152 -0
- package/dist/core/html/text.js.map +1 -0
- package/dist/core/lighthouse.d.ts +50 -0
- package/dist/core/lighthouse.js +216 -0
- package/dist/core/lighthouse.js.map +1 -0
- package/dist/core/performance-rules.d.ts +3 -0
- package/dist/core/performance-rules.js +125 -0
- package/dist/core/performance-rules.js.map +1 -0
- package/dist/core/render-rules.d.ts +8 -0
- package/dist/core/render-rules.js +144 -0
- package/dist/core/render-rules.js.map +1 -0
- package/dist/core/render.d.ts +22 -0
- package/dist/core/render.js +79 -0
- package/dist/core/render.js.map +1 -0
- package/dist/core/report/markdown.d.ts +2 -0
- package/dist/core/report/markdown.js +131 -0
- package/dist/core/report/markdown.js.map +1 -0
- package/dist/core/robots.d.ts +11 -0
- package/dist/core/robots.js +48 -0
- package/dist/core/robots.js.map +1 -0
- package/dist/core/rules/canonical.d.ts +2 -0
- package/dist/core/rules/canonical.js +141 -0
- package/dist/core/rules/canonical.js.map +1 -0
- package/dist/core/rules/content.d.ts +1 -0
- package/dist/core/rules/content.js +55 -0
- package/dist/core/rules/content.js.map +1 -0
- package/dist/core/rules/document.d.ts +1 -0
- package/dist/core/rules/document.js +83 -0
- package/dist/core/rules/document.js.map +1 -0
- package/dist/core/rules/headings.d.ts +1 -0
- package/dist/core/rules/headings.js +81 -0
- package/dist/core/rules/headings.js.map +1 -0
- package/dist/core/rules/hreflang.d.ts +1 -0
- package/dist/core/rules/hreflang.js +100 -0
- package/dist/core/rules/hreflang.js.map +1 -0
- package/dist/core/rules/images.d.ts +1 -0
- package/dist/core/rules/images.js +77 -0
- package/dist/core/rules/images.js.map +1 -0
- package/dist/core/rules/index.d.ts +14 -0
- package/dist/core/rules/index.js +77 -0
- package/dist/core/rules/index.js.map +1 -0
- package/dist/core/rules/indexing.d.ts +10 -0
- package/dist/core/rules/indexing.js +75 -0
- package/dist/core/rules/indexing.js.map +1 -0
- package/dist/core/rules/keyword.d.ts +1 -0
- package/dist/core/rules/keyword.js +111 -0
- package/dist/core/rules/keyword.js.map +1 -0
- package/dist/core/rules/links.d.ts +1 -0
- package/dist/core/rules/links.js +107 -0
- package/dist/core/rules/links.js.map +1 -0
- package/dist/core/rules/meta.d.ts +1 -0
- package/dist/core/rules/meta.js +81 -0
- package/dist/core/rules/meta.js.map +1 -0
- package/dist/core/rules/response.d.ts +1 -0
- package/dist/core/rules/response.js +93 -0
- package/dist/core/rules/response.js.map +1 -0
- package/dist/core/rules/rule.d.ts +42 -0
- package/dist/core/rules/rule.js +51 -0
- package/dist/core/rules/rule.js.map +1 -0
- package/dist/core/rules/social.d.ts +1 -0
- package/dist/core/rules/social.js +115 -0
- package/dist/core/rules/social.js.map +1 -0
- package/dist/core/rules/structured-data.d.ts +25 -0
- package/dist/core/rules/structured-data.js +381 -0
- package/dist/core/rules/structured-data.js.map +1 -0
- package/dist/core/rules/title.d.ts +1 -0
- package/dist/core/rules/title.js +74 -0
- package/dist/core/rules/title.js.map +1 -0
- package/dist/core/score.d.ts +3 -0
- package/dist/core/score.js +17 -0
- package/dist/core/score.js.map +1 -0
- package/dist/core/site-rules.d.ts +64 -0
- package/dist/core/site-rules.js +462 -0
- package/dist/core/site-rules.js.map +1 -0
- package/dist/core/sitemap.d.ts +13 -0
- package/dist/core/sitemap.js +140 -0
- package/dist/core/sitemap.js.map +1 -0
- package/dist/core/static.d.ts +9 -0
- package/dist/core/static.js +281 -0
- package/dist/core/static.js.map +1 -0
- package/dist/core/summary.d.ts +2 -0
- package/dist/core/summary.js +33 -0
- package/dist/core/summary.js.map +1 -0
- package/dist/core/types.d.ts +296 -0
- package/dist/core/types.js +33 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/url.d.ts +20 -0
- package/dist/core/url.js +191 -0
- package/dist/core/url.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-bin.d.ts +2 -0
- package/dist/mcp-bin.js +10 -0
- package/dist/mcp-bin.js.map +1 -0
- package/dist/mcp.d.ts +5 -0
- package/dist/mcp.js +380 -0
- package/dist/mcp.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/package.json +107 -3
- package/skills/seo-audit/SKILL.md +53 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the SEO audit core. These shapes are the public contract
|
|
3
|
+
* of the CLI JSON output and the MCP tool results (`schemaVersion: 1`).
|
|
4
|
+
*/
|
|
5
|
+
export const SEVERITY_RANK = {
|
|
6
|
+
error: 3,
|
|
7
|
+
warning: 2,
|
|
8
|
+
info: 1,
|
|
9
|
+
};
|
|
10
|
+
export const DEFAULT_THRESHOLDS = {
|
|
11
|
+
titleMinChars: 30,
|
|
12
|
+
titleMaxChars: 60,
|
|
13
|
+
descriptionMinChars: 70,
|
|
14
|
+
descriptionMaxChars: 160,
|
|
15
|
+
h1MaxChars: 70,
|
|
16
|
+
thinContentWords: 300,
|
|
17
|
+
slowResponseMs: 2000,
|
|
18
|
+
deepPageDepth: 3,
|
|
19
|
+
maxKeywordDensityPercent: 3,
|
|
20
|
+
};
|
|
21
|
+
export const emptyCounts = () => ({
|
|
22
|
+
error: 0,
|
|
23
|
+
warning: 0,
|
|
24
|
+
info: 0,
|
|
25
|
+
});
|
|
26
|
+
export const countFindings = (findings) => {
|
|
27
|
+
const counts = emptyCounts();
|
|
28
|
+
for (const f of findings) {
|
|
29
|
+
counts[f.severity] += 1;
|
|
30
|
+
}
|
|
31
|
+
return counts;
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,CAAC,MAAM,aAAa,GAA6B;IACrD,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;CACR,CAAC;AA4UF,MAAM,CAAC,MAAM,kBAAkB,GAAe;IAC5C,aAAa,EAAE,EAAE;IACjB,aAAa,EAAE,EAAE;IACjB,mBAAmB,EAAE,EAAE;IACvB,mBAAmB,EAAE,GAAG;IACxB,UAAU,EAAE,EAAE;IACd,gBAAgB,EAAE,GAAG;IACrB,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,CAAC;IAChB,wBAAwB,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,GAAmB,EAAE,CAAC,CAAC;IAChD,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;CACR,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAmB,EAAkB,EAAE;IACnE,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAE7B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const isHttpUrl: (value: string) => boolean;
|
|
2
|
+
/** Resolve `href` against `base`, returning null for non-http(s) or unparsable values. */
|
|
3
|
+
export declare const resolveUrl: (href: string, base: string) => string | null;
|
|
4
|
+
/**
|
|
5
|
+
* Canonical form used for visited-sets and comparisons: lower-cased scheme/host,
|
|
6
|
+
* default ports dropped, fragment removed, tracking parameters removed.
|
|
7
|
+
* Path and remaining query are kept verbatim (trailing slashes matter to servers).
|
|
8
|
+
*/
|
|
9
|
+
export declare const normalizeUrl: (input: string) => string | null;
|
|
10
|
+
export declare const hostOf: (url: string) => string | null;
|
|
11
|
+
export declare const stripWww: (host: string) => string;
|
|
12
|
+
/** Same site: identical host ignoring `www.`; optionally any subdomain of the start host. */
|
|
13
|
+
export declare const isSameSite: (candidate: string, startHost: string, includeSubdomains?: boolean) => boolean;
|
|
14
|
+
/** Heuristic: does the path look like it points at an HTML document (not an asset)? */
|
|
15
|
+
export declare const looksLikeHtml: (url: string) => boolean;
|
|
16
|
+
/** `/dir/index.html` -> `/dir/`, `/page.html` -> `/page`, trailing slash dropped except root. */
|
|
17
|
+
export declare const normalizePath: (pathname: string) => string;
|
|
18
|
+
/** Compare two URLs by path only (used for static-directory audits where the host is synthetic). */
|
|
19
|
+
export declare const samePath: (a: string, b: string) => boolean;
|
|
20
|
+
export declare const truncate: (value: string, max?: number) => string;
|
package/dist/core/url.js
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
const TRACKING_PARAMS = new Set([
|
|
3
|
+
"utm_source",
|
|
4
|
+
"utm_medium",
|
|
5
|
+
"utm_campaign",
|
|
6
|
+
"utm_term",
|
|
7
|
+
"utm_content",
|
|
8
|
+
"utm_id",
|
|
9
|
+
"fbclid",
|
|
10
|
+
"gclid",
|
|
11
|
+
"dclid",
|
|
12
|
+
"msclkid",
|
|
13
|
+
"mc_cid",
|
|
14
|
+
"mc_eid",
|
|
15
|
+
"_hsenc",
|
|
16
|
+
"_hsmi",
|
|
17
|
+
"ref",
|
|
18
|
+
]);
|
|
19
|
+
const NON_HTML_EXTENSIONS = new Set([
|
|
20
|
+
".pdf",
|
|
21
|
+
".jpg",
|
|
22
|
+
".jpeg",
|
|
23
|
+
".png",
|
|
24
|
+
".gif",
|
|
25
|
+
".webp",
|
|
26
|
+
".avif",
|
|
27
|
+
".svg",
|
|
28
|
+
".ico",
|
|
29
|
+
".bmp",
|
|
30
|
+
".tiff",
|
|
31
|
+
".mp4",
|
|
32
|
+
".webm",
|
|
33
|
+
".mp3",
|
|
34
|
+
".wav",
|
|
35
|
+
".ogg",
|
|
36
|
+
".mov",
|
|
37
|
+
".avi",
|
|
38
|
+
".zip",
|
|
39
|
+
".gz",
|
|
40
|
+
".tar",
|
|
41
|
+
".rar",
|
|
42
|
+
".7z",
|
|
43
|
+
".dmg",
|
|
44
|
+
".exe",
|
|
45
|
+
".msi",
|
|
46
|
+
".css",
|
|
47
|
+
".js",
|
|
48
|
+
".mjs",
|
|
49
|
+
".map",
|
|
50
|
+
".json",
|
|
51
|
+
".xml",
|
|
52
|
+
".txt",
|
|
53
|
+
".rss",
|
|
54
|
+
".atom",
|
|
55
|
+
".woff",
|
|
56
|
+
".woff2",
|
|
57
|
+
".ttf",
|
|
58
|
+
".otf",
|
|
59
|
+
".eot",
|
|
60
|
+
".doc",
|
|
61
|
+
".docx",
|
|
62
|
+
".xls",
|
|
63
|
+
".xlsx",
|
|
64
|
+
".ppt",
|
|
65
|
+
".pptx",
|
|
66
|
+
".csv",
|
|
67
|
+
]);
|
|
68
|
+
export const isHttpUrl = (value) => /^https?:\/\//iu.test(value.trim());
|
|
69
|
+
/** Resolve `href` against `base`, returning null for non-http(s) or unparsable values. */
|
|
70
|
+
export const resolveUrl = (href, base) => {
|
|
71
|
+
const trimmed = href.trim();
|
|
72
|
+
if (!trimmed) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
if (/^(?:mailto|tel|sms|javascript|data|blob|file|ftp|whatsapp|skype):/iu.test(trimmed)) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
const url = new URL(trimmed, base);
|
|
80
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
return url.href;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Canonical form used for visited-sets and comparisons: lower-cased scheme/host,
|
|
91
|
+
* default ports dropped, fragment removed, tracking parameters removed.
|
|
92
|
+
* Path and remaining query are kept verbatim (trailing slashes matter to servers).
|
|
93
|
+
*/
|
|
94
|
+
export const normalizeUrl = (input) => {
|
|
95
|
+
try {
|
|
96
|
+
const url = new URL(input);
|
|
97
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
url.hash = "";
|
|
101
|
+
url.hostname = url.hostname.toLowerCase();
|
|
102
|
+
if ((url.protocol === "http:" && url.port === "80") ||
|
|
103
|
+
(url.protocol === "https:" && url.port === "443")) {
|
|
104
|
+
url.port = "";
|
|
105
|
+
}
|
|
106
|
+
const params = [...url.searchParams.keys()];
|
|
107
|
+
for (const key of params) {
|
|
108
|
+
if (TRACKING_PARAMS.has(key.toLowerCase())) {
|
|
109
|
+
url.searchParams.delete(key);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if ([...url.searchParams.keys()].length === 0) {
|
|
113
|
+
url.search = "";
|
|
114
|
+
}
|
|
115
|
+
return url.href;
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
export const hostOf = (url) => {
|
|
122
|
+
try {
|
|
123
|
+
return new URL(url).hostname.toLowerCase();
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
export const stripWww = (host) => host.replace(/^www\./iu, "");
|
|
130
|
+
/** Same site: identical host ignoring `www.`; optionally any subdomain of the start host. */
|
|
131
|
+
export const isSameSite = (candidate, startHost, includeSubdomains = false) => {
|
|
132
|
+
const host = hostOf(candidate);
|
|
133
|
+
if (!host) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
const a = stripWww(host);
|
|
137
|
+
const b = stripWww(startHost.toLowerCase());
|
|
138
|
+
if (a === b) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
return includeSubdomains && a.endsWith(`.${b}`);
|
|
142
|
+
};
|
|
143
|
+
/** Heuristic: does the path look like it points at an HTML document (not an asset)? */
|
|
144
|
+
export const looksLikeHtml = (url) => {
|
|
145
|
+
try {
|
|
146
|
+
const { pathname } = new URL(url);
|
|
147
|
+
const ext = path.posix.extname(pathname).toLowerCase();
|
|
148
|
+
if (!ext) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
if (ext === ".html" ||
|
|
152
|
+
ext === ".htm" ||
|
|
153
|
+
ext === ".php" ||
|
|
154
|
+
ext === ".asp" ||
|
|
155
|
+
ext === ".aspx" ||
|
|
156
|
+
ext === ".jsp") {
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
return !NON_HTML_EXTENSIONS.has(ext);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
/** `/dir/index.html` -> `/dir/`, `/page.html` -> `/page`, trailing slash dropped except root. */
|
|
166
|
+
export const normalizePath = (pathname) => {
|
|
167
|
+
let p = pathname;
|
|
168
|
+
try {
|
|
169
|
+
p = decodeURIComponent(p);
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
/* keep as-is */
|
|
173
|
+
}
|
|
174
|
+
p = p.replace(/\/index\.html?$/iu, "/");
|
|
175
|
+
p = p.replace(/\.html?$/iu, "");
|
|
176
|
+
if (p.length > 1 && p.endsWith("/")) {
|
|
177
|
+
p = p.slice(0, -1);
|
|
178
|
+
}
|
|
179
|
+
return p === "" ? "/" : p;
|
|
180
|
+
};
|
|
181
|
+
/** Compare two URLs by path only (used for static-directory audits where the host is synthetic). */
|
|
182
|
+
export const samePath = (a, b) => {
|
|
183
|
+
try {
|
|
184
|
+
return (normalizePath(new URL(a).pathname) === normalizePath(new URL(b).pathname));
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
export const truncate = (value, max = 120) => value.length > max ? `${value.slice(0, max - 1)}…` : value;
|
|
191
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/core/url.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from "./core/types.js";
|
|
2
|
+
export { auditHtml, auditUrl, auditFile, auditSite, auditDirectory, auditTarget, compactAudit, rollupIssues, DEFAULT_CRAWL, } from "./core/audit.js";
|
|
3
|
+
export type { AuditOptions, CrawlOptions, HtmlAuditInput, ProgressEvent, } from "./core/audit.js";
|
|
4
|
+
export { extractPage } from "./core/html/extract.js";
|
|
5
|
+
export { ALL_RULES, PAGE_RULES, findRule, runPageRules, } from "./core/rules/index.js";
|
|
6
|
+
export { renderMarkdown } from "./core/report/markdown.js";
|
|
7
|
+
export { runLighthouse, LighthouseUnavailableError, } from "./core/lighthouse.js";
|
|
8
|
+
export { renderPage, RenderUnavailableError } from "./core/render.js";
|
|
9
|
+
export { fetchPage, probeUrl, DEFAULT_USER_AGENT } from "./core/fetch.js";
|
|
10
|
+
export type { FetchOptions, FetchResult } from "./core/fetch.js";
|
|
11
|
+
export { createMcpServer, startMcpServer } from "./mcp.js";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from "./core/types.js";
|
|
2
|
+
export { auditHtml, auditUrl, auditFile, auditSite, auditDirectory, auditTarget, compactAudit, rollupIssues, DEFAULT_CRAWL, } from "./core/audit.js";
|
|
3
|
+
export { extractPage } from "./core/html/extract.js";
|
|
4
|
+
export { ALL_RULES, PAGE_RULES, findRule, runPageRules, } from "./core/rules/index.js";
|
|
5
|
+
export { renderMarkdown } from "./core/report/markdown.js";
|
|
6
|
+
export { runLighthouse, LighthouseUnavailableError, } from "./core/lighthouse.js";
|
|
7
|
+
export { renderPage, RenderUnavailableError } from "./core/render.js";
|
|
8
|
+
export { fetchPage, probeUrl, DEFAULT_USER_AGENT } from "./core/fetch.js";
|
|
9
|
+
export { createMcpServer, startMcpServer } from "./mcp.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EACL,SAAS,EACT,QAAQ,EACR,SAAS,EACT,SAAS,EACT,cAAc,EACd,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,YAAY,GACb,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EACL,aAAa,EACb,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAI1E,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/mcp-bin.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { startMcpServer } from "./mcp.js";
|
|
3
|
+
try {
|
|
4
|
+
await startMcpServer();
|
|
5
|
+
}
|
|
6
|
+
catch (error) {
|
|
7
|
+
process.stderr.write(`agentic-seo-check MCP server failed to start: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
8
|
+
process.exit(1);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=mcp-bin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-bin.js","sourceRoot":"","sources":["../src/mcp-bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,IAAI,CAAC;IACH,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iDAAiD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAC5G,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
package/dist/mcp.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
export declare const MCP_SERVER_NAME = "agentic-seo-check";
|
|
3
|
+
export declare const MCP_SERVER_VERSION: string;
|
|
4
|
+
export declare const createMcpServer: () => McpServer;
|
|
5
|
+
export declare const startMcpServer: () => Promise<void>;
|