Skip to main content
Glama
Vladimir-Human

humanizer-ru

humanizer-ru

Проверяемая гигиена вставки из чата для русского текста

40 regex-маркеров артефактов вставки из чат-интерфейсов, у 38 из них полная запись доказательств. Ложных срабатываний класса A на 12314 текстах-неносителях ноль, класса B — 8, то есть 0.00065 (Wilson 95% CI от 0.0003 до 0.0013; замер 04.09.2026 по замороженной предрегистрации). Каждое число с датой и командой воспроизведения — в разделе «Цифры проекта».

Очистка артефактов вставки и сверка фактов доступны и для английского текста: добавьте --language en к humanizer-clean, humanizer-polish, humanizer-facts или humanizer-report (либо --language auto). Это не включает русские стилевые эвристики и не даёт вердиктов об авторстве; профиль сохраняет код, URL, Markdown и проверяемые факты. Русский профиль остаётся значением по умолчанию для совместимости.

Терминал humanizer-markers подсвечивает следы машинного текста и объясняет причину каждого флага

License: MIT PyPI CI

Кому это нужно

  • Редактору и преподавателю: проверить текст перед публикацией: humanizer-markers --scan файл.md.

  • Разработчику и CI: гейт вставки из чат-интерфейсов: action и контракт.

  • Пользователю ИИ-ассистента: та же проверка внутри агентной среды: MCP одной конфигурацией или демо.

Related MCP server: mcp-ai-slop-checker

Попробовать за 30 секунд

  • Демо в браузере: ничего не устанавливать, текст не покидает браузер.

  • Сообщить о проблеме или опыте использования: issue в репозитории; пользовательский текст не передаётся автоматически ни демо, ни сборщиком обратной связи.

  • Проверка конкретной вставки:

Самый короткий путь «нашёл → убрал → проверил»:

pip install humanizer-ru
humanizer-markers --scan input.txt       # найти следы (rc=1 = находка)
humanizer-clean --in-place input.txt     # снять поддержанные артефакты
humanizer-markers --scan input.txt       # убедиться, что остатка нет (rc=0)

Для английского входа добавьте --language en; для смешанного — --language auto. Очистка не переписывает стиль и смысл: проверьте результат вручную и используйте humanizer-facts diff до.txt после.txt --no-additions после редакторской правки.

python -c "open('primer.txt','w',encoding='utf-8').write('Согласно отчёту :contentReference[oaicite:3]{index=3}, рост заявок.\n')"
humanizer-markers --scan primer.txt; echo "rc=$?"
  primer.txt:1 [contentReference] Согласно отчёту :contentReference[oaicite:3]{index=3}, рост заявок.
  Найдено маркеров: 1.
  rc=1

rc=1 означает «найдены маркеры» — это ожидаемый результат проверки на образце со следом вставки, а не ошибка; rc=0 — следов нет, rc=2 — вход не читается (с --json конверт ошибки печатается в stdout).

Полный сценарий: найти, безопасно очистить, сверить, сообщить

  1. Найти артефакт вставки. humanizer-markers --scan файл.md печатает находки с координатами и классом: A — жёсткие артефакты копипасты из чат-интерфейсов, B — контекстные индикаторы вроде невидимых символов и скрытой раскладки; rc=1 означает находки. Демо-страница делает то же в браузере без установки и подсвечивает исходные диапазоны. Мягкие признаки машинного письма считает humanizer-scan: они калибруют объём правки и не дают вердикта.

  2. Безопасно очистить. humanizer-clean --in-place файл.md одной командой выполняет проверку до, снятие поддерживаемых артефактов, проверку после и сверку фактов; оригинал остаётся в копии .bak. Снимаются невидимые метки слоя A и видимые артефакты класса A вне защищённых областей (код, frontmatter, URL, HTML-атрибуты, ZWJ-кластеры эмодзи). Стиль и смысл не переписываются; неподдерживаемые находки вроде класса B, вики-разметки и плейсхолдеров остаются явным остатком с кодом возврата 1, полная чистота не заявляется. При нарушении инвариантов защищённых областей результат не записывается. Невидимые символы снимаются и точечно, по классам риска из поля invisible_classes файла markers.v1.json: humanizer-markers --remove файл.md убирает safe автоматически, ambiguous — только с явным флагом --include-ambiguous, dangerous показывает и не снимает. Типографику без правки смысла нормализует humanizer-polish; на разметке используйте режимы --preserve-markup и --typographic.

  3. Проверить диф. humanizer-clean --diff файл.md печатает унифицированный диф до и после без записи; конверт --json несёт сверку фактов и перечень остатка. После ручной правки сверьте факты отдельно: humanizer-facts diff до.txt после.txt --no-additions сравнит числа, даты, URL, имена, цитаты, отрицания и модальности; поля lost и changed обязаны быть пустыми, иначе верните факты в текст.

  4. Сообщить результат. humanizer-report до.txt после.txt готовит отчёт о правке со сверкой фактов. Находку коллеге передаёт humanizer-markers --scan --json файл.md: пересылайте поля file, line, marker, class и fragment, а не весь документ. Находка класса A устанавливает факт вставки, а не автора: помечайте источник, на который указывал артефакт, как «требует проверки». Вердиктов об авторстве нет ни у инструментов, ни у скилла — это Главное правило SKILL.md.

