Skip to main content
Glama
kitfoxs

HumanizeMCP

by kitfoxs

HumanizeMCP

AIが生成した文章を人間が書いたように書き換える、オープンソースのModel Context Protocol(MCP)サーバー。検出器が誤判定しやすい文章をサポートするファーストクラスの機能を備えています。

Python 3.12 License: MIT FastMCP Status: Alpha


存在意義

スタンフォード大学の研究者が、英語を母国語としない人々が書いたTOEFLエッセイに対して主要なAI検出器7種をテストしたところ、61.3%がAI生成と分類されました。同じ種類のエッセイを書いた米国の8年生(ネイティブ)は正しく分類されました。この結果は『Patterns』(Cell Press, 2023)に掲載されており、本プロジェクトが存在する理由となっています。

検出器が「AI」と呼ぶ統計的特徴は、以下のような人々の文章の特徴でもあります:

  • 神経多様性のある書き手:特に自閉症の成人。語彙の多様性が低く、具体的な語彙が多く、句構造が繰り返される傾向があります。

  • ESL(第二言語としての英語)の書き手:教科書的な文法が不自然なほど規則的に読み取られます。

  • 形式的な学問分野の研究者:そのレジスター(言語様式)が意図的に均一で、談話標識が多用されます。

2026年のSpringerの研究では、学術論文に対するOriginality.aiの実際の誤検知率が14%であると測定されました。これは同社が公表している率の1桁上です。2026年のZeroGPTに対する独立したテストでは、学生のエッセイで26.4%、ESLの書き手で21%以上の誤検知が測定されました。

これらの検出器は、学術、雇用、出版、ビザのワークフローで導入されています。HumanizeMCPは、商用ツールが提供するブラックボックスなヒューリスティックではなく、査読済みの回避手法に関する文献に基づいて構築されており、影響を受ける書き手が自分自身を守るためのツールを提供します。

証拠の全ベースは research/ にあります。正当なアクセシビリティ利用と学術的不正の境界線については docs/ETHICS.md をお読みください。


Related MCP server: originality-mcp

本ツールの概要

HumanizeMCPは Model Context Protocol サーバーです。MCP対応クライアント(Claude Code、GitHub Copilot CLI、Continue、Zed、Cursorなど)であれば、そのツールを呼び出すことができます。ローカルで実行され、テレメトリは送信されず、ネットワーク呼び出しは初回実行時のHugging Faceモデルのダウンロード(オプション)のみです。

主な機能:

  • 9段階のパイプライン(前処理、表面的な言い回しの置換、透かしの除去、文体平滑化、制御された言い換え、検出器による反復、バックトランスレーション(オプション)、声の保持、検証)。research/06_implementation_recommendations.md の設計に従います。

  • スタイルプリセット(casual、blog、academic、esl、neurodivergent、preserveなど)。呼び出しごとに設定可能です。

  • ローカル検出器のベンチマーク(RoBERTa-OpenAI-detector、Fast-DetectGPT、Binocularsなど)。ユーザーが独自のキーを提供すれば商用API用のアダプターも利用可能です。

  • 検証と反復ループ (humanize_and_verify)。ターゲットの検出スコアに達するか、予算を使い切るまで再ヒューマナイズを行います。


クイックスタート

インストール

# 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 .

Hugging Faceモデルに触れる最初の呼び出しで、~/.cache/huggingface/ に重みがダウンロードされます。ベースとなる検出器 (roberta-base-openai-detector) は約500MBです。

MCPクライアントへの登録

Claude Code (~/.config/claude-code/mcp.json または同等のファイル):

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

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

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

仮想環境(virtualenv)にインストールした場合は、command にスクリプトの絶対パス (/path/to/.venv/bin/humanize-mcp) を指定してください。

最初の呼び出し

MCPクライアントから:

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

サーバーは、delve(深掘りする)といったAI特有の語彙を削除し、ダッシュを分割し、文の長さを変化させ、(humanize_and_verify を使用した場合)ローカル検出器で書き換え後のスコアが要求されたAI閾値を下回っていることを確認した書き換え結果を返します。


ツールリファレンス

すべてのツールはMCPから呼び出し可能です。型シグネチャはPydanticによって強制されます。

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

text に対して完全なヒューマナイズパイプラインを実行します。intensity は [0, 1] の範囲で、研究資料にある最小/バランス/積極的なレバーに対応します。

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

書き換えを行わずにAIの兆候を特定します。行番号、文字オフセット、重大度(research/02_ai_tells_catalog.md に一致する1〜5つ星)、および置換の提案を返します。

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

