aislopmeter
Enables scanning Astro projects for AI slop, providing per-page scores, findings, and step-by-step fix instructions with exact file locations.
Enables scanning Markdown content for AI slop, providing scores, findings, and actionable fix plans.
Enables scanning Next.js projects for AI slop, providing per-page scores, findings with exact file:line locations, and step-by-step fix instructions.
Enables scanning React projects (including Vite/React) for AI slop, providing scores, findings, and actionable fix plans with file:line references.
Enables scanning Svelte projects for AI slop, providing scores, findings, and actionable fix plans with file:line references.
Enables scanning Vite projects (including Vite/React) for AI slop, providing scores, findings, and actionable fix plans with file:line references.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@aislopmeterscan https://my-portfolio.com for AI slop and show me what to fix"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AI Slop Meter
Türkçe · English
Measure the AI slop on any website. Then fix it.
AI Slop Meter scores a website or a web project for slop: generic copy, the default AI-builder look, and unfinished details.
It shows the evidence behind every point, down to the file and line.
It turns the result into a calm, step-by-step plan.
Your own AI (Claude, Cursor, Gemini CLI and others) can then carry out that plan in your code.
It runs on your machine as an MCP server and a CLI. No API keys, no account, nothing sent anywhere except the request to the site you asked it to scan.
Quick start (2 minutes)
Have Node.js 20 or newer installed.
In Claude Code, paste:
claude mcp add aislopmeter -- npx -y github:omergocmen/aislopmeter mcpFor Claude Desktop, Cursor and others, see Install as an MCP server.
Ask your AI: "Scan https://my-site.com for AI slop and show me what to fix."
To try it without installing anything:
npx -y github:omergocmen/aislopmeter https://my-site.com --openBefore: 83 / 100, pure slop | After: 1 / 100, clean |
|
|
Both pages are in examples/novaflow. The "after" page was rewritten using the owner's answers to the rescue plan's questions (FACTS.md). The product and its numbers are fictional.
Related MCP server: PureRank MCP Server
What it does
Scans a whole website, a project folder (Next.js, Vite/React, Astro, Vue, Svelte, plain HTML, Markdown content…) or a single
.htmlfile. For a website it finds the pages throughsitemap.xmland internal links (respectingrobots.txt), scans up to 30 by default (--pages allfor up to 200) and gives every page its own score and to-do list. A problem that repeats across pages is shown once, with the list of pages it is on.Scores five areas, with research-based checks (criteria and sources):
Substance: concrete facts, claims you can check, real proof
Language patterns: clichés, "not just X, but Y", empty importance claims
Template design: purple gradients, glow and glass, emoji icons, identical cards
Unfinished details: lorem ipsum,
href="#", "Vite + React + TS", chatbot leftoversBuilder traces: Lovable, Bolt, v0, Replit, Base44 (information only)
Plans the rescue:
questions for the owner (so the AI never invents facts)
quick clean-ups
copy rewrites
a design direction
trust fixes
Each step carries a time estimate and its expected score drop.
Tells you what to do about every finding, not only what is wrong:
a one-line fix right under the title;
numbered steps and the exact
file:lineplaces to change;a before/after example for copy problems, and a "done when" check;
a Copy as a prompt for your AI button that hands that one problem to Claude, Cursor or Lovable.
Shows it in a two-screen visual report. The Report screen has the score and the findings. The What to do screen has a checklist that starts with three quick wins, and boxes for answering the owner questions. For site scans, a Pages screen lists every page, worst first, with its own score and findings.
Re-measures after each change and prints a before/after table.
Report | What to do |
|
|
Every finding opens to the same "what to do" box:

