Skip to main content
Glama
kitfoxs

HumanizeMCP

by kitfoxs

HumanizeMCP

Ein Open-Source-Server für das Model Context Protocol (MCP), der KI-generierte Texte so umschreibt, dass sie wie von Menschen verfasst wirken, mit erstklassiger Unterstützung für Autoren, die von Detektoren fälschlicherweise markiert werden.

Python 3.12 License: MIT FastMCP Status: Alpha


Warum dieses Projekt existiert

Forscher der Stanford University testeten sieben große KI-Detektoren an TOEFL-Aufsätzen, die von Nicht-Muttersprachlern verfasst wurden, und 61,3 % wurden als KI-generiert eingestuft. US-amerikanische Achtklässler, die dieselbe Art von Aufsätzen schrieben, wurden korrekt klassifiziert. Dieses einzelne Ergebnis, veröffentlicht in Patterns (Cell Press, 2023), ist der Grund für die Existenz dieses Projekts.

Dieselbe statistische Signatur, die Detektoren als „KI“ bezeichnen, ist auch die Signatur von:

  • Neurodivergenten Autoren, insbesondere autistischen Erwachsenen, deren Prosa zu geringerer lexikalischer Vielfalt, konkreterem Wortschatz und wiederholten Phrasenstrukturen neigt.

  • ESL-Autoren (Englisch als Zweitsprache), deren aus Lehrbüchern stammende Grammatik als unnatürlich regelmäßig wahrgenommen wird.

  • Wissenschaftlern in formalen Disziplinen, deren Sprachstil konstruktionsbedingt einheitlich und reich an Diskursmarkern ist.

Eine Springer-Studie aus dem Jahr 2026 maß die reale Falsch-Positiv-Rate von Originality.ai bei wissenschaftlichen Texten mit 14 %, eine Größenordnung über der vom Unternehmen angegebenen Rate. Unabhängige Tests von ZeroGPT im Jahr 2026 ergaben 26,4 % Falsch-Positive bei studentischen Aufsätzen und über 21 % bei ESL-Autoren.

Diese Detektoren werden in akademischen, beruflichen, publizistischen und Visum-Workflows eingesetzt. HumanizeMCP gibt den betroffenen Autoren ein Werkzeug zur Verteidigung an die Hand, das auf veröffentlichter, begutachteter Literatur zur Umgehung von Detektoren basiert und nicht auf den Closed-Source-Heuristiken kommerzieller „Humanizer“.

Die vollständige Beweisgrundlage befindet sich in research/. Lesen Sie docs/ETHICS.md für die Grenze, die wir zwischen legitimer Nutzung zur Barrierefreiheit und akademischem Betrug ziehen.


Related MCP server: originality-mcp

Was es ist

HumanizeMCP ist ein Model Context Protocol-Server. Jeder MCP-fähige Client (Claude Code, GitHub Copilot CLI, Continue, Zed, Cursor und andere) kann seine Werkzeuge aufrufen. Es läuft lokal, überträgt keine Telemetrie, und die einzigen Netzwerkaufrufe sind die optionalen Downloads von Hugging Face-Modellen beim ersten Start.

Kernfunktionen:

  • Eine 9-stufige Pipeline (Vorverarbeitung, Ersetzung von „Surface Tells“, Entfernung von Wasserzeichen, stilometrische Glättung, kontrollierte Paraphrasierung, detektorgesteuerte Iteration, optionale Rückübersetzung, Stimmenerhaltung, Verifizierung) gemäß dem Design in research/06_implementation_recommendations.md.

  • Stil-Voreinstellungen (casual, blog, academic, esl, neurodivergent, preserve, ...) pro Aufruf konfigurierbar.

  • Lokales Detektor-Benchmarking gegen offene Modelle (RoBERTa-OpenAI-detector, Fast-DetectGPT, Binoculars) sowie optionale Adapter für kommerzielle APIs, wenn der Benutzer seinen eigenen Schlüssel bereitstellt.

  • Eine Verifizierungs- und Iterationsschleife (humanize_and_verify), die den Text so lange „rehumanisiert“, bis ein Zielwert des Detektors erreicht oder ein Budget erschöpft ist.


