martins-humaniser
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@martins-humaniserhumanise report.pdf, keep all numbers and links, and save the revised copy"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Martin's Humaniser
Strip the AI tells out of a PDF, Word, Markdown or text file, and keep every fact.

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
Download the repository (green Code button, then Download ZIP) and unzip it, or run
git clone https://github.com/MPavion/martins-humaniser.git.Double-click
setup.bat. If Python is missing, it offers to install it with winget.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.shOn 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 |
| Don't ask questions |
| Skip the Desktop icon |
| Skip the Claude Desktop connection |
| 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 Code installed and signed in | Most people with a Claude subscription | No API key. |
|
| Pay-per-use | Model set by |
| Ollama running, then | Fully offline and private | Smaller models follow the rules less closely. |
| LM Studio, llama.cpp or any server with an OpenAI-style API | Local or self-hosted | Set |
| 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

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,.mdor.txt, plus a copy saved next to the original

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

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 sourcesAfter 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).
humanizer_get_rulesreturns the editing rules.humanizer_extract_documentreads a file.Claude rewrites the text.
humanizer_comparegives the score before and after and flags any changed number, link or quotation.humanizer_save_documentwrites 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 |
| Backends, rule sources, supported files |
| The rules text Claude should follow |
| File to Markdown text |
| Findings and a 0 to 100 score, no model |
| Before and after score, remaining tells, fact check |
| Markdown text to |
| Server-side rewrite of text |
| Server-side rewrite of a file, saved as |
| Blind rubric scoring and fidelity |
| Build or show your voice profile |
| Learn phrases from a draft and your edit |
| 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:
ai_humanizer/data/default_rules.md, bundledan installed Claude skill:
~/.claude/skills/humanizer/SKILL.md, or the path inAI_HUMANIZER_SKILL_PATHevery
.mdfile inrules/custom/(Git ignores it, so private rules stay local)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 |
|
|
|
|
| Model for the |
| (CLI default) | Model for |
|
| Model for |
|
| Local server address |
| none | Key for a local server that needs one |
|
|
|
|
| Spelling variant, for example |
| off | Match my voice |
| off | Deep check for empty claims |
| same as rewrite | Use a different model as judge |
|
| Average several assessor runs |
|
| Parallel chunks |
|
| Where saved copies go |
|
| Your writing samples |
|
| Your private rules |
| none | Extra rule files |
How it rewrites
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.
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.
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.
The result is linted. If serious tells remain, one repair pass names them and asks for a fix.
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
ollamaoropenai-compatiblewith a local model.
Troubleshooting
Symptom | Fix |
Start with | It names the problem and the fix. |
"No model available" in the app | Install and sign in to Claude Code, set |
The Desktop icon does nothing | Run |
No Desktop icon | Run |
I moved or renamed the folder | Close the app, then run |
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 |
Rewrite returned the wrong number of paragraphs | The paragraph is kept as written. Try |
Odd characters on Windows | Set |
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 screenshotsDevelopment
pip install -r requirements-dev.txt
pytestThe 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 toolshumanizer_assess_fileB
Score a PDF, DOCX, Markdown or text file the same way as humanizer_assess_text.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| runs | No | ||
| backend | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| backend | No | ||
| original | Yes | ||
| rewritten | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| runs | No | ||
| text | Yes | ||
| backend | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| original | Yes | ||
| rewritten | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| max_chars | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| phrase | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| include_custom | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| level | No | standard | |
| voice | No | ||
| assess | No | ||
| locale | No | ||
| backend | No | ||
| also_pdf | No | ||
| semantic | No | ||
| overwrite | No | ||
| local_model | No | ||
| output_path | No | ||
| style_sample | No | ||
| output_format | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| level | No | standard | |
| voice | No | ||
| assess | No | ||
| locale | No | ||
| backend | No | ||
| semantic | No | ||
| local_model | No | ||
| style_sample | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| save | No | ||
| ai_text | Yes | ||
| backend | No | ||
| edited_text | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| max_findings | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| overwrite | No | ||
| output_path | Yes | ||
| source_path | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| backend | No | ||
| refresh | No |
TDQS
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.
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.
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.
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.
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.
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.
14 tool updates
v1.0.0- First observed
humanizer_assess_file - First observed
humanizer_assess_pair - First observed
humanizer_assess_text - First observed
humanizer_compare - First observed
humanizer_extract_document - First observed
humanizer_forget_phrase - First observed
humanizer_get_rules - First observed
humanizer_humanize_file - First observed
humanizer_humanize_text - First observed
humanizer_learn_from_edit - First observed
humanizer_lint_text - First observed
humanizer_save_document - First observed
humanizer_status - First observed
humanizer_voice_profile
TDQS
Scored across 14 tools
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.
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.
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.
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
Notes, tasks, habits, journal and 6 more tools Claude can read and change, with undo. Free.
Trainable non-fiction writing voice, presets, and an anti-AI-tells audit for Claude, via MCP.
Use your Mac, Windows or Linux computer from ChatGPT, Claude or Codex: files, commands, documents.
Agent personas for Claude. 16 tools, 13 personas, 3 workflows. Zero extra API cost. Free.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables Claude Desktop to search and query personal document collections (PDF, Word, Markdown, text) using semantic search and conversational AI with full context preservation across exchanges.MIT
- AlicenseNot gradedqualityDmaintenanceConnects Claude Desktop to Google Docs and Google Drive, enabling comprehensive document reading, writing, formatting, structuring, and complete Drive file management including shared drives support through OAuth 2.0 authentication.5 npm3MIT
- AlicenseAqualityCmaintenanceClarity and memory for Claude. Persistent memory, intelligent context ranking, safety modes, and session checkpoints for Claude Desktop & Claude Code in a single install.2061 npm1MIT

mcp-upstageofficial
AlicenseBqualityAmaintenanceEnables AI assistants to extract and structure content from documents (PDFs, images, Office files) via Upstage AI's APIs, with seamless Claude Desktop integration.213MIT