Skip to main content
Glama
kitfoxs

HumanizeMCP

by kitfoxs

HumanizeMCP

A free tool that helps your writing not get falsely flagged as "AI-written" by the broken detectors used in schools, jobs, and publishing.

Python License: MIT Tests MCP


๐Ÿค” Wait, what is this actually?

You know how AI detectors are everywhere now? Schools use them. Job applications use them. Magazines use them. Even your boss might be running your emails through one without telling you.

The problem: those detectors are broken.

Like, really broken. A 2023 Stanford study found AI detectors flag essays written by non-native English speakers as "AI-written" 61% of the time. Real Charles Dickens passages from 1859 (165 years before AI existed!) get flagged as 88% AI by some detectors. Casual Reddit comments by actual humans? 100% AI on two major detectors.

So if you:

  • ๐Ÿง  Are autistic and write in a precise, structured way

  • ๐ŸŒ Speak English as a second language

  • ๏ฟฝ๏ฟฝ Write in a formal academic voice

  • ๐Ÿ’ผ Just have consistent prose habits

  • โœ๏ธ Use AI to help draft something and then heavily edit it

...you might find your work flagged as "AI-written" even when it isn't, or it's mostly yours. That can mean a failing grade. A rejected paper. A denied job. A blocked blog post.

HumanizeMCP rewrites your text so the detectors stop flagging it falsely.

It's free, open source, and runs entirely on your computer (no cloud, no spying, no subscription).


Related MCP server: originality-mcp

โœจ What it does in plain English

Take this thing AI tends to write:

That methodology is literally CPTS / OSCP exam tier โ€” the rubric. You delve into multifaceted complexities of credential reuse, and it's not just exploitation, it's understanding the underlying assumptions.

Run it through HumanizeMCP and you get:

The methodology is based on the CPTS / OSCP exam level, which is the rubric. You dig into the varied parts of credential reuse, and it isn't only exploitation, it's understanding the assumptions underneath.

It removes the AI tells (em dashes, "delve," "multifaceted," parallel structures, suspiciously perfect grammar) without changing what you meant.

Real before-and-after numbers on this exact transformation:

What the detectors think

Before HumanizeMCP

After HumanizeMCP

The simple detector

78% AI โŒ

6.7% AI โœ…

The fancy transformer detector

76% AI โŒ

65% AI (improved)

And it preserves your paragraphs, your meaning, and (when you want it to) your voice.


๐Ÿ›  What's in the box

It's a Model Context Protocol (MCP) server, which is a fancy way of saying "any AI assistant that supports MCP can use it as a tool." That includes Claude Desktop, Claude Code, Cursor, Continue, Zed, and the GitHub Copilot CLI.

If you don't use any of those, you can still use it as a regular Python library or run it from the command line.

The tool gives your AI assistant 6 functions:

Function

What it does

humanize

Rewrite text so detectors don't flag it. The main thing you'll use.

detect_tells

Tell you what AI giveaways are in some text (em dashes, overused words, etc.) without rewriting it. Great for self-editing.

score_humanity

Run text through several AI detectors and tell you what they think.

apply_style

Just change the voice/register without doing detection-evasion work.

list_styles

Show you what writing styles are available.

humanize_and_verify

The slow but most accurate version. Rewrites your text, scores it, rewrites again if needed, picks the best version.

There are 11 built-in writing styles you can pick from:

  • reddit โ€” casual, conversational, lots of contractions

  • twitter โ€” even shorter and punchier

  • blog โ€” friendly but coherent, the sweet spot for most people

  • casual_dm โ€” like texting a friend

  • linkedin โ€” professional but still human (no corporate-AI-speak)

  • academic_human โ€” formal but breaks parallel structures and adds proper hedges

  • book_chapter โ€” for non-fiction writing, conversational but authoritative

  • creative_fiction โ€” for novelists; preserves stylistic em-dashes (writers earn those)

  • esl_friendly โ€” protects the natural patterns of non-native English writers

  • autistic_friendly โ€” preserves precise/repetitive prose without forcing fake casualness

  • base โ€” the default if you don't pick one


๐Ÿš€ Quickstart

Install (one time)

You'll need Python 3.11 or newer. Then:

git clone https://github.com/kitfoxs/humanize-mcp.git
cd humanize-mcp
python -m venv .venv
source .venv/bin/activate          # on Windows: .venv\Scripts\activate
pip install -e .

Use it from Python (the fastest path)

from pipelines import humanize

