Atlas / MCP servers / whitebite / stop-ai-slop

stop-ai-slopCAUTION

mcp/whitebite/stop-ai-slop

Zero-dependency linter and gate that blocks AI-generated comment slop: multi-line narrative comments, changelog markers, step-numbered filler. Write-time plugin for OpenCode, Claude Code hooks, pre-commit, GitHub Action, GitLab CI, MCP server. RU+EN+DE+FR+ES detection.

Verdict
CAUTION
Grade
B
Trust score
84 /100
Exposed tools
3 2r · 1w · 0d
Transport
—
License
MIT
Stars
2
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

English | Русский

[](https://www.npmjs.com/package/stop-ai-slop) [](LICENSE) [](package.json) [](package.json)

stop-ai-slop is a zero-dependency comment linter and gate that blocks AI-generated comment slop before it lands in your codebase. One scanner (skill/scripts/scan.mjs, the RULES table) is the single source of truth for a one-line, why-only comment policy. It is enforced at write-time (OpenCode plugin, Claude Code PreToolUse hook), at commit-time (pre-commit hook installed with --install), and in CI (GitHub Action, GitLab CI template) — and it also runs as an MCP server. Node >= 18, zero npm dependencies, MIT licensed, works on Windows, Linux and macOS.

AI coding agents over-comment: multi-line narrative blocks, // was X, now Y changelog notes, Step 1 / Step 2 filler, banner dividers, markdown inside comments, TODO without a ticket, comments that restate the code line beneath them, rotting file.py:123 pointers, even invisible zero-width and BiDi characters. stop-ai-slop catches all of it deterministically — no LLM, no scoring threshold, no network — and blocks the offending edit or commit.

Install in two commands

npm i -D stop-ai-slop
npx stop-ai-slop --install        # writes the pre-commit hook + npm scripts into the current repo

--install is the only command that modifies your repo: it appends a marked block to .git/hooks/pre-commit (idempotent, never clobbers an existing hook) and adds the stop-ai-slop / stop-ai-slop:all npm scripts. The hook embeds the absolute path to the scanner as of install time — after moving or re-cloning the scanner, run --install again.

Homebrew

brew tap WhiteBite/stop-ai-slop https
Read from source at commit 39644e9f28f9OBSERVED · 2026-10-11
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add stop-ai-slop-playground -- npx -y stop-ai-slop-playground
claude-desktop
{
  "mcpServers": {
    "stop-ai-slop-playground": {
      "command": "npx",
      "args": [
        "-y",
        "stop-ai-slop-playground"
      ]
    }
  }
}
03

Exposed tools (3)

2 read · 1 write · 0 destructive.

ToolRiskDescription
slop_baselinereadЗаписи baseline текущего git-корня
slop_explainwriteОбоснование правила (Why/Instead/Write/Ignore)
slop_scanreadПолное сканирование каталога на slop-комментарии
04

Trust audit

CAUTIONgrade B · trust 84/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (5 observation(s))
Network
none-observed
Shell
declared (5 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (14)

MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
skill/scripts/selftest.mjs:98
writeFileSync(join(dir, "spec.feature"), "# language: ru\n# Контекст сценария: док, инспектор и история чата\n# покрыты отдельными сценариями\n@tag\nФункционал: Chat\n  Сценарий: x\n    Допустим y\n")
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
skill/scripts/selftest.mjs:99
writeFileSync(join(dir, "spec-slop.feature"), "# было так, стало иначе\n# removeSource rewrites rows\nФункционал: Chat\n")
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
skill/scripts/selftest/checks/overrides.mjs:9
const SLOP_MD = "<!-- первая строка\nвторая строка -->\n"
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
skill/scripts/src/markers.mjs:58
export const OBVIOUS_WORD_SPLIT = /[^a-zа-яё0-9]+/
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
skill/scripts/src/markers.mjs:64
.filter((w) => w !== "" && /[a-zа-яё]/.test(w) && !OBVIOUS_STOPWORDS.has(w))
LOWInventory / provenance · inv.hidden_file · CWE-1104
.pre-commit-hooks.yaml
.pre-commit-hooks.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
playground/src/main.js:1
import { detectCommentSlop } from "../../skill/scripts/src/detect.mjs"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
playground/src/main.js:2
import { PROFILES, profileFor } from "../../skill/scripts/src/profiles.mjs"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
playground/src/main.js:3
import { rt, setLang } from "../../skill/scripts/src/i18n.mjs"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
skill/scripts/gen-catalog.mjs:7
const CATALOG_PATH = fileURLToPath(new URL("../../detekt-rules/rule-catalog.json", import.meta.url))
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
skill/scripts/gen-marker-manifest.mjs:7
const KT_MARKERS_PATH = fileURLToPath(new URL("../../detekt-rules/src/main/kotlin/whitebite/slop/SlopMarkers.kt", import.meta.url))
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
repo-aeo, typescript
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
README.md:40
- **Multi-language natural-language detection.** Changelog markers, numbered steps and "This function..." openers are matched in RU + EN + DE + FR + ES. Deterministic competitors are English-only; the
Why it matters. asks the agent to read credentials
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
llms-full.txt:51
- **Multi-language natural-language detection.** Changelog markers, numbered steps and "This function..." openers are matched in RU + EN + DE + FR + ES. Deterministic competitors are English-only; the
Why it matters. asks the agent to read credentials

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 39644e9f28f9full audit observations/trust-audit/mcp-server/whitebite__stop-ai-slop.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-1139644e9f28f9CAUTIONB84first audit
06

Questions

What is the stop-ai-slop MCP server?

Zero-dependency linter and gate that blocks AI-generated comment slop: multi-line narrative comments, changelog markers, step-numbered filler. Write-time plugin for OpenCode, Claude Code hooks, pre-commit, GitHub Action, GitLab CI, MCP server. RU+EN+DE+FR+ES detection.

What tools does stop-ai-slop expose?

3 in total: 2 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is stop-ai-slop safe to connect to an agent?

With care. The audit graded it B (84/100) and found 14 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does stop-ai-slop need?

No credential environment variables were found in its source, so it appears to need none.

How current is this page?

The grade is for one exact copy of the source (39644e9f28f9), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement