Skip to main content
Glama

Essay Stats MCP

You are about to hand in an essay and you are not sure if it is over the word limit, or how many pages it is. A chat assistant tends to guess at word counts. This server counts them properly, on your computer, so your assistant can give you real numbers.

Install it in Claude Code with one line:

claude mcp add essay-stats -- npx -y essay-stats-mcp

Then ask things like:

  • "My limit is 1500 words, not counting the works cited or quotes. Am I over?"

  • "How many pages is this essay in Arial 11 point with 1.5 spacing?"

  • "Find the passive voice and filler words in my draft."

Essay Stats MCP is an essay word counter and writing checker that runs offline. It counts words and pages, gives a readability score, and flags passive voice, filler words, long sentences and repeated sentence openers. It also gives the reading time.

There is no account, no API key and no network call. Your essay text never leaves your machine.

Quick start

For Claude Code, use the one line above. For other apps, add this to the MCP config:

{
  "mcpServers": {
    "essay-stats": {
      "command": "npx",
      "args": ["-y", "essay-stats-mcp"]
    }
  }
}

It needs Node.js 20 or newer.

Where the config lives:

  • Claude Desktop: Settings, Developer, Edit Config (claude_desktop_config.json).

  • Cursor: Settings, MCP, or .cursor/mcp.json in your project.

  • VS Code: .vscode/mcp.json. VS Code uses a servers key instead of mcpServers.

  • Windsurf: ~/.codeium/windsurf/mcp_config.json.

Related MCP server: avoid-ai-writing-mcp

Tools

Tool

What it does

count_text

Words, characters, sentences, paragraphs, reading time and an estimated page count for a font, size and line spacing.

readability_scores

Flesch Kincaid grade, Flesch reading ease, Gunning Fog and SMOG.

style_flags

Passive voice, repeated sentence openers, filler words and long sentences.

check_word_limit

Compares the text with a word limit. Optional minimum, tolerance, and leaving out references and quotes.

word_frequency

The words used most often, with counts and share of the text, to spot overused terms.

All five tools only read the text you give them. Each one returns a short written answer and the same numbers as structured fields.

count_text

Inputs: text, and optional font (times new roman, arial, calibri, georgia, courier new or verdana), font_size in points (default 12) and spacing (single, 1.5 or double, default double). The page count is an estimate from typical words per page, so Word or Google Docs may differ by a little.

readability_scores

Input: text. The grades are roughly US school grades, so 12 is the end of high school. SMOG is designed for 30 sentences or more, so on a short text the result is marked as less reliable.

style_flags

Inputs: text and optional max_sentence_words (default 30). The checks are simple pattern rules. Use them as a prompt to reread a sentence, not as proof of a mistake.

Sentence numbers start at 1 and follow the order of the text. The sentence_list field gives each passive or long sentence with its number, and the text summary ends with a line listing those numbers, so a reply can point you to the right sentence.

word_frequency

Inputs: text, and optional top (how many words to list, default 10), min_count (fewest uses for a word to be listed, default 2) and include_common_words (also count small words such as the, and, of and to, default false). Case is ignored, and words under 3 letters are skipped unless include_common_words is true.

check_word_limit

Inputs: text, limit, and optional minimum, tolerance_percent, exclude_references and exclude_quotes. References are cut from a heading line such as References, Works Cited or Bibliography to the end. Quotes are lines starting with > and text inside double quotes.

Example prompts

  • "Count the words in this essay and tell me how many pages it is in Arial 11 point with 1.5 spacing."

  • "What reading level is this essay? Give me the Flesch Kincaid, Gunning Fog and SMOG scores."

  • "Find the passive voice and filler words in my draft."

  • "My limit is 1500 words, not counting the works cited or quotes. Am I over?"

  • "Which sentences are over 25 words long?"

  • "Which words do I overuse in this essay?"

How it compares

Essay Stats MCP does one job: it measures a piece of writing you give it. Other tools in this area do different jobs, so the table below is about what each kind of tool is for, not about which is better.

Essay Stats MCP

Brightspace MCP servers, such as brightspace-mcp-server

Online grammar and writing checkers

Asking a chat assistant to count

Main job

Word count, page estimate, readability and style flags for an essay

Reading course data from Brightspace, such as courses and assignments

Fixing grammar, spelling and tone

General answers

Works on your own draft text

Yes

No, it works on course data

Yes

Yes

Exact word and page numbers

Yes, counted by code

Not its purpose

Usually a word count only

Often a guess

Word limit check that skips references and quotes

Yes, with check_word_limit