Install as an MCP server
You need Node.js 20 or newer.
For now the package runs straight from GitHub (github:omergocmen/aislopmeter). The first run downloads and installs it, which takes a few seconds.
Claude Code
claude mcp add aislopmeter -- npx -y github:omergocmen/aislopmeter mcpClaude Desktop: add this to claude_desktop_config.json:
{
"mcpServers": {
"aislopmeter": { "command": "npx", "args": ["-y", "github:omergocmen/aislopmeter", "mcp"] }
}
}Cursor (.cursor/mcp.json), Gemini CLI (~/.gemini/settings.json), Windsurf and others: use the same mcpServers block.
VS Code (.vscode/mcp.json): use "servers": { "aislopmeter": { "type": "stdio", "command": "npx", "args": ["-y", "github:omergocmen/aislopmeter", "mcp"] } }.
Use it
Just ask your AI:
Scan my project for AI slop and show me what to fix. Rescue https://my-site.com from slop. Open the report when you're done. Sitemi slop'tan kurtar, bitince raporu tarayıcımda aç.
The rescue prompt runs the whole loop. In Claude Code it is /mcp__aislopmeter__rescue. The AI will:
ask once whether to open the report in your browser when it finishes, so you can walk away;
scan the target and summarise the three findings that matter most;
build the plan and ask you the owner questions in one message;
apply the plan phase by phase. In a project it edits the exact
file:linelocations. For a live URL it hands you rewritten copy, a design spec and a prompt for your builder;re-scan after each phase until the target score (default 20);
write the visual report, open it if you agreed, and summarise before/after.
Prefer small steps? The fix prompt (/mcp__aislopmeter__fix) fixes only the most important problem, re-scans, shows what changed and offers the next one.
Tools
Tool | What it does |
| Scan a website (crawls up to |
| Scan pasted or generated HTML. |
| Turn a scan into a phased plan, with |
| The full report for one page of a site scan, with its own findings and steps. |
| Step-by-step instructions for one finding: what to change, where ( |
| Write or open the visual report for a scan. |
| Before/after for two scan ids. |
| Read the guides: |
The same guides are also exposed as MCP resources (aislopmeter://guide/...).
Command line
npx -y github:omergocmen/aislopmeter https://example.com # whole site, up to 30 pages
npx -y github:omergocmen/aislopmeter https://example.com --pages all # up to 200 pages
npx -y github:omergocmen/aislopmeter https://example.com --pages 1 # only this page
npx -y github:omergocmen/aislopmeter ./my-app --plan --lang tr # project folder, plus the rescue plan in Turkish
npx -y github:omergocmen/aislopmeter ./my-app --open # write the visual report and open it
npx -y github:omergocmen/aislopmeter ./dist/index.html --fail-above 40 # fail CI when the score is above 40
npx -y github:omergocmen/aislopmeter ./my-app --json # raw resultReports are written to ~/.aislopmeter/reports/. Set AISLOPMETER_REPORT_DIR to change that.
Folder scans skip node_modules, hidden folders and the ready-made primitives in components/ui. At the top of the scanned folder they also skip dist, build, out, test, docs, examples and repo documents such as README, CHANGELOG and LICENSE. To scan one of these, point AI Slop Meter at that folder or file directly. Use --ignore path1,path2 to leave out anything else.
In CI (GitHub Actions):
- run: npx -y github:omergocmen/aislopmeter ./ --fail-above 40Pages built with JavaScript
Some servers send an empty client-rendered shell. In that case AI Slop Meter renders the page with the Chrome or Edge already installed on your computer, through playwright-core, which downloads no browser. If neither browser is found, set AISLOPMETER_CHROME to a browser path, or scan the project folder instead. Folder scans read the source and give file:line locations.
How the score works
Each finding adds points, and each category has a cap:
Category | Max |
Substance | 30 |
Language | 22 |
Design | 28 |
Unfinished details | 15 |
Builder traces | 5 |
Signs that a real business stands behind the page lower the score: a real address, named people, prices, legal details, links to independent reviews.
A high score needs problems in several areas: with only one area the score is capped at 35, with two at 60. A purple brand colour alone is never heavy slop. For websites the page's own style.css and scripts are read too.
Bands:
Score | Band |
0–19 | clean |
20–39 | trace amounts |
40–59 | noticeable |
60–79 | heavy |
80–100 | pure slop |
Why rules and not an AI judge? In the largest study so far, LLMs asked "is this slop?" agreed with human editors at κ ≈ 0. Density and relevance predicted the human verdict best. So AI Slop Meter measures with explainable rules and uses your AI only to fix things (details).
What it is not
Not an AI-authorship detector. A page made entirely with AI can score clean, and a hand-written page can score high.
Not a ranking oracle. The checks follow Google's helpful-content and spam guidance, but the score is not a search ranking.
The Turkish lists are not measured yet. They are compiled from Turkish sources and from known English tells. Calibration help is welcome.
Privacy
Everything runs locally.
URL scans: AI Slop Meter fetches only pages of the site you point it at, follows
robots.txt, and stops at the page limit.Folder scans: files are only read, never changed.
Reports: written only to your own computer, in
~/.aislopmeter/reports/.No telemetry.
Your AI client sees the report text, as it does with any tool output.
Contributing
Issues and pull requests are welcome. Most useful right now:
false positives on real hand-made sites;
Turkish and other-language lexicons measured against pre-2023 web text;
more builder fingerprints.
Run the tests with npm test.
License
MIT
Available Tools
8 toolsslop_compareCompare two scansARead-only
Show the before/after difference between two scans: score change, resolved findings, remaining and new ones.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Report language. Use the language the user is writing in. Default: en. | |
| after_id | Yes | ||
| before_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, and the description adds meaningful non-obvious context about the returned result: it computes a score delta and classifies findings into resolved, remaining, and new. With no output schema, this return-shape disclosure carries real weight, though it omits error/edge behavior for mismatched or missing scans.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with a colon-delimited enumeration of the diff components. Zero filler, and the core purpose is stated before the detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read-only comparison tool, the description covers purpose and output categories, which is close to sufficient. Gaps remain: no statement of prerequisites (both scans must exist, plausibly from the same project), no behavior when the scans are unrelated or an id is invalid, and no routing guidance against the report/scan siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% (only `lang` is documented), so the description must compensate. The before/after framing maps onto `before_id`/`after_id` and confirms ordering semantics (which scan is the baseline), but it adds little beyond what the parameter names already convey and says nothing about id format or same-project requirements.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear specific verb+resource ('Compare two scans') plus an enumeration of what the diff contains (score change, resolved, remaining, new). It never distinguishes itself from siblings like slop_report (single-scan report) or slop_scan, so an agent must infer the difference from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the before/after framing — compare an earlier scan with a later one after fixes. However, there is no explicit when-to-use guidance, no stated prerequisite that both scan ids must exist (and presumably belong to the same project), and no routing to alternatives such as slop_report when only one scan is of interest.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slop_fixInstructions to fix one findingARead-only
Concrete, step-by-step instructions for one finding of a scan: what to change, the exact file:line places, a before/after example and a "done when" check. Without finding_id it picks the most important open finding and lists the others. Use it to work through a scan one problem at a time.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Report language. Use the language the user is writing in. Default: en. | |
| page | No | Site scans only: a page path ("/pricing") to get the instructions for that page alone. Omit for the site-wide item with all its pages. | |
| scan_id | Yes | Scan id, e.g. "s1" | |
| finding_id | No | Finding id from the report, e.g. "lexicon" or "dead-links". Omit for the next most important one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuinely non-obvious behavior: omitting finding_id selects the most important open finding and lists the others, and the response shape (before/after, done-when check) is disclosed despite there being no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the deliverable is front-loaded before the fallback behavior and usage note. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, single-parameter-required tool with no output schema, the description covers the deliverable content, the default selection behavior, and the calling context. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description mentions finding_id omission and the site-wide page behavior, but those are already spelled out in the schema's own parameter descriptions, so it adds little semantic value beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific deliverable: step-by-step fix instructions for one finding, including what to change, exact file:line locations, a before/after example, and a 'done when' check. That is far more concrete than the title and clearly separates this action tool from reporting/summary siblings like slop_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage mode ("work through a scan one problem at a time") and explains the no-finding_id fallback. It does not, however, name alternatives such as slop_rescue_plan or slop_report, nor state when not to reach for this tool, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slop_guideRead an AI Slop Meter guideARead-only
Read the reference guides behind AI Slop Meter: "criteria" (every check, its threshold and sources), "playbook" (the full rescue method), "copy" (rewriting rules with examples), "design" (how to leave the template look behind), "interview" (questions that get real facts from the owner).
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful context about what each guide contains, but says nothing about the size, structure, or return format of the content it pulls back.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with a colon-delimited list; every clause maps to a parameter value and carries information. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter documentation lookup with read-only annotations and no output schema, the description covers purpose and per-topic content adequately. Only the return format/size of the guide text is unaddressed, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and there is only one parameter, but the description compensates by explaining what each enum value actually yields (e.g., 'criteria' = every check with threshold and sources; 'playbook' = the full rescue method). That adds meaning beyond the bare enum list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) and resource (the reference guides behind AI Slop Meter), and enumerates the five distinct topics. An agent can immediately tell this apart from siblings like slop_scan, slop_rescue_plan, or slop_fix, which act on content rather than returning documentation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The enumeration of guide contents implies when each topic is useful, but there is no explicit when-to-use or when-not-to-use guidance relative to siblings (e.g., read 'criteria' before scanning, or 'playbook' before rescuing). Usage is inferred rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slop_pageReport for one page of a site scanARead-only
The full report for a single page of a site scan: its own score, categories and findings, each with steps and a done-when check. Use it to work through a site page by page.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Report language. Use the language the user is writing in. Default: en. | |
| page | Yes | Page path as listed in the scan ("/pricing") or its full URL | |
| scan_id | Yes | Id of a site scan, e.g. "s1" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds that the payload includes per-finding remediation steps and a done-when check, but says nothing about prerequisites (scan_id must reference an existing scan) or what happens when the page path is not in the scan. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the content enumeration front-loaded before the usage hint. Efficient, though the second sentence is thin enough that it could have carried more routing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description usefully enumerates the return shape (score, categories, findings, steps, done-when check). For a read-only, single-object retrieval tool with fully documented parameters, that covers most of what an agent needs; only error/precondition behavior is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so scan_id, page, and lang are fully documented in the schema, including the enum and the default for lang. The description adds no parameter-level meaning beyond that, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete noun+scope: 'the full report for a single page of a site scan,' and enumerates what it contains (score, categories, findings, steps, done-when check). It implicitly contrasts with the site-wide sibling slop_report via 'a single page,' but never names an alternative, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use it to work through a site page by page' gives a workflow hint, which is more than nothing, but there is no explicit when-not condition and no named alternative (e.g., use slop_report for the whole site, slop_fix to act on findings). Usage is implied rather than specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slop_reportWrite or open the visual reportA
Write the visual HTML report for a scan (a Report screen with the score and findings, and a calm What-to-do screen with a checklist, time estimates and the owner questions) and optionally open it in the user's browser. Use it at the end of a rescue so the user finds the result waiting when they return. Pass open: true only if the user agreed to have it opened.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Report language. Use the language the user is writing in. Default: en. | |
| open | No | Open it in the default browser. Only with the user's permission. Default false. | |
| scan_id | Yes | Scan id, e.g. "s3". Use the latest scan to show the final state. | |
| target_score | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark it as a write operation (readOnlyHint=false) that is not open-world, and the description adds useful behavior beyond that: it writes an HTML file and may launch the user's browser, and browser launch requires prior user consent. It does not mention where the file lands, overwrite behavior, or failure modes, but the consent gating is meaningful added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core verb and resource, followed by two short sentences covering timing and the consent rule. The parenthetical screen inventory is slightly verbose but it earns its place by describing report contents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with no output schema, the description covers what is produced, when to call it, and the one side-effectful parameter's consent requirement. The only notable gap is the undocumented target_score parameter, which an agent would have to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema carries most parameter meaning; the description reinforces the permission condition on 'open' but adds nothing about 'lang'. Most notably 'target_score' has no description in either the schema or the description, leaving its effect on the report unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Write the visual HTML report for a scan') and even enumerates the report's screens, so an agent knows exactly what gets produced. It does not, however, differentiate itself from the sibling slop_scan_html, which by name also appears to emit HTML, leaving a real ambiguity unresolved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear timing guidance ('at the end of a rescue so the user finds the result waiting') and a conditional rule for the open parameter ('only if the user agreed'). No explicit when-not or named alternative is given, so the sibling routing question from slop_scan_html remains unanswered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slop_rescue_planBuild a rescue planARead-only
Turn a scan into a prioritised, site-specific transformation plan: which facts to ask the owner for, quick clean-ups, copy rewrites, a design direction and trust fixes, each tied to findings, file:line locations and an estimated score gain. Follow the plan, then call slop_scan again to measure the change.
| Name | Required | Description | Default |
|---|---|---|---|
| keep | No | What the owner wants to keep no matter what (brand colours, logo, tone, sections). | |
| lang | No | Report language. Use the language the user is writing in. Default: en. | |
| scan_id | Yes | The scan id from a slop_scan report, e.g. "s1". | |
| target_score | No | Score to aim for. Default 20. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint=false, so the description usefully adds that the output is a prescriptive, finding-linked plan with estimated score gains rather than raw analysis. It does not disclose cost, latency, whether it re-scans the site, or any limits on scan_id age, leaving the heavier behavioral burden partly unmet.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the transformation and its outputs, closing with the follow-up loop. Every clause carries information and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of explaining what the caller receives — a prioritised plan with findings, file:line references, and estimated score gain — which is exactly what an agent needs to decide whether the result is usable. Only the ambiguity about how this differs from sibling report/guide tools remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with clear per-parameter docs (keep, lang, scan_id with an example, target_score with a default), so the schema already carries parameter meaning. The description adds no extra syntax or semantics for these parameters, which is the expected baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific transformation (scan → prioritised, site-specific plan) and enumerates the concrete artifacts produced (quick clean-ups, copy rewrites, design direction, trust fixes), each tied to findings and file:line locations. This clearly distinguishes it from slop_scan (which produces the input) and the other report/guide siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the position in the workflow — turn a scan into a plan, then call slop_scan again to measure — which implies this runs after a scan. However, it gives no guidance on when to prefer this over slop_report, slop_fix, slop_guide, or slop_compare, which is the actual selection problem among eight siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slop_scanScan for AI slopA
Scan a website URL, a local project folder (Next.js, Vite/React, Astro, Vue, Svelte, plain HTML, Markdown content…) or a single .html file for AI slop: generic copy, cliché phrasing, template "vibe-coded" design, placeholder leftovers and missing trust signals. Returns a 0-100 slop score, five category scores and findings ranked by impact, each with evidence, a fix and (for folders) file:line locations to edit. Re-scanning the same target automatically shows a before/after comparison. Prefer scanning the project folder when the user is working on the site's code; scan the URL for live sites.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Report language. Use the language the user is writing in. Default: en. | |
| pages | No | URL only: how many pages of the site to scan. The site is crawled from sitemap.xml and internal links (robots.txt respected), spread across sections; every page gets its own score and findings. Default 30. Use 1 for only the given page. | |
| ignore | No | Folder only: sub-paths to skip, relative to the folder (e.g. ["docs", "src/legacy"]). | |
| render | No | URL only: render with the locally installed Chrome/Edge. "auto" renders only when the server returns an empty JavaScript shell. Default auto. | |
| target | Yes | A URL (https://example.com, localhost:3000), an absolute or relative project folder path, or a path to an .html file. | |
| compare | No | Show a before/after comparison with the previous scan of the same target in this session. Default true. | |
| open_report | No | Open the visual HTML report in the user's browser when the scan finishes. Only pass true if the user agreed to this. Default false; the report file is written either way. | |
| include_ui_primitives | No | Folder only: also scan components/ui (shadcn primitives). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: crawling from sitemap.xml with robots.txt respected, optional local Chrome/Edge rendering, automatic before/after comparison on re-scan, and the fact that a report file is written even when the browser is not opened. It does not contradict readOnlyHint=false/destructiveHint=false, though it could say more about runtime cost and network scope for an openWorldHint tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and return shape, then a concrete usage rule. The one long sentence with the framework list is dense but earns its place by defining scan scope; overall no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters, no output schema, and no return-value documentation in the schema, the description compensates by spelling out the return payload (score, five category scores, ranked findings with evidence, fix, and file:line) and covering the folder/URL/file scoping rules. An agent has what it needs to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, but the description adds interpretation the schema lacks: which target forms count as a 'folder' (Next.js, Vite/React, Astro, Vue, Svelte, plain HTML, Markdown) and the folder-vs-URL-vs-file distinction that drives which parameters apply. That framing is genuinely additive rather than a restatement of the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (scan) and the exact resources it accepts (URL, project folder with framework list, single .html file) plus what it detects (generic copy, cliché phrasing, placeholder leftovers, missing trust signals). The enumeration of supported project types and the description of the returned artifacts (0-100 score, five category scores, ranked findings) leave no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'Prefer scanning the project folder when the user is working on the site's code; scan the URL for live sites', and open_report adds a consent condition ('Only pass true if the user agreed'). It does not, however, distinguish itself from the closely-named sibling slop_scan_html, which an agent must resolve when the input is raw HTML rather than a file path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slop_scan_htmlScan pasted HTML for AI slopA
Scan raw HTML (for example a page the user pasted, or HTML you generated) for AI slop. Same report as slop_scan. Use slop_scan for URLs and folders.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The page URL, if known (helps detect builder domains). | |
| html | Yes | The full HTML of the page. | |
| lang | No | Report language. Use the language the user is writing in. Default: en. | |
| label | No | A name for this page, used to pair before/after scans (e.g. "landing v2"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds real behavioral value by stating the output is the 'same report as slop_scan', which lets an agent reason about return shape without an output schema. However, it does not reconcile readOnlyHint=false with what is nominally a pure analysis operation, nor does it mention side effects, caching, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and the disambiguation rule immediately after. No filler, no restating of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter, single-required-input tool with no output schema, the description covers purpose, input routing, and output equivalence with a sibling. The only mild gap is the absence of any note about how large an HTML payload can be handled or what the caller should do with the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so url, html, lang, and label are all documented in the schema (including the enum default and the before/after pairing use of label). The description adds no parameter-level detail beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (scan raw HTML for AI slop) and scopes the input modality to pasted or self-generated HTML. It explicitly distinguishes itself from the sibling slop_scan by naming which input types belong to each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit routing rule: use this tool for raw HTML, use slop_scan for URLs and folders. Both the 'when to use' and the named alternative are stated, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
slop_compare - First observed
slop_fix - First observed
slop_guide - First observed
slop_page - First observed
slop_report - First observed
slop_rescue_plan - First observed
slop_scan - First observed
slop_scan_html
TDQS
Scored across 8 tools
Most tools target distinct actions: scanning (slop_scan/slop_scan_html), planning (slop_rescue_plan), comparing (slop_compare), guiding (slop_guide) and fixing (slop_fix). The only mild overlap is between slop_report (whole-scan visual report), slop_page (per-page report) and slop_fix (per-finding steps), but the descriptions clearly differentiate scope.
Every tool uses a consistent snake_case 'slop_' prefix with a clear action noun (slop_scan, slop_guide, slop_compare, slop_report, slop_page, slop_fix). The single variant slop_scan_html is a readable, predictable extension of the base verb.
Eight tools is well-scoped for a scan-and-rescue workflow, with each tool covering a distinct stage (scan, guide, plan, compare, report, page, fix). No redundant or filler tools.
The surface covers the full lifecycle: scanning (URL/folder/HTML), reference guides, prioritised planning, comparison, reporting and per-finding fixes, so no obvious dead ends. Minor gap: no explicit scan history or listing tool, though re-scan before/after and slop_compare largely compensate.
Maintenance
Related MCP Connectors
Scan any public site for AI-agent visibility; get scored findings, a machine-readable fix pack, and
Scan a website for AI search and agent readiness, then get a fix checklist for your agent.
1Scan any public website and see how ready it is for AI agents and AI search, explained plainly.
The website checker for AI agents. One call: verdict, score out of 100, fix list.
Related MCP Servers
- FlicenseAqualityCmaintenanceEnables scanning websites for AI search readiness, generating fixes like llms.txt, and comparing GEO scores across domains.81-
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to score drafts for AI-content-spam risk before publishing and scan entire sites, providing a pre-publish QA gate with pass/warn/fail verdicts.2 npmMIT
- AlicenseAqualityDmaintenanceEnables users to scan any website for AI search visibility, producing AEO, GEO, agent readiness, and mention-readiness scores along with AI identity and business profile insights. Paid tools extend this to competitive comparisons, detailed audits, and generated fixes.41MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to score any live domain for visibility in AI answer engines and then generate and apply paste-ready fixes — robots.txt, llms.txt, JSON-LD, titles and meta — either directly to project files or as click-by-click admin steps for hosted platforms like Squarespace, Wix and Shopify. It also re-checks edits, reads server access logs to confirm which crawlers actually arrived and whether they were genuine, and offers hosted tools for citation testing, score history, drift and competitor comparison.81 npmMIT



