aislopmeter
This MCP server scans websites, local apps, project folders, or raw HTML to score and explain "AI slop," then gives you evidence-backed, file:line fixes and a phased rescue plan.
Scan for slop (
slop_scan,slop_scan_html): score a URL (crawling up to 200 pages), localhost app, project folder (Next.js, Vite, Astro, Vue, Svelte, HTML, Markdown),.htmlfile, or pasted HTML; get a 0–100 score, five category scores, and findings ranked by impact with evidence and fixes.Build a rescue plan (
slop_rescue_plan): turn a scan into a prioritised, site-specific plan with owner questions, clean-ups, copy/design/trust fixes, file:line locations, and estimated score gains.Fix findings (
slop_fix): get step-by-step instructions for one finding, including exactfile:lineplaces, before/after examples, and a "done when" check.Drill into pages (
slop_page): get the full per-page report for any page in a site scan.Compare before/after (
slop_compare): see score change, resolved, remaining, and new findings between two scans.Produce a visual report (
slop_report): write and optionally open an HTML report with a Report screen and a What-to-do checklist.Read reference guides (
slop_guide): access criteria, playbook, copy, design, and interview guidance.Customise scans: set language (en/tr), page limits, ignore paths, rendering mode, UI primitive inclusion, and report opening — all run locally with no telemetry.
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
Measure the AI slop on any website. Then fix it.
AI Slop Meter scores a website, a local app 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 tells you what to do about each finding, with steps and a prompt you can hand to your AI.
Your own AI (Claude, Cursor, Gemini CLI and others) can then carry out the plan in your code.
It runs on your machine as an MCP server, a CLI and a bookmarklet. No API keys, no account, nothing sent anywhere except the requests to the site you asked it to scan.
Quick start
Try it once, nothing to install:
npx -y aislopmeter https://your-site.com --openAdd it to your AI (Claude Code, once for all projects):
claude mcp add --scope user aislopmeter -- npx -y aislopmeter mcpAsk: "Rescue my site from slop. Open the report when you're done." Answer the questions it asks; it fixes, re-scans and shows before and after.
The usage guide walks through it in order, with every command, the MCP tools, ready-made recipes (Lovable/Vite apps, Next.js, CI) and troubleshooting.
Related MCP server: AEO Scanner
Install in one click
Where | How |
Claude Code |
|
Claude Desktop | Download aislopmeter.mcpb and double-click it. No Node.js needed. |
Cursor | The button above, or add the block below to |
VS Code | The button above, or |
Gemini CLI, Windsurf, others | Add the block below to the tool's MCP settings ( |
No install |
|
{
"mcpServers": {
"aislopmeter": { "command": "npx", "args": ["-y", "aislopmeter", "mcp"] }
}
}You need Node.js 20 or newer, except for the Claude Desktop extension. --scope user in Claude Code installs it once for all projects; leave it out to add it to one folder, or use --scope project to share it through .mcp.json.
Then ask your AI: "Scan https://my-site.com for AI slop and show me what to fix."
Before: 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.
What it does
Scans a whole website, a
localhostapp, 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.Reads what the page really looks like. It reads the site's own stylesheets and scripts, and when Chrome or Edge is installed it opens the page and measures it: computed colours and real contrast, the fonts actually rendered, how much is centred, whether cards are truly identical, line length and text size, content that spills out or hides under other elements, errors while the page loads. Without a browser it still works from the HTML and CSS.
Scores five areas with more than 80 research-based checks (criteria and sources):
Substance: concrete facts, claims you can check, real proof, a portfolio with actual work in it
Language patterns: clichés, headline formulas, "not just X, but Y", stock microcopy
Template design: purple gradients, glow, emoji and stock icons, the standard landing-page and portfolio templates, Tailwind's default colours, grid backgrounds, small caps labels above every heading, bouncing and pulsing motion, cards inside cards, and drift from your own
DESIGN.mdUnfinished details: lorem ipsum,
href="#", "Vite + React + TS", chatbot leftovers, pages that are empty without JavaScript, broken images, load errors, text that is too small, too long a line or under another elementBuilder traces: Lovable, Bolt, v0, Replit, Base44 (information only)
Plus a separate AI search readiness score: can ChatGPT, Claude, Perplexity and Gemini read the page, tell who is behind it and quote it (JSON-LD, robots.txt for AI crawlers,
llms.txt, sitemap, readable without JavaScript, quotable paragraphs)
Tells you what to do about every finding: a one-line fix, numbered steps, the exact
file:lineplaces and this site's own sentences, a before/after example, a "done when" check, and a Copy as a prompt for your AI button.Plans the rescue around your site: questions for the owner that fit the kind of site (so the AI never invents facts), then clean-up, copy, design and trust, each with an estimated score.
Shows it in a visual report with Report, What to do and, for sites, Pages screens, and re-measures after each change with a before/after table.
Report | What to do |
|
|
Every finding opens to the same "what to do" box:

