Skip to main content
Glama

Martin's Humaniser

Strip the AI tells out of a PDF, Word, Markdown or text file, and keep every fact.

Tests Python 3.10+ Licence: MIT Platforms

The app, with a before and after score

Martin's Humaniser rewrites text that reads like a chatbot wrote it ("It's important to note...", "a rich tapestry of...", "That distinction matters.") so it reads like a person wrote it. It then checks the result: numbers, links, names and quotations must survive, and an optional second pass reviews the rewrite for invented or lost detail.

It runs three ways, all on one engine:

  • A browser app you open from a Desktop icon. Drop files in, press a button.

  • A command line for scripts and batches.

  • An MCP server, so Claude Desktop, Cowork and Claude Code can call it as a tool.

It isn't an AI detector, and it can't promise that a detector will pass your text. It's an editor with a checklist. See Limits.

Contents

Related MCP server: Ultimate Google Docs & Drive MCP Server

Quick start

You need Python 3.10 or newer and one way to run a model (see Choosing a model). The setup script does the rest: it makes a private environment, installs the packages, puts a Martin's Humaniser icon on your Desktop, connects Claude Desktop if you have it, and runs a health check.

Windows

  1. Download the repository (green Code button, then Download ZIP) and unzip it, or run git clone https://github.com/MPavion/martins-humaniser.git.

  2. Double-click setup.bat. If Python is missing, it offers to install it with winget.

  3. Double-click the Martin's Humaniser icon on your Desktop.

That's the whole job. Running setup.bat again is safe. It repairs a moved or broken environment and refreshes the icon.

macOS and Linux

git clone https://github.com/MPavion/martins-humaniser.git
cd martins-humaniser
./setup.sh

On macOS you get a Martin's Humaniser.command file on the Desktop. On Linux you get a launcher entry in your applications menu and on the Desktop. Or run ./run_gui.sh from the folder.

Setup options

python scripts/install.py takes these flags (the .bat and .sh wrappers pass them through):

Flag

Effect

--yes

Don't ask questions

--no-shortcut

Skip the Desktop icon

--no-mcp

Skip the Claude Desktop connection

--launch

Open the app when setup finishes

Check a setup at any time with python -m ai_humanizer --doctor. It lists what's working, what's missing and the exact fix for each problem.

Choosing a model

The tool needs a language model to do the rewriting. Pick whichever you have. auto tries them in this order.

Backend

You need

Good for

Notes

claude-cli

Claude Code installed and signed in

Most people with a Claude subscription

No API key.

anthropic

ANTHROPIC_API_KEY

Pay-per-use

Model set by AI_HUMANIZER_MODEL.

ollama

Ollama running, then ollama pull llama3.1:8b

Fully offline and private

Smaller models follow the rules less closely.

openai-compatible

LM Studio, llama.cpp or any server with an OpenAI-style API

Local or self-hosted

Set AI_HUMANIZER_LOCAL_URL.

mock

nothing

Trying the interface

Makes trivial swaps. Not a real humaniser.

If nothing is available, the app tells you what to install instead of failing quietly.

Using the app

Pasting text and trying the built-in example

The app has four tabs:

  • Documents: drop in one or more files.

  • Files on this PC: point at a folder and pick files, so the result lands next to the original.

  • Paste text: for a quick paragraph. Try an example loads a sample so you can see how it works before using your own text.

  • Teach it your taste: show it a draft and your edited version, and it learns what you cut.

Choose a level (light, standard, deep) and press Humanise. For each file you get:

  • the AI-tell score before and after, with a plain-language band (clean, some tells, many tells, heavy)

  • a check that numbers, links, emails and quotations match the original

  • the tells still left, with line numbers

  • downloads as .docx, .pdf, .md or .txt, plus a copy saved next to the original

Before and after, with changes highlighted and editable

Edit before you save

