HumanizeMCP
HumanizeMCP
MCP-сервер (Model Context Protocol) с открытым исходным кодом, который переписывает текст, созданный ИИ, под стиль человеческого письма, с первоклассной поддержкой авторов, которых детекторы ошибочно помечают как ИИ.
Почему это существует
Исследователи из Стэнфорда протестировали семь основных детекторов ИИ на эссе TOEFL, написанных людьми, для которых английский не является родным, и 61,3% из них были классифицированы как созданные ИИ. Эссе американских восьмиклассников, написанные в том же стиле, были классифицированы верно. Этот единственный результат, опубликованный в Patterns (Cell Press, 2023), является причиной существования данного проекта.
Та же статистическая сигнатура, которую детекторы называют «ИИ», также характерна для:
Нейродивергентных авторов, особенно аутичных взрослых, чья проза тяготеет к меньшему лексическому разнообразию, более конкретной лексике и повторяющимся фразовым структурам.
Авторов, изучающих английский как второй язык (ESL), чья грамматика, основанная на учебниках, читается как неестественно правильная.
Ученых в формальных дисциплинах, чей регистр по определению единообразен и насыщен дискурсивными маркерами.
Исследование Springer 2026 года измерило реальный уровень ложноположительных срабатываний Originality.ai на академических текстах — он составил 14%, что на порядок выше заявленного компанией уровня. Независимое тестирование ZeroGPT в 2026 году показало 26,4% ложных срабатываний на студенческих эссе и более 21% на текстах авторов ESL.
Эти детекторы используются в академических, рабочих, издательских и визовых процессах. 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) весит около 500 МБ.
Регистрация в вашем 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, разбивает длинные тире, варьирует длину предложений и (если используется humanize_and_verify) подтверждает с помощью локального детектора, что текст оценивается ниже запрошенного порога ИИ.
Справочник инструментов
Все инструменты доступны через 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
Поиск признаков ИИ без переписывания. Возвращает номера строк, смещения символов, уровень серьезности (1-5 звезд в соответствии с research/02_ai_tells_catalog.md) и предложения по замене.
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
Запуск одного или нескольких локальных детекторов и возврат вероятностей для каждого из них плюс совокупный результат. Вердикт может быть одним из: "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
Чистый перевод регистра, без очеловечивания. Полезно, когда нужно превратить академический стиль в блог или формальный в разговорный, не затрагивая признаки ИИ.
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 включены:
Пресет | Предназначение | Примечания |
| Универсальное переписывание | Сбалансированная интенсивность, консервативное сохранение голоса |
| Личная переписка, соцсети | Убирает формальность, повышает вариативность |
| Длинные личные тексты | Сохраняет ритм абзацев |
| Конференции, диссертации | Сохраняет дискурсивные маркеры, убирает кластер |
| Авторы, изучающие английский | Сохраняет простую синтаксическую структуру, удаляет признаки ИИ |
| Аутичные / НД авторы | Сохраняет повторяющиеся фразовые структуры, низкое лексическое разнообразие |
| "Не менять мой голос" | Только поверхностные признаки, без парафраза |
Схема пресетов и способы добавления своих описаны в 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Этичное использование
Этот инструмент создан и задокументирован для законного использования в целях обеспечения доступности и равенства:
Нейродивергентный автор, чьи тексты ошибочно классифицируются.
Автор ESL, чья академическая работа помечается инструментом, имеющим уровень ложноположительных срабатываний 21-61% для их группы.
Ученый, чья проза в формальной дисциплине вызывает срабатывание хрупкого детектора, который не должен был использоваться в рабочем процессе их учреждения.
Журналист или эссеист, пытающийся избежать деплатформинга из-за детекторов.
Этот инструмент не создан для следующего, и разработчики не будут помогать в этом:
Выдача работы, созданной 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. (исследование лексического сдвига, 2024), Juzek & Ward (анализ фокусных слов, 2024) и многих других. Полные цитаты в research/references.bib.
Особая благодарность авторам, студентам и ученым, чьи опубликованные свидетельства о вреде ложноположительных срабатываний мотивировали эту работу.
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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
apply_style - First observed
detect_tells - First observed
humanize - First observed
humanize_and_verify - First observed
list_styles - First observed
score_humanity
TDQS
Scored across 6 tools
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
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.19 npm2MIT
- FlicenseNot gradedqualityDmaintenanceA local-first MCP server that builds compact voice profiles from writing samples, then compares, rewrites, or generates new text in that voice.-