Сценарий одним блоком:

humanizer-markers --scan вставка.md              # 1: найти; rc=1 = находки есть
humanizer-clean --diff вставка.md                # 2: показать, что будет снято
humanizer-clean --in-place вставка.md            # 2: очистить; оригинал в .bak
humanizer-facts diff вставка.md.bak вставка.md --no-additions  # 3: сверить факты
humanizer-report вставка.md.bak вставка.md       # 4: отчёт о правке

Подробности команд и режимов — в docs/USAGE.md.

MCP одной конфигурацией

{
  "mcpServers": {
    "humanizer-ru": {
      "command": "uvx",
      "args": ["--from", "humanizer-ru==3.36.4", "humanizer-mcp"]
    }
  }
}

Форма uvx устанавливает закреплённый выпуск PyPI и запускает stdio-сервер. При локальной установке эквивалентны pip install humanizer-ru и запуск humanizer-mcp.

Матрица проверенных возможностей и границ

Без заявлений о лидерстве: сопоставимого внешнего исследования в нише на дату записи нет (см. LEADERBOARD.md). Строки — что фактически проверено гейтами и тестами цикла; границы — что поверхность не делает.

Поверхность

Проверка известных артефактов

Безопасная очистка

Сверка фактов

Машинный конверт

Граница

CLI (humanizer-markers, -polish, -facts, -report)

да, с координатами и классами A/B

режимы strip / --preserve-markup / --typographic с инвариантами сохранения

humanizer-facts (категории фактов)

--json, коды возврата по контракту

семантику не проверяет; вердиктов об авторстве нет

MCP (humanizer-mcp, набор инструментов contract.v1.json)

те же команды через stdio

те же режимы через humanizer_polish

humanizer_facts

JSON-RPC конверты, isError по контракту

текст не покидает процесс

Демо на Pages

да, подсветка исходных диапазонов в браузере

да, preview + явное Apply + Undo для поддержанных артефактов

нет

копирование отчёта из одного результата

офлайн в браузере, без установки

GitHub Action

гейт вставки + автофикс текстового пути (класс A)

action_fix вне fenced/кода

нет

rc гейта

фикс не трогает защищённые области

Текстовый скилл (SKILL.md)

процедуры агента по references

стилевая правка только по явной просьбе

нет

нет (проза скилла)

гарантий естественности и сохранности смысла нет

Что это НЕ делает

  • Переписанный текст: теоретический потолок детекции при парафразе [bib:sadasivan2023]; парафраз обнуляет детекторы [bib:dipper2023].

  • Нативно-гладкий машинный текст без артефактов: документная граница там же [bib:sadasivan2023]; популяционная детекция возможна только на больших выборках [bib:chakraborty2023], вердикт по документу не заявляется.

  • Короткий текст: сигналов меньше, чем слов, водяной знак и статистика требуют длины [bib:anthropic2026wm], [bib:synthid2024].

  • Водяные знаки без ключа: distortion-free знак не виден стороннему наблюдателю по построению [bib:kuditipudi2023]; криптографическая неотличимость без ключа [bib:cgz2023]; детектор SynthID-Text требует ключ разработчика [bib:synthid2024]; Anthropic подтверждает: без ключа знак не проверяется, детектор-API в закрытом preview [bib:anthropic2026wm].

  • Ключи [bib:…] раскрыты в research/BIBLIOGRAPHY.md.

  • polish не запускать на Markdown и разметке: снимает ##, **, ёлочки, тире; для разметки — режим --preserve-markup.

Почему можно доверять

Установка скилла в браузерные клиенты

  • Демо работает без установки: https://vladimir-human.github.io/humanizer-ru/ — текст не покидает браузер.

  • Claude.ai и Claude Code: добавьте скилл из каталога dsh/skills/humanizer-ru по инструкции установки в docs/USAGE.md.

  • Агентные клиенты с поддержкой agentskills.io (opencode, DeepSeek Harness): распакуйте текстовый бандл из архива релиза.

  • Браузерное расширение отклонено: новый поверхностный контур (permissions, store review) не окупается; очередь идей — research/BACKLOG.md.

Каталоги: Glama MCP · skills.sh.

Одноимённые проекты

На GitHub есть скиллы с тем же именем и другим содержанием. Снимок 2026-09-11 (проверка: gh repo view <владелец>/humanizer-ru --json stargazerCount):

  • ilyautov/humanizer-ru — 333 звезды: позиционирование «убирает признаки нейросети», публичного реестра чисел нет; приглашён к совместному публичному бенчмарку (issue 220).

  • smixs/humanizer-ru — 154 звезды: детерминированный линтер; единственный тёзка, включённый в LEADERBOARD.md как кандидат (парный прогон 2026-09-03).

  • Этот проект — проверяемая гигиена вставки из чат-интерфейсов: каждое число из детерминированных снимков и реестра фактов, границы — в THREAT-MODEL, ложные срабатывания — в бенчмарке.