Schnellstart

Installation

# Using uv (recommended)
uv venv
source .venv/bin/activate
uv pip install -e .

# Or with pip
python -m venv .venv
source .venv/bin/activate
pip install -e .

Der erste Aufruf, der ein Hugging Face-Modell berührt, lädt die Gewichte nach ~/.cache/huggingface/ herunter. Der Basis-Detektor (roberta-base-openai-detector) ist ca. 500 MB groß.

Registrierung bei Ihrem MCP-Client

Claude Code (~/.config/claude-code/mcp.json oder äquivalent):

{
  "mcpServers": {
    "humanize": {
      "command": "humanize-mcp"
    }
  }
}

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

{
  "mcpServers": {
    "humanize": {
      "command": "humanize-mcp"
    }
  }
}

Wenn Sie in ein virtualenv installiert haben, verweisen Sie command auf den absoluten Pfad des Skripts (/path/to/.venv/bin/humanize-mcp).

Erster Aufruf

Von jedem MCP-Client aus:

> use humanize on the following text with style="academic":
>
> In this paper, we delve into the multifaceted intricacies of consensus
> mechanisms — leveraging robust theoretical frameworks to underscore the
> pivotal role of decentralized governance in fostering trust.

Der Server gibt eine Umschreibung zurück, die das „delve“-Cluster entfernt, Gedankenstriche auflöst, die Satzlänge variiert und (falls humanize_and_verify verwendet wird) mit einem lokalen Detektor bestätigt, dass die Umschreibung unter dem angeforderten KI-Schwellenwert liegt.


Werkzeugreferenz

Alle Werkzeuge sind über MCP aufrufbar. Typsignaturen werden durch Pydantic erzwungen.

humanize(text, style="default", preserve_voice=True, intensity=0.7) -> str

Führt die vollständige Humanisierungs-Pipeline für text aus. intensity liegt zwischen [0, 1] und entspricht den minimalen/ausgewogenen/aggressiven Hebeln aus dem Forschungsdossier.

humanize(
    text="The implementation leverages a robust framework...",
    style="academic",
    preserve_voice=True,
    intensity=0.7,
)
# -> "The implementation uses a sturdy framework..."

detect_tells(text) -> TellsReport

Lokalisiert KI-Merkmale ohne Umschreiben. Gibt Zeilennummern, Zeichen-Offsets, Schweregrad (1-5 Sterne gemäß research/02_ai_tells_catalog.md) und Ersetzungsvorschläge zurück.

detect_tells("We delve into the intricate tapestry of...")
# -> TellsReport(
#      tell_count=3,
#      tells=[TellLocation(category="excess_vocabulary", fragment="delve",
#                          line=1, char_start=3, char_end=8, severity=5,
#                          suggestion="examine"),
#             ...],
#      summary={"excess_vocabulary": 3},
#    )

score_humanity(text, detectors=["roberta-base"]) -> HumanityReport

Führt einen oder mehrere lokale Detektoren aus und gibt Wahrscheinlichkeiten pro Detektor sowie einen Gesamtwert zurück. Das Urteil lautet entweder "human", "uncertain", "ai" oder "unknown".

score_humanity(text, detectors=["roberta-base", "fast_detect_gpt"])
# -> HumanityReport(
#      detector_scores=[DetectorScore(detector="roberta-base",
#                                     probability_ai=0.87, ...),
#                       DetectorScore(detector="fast_detect_gpt",
#                                     probability_ai=0.91, ...)],
#      aggregate_probability_ai=0.89,
#      verdict="ai",
#    )

apply_style(text, style) -> str