text = "I delve into the multifaceted intricacies of this approach โ€” it's not just elegant, it's revolutionary."

clean = humanize(text, style="blog")
print(clean)

That's it. The first time you run it, it'll download a small AI model (~250MB) for the rewriting. After that it's instant.

Use it from your AI assistant (the cool path)

Add this to your MCP config file (location depends on your client; common ones below):

{
  "mcpServers": {
    "humanize": {
      "command": "/full/path/to/humanize-mcp/.venv/bin/python",
      "args": ["/full/path/to/humanize-mcp/server.py"]
    }
  }
}

Common config locations:

  • Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json (Mac)

  • Cursor: ~/.cursor/mcp.json

  • GitHub Copilot CLI: ~/.copilot/mcp-config.json

  • Continue / Zed / Windsurf: see their MCP docs

Restart your assistant. Now you can ask Claude/Cursor/etc.:

"Use humanize to rewrite this paragraph in reddit style: ..."

And it'll just do it.


๐ŸŽจ The 5 most useful examples

from pipelines import humanize

# 1. Default (best quality, takes ~10 seconds)
text = humanize("Your AI-written text here.")

# 2. Fast mode (deterministic, ~50ms, slightly worse)
text = humanize("Your text.", iterate=False)

# 3. Pick a style
text = humanize("Your text.", style="reddit")

# 4. Crank it up (more aggressive rewriting)
text = humanize("Your text.", style="blog", intensity="aggressive")

# 5. Target a specific detector
text = humanize("Your text.", target_detector="roberta_openai")

โค๏ธ Who this is really for

This is an accessibility tool, not a fraud-enablement tool.

The people who genuinely need this:

  • ๐ŸŒ Non-native English students whose essays get flagged as AI because their syntax is "too clean"

  • ๐Ÿง  Autistic writers whose precise, structured prose pattern-matches with AI

  • ๐Ÿ“š Academics writing in formal disciplines where uniformity is the norm

  • ๐Ÿ’ผ Marketers and bloggers publishing AI-assisted content that's been heavily edited and shouldn't be flagged

  • โœ๏ธ Anyone whose writing has been wrongly flagged by a system whose bias is well-documented

The people who shouldn't use this:

  • โŒ Students trying to pass off pure ChatGPT output as their own work

  • โŒ Anyone trying to evade content moderation for harmful content

  • โŒ Anyone trying to commit fraud

The tool can't tell the difference, so we leave that judgment to you. Don't be a jerk about it.


๐Ÿ“Š The data behind the claims

Real measurements on the same paragraph of AI-generated prose:

Detector

Untouched AI text

After HumanizeMCP

Reduction

Heuristic (perplexity + burstiness + tells)

78.8% AI

6.7% AI

-91%

RoBERTa OpenAI detector

76.8% AI

65.2% AI

-15%

ChatGPT-RoBERTa

100% AI

99.9% AI

(broken โ€” it also flags Charles Dickens at 88.8%)

For comparison, here's what the same detectors say about known-human writing:

Sample (verifiably written by humans)

RoBERTa OpenAI says

ChatGPT-RoBERTa says

Charles Dickens, A Tale of Two Cities (1859)

4.5% (correct)

88.8% AI โŒ

Real Reddit comment, written by a human

100% AI โŒ

100% AI โŒ

Casual conversation transcript

99.9% AI โŒ

94.9% AI โŒ

So when you see "100% AI" on your essay, the detector might just be wrong. That's why this tool exists.


๐Ÿ”ฌ The technical bits (for the curious)