Пришли по имени — выбирайте по способу проверки, а не по звёздам.

Цифры проекта

  • 58 паттернов машинного письма и 40 regex-маркеров (классы A и B).

  • Записи доказательств: 38 из 40 маркеров (реестр research/fixtures/marker-sources.json).

  • Гейты: 156 гейтов полного check_all (145 в --quick); фикстуры в tests/fixtures/, документация сверяется check_docs.py, персона описана в PERSONA.md.

Почему так называется: имя унаследовано от первой функции, снимавшей слой копипасты после чат-бота и возвращавшей тексту человеческий вид. Вторая функция продукта: диагностика, подсветить машинные следы и объяснить причину каждого флага, без вердиктов об авторстве. Обе функции работают офлайн, текст не покидает вашу машину.

Классовая разбивка FP, exploratory, вне предрега F16: класс A: 0 случаев на 12314 текстов-неносителей; класс B: 8 случаев на 12314, то есть 0.00065, Wilson 95% CI от 0.0003 до 0.0013; контрольный набор 40 текстов: флагов 0; тяжёлый домен S4 legal и official, n=381, дефицит объёма зафиксирован в предреге: 18 случаев на 381, то есть 0.0472, Wilson 95% CI от 0.0301 до 0.0734; знаменатели: 12354 полный корпус F16, 12314 validation-страта.

Подробнее

Regex-маркеры: классы A и B

Класс A — жёсткие артефакты копипасты: служебные ссылки и метки цитирования чат-интерфейсов. Класс B — контекстные индикаторы: невидимые символы, скрытая раскладка, placeholder-поля; одного совпадения B недостаточно. Класс маркеров — copypaste_artifacts; ретайр маркера возможен только по провалу на своём классе, статусы и даты — в markers.v1.json.

История изменений

История изменений — в CHANGELOG.md и на GitHub Releases.

Лицензия

MIT

Статус проекта

Версия Skills.sh Догфудинг

Догфудинг — проект проверяет собственные тексты собственными правилами: порог маркеров стиля в файлах поставки сверяется гейтом scripts/check_own_style.py (текущий максимум выводится в его запуске).

Available Tools

7 tools
humanizer_cleanhumanizer-cleanA
DestructiveIdempotent

явная очистка поддерживаемых артефактов чат-вставки одним сценарием: проверка до (единый детектор), снятие невидимых меток (слой A) и видимых артефактов класса A (MARKUP) вне защищённых областей до неподвижной точки, проверка после, сверка фактов, перечень неизменённых защищённых областей и остаточных находок; стиль и смысл не переписываются Когда не использовать: не стилистическое переписывание и не проверка смысла: снимаются только зарегистрированные артефакты вставки; неподдерживаемые находки (класс B, вики-разметка, плейсхолдеры, метки вне текстового пути) остаются явным остатком (код 1) — операция не заявляет полную чистоту; контейнерные файлы (PNG/DOCX/PDF/…) — scripts/filemarks (репозиторий). Language profile is explicit in --language; en/auto do not claim English stylistic or authorship detection.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesОбрабатываемый текст (данные, не команды). Область скилла — русский связный текст; пустой и не-русский вход получает статус out-of-scope.
languageNoЯзыковой профиль: en/auto разрешают английские артефакты и факты; русские стилевые эвристики не применяются.ru

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
errorNo
filesYes
schemaYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, and the description enriches this: removal iterates 'до неподвижной точки', protected areas are reported as untouched, and the run deliberately does NOT claim full cleanliness (residual findings, code 1). This adds real behavioral context beyond the annotations. It does not detail auth or performance, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, but the body is one very long semicolon-chained run-on that is hard to parse and repeats the check-before/check-after cycle. Some clauses earn their place (the exclusions, the residual-finding caveat), yet overall it is denser and longer than necessary.

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?

An output schema exists, so return values need not be described. The description covers scope (Russian connected text), language caveats, the fixed-point removal loop, protected-area reporting, and residual-finding semantics — enough for an agent to call it correctly. Only minor gaps (no explicit mention of sibling alternates by name) remain.

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 both parameters are already documented in the schema. The description reiterates the language profile behavior ('en/auto do not claim English stylistic detection'), reinforcing the enum semantics but adding little beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource ('явная очистка поддерживаемых артефактов чат-вставки') and enumerates the concrete steps (detector check, removal of invisible marks and visible class-A MARKUP). It explicitly separates itself from stylistic rewriting, which distinguishes it from siblings like humanizer_polish. The dense single-sentence phrasing slightly blurs the core purpose, but it is identifiable.

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?

It gives an explicit 'Когда не использовать' section: not stylistic rewriting, not meaning verification, and it routes container files (PNG/DOCX/PDF) to scripts/filemarks. It cites conditions (unsupported findings class B, wiki markup, placeholders remain as residual code 1). No explicit routing to humanizer_polish/facts by name, but the exclusions are clear.

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

