Find and remove the writing patterns a profile lists. Deterministic, local, no model and no network.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
One-click editor setup isn’t available for this listing yet — we don’t have a confirmed install command, and we’d rather show nothing than point your editor at the wrong package or host. Follow the project’s own setup instructions, linked above.
AI writing leaves fingerprints.
Chop the slop. Paste in text and get back something that reads like a person wrote it.
Try it without installing anything: slop-chop.com runs the same engine in your browser.
AI writing has patterns. It loves em-dashes, drops a semicolon into every other sentence,
reaches for words like comprehensive and leverage, and clears its throat with
openers like "In summary" or "Giving it to you honestly."
slop-chop removes those patterns in a single pass. You can also hand it your own list of things to cut, so the result reads like you instead of a chatbot.
Cleaning this up by hand is tedious. Asking a model to "stop using em-dashes" works for about three sentences before it forgets. slop-chop applies the same cleanup rules every time.
There are two passes, and you can run either one on its own.
The first is a rules pass. It is fast and deterministic. It swaps characters, drops words you have flagged, rewrites stock phrases and words, runs your own patterns, fixes spelling to one dialect, and tidies the punctuation, with no model, no cost, and the same output on every run. It knows markdown, so fenced code blocks and inline backtick spans come through untouched.
The second is an optional rewrite pass that hands the text to a model for the things rules cannot manage, like reworking a sentence so it no longer needs a semicolon, or nudging the writing toward a voice you picked.
Homebrew:
With Go:
Or clone and use the Makefile:
Run make with no target for the full list (build, test, cover, lint, fmt, tidy, clean).
The same engine runs on many surfaces. All local and free unless noted.
| Where | Get it |
|---|---|
| Web app | slop-chop.com, nothing to install |
| VS Code, Cursor, VSCodium | search slop-chop on Open VSX |
| JetBrains IDEs | the Marketplace plugin, or LSP4IJ with slop-chop lsp, see docs/LSP.md |
| Neovim, Helix, any LSP editor | slop-chop lsp, see docs/LSP.md |
| Obsidian | the desktop plugin, see obsidian/ |
| Node | npm install slop-chop-wasm |
| Go programs | import github.com/dcadolph/slop-chop/sanitize, see below |
| HTTP API | POST https://api.slop-chop.com/chop, see docs/API.md |
| Slack | a /chop command and a message shortcut, see docs/SLACK.md |
| Claude Desktop, Cursor, any MCP client | slop-chop mcp, see docs/MCP.md |
| CI, Raycast, macOS, pre-commit | the GitHub Action and integrations/ |
check --json prints a {"findings": [...]} object to stdout, and fix --json adds the
cleaned text as {"cleaned": "...", "findings": [...]}. Each finding carries the rule,
the matched text, the suggested replacement, and a line and column.
check flags what it finds and exits non-zero. Drop it in CI. Add --why and every
finding carries a plain-words line saying what fired and what happens to it, the same
explanations the web app shows on a tap.fix writes the cleaned text to stdout and leaves your file alone. Pass -w to change
the file in place instead.score measures how densely the text carries the patterns your profile lists, 0 to 100.
It is a lint result, not a reading on who wrote the text, and it cannot be turned into one:
the same patterns appear in writing people produce on purpose. Under 25 reads clean, 25 to
54 is mixed, and 55 and up is dense with tells, the same bands the web app shows.
score --by-paragraph scores each paragraph on its own, which is how a document with two
generated paragraphs buried in a thousand human words shows where they are, and --max
then gates on the hottest paragraph instead of the diluted whole.Source code gets its own treatment. On a .go, .py, .ts, or any other code file,
check and score read only the comments, so a buzzword in a comment is flagged at its
real line and column while identifiers, strings, and formatting alignment draw nothing.
fix refuses to rewrite code files outright, since prose cleanups break code. Pipe a
file through stdin to override either behavior on purpose. Data files with no comments,
like .json and .csv, are skipped with a note.
score gives a single number from 0 to 100 for how densely the text carries the patterns
the active profile lists. Change the profile and the same prose scores differently, which
is the clearest statement of what the number is: compliance with a named ruleset. A
structural tell counts double toward the density, because a stock sentence shape survives
a thesaurus where a listed word does not.
The engine ships with a labeled corpus of AI, human, and technical passages under
sanitize/testdata/, and TestBenchmark measures recall, precision, and the score margin
against it on every run, so a change that weakens detection fails the build instead of
going unnoticed. docs/BENCHMARK.md shows the numbers, the corpus
composition, what fires on what, and the limits of what the score claims. The score is a
lint result, not an authorship verdict.
--max turns it into a gate, so a document over the bar fails a build the same way check
does.
Word swaps catch the vocabulary of AI writing. The rules pass also flags 61 structural
tells that a word list misses: the it's not just X, it's Y cadence and its contracted
isn't a perk. It's an expectation twin, the let's dive in opener, here's the thing
throat-clearing, the The best part? fragment reveal, here are five ways enumeration,
runs of bold-label bullets and numbered items, emoji-decorated headings, and the spaced
hyphen models reach for now that the em-dash is a known tell. It also catches the register
of a chat reply rather than a piece of writing: let me break this down, you might be wondering, here's where it gets interesting, happy coding!, and the say goodbye to X and Enter Foo, the tool that moves of generated marketing copy. These are flagged, not
rewritten, since the fix depends on the whole sentence and is left to the rewrite pass. Add
your own with the flagPatterns field in a profile.
Every tell that becomes famous gets trained out of the next model and the writing moves somewhere else, so the default profile tracks what models write now rather than what they wrote in 2023.
Add a workflow that fails a pull request when it finds slop:
Or have it fix the files and push the cleanup back to the pull request branch:
No reviews yet — be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/slop-chop)<a href="https://allmcps.com/mcp/slop-chop"><img src="https://allmcps.com/api/badge/slop-chop?style=directory" alt="Slop Chop on AllMCPs" /></a>