← Discover MCPs and Agents
A
MCPAI & MLGitHub

AIStoryHub_LLM_Cliche_Corpus

AIStoryHub LLM Cliche Corpus

Links

README

From the repo.

📖 The Corpus of AI Clichés

758 words, phrases, names, and formatting tics that give away AI-written text. With the receipts.

Version Entries License: MIT Format

🔎 Try the live detector at app.aistoryhub.co →


Why this exists

Every model has a tell. Usually a few hundred of them. Kobak and colleagues found delve showing up in PubMed abstracts at 25 times its pre-2023 rate. GPTZero clocked similar spikes for tapestry and landscape across 3.3 million documents. Character generators keep landing on Elara, so often that a name blog crowned it Name of the Year in 2025, for reasons that have nothing to do with parents naming actual babies.

None of that is a hunch, and it isn't limited to one or two overused words. This corpus tracks the full pattern: the stock verbs (delve, underscore, leverage), the sentence scaffolds ("In today's fast-paced world..."), the assistant boilerplate ("Would you like me to...?"), even the formatting habits, like bolding a term right after defining it, or leaving oaicite citation debris pasted into a document that was supposed to look handwritten. Every entry carries a score and, where one exists, a citation. Where the research doesn't exist yet, we say so.

This is the same data behind the detector at AIStoryHub. You can browse it interactively at app.aistoryhub.co/corpus. This repo is the source file underneath it: open, versioned, and free to fork.

What's inside

ai-cliches-corpus.json holds 758 entries across six categories, each scored 0 to 100 for detection strength and banded into a confidence tier.

CategoryEntriesWhat it covers
Words & phrases509Signature verbs (delve, underscore, leverage), stock nouns (tapestry, landscape, realm), transitions, hedges, email and social slop, fiction clichés
Names & personas86The names models reach for by default in characters and example people (Elara, Marcus Chen), plus fantasy, sci-fi, and invented place names
Sentence patterns53Structural formulas: "In today's fast-paced world...", "Here's the thing...", "Whether you're a founder, a marketer, or...", "No X. No Y. No Z."
Channel-specific & assistant tells50Chatbot boilerplate ("Would you like me to...?", "Regenerate response"), citation markup leaks, cutoff-date hedges, LinkedIn slop, email sign-offs
Rhetorical & structural moves36Contrast-and-reveal scaffolds, false balance ("it's not just X, it's Y"), fiction structural tells, anti-synthesis paragraph closers
Formatting tells24Bolded-term bullets, emoji-as-structure, em-dash overuse, uniform paragraph length, unfilled template placeholders, leftover citation artifacts (oaicite, contentReference, utm_source=chatgpt.com)

Confidence tiers

Every entry is banded by how much weight it can carry on its own.

TierMeaningCount
🔴 redStrong tell. Rare in genuine human writing at this frequency359
🟠 orangeModerate tell. Elevated, but needs corroboration300
🟡 yellowContext-dependent. Only meaningful under overuse99

A single yellow-tier hit proves nothing. A document with a dozen reds does.

The receipts: highest-scoring tells

ScoreTermCategoryEvidence
99delveWords & phrasesKobak et al. 2024, arXiv:2406.07016: 25.2x frequency ratio across 14M PubMed abstracts
97tapestryWords & phrasesGPTZero AI Vocabulary corpus
96it's important to noteWords & phrasesHedge-phrase overrepresentation
95Leftover AI citation artifacts (oaicite, contentReference, turn0search)Formatting tellsCopy-paste residue from ChatGPT citation markup
95utm_source=chatgpt.com in cited URLsFormatting tellsDirect paste-through artifact
95Regenerate responseChannel-specific tellsLeftover UI chrome pasted into copy
94landscapeWords & phrasesGPTZero AI Vocabulary corpus
92voice barely above a whisperFiction clichésEQ-Bench slop-score trigram list (Paech, 2025)
90ElaraNames & personasseehuhn.de 2026 100-prompt Claude test; Namerology 2025 "Name of the Year"
89underscore (verb)Words & phrasesKobak et al. 2024, 9.1x frequency ratio