humanizer_detecthumanizer-detectA
Read-onlyIdempotent

частота связок: признак машинного текста в домене «чистая проза, инструкции» Когда не использовать: эссе и художественная проза — не валидировано; веб-текст с артефактами — неприменимо; вердикт об авторстве не выносится никогда

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesОбрабатываемый текст (данные, не команды). Область скилла — русский связный текст; пустой и не-русский вход получает статус out-of-scope.
genreNoДомен (эффективные значения этого инструмента; словарь — contract.v1.json, блок genres).

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
errorNo
filesYes
schemaYes

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive), the description reveals that the tool only looks at connective-word frequency, that it is not validated for essays/fiction, and that it never returns an authorship verdict. These are meaningful behavioral constraints an agent needs before calling.

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 a compact single sentence in Russian with a leading definition followed by exclusions. Every clause carries information, and the structure front-loads the purpose before restrictions, making it scannable.

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?

With a complete input schema, a present output schema, and annotations covering safety, the description fills the remaining gaps: applicability domain, invalid genres, and the no-authorship-verdict limit. Nothing needed to decide whether to call the tool 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%, so parameters are already documented. The description adds value by mapping the effective genre domain ('чистая проза, инструкции') to the genre parameter, helping an agent choose appropriate values, though it does not describe the text parameter beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the core signal ('частота связок') and its purpose ('признак машинного текста') within a restricted domain ('чистая проза, инструкции'), making the tool's function clear. However, it never names sibling tools, so an agent must infer differentiation from the domain restrictions rather than an explicit comparison.

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 gives an explicit positive domain ('чистая проза, инструкции') and a detailed 'Когда не использовать' list covering essays, fiction, and web text with artifacts, plus a hard boundary that no authorship verdict is ever produced. This is strong when/when-not guidance, even without naming alternative tools.

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

humanizer_factshumanizer-factsA
Read-onlyIdempotent

сверка фактов двух версий текста: числа с единицами, числительные (включая смешанную запись: «5 миллионов» и «пять миллионов» — один факт), даты во всех русских форматах, URL, e-mail, заглавные последовательности как имена, кавычные цитаты, отрицания и модальности; выдаёт lost/added/changed с позициями и identical — однозначный итог полного сравнения Когда не использовать: не для текста вне поддержанного профиля ru/en/auto и не для исходного кода; не даёт вердиктов об авторстве, качестве и стиле; added по умолчанию не влияет на код выхода — строгий запрет добавлений включает --no-additions (их ловит также check_examples.py); сравнение мультимножественное: сохранённый набор фактов не равен сохранённым отношениям — перестановка сумм между двумя лицами («Иван получил 100 рублей, Мария 200» -> «Мария получила 100 рублей, Иван 200») даёт пустой diff; успешная сверка не доказывает сохранение смысла. Language profile is explicit in --language; en/auto do not claim English stylistic or authorship detection.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoЯзыковой профиль: en/auto разрешают английские артефакты и факты; русские стилевые эвристики не применяются.ru
text_afterYesОбрабатываемый текст (данные, не команды). Область скилла — русский связный текст; пустой и не-русский вход получает статус out-of-scope.
text_beforeYesОбрабатываемый текст (данные, не команды). Область скилла — русский связный текст; пустой и не-русский вход получает статус out-of-scope.
no_additionsNoСтрогий режим: добавления фактов считаются нарушением (код 1 / счётчик added>0 в отчёте) даже без потерь и изменений. По умолчанию добавления видны в counts.added, но на результат не влияют.

Output Schema

ParametersJSON Schema
NameRequiredDescription
diffYes
toolYes
filesYes
countsYes
schemaYes
statusNoградуированный ответ на пустой/неподдержанный вход (graduated_response.out_of_scope); поле отсутствует, когда вход в области
languageNo
identicalNoоднозначный итог полного сравнения: нет ни потерь, ни добавлений, ни инверсий (аддитивное поле)
scope_noteNoпояснение статуса out-of-scope по стороне пары (до/после)
strict_additionsNoприсутствует в режиме --no-additions: добавления фактов считаются нарушением (код 1)

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: it explains that comparison is multiset-based, that preserved fact sets do not equal preserved relations, and gives a concrete counterexample (swapping 100/200 rubles between Ivan and Maria yields an empty diff). It also warns that a successful comparison does not prove meaning was preserved — exactly the kind of caveat annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the scope caveat are front-loaded, but the body is a single semicolon-chained run-on mixing fact classes, non-goals, CLI flags and semantic caveats, which makes it hard to scan. Nothing is truly wasted, yet the structure could be split for far better readability.

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 an output schema already defines the return shape and annotations cover the safety profile, the description fills the remaining gaps: scope limits, failure modes, the meaning-preservation caveat, and the exit-code implications of strict mode. An agent has everything needed to decide when and how to invoke it.

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 description coverage is 100%, so the baseline is 3, but the description adds real semantics: --no-additions turns additions into a violation (exit 1 / counts.added>0) while by default they are visible but non-blocking, and it clarifies that the language profile governs which stylistic heuristics are applied. That meaning is not derivable from the enum alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('сверка фактов двух версий текста') and enumerates exactly which fact classes are compared (numbers with units, numerals, dates, URLs, e-mail, capitalized sequences, quotes, negations/modalities) plus the output shape (lost/added/changed with positions, identical). It implicitly separates itself from humanizer_detect/humanizer_report by disclaiming authorship, quality and style verdicts, though it never names those siblings directly.

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 provides a 'Когда не использовать' block: not for text outside the ru/en/auto profile, not for source code, no authorship/quality/style verdicts. It also documents the --no-additions strict-mode alternative and notes that additions do not affect the exit code by default, giving the agent clear routing and mode-selection criteria.

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

