Context7
Up-to-date docs for AI agents
Beschreibung vom Entwickler (englisches Original)
Deterministic prose linter for LLM text — flags AI slop, filler, buzzwords, hedges, clichés.
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
Du brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"defluff": {
"command": "uvx",
"args": [
"defluff",
"defluff-mcp"
]
}
}
}Führe das in deinem Terminal aus
claude mcp add defluff -- uvx defluff defluff-mcpIn .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"defluff": {
"command": "uvx",
"args": [
"defluff",
"defluff-mcp"
]
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"defluff": {
"type": "stdio",
"command": "uvx",
"args": [
"defluff",
"defluff-mcp"
]
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
Diese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 7. Nov. 2026
Der Registry-Name wurde mit dem GitHub-Konto ahmedak bestätigt, dem das Repo gehört
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Die Registry nennt keinen erforderlichen Schlüssel, manche Server bitten dich aber bei der ersten Nutzung, dich anzumelden.
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.1.2) kam vor 5 Monaten in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Python (uv) auf deinem Computer.
In derselben Kategorie: Context7, Codebase Memory, Exa
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
Up-to-date docs for AI agents
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
*The deterministic slop check for AI-generated prose. Point it at a changelog, a doc, or an agent's own output and get back the filler phrases to cut — plus a CI exit code and a pinnable score, identical on every run. No model, no API key.*
Every flagged span carries no information, so cutting them loses nothing. Clean text, same tool, passes straight through:
What makes defluff worth installing over a one-off grep is the engine around the list: bring your own phrases, per-project overlays, and an MCP server your agents pick up with no wiring.
pip install defluff
Or on macOS/Linux via Homebrew:
brew install ahmedak/defluff/defluff
That's it. No model download. No API key. Runs anywhere Python does.
# Lint a file — exit 1 on slop, 0 when clean
defluff lint essay.md
cat draft.md | defluff lint
defluff score essay.md
defluff lint essay.md --json
Exposes three tools so any MCP-aware agent can self-check prose without bespoke wiring — including its own draft, before returning it.
Zero-install via uvx (recommended) — pulls the package and the mcp extra on first run:
{
"mcpServers": { "defluff": { "command": "uvx", "args": ["--from", "defluff[mcp]", "defluff-mcp"] } } }
Or install it and run the entry point directly:
pip install "defluff[mcp]"
defluff-mcp
{
"mcpServers": { "defluff": { "command": "defluff-mcp" } } }
Published to the MCP Registry as io.github.ahmedak/defluff (see server.json).
mcp-name: io.github.ahmedak/defluff
| Tool | Args | Returns | |
|---|---|---|---|
slop_detect | text: str | slop_score, spans (text, category, weight, offsets), categories, lexicon_version | |
slop_add | `pattern: str, category: str, scope: "user"\ | "project"` | adds a phrase to the lexicon overlay |
slop_ignore | `pattern: str, scope: "user"\ | "project"` | suppresses a phrase (e.g. domain jargon) |
slop_detect on a draft and revise the flagged phrases before returning it. Zero wiring, one session, no second model in the loop.Every "AI detector" tries to classify *whether* text was AI-generated — a hard, unreliable problem. defluff asks a different question: does this text contain removable filler? That's deterministic, and it's true whether a human or an LLM wrote "at the end of the day."
proselint is the closest prior art — deterministic, no model — but emits yes/no warnings rather than a tunable density score, and isn't built around a list you swap, overlay, or pin.
A grep over a word list gives you raw hits. defluff gives you what you'd otherwise have to build around that list:
"foster" won't fire inside "fostering".defluff lint draft.md --lexicon team-slop.md
# team-slop.md
paradigm shift
One phrase per line (# comments and -/* markers ignored). These layer on top of the built-in defaults and report under a neutral custom category. For real categories and per-phrase weights, use a .json list (see Lexicon overlays).
defluff lint post.md --pack marketing-growth
defluff lint post.md --pack marketing-growth,ai-llm # stack several
| Pack | Catches | Pack | Catches |
|---|---|---|---|
corporate-linkedin | office jargon | crypto-web3 | crypto hype |
startup-vc | pitch-deck speak | pr-press-release | press-release boilerplate |
marketing-growth | hype copy | academic | research hedging |
ai-llm | LLM tells | wellness-selfhelp | influencer-speak |
social-media | X/Twitter engagement-bait |
List them with defluff packs. High-false-positive terms (e.g. pivot, detox) ship commented-out so they're inert until you opt in. See the packs README.
~130 curated patterns across five weighted categories, case-insensitive, whole-word matched:
| Category | What it catches | Examples |
|---|---|---|
ai-vocab | Words disproportionately overused by LLMs | *delve, tapestry, nuanced, pivotal, robust, showcase* |
cliche | Hollow idioms that add no information | *at the end of the day, move the needle, circle back, game changer* |
hedge | Empty qualifiers | *it should be noted that, needless to say, basically, essentially* |
corporate | Buzzword inflation | *leverage, synergy, actionable insights, cutting-edge, scalable* |
transition | Filler connectives LLMs reach for by default | *furthermore, moreover, in conclusion, first and foremost* |
Some AI tells are sentence *shapes*, not fixed phrases — the antithesis: it's not X, it's Y, not just a list but a runtime. A regex pattern layer catches these under a rhetoric category:
| Mode | What it looks for | Default | Why |
|---|---|---|---|
| Compound *(confident)* | full shape: it's not X, it's Y · not just X but Y | on | the second clause proves the rhetorical move — rarely a false alarm |
| Fragment *(guessing)* | bare X, not Y — e.g. a signal, not a verdict | off, --pack rhetoric | also fires on plain corrections (shipped Tuesday, not Wednesday) |
Each match counts as one unit toward the score regardless of length. Turning on fragment mode changes the lexicon hash.
defluff lint draft.md # compound antithesis caught by default
defluff lint draft.md --pack rhetoric # also catch the punchy "X, not Y" fragment defluff lint draft.md --category rhetoric # gate CI on antithesis alone
import defluff
report = defluff.detect("It is worth noting that we should leverage synergies.") print(report.slop_score) # 0.0 – 1.0 print(report.spans) # flagged phrase locations + categories
score = defluff.score(text) # bare float clean = defluff.is_slop(text) # bool at default threshold
lex = defluff.load_lexicon() # pin for reproducible runs score = defluff.score(text, lexicon=lex)
SlopReport fields:
| Field | Type | Notes |
|---|---|---|
slop_score | float | Clamped [0, 1] — use for thresholds |
slop_density | float | Raw unclamped — better gradient for reward loops |
spans | list[Span] | Per hit: text, category, weight, char offsets *into the cleaned text* (see Limitations) |
categories | dict[str, float] | Per-category density |
n_words | int | Token count |
low_confidence | bool | True when n_words < 20 |
lexicon_version | str | SHA prefix of resolved entry set |
The bundled lexicon is the baseline; layer on top without editing the package:
# "synergy" is slop on this machine
defluff lexicon add "synergy" --category corporate --scope user
defluff lexicon rm "leverage" --scope project git add .defluff/ignore.json && git commit -m "allow 'leverage' in finance context"
~/.config/defluff/) — machine-wide, not committed.defluff/ at git root) — per-repo, commit it for your whole teamWrites are atomic and cross-process locked; a corrupt overlay is warned and skipped — detect() never crashes.
Every resolved lexicon (bundled + overlays + packs) carries a short content hash, printed on every run (lexicon: 2cc05ba84457) and exposed as SlopReport.lexicon_version. Pass lexicon=defluff.load_lexicon() once and every call scores against the same ruler — pinnable for CI baselines and RL rewards, and auditable since the hash changes if and only if the resolved entry set changes. Each release ships a dated lexicon with a changelog (CHANGELOG.md); ai-vocab is expected to turn over release to release, cliche/hedge/corporate/transition are near-stable.
slop_score = flagged words ÷ total, weighted by category (ai-vocab counts a little more, transition a little less). 0.20 ≈ "a fifth of this text is listed filler." Usually 0.0–1.0; can edge slightly above on text that's almost nothing but slop. Instead of being a quality quantfier, its just a tripwire that drives the CI exit code.Pick a threshold based on how filler-dense the text is *allowed* to be:
--threshold | Meaning | Good for |
|---|---|---|
0.05 | ~5% filler — strict | marketing copy, landing pages, customer-facing text |
0.08 *(default)* | ~8% filler — a tripwire for triage | general prose, blog drafts |
0.12–0.20 | only flag heavy padding | technical docs that legitimately use robust, scalable, in order to |
The default 0.08 is provisional — hand-chosen, not yet calibrated on a labeled corpus (hence the [threshold provisional] tag). For a hard CI gate, set your own threshold and suppress your domain
Nur der Anfang wird gezeigt; den Rest findest du im Repo