HumanizeMCP
Allows GitHub Copilot (via its CLI) to access humanization tools for rewriting AI-generated prose, with style presets and verification loops.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@HumanizeMCPhumanize 'delve into the intricacies' with style='academic'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
๐ค 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.jsonGitHub Copilot CLI:
~/.copilot/mcp-config.jsonContinue / 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:
Em-dash removal (the #1 AI giveaway in 2025-2026 prose)
Lexical substitution (replaces "delve / leverage / multifaceted / robust / paradigm" etc. with simpler alternatives)
Structural rewrites (breaks "it's not X, it's Y" parallel constructions)
Sentence-rhythm variation (mixes short and long sentences for natural human burstiness)
Contractions (turns "it is" into "it's" at human-like density, not 100% replacement)
Voice injection (adds natural filler like "honestly" or "tbh" depending on the style)
Punctuation variation (occasional ellipses, parens, fragments)
Register shift (formal โ casual depending on the chosen style)
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 -qYou 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 toolsapply_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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The input prose. | |
| style | Yes | Name of a style preset registered in ``styles/``. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The input prose to scan. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tells | Yes | |
| summary | No | Count of tells per category. |
| tell_count | Yes | |
| text_length | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The input prose to humanize. Markdown formatting is tolerated and normalized in the preprocess pass. | |
| style | No | Name 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 |
| intensity | No | Continuous 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_voice | No | When 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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:
Locates the worst-scoring paragraph in the current text.
Generates
candidates_per_iterationstochastic paraphrase candidates of that paragraph (viaParaphrasePass.paraphrase_candidates).Scores each candidate, keeps the lowest, splices it back in.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The input prose to humanize. | |
| style | No | Name of a style preset; see :func:`list_styles`. | blog |
| max_iterations | No | Hard upper bound on improvement iterations. Must be >= 1. Iteration 0 is always the baseline humanization and does not count against this bound. | |
| target_ai_score | No | The 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_detector | No | Which 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_iteration | No | How 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
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| notes | No | |
| iterations | Yes | |
| final_score | Yes | The full output of :func:`score_humanity`. |
| initial_score | Yes | The full output of :func:`score_humanity`. |
| total_time_ms | No | Total wall-clock time including baseline humanization. |
| target_reached | Yes | |
| target_ai_score | Yes | |
| target_detector | No | Which detector field the loop optimized against. One of "trusted_mean", "raw_mean", or a specific detector name. |
| per_iteration_scores | No | Whole-text AI probability after iteration 0 (baseline) then after each accepted improvement. Empty if scoring was unavailable. |
| candidates_per_iteration | No | How many stochastic paraphrase candidates were generated per iteration. 1 reduces the loop to deterministic paraphrasing. |
TDQS
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.
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.
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.
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.
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.
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"].
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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".
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The input prose to score. | |
| detectors | No | Names of detector adapters to run. Defaults to ``["roberta-base"]`` if not given or empty. |
Output Schema
| Name | Required | Description |
|---|---|---|
| verdict | Yes | One of "human", "uncertain", "ai", or "unknown". |
| text_length | Yes | |
| detector_scores | Yes | |
| aggregate_probability_ai | Yes | Mean of successful detector probability_ai scores. Equals -1.0 if no detector returned a score. |
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
An MCP server that integrates with Discord to provide AI-powered features.
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
Walter Remote MCP Server โ AI humanization and detection tools
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceHumanizer 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
- FlicenseAqualityCmaintenanceMCP server for Originality.ai that provides tools for AI detection, plagiarism checking, fact verification, readability analysis, grammar/spelling, and SEO optimization.52
- AlicenseNot gradedqualityDmaintenanceDetects and fixes LLM prose patterns in text, exposing tools for auditing and improving writing quality in MCP-compatible hosts.292MIT
- FlicenseNot gradedqualityDmaintenanceA 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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