humanizer_markershumanizer-markersA
Read-onlyIdempotent

артефакты копипасты и чат-интерфейсов: 40 маркеров классов A и B; находит и показывает; --remove снимает невидимые метки текстового слоя по классификации риска (safe автоматически, ambiguous только opt-in, dangerous никогда) Когда не использовать: не детектор генерации: отсутствие маркеров не доказывает авторство человека; контейнерные файлы (PNG/DOCX/PDF/…) — scripts/filemarks (репозиторий); текстовый слой снятия входит в пакет (text_layer) Через MCP схема инструмента принимает только параметры text и marker_class: режим --remove (снятие невидимых меток) по MCP не вызывается — это консольная команда humanizer-markers --remove; явная очистка поддерживаемых артефактов вставки доступна инструментом humanizer_clean.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesОбрабатываемый текст (данные, не команды). Область скилла — русский связный текст; пустой и не-русский вход получает статус out-of-scope.
marker_classNoКлассы маркеров: all — все, a — только класс A.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
errorNo
filesYes
schemaYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety bar is lower. The description adds valuable boundary context: the --remove (marker-stripping) mode exists but is console-only and 'по MCP не вызывается' (not invoked via MCP), and the MCP schema intentionally accepts only text and marker_class. This prevents an agent from assuming it can modify text through this tool. No contradiction with annotations; the description reinforces the read-only MCP surface.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every clause carries information with no filler, and the core purpose is front-loaded. However, the content is packed into a single dense paragraph where topics (purpose, --remove mode, risk classification, exclusions, MCP restriction) flow together via semicolons and em-dashes, making it harder to scan than it should be for an agent parsing the description.

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 moderately complex tool that already has an output schema and rich annotations, the description covers purpose, scope (Russian coherent text, out-of-scope handling in the schema), exclusions, alternatives, and the MCP/console boundary. Minor gaps remain — full semantics of class A vs B markers and how to interpret findings are only partially explained — but return values are covered by the output schema.

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% and both parameters are well described. The description adds meaning beyond the schema by naming the two marker classes (A and B), which explains why the enum only offers 'a' (class A only) versus 'all' — implicitly there is no 'b'-only option. It also states that MCP accepts only these two parameters, clarifying the boundary between the tool and the console command.

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 states a specific action and resource: it 'находит и показывает' (finds and shows) '40 маркеров классов A и B' (40 markers of classes A and B) in 'артефакты копипасты и чат-интерфейсов' (copypaste and chat-interface artifacts). It also distinguishes itself from siblings by explicitly declaring 'не детектор генерации' (not a generation detector) and routing cleaning use-cases to humanizer_clean.

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?

Provides an explicit 'Когда не использовать' (when not to use) section with concrete exclusions: it is not a generation detector (absence of markers does not prove human authorship) and container files (PNG/DOCX/PDF) belong to scripts/filemarks. It also routes explicit artifact cleaning to the humanizer_clean sibling tool. This is actionable routing guidance, not just a purpose statement.

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

humanizer_polishhumanizer-polishA
DestructiveIdempotent

типографическая нормализация: тире, кавычки, многоточие, невидимые символы, маркеры разметки, переносы строк к LF Когда не использовать: не запускать на Markdown и разметке дефолтным режимом: снимает ##, **, ёлочки, тире, многоточие — для разметки режимы --preserve-markup и --typographic; когда нужна правка лексики или смысла — полировка слов не трогает. Language profile is explicit in --language; en/auto do not claim English stylistic or authorship detection.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNostrip — снять машинный слой типографики (destructive для Markdown; граница — в when_not); preserve-markup — только невидимые символы и NBSP; typographic — русская публикационная типографика без снятия разметки.
textYesОбрабатываемый текст (данные, не команды). Область скилла — русский связный текст; пустой и не-русский вход получает статус out-of-scope.
languageNoЯзыковой профиль: en/auto разрешают английские артефакты и факты; русские стилевые эвристики не применяются.ru

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
errorNo
filesYes
schemaYes

TDQS