No

Rarely

Unreliable

Needs an account or API key

No

Depends on the server, check its README

Often an account

Depends on the app

Sends your text over the network

No

Depends on the server

Usually yes

Yes, to the assistant

Runs as a local MCP server

Yes

Yes

Not usually

Not applicable

Essay Stats MCP does not fix your writing or reach into Brightspace. If you want Brightspace data next to it, see the next section for our own server, brightspace-d2l-mcp.

Works well with

If your school uses Brightspace, you can run brightspace-d2l-mcp next to Essay Stats MCP in the same app. That server has its own setup, so follow its README to install and sign in. Essay Stats MCP does not talk to it and does not need it.

With both added to your MCP config, you can ask your assistant to look up the word limit in your assignment details, then pass that number to check_word_limit along with your draft. For example:

  • "Find the word limit for my history essay in Brightspace, then check this draft against it, leaving out the works cited."

  • "Look up my assignment instructions, then tell me if this draft is under the limit and how many pages it is."

The assignment details come from the other server. The counting and checking happen here, on your machine, and Essay Stats MCP makes no network calls.

Privacy

Everything is calculated locally by a small Node.js program talking to your app over standard input and output. It makes no network requests, stores nothing and needs no keys or passwords. The text you paste is used for the one call and then dropped.

Development

npm install
npm run build
npm test

License

MIT

Available Tools

5 tools
check_word_limitCheck a word limitA
Read-only

Compare an essay against a word limit. Inputs: text, limit (the maximum word count), optional minimum (a lower bound), optional tolerance_percent (how far over the limit is still acceptable, default 0, a common rule is 10), optional exclude_references (cut everything from a heading line such as References, Works Cited or Bibliography to the end) and optional exclude_quotes (leave out block quotes that start with > and text inside double quotes). Returns the counted words, how many are left or over, and what was excluded. Example: "Is this under 2000 words if I leave out the works cited and quotes?.

NameRequiredDescriptionDefault
textYes
limitYesMaximum number of words.
minimumNoMinimum number of words.
exclude_quotesNoLeave out quoted passages. Default false.
tolerance_percentNoPercent over the limit that is still fine. Default 0.
exclude_referencesNoLeave out the references section. Default false.

Output Schema

NameRequiredDescription
limitYes
statusYes
minimumYes
words_overYes
total_wordsYes
counted_wordsYes
allowed_maximumYes
words_remainingYes
excluded_quote_wordsYes
excluded_reference_wordsYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish this as a read-only, closed-world operation. Beyond that, the description adds real behavioral detail: tolerance semantics ('default 0, a common rule is 10'), precise exclusion rules for a References heading and for block/double-quoted text, and a statement of what is returned. It stops short of explaining edge cases like how words are tokenized or whether heading matching is case-insensitive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then efficiently enumerates inputs and return values. It is somewhat dense in one paragraph and the example sentence has awkward punctuation, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description need not fully specify return values, yet it still summarizes them. With annotations covering safety, six parameters documented at high coverage, and clear exclusion semantics, an agent has enough to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already high at 83%, but the description adds meaningful semantics beyond the schema: tolerance_percent includes a practical default and a common 10% rule, exclude_references defines the exact cutoff from a heading line to the end, and exclude_quotes specifies both '>' block quotes and text inside double quotes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: 'Compare an essay against a word limit.' It clearly separates this tool from sibling counting/diagnostic tools like count_text and readability_scores by emphasizing limit comparison, not raw counting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is clear from 'Compare an essay against a word limit' and the example question about staying under 2000 words while excluding works cited and quotes. It does not explicitly say when not to use it or name count_text as the alternative for simple counting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

count_textCount words, sentences and pagesA
Read-only

Count the words, characters, sentences and paragraphs in a text, and estimate how many pages it fills at a given font, font size and line spacing. Inputs: text, and optional font (times new roman, arial, calibri, georgia, courier new or verdana, default times new roman), font_size in points (default 12) and spacing (single, 1.5 or double, default double). The page count is an estimate from typical words per page, so a word processor may differ by a little. Also returns an estimated reading time at 238 words per minute. Example: "Count the words in this essay and estimate the pages in Times New Roman 12 double spaced.

NameRequiredDescriptionDefault
fontNoFont name. Default times new roman.
textYes
spacingNoLine spacing. Default double.
font_sizeNoFont size in points. Default 12.

Output Schema

