MCP server that lets AI coding agents scan landing pages for AI-design-slop and pull a ready-to-paste fix prompt — straight from the chat.
Part of slop-detect: the versioned fingerprint that catches Cursor / v0 / Lovable template slop in the wild (live catalogue: /api/patterns). This package wraps the live slop-detect.com API as a Model Context Protocol server, so Claude Code, Cursor, and Windsurf can audit and de-slop pages without a browser or API key.
| Tool | Input | What it does |
|---|---|---|
scan_page |
{ url } |
Scans the page and returns a grade, a 0-100 score (lower is better), the slop tier, a verdict, the triggered patterns, and a shareable result URL. |
check_aeo |
{ url } |
Checks whether a page can be fetched and read. Returns an AEO score 0-100 (higher is better), a tier (Eligible / Partially Eligible / Restricted), and which checks failed. The scanner does not impersonate vendor crawlers. |
check_design_system |
{ url, design_md_url? } |
Checks whether the page honors its own DESIGN.md. Returns a compliance score 0-100 (higher is better), a tier (Aligned / Drifting / Off-system / No system / No data), and named drift. Default file is <origin>/DESIGN.md; pass design_md_url to override. No system means no parseable DESIGN.md tokens; No data means nothing observable to check. |
fix_prompt |
{ url } |
Returns a copy-paste prompt that tells a coding agent exactly how to de-slop the page. |
lint_design_md |
{ design_md } |
Lints DESIGN.md text locally (broken refs, contrast below 4.5:1, orphaned tokens, specVersion). No page fetch and no score change. |
diff_design_md |
{ base_design_md, head_design_md } |
Diffs two DESIGN.md documents. A removed or changed token is breaking. No page fetch. |
Score polarity: slop
0= clean (Clean 0–9, Mild 10–27, Heavy 28+). AEO and design-system scores are inverted: higher is better.
Example asks: "scan https://example.com for slop", "can AI engines cite https://example.com?", "does https://example.com honor its DESIGN.md?", "give me a fix prompt for https://example.com".
No global install needed — clients run it on demand via npx:
npx -y slop-detect-mcpOr install it explicitly:
npm install -g slop-detect-mcpAll MCP clients use the same config shape. Add the server, restart the client, and ask it to "scan https://example.com for slop".
Add to .mcp.json in your project root (or claude_desktop_config.json for Claude Desktop):
{
"mcpServers": {
"slop-detect": {
"command": "npx",
"args": ["-y", "slop-detect-mcp"]
}
}
}Or one-liner from the Claude Code CLI:
claude mcp add slop-detect -- npx -y slop-detect-mcpAdd to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"slop-detect": {
"command": "npx",
"args": ["-y", "slop-detect-mcp"]
}
}
}Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"slop-detect": {
"command": "npx",
"args": ["-y", "slop-detect-mcp"]
}
}
}| Env var | Default | Purpose |
|---|---|---|
SLOP_DETECT_API |
https://slop-detect.com |
API base URL. Point it at a local dev build (e.g. http://localhost:8788) when hacking on the web app. Ignored in --local mode. |
SLOP_DETECT_LOCAL |
unset | Set to 1 for the same behavior as --local. |
The hosted API rejects loopback addresses. Start the server with --local to score http://localhost, http://127.0.0.1, and file:// on this machine:
npx -y slop-detect-mcp --localThat needs the optional slop-detect package (Playwright) installed beside this one. Local mode does not call https://slop-detect.com/api/*. The same runner is what hooks/scan-local.mjs uses from a Claude Code PostToolUse or Stop hook. Set SLOP_LOCAL_URL to the dev server. A scored page exits 0. A scan that cannot run exits 2. That exit is not a Clean score.
{
"mcpServers": {
"slop-detect": {
"command": "npx",
"args": ["-y", "slop-detect-mcp", "--local"]
}
}
}{
"mcpServers": {
"slop-detect": {
"command": "npx",
"args": ["-y", "slop-detect-mcp"],
"env": { "SLOP_DETECT_API": "http://localhost:8788" }
}
}
}- No captcha, but rate-limited. Non-browser callers skip the Turnstile challenge, so this server works headless — but the API rate-limits per IP. If you see a rate-limit message, wait a bit before scanning again.
- Errors come back as tool content, never as crashes — a flaky page or a 429/502 returns a clear message the agent can act on.
MIT © Ravindra Kumar