One local Model Context Protocol (MCP) server that wraps five free prose linters — proselint, alex, write-good, blocklint, textstat — plus a small built-in AI-tell detector. Gives Claude (and any MCP client) six independent lenses on a draft without per-word subscription costs or sending your text to a cloud service.
The "writing improvement" MCP landscape is fragmented — every paid tool (Grammarly, ProWritingAid, DeepL Write, HumanTone, Sapling) wants a subscription and pushes someone else's opinion of good writing on you. The free tools (proselint, alex, write-good, blocklint, textstat) each give Claude a different lens on the same draft, but they all need to be installed and called separately.
This is the single connector that wires them all together. ~600 lines of Python, no API keys, no network, runs forever for free.
Pair it with Vale for your own house-style enforcement, and with the Writing Tools MCP for objective "does this still read like an LLM" signals (perplexity + stylometric), and you have a complete free local writing-improvement stack.
| Tool | What it catches |
|---|---|
lint_proselint |
Adverbs, clichés, hyperbole, redundancy, vague modifiers — Bryan Garner / DFW / Pinker / Orwell-inspired rules. |
lint_alex |
Gender-favoring, ableist, racial, and other insensitive language. Markdown/MDX/HTML aware. |
lint_writegood |
Passive voice, weasel words ("many", "various"), lexical illusions, "so/there is" openers. |
lint_blocklint |
Non-inclusive identifiers and code-style language alex sometimes misses (master/slave, blacklist/whitelist). |
readability_stats |
Flesch, Flesch-Kincaid, Gunning Fog, SMOG, Coleman-Liau, ARI, Dale-Chall, syllable/lexicon/sentence counts, reading time — via textstat. |
check_ai_tells |
Built-in detector for signature LLM phrases ("delve", "leverage", "tapestry", "It's important to note", Moreover/Furthermore/Additionally openers, etc.). |
audit_all |
Run all six in one call and return a merged report with a roll-up. |
Every tool accepts either an inline text string or an absolute path to a local file. Outputs are structured JSON with line / column locations.
pip install prose-rich-mcpThe Python deps (textstat, proselint, blocklint, fastmcp) install automatically. The Node-ecosystem linters need a separate install:
npm install -g alex write-goodIf alex or write-good aren't on PATH, the corresponding tools return TOOL_NOT_INSTALLED and the rest still work — audit_all reports the gap in its tools_missing list instead of failing.
prose-rich-mcp # stdio MCP server- All processing is local. No network calls, no API keys.
PROSE_RICH_ALLOWED_ROOTSis opt-in (not on by default). Leave unset and the server reads any path your user account can read. Set to a colon-separated list of dirs only if you want to sandbox.PROSE_RICH_MAX_FILE_BYTESdefaults to 10 MB.
- Not a grammar checker. For that, run LanguageTool self-hosted in Docker (~10 GB with n-grams) or just rely on Claude's native grammar.
- Not a style-guide enforcer. For your rules (banned words, preferred phrasings), use Vale — pair this with Vale, don't replace it.
- Not an AI-text humanizer. The
check_ai_tellsdetector flags patterns; it doesn't rewrite. If you want to defeat detectors specifically, see HumanTone et al. (but for most use cases, fixing the flagged patterns by hand or via the LLM produces better results).
MIT — see LICENSE.
{ "mcpServers": { "prose-rich": { "command": "uvx", "args": ["--from", "git+https://github.com/justinritchie/prose-rich-mcp", "prose-rich-mcp"] } } }