NameRequiredDescription
fontYes
wordsYes
spacingYes
font_sizeYes
sentencesYes
charactersYes
paragraphsYes
estimated_pagesYes
reading_minutesYes
characters_no_spacesYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so no contradiction. The description adds useful transparency beyond that: it warns the page count is an estimate from typical words-per-page and may differ slightly from a word processor, and it discloses the reading-time heuristic (238 wpm). It still doesn't mention output format or limits on text size.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the primary function, then lists inputs and defaults, then caveats and an example. It is slightly long and could trim the redundant defaults already in the schema, but every part remains informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return values, yet it helpfully notes the reading-time and page-estimate outputs. Inputs, defaults, caveats, and an example are all covered, leaving nothing an agent needs missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, and the description compensates by enumerating font choices (times new roman, arial, calibri, georgia, courier new, verdana) that the schema only describes generically as a string, and by restating defaults for font_size and spacing. It adds real semantic value over the schema, though it doesn't describe constraints like the 6-72 point range.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states specific verbs and resources: counts words, characters, sentences, paragraphs, and estimates page count and reading time. This clearly distinguishes it from siblings like readability_scores and word_frequency, but it does not explicitly separate itself from check_word_limit, which also deals with word counts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a concrete example invocation ('Count the words in this essay and estimate the pages in Times New Roman 12 double spaced') and explains the default configuration clearly. However, it never states when to prefer this over check_word_limit or other siblings, so no exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

readability_scoresReadability scoresA
Read-only

Score how hard a text is to read with three standard formulas: Flesch Kincaid grade level (plus the Flesch reading ease score), Gunning Fog index and SMOG index. Each grade is roughly a US school grade, so 12 is the end of high school and 16 is a college degree. Input: text. SMOG is built for samples of 30 sentences or more, so on shorter text the tool still returns a number but marks it as less reliable. Example: "Give me the Flesch Kincaid, Gunning Fog and SMOG scores for this paper.

NameRequiredDescriptionDefault
textYes

Output Schema

NameRequiredDescription
smogYes
wordsYes
sentencesYes
syllablesYes
gunning_fogYes
complex_wordsYes
smog_reliableYes
reading_ease_labelYes
flesch_reading_easeYes
flesch_kincaid_gradeYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds useful behavioral context: the three formulas, how grades map to US school levels, and that SMOG results are marked less reliable on short texts. It does not fully explain the output format, but an output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and is appropriately sized. Formula names, grade interpretation, input note, reliability caveat, and example each serve a clear function without repetition or padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple one-parameter input schema, existing output schema, and annotations covering safety, the description provides enough context to call the tool correctly. It explains what is measured, how to interpret grades, and the main reliability caveat for SMOG.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It identifies the single input as 'text' and adds a relevant constraint: SMOG is intended for samples of 30 sentences or more, with shorter text marked less reliable. This is meaningful but still leaves format and language expectations unstated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: score text readability. It names the exact formulas (Flesch Kincaid, Flesch reading ease, Gunning Fog, SMOG), which clearly distinguishes it from siblings like count_text, style_flags, and word_frequency.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the purpose and an example prompt, but there is no explicit guidance on when to choose this tool over siblings or when not to use it. The example clarifies the intended request pattern but does not provide exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

style_flagsStyle flagsA
Read-only

Flag common style problems in an essay: sentences in the passive voice, sentences that start with the same word as a neighbour (or three or more times), filler words and phrases such as very, just, in order to, and sentences that are too long. Inputs: text, and optional max_sentence_words (default 30), the length above which a sentence counts as long. Sentence numbers start at 1 and follow the order of the text, so number 3 is the third sentence. The sentence_list field gives each passive or long sentence with its number, and the text summary ends with a line listing those numbers. The checks are simple pattern rules, so treat them as prompts to reread, not as errors. Example: "Flag passive voice and filler words in my draft.

NameRequiredDescriptionDefault
textYes
max_sentence_wordsNoSentence length that counts as long. Default 30.

Output Schema