1つ以上のローカル検出器を実行し、検出器ごとの確率と集計結果を返します。判定は "human"、"uncertain"、"ai"、"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

純粋なレジスター変換であり、ヒューマナイズは行いません。AIの兆候に触れずに学術調からブログ調へ、あるいは形式的な調子からカジュアルな調子へ変更したい場合に便利です。

list_styles() -> list[str]

styles/ に現在登録されているスタイルプリセットを列挙します。

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

ヒューマナイズ、スコアリングを行い、スコアがターゲットより高い場合は強度を上げて再ヒューマナイズします。ターゲットに達するか max_iterations に達するまで繰り返します。最終的なテキストと、前後スコア、反復ごとのログを返します。

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

スタイルプリセット

styles/ で定義されています。プロジェクトの成熟に伴いセットは進化します。最新リストは list_styles() を呼び出してください。MVPには以下が含まれます:

プリセット

用途

備考

default

汎用的な書き換え

バランスの取れた強度、控えめな声の保持

casual

個人のメール、SNS投稿

形式を排除し、バースト性を高める

blog

長文の個人的な執筆

段落のリズムを維持

academic

学会論文、学位論文

談話標識を保持し、delve クラスターを削除

esl

L2英語の書き手

より単純な構文を保持し、検出器にフラグを立てられる表面的な兆候を削除

neurodivergent

自閉症 / NDの書き手

繰り返される句構造を保持し、語彙の多様性を低く保つ

preserve

「自分の声を変更しない」

表面的な兆候のみを修正、言い換えパスはなし

プリセットのスキーマと独自のプリセットを追加する方法は docs/ARCHITECTURE.md に記載されています。


アーキテクチャ

+------------------------+
|   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            |
+----------------------------+

完全なアーキテクチャと拡張ポイント: docs/ARCHITECTURE.md。


ベンチマーク

ベンチマークハーネスは benchmark/ にあり、現在構築中です。以下の見出しの数値はプレースホルダーであり、ベンチマークエンジニアがRAIDテストセットから測定された値に置き換えます。

検出器

ヒューマナイズ前 (平均 P(AI))

ヒューマナイズ後 (平均 P(AI))

削減率

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

ローカルでの再現:

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

倫理的な利用

本ツールは、正当なアクセシビリティおよび公平性の利用のために構築され、文書化されています:

  • 自身の文章が誤分類されている神経多様性のある書き手。

  • 自身のコホートで21〜61%の誤検知率が独立して測定されているツールによって、学術的な提出物がフラグ立てされているESLの書き手。

  • 形式的な学問分野の文章が、所属機関のワークフローに導入されるべきではない脆弱な検出器に引っかかっている研究者。

  • 検出器主導のプラットフォーム排除から逃れようとしているジャーナリストやエッセイスト。

本ツールは以下を目的として構築されておらず、メンテナーはこれらを支援しません:

  • オリジナルの著作権を必要とする採点対象の学術課題において、LLMが生成した作品を自分の文章として提出すること。

  • 大規模な偽情報、スパム、または欺くことを目的としたコンテンツの生成。

  • 安全性が重要な文脈(医療アドバイス、法的書類、セキュリティ関連の開示)で検出器を回避すること。

技術的なパイプラインは両方の集団を同一にサポートします。これは避けられないことであり、Tor、Signal、およびこれまで存在したすべての言い換えツールが採用しているのと同じ倫理的姿勢です。完全な声明は docs/ETHICS.md をお読みください。

私たちは、ホモグリフ攻撃、クローズドモデルの透かし除去、ゼロ幅文字の挿入、またはスクリーンリーダーなどのアクセシビリティツールを破壊するような技術は提供しません。それらはヒューマナイズではなく、エクスプロイト(悪用)です。


引用

HumanizeMCPを研究で使用する場合は、資料とプロジェクトを引用してください:

@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}
}

research/ にある研究資料自体が引用可能な文書であり、このプロジェクトが構築されている査読済み研究の全参考文献が含まれています。


ライセンス

MIT。 LICENSE を参照してください。


謝辞

Kit Olivas (@kitfoxs) および Ada Marie によって構築されました。

研究資料は、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. (vocabulary shift study, 2024)、Juzek & Ward (focal-word analysis, 2024) などの研究に基づいています。完全な引用は research/references.bib にあります。

誤検知による被害を公表し、このプロジェクトの動機付けとなった書き手、学生、研究者の皆様に特別な感謝を捧げます。

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