That's the top ten. The other 748 are in the JSON.

Schema

Each entry in the entries array looks like this:

{
  "term": "delve",
  "category": "Words & phrases",
  "category_key": "words_and_phrases",
  "subcategory": "Signature verbs",
  "confidence": "red",
  "strength_score": 99,
  "example": null,
  "study_ratio": 25.2,
  "study_metric": "r",
  "study_measured_form": "delves",
  "study_source": "Kobak et al. 2024, arXiv:2406.07016 (14M PubMed abstracts)",
  "note": null
}
FieldTypeDescription
termstringThe word, phrase, name, or pattern name
category / category_keystringOne of the 6 top-level categories (human-readable / slug form)
subcategorystringFiner-grained grouping, e.g. "Fiction emotional-beat clichés"
confidencered | orange | yellowStrong / moderate / context-dependent tell
strength_score0-100Composite detection strength, see Methodology
examplestring | nullIllustrative sentence(s), populated mainly for structural and formatting entries
study_rationumber | nullMeasured frequency ratio (r) or excess-frequency gap (delta) from a cited study
study_metricr | delta | nullWhich statistic study_ratio represents
study_measured_formstring | nullThe exact word form the cited study measured (e.g. delves vs delve)
study_sourcestring | nullCitation for the study or detector run backing this score
notestring | nullExtra context, e.g. observed dominance in controlled prompt tests

Top-level metadata (name, version, generated, scoring, study_headline_figures, entry_count, changelog) documents the corpus itself. Field-by-field definitions live in the scoring object inside the file.

Methodology

strength_score is a composite rating from 0 to 100. Where a published number exists, the score comes straight from it:

  • Detector scores, from the "Your AI Slop Bores Me" Hall of Shame
  • GPTZero AI Vocabulary frequency ratios, drawn from a 3.3 million document corpus
  • Peer-reviewed frequency studies: Kobak et al. 2024 and 2025, Juzek & Ward 2024 and 2026, Liang et al. 2024, Ward et al. 2025
  • EQ-Bench and antislop rankings for fiction-specific tells (Zhang et al. 2025 model fingerprints, Paech 2025 trigram lists)

Where no direct measurement exists yet, entries are banded by confidence tier instead: strong lands around 75, moderate around 50, context-dependent around 30. That's an admitted gap, not a hidden one. Some corners of this list are better evidenced than others, and the confidence tier tells you which corner you're in.

A few numbers worth knowing on their own, straight from study_headline_figures:

  • delve runs at 25.2 times the expected rate in post-2023 text (Kobak et al., 14M PubMed abstracts)
  • showcasing runs at 9.2x, underscores at 9.1x
  • At least 10% of 2024 PubMed abstracts show measurable LLM involvement

One caveat worth flagging on its own. Character names like Elara and Marcus Chen are the weakest individual signal in this whole set, because they're also just names real people have. Score them as one small vote among many, never as a verdict by themselves.

Using the corpus

jq: pull every red-tier word or phrase tell

jq -r '.entries[] | select(.confidence=="red" and .category=="Words & phrases") | .term' ai-cliches-corpus.json

Python: load the corpus and score a document

import json

with open("ai-cliches-corpus.json") as f:
    corpus = json.load(f)

terms = {e["term"].lower(): e["strength_score"] for e in corpus["entries"] if e["category"] == "Words & phrases"}

def score_text(text: str) -> int:
    text_low = text.lower()
    return sum(score for term, score in terms.items() if term in text_low)

print(score_text("Let's delve into this multifaceted tapestry of ideas."))

Build a regex sweep

import re
pattern = re.compile("|".join(re.escape(e["term"]) for e in corpus["entries"] if e["confidence"] == "red"), re.I)
hits = pattern.findall(your_text)