A4/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and idempotentHint=true. The description adds crucial context that the default mode is destructive for Markdown and specifies boundaries (strip removes ##, **, ёлочки, тире, многоточие). Doesn't restate everything, so a 4. With annotations covering safety, this is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the what, then when-not, but is dense and mixes English and Russian, with limited spacing. It contains useful info but is not optimally structured for an agent to parse quickly.

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 3-param tool with 100% schema coverage, an output schema, and annotations, the description covers purpose, boundaries, and non-goals. It could mention sibling tools more directly, but is largely complete.

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 parameters are fully documented. Description adds only marginal detail about language profile. Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific operation on a specific resource: typographic normalization (dashes, quotes, ellipses, invisible chars, markup markers, LF). Concrete and nouny. It doesn't distinguish itself from siblings like humanizer_clean or humanizer_markers, so it falls short of a 5.

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 names when NOT to use it (Markdown/default mode) and names the alternatives (--preserve-markup, --typographic). Also states that it does not touch lexicon or meaning, and that en/auto do not do English style/authorship. Clear when/alternatives.

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

humanizer_reporthumanizer-reportA
Read-onlyIdempotent

машиночитаемый отчёт правки: токены keep/add/delete, адаптированные компоненты SARI, классы правок, сверка фактов авторских категорий (lost/changed/added, unchanged и identical — полный итог), MTLD до и после Когда не использовать: не для текста вне поддержанного профиля ru/en/auto и не для исходного кода; не даёт вердиктов об авторстве, качестве и стиле; added не влияет на код выхода (их ловит check_examples.py); facts.unchanged не учитывает добавления — полный итог сравнения даёт facts.identical. Language profile is explicit in --language; en/auto do not claim English stylistic or authorship detection.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoЯзыковой профиль: en/auto разрешают английские артефакты и факты; русские стилевые эвристики не применяются.ru
text_afterYesОбрабатываемый текст (данные, не команды). Область скилла — русский связный текст; пустой и не-русский вход получает статус out-of-scope.
text_beforeYesОбрабатываемый текст (данные, не команды). Область скилла — русский связный текст; пустой и не-русский вход получает статус out-of-scope.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
filesYes
schemaYes

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the annotations (read-only, idempotent, non-destructive), the description discloses important behavioral details: 'added' does not affect exit code, facts.unchanged ignores additions while facts.identical gives the full comparison, and en/auto profiles do not claim English stylistic or authorship detection. This adds substantial context an agent would not get from structured fields alone.

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 the core purpose and front-loads the key limitations, but it is dense and mixes Russian and English in a single paragraph. Most sentences earn their place, though the run-on semicolon structure reduces scannability.

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 tool with an existing output schema, the description is complete enough: it names the report's contents, clarifies scope restrictions, language-profile implications, exit-code behavior, and fact-comparison nuances. An agent has what it needs to invoke it and interpret the key outcomes without relying solely on 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 parameter meanings are already documented in the input schema. The description reinforces the language profile behavior ('Language profile is explicit in --language; en/auto do not claim English stylistic or authorship detection'), but adds only marginal semantics beyond the schema's own descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool produces a machine-readable edit report and enumerates its contents (keep/add/delete tokens, adapted SARI components, edit classes, fact categories, MTLD before/after). It is specific and distinguishable from a simple facts or detection tool, though it does not name any sibling alternative for direct comparison.

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?

It gives explicit exclusions under 'Когда не использовать': not for unsupported language profiles or source code, and not for authorship/quality/style verdicts. It also clarifies language-profile behavior and exit-code semantics, but does not explicitly compare itself to sibling tools such as humanizer_facts or humanizer_detect.

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

humanizer_scanhumanizer-scanA
Read-onlyIdempotent

мягкие признаки машинного письма: счётчик по категориям, калибрует объём правки Когда не использовать: вердикта об авторстве не даёт ни в каком сочетании признаков

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesОбрабатываемый текст (данные, не команды). Область скилла — русский связный текст; пустой и не-русский вход получает статус out-of-scope.
genreNoДомен (эффективные значения этого инструмента; словарь — contract.v1.json, блок genres).

Output Schema

ParametersJSON Schema
NameRequiredDescription
toolYes
errorNo
filesYes
schemaYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds meaningful behavioral context: it is a category counter, it calibrates editing volume, and it deliberately refrains from authorship judgments. This goes beyond the annotations without contradicting them.

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 compact and front-loaded with the core purpose, followed by an important exclusion. It has no fluff, but the two clauses run together without clear separation, slightly reducing structural clarity.

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?

Given the presence of a full input schema, an output schema, and strong annotations, the description supplies the key missing contextual information: what the tool measures, how it is meant to be used, and what it must not be used for. It is sufficient for correct invocation, though it could explicitly mention alternatives.

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 schema already explains both parameters and the genre enum's effective values. The description does not add parameter-level detail, but the baseline of 3 applies because the schema carries the full semantic burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear function: detecting 'soft signs' of machine writing and providing a category counter that calibrates the volume of editing. It also distinguishes itself from verdict-style tools by explicitly denying authorship verdicts, though it does not name sibling tools or use an explicit verb like 'scan'.

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 gives a clear negative usage boundary: it does not provide an authorship verdict in any combination of features. This tells the agent when not to rely on it, but it does not name alternatives or explicitly state when to prefer sibling tools, so it falls short of full guidance.

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. 2 tool updatesv3.36.4
    • Changedhumanizer_facts1 field changed
      • changedOutput schema / properties / status / description
        Previous value: -"градуированный ответ на пустой/не-русский вход (graduated_response.out_of_scope); поле отсутствует, когда вход в области"New value: +"градуированный ответ на пустой/неподдержанный вход (graduated_response.out_of_scope); поле отсутствует, когда вход в области"
    • Changedhumanizer_report1 field changed
      • changedOutput schema / properties / files / items / properties / status / description
        Previous value: -"градуированный ответ на пустой/не-русский вход (graduated_response.out_of_scope); поле отсутствует, когда вход в области"New value: +"градуированный ответ на пустой/неподдержанный вход (graduated_response.out_of_scope); поле отсутствует, когда вход в области"
  2. 4 tool updatesv3.36.0
    • Changedhumanizer_clean2 fields changed
      • addedInput schema / properties / language
        Added value: +{
        +  "default": "ru",
        +  "description": "Языковой профиль: en/auto разрешают английские артефакты и факты; русские стилевые эвристики не применяются.",
        +  "enum": [
        +    "ru",
        +    "en",
        +    "auto"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / files / items / properties / language
        Added value: +{
        +  "enum": [
        +    "ru",
        +    "en",
        +    "auto"
        +  ],
        +  "type": "string"
        +}
    • Changedhumanizer_facts2 fields changed
      • addedInput schema / properties / language
        Added value: +{
        +  "default": "ru",
        +  "description": "Языковой профиль: en/auto разрешают английские артефакты и факты; русские стилевые эвристики не применяются.",
        +  "enum": [
        +    "ru",
        +    "en",
        +    "auto"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / language
        Added value: +{
        +  "enum": [
        +    "ru",
        +    "en",
        +    "auto"
        +  ],
        +  "type": "string"
        +}
    • Changedhumanizer_polish2 fields changed
      • addedInput schema / properties / language
        Added value: +{
        +  "default": "ru",
        +  "description": "Языковой профиль: en/auto разрешают английские артефакты и факты; русские стилевые эвристики не применяются.",
        +  "enum": [
        +    "ru",
        +    "en",
        +    "auto"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / files / items / properties / language
        Added value: +{
        +  "enum": [
        +    "ru",
        +    "en",
        +    "auto"
        +  ],
        +  "type": "string"
        +}
    • Changedhumanizer_report2 fields changed
      • addedInput schema / properties / language
        Added value: +{
        +  "default": "ru",
        +  "description": "Языковой профиль: en/auto разрешают английские артефакты и факты; русские стилевые эвристики не применяются.",
        +  "enum": [
        +    "ru",
        +    "en",
        +    "auto"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / files / items / properties / language
        Added value: +{
        +  "enum": [
        +    "ru",
        +    "en",
        +    "auto"
        +  ],
        +  "type": "string"
        +}
  3. 4 tool updatesv3.35.1
    • Addedhumanizer_clean
    • Changedhumanizer_facts5 fields changed
      • addedInput schema / properties / no_additions
        Added value: +{
        +  "description": "Строгий режим: добавления фактов считаются нарушением (код 1 / счётчик added>0 в отчёте) даже без потерь и изменений. По умолчанию добавления видны в counts.added, но на результат не влияют.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / identical
        Added value: +{
        +  "description": "однозначный итог полного сравнения: нет ни потерь, ни добавлений, ни инверсий (аддитивное поле)",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / scope_note
        Added value: +{
        +  "description": "пояснение статуса out-of-scope по стороне пары (до/после)",
        +  "type": "string"
        +}
      • addedOutput schema / properties / status
        Added value: +{
        +  "description": "градуированный ответ на пустой/не-русский вход (graduated_response.out_of_scope); поле отсутствует, когда вход в области",
        +  "enum": [
        +    "out-of-scope"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / strict_additions
        Added value: +{
        +  "description": "присутствует в режиме --no-additions: добавления фактов считаются нарушением (код 1)",
        +  "type": "boolean"
        +}
    • Changedhumanizer_markers2 fields changed
      • addedOutput schema / properties / files / items / properties / markers / items / properties / end
        Added value: +{
        +  "description": "конец совпадения (исключительно) в тех же координатах, что start",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / files / items / properties / markers / items / properties / start
        Added value: +{
        +  "description": "начало совпадения в кодовых точках внутри строки (NFC); для shadow:true — внутри теневой строки без невидимых символов",
        +  "type": "integer"
        +}
    • Changedhumanizer_report7 fields changed
      • removedOutput schema / properties / counts
        Removed value: -{
        -  "properties": {
        -    "added": {
        -      "type": "integer"
        -    },
        -    "changed": {
        -      "type": "integer"
        -    },
        -    "lost": {
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "lost",
        -    "added",
        -    "changed"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / diff
        Removed value: -{
        -  "properties": {
        -    "added": {
        -      "type": "array"
        -    },
        -    "changed": {
        -      "type": "array"
        -    },
        -    "lost": {
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "lost",
        -    "added",
        -    "changed"
        -  ],
        -  "type": "object"
        -}
      • addedOutput schema / properties / files / items / properties
        Added value: +{
        +  "after": {
        +    "type": "string"
        +  },
        +  "before": {
        +    "type": "string"
        +  },
        +  "edit_types": {
        +    "properties": {
        +      "casing": {
        +        "type": "integer"
        +      },
        +      "invisible": {
        +        "type": "integer"
        +      },
        +      "lexical": {
        +        "type": "integer"
        +      },
        +      "markup": {
        +        "type": "integer"
        +      },
        +      "punctuation": {
        +        "type": "integer"
        +      },
        +      "whitespace": {
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "facts": {
        +    "properties": {
        +      "added": {
        +        "description": "число добавленных фактов (аддитивное поле)",
        +        "type": "integer"
        +      },
        +      "changed": {
        +        "type": "integer"
        +      },
        +      "identical": {
        +        "description": "однозначный итог полного сравнения: нет ни потерь, ни добавлений, ни инверсий (аддитивное поле)",
        +        "type": "boolean"
        +      },
        +      "lost": {
        +        "type": "integer"
        +      },
        +      "unchanged": {
        +        "description": "нет потерь и изменений; добавления в это поле НЕ входят (семантика сохранена) — полный итог даёт identical",
        +        "type": "boolean"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "mtld": {
        +    "properties": {
        +      "after": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "before": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "sari_adapted": {
        +    "properties": {
        +      "add": {
        +        "type": "number"
        +      },
        +      "delete": {
        +        "type": "number"
        +      },
        +      "keep": {
        +        "type": "number"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "scope_note": {
        +    "description": "пояснение статуса out-of-scope по стороне пары (до/после)",
        +    "type": "string"
        +  },
        +  "status": {
        +    "description": "градуированный ответ на пустой/не-русский вход (graduated_response.out_of_scope); поле отсутствует, когда вход в области",
        +    "enum": [
        +      "out-of-scope"
        +    ],
        +    "type": "string"
        +  },
        +  "tokens": {
        +    "properties": {
        +      "add": {
        +        "type": "integer"
        +      },
        +      "delete": {
        +        "type": "integer"
        +      },
        +      "keep": {
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedOutput schema / properties / files / items / required
        Added value: +[
        +  "before",
        +  "after",
        +  "tokens",
        +  "sari_adapted",
        +  "edit_types",
        +  "facts",
        +  "mtld"
        +]
      • changedOutput schema / properties / files / items / type
        Previous value: -"string"New value: +"object"
      • changedOutput schema / properties / tool / enum
        Previous value: -[
        -  "humanizer-facts"
        -]New value: +[
        +  "humanizer-report"
        +]
      • changedOutput schema / required
        Previous value: -[
        -  "tool",
        -  "schema",
        -  "files",
        -  "counts",
        -  "diff"
        -]New value: +[
        +  "tool",
        +  "schema",
        +  "files"
        +]
  4. 6 tool updatesv0.1.0
    • First observedhumanizer_detect
    • First observedhumanizer_facts
    • First observedhumanizer_markers
    • First observedhumanizer_polish
    • First observedhumanizer_report
    • First observedhumanizer_scan

TDQS

A4.1/5.0

Scored across 7 tools

Disambiguation3/5

Tools have overlapping purposes: humanizer_clean, humanizer_markers, and humanizer_polish all deal with cleaning/normalizing text artifacts. Descriptions provide clarifications (e.g., clean for full cleanup, markers for detection of copy-paste marks, polish for typographic normalization), but the boundaries between them can still be confusing without careful reading.

Naming Consistency5/5

All tool names follow a consistent pattern: humanizer_ followed by a singular noun or verb (clean, facts, report, detect, markers, polish, scan). The prefix is uniform, and naming is predictable.

Tool Count5/5

7 tools is well within the typical 3-15 range and appears appropriate for the domain of text humanization/analysis, offering distinct functions like cleaning, fact-checking, reporting, detection, marker handling, polishing, and scanning.

Completeness4/5

The tool set covers key operations: cleaning, fact verification, reporting, detection, marker handling, typographic polishing, and scanning. However, there is no explicit tool for stylistic rewriting or authorship judgment (though these are intentionally excluded), and some functionality (e.g., marker removal) is only partially accessible via MCP. Minor gaps exist but core needs are met.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • 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.
    5 npm
    2
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Three deterministic MCP tools that score text for AI-writing tells (em-dash density, hedge words, tricolons, boilerplate openers) and grade landing-page copy. No LLM, no network calls, no API key — same input always yields the same score. Published on the official MCP registry as io.github.parweb/ai-slop-checker.
    3
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Zero-dependency stdio MCP server for token-aware prompt version diffs. Compare prompts or files and get machine-readable token delta reports with confidence labels.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Bilingual (EN/ES) AI-writing detection that shows the evidence instead of a percentage: named tells with line and column, hidden-character inspection, and citation cross-checking against a document's own bibliography. Seven of its nine tools run entirely locally and never touch the network.
    10
    24
    MIT