Use it with 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 (and, for a site, the three pages) that matter most;
build the plan and ask you the owner questions in one message;
apply the plan phase by phase, editing the exact
file:lineplaces in a project, or handing you rewritten copy and a design spec for a live URL;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.
Tool | What it does |
| Scan a website (crawls up to |
| Scan pasted or generated HTML. |
| Turn a scan into a phased, site-specific plan, with |
| The full report for one page of a site scan. |
| Step-by-step instructions for one finding, optionally on one |
| Write or open the visual report. |
| Before/after for two scan ids. |
| The guides: |
Local apps (localhost, project folders)
AI Slop Meter runs on your computer, so it can check an app that is not online yet. There are three ways, and they work well together.
1. The running dev server. Start your app (npm run dev), then scan its address. localhost is opened over http and crawled like a live site.
npx -y aislopmeter localhost:3000 --open # whole app, up to 30 pages
npx -y aislopmeter localhost:5173/pricing --pages 1 # one pageVite, Create React App and other single-page apps send an empty <div id="root"> first; AI Slop Meter renders them with your Chrome or Edge, so the score is about what you actually see. They also get the client-shell finding: search engines see the same empty page unless you prerender.
2. The project folder. Findings come with file:line in your source code. This is what your AI edits.
cd my-app
npx -y aislopmeter . --plan3. The built site. For static sites, scan the files you will actually deploy.
npm run build
npx -y aislopmeter ./dist --openWith your AI:
My app is running at localhost:3000 and the code is in this folder. Scan both for AI slop, fix it in the code, and re-scan localhost after each step.
Online checkers cannot reach localhost; this one can, because it runs on your machine. Nothing is uploaded.
In the browser (bookmarklet)
Scan the page you are looking at, with nothing installed. Create a bookmark and paste this as its address:
javascript:(()=>{const s=document.createElement('script');s.src='https://cdn.jsdelivr.net/npm/aislopmeter@0/dist/aislopmeter.browser.js';s.onload=()=>AISlopMeter.overlay();document.head.appendChild(s)})()Click it on any page: a panel shows the score, the top findings and a copy-for-your-AI button for each. It checks one page at a time; for a whole site and file:line, use the CLI or MCP. Some sites block outside scripts (Content-Security-Policy); there the bookmarklet cannot run.
Command line
npx -y aislopmeter https://example.com # whole site, up to 30 pages
npx -y aislopmeter https://example.com --pages all # up to 200 pages
npx -y aislopmeter https://example.com --pages 1 # only this page
npx -y aislopmeter ./my-app --plan --lang tr # project folder, plus the rescue plan in Turkish
npx -y aislopmeter ./my-app --open # write the visual report and open it
npx -y aislopmeter ./my-app --render never # HTML and CSS only, no browser
npx -y aislopmeter ./my-app --json # raw resultReports are written to ~/.aislopmeter/reports/ (AISLOPMETER_REPORT_DIR changes that).
Browser use. With --render auto (the default) and Chrome, Edge or Chromium installed, pages are also measured in the browser through playwright-core, which downloads nothing. Set AISLOPMETER_CHROME to a browser path if it is not found, or AISLOPMETER_BROWSER=off to never start one.
Folder scans skip node_modules, hidden folders and the 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 and CHANGELOG. Point AI Slop Meter at one of these directly to scan it, or use --ignore path1,path2 to leave out more.
Badge and GitHub Action
Show your score in your README:
npx -y aislopmeter . --badge aislopmeter.svgCheck every pull request, with the report in the job summary:
- uses: actions/checkout@v4
- uses: omergocmen/aislopmeter@v0
with:
target: . # or a preview URL
fail-above: 40 # optional
lang: enThe action also returns score and band as outputs. On the command line, --fail-above 40 exits with code 1 above the limit.
Configuration
Put a .aislopmeter.json in your project (or the folder you run it from) to switch off a check that is wrong for you, or to set defaults:
{
"disable": ["purple-gradient"],
"keep": "The purple of our logo and the hero photo",
"ignore": ["legacy"],
"lang": "en",
"pages": 30,
"failAbove": 40
}disable takes check ids from the report. keep is passed to the rescue plan as "do not touch". The report says which checks were turned off. --no-config ignores the file.
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 or person 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 sites, the score is half the average page (home page counted twice, legal and sign-in pages left out) and half the worst page.
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 young. They come from Turkish sources and known English tells; calibration help is welcome.
Calibrated on 34 real sites so far. Pages built with AI tools scored a median of 25, hand-made pages about 12, and no hand-made page reached 20 (how and which sites).
Privacy
Everything runs locally.
URL scans: only pages of the site you point it at, following
robots.txt, up to 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
See CONTRIBUTING.md: how to add a check, how calibration works, and how to report a wrong score. False alarms on real hand-made sites and Turkish word lists help the most.
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, plus a separate AI search readiness score (can ChatGPT, Claude, Perplexity and Gemini read and quote it: JSON-LD, robots.txt for AI crawlers, llms.txt, sitemap). If the project has a DESIGN.md, styles outside it are reported as design-drift. 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 | Use the locally installed Chrome/Edge. "auto" (default): measure colours, contrast, fonts and layout in the browser when one is installed, and render pages that arrive as an empty JavaScript shell. "never": HTML and CSS only. | |
| 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?
Goes well beyond the annotations, which only say it is not read-only and is open-world. The description explains that a report file is always written even when open_report is false, that robots.txt is respected during crawling, that DESIGN.md triggers design-drift findings, and that repeat scans auto-compare. That is exactly the mutation/IO context an agent needs, and it also reconciles readOnlyHint=false.
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-loads the verb and the three target types, then return shape, then DESIGN.md/compare behavior, then the folder-vs-URL preference — a sensible priority order. Slightly bloated by the mid-sentence parenthetical framework list and the condensed one-sentence return contract, but no genuinely wasted sentence.
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 only three terse annotations, the description carries the return contract itself: 0-100 score, five category scores, ranked findings with evidence/fix/file:line, and a separate AI-search-readiness score. Nothing an agent needs to call this correctly or interpret the result 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 every parameter (target, pages, render, ignore, lang, compare, open_report, include_ui_primitives) is already documented in the schema. The description largely restates target types and compare behavior rather than adding format, limits or tradeoffs beyond it, so the baseline 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 precise verb (scan) with three explicitly enumerated resource types (URL, project folder with framework list, single .html file) and the exact defect class it hunts (generic copy, cliché phrasing, vibe-coded design, placeholder leftovers, missing trust signals). An agent knows immediately what this tool is for and how it differs from slop_compare/slop_fix/slop_report, which all consume rather than produce a scan.
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?
Ends with a clear routing rule: 'Prefer scanning the project folder when the user is working on the site's code; scan the URL for live sites,' plus 'Only pass true if the user agreed to this' for open_report. Clear when-to-use context, but no explicit exclusions or named sibling alternatives (e.g. slop_scan_html vs. the single-.html mode claimed here).
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.
1 tool update
v0.3.2- Changed
slop_scan1 field changed- changed
Input schema / properties / render / descriptionPrevious value: -"URL only: render with the locally installed Chrome/Edge. \"auto\" renders only when the server returns an empty JavaScript shell. Default auto."New value: +"Use the locally installed Chrome/Edge. \"auto\" (default): measure colours, contrast, fonts and layout in the browser when one is installed, and render pages that arrive as an empty JavaScript shell. \"never\": HTML and CSS only."
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 have clearly distinct purposes, but slop_scan and slop_scan_html overlap in scanning HTML content, and slop_compare may be confused with the automatic before/after from re-scanning. The descriptions clarify these boundaries well enough to avoid misselection.
All tools use a consistent slop_ prefix and snake_case, making the set predictable. However, the parts of speech vary (verbs like scan vs nouns like guide) and slop_scan_html adds an _html suffix that slightly breaks the single-word pattern.
Eight tools is well within the ideal range for a domain-specific server. Each tool earns its place by covering a distinct step in the scan-fix-report-guide workflow, from initial scanning to final reporting.
The surface covers scanning multiple input types (URL, folder, raw HTML), per-finding fixes, per-page reports, comparison, rescue planning, and reference guides. This provides a complete lifecycle for identifying and remediating AI slop without obvious gaps.
Maintenance
Related MCP Connectors
Reads a site as search engines and AI assistants do, ranks its fixes, and checks them live.
Scores whether a page reads as AI-generated and names the tells to fix.
Website checker for AI coding agents. Measures your site in a real browser, with evidence.
Scan any public site for AI-agent visibility; get scored findings, a machine-readable fix pack, and
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables scanning websites for AI search readiness, generating fixes like llms.txt, and comparing GEO scores across domains.81MIT
- 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 gradedqualityCmaintenanceEnables 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.145 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to scan pages and whole sites for SEO and AI-search visibility, generate ready-to-paste fixes and validated structured data, and verify HTML before deploy and live results after — all through stable issue codes so an agent can fix problems one by one and prove they are gone.2MIT