The pipeline runs your text through up to 9 cleanup passes:

  1. Em-dash removal (the #1 AI giveaway in 2025-2026 prose)

  2. Lexical substitution (replaces "delve / leverage / multifaceted / robust / paradigm" etc. with simpler alternatives)

  3. Structural rewrites (breaks "it's not X, it's Y" parallel constructions)

  4. Sentence-rhythm variation (mixes short and long sentences for natural human burstiness)

  5. Contractions (turns "it is" into "it's" at human-like density, not 100% replacement)

  6. Voice injection (adds natural filler like "honestly" or "tbh" depending on the style)

  7. Punctuation variation (occasional ellipses, parens, fragments)

  8. Register shift (formal โ†” casual depending on the chosen style)

  9. Heavy paraphrase (a real T5 model rewrites sentences from scratch โ€” only at "aggressive" intensity)

Then there's a detector-guided iteration loop (Cheng et al. 2025 algorithm) that generates 5 candidate paraphrases of the worst-scoring paragraph, scores each against your chosen detector, and keeps the lowest-scoring one. This is what gets you from "single-pass okay" to "publication-grade."

The benchmarking suite includes 6 detector wrappers:

  • A custom Heuristic baseline (transparent, no model required)

  • RoBERTa OpenAI detector (the academic reference)

  • ChatGPT-RoBERTa detector

  • Desklib AI Text Detector (newer, 2024)

  • Fast-DetectGPT (perplexity-based)

  • Binoculars (cross-perplexity, Hans et al. 2024)

Aggregation is bias-aware: detectors with documented bias are excluded from the "trusted mean" so they can't skew your headline number.

If you want the deep architecture details, see docs/ARCHITECTURE.md. For ethics and what we explicitly won't build, see docs/ETHICS.md. For the full literature review behind the design, see research/.


๐Ÿงช Run the tests

source .venv/bin/activate
pip install pytest
pytest -q

You should see 147 tests passing in about 5 seconds.


๐Ÿ“œ Citation

If you use this in research:

@software{humanize_mcp_2026,
  author       = {Kit (kitfoxs) and Ada Marie},
  title        = {{HumanizeMCP}: An open-source MCP server for accessible
                  AI-text humanization with bias-aware detector benchmarking},
  year         = {2026},
  url          = {https://github.com/kitfoxs/humanize-mcp},
  version      = {0.2.1},
}

๏ฟฝ๏ฟฝ Made by

Built by Kit (@kitfoxs) and Ada Marie, in one ~2-hour autonomous coding session powered by a 4-agent Opus 4.7 swarm.

Released under the MIT License. Free forever. Use it, fork it, build on it, name your own version after it. Just don't use it to be cruel.


๐Ÿ’Œ Final note

If a detector ever flags something you actually wrote and tries to penalize you for it, you should know:

The detector is wrong. A lot of the time. There's now a Stanford study, peer-reviewed benchmarks, and a 2,400-line literature review (linked above) showing exactly how wrong.

You wrote your words. Don't let a misconfigured statistical classifier tell you otherwise.

That's what HumanizeMCP is for.

๐Ÿ’™๐Ÿฆ„

Available Tools

6 tools
apply_styleA

Apply a style preset to text without running humanization passes.

Useful when the caller wants pure register translation (formal to casual, academic to blog, etc.) without removing AI tells. The set of legal style names is whatever :func:list_styles returns.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe input prose.
styleYesName of a style preset registered in ``styles/``.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It clearly discloses that this tool does NOT humanize and performs only style/register transformation. It could add details about side effects or atomicity, but for a text-transform tool the key behavioral trait is well covered.

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 compact: a single lead sentence stating core action and exclusions, followed by a brief usage context. No redundant wording exists.

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 parameter set (text, style), output schema existence, and sibling context, the description fully covers what the tool does, when to use it, and how to obtain valid style values. No critical information is 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 100%, but the description adds value beyond the schema by clarifying that 'style' is a registered preset (from list_styles) and providing examples of register translation. This supplements the schema's generic type/description information.

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 uses a specific verb ('Apply') and resource ('style preset to text') and clearly distinguishes itself from siblings by stating 'without running humanization passes.' This makes its purpose unambiguous.

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

Usage Guidelines5/5

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

Explicitly states when to use: 'Useful when the caller wants pure register translation... without removing AI tells.' It also points to list_styles for legal style names, providing clear guidance on prerequisites and differentiation from humanization tools.

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

detect_tellsA

Locate AI writing tells in the input text.

Reports surface signatures catalogued in research/02_ai_tells_catalog.md: excess vocabulary (the "delve" cluster), em-dash overuse, sentence-initial discourse markers, copular templates, conversational scaffolding, and parallel-structure overuse. Each tell carries a 1-indexed line number, character offsets, a 1-to-5 severity, and an optional substitution suggestion.

The intended use is diagnostic: surface what would be edited by :func:humanize so a writer can decide which tells to preserve and which to remove.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe input prose to scan.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tellsYes
summaryNoCount of tells per category.
tell_countYes
text_lengthYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It details what the tool reports (specific signature categories) and the output structure (line number, offsets, severity, substitution), plus its diagnostic role. It does not mention read-only nature or error handling, but the scanning behavior is well defined.

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 compact and front-loaded, with the core action in the first sentence. The subsequent sentences add concrete detail about signature types, returned fields, and intended use without redundancy.

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?

For a single-parameter detection tool with an output schema, the description is thorough: it states the purpose, lists detection categories, describes the output fields, and explains why a writer would use it. Some limitations (e.g., input length, language) are omitted, but they are minor and the overall context is clear.

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?

The input schema already describes the single parameter 'text' as 'The input prose to scan' (100% coverage). The description adds minimal extra parameter meaning, only reinforcing that it scans prose. Therefore it meets the baseline of 3.

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 opens with a specific verb 'Locate' and a clear resource 'AI writing tells in the input text', then enumerates concrete tell categories and output fields. This clearly distinguishes it from sibling tools like humanize (which edits) by framing itself as diagnostic.

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 description explicitly states the intended use: 'diagnostic: surface what would be edited by humanize so a writer can decide which tells to preserve and which to remove.' This tells the agent when to use it (before humanize) and expresses a clear alternative (humanize) but does not explicitly address all sibling tools like score_humanity, which might also be diagnostic.

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

humanizeA

Rewrite AI-generated text so it reads as human-authored.

Runs the configured pipeline of passes (preprocess, surface-tell substitution, watermark scrub, stylometric smoothing, optional paraphrase passes; see docs/ARCHITECTURE.md) and returns the final text. For diagnostic output (per-pass diff, before/after detector scores) use :func:humanize_and_verify instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe input prose to humanize. Markdown formatting is tolerated and normalized in the preprocess pass.
styleNoName of a style preset registered in ``styles/``. Common presets include ``"casual"``, ``"blog"``, ``"academic"``, ``"esl"``, ``"neurodivergent"``, ``"preserve"``. Use :func:`list_styles` to enumerate what is actually available at runtime.default
intensityNoContinuous control in [0, 1] mapping to the ``minimal`` / ``balanced`` / ``aggressive`` levers documented in the research dossier. Roughly: 0.0-0.33 minimal, 0.34-0.66 balanced, 0.67-1.0 aggressive. Higher values run more passes and apply heavier per-pass edits.
preserve_voiceNoWhen True, the pipeline retains identifying stylistic features the author would want to keep (sentence-length distribution, lexical idiom, characteristic punctuation). When False, the pipeline is free to flatten voice in pursuit of detector evasion.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses the internal pipeline (preprocess, surface-tell substitution, watermark scrub, stylometric smoothing, optional paraphrase passes), which is valuable behavioral context. It does not explicitly state whether the tool is read-only or has side effects, but for a text transformation tool this is largely implicit.

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 concise and front-loaded: a one-sentence purpose, one sentence on process, and one sentence pointing to an alternative. Every sentence adds value with no filler or redundancy.

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 tool's complexity (configurable pipeline) and rich schema/output schema, the description is complete enough for selection. It explains the purpose, distinguishes from the diagnostic variant, and provides a pointer to further architecture docs without over-explaining return values already covered by the output schema.

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 100%, so the baseline is 3. The tool description itself does not add substantial parameter meaning beyond the schema; it references docs and list_styles but repeats concepts already covered in the schema's property descriptions. Thus it does not exceed the baseline.

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 opens with a specific verb+resource+outcome: 'Rewrite AI-generated text so it reads as human-authored.' It distinguishes itself from sibling humanize_and_verify by explicitly noting that the latter provides diagnostic output.

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

Usage Guidelines5/5

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

The description clearly tells when to use this tool vs the alternative: use humanize for the final text, and humanize_and_verify for diagnostic output. It also points to list_styles for enumerating available style presets, giving practical usage context.

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

humanize_and_verifyA

Humanize, then iterate against detectors until a target score is met.

v0.2.0 (Bet 3): wraps :class:pipelines.IterativeHumanizer, which implements the Cheng et al. 2025 detector-guided loop (research/04 section 1.3). Each iteration:

  1. Locates the worst-scoring paragraph in the current text.

  2. Generates candidates_per_iteration stochastic paraphrase candidates of that paragraph (via ParaphrasePass.paraphrase_candidates).

  3. Scores each candidate, keeps the lowest, splices it back in.

  4. Re-scores the whole text. If at or below target_ai_score, returns.

This replaces the v0.1.0 loop, which re-ran the deterministic 9-pass pipeline at ramped intensities. As documented in docs/REVIEW_v0.1.0.md section 2.9, every pass except 9-heavy is idempotent on its own output, so iterations 2-3 of the old loop did no work. The new loop is meaningfully different because it depends on stochastic candidate generation: only non-deterministic search can converge on a lower score after a deterministic fixed point.

The function always returns a result, even if the target was not reached; callers should check target_reached to know.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe input prose to humanize.
styleNoName of a style preset; see :func:`list_styles`.blog
max_iterationsNoHard upper bound on improvement iterations. Must be >= 1. Iteration 0 is always the baseline humanization and does not count against this bound.
target_ai_scoreNoThe aggregate probability_ai value below which the loop exits. Must be in [0, 1]. Cheng et al. 2025 use 0.15 as their stop value; we keep 0.3 ("comfortably human") as the default for backwards compatibility with v0.1.x callers.
target_detectorNoWhich detector field the loop optimizes against. ``"trusted_mean"`` (default) uses the suite's mean over detectors without documented bias caveats. ``"raw_mean"`` uses the unweighted mean across all detectors. Any other value is treated as a specific detector name (e.g. ``"roberta_openai"``).trusted_mean
candidates_per_iterationNoHow many stochastic paraphrase candidates to generate per iteration. The Cheng et al. 2025 paper uses 3-5; we default to 3 as a quality / latency tradeoff. Must be >= 1.

Output Schema

ParametersJSON Schema
NameRequiredDescription
textYes
notesNo
iterationsYes
final_scoreYesThe full output of :func:`score_humanity`.
initial_scoreYesThe full output of :func:`score_humanity`.
total_time_msNoTotal wall-clock time including baseline humanization.
target_reachedYes
target_ai_scoreYes
target_detectorNoWhich detector field the loop optimized against. One of "trusted_mean", "raw_mean", or a specific detector name.
per_iteration_scoresNoWhole-text AI probability after iteration 0 (baseline) then after each accepted improvement. Empty if scoring was unavailable.
candidates_per_iterationNoHow many stochastic paraphrase candidates were generated per iteration. 1 reduces the loop to deterministic paraphrasing.

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full transparency burden and does well: it explains the stochastic candidate generation, the per-iteration splicing, and the critical behavior that the function always returns a result, requiring the caller to check 'target_reached'. It also discloses the algorithm's reliance on non-determinism to break fixed points, adding meaningful behavioral context.

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 a one-sentence purpose and uses numbered steps for algorithm clarity. The historical comparison to v0.1.0 adds several sentences, but it serves to explain why the loop is stochastic, which is behaviorally relevant. It is longer than strictly necessary but well-structured and justifiable for the tool's complexity.

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?

The description covers the iterative process, parameter behavior, and return-value expectations (checking 'target_reached'). It does not explicitly contrast with sibling tools, but the tool is complex and the description provides enough detail to understand its role. The presence of an output schema also offloads return-structure details.

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 coverage is 100% with detailed descriptions for all six parameters, so the schema already provides defaults, constraints, and semantics. The description does mention 'candidates_per_iteration' and 'target_ai_score' in the loop description, but this adds only illustrative context rather than new parameter meaning beyond the schema's own thorough explanation.

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 opening sentence 'Humanize, then iterate against detectors until a target score is met' clearly specifies the verb (humanize and verify), resource (text), and goal (target score). This distinguishes the tool from siblings like 'humanize' by emphasizing the iterative detector-guided loop rather than a single-pass transformation.

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?

The description implies the tool is for cases where a target AI score must be reached, but it never explicitly states when to prefer this over sibling tools such as 'humanize' or 'score_humanity'. It provides no exclusions or alternative conditions, and the 'always returns a result even if target was not reached' note is more behavioral than usage-oriented.

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

list_stylesA

List the names of all currently registered style presets.

Style presets are loaded from the styles/ package. If the package is unavailable an empty list is returned.

Returns

list of str Sorted list of preset names, e.g. ["academic", "blog", "casual", "esl", "neurodivergent", "preserve"].

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the return type (list of str), sorted order, example values, and an edge case (empty list if package unavailable). This gives the agent an accurate expectation of behavior, though it doesn't explicitly state side-effect-free behavior (which is implied by 'list').

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 concise and well-structured: a single purpose line, a brief source/edge-case note, and a Returns section with type and example. Every sentence adds value without unnecessary fluff, and the formatting is clean.

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?

For a simple, parameter-less listing tool with an output schema, the description is complete. It explains what is returned, the ordering, a representative example, and what happens if the package is unavailable. No critical information is missing for the agent to effectively invoke and use this 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?

The tool has zero parameters, and the schema is an empty object. The description adds no parameter details, but none are needed. The baseline for a zero-parameter tool is 4, and the description provides relevant return-value context that compensates adequately.

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 clearly states the tool's function: 'List the names of all currently registered style presets.' This uses a specific verb (list) and resource (style presets), distinguishing it from siblings like apply_style or humanize. It also adds context about the source package and an example output.

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 description provides clear context by explaining the purpose (listing preset names) and the behavior when the package is unavailable. While it doesn't explicitly mention alternatives or when not to use it, the intended use as a lookup tool is evident. The absence of explicit exclusions is acceptable for such a simple read-only operation.

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

score_humanityA

Score how AI-like the text reads to one or more open detectors.

Wraps the local detector adapters in benchmark/. The default detector list is ["roberta-base"] (the canonical academic baseline; see research/01_detector_landscape.md). Other adapters such as "fast_detect_gpt" and "binoculars" are added as the benchmark package matures.

Aggregate probability is the arithmetic mean of detector scores that returned successfully. If every detector failed, aggregate is -1.0 and the verdict is "unknown".

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe input prose to score.
detectorsNoNames of detector adapters to run. Defaults to ``["roberta-base"]`` if not given or empty.

Output Schema

ParametersJSON Schema
NameRequiredDescription
verdictYesOne of "human", "uncertain", "ai", or "unknown".
text_lengthYes
detector_scoresYes
aggregate_probability_aiYesMean of successful detector probability_ai scores. Equals -1.0 if no detector returned a score.

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries full responsibility for disclosure. It explains key behaviors: aggregate probability as arithmetic mean, failure handling (if every detector fails, aggregate is -1.0 and verdict is 'unknown'), and the default detector list. This goes beyond the schema and gives the agent a solid understanding of expected outcomes and edge cases.

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 well-structured: a clear one-sentence purpose, followed by concise details on defaults, adapter examples, and aggregate behavior. Every sentence earns its place without unnecessary fluff. It is appropriately sized for the tool's complexity.

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?

The description covers the tool's purpose, parameters, default behavior, and edge-case output. Since an output schema exists, the return structure is already defined, but the description adds crucial context about the aggregate value and verdict string. For a tool with 2 parameters and moderate complexity, this is complete.

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 100%, but the description adds meaningful context. It clarifies the 'detectors' parameter with the default value, the empty-list behavior, and examples of allowed adapter names. The description also explains how outputs are aggregated, which is directly relevant to interpreting the parameters. This significantly enriches the schema.

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 opens with a specific verb and resource: 'Score how AI-like the text reads to one or more open detectors.' This clearly states the tool's function and distinguishes it from siblings like humanize (which transforms text) and detect_tells (which likely identifies tells). The reference to detectors also sets it apart.

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?

The description implies usage for scoring AI-likeness but does not explicitly state when to prefer this over alternatives. It mentions the default detector list and adapters, giving context about configuration, but it does not contrast with sibling tools or provide exclusion criteria. Usage guidance is clear enough for a scoring tool but not explicitly framed as 'use when...'.

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

TDQS

A4.4/5.0
Disambiguation4/5

Most tools are clearly distinct: detect_tells, score_humanity, apply_style, and list_styles each serve unique purposes. The only potential confusion is between humanize and humanize_and_verify, but their descriptions clearly delineate the simple pipeline from the iterative verification loop, so agents should be able to choose correctly.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: humanize, detect_tells, score_humanity, apply_style, list_styles, humanize_and_verify. Even the compound name follows the convention. No mixing of styles or vague verbs.

Tool Count5/5

Six tools is well-scoped for a text humanization server. Each tool covers a distinct aspect: core humanization, diagnostic analysis, scoring, style control, and verification loop. This is an appropriate size without redundancy or bloat.

Completeness5/5

The toolset provides complete coverage of the humanization workflow: humanize for direct rewriting, humanize_and_verify for iterative improvement, detect_tells for diagnostics, score_humanity for evaluation, and apply_style/list_styles for style manipulation. There are no obvious gaps in the lifecycle.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Humanizer PRO - The Best AI Text Humanizer MCP Server Transform AI-generated content into natural, human-sounding text that bypasses GPTZero, Turnitin, Originality.ai, Copyleaks, ZeroGPT, and other AI detectors. Undetectable AI content rewriting with Stealth, Academic, and SEO modes.
    3
  • A
    license
    Not graded
    quality
    D
    maintenance
    Detects and fixes LLM prose patterns in text, exposing tools for auditing and improving writing quality in MCP-compatible hosts.
    29
    2
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A local-first MCP server that builds compact voice profiles from writing samples, then compares, rewrites, or generates new text in that voice.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kitfoxs/humanize-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server