Reine Register-Übersetzung, keine Humanisierung. Nützlich, wenn Sie von akademisch zu Blog oder formell zu locker wechseln möchten, ohne KI-Merkmale zu berühren.

list_styles() -> list[str]

Listet die aktuell in styles/ registrierten Stil-Voreinstellungen auf.

humanize_and_verify(text, style="default", target_ai_score=0.3, max_iterations=3) -> VerifyResult

Humanisieren, bewerten, bei höherer Intensität erneut humanisieren, wenn der Wert über dem Ziel liegt, wiederholen bis das Ziel erreicht ist oder max_iterations erreicht wurden. Gibt den finalen Text zusammen mit den Vorher/Nachher-Werten und einem Protokoll pro Iteration zurück.

result = humanize_and_verify(text, target_ai_score=0.2, max_iterations=5)
print(result.final_score.aggregate_probability_ai)  # e.g. 0.18
print(result.target_reached)                        # True

Stil-Voreinstellungen

Definiert in styles/. Das Set entwickelt sich mit dem Projekt weiter; rufen Sie list_styles() für die aktuelle Liste auf. Das MVP enthält:

Voreinstellung

Entwickelt für

Hinweise

default

Allgemeine Umschreibungen

Ausgewogene Intensität, konservative Stimmenerhaltung

casual

Persönliche E-Mails, Social-Media-Posts

Entfernt Förmlichkeit, erhöht die Variabilität

blog

Längere persönliche Texte

Behält den Absatzrhythmus bei

academic

Konferenzbeiträge, Abschlussarbeiten

Bewahrt Diskursmarker, entfernt delve-Cluster

esl

L2-Englisch-Autoren

Bewahrt einfachere Syntax, entfernt detektor-markierte Oberflächenmerkmale

neurodivergent

Autistische / ND-Autoren

Bewahrt wiederholte Phrasenstrukturen, geringe lexikalische Vielfalt

preserve

"Meine Stimme nicht verändern"

Nur Oberflächenmerkmale, keine Paraphrasierung

Das Schema für Voreinstellungen und wie Sie eigene hinzufügen können, ist in docs/ARCHITECTURE.md dokumentiert.


Architektur

+------------------------+
|   MCP Client (Claude   |
|   Code, Copilot, ...)  |
+-----------+------------+
            | stdio (MCP)
            v
+------------------------+
|  server.py (FastMCP)   |    <-- this package
+-----+-----+-----+------+
      |     |     |
      v     v     v
+--------+ +--------+ +----------+
| pipe-  | | styles | | bench-   |
| lines/ | |        | | mark/    |
+--------+ +--------+ +----------+
      |                 |
      v                 v
+----------------------------+
| 9-pass pipeline:           |
| 1. preprocess              |
| 2. surface tells           |
| 3. watermark scrub         |
| 4. stylometric smoothing   |
| 5. DIPPER paraphrase       |
| 6. detector-guided loop    |
| 7. back-translation (opt)  |
| 8. style transfer          |
| 9. verification            |
+----------------------------+

Vollständige Architektur und Erweiterungspunkte: docs/ARCHITECTURE.md.


Benchmarks

Das Benchmark-Framework befindet sich in benchmark/ und wird derzeit ausgebaut. Die unten stehenden Schlagzeilenzahlen sind Platzhalter, die der Benchmark-Ingenieur durch gemessene Werte aus dem RAID-Testset ersetzen wird.

Detektor

Vor der Humanisierung (Mittelwert P(KI))

Nach der Humanisierung (Mittelwert P(KI))

Reduktion

RoBERTa-OpenAI

TBD

TBD

TBD

Fast-DetectGPT

TBD

TBD

TBD

Binoculars

TBD

TBD

TBD

GPTZero (API)

TBD

TBD

TBD

Originality.ai (API)

TBD

TBD

TBD

Lokal reproduzieren:

python -m benchmark.run --dataset raid_subset --pipeline default

Ethische Nutzung