The Before and after view is tall, highlights what changed (underlined, not colour-only, so it works if you're colourblind), and the output side is editable. Whatever you fix by hand goes into the download and the saved copy.

Fidelity review

When the AI assessor finds details the rewrite invented, lost or changed, each one is listed with options: keep, remove, restore the original, or edit this phrase in place. Press Apply and the choices go into the document. You never have to hunt through the text for them.

File handling

  • PDFs come back as clean Word or PDF files. A DOCX source is edited in place, so styles, tables and page setup survive.

  • Output is saved as name.humanised.ext. Your original is never overwritten.

  • Title blocks ("Name: ...", "Date: ..."), headings and quotations are kept as they were.

What it checks

Check

What it does

Needs a model

Tell score

0 to 100 pattern score before and after. Repeatable.

No

Fact check

Numbers, links, emails, names and quotations compared with the original

No

AI assessor

Scores six dimensions, blind, on original and rewrite

Yes

Fidelity

Lists invented, lost or changed details

Yes

Deep check

Finds empty claims, set-up sentences, echo endings, fake balance

Yes

Voice match

Reports how close the rewrite is to your own writing

Yes (profile)

Make it sound like you

The Teach it your taste tab

Match my voice. Put things you wrote (txt, md, docx, pdf) in the voice folder. About 1,000 words or more works best. Tick Match my voice, or use --voice. The tool measures your sentence length, contractions and dashes, picks clean passages as examples, asks the model for a short description of your style, and then reports how close the rewrite is to your own numbers.

Deep check for empty claims. An extra pass (--semantic) looks for vague claims, set-up sentences, echo endings, unsupported superlatives and fake balance. Every issue must quote the text, and quotes that aren't really in the paragraph are dropped. Findings feed the repair pass.

Teach it your taste. Paste an AI draft and your hand-edited version in the fourth tab. It lists phrases you removed and general habits, and you tick the ones to keep. Phrases join the pattern checker. Habits join the rewrite prompt. Everything is stored in rules/custom/, which Git ignores. CLI: --learn draft.txt edited.txt --save-learned.

Local models. Choose ollama or openai-compatible and nothing leaves your computer.

Command line

python -m ai_humanizer report.pdf                 # saves report.humanised.docx
python -m ai_humanizer post.md --level deep -o post-final.md
python -m ai_humanizer post.md --check            # list tells, no rewrite
python -m ai_humanizer report.docx --pdf          # also saves report.humanised.pdf
python -m ai_humanizer post.md --voice --semantic --assess
python -m ai_humanizer --learn draft.txt edited.txt --save-learned
python -m ai_humanizer --doctor                   # health check
python -m ai_humanizer --status                   # backends and rule sources

After pip install -e . the same commands are available as martins-humaniser.

Using it from Claude (MCP)

The server runs on your computer over stdio, so Claude can read and write files by their paths. setup registers it with Claude Desktop (a backup of your config is made first). Restart Claude Desktop afterwards.

There are two ways to work:

Claude rewrites, the server checks (no model setup needed).

  1. humanizer_get_rules returns the editing rules.

  2. humanizer_extract_document reads a file.

  3. Claude rewrites the text.

  4. humanizer_compare gives the score before and after and flags any changed number, link or quotation.

  5. humanizer_save_document writes the result.

The server rewrites. humanizer_humanize_file and humanizer_humanize_text use your chosen backend and return the same report.

Tool

What it does

humanizer_status

Backends, rule sources, supported files

humanizer_get_rules

The rules text Claude should follow

humanizer_extract_document

File to Markdown text

humanizer_lint_text

Findings and a 0 to 100 score, no model

humanizer_compare

Before and after score, remaining tells, fact check

humanizer_save_document

Markdown text to .docx, .md or .txt

humanizer_humanize_text

Server-side rewrite of text

humanizer_humanize_file

Server-side rewrite of a file, saved as <name>.humanised.<ext>

humanizer_assess_text / _file / _pair

Blind rubric scoring and fidelity

humanizer_voice_profile

Build or show your voice profile

humanizer_learn_from_edit

Learn phrases from a draft and your edit

humanizer_forget_phrase

Remove a learned phrase

Existing output files are only replaced with overwrite=true. To register by hand, python scripts/install_mcp.py --print shows the JSON for claude_desktop_config.json and the claude mcp add command. --remove takes the entry out. The connector keeps the technical name ai-humanizer.

Rules and custom rules

Rules are read in this order, and later sources win:

  1. ai_humanizer/data/default_rules.md, bundled

  2. an installed Claude skill: ~/.claude/skills/humanizer/SKILL.md, or the path in AI_HUMANIZER_SKILL_PATH

  3. every .md file in rules/custom/ (Git ignores it, so private rules stay local)

  4. paths in AI_HUMANIZER_EXTRA_RULES

Drop a house style guide or writing SOP into rules/custom/ and it applies to every rewrite. The editing rules come from Wikipedia's Signs of AI writing guide, plus extra habits covering short maxims, "Without X, Y" lines, balanced pairs, contractions and the "That distinction matters" family.

Configuration

Everything has a sensible default. Set these as environment variables if you want to change one.

Variable

Default

Purpose

AI_HUMANIZER_BACKEND

auto

auto, claude-cli, anthropic, ollama, openai-compatible, mock

AI_HUMANIZER_MODEL

claude-sonnet-5-5

Model for the anthropic backend

AI_HUMANIZER_CLI_MODEL

(CLI default)

Model for claude-cli

AI_HUMANIZER_LOCAL_MODEL

llama3.1:8b

Model for ollama / openai-compatible

AI_HUMANIZER_LOCAL_URL

http://localhost:11434

Local server address

AI_HUMANIZER_LOCAL_API_KEY

none

Key for a local server that needs one

AI_HUMANIZER_LEVEL

standard

light, standard, deep

AI_HUMANIZER_LOCALE

British English

Spelling variant, for example American English

AI_HUMANIZER_VOICE

off

Match my voice

AI_HUMANIZER_SEMANTIC

off

Deep check for empty claims

AI_HUMANIZER_ASSESSOR_BACKEND

same as rewrite

Use a different model as judge

AI_HUMANIZER_ASSESS_RUNS

1

Average several assessor runs

AI_HUMANIZER_WORKERS

3

Parallel chunks

AI_HUMANIZER_OUTPUT

output/

Where saved copies go

AI_HUMANIZER_VOICE_DIR

voice/

Your writing samples

AI_HUMANIZER_CUSTOM_RULES

rules/custom/

Your private rules

AI_HUMANIZER_EXTRA_RULES

none

Extra rule files

How it rewrites

  1. The file is split into headings, title blocks, paragraphs, lists, quotes, code and tables. Only paragraphs are rewritten. Title blocks, single-line labels and heading-like lines are kept exactly, and a rewrite that cuts most of a paragraph is refused. Quotations stay verbatim.

  2. Consecutive paragraphs are grouped into chunks of about 900 words. Each chunk goes to the model with the rules, the section heading for context, and an optional sample of your own writing.

  3. The model must return the same number of paragraphs. If it doesn't, the chunk is retried, then rewritten paragraph by paragraph, then kept as written.

  4. The result is linted. If serious tells remain, one repair pass names them and asks for a fix.

  5. Numbers, links, emails, quotations and names are compared with the original.

The score

The score comes from lint.py, a set of patterns and thresholds: word tiers, stock phrases, signposting, negative parallelism, em-dash density, bold, emoji, chatbot leftovers, contractions and the structural habits below. It uses no model, so results repeat. It runs from 0 (nothing found) to 100 (saturated).

Score

Band

under 15

Clean

15 to 34

Some tells

35 to 59

Many tells

60 and up

Heavy

Word and phrase lists draw on Wikipedia's guide, Grammarly's and Pangram's published lists, GPTZero's vocabulary page, and two open-access studies of vocabulary change in scientific papers after ChatGPT. Single words are weak evidence (many are normal English), so ordinary words get low weight and an allowance per piece. Clusters matter more, so four or more flagged words close together raise a separate finding.

The vocabulary list was checked against Matsui (2025), "Delving Into PubMed Records" (135 terms from 15 studies, tested on 27.5 million PubMed records). The paper's data (MIT licence, ai_humanizer/data/pubmed_terms.csv, source in PUBMED_TERMS_NOTICE.md) sets the weights. A word that rose sharply and is rare in normal writing (delve, tapestry, commendable) counts most. A word that rose but is common (primarily, notably) is flagged only past a small allowance. The paper found these terms started rising in 2020, before ChatGPT, and that writers have avoided them since 2024, so the list will date.

Ten structural habits

Beyond words, the checker looks for short general maxims; "Without X, Y" counterfactuals and repeated-word punch lines; balanced pairs; figurative verbs for abstract effects; glossary-style sentences; sentences about the argument's own structure; trailing participle clauses; lists of three beyond a normal rate; sentences that all sit in a narrow length band; and text with few concrete details. The last two need about 150 words. They're weak signals alone, and careful textbook writing triggers several of them too.

The AI assessor

Tick AI assessor in the app, pass --assess, or use assess=true in the MCP tools. A model scores the original and the rewrite on six dimensions (specificity, vocabulary, structure, voice, claims, formatting). Higher means more AI-like.

  • It's blind: the model isn't told which text is the rewrite.

  • Every issue it lists quotes the text. Quotes that don't appear in the text are dropped.

  • The overall score is calculated here from the six dimension scores.

  • The fidelity check reports details the rewrite invented, lost or changed: faithful, minor drift (1 to 2 invented or changed, or 3 or more lost) or unfaithful (3 or more invented or changed).

  • Long documents are scored on sampled passages (start, middle, end).

A model judging a model's rewrite tends to be generous. For an independent judge, set AI_HUMANIZER_ASSESSOR_BACKEND to a different backend and AI_HUMANIZER_ASSESS_RUNS=3. Read the quoted issues rather than trusting the number.

Limits and honest caveats

  • It isn't a detector and gives no guarantee. Detectors disagree with each other and are unreliable both ways. A low score here means the common tells are gone, not that the text is good.

  • Read the output. A model can still invent or drop a detail. The fact check and fidelity review catch most of it, not all.

  • PDF layout is approximated from extracted text. Columns, tables and footnotes may need a manual check. Scanned PDFs have no text and need OCR first.

  • PDF output is a clean A4 layout built from the text. For an exact Word layout, save as DOCX.

  • Lists, tables, code and quotes pass through unchanged.

  • In DOCX files, text inside hyperlinks is kept as it was.

  • Spelled-out numbers ("five" for 5) show up as differences in the fact check.

  • The default spelling is British English. Change it with AI_HUMANIZER_LOCALE="American English".

Use it responsibly

Use it to improve your own drafts and to edit text you're entitled to edit. Don't use it to pass off AI output where a person's own work is required (exams, journal submissions with disclosure rules, and so on). Follow the rules of wherever you publish.

Privacy

  • Files are processed on your computer. Text is sent only to the backend you choose: Claude (through Claude Code or the API), or a local model that never leaves your machine.

  • No telemetry, no accounts, no analytics.

  • rules/custom/, voice/, output/ and the app's saved settings are in .gitignore, so your private rules, writing samples and results are never committed.

  • If the text is sensitive, use ollama or openai-compatible with a local model.

Troubleshooting

Symptom

Fix

Start with python -m ai_humanizer --doctor

It names the problem and the fix.

"No model available" in the app

Install and sign in to Claude Code, set ANTHROPIC_API_KEY, or start Ollama.

The Desktop icon does nothing

Run setup.bat again. It repairs the environment and the icon.

No Desktop icon

Run python scripts/install.py. OneDrive-redirected Desktops are handled.

I moved or renamed the folder

Close the app, then run setup.bat once.

The app says the port is busy

The launcher picks the next free port from 8501 to 8530 by itself.

Claude Desktop doesn't list the tool

Restart Claude Desktop. If it still doesn't, run python scripts/install_mcp.py --print and compare.

Rewrite returned the wrong number of paragraphs

The paragraph is kept as written. Try --level light, or a stronger model.

Odd characters on Windows

Set PYTHONUTF8=1. The launcher does this for you.

Updating and uninstalling

Update: git pull (or download the new ZIP over the old folder), then run setup.bat or ./setup.sh again.

Uninstall: run python scripts/install_mcp.py --remove, delete the Desktop icon, then delete the folder. Nothing is installed outside the folder except the Claude Desktop config entry and the icon.

Project layout

app.py                  Streamlit app
ai_humanizer/           the engine (lint, pipeline, backends, voice, learn, fixes, MCP server, CLI)
ai_humanizer/data/      bundled rules and word data
scripts/install.py      one-step setup (environment, packages, icon, Claude Desktop, health check)
scripts/launch.py       starts the app on a free port and opens the browser
scripts/install_mcp.py  registers or removes the Claude Desktop connection
rules/custom/           your private rules (ignored by Git)
voice/                  your writing samples (ignored by Git)
output/                 saved results (ignored by Git)
tests/                  pytest suite
assets/                 icon and logo
docs/images/            README screenshots

Development

pip install -r requirements-dev.txt
pytest

The suite runs without a model, using the mock backend. See CONTRIBUTING.md for the workflow and CHANGELOG.md for what's changed.

Credits

  • Pattern list based on Wikipedia's Signs of AI writing guide (WikiProject AI Cleanup).

  • Vocabulary weights use data from Matsui (2025), "Delving Into PubMed Records" (MIT). See ai_humanizer/data/PUBMED_TERMS_NOTICE.md.

  • Assessor rubric ideas were informed by reading unslop and stop-slop (both MIT). No code was copied.

  • Built with Streamlit, python-docx, pypdf and reportlab.

Licence: MIT. Copyright (c) 2026 Martin Pavion.

Available Tools

14 tools
humanizer_assess_fileB

Score a PDF, DOCX, Markdown or text file the same way as humanizer_assess_text.

NameRequiredDescriptionDefault
pathYes
runsNo
backendNo

TDQS

B3/5.0
Behavior2/5

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

With no annotations supplied, the description carries the full behavioral burden and provides little: 'Score' implies a read-only analysis, but that is never stated, nor is what happens with unsupported or corrupt files, whether extraction is lossy, or whether runs/backend cause multiple passes or external calls. The only behavioral fact conveyed is the set of accepted file formats.

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?

A single sentence with no filler that front-loads the verb, the supported formats, and the equivalence reference. Nothing could be cut without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter tool with no annotations and no output schema, the description is thin: two parameters are unexplained and the return value is only gesturally covered by deferring to humanizer_assess_text. An agent could call it, but not confidently configure runs or backend.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does not. 'path' is self-evident from its name, but 'runs' and 'backend' — which look like they control repeated scoring passes and an underlying provider — are given no meaning at all in either the schema or the description.

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 gives a specific verb ('Score') and resource ('a PDF, DOCX, Markdown or text file'), and anchors the semantics by equating it to the sibling humanizer_assess_text. It implicitly separates itself from humanizer_humanize_file (transform) and humanizer_assess_text (raw text), though it never states those contrasts explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'the same way as humanizer_assess_text' implies the selection rule (use this when the input is a file rather than a string), but the agent must infer it. There is no explicit when-not guidance, no mention of unsupported formats, and nothing about when to reach for humanizer_assess_pair or humanizer_extract_document instead.

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

humanizer_assess_pairB

Blind before and after scores for an original and your rewrite, plus a faithfulness check.

Use this after rewriting text yourself. The assessor is not told which version is the rewrite. The faithfulness check reports details the rewrite invented, lost or changed.

NameRequiredDescriptionDefault
backendNo
originalYes
rewrittenYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries full disclosure burden. It usefully reveals the blinding mechanism ('the assessor is not told which version is the rewrite') and that the faithfulness check enumerates invented, lost, or changed details — real behavioral value. It omits scoring scale/range, determinism, latency/cost, and whether results are persisted.

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?

Four short sentences, front-loaded with the outcome (blind scores + faithfulness check), followed by placement guidance and two clarifying facts. Every sentence adds information; only mild compactness ('blind before and after scores') slightly obscures the mapping to original/rewrite.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description only loosely sketches the return shape (scores plus a list of invented/lost/changed details) without indicating score range or structure. For a stateless three-parameter evaluation tool this is workable but leaves the response format and the undocumented backend param unresolved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must define all three parameters. It clarifies the roles of original and rewritten (the latter being the caller's own rewrite), but the 'backend' parameter is given no meaning at all, and no format or size expectations are stated for the text inputs.

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 action: blind before/after scoring of an original vs. a user-supplied rewrite, plus a faithfulness check. This clearly separates it from the generation tools (humanize_text) and from single-text assessment, though it never names the closest siblings (assess_text, compare) explicitly.

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?

'Use this after rewriting text yourself' gives a clear triggering condition — the rewrite must already exist and be produced by the caller, not the server. It stops short of saying when to prefer assess_text or compare instead, so alternate routing is left implicit.

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

humanizer_assess_textA

Score how AI-written a text reads (0 to 100, higher is more AI-like) with a blind rubric.

Returns six dimension scores, quoted issues that were checked against the text, and the pattern-checker score for comparison. Uses a model backend, so it is slower than lint_text.

Args: text: The text to assess. backend: auto, claude-cli, anthropic or mock. runs: Repeat the assessment and average it (reduces noise).

NameRequiredDescriptionDefault
runsNo
textYes
backendNo

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does reasonably well: it discloses the model backend dependency, the relative slowness versus lint_text, the exact return payload (six dimension scores, quoted issues, pattern-checker score), and that runs averages repeats to reduce noise. It omits auth/credential needs implied by the claude-cli and anthropic backends, and any failure or cost behavior.

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 purpose and output scale are front-loaded in the first sentence, followed by return shape, then per-argument notes - a sensible order with no filler. The 'Args:' block is slightly list-like but each line adds information the schema lacks.

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 three-parameter tool with no annotations and no output schema, the description covers purpose, scoring direction, latency tradeoff, return payload, and all three parameters. Missing only edge behavior such as what happens with empty or very long text and how backend credentials are supplied.

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 0%, so the description must compensate, and it does: text is the input to assess, backend enumerates the valid choices (auto, claude-cli, anthropic, mock), and runs is explained as repeat-and-average noise reduction rather than just a number. It does not state per-parameter defaults or how auto backend selection resolves, which are the remaining gaps.

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 gives a specific verb and resource - scoring how AI-written a text reads - plus the output scale (0-100, higher = more AI-like) and the mechanism (blind rubric). It also positions itself against the sibling humanizer_lint_text, so an agent can tell the two apart without opening either schema.

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 establishes context by noting the model backend makes it slower than lint_text, which implicitly routes latency-sensitive or cheap checks to lint_text. It stops short of an explicit when-to-use / when-not-to-use statement or a recommendation for when the deeper assessment is worth the cost.

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

humanizer_compareA

Compare an original and a rewrite: AI-tell score before and after, remaining tells, and whether numbers, links, emails and quotations survived. Call this after rewriting, before saving.

NameRequiredDescriptionDefault
originalYes
rewrittenYes

TDQS

A3.7/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It usefully discloses the comparison dimensions the tool checks, which is real behavioral context beyond the schema. However it never states that the call is non-mutating/read-only, nor whether it is idempotent or costs anything, which matters for a tool sitting between a rewrite and a save step.

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?

A single tight sentence with the core action front-loaded and the output list compactly enumerated, followed by one short imperative sentence for sequencing. No filler, no restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Absent an output schema, the description must explain returns, and it does at the level of categories (scores, remaining tells, preservation checks) but not structure or field names. For a two-parameter read-style comparison this is adequate to call correctly, but thin on what the calling agent should expect back.

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 0%, so the description must compensate. The pair 'original' and 'rewrite' are named in prose ('Compare an original and a rewrite'), which clarifies role ordering, but the description adds no constraint details such as whether inputs are raw text, size limits, or what happens on identical inputs. Minimal viable given two self-describing required string params.

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?

Names a specific verb (compare) and its two inputs (original, rewrite), then enumerates the concrete outputs: before/after AI-tell score, remaining tells, and survival of numbers, links, emails and quotations. That is far more specific than a tautology. It stops short of differentiating itself from the similarly named sibling humanizer_assess_pair, so an agent must guess which of the two to reach for.

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?

Gives explicit sequencing guidance: 'Call this after rewriting, before saving.' That establishes a clear position in the workflow relative to humanizer_humanize_text/humanizer_save_document. It offers no negative guidance (when not to call it) and no routing against humanizer_assess_pair or humanizer_lint_text, so the when-to-use map is incomplete.

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

humanizer_extract_documentB

Read a PDF, DOCX, Markdown or text file and return its text as Markdown.

Args: path: Absolute path to the file on this machine. max_chars: Cap on returned text.

NameRequiredDescriptionDefault
pathYes
max_charsNo

TDQS

B3.2/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It does disclose the read-only nature implicitly and states the output is Markdown, but it omits what happens when max_chars is exceeded (truncation marker? silent cut?), how unsupported or missing files behave, and whether extraction is lossy for tables/images.

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?

One front-loaded sentence stating purpose and output, followed by a compact args list — no filler. The Args block is slightly redundant with the schema but remains efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with no output schema this covers the essentials (what is read, what is emitted, a size cap), but it is thin on edge cases — unsupported format handling, truncation signalling, and relative-vs-absolute path failure are all unaddressed.

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 0%, so the description must compensate, and it does define both params: path as an absolute path on this machine (a useful constraint) and max_chars as a cap on returned text. It still leaves the default value (200000) and the truncation behavior unexplained, which is the most consequential part of max_chars.

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 names a concrete verb and resource ('Read a PDF, DOCX, Markdown or text file and return its text as Markdown') and enumerates the supported input formats plus the output format. It does not, however, distinguish itself from file-touching siblings such as humanizer_humanize_file or humanizer_assess_file, so an agent must infer that this one only extracts text without processing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance, and no mention of the sibling tools that also take a file path. Usage is only implied by the verb 'extract', so an agent choosing among humanize_file, assess_file, and this tool gets no routing help.

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

humanizer_forget_phraseC

Remove a phrase that was learned from the author's edits.

NameRequiredDescriptionDefault
phraseYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations supplied, the description carries the full disclosure burden and does not meet it. It never says whether the removal is permanent or reversible, whether it errors on an unknown phrase, or how it affects future humanization or the voice profile. For a state-mutating removal tool this is a significant gap.

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?

A single short sentence with the action verb front-loaded and no filler. It is appropriately sized, though its brevity comes at the cost of the behavioral detail noted elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one required string), but with no annotations and no output schema the description should say what success and failure look like and whether the phrase must already exist. Those essentials are absent, leaving the agent to guess at side effects.

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?

There is one parameter with 0% schema description coverage, so the schema adds nothing beyond type string. The description partially compensates by indicating the value is a previously learned phrase rather than arbitrary text, but it does not specify exact-match requirements, case sensitivity, or source format.

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 pairs a specific verb ('Remove') with a specific resource ('a phrase that was learned from the author's edits'), which also implicitly distinguishes it from the sibling humanizer_learn_from_edit. It stops short of naming that counterpart explicitly, so an agent must infer the relationship.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no mention of checking humanizer_get_rules or humanizer_status first to see which phrases exist, and no stated behavior when the phrase was never learned. Usage is only inferable from the phrase 'learned from the author's edits'.

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

humanizer_get_rulesA

Return the editing rules (default rules, any installed humanizer skill, and the user's own SOP files).

Read these before rewriting text yourself. Custom rules outrank the defaults.

NameRequiredDescriptionDefault
include_customNo

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full disclosure burden. It does usefully disclose the composition of the result and the precedence rule ("Custom rules outrank the defaults"), which is behavior an agent could not infer elsewhere. However, it says nothing about permissions, freshness/caching, or whether custom rules always exist.

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?

Two short sentences, front-loaded with what is returned, then the action guidance and precedence rule. Nothing is padded and each sentence carries distinct information.

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 simple optional-parameter read tool with no output schema, the description covers content, precedence, and when to call it. The only real gap is the unexplained include_custom flag.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single parameter include_custom, and the description never mentions it. An agent must guess that include_custom toggles the "user's own SOP files" portion, rather than being told directly.

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 and resource ("Return the editing rules") and enumerates the three sources: defaults, installed humanizer skill, and user SOP files. It is clear what the tool retrieves, though it never names a sibling or explains how it differs from humanizer_status or humanizer_voice_profile.

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?

"Read these before rewriting text yourself" gives an explicit invocation condition tied to the humanize workflow. There are no stated when-not conditions or named alternatives, so it stops short of full routing guidance.

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

humanizer_humanize_fileA

Rewrite a PDF, DOCX, Markdown or text file on the server and save the result next to it.

PDF input is saved as .docx unless output_format is pdf. The original file is never changed. Default output is .humanised..

Args: path: Absolute path to the source file. output_path: Optional absolute output path (.docx, .pdf, .md or .txt). output_format: docx, pdf, md or txt. Default follows the source (PDF sources become docx). level: light, standard or deep. backend: auto, claude-cli, anthropic or mock. locale: For example "British English". style_sample: A sample of the author's own writing to match. overwrite: Replace an existing output file. assess: Also run the AI assessor for a before and after score (slower). also_pdf: Also save a PDF copy next to the output. voice: Match the writing samples in the voice folder. semantic: Add an AI pass that catches meaning-level tells (slower). local_model: Model name for the ollama or openai-compatible backends.

NameRequiredDescriptionDefault
pathYes
levelNostandard
voiceNo
assessNo
localeNo
backendNo
also_pdfNo
semanticNo
overwriteNo
local_modelNo
output_pathNo
style_sampleNo
output_formatNo

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations supplied, the description carries the full load and does reasonably well: it discloses that the original file is never changed, that output defaults to <name>.humanised.<ext>, that PDF sources are converted to .docx, and that overwrite is required to replace an existing file. It also flags the slower options (assess, semantic). It stops short of describing what happens on failure, whether backend auth is needed, or how long 'deep' level takes.

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 behavioral rules are front-loaded in the first two sentences, followed by a scannable arg list, which is the right structure for a 13-parameter tool. There is minor redundancy, since output_format repeats the PDF-becomes-docx default already stated above, but nothing is padded.

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 13-parameter mutation tool with no annotations and no output schema, the description covers the essentials an agent needs: file-safety guarantee, default output naming, format coercion, overwrite behavior, and cost flags. The main remaining gap is the return value — the agent is never told the generated path is reported back, despite there being no output schema to supply 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 coverage is 0%, so the description must compensate, and it does by glossing all 13 parameters and supplying the accepted values that the schema lacks as enums (level: light/standard/deep, backend: auto/claude-cli/anthropic/mock, output_format: docx/pdf/md/txt). The glosses are uneven — 'level' values are listed without explaining what depth actually changes, and local_model is not tied to the ollama/openai-compatible backends it belongs to — but the parameter documentation clearly exceeds the bare schema.

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 and resource (rewrite a PDF/DOCX/Markdown/text file) plus the scope constraint that it operates on server files and writes the result alongside the source. That is enough to distinguish it from humanizer_humanize_text, though it never names the sibling explicitly, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the description of format handling and defaults, so an agent can infer this is the file-based variant of the humanize operation. However, there is no explicit guidance on when to prefer this over humanizer_humanize_text or humanizer_extract_document, and no declared prerequisites such as whether the path must exist or be readable by the server.

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

humanizer_humanize_textA

Rewrite text on the server with a model backend, then lint it and check facts.

Args: text: Text to rewrite (Markdown or plain). level: light, standard or deep. backend: auto, claude-cli, anthropic or mock. Default auto. locale: For example "British English". style_sample: A sample of the author's own writing to match. assess: Also run the AI assessor for a before and after score (slower). voice: Match the writing samples in the voice folder (see humanizer_voice_profile). semantic: Add an AI pass that catches meaning-level tells such as empty claims (slower). local_model: Model name when backend is ollama or openai-compatible, for example llama3.1:8b.

NameRequiredDescriptionDefault
textYes
levelNostandard
voiceNo
assessNo
localeNo
backendNo
semanticNo
local_modelNo
style_sampleNo

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose that rewriting happens server-side via a model backend and that some flags are 'slower'. It does not say whether the original text is preserved, whether anything is persisted, what model costs or latency to expect, or what the response contains, leaving meaningful behavioral gaps for a mutating-in-spirit pipeline.

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?

A single front-loaded purpose sentence followed by one line per argument is efficient and scannable, with no filler prose. The arg block is long but justified because the schema documents nothing itself.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nine-parameter tool with no annotations and no output schema, the definition covers inputs but not what comes back: the rewritten text, lint results, and fact-check report are described only as actions, not as returned structure. It also omits whether output is saved versus merely returned, a real ambiguity given the humanizer_save_document sibling.

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 0%, so the arg list is the only source of parameter meaning, and it supplies value sets (level: light/standard/deep; backend: auto/claude-cli/anthropic/mock) plus effect hints like 'slower' and default 'auto'. It is undercut by an internal inconsistency: local_model says it applies when backend is 'ollama or openai-compatible', values absent from the backend list, which could cause a failed call.

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 opening sentence names a specific verb and resource (rewrite text) and discloses the pipeline steps that follow (lint, fact-check), which distinguishes it from pure-assessment siblings. It stops short of explicitly contrasting itself with humanizer_humanize_file or humanizer_assess_text, so the sibling boundary must still be inferred.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the arg notes hint that 'assess' or 'semantic' should be turned on for extra scrutiny and that 'voice' relates to humanizer_voice_profile, which is a useful pointer to a sibling. There is no explicit statement of when to prefer this tool over humanizer_humanize_file, humanizer_lint_text, or humanizer_assess_text, and no prerequisites or exclusions are given.

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

humanizer_learn_from_editA

Learn the author's taste from an AI draft and the version they fixed by hand.

Returns the sentences that changed, phrases they removed, and general rules. With save=true the phrases are added to the pattern checker and the rules to the rewrite prompt from then on.

NameRequiredDescriptionDefault
saveNo
ai_textYes
backendNo
edited_textYes

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations the description carries the full burden, and it does real work: it discloses the return contents (changed sentences, removed phrases, general rules) and, critically, that save=true persists effects into the pattern checker and rewrite prompt 'from then on'. That is exactly the kind of durable side effect an agent needs warned about. It stops short of clarifying the scope of persistence (per-user vs global) or what the backend parameter controls.

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?

Three short sentences, front-loaded with purpose and followed by returns and then the side effect. Every sentence earns its place and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter tool with no annotations and no output schema, the description covers purpose, return contents, and the save side effect well. It is incomplete on the backend parameter and on where saved rules and phrases are stored, which matters for a tool with persistent effects.

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 0%, so the description must compensate, and it does for three of four parameters: ai_text is the AI draft, edited_text is the hand-fixed version, and save triggers persistent rule/phrase registration. The backend parameter is never mentioned in either schema or description, leaving a genuine hole.

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 and resource - learn the author's taste - and defines the exact inputs that produce it: an AI draft plus the hand-fixed version. That pair-of-texts framing naturally separates it from single-text siblings like humanizer_lint_text, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the input shape: call it when you have both an AI draft and a human-corrected version. There is no explicit when-not guidance and no mention of the closely related humanizer_compare or humanizer_assess_pair, which an agent could easily confuse with this tool.

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

humanizer_lint_textA

Check text for AI-writing tells without using a model.

Returns a 0-100 score (higher means more AI-like), counts by category, and each finding with its line, the matched text, a message and a suggested fix. Quotations are skipped except for chatbot artefacts.

NameRequiredDescriptionDefault
textYes
max_findingsNo

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full disclosure burden and mostly succeeds: it explains the scoring direction (0-100, higher = more AI-like), the grouping of results, and an important behavioral quirk (quotations are skipped except chatbot artefacts). It does not state whether the check is read-only/side-effect free or how large inputs are handled, leaving minor gaps.

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?

Two tightly packed sentences with no filler; the core action is front-loaded, followed by the return shape and the exception rule in one clause. Every sentence earns its place.

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?

With no output schema, the description usefully enumerates the return payload (score, category counts, per-finding line/text/message/fix), so an agent knows what to expect. It falls just short because the max_findings parameter's role is unaddressed.

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 0%, so the description must compensate. 'text' is self-evident and the mention of findings implicitly relates to output, but max_findings (default 100) is never explained — an agent cannot tell from the definition that it caps the number of findings returned or what happens when exceeded.

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 and resource ('Check text for AI-writing tells') and adds a distinguishing trait ('without using a model') that separates it from model-based siblings like humanizer_assess_text. It stops short of naming that sibling directly, so the differentiation is implicit rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'without using a model' implies a deterministic, rule-based pass, which hints at when to prefer this over model-backed assessment. However, there is no explicit when-to-use/when-not-to-use guidance and no named alternative among the siblings (humanizer_assess_text, humanizer_humanize_text, humanizer_compare).

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

humanizer_save_documentA

Write rewritten Markdown text to a .docx, .pdf, .md or .txt file.

Args: text: The rewritten document as Markdown (headings with #, one blank line between paragraphs). output_path: Absolute path ending in .docx, .pdf, .md or .txt. source_path: Optional original file. If it is a DOCX with the same structure, its styles are kept. overwrite: Replace an existing output file. The source file is never overwritten.

NameRequiredDescriptionDefault
textYes
overwriteNo
output_pathYes
source_pathNo

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations supplied, the description carries the full behavioral burden but does well: it discloses that a same-structure DOCX source is used purely to inherit styles, that overwrite replaces an existing output, and — critically for safety — that the source file is never overwritten. It omits error/failure behavior and what the tool returns, which are the main remaining gaps for a write operation.

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?

Front-loaded one-line purpose followed by a compact per-argument block; every line adds information (format constraints, style inheritance, overwrite safety) rather than restating the schema. No padding or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description would ideally state what is returned (e.g., the written path or a confirmation), and it says nothing about directory-creation or failure modes. Otherwise it is complete enough for an agent to call the tool correctly, with format, path, style, and overwrite semantics all covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, yet the description documents all four parameters: text including its Markdown conventions (# headings, blank line between paragraphs), output_path as absolute with a required extension, source_path as optional with the DOCX style-inheritance condition, and overwrite as replacement of an existing output. This fully compensates for the schema's silence.

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 opens with a specific verb and resource — 'Write rewritten Markdown text to a .docx, .pdf, .md or .txt file' — and enumerates the supported formats, so an agent immediately knows the operation. It does not, however, distinguish itself from sibling write paths such as humanizer_humanize_file, leaving the boundary implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the phrase 'rewritten Markdown text' signals this is a final persistence step after rewriting, and the source_path note hints at a preserve-formatting workflow. There is no explicit statement of when to prefer this over humanizer_humanize_file or humanizer_extract_document, and no stated prerequisites.

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

humanizer_statusA

Show which rewrite backends are available, which rule sources are loaded, and supported file types.

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations at all, the description carries the full burden. It does disclose the information returned (backends, rule sources, file types), which implies a read-only, side-effect-free introspection call, but it never explicitly states that it is read-only, whether it is cheap, or whether it touches disk state.

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?

A single compact sentence that front-loads the verb and lists the three payload categories. Every clause carries information; nothing is restated from the tool name.

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 zero parameters, no annotations, and no output schema, the description does the important work of enumerating what comes back, which substitutes for the missing return-value documentation. The only gap is that it does not explicitly frame the tool as a read-only diagnostics call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is nothing the description could add about arguments. It correctly does not invent parameter documentation.

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 gives a specific verb ('Show') and enumerates exactly what resource is reported: available rewrite backends, loaded rule sources, and supported file types. This is clearly a diagnostic/capability-introspection tool, which distinguishes it at a glance from action siblings like humanizer_humanize_text or humanizer_lint_text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: a 'status' tool is understood to be a preflight/discovery call, but the description never says when to call it, whether it should precede other humanizer tools, or what alternatives exist. No exclusions or conditions are stated.

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

humanizer_voice_profileB

Measure the author's writing habits from the samples in the voice folder.

Returns the folder path, files read, word count, measured habits (sentence length, contractions, dashes) and a short model-written description of the voice. At least 150 words of samples are needed.

NameRequiredDescriptionDefault
backendNo
refreshNo

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden and does a fair job: it discloses the inputs consumed (samples in a fixed voice folder), the 150-word minimum, and that a model-written description is produced (implying an LLM call with latency/cost). It does not say whether anything is written to disk or cached, whether the call is read-only, or how failures surface.

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?

Three short sentences, front-loaded with purpose followed by the return payload and then the constraint. No filler, though the return-value list is a flat enumeration that could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description compensates for the absent output schema by sketching the return payload, which is the right move. However, for a two-parameter tool with zero annotation and zero schema coverage, leaving 'backend' and 'refresh' undefined is a real completeness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and neither parameter is mentioned in the description. 'Backend' is completely unexplained — an agent cannot tell what values are valid or what it selects. 'Refresh' is only obliquely inferable from the caching behaviour the tool implies, not stated.

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 and resource: 'Measure the author's writing habits from the samples in the voice folder.' This is clearly distinct from the assess/lint/humanize siblings, though it never names or contrasts with any of them, leaving the agent to infer the division of labor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The one hard precondition — 'At least 150 words of samples are needed' — is stated, which is genuinely useful. But there is no guidance on when to choose this over humanizer_assess_text or humanizer_learn_from_edit, and no note on what happens below the threshold (error vs empty profile).

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. 14 tool updatesv1.0.0
    • First observedhumanizer_assess_file
    • First observedhumanizer_assess_pair
    • First observedhumanizer_assess_text
    • First observedhumanizer_compare
    • First observedhumanizer_extract_document
    • First observedhumanizer_forget_phrase
    • First observedhumanizer_get_rules
    • First observedhumanizer_humanize_file
    • First observedhumanizer_humanize_text
    • First observedhumanizer_learn_from_edit
    • First observedhumanizer_lint_text
    • First observedhumanizer_save_document
    • First observedhumanizer_status
    • First observedhumanizer_voice_profile

TDQS

A3.6/5.0

Scored across 14 tools

Disambiguation4/5

Most tools occupy clearly distinct slots: extract vs save vs humanize_text vs humanize_file vs lint vs assess are separable, and the text/file suffix pattern makes the scope explicit. The one real collision is humanizer_compare versus humanizer_assess_pair, which both take an original and a rewrite and both report before/after scores plus a fact-faithfulness check; the descriptions differentiate them (deterministic lint vs blind model rubric) but an agent could easily grab the wrong one.

Naming Consistency5/5

Every tool uses the same humanizer_ prefix plus snake_case, and almost all follow a verb_noun shape (get_rules, lint_text, save_document, learn_from_edit, assess_file). The few noun-only names (status, voice_profile) are natural reads of read-only probes and do not break the pattern.

Tool Count4/5

Fourteen tools sits comfortably in the sensible range for a document-rewriting pipeline, and each one maps to a real pipeline stage. It is slightly heavy because the assess_* and humanize_* families triple up across text/file/pair, which produces redundancy around the compare/assess_pair overlap.

Completeness4/5

The lifecycle is largely covered end to end: read a document, inspect and load rules, rewrite inline or as a file, lint, assess, verify facts, save, then learn from hand edits and profile the author's voice. Gaps are minor: learned rules can only be removed phrase-by-phrase (no way to list or drop a whole learned rule), and there is no tool to manage or reset the voice sample folder.

Related MCP Connectors

Related MCP Servers