A keyword match like the one above will get you started, but it can't weigh context, catch a pattern that spans a full sentence, or tell a deliberate quote from a real tell. app.aistoryhub.co runs this corpus against full manuscripts with that weighting built in. Try it free.

Claude Skill

Skills/ packages this corpus as a Claude Skill: avoid-ai-writing. Drop the folder into a project's .claude/skills/ (or wherever your agent loads skills from) and Claude will detect and remove AI writing tells from fiction, blog posts, marketing copy, emails, social posts, docs, and code comments, in either detect (flag only) or rewrite/edit (flag and fix) mode.

The skill is self-contained. SKILL.md is the entry point, and the terms themselves are embedded in the reference files rather than just linked, so it keeps working if you copy the folder into another project on its own:

FileCovers
references/words-and-phrases.mdVocabulary tiers with replacements, plus grouped phrase lists (marketing hype, stock transitions, hedges, email and social boilerplate)
references/sentence-and-structure.mdSentence-level construction patterns, hook and closer formulas, formatting tells, whole-piece rhythm
references/fiction-tells.mdFiction-only clichés: body language, atmosphere, emotional beats, dialogue-tag crutches, cliché names
references/channel-and-chatbot-tells.mdAssistant and chatbot fingerprints treated as near-proof regardless of context
references/severity-and-workflow.mdConfidence-tier model, scoring approximation, and register calibration

Changelog

  • 1.7 (2026-07-15). Added 7 entries and 10 structural-pattern regexes, ported from conorbronsdon/avoid-ai-writing (MIT license): chatbot citation markup leaks, AI-tool UTM params, cutoff-date and self-disclosure disclaimers, unfilled template placeholders, formulaic essay openers, hedge-stacked predictions, social CTA closers, parenthetical hedging. Also fixed three pre-existing description-only entries (utm_source, em-dash overuse, Title Case headers) that had no working matcher.
  • 1.6 (2026-07-15). Added 9 entries: fiction dialogue-tag crutches (said gently, said quietly, genuinely, I feel like, sympathy-check and therapy-speak dialogue lines) and anti-synthesis paragraph closers (an unspoken understanding passed between them, said more than words ever could, words left unsaid between them), sourced from a curated anti-AI-tell prose watchlist.
  • 1.5 (2026-07-13). Added 184 entries from Wikipedia's "Signs of AI writing," GPTZero AI Vocabulary (3.3M docs), Kobak et al. 2025 (Science Advances), Juzek & Ward 2024/2026, Liang et al. 2024, Ward et al. 2025, Zhang et al. 2025 model fingerprints, and EQ-Bench/antislop fiction slop lists. Added a new fiction wing covering body language, emotional beats, atmosphere, structural tells, and place names. Pruned 16 generic terms that turned out to be too false-positive-prone to keep.
  • 1.4 (2026-06-09). Initial public release, 574 entries.

Contributing

Found a tell we missed, or a citation we got wrong? Open an issue or a PR against ai-cliches-corpus.json. Bring a source if you can, a study, a detector run, or at minimum a clear pattern with examples. Pure gut feeling is fine too, but keep it in the yellow tier where it belongs.

License

MIT. See LICENSE. Use it, fork it, build a detector on it, ship a product with it. Attribution is appreciated, not required.


Built by the team at AIStoryHub, tools for writers who want their words to sound like theirs.

Browse the corpus live → · Run the detector →

Collected info

  • 16 stars
  • Source updated: 8/19/2026

Config for your environment

Replace {MCP_ENDPOINT_URL} with this MCP’s endpoint URL (from its repo or docs above). No API key — you connect directly.

Tool

OS

Config file: ~/.cursor/mcp.json

{
  "mcpServers": {
    "mcp-server": {
      "url": "{MCP_ENDPOINT_URL}"
    }
  }
}

Paste into mcpServers in the config file. Restart Cursor after saving.

If this MCP is also published on mcpchannel.ai, you can subscribe from Browse and use the gateway config there instead.