Dieses Werkzeug wurde für legitime Zwecke der Barrierefreiheit und Chancengleichheit entwickelt und dokumentiert:

  • Ein neurodivergenter Autor, dessen eigenes Schreiben falsch klassifiziert wird.

  • Ein ESL-Autor, dessen akademische Einreichung von einem Werkzeug markiert wird, das bei seiner Kohorte unabhängig mit 21-61 % Falsch-Positiv-Raten gemessen wurde.

  • Ein Wissenschaftler, dessen Prosa in einer formalen Disziplin einen spröden Detektor auslöst, der nicht im Workflow seiner Institution hätte eingesetzt werden dürfen.

  • Ein Journalist oder Essayist, der einer detektorgesteuerten Deplatforming-Strategie entkommen möchte.

Dieses Werkzeug ist nicht dafür gebaut, und die Betreuer werden nicht dabei helfen:

  • LLM-generierte Arbeit als eigene Leistung in einer benoteten akademischen Aufgabe einzureichen, die originäre Autorenschaft erfordert.

  • Desinformation, Spam oder Inhalte zu generieren, die darauf ausgelegt sind, in großem Maßstab zu täuschen.

  • Detektoren in sicherheitskritischen Kontexten zu umgehen (medizinische Beratung, rechtliche Schriftsätze, sicherheitsrelevante Offenlegungen).

Die technischen Pipelines unterstützen beide Populationen identisch; das ist unvermeidlich und entspricht der ethischen Haltung von Tor, Signal und jedem Paraphrasierungswerkzeug, das jemals existiert hat. Lesen Sie die vollständige Erklärung in docs/ETHICS.md.

Wir versenden keine Homoglyphen-Angriffe, kein Entfernen von Wasserzeichen für geschlossene Modelle, keine Injektion von Zeichen mit Breite Null oder andere Techniken, die Barrierefreiheits-Tools wie Screenreader beeinträchtigen. Das sind Exploits, keine Humanisierung.


Zitierung

Wenn Sie HumanizeMCP in der Forschung verwenden, zitieren Sie bitte das Dossier und das Projekt:

@software{humanize_mcp_2026,
  author       = {Olivas, Kit},
  title        = {HumanizeMCP: an open-source MCP server for accessibility-first
                  AI-text humanization},
  year         = {2026},
  url          = {https://github.com/kitfoxs/humanize-mcp},
  version      = {0.1.0},
  note         = {Research dossier in research/, evidence base in
                  research/references.bib}
}

Das Forschungsdossier in research/ ist selbst ein zitierfähiges Dokument und enthält die vollständige Bibliographie der begutachteten Arbeiten, auf denen dieses Projekt aufbaut.


Lizenz

MIT. Siehe LICENSE.


Danksagungen

Erstellt von Kit Olivas (@kitfoxs) und Ada Marie.

Das Forschungsdossier stützt sich auf Arbeiten von Liang et al. (Stanford, 2023), Dugan et al. (RAID, 2024), Krishna et al. (DIPPER, 2023), Cheng et al. (Adversarial Paraphrasing, 2025), David & Gervais (AuthorMist, 2025), Kobak et al. (Studie zur Wortschatzverschiebung, 2024), Juzek & Ward (Fokalwortanalyse, 2024) und vielen anderen. Vollständige Zitate in research/references.bib.

Besonderer Dank gilt den Autoren, Studenten und Wissenschaftlern, deren veröffentlichte Berichte über Schäden durch Falsch-Positive diese Arbeit motiviert haben.

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.

Tool Schema Changelog

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

  1. 6 tool updatesv0.1.0
    • First observedapply_style
    • First observeddetect_tells
    • First observedhumanize
    • First observedhumanize_and_verify
    • First observedlist_styles
    • First observedscore_humanity

TDQS

A4.4/5.0

Scored across 6 tools

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
ResponsivenessNo issues

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.
    19 npm
    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.
    -