@pseolint/mcp 0.6.2 → 0.6.4
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 +58 -10
- package/dist/bin.js +0 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +379 -89
- package/dist/server.js.map +1 -1
- package/package.json +6 -4
package/README.md
CHANGED
|
@@ -1,8 +1,40 @@
|
|
|
1
1
|
# @pseolint/mcp
|
|
2
2
|
|
|
3
|
-
> MCP server for pseolint — audit
|
|
3
|
+
> MCP server for pseolint — audit pSEO sites by template from AI coding assistants.
|
|
4
4
|
|
|
5
|
-
An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that exposes [pseolint](https://www.npmjs.com/package/pseolint) auditing tools to AI coding assistants like Claude Code, Claude Desktop, Cursor, and Windsurf.
|
|
5
|
+
An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that exposes [pseolint](https://www.npmjs.com/package/pseolint) v0.6.3 auditing tools to AI coding assistants like Claude Code, Claude Desktop, Cursor, and Windsurf.
|
|
6
|
+
|
|
7
|
+
All tools are namespaced with a `pseolint_` prefix (`pseolint_audit_site`, `pseolint_explain_score`, `pseolint_check_page_technical`, `pseolint_orchestrate_audit`) so they don't collide with other MCP servers, and each returns both human-readable text and machine-readable `structuredContent`.
|
|
8
|
+
|
|
9
|
+
### What's new in v0.6 — per-template output in tool responses
|
|
10
|
+
|
|
11
|
+
`audit_site` now returns a `templates` array alongside the existing `findings` list. AI clients get the per-template view automatically — no parameter changes needed.
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"verdict": "concerning",
|
|
16
|
+
"risk": 60,
|
|
17
|
+
"templates": [
|
|
18
|
+
{
|
|
19
|
+
"signature": "/listing/:slug",
|
|
20
|
+
"totalUrls": 8201,
|
|
21
|
+
"auditedUrls": ["https://example.com/listing/foo", "..."],
|
|
22
|
+
"verdict": "concerning",
|
|
23
|
+
"risk": 60,
|
|
24
|
+
"variance": {
|
|
25
|
+
"uniformityScore": 0.85,
|
|
26
|
+
"topDriver": { "ruleId": "spam/thin-content", "fireRate": 0.8 }
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
{ "signature": "/category/:slug", "verdict": "ready", "risk": 12 }
|
|
30
|
+
],
|
|
31
|
+
"findings": [...]
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
When iterating `templates`, the `topDriver` rule + `fireRate` is the most actionable signal: "8/10 samples fail `spam/thin-content`" tells the LLM which template is broken and what to fix. The `findings` flat list remains available for per-URL drill-down.
|
|
36
|
+
|
|
37
|
+
Design rationale: [`docs/superpowers/specs/2026-05-04-pseolint-v0.6-audit-as-template-reframe.md`](../../docs/superpowers/specs/2026-05-04-pseolint-v0.6-audit-as-template-reframe.md)
|
|
6
38
|
|
|
7
39
|
### What's new in v0.5.2 — credibility layer
|
|
8
40
|
|
|
@@ -19,7 +51,7 @@ An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that e
|
|
|
19
51
|
|
|
20
52
|
**Conservative MCP defaults**: $2 / 60 tool calls / 180 seconds wall (vs CLI's $5 / 100 / 300). Two output modes: `summary` (terse text for chat UI) and `json` (full manifest + validation + diff). Each invocation reports actual USD spend. Patches that fail deterministic validators are dropped from the manifest and surfaced separately.
|
|
21
53
|
|
|
22
|
-
**Example prompt**: "Use the
|
|
54
|
+
**Example prompt**: "Use the pseolint_orchestrate_audit tool to run an AI-native audit of https://example.com with concrete fix proposals."
|
|
23
55
|
|
|
24
56
|
### Safety defaults (v0.3.3+)
|
|
25
57
|
|
|
@@ -35,7 +67,7 @@ or RFC1918 networks via a malicious URL argument. Specifically:
|
|
|
35
67
|
|
|
36
68
|
## Tools
|
|
37
69
|
|
|
38
|
-
### `
|
|
70
|
+
### `pseolint_orchestrate_audit` (v0.5)
|
|
39
71
|
|
|
40
72
|
Drive an LLM through 25 audit tools and produce a fix manifest with concrete patches. Use when a user wants paste-able fixes (not just a list of issues). Costs ~$1-3 per audit on managed Anthropic.
|
|
41
73
|
|
|
@@ -48,29 +80,45 @@ Drive an LLM through 25 audit tools and produce a fix manifest with concrete pat
|
|
|
48
80
|
|
|
49
81
|
**Returns**: text summary with verdict + categories + top-3 patches per bucket (or full JSON when `format: "json"`). Validation failures listed separately so the LLM-host conversation stays grounded in what actually shipped.
|
|
50
82
|
|
|
51
|
-
**Example prompt:** "Use
|
|
83
|
+
**Example prompt:** "Use pseolint_orchestrate_audit on https://example.com with format=summary"
|
|
52
84
|
|
|
53
|
-
### `
|
|
85
|
+
### `pseolint_audit_site`
|
|
54
86
|
|
|
55
|
-
Run a full pseolint audit on a URL or directory path. Returns the
|
|
87
|
+
Run a full pseolint audit on a URL or directory path. Returns the site-level verdict + risk score, a `templates` array (per-template verdicts + variance metrics), and all per-URL findings with actionable fix suggestions.
|
|
56
88
|
|
|
57
89
|
**Parameters:**
|
|
58
90
|
- `source` (required) — URL or directory path to audit
|
|
59
91
|
- `threshold` — Score threshold for pass/fail (default: 40)
|
|
60
92
|
- `sampleSize` — Audit a random subset of N pages (0 = all)
|
|
61
93
|
- `format` — Output format: `console` or `json` (default: console)
|
|
94
|
+
- `authorityScore` — 0-100 domain authority hint. ≥80 shifts verdict one tier lenient; ≤30 shifts one tier stricter.
|
|
95
|
+
- `sampleSeed` — Integer seed for deterministic stratified sampling. Same seed = same audit = same verdict.
|
|
62
96
|
|
|
63
|
-
**
|
|
97
|
+
**Returns (v0.6 shape):** `verdict`, `risk`, `categories`, `templates: Template[]`, `findings: RuleResult[]`. AI clients should iterate `templates` first — `topDriver.ruleId + fireRate` is the most actionable per-template signal. Use `findings` for per-URL drill-down.
|
|
64
98
|
|
|
65
|
-
|
|
99
|
+
**Example prompt:** "Audit my site at http://localhost:3000 — show me the per-template breakdown"
|
|
100
|
+
|
|
101
|
+
### `pseolint_explain_score`
|
|
66
102
|
|
|
67
103
|
Run an audit and get a human-readable explanation of what's driving the SpamBrain Risk Score, including category breakdowns, top issues, and prioritized fix suggestions.
|
|
68
104
|
|
|
69
105
|
**Parameters:**
|
|
70
106
|
- `source` (required) — URL or directory path to audit
|
|
107
|
+
- `threshold` — Risk threshold for the pass/fail verdict (default: 40)
|
|
108
|
+
- `authorityScore` — 0-100 domain authority hint. ≥80 shifts verdict one tier lenient; ≤30 shifts one tier stricter.
|
|
109
|
+
- `sampleSeed` — Integer seed for deterministic stratified sampling.
|
|
71
110
|
|
|
72
111
|
**Example prompt:** "Explain why my site's SpamBrain score is high"
|
|
73
112
|
|
|
113
|
+
### `pseolint_check_page_technical`
|
|
114
|
+
|
|
115
|
+
Check a single page URL for per-page technical SEO issues (canonical, Open Graph, JSON-LD, robots, meta, thin content, author signals). Does not run cross-page rules — use `pseolint_audit_site` for those.
|
|
116
|
+
|
|
117
|
+
**Parameters:**
|
|
118
|
+
- `url` (required) — Full URL of the page to check
|
|
119
|
+
|
|
120
|
+
**Example prompt:** "Check https://yoursite.com/templates/california-llc for technical SEO issues"
|
|
121
|
+
|
|
74
122
|
## Installation
|
|
75
123
|
|
|
76
124
|
### Claude Code
|
|
@@ -141,7 +189,7 @@ Add to `.vscode/mcp.json`:
|
|
|
141
189
|
|
|
142
190
|
## What It Checks
|
|
143
191
|
|
|
144
|
-
|
|
192
|
+
40+ rules, grouped by theme (scored across 4 categories: integrity, discoverability, citation, data):
|
|
145
193
|
|
|
146
194
|
- **SpamBrain Risk** — near-duplicate detection, entity-swap doorway pages, thin content, boilerplate ratio
|
|
147
195
|
- **Content Quality** — unique value per page, heading/meta uniqueness, E-E-A-T signals
|
package/dist/bin.js
CHANGED
|
File without changes
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAwUpE,wBAAgB,YAAY,IAAI,SAAS,CAwVxC;AAyHD,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAIpD"}
|
package/dist/server.js
CHANGED
|
@@ -2,33 +2,91 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
2
2
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { createRequire } from "node:module";
|
|
5
|
-
import { auditSource, formatConsole, formatJson, orchestrate } from "@pseolint/core";
|
|
5
|
+
import { auditSource, formatConsole, formatJson, orchestrate, SCORED_CATEGORY_KEYS } from "@pseolint/core";
|
|
6
6
|
/**
|
|
7
|
-
* MCP SDK 1.29's `inputSchema`
|
|
8
|
-
* z3.ZodTypeAny | z4.$ZodType>` via a
|
|
9
|
-
* `ZodString` / `ZodNumber` extend
|
|
10
|
-
* satisfy the runtime contract —
|
|
11
|
-
* union's z3 branch first and reports
|
|
12
|
-
* internals (`_type`, `_parse`, etc.) that v4
|
|
7
|
+
* MCP SDK 1.29's `inputSchema`/`outputSchema` are typed as
|
|
8
|
+
* `ZodRawShapeCompat = Record<string, z3.ZodTypeAny | z4.$ZodType>` via a
|
|
9
|
+
* zod-compat shim. zod 4.4.x's high-level `ZodString` / `ZodNumber` extend
|
|
10
|
+
* `core.$ZodType` from `zod/v4/core`, so they satisfy the runtime contract —
|
|
11
|
+
* but TypeScript 6 strict mode infers the union's z3 branch first and reports
|
|
12
|
+
* a structural mismatch against z3 internals (`_type`, `_parse`, etc.) that v4
|
|
13
|
+
* schemas don't have.
|
|
13
14
|
*
|
|
14
|
-
* We name the SDK's expected shape via `
|
|
15
|
+
* We name the SDK's expected shape via `zodShape<T>()`: it accepts a
|
|
15
16
|
* Record<string, ZodTypeAny> at the call site (so each tool's schema stays
|
|
16
17
|
* authored in plain zod 4 syntax) and returns a value typed as the SDK's
|
|
17
|
-
* `ZodRawShapeCompat`. One cast, one place, no runtime cost.
|
|
18
|
-
*
|
|
18
|
+
* `ZodRawShapeCompat`. One cast, one place, no runtime cost. Used for both
|
|
19
|
+
* `inputSchema` and `outputSchema`. Handler args keep their explicit types
|
|
20
|
+
* below to compensate for the lost inference.
|
|
19
21
|
*/
|
|
20
|
-
function
|
|
22
|
+
function zodShape(shape) {
|
|
21
23
|
return shape;
|
|
22
24
|
}
|
|
23
25
|
const require = createRequire(import.meta.url);
|
|
24
26
|
const { version } = require("../package.json");
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
/** Parse a positive-integer env override, falling back to `fallback`. */
|
|
28
|
+
function envInt(name, fallback) {
|
|
29
|
+
const raw = process.env[name];
|
|
27
30
|
if (!raw)
|
|
28
|
-
return
|
|
31
|
+
return fallback;
|
|
29
32
|
const n = parseInt(raw, 10);
|
|
30
|
-
return Number.isFinite(n) && n > 0 ? n :
|
|
31
|
-
}
|
|
33
|
+
return Number.isFinite(n) && n > 0 ? n : fallback;
|
|
34
|
+
}
|
|
35
|
+
/** Default page-sample cap for MCP audits (keeps AI-host runs fast). Override with PSEOLINT_MCP_SAMPLE_CAP. */
|
|
36
|
+
const MCP_SAMPLE_CAP = envInt("PSEOLINT_MCP_SAMPLE_CAP", 50);
|
|
37
|
+
/**
|
|
38
|
+
* Size cap on *human-readable* console/summary text. NOT applied to JSON via
|
|
39
|
+
* string-slicing (that would corrupt it) — the JSON path is bounded by data
|
|
40
|
+
* instead (see JSON_TEXT_CHAR_CAP). Counts UTF-16 code units (a loose proxy for
|
|
41
|
+
* tokens). Override with PSEOLINT_MCP_CHAR_LIMIT.
|
|
42
|
+
*/
|
|
43
|
+
const CHARACTER_LIMIT = envInt("PSEOLINT_MCP_CHAR_LIMIT", 25_000);
|
|
44
|
+
/**
|
|
45
|
+
* When `formatJson` output exceeds this, the text content is replaced with a
|
|
46
|
+
* valid-JSON envelope (truncation marker + the structured summary + a CLI
|
|
47
|
+
* pointer) rather than left unbounded. structuredContent still carries the
|
|
48
|
+
* curated payload; the CLI carries the full manifest. Override with
|
|
49
|
+
* PSEOLINT_MCP_JSON_CHAR_CAP.
|
|
50
|
+
*/
|
|
51
|
+
const JSON_TEXT_CHAR_CAP = envInt("PSEOLINT_MCP_JSON_CHAR_CAP", 100_000);
|
|
52
|
+
/**
|
|
53
|
+
* Max findings embedded in `structuredContent.findings`. Distinct from
|
|
54
|
+
* MCP_SAMPLE_CAP (which caps *pages*): this caps *findings* in the structured
|
|
55
|
+
* payload. `findingCount` always reports the true total and `findingsTruncated`
|
|
56
|
+
* flags when the array was shortened.
|
|
57
|
+
*/
|
|
58
|
+
const STRUCTURED_FINDINGS_CAP = envInt("PSEOLINT_MCP_FINDINGS_CAP", 100);
|
|
59
|
+
/** How many ranked rule drivers `explain_score` returns. */
|
|
60
|
+
const TOP_DRIVERS_LIMIT = 10;
|
|
61
|
+
/**
|
|
62
|
+
* MCP-surface safety ceilings for the orchestrator's budget args. Core imposes
|
|
63
|
+
* NO hard upper bound (DEFAULT_BUDGET is $5 / 100 calls / 300s and any override
|
|
64
|
+
* is accepted unclamped); but in an MCP host the LLM picks these values, so we
|
|
65
|
+
* cap them defensively well above the conservative MCP defaults ($2/60/180):
|
|
66
|
+
* ~10x cost, ~5x calls, ~3x wall. These are policy, not a core constraint.
|
|
67
|
+
*/
|
|
68
|
+
const MAX_ORCH_COST_USD = 50;
|
|
69
|
+
const MAX_ORCH_TOOL_CALLS = 500;
|
|
70
|
+
const MAX_ORCH_WALL_SECONDS = 900;
|
|
71
|
+
/** Upper bound on an explicit page-sample override (the param exists to override MCP_SAMPLE_CAP). */
|
|
72
|
+
const MAX_SAMPLE_SIZE = 500;
|
|
73
|
+
/** The scored categories surfaced to clients, sourced from core (excludes the weight-0 `audit` bucket). */
|
|
74
|
+
const SCORED_CATEGORIES = new Set(SCORED_CATEGORY_KEYS);
|
|
75
|
+
function cliHint(target) {
|
|
76
|
+
return `Use the CLI for the full report: npx pseolint ${target}`;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Truncate human-readable text to CHARACTER_LIMIT, appending a pointer to the
|
|
80
|
+
* full report. Only ever call this on prose/console output — never on JSON.
|
|
81
|
+
*/
|
|
82
|
+
function truncateText(text, hint) {
|
|
83
|
+
if (text.length <= CHARACTER_LIMIT)
|
|
84
|
+
return { text, truncated: false };
|
|
85
|
+
return {
|
|
86
|
+
text: `${text.slice(0, CHARACTER_LIMIT)}\n\n…[truncated ${text.length - CHARACTER_LIMIT} characters]. ${hint}`,
|
|
87
|
+
truncated: true,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
32
90
|
function friendlyError(err, source) {
|
|
33
91
|
const msg = err instanceof Error ? err.message : String(err);
|
|
34
92
|
if (msg.includes("fetch") || msg.includes("ECONNREFUSED")) {
|
|
@@ -38,7 +96,7 @@ function friendlyError(err, source) {
|
|
|
38
96
|
return `Directory not found: ${source}. Check the path exists and is readable.`;
|
|
39
97
|
}
|
|
40
98
|
if (msg.includes("ETIMEDOUT") || msg.includes("timeout")) {
|
|
41
|
-
return `Request to ${source} timed out. The site may be slow or unreachable. Try increasing the timeout or using
|
|
99
|
+
return `Request to ${source} timed out. The site may be slow or unreachable. Try increasing the timeout or using sampleSize to audit fewer pages.`;
|
|
42
100
|
}
|
|
43
101
|
return `Audit failed for ${source}: ${msg}`;
|
|
44
102
|
}
|
|
@@ -61,7 +119,93 @@ function flattenIssues(summary) {
|
|
|
61
119
|
...summary.issues.informational,
|
|
62
120
|
];
|
|
63
121
|
}
|
|
64
|
-
|
|
122
|
+
// --- Shared structured-output schemas (modern SDK pattern) ----------------
|
|
123
|
+
// These mirror the curated payloads built by the handlers below. structuredContent
|
|
124
|
+
// is validated against these by the SDK, so the schemas and the payload builders
|
|
125
|
+
// must stay in lockstep.
|
|
126
|
+
const VERDICT_ENUM = z.enum(["ready", "caution", "concerning", "critical"]);
|
|
127
|
+
const CATEGORY_GRADES_SCHEMA = z.record(z.string(), z.object({ grade: z.string(), issues: z.number() }));
|
|
128
|
+
const FINDING_SCHEMA = z.object({
|
|
129
|
+
ruleId: z.string(),
|
|
130
|
+
severity: z.string(),
|
|
131
|
+
message: z.string(),
|
|
132
|
+
fix: z.string().optional(),
|
|
133
|
+
effort: z.string().optional(),
|
|
134
|
+
pageUrl: z.string().optional(),
|
|
135
|
+
});
|
|
136
|
+
const TEMPLATE_SCHEMA = z.object({
|
|
137
|
+
signature: z.string(),
|
|
138
|
+
totalUrls: z.number(),
|
|
139
|
+
auditedUrlCount: z.number(),
|
|
140
|
+
verdict: z.string(),
|
|
141
|
+
risk: z.number(),
|
|
142
|
+
uniformityScore: z.number().optional(),
|
|
143
|
+
topDriver: z.object({ ruleId: z.string(), fireRate: z.number() }).nullable().optional(),
|
|
144
|
+
});
|
|
145
|
+
const TOP_RULE_SCHEMA = z.object({
|
|
146
|
+
ruleId: z.string(),
|
|
147
|
+
count: z.number(),
|
|
148
|
+
effort: z.string().optional(),
|
|
149
|
+
fix: z.string().optional(),
|
|
150
|
+
});
|
|
151
|
+
/** Only the four scored categories, as advertised in the tool descriptions. */
|
|
152
|
+
function categoryGrades(summary) {
|
|
153
|
+
return Object.fromEntries(Object.entries(summary.categories)
|
|
154
|
+
.filter(([k]) => SCORED_CATEGORIES.has(k))
|
|
155
|
+
.map(([k, v]) => [k, { grade: v.grade, issues: v.issues }]));
|
|
156
|
+
}
|
|
157
|
+
function toFinding(f) {
|
|
158
|
+
return {
|
|
159
|
+
ruleId: f.ruleId,
|
|
160
|
+
severity: f.severity,
|
|
161
|
+
message: f.message,
|
|
162
|
+
...(f.fix ? { fix: f.fix } : {}),
|
|
163
|
+
...(f.effort ? { effort: f.effort } : {}),
|
|
164
|
+
...(f.pageUrl ? { pageUrl: f.pageUrl } : {}),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function toTemplates(summary) {
|
|
168
|
+
return summary.templates.map((t) => ({
|
|
169
|
+
signature: t.signature,
|
|
170
|
+
totalUrls: t.totalUrls,
|
|
171
|
+
auditedUrlCount: t.auditedUrls.length,
|
|
172
|
+
verdict: t.verdict,
|
|
173
|
+
risk: t.risk,
|
|
174
|
+
uniformityScore: t.variance.uniformityScore,
|
|
175
|
+
topDriver: t.variance.topDriver,
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
/** Rule-id → finding-count, computed once per audit. */
|
|
179
|
+
function ruleCounts(findings) {
|
|
180
|
+
const counts = new Map();
|
|
181
|
+
for (const f of findings)
|
|
182
|
+
counts.set(f.ruleId, (counts.get(f.ruleId) ?? 0) + 1);
|
|
183
|
+
return counts;
|
|
184
|
+
}
|
|
185
|
+
// Fix-effort sort order, mirroring core's FixEffort union. A missing effort is
|
|
186
|
+
// treated as "moderate" (preserves prior intent); an UNRECOGNISED value sorts
|
|
187
|
+
// last rather than first — `indexOf` would otherwise return -1 and float
|
|
188
|
+
// unknown efforts above "quick".
|
|
189
|
+
const EFFORT_ORDER = ["quick", "moderate", "structural"];
|
|
190
|
+
function effortRank(effort) {
|
|
191
|
+
const i = EFFORT_ORDER.indexOf((effort ?? "moderate"));
|
|
192
|
+
return i === -1 ? EFFORT_ORDER.length : i;
|
|
193
|
+
}
|
|
194
|
+
/** Rank rules by fix effort (quick first), then by finding count. */
|
|
195
|
+
function topDrivers(findings, counts, limit) {
|
|
196
|
+
return Array.from(counts.entries())
|
|
197
|
+
.map(([ruleId, count]) => ({ ruleId, count, finding: findings.find((f) => f.ruleId === ruleId) }))
|
|
198
|
+
.sort((a, b) => {
|
|
199
|
+
const ea = effortRank(a.finding?.effort);
|
|
200
|
+
const eb = effortRank(b.finding?.effort);
|
|
201
|
+
if (ea !== eb)
|
|
202
|
+
return ea - eb;
|
|
203
|
+
return b.count - a.count;
|
|
204
|
+
})
|
|
205
|
+
.slice(0, limit);
|
|
206
|
+
}
|
|
207
|
+
/** Build the prioritized human-readable explanation from a precomputed driver list. */
|
|
208
|
+
function buildExplanation(summary, threshold, drivers) {
|
|
65
209
|
const lines = [];
|
|
66
210
|
const label = verdictLabel(summary.verdict);
|
|
67
211
|
const passFail = summary.risk >= threshold ? "FAIL" : "PASS";
|
|
@@ -82,29 +226,15 @@ function buildExplanation(summary, threshold) {
|
|
|
82
226
|
lines.push("");
|
|
83
227
|
lines.push("Category breakdown:");
|
|
84
228
|
for (const [cat, info] of Object.entries(summary.categories)) {
|
|
229
|
+
if (!SCORED_CATEGORIES.has(cat))
|
|
230
|
+
continue;
|
|
85
231
|
const catLabel = cat.charAt(0).toUpperCase() + cat.slice(1);
|
|
86
232
|
lines.push(` ${catLabel}: ${info.grade} (${info.issues} issue${info.issues === 1 ? "" : "s"})`);
|
|
87
233
|
}
|
|
88
|
-
|
|
89
|
-
const ruleCounts = new Map();
|
|
90
|
-
for (const f of allFindings) {
|
|
91
|
-
ruleCounts.set(f.ruleId, (ruleCounts.get(f.ruleId) ?? 0) + 1);
|
|
92
|
-
}
|
|
93
|
-
if (ruleCounts.size > 0) {
|
|
234
|
+
if (drivers.length > 0) {
|
|
94
235
|
lines.push("");
|
|
95
236
|
lines.push("What's driving the verdict (fix in this order):");
|
|
96
|
-
const
|
|
97
|
-
const withEffort = Array.from(ruleCounts.entries()).map(([ruleId, count]) => {
|
|
98
|
-
const finding = allFindings.find((f) => f.ruleId === ruleId);
|
|
99
|
-
return { ruleId, count, finding };
|
|
100
|
-
}).sort((a, b) => {
|
|
101
|
-
const ea = effortOrder.indexOf(a.finding?.effort ?? "moderate");
|
|
102
|
-
const eb = effortOrder.indexOf(b.finding?.effort ?? "moderate");
|
|
103
|
-
if (ea !== eb)
|
|
104
|
-
return ea - eb;
|
|
105
|
-
return b.count - a.count;
|
|
106
|
-
});
|
|
107
|
-
for (const { ruleId, count, finding } of withEffort.slice(0, 10)) {
|
|
237
|
+
for (const { ruleId, count, finding } of drivers) {
|
|
108
238
|
const effortTag = finding?.effort ? `[${finding.effort}] ` : "";
|
|
109
239
|
lines.push(` ${effortTag}${ruleId}: ${count} finding${count !== 1 ? "s" : ""}`);
|
|
110
240
|
if (finding?.fix) {
|
|
@@ -124,12 +254,11 @@ function buildExplanation(summary, threshold) {
|
|
|
124
254
|
lines.push(` ${t.signature}: ${t.verdict} — risk ${t.risk}${driverPart}`);
|
|
125
255
|
}
|
|
126
256
|
}
|
|
257
|
+
lines.push("");
|
|
127
258
|
if (summary.risk >= threshold) {
|
|
128
|
-
lines.push("");
|
|
129
259
|
lines.push(`Risk ${summary.risk} exceeds threshold ${threshold}. Focus on quick fixes first to bring risk down, then tackle structural issues.`);
|
|
130
260
|
}
|
|
131
261
|
else {
|
|
132
|
-
lines.push("");
|
|
133
262
|
lines.push(`Risk ${summary.risk} is below threshold ${threshold}. Site passes CI checks.`);
|
|
134
263
|
}
|
|
135
264
|
return lines.join("\n");
|
|
@@ -155,47 +284,96 @@ export function createServer() {
|
|
|
155
284
|
name: "pseolint",
|
|
156
285
|
version,
|
|
157
286
|
});
|
|
158
|
-
server.registerTool("
|
|
287
|
+
server.registerTool("pseolint_audit_site", {
|
|
159
288
|
title: "Audit Site for SpamBrain Risk",
|
|
160
|
-
description: "Use when a user asks to check their website for SEO issues, SpamBrain risk, duplicate content, thin pages, or before deploying a programmatic SEO site. Crawls the site, runs
|
|
161
|
-
inputSchema:
|
|
162
|
-
source: z.string().describe("URL (e.g. http://localhost:3000) or local directory path (e.g. ./out) to audit"),
|
|
163
|
-
threshold: z.number().optional().default(40).describe("Risk threshold —
|
|
164
|
-
sampleSize: z.number().optional().default(0).describe(
|
|
165
|
-
format: z.enum(["console", "json"]).optional().default("console").describe("
|
|
289
|
+
description: "Use when a user asks to check their website for SEO issues, SpamBrain risk, duplicate content, thin pages, or before deploying a programmatic SEO site. Crawls the site, runs 40+ rules scored across 4 categories (integrity, discoverability, citation, data), and returns a verdict (ready/caution/concerning/critical) plus a numeric risk score (0-100, lower is better) with actionable findings. Pre-flight site classification suppresses pSEO-targeted rules on small marketing sites and blogs unless strict mode is set. When the audited site has ≥2 detected URL templates, the response includes a `templates` array with per-template verdicts, risk scores, category grades, variance metrics (uniformityScore, topDriver), and audited-URL counts. Both human-readable text and structured data (structuredContent) are returned. A high-risk site is NOT a tool error — check the `passed` field / `verdict`, not `isError`.",
|
|
290
|
+
inputSchema: zodShape({
|
|
291
|
+
source: z.string().min(1).describe("URL (e.g. http://localhost:3000) or local directory path (e.g. ./out) to audit"),
|
|
292
|
+
threshold: z.number().int().min(0).max(100).optional().default(40).describe("Risk threshold — `passed` is false if risk >= this value (default: 40, semantically equivalent to 'caution' verdict)"),
|
|
293
|
+
sampleSize: z.number().int().min(0).max(MAX_SAMPLE_SIZE).optional().default(0).describe(`Audit a random subset of N pages. 0 = all pages up to the MCP cap of ${MCP_SAMPLE_CAP}. Set explicitly to override the cap (up to ${MAX_SAMPLE_SIZE}).`),
|
|
294
|
+
format: z.enum(["console", "json"]).optional().default("console").describe("Text-content format. Use 'json' for full machine-readable output, 'console' for a human-readable summary. structuredContent is always returned regardless."),
|
|
295
|
+
authorityScore: z.number().int().min(0).max(100).optional().describe("Bring-your-own domain authority (0-100). >=80 shifts the verdict one tier lenient on established brands; <=30 shifts one tier stricter on newer/lower-authority operators. The raw risk number is never modified."),
|
|
296
|
+
sampleSeed: z.number().int().optional().describe("Integer seed for deterministic stratified sampling. Same seed + same sampleSize = same audit = same verdict, run after run."),
|
|
297
|
+
}),
|
|
298
|
+
outputSchema: zodShape({
|
|
299
|
+
verdict: VERDICT_ENUM,
|
|
300
|
+
risk: z.number(),
|
|
301
|
+
passed: z.boolean(),
|
|
302
|
+
threshold: z.number(),
|
|
303
|
+
pageCount: z.number(),
|
|
304
|
+
categories: CATEGORY_GRADES_SCHEMA,
|
|
305
|
+
templates: z.array(TEMPLATE_SCHEMA).optional(),
|
|
306
|
+
findings: z.array(FINDING_SCHEMA).describe(`Up to ${STRUCTURED_FINDINGS_CAP} findings, severity-ordered. See findingCount for the total and findingsTruncated for whether any were dropped.`),
|
|
307
|
+
findingCount: z.number(),
|
|
308
|
+
findingsTruncated: z.boolean().optional().describe("True when more than the cap of findings exist and the structured array was shortened. Use json format or the CLI for the full set."),
|
|
309
|
+
textTruncated: z.boolean().optional().describe("True when the text content (not the structured data) was shortened or replaced to fit the size cap."),
|
|
166
310
|
}),
|
|
167
311
|
annotations: {
|
|
168
312
|
readOnlyHint: true,
|
|
169
313
|
destructiveHint: false,
|
|
314
|
+
idempotentHint: true,
|
|
170
315
|
openWorldHint: true,
|
|
171
316
|
},
|
|
172
|
-
}, async ({ source, threshold, sampleSize, format }) => {
|
|
317
|
+
}, async ({ source, threshold, sampleSize, format, authorityScore, sampleSeed }) => {
|
|
173
318
|
try {
|
|
174
319
|
// MCP audits run on user-supplied URLs inside AI-assistant environments
|
|
175
320
|
// where the LLM may not vet the target. `safeMode: "saas"` flips on
|
|
176
321
|
// guardSsrf (DNS-validated private-range check), tightens maxFetchBytes,
|
|
177
322
|
// and keeps robots.txt honoured — see packages/core SafeMode docs.
|
|
178
323
|
const options = { safeMode: "saas" };
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
options.
|
|
184
|
-
}
|
|
324
|
+
options.sampleSize = sampleSize > 0 ? sampleSize : MCP_SAMPLE_CAP;
|
|
325
|
+
if (authorityScore !== undefined)
|
|
326
|
+
options.authorityScore = authorityScore;
|
|
327
|
+
if (sampleSeed !== undefined)
|
|
328
|
+
options.sampleSeed = sampleSeed;
|
|
185
329
|
const summary = await auditSource(source, options);
|
|
330
|
+
const findings = flattenIssues(summary);
|
|
331
|
+
const findingsTruncated = findings.length > STRUCTURED_FINDINGS_CAP;
|
|
332
|
+
// Build the structured payload first so it can also back the JSON
|
|
333
|
+
// size-cap fallback below.
|
|
334
|
+
const structured = {
|
|
335
|
+
verdict: summary.verdict,
|
|
336
|
+
risk: summary.risk,
|
|
337
|
+
passed: summary.risk < threshold,
|
|
338
|
+
threshold,
|
|
339
|
+
pageCount: summary.pageCount,
|
|
340
|
+
categories: categoryGrades(summary),
|
|
341
|
+
...(summary.templates.length > 0 ? { templates: toTemplates(summary) } : {}),
|
|
342
|
+
findings: findings.slice(0, STRUCTURED_FINDINGS_CAP).map(toFinding),
|
|
343
|
+
findingCount: findings.length,
|
|
344
|
+
...(findingsTruncated ? { findingsTruncated: true } : {}),
|
|
345
|
+
};
|
|
346
|
+
const isJson = format === "json";
|
|
186
347
|
let text;
|
|
187
|
-
|
|
348
|
+
let textTruncated = false;
|
|
349
|
+
if (isJson) {
|
|
350
|
+
// Bound JSON by *data*, not string-slicing (which would corrupt it).
|
|
351
|
+
// Oversized payloads collapse to a valid-JSON envelope; the full set
|
|
352
|
+
// lives in the CLI.
|
|
188
353
|
text = formatJson(summary);
|
|
354
|
+
if (text.length > JSON_TEXT_CHAR_CAP) {
|
|
355
|
+
// Compact envelope: drop the (large) findings array — they remain in
|
|
356
|
+
// structuredContent (capped) and the CLI carries the full set — so
|
|
357
|
+
// the envelope stays small regardless of finding volume.
|
|
358
|
+
const { findings: _findings, ...compact } = structured;
|
|
359
|
+
text = JSON.stringify({ truncated: true, note: "Full JSON exceeded the MCP size cap. Use the structuredContent field for findings, or the CLI for the complete report.", summary: compact, hint: cliHint(source) }, null, 2);
|
|
360
|
+
textTruncated = true;
|
|
361
|
+
}
|
|
189
362
|
}
|
|
190
363
|
else {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
364
|
+
let consoleText = formatConsole(summary, { noColor: true });
|
|
365
|
+
if (summary.pageCount >= MCP_SAMPLE_CAP && sampleSize === 0) {
|
|
366
|
+
consoleText += `\n\nNote: Results capped to ${MCP_SAMPLE_CAP} pages for performance. Run the CLI directly for a full audit: npx pseolint ${source}`;
|
|
367
|
+
}
|
|
368
|
+
const t = truncateText(consoleText, cliHint(source));
|
|
369
|
+
text = t.text;
|
|
370
|
+
textTruncated = t.truncated;
|
|
195
371
|
}
|
|
372
|
+
if (textTruncated)
|
|
373
|
+
structured.textTruncated = true;
|
|
196
374
|
return {
|
|
197
375
|
content: [{ type: "text", text }],
|
|
198
|
-
|
|
376
|
+
structuredContent: structured,
|
|
199
377
|
};
|
|
200
378
|
}
|
|
201
379
|
catch (err) {
|
|
@@ -205,26 +383,58 @@ export function createServer() {
|
|
|
205
383
|
};
|
|
206
384
|
}
|
|
207
385
|
});
|
|
208
|
-
server.registerTool("
|
|
386
|
+
server.registerTool("pseolint_explain_score", {
|
|
209
387
|
title: "Explain pseolint Verdict",
|
|
210
|
-
description: "Use when a user wants to understand WHY their pseolint verdict is concerning/critical, what categories are failing, and what to fix first. Returns a prioritized breakdown with quick wins listed before structural fixes, plus a pass/fail verdict against the risk threshold.",
|
|
211
|
-
inputSchema:
|
|
212
|
-
source: z.string().describe("URL (e.g. http://localhost:3000) or local directory path (e.g. ./out) to audit"),
|
|
213
|
-
threshold: z.number().optional().default(40).describe("Risk threshold for pass/fail verdict (default: 40)"),
|
|
388
|
+
description: "Use when a user wants to understand WHY their pseolint verdict is concerning/critical, what categories are failing, and what to fix first. Returns a prioritized breakdown with quick wins listed before structural fixes, plus a pass/fail verdict against the risk threshold. Both human-readable text and structured data (structuredContent) are returned. A failing threshold is reported via `passed`, not `isError`.",
|
|
389
|
+
inputSchema: zodShape({
|
|
390
|
+
source: z.string().min(1).describe("URL (e.g. http://localhost:3000) or local directory path (e.g. ./out) to audit"),
|
|
391
|
+
threshold: z.number().int().min(0).max(100).optional().default(40).describe("Risk threshold for the pass/fail verdict (default: 40)"),
|
|
392
|
+
authorityScore: z.number().int().min(0).max(100).optional().describe("Bring-your-own domain authority (0-100). >=80 shifts the verdict one tier lenient; <=30 shifts one tier stricter. Raw risk unchanged."),
|
|
393
|
+
sampleSeed: z.number().int().optional().describe("Integer seed for deterministic stratified sampling. Same seed = same audit = same verdict."),
|
|
394
|
+
}),
|
|
395
|
+
outputSchema: zodShape({
|
|
396
|
+
verdict: VERDICT_ENUM,
|
|
397
|
+
risk: z.number(),
|
|
398
|
+
passed: z.boolean(),
|
|
399
|
+
threshold: z.number(),
|
|
400
|
+
pageCount: z.number(),
|
|
401
|
+
categories: CATEGORY_GRADES_SCHEMA,
|
|
402
|
+
topRules: z.array(TOP_RULE_SCHEMA),
|
|
214
403
|
}),
|
|
215
404
|
annotations: {
|
|
216
405
|
readOnlyHint: true,
|
|
217
406
|
destructiveHint: false,
|
|
407
|
+
idempotentHint: true,
|
|
218
408
|
openWorldHint: true,
|
|
219
409
|
},
|
|
220
|
-
}, async ({ source, threshold }) => {
|
|
410
|
+
}, async ({ source, threshold, authorityScore, sampleSeed }) => {
|
|
221
411
|
try {
|
|
222
412
|
const options = { sampleSize: MCP_SAMPLE_CAP, safeMode: "saas" };
|
|
413
|
+
if (authorityScore !== undefined)
|
|
414
|
+
options.authorityScore = authorityScore;
|
|
415
|
+
if (sampleSeed !== undefined)
|
|
416
|
+
options.sampleSeed = sampleSeed;
|
|
223
417
|
const summary = await auditSource(source, options);
|
|
224
|
-
const
|
|
418
|
+
const findings = flattenIssues(summary);
|
|
419
|
+
const drivers = topDrivers(findings, ruleCounts(findings), TOP_DRIVERS_LIMIT);
|
|
420
|
+
const { text } = truncateText(buildExplanation(summary, threshold, drivers), cliHint(source));
|
|
421
|
+
const structured = {
|
|
422
|
+
verdict: summary.verdict,
|
|
423
|
+
risk: summary.risk,
|
|
424
|
+
passed: summary.risk < threshold,
|
|
425
|
+
threshold,
|
|
426
|
+
pageCount: summary.pageCount,
|
|
427
|
+
categories: categoryGrades(summary),
|
|
428
|
+
topRules: drivers.map(({ ruleId, count, finding }) => ({
|
|
429
|
+
ruleId,
|
|
430
|
+
count,
|
|
431
|
+
...(finding?.effort ? { effort: finding.effort } : {}),
|
|
432
|
+
...(finding?.fix ? { fix: finding.fix } : {}),
|
|
433
|
+
})),
|
|
434
|
+
};
|
|
225
435
|
return {
|
|
226
436
|
content: [{ type: "text", text }],
|
|
227
|
-
|
|
437
|
+
structuredContent: structured,
|
|
228
438
|
};
|
|
229
439
|
}
|
|
230
440
|
catch (err) {
|
|
@@ -234,15 +444,21 @@ export function createServer() {
|
|
|
234
444
|
};
|
|
235
445
|
}
|
|
236
446
|
});
|
|
237
|
-
server.registerTool("
|
|
447
|
+
server.registerTool("pseolint_check_page_technical", {
|
|
238
448
|
title: "Check Single Page Technical SEO",
|
|
239
|
-
description: "Use when a user asks to check a specific page URL for technical SEO issues. Checks per-page rules only: canonical tags, Open Graph tags, JSON-LD schema, robots directives, meta tags, thin content, and author signals. Does NOT check cross-page rules (duplicates, cannibalization, linking) — use
|
|
240
|
-
inputSchema:
|
|
241
|
-
url: z.
|
|
449
|
+
description: "Use when a user asks to check a specific page URL for technical SEO issues. Checks per-page rules only: canonical tags, Open Graph tags, JSON-LD schema, robots directives, meta tags, thin content, and author signals. Does NOT check cross-page rules (duplicates, cannibalization, linking) — use pseolint_audit_site for those. Both human-readable text and structured data (structuredContent) are returned.",
|
|
450
|
+
inputSchema: zodShape({
|
|
451
|
+
url: z.url().describe("Full URL of the page to check (e.g. https://yoursite.com/templates/california-llc)"),
|
|
452
|
+
}),
|
|
453
|
+
outputSchema: zodShape({
|
|
454
|
+
url: z.string(),
|
|
455
|
+
issueCount: z.number(),
|
|
456
|
+
findings: z.array(FINDING_SCHEMA),
|
|
242
457
|
}),
|
|
243
458
|
annotations: {
|
|
244
459
|
readOnlyHint: true,
|
|
245
460
|
destructiveHint: false,
|
|
461
|
+
idempotentHint: true,
|
|
246
462
|
openWorldHint: false,
|
|
247
463
|
},
|
|
248
464
|
}, async ({ url }) => {
|
|
@@ -271,9 +487,15 @@ export function createServer() {
|
|
|
271
487
|
}
|
|
272
488
|
}
|
|
273
489
|
lines.push("");
|
|
274
|
-
lines.push("Note: This checks per-page technical rules only. For cross-page analysis (duplicates, cannibalization, linking), use
|
|
490
|
+
lines.push("Note: This checks per-page technical rules only. For cross-page analysis (duplicates, cannibalization, linking), use pseolint_audit_site.");
|
|
491
|
+
const { text } = truncateText(lines.join("\n"), cliHint(url));
|
|
275
492
|
return {
|
|
276
|
-
content: [{ type: "text", text
|
|
493
|
+
content: [{ type: "text", text }],
|
|
494
|
+
structuredContent: {
|
|
495
|
+
url,
|
|
496
|
+
issueCount: perPageFindings.length,
|
|
497
|
+
findings: perPageFindings.map(toFinding),
|
|
498
|
+
},
|
|
277
499
|
};
|
|
278
500
|
}
|
|
279
501
|
catch (err) {
|
|
@@ -283,22 +505,47 @@ export function createServer() {
|
|
|
283
505
|
};
|
|
284
506
|
}
|
|
285
507
|
});
|
|
286
|
-
server.registerTool("
|
|
508
|
+
server.registerTool("pseolint_orchestrate_audit", {
|
|
287
509
|
title: "Orchestrate AI-Native pSEO Audit",
|
|
288
510
|
description: "Use when a user wants concrete, paste-able fixes (rewritten H1s, JSON-LD blocks, robots.txt patches, internal-link suggestions) — not just a list of issues. " +
|
|
289
511
|
"An LLM drives 25 tools (sitemap fetch, template clustering, per-page rule checks, AEO probes) and produces a fix manifest with structured patches, each validated against a deterministic schema. " +
|
|
290
512
|
"Costs real money (~$1-3 per audit on managed Anthropic). Capped at $2 / 60 tool calls / 180 seconds by default — adjust if the user asks for a deeper run. " +
|
|
291
|
-
"Returns a text summary plus
|
|
292
|
-
inputSchema:
|
|
293
|
-
domain: z.string().describe("URL of the site to audit (e.g. https://example.com). The orchestrator's first tool call fetches the sitemap."),
|
|
294
|
-
maxCostUsd: z.number().optional().default(2).describe(
|
|
295
|
-
maxToolCalls: z.number().int().optional().default(60).describe(
|
|
296
|
-
maxWallSeconds: z.number().int().optional().default(180).describe(
|
|
297
|
-
format: z.enum(["summary", "json"]).optional().default("summary").describe("'summary' = terse text for chat UI; 'json' = full manifest + validation + diff."),
|
|
513
|
+
"Returns a text summary plus a compact structured summary (structuredContent); pass format:'json' to also get the full manifest in the text content. The structured `reason` field reports why the run stopped — an incomplete run is not flagged via isError. The full manifest can be streamed via the CLI: `pseolint orchestrate <domain> --manifest-out manifest.json`.",
|
|
514
|
+
inputSchema: zodShape({
|
|
515
|
+
domain: z.string().min(1).describe("URL of the site to audit (e.g. https://example.com). The orchestrator's first tool call fetches the sitemap."),
|
|
516
|
+
maxCostUsd: z.number().min(0.1).max(MAX_ORCH_COST_USD).optional().default(2).describe(`Hard USD cap for this session. Default $2 (conservative for MCP-invoked sessions). Min $0.10, max $${MAX_ORCH_COST_USD}.`),
|
|
517
|
+
maxToolCalls: z.number().int().min(1).max(MAX_ORCH_TOOL_CALLS).optional().default(60).describe(`Hard tool-call cap. Default 60. Max ${MAX_ORCH_TOOL_CALLS}.`),
|
|
518
|
+
maxWallSeconds: z.number().int().min(10).max(MAX_ORCH_WALL_SECONDS).optional().default(180).describe(`Hard wall-clock cap in seconds. Default 180 (3 minutes). Min 10, max ${MAX_ORCH_WALL_SECONDS}.`),
|
|
519
|
+
format: z.enum(["summary", "json"]).optional().default("summary").describe("'summary' = terse text for chat UI; 'json' = full manifest + validation + diff in the text content."),
|
|
520
|
+
}),
|
|
521
|
+
outputSchema: zodShape({
|
|
522
|
+
reason: z.string(),
|
|
523
|
+
completed: z.boolean(),
|
|
524
|
+
usage: z.object({
|
|
525
|
+
toolCallCount: z.number(),
|
|
526
|
+
estimatedUsd: z.number(),
|
|
527
|
+
elapsedMs: z.number(),
|
|
528
|
+
}),
|
|
529
|
+
verdict: z.string().optional(),
|
|
530
|
+
categories: z.object({
|
|
531
|
+
integrity: z.string(),
|
|
532
|
+
discoverability: z.string(),
|
|
533
|
+
citation: z.string(),
|
|
534
|
+
data: z.string(),
|
|
535
|
+
}).optional(),
|
|
536
|
+
patches: z.object({
|
|
537
|
+
valid: z.number(),
|
|
538
|
+
total: z.number(),
|
|
539
|
+
dropped: z.number(),
|
|
540
|
+
}).optional(),
|
|
541
|
+
pageCount: z.number().optional(),
|
|
542
|
+
templateCount: z.number().optional(),
|
|
543
|
+
domainLevelCount: z.number().optional(),
|
|
298
544
|
}),
|
|
299
545
|
annotations: {
|
|
300
546
|
readOnlyHint: true,
|
|
301
547
|
destructiveHint: false,
|
|
548
|
+
idempotentHint: false,
|
|
302
549
|
openWorldHint: true,
|
|
303
550
|
},
|
|
304
551
|
}, async ({ domain, maxCostUsd, maxToolCalls, maxWallSeconds, format }) => {
|
|
@@ -312,19 +559,25 @@ export function createServer() {
|
|
|
312
559
|
maxWallSeconds,
|
|
313
560
|
},
|
|
314
561
|
});
|
|
562
|
+
const structured = buildOrchestrateStructured(result.session.reason, result.session.usage, result.manifest, result.validation);
|
|
563
|
+
let text;
|
|
315
564
|
if (format === "json") {
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
565
|
+
// Intentionally NOT size-bounded: the full manifest IS the payload here
|
|
566
|
+
// and `structuredContent` carries only summary counts (no patches), so
|
|
567
|
+
// enveloping would lose the patches entirely. Manifest size is instead
|
|
568
|
+
// bounded upstream by the budget caps (cost / tool calls / wall time).
|
|
569
|
+
text = JSON.stringify({ session: { reason: result.session.reason, usage: result.session.usage, error: result.session.error },
|
|
570
|
+
manifest: result.manifest,
|
|
571
|
+
validation: result.validation,
|
|
572
|
+
diff: result.diff }, null, 2);
|
|
573
|
+
}
|
|
574
|
+
else {
|
|
575
|
+
const summary = buildOrchestrateSummary(result.session.reason, result.session.usage, result.manifest, result.validation);
|
|
576
|
+
text = truncateText(summary, `Use the CLI for the full manifest: pseolint orchestrate ${domain} --manifest-out manifest.json`).text;
|
|
323
577
|
}
|
|
324
|
-
const text = buildOrchestrateSummary(result.session.reason, result.session.usage, result.manifest, result.validation);
|
|
325
578
|
return {
|
|
326
579
|
content: [{ type: "text", text }],
|
|
327
|
-
|
|
580
|
+
structuredContent: structured,
|
|
328
581
|
};
|
|
329
582
|
}
|
|
330
583
|
catch (err) {
|
|
@@ -336,6 +589,43 @@ export function createServer() {
|
|
|
336
589
|
});
|
|
337
590
|
return server;
|
|
338
591
|
}
|
|
592
|
+
/**
|
|
593
|
+
* Compact structured summary of an orchestrate run — matches the tool's
|
|
594
|
+
* outputSchema. Optional fields are omitted when no manifest was produced.
|
|
595
|
+
* `completed` mirrors the run reason so clients have a boolean without parsing it.
|
|
596
|
+
*/
|
|
597
|
+
function buildOrchestrateStructured(reason, usage, manifest, validation) {
|
|
598
|
+
// Project usage to exactly the declared fields — the real UsageSnapshot also
|
|
599
|
+
// carries inputTokens/outputTokens, which would fail the strict outputSchema
|
|
600
|
+
// (additionalProperties:false) if passed through.
|
|
601
|
+
const base = {
|
|
602
|
+
reason,
|
|
603
|
+
completed: reason === "completed",
|
|
604
|
+
usage: { toolCallCount: usage.toolCallCount, estimatedUsd: usage.estimatedUsd, elapsedMs: usage.elapsedMs },
|
|
605
|
+
};
|
|
606
|
+
if (!manifest)
|
|
607
|
+
return base;
|
|
608
|
+
return {
|
|
609
|
+
...base,
|
|
610
|
+
verdict: manifest.verdict,
|
|
611
|
+
categories: {
|
|
612
|
+
integrity: manifest.categories.integrity,
|
|
613
|
+
discoverability: manifest.categories.discoverability,
|
|
614
|
+
citation: manifest.categories.citation,
|
|
615
|
+
data: manifest.categories.data,
|
|
616
|
+
},
|
|
617
|
+
...(validation ? {
|
|
618
|
+
patches: {
|
|
619
|
+
valid: validation.validPatches,
|
|
620
|
+
total: validation.totalPatches,
|
|
621
|
+
dropped: validation.failures.length,
|
|
622
|
+
},
|
|
623
|
+
} : {}),
|
|
624
|
+
pageCount: manifest.pages.length,
|
|
625
|
+
templateCount: manifest.templates.length,
|
|
626
|
+
domainLevelCount: manifest.domainLevel.length,
|
|
627
|
+
};
|
|
628
|
+
}
|
|
339
629
|
/**
|
|
340
630
|
* Compact text summary suitable for an MCP chat UI. Long manifests get
|
|
341
631
|
* truncated to top-3 patches per bucket; full output is available via the
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pseolint/mcp",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.4",
|
|
4
|
+
"mcpName": "io.github.ouranos-labs/pseolint",
|
|
4
5
|
"description": "MCP server for pseolint — audit programmatic SEO sites from AI coding assistants. v0.5 adds the AI-orchestrated audit tool that produces a fix manifest with concrete patches.",
|
|
5
6
|
"license": "MIT",
|
|
6
7
|
"author": "Ouranos Labs <contact@ouranos-labs.dev>",
|
|
7
8
|
"homepage": "https://pseolint.dev",
|
|
8
9
|
"repository": {
|
|
9
10
|
"type": "git",
|
|
10
|
-
"url": "https://github.com/ouranos-labs/pseolint.git",
|
|
11
|
+
"url": "git+https://github.com/ouranos-labs/pseolint.git",
|
|
11
12
|
"directory": "packages/mcp"
|
|
12
13
|
},
|
|
13
14
|
"keywords": [
|
|
@@ -39,11 +40,12 @@
|
|
|
39
40
|
],
|
|
40
41
|
"scripts": {
|
|
41
42
|
"build": "tsc -p tsconfig.json",
|
|
42
|
-
"lint": "tsc --noEmit -p tsconfig.json"
|
|
43
|
+
"lint": "tsc --noEmit -p tsconfig.json",
|
|
44
|
+
"test": "vitest run --passWithNoTests"
|
|
43
45
|
},
|
|
44
46
|
"dependencies": {
|
|
45
47
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
46
|
-
"@pseolint/core": "^0.6.
|
|
48
|
+
"@pseolint/core": "^0.6.4",
|
|
47
49
|
"zod": "^4.3.6"
|
|
48
50
|
}
|
|
49
51
|
}
|