NameRequiredDescription
fillerYes
sentencesYes
filler_countYes
passive_countYes
sentence_listYes
long_sentencesYes
repeated_openersYes
passive_sentencesYes
max_sentence_wordsYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint and openWorldHint=false, and the description adds real behavioral context beyond that: the checks are simple pattern rules with false-positive risk, and the summary output ends with a line listing flagged sentence numbers. Partially overlaps with the output schema, but the caveat about rule-based imprecision is valuable and not encoded anywhere else.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and checks, then inputs, then output shape, then caveat — a sensible order. Slightly over-explains the sentence-numbering mechanics and the summary line, which is close to duplicating the output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema already exists, the description covers everything an agent needs: purpose, inputs with defaults, numbering convention, and the reliability caveat. Little is missing for a two-parameter read-only analysis tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, but the description compensates: it explains that max_sentence_words is optional with a default of 30 and defines its meaning as 'the length above which a sentence counts as long'. It also names both inputs up front, leaving no ambiguity about what 'text' should contain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Flag common style problems in an essay') and then enumerates the exact checks: passive voice, repeated sentence openers, filler words, overlong sentences. This is clearly distinguishable from siblings like readability_scores or word_frequency, which measure rather than flag.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an interpretive directive ('treat them as prompts to reread, not as errors') plus a concrete invocation example ('Flag passive voice and filler words in my draft'). It does not explicitly name when to prefer readability_scores or check_word_limit instead, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

word_frequencyWord frequencyA
Read-only

Find the words an essay uses most, to spot overused or repeated terms. Inputs: text, and optional top (how many words to list, default 10), min_count (fewest uses for a word to be listed, default 2) and include_common_words (also count small words such as the, and, of and to, default false). Case is ignored, and words under 3 letters are skipped unless include_common_words is true. Each word comes with its count and its share of all the words in the text. Example: "Which words do I overuse in this essay?.

NameRequiredDescriptionDefault
topNoHow many words to list. Default 10.
textYes
min_countNoFewest uses for a word to be listed. Default 2.
include_common_wordsNoAlso count small common words. Default false.

Output Schema

NameRequiredDescription
topYes
wordsYes
min_countYes
total_wordsYes
unique_wordsYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds real behavioral detail beyond them: case is ignored, words under 3 letters are dropped unless include_common_words is set, and each result carries a count and a share-of-text. It does not mention tokenization limits or handling of punctuation, but the added context is substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then a compact parameter rundown and filtering rules. The trailing example is useful but ends with a stray punctuation artifact ("essay?."), a small blemish on an otherwise tight description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the return format need not be spelled out, and the description still notes that each word comes with a count and a share. Combined with the disclosed filtering rules, an agent has enough to call this correctly; only edge cases like punctuation handling are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, and the description goes further than the schema by spelling out what include_common_words actually means (the, and, of, to) and how it interacts with the short-word filtering rule. top and min_count are only restated with their defaults, which the schema already supplies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (word frequency) and the intent (spot overused or repeated terms), which is genuinely distinguishable from count_text or readability_scores. It never names a sibling tool or draws an explicit boundary, so it stops short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear usage context ("spot overused or repeated terms") and an example query ("Which words do I overuse in this essay?"), so an agent knows when this applies. It offers no when-not guidance and does not point to alternatives such as count_text.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.1
    • First observedcheck_word_limit
    • First observedcount_text
    • First observedreadability_scores
    • First observedstyle_flags
    • First observedword_frequency

TDQS

A4.1/5.0

Scored across 5 tools

Disambiguation4/5

Each tool targets a distinct analysis type (counting, readability formulas, style checks, limit comparison, frequency), so selection is mostly clear. The one overlap is count_text vs check_word_limit, since both report word counts; the descriptions distinguish them by the limit/exclusion features, but an agent could still pick the wrong one for a simple count.

Naming Consistency3/5

All names use consistent snake_case, which is good. However, the conventions are mixed: count_text and check_word_limit are verb-led, while readability_scores, style_flags and word_frequency are bare noun phrases, so there is no single predictable pattern to infer a new tool's name from.

Tool Count5/5

Five tools is well-scoped for an essay analysis server, and each covers a genuinely different analytical output (counts/pages, readability grades, style issues, word limits, frequency). No tool feels redundant or like padding.

Completeness4/5

The surface covers the main essay-statistics workflows: length, page estimation, readability, style flags, limit checks and repetition. Minor gaps remain, such as no grammar/spelling check, sentence-length distribution, or citation handling beyond the references exclusion option, but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides text statistics and readability scores (Flesch Reading Ease, Flesch-Kincaid Grade Level) via offline, keyless tools.
    3 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Provides local, deterministic scoring and detailed auditing of text for AI-writing patterns via two read-only tools, with no network calls or language models.
    2
    2 npm
    3
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables agents to analyze text strings or files for formulaic AI writing patterns, returning a 0–100 score, band label, specific violations with context, and concrete advice. It performs this rule-based linting locally without LLM judges or API calls.
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables agents to analyze inline prose or files on disk for formulaic AI writing patterns, returning a 0-100 score, band label, specific violations with context, and concrete advice. Uses purely programmatic, configurable rules with no LLM judge or API calls.
    -