humanpen-mcp
OfficialThe humanpen-mcp server provides document processing tools to humanize, fix citations, condense, and translate documents, as well as read AI detection reports and manage jobs, with credit-based billing. Key capabilities:
Humanize documents: Rewrite
.docxor.pptxfiles to lower AI detection scores. Optionally provide a Turnitin/iThenticate report to target only flagged passages, with intensity settings (conservative, balanced, aggressive). Free re-humanization is available if the document is still flagged—submit a new report and re-process at no cost (subject to daily cap).Fix citations: Convert citation styles in
.docxfiles to APA 7, MLA 9, Harvard, Chicago, IEEE, Vancouver, GB/T 7714, AMA, ACS, OSCOLA, etc., without altering body text.Condense: Shorten
.docxfiles to a specified word count while preserving meaning and structure.Translate: Translate various formats (
.docx,.pdf,.pptx,.xlsx,.epub,.html,.txt) between 12 languages: Chinese, English, Japanese, Korean, Spanish, French, Portuguese, Russian, German, Polish, Italian, Traditional Chinese, preserving layout, tables, images, and formulas.Read AI detection reports: Parse Turnitin/iThenticate PDFs to extract overall AI percentage and flagged passages (free).
Check job status: Look up a job by ID and retrieve its result.
Check credit balance: View remaining credits. Credits are charged at 100 per 1,000 words (minimum 10) for document-processing tasks; detection report reading and job status checks are free.
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., "@humanpen-mcpHumanize my document to reduce AI detection score."
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.
humanpen-mcp
Website · Pricing · Developer docs
Keywords: ai humanizer, mcp server, model context protocol, turnitin ai detection, reduce ai score, humanize ai text, bypass ai detection, docx ai humanizer, ai content rewriter, ai writing tool, claude mcp, cursor mcp, ithenticate ai report
Humanize what's flagged. Preserve the rest. An MCP server for HumanPen — a document-level AI humanizer that can humanize an entire document, rewrite user-selected passages, or automatically target flagged text from a Turnitin / iThenticate AI-detection report, editing .docx / .pptx files in place while preserving formatting, tables, images, citations, and formulas. Also converts citations between 12 styles, condenses to a word budget, and translates between 12 languages.
claude mcp add humanpen -s user -e HUMANPEN_API_KEY=hp_your_key -- npx -y humanpen-mcpFeatures
Selective rewriting by detection report — import a Turnitin / iThenticate AI Writing Report to pinpoint flagged passages; unflagged content is never touched
Format in, format out — a DOCX comes back as a DOCX, a PPTX as a PPTX; formatting, tables, images, and formulas survive intact and the result is still editable
Academic structure preserved — in-text citations, reference lists, footnotes, TOC fields, cross-references, figure numbering, equations, and special formatting are treated as protected objects
No error injection — restructures meaning and syntax to change expression; never adds grammar mistakes, spelling errors, or awkward sentences as a detection strategy
Full-length documents — no per-input word limit; a single file can be up to 100 MB, no splitting into text boxes
Free to keep going — still flagged? Re-humanize for free with a fresh report until the AI rate falls to
*or 0%Word-count control (experimental) — set a min/max word range to keep the output within a target length
Pay per rewrite — billed on words actually changed, not the whole document; failed and cancelled jobs cost nothing; credits never expire
Related MCP server: docx-forge-mcp
Get a key
Sign up at https://humanpen.net and create a key at https://humanpen.net/settings/api-keys. New accounts start with free credits, enough to put a document through and see what comes back.
The key goes in an environment variable, never in a URL. URLs end up in server logs, proxy logs, shell history and screenshots.
Install
claude mcp add humanpen -s user -e HUMANPEN_API_KEY=hp_your_key -- npx -y humanpen-mcp-s user puts it in every project. The default scope is local, which
loads the server only in the directory you ran the command from — and looks
like a broken install the first time you open Claude Code somewhere else.
If your version rejects -e (reported
upstream), use the JSON
form:
claude mcp add-json humanpen -s user '{"command":"npx","args":["-y","humanpen-mcp"],"env":{"HUMANPEN_API_KEY":"hp_your_key"}}'In ~/.codex/config.toml:
[mcp_servers.humanpen]
command = "npx"
args = ["-y", "humanpen-mcp"]
env = { HUMANPEN_API_KEY = "hp_your_key" }codebuddy mcp add --scope user humanpen -- npx -y humanpen-mcpIt also reads ${VAR} in its config, so the key can stay in your environment
instead of the file:
{ "mcpServers": { "humanpen": {
"command": "npx", "args": ["-y", "humanpen-mcp"],
"env": { "HUMANPEN_API_KEY": "${HUMANPEN_API_KEY}" }
} } }~/.codebuddy/.mcp.json for every project, <project>/.mcp.json for one.
It has gemini mcp add, but the argument order differs between versions — run
gemini mcp add --help and follow the usage line it prints. Pass the key with
-e HUMANPEN_API_KEY=... and the scope with -s user; the default is
project, which is only the directory you ran it in.
In claude_desktop_config.json. Use the absolute path to npx — run
which npx and paste the result: a desktop app is launched by the OS with a
minimal PATH, so the bare name that works in your terminal often is not found
here, and the only symptom is that the tools never appear.
{
"mcpServers": {
"humanpen": {
"command": "npx",
"args": ["-y", "humanpen-mcp"],
"env": { "HUMANPEN_API_KEY": "hp_your_key" }
}
}
}All three read the same shape — Cursor in .cursor/mcp.json, Windsurf in
~/.codeium/windsurf/mcp_config.json, Cline in its MCP settings panel:
{
"mcpServers": {
"humanpen": {
"command": "npx",
"args": ["-y", "humanpen-mcp"],
"env": { "HUMANPEN_API_KEY": "hp_your_key" }
}
}
}In opencode.json — the key names differ slightly from everyone else's:
{
"mcp": {
"humanpen": {
"type": "local",
"command": ["npx", "-y", "humanpen-mcp"],
"environment": { "HUMANPEN_API_KEY": "hp_your_key" }
}
}
}{
"mcp": {
"inputs": [
{ "type": "promptString", "id": "humanpenKey", "description": "HumanPen API key", "password": true }
],
"servers": {
"humanpen": {
"command": "npx",
"args": ["-y", "humanpen-mcp"],
"env": { "HUMANPEN_API_KEY": "${input:humanpenKey}" }
}
}
}
}VS Code prompts once and stores the key in its secret store, so it never lands in a file you might commit.
git clone https://github.com/humanpen/humanpen-mcp
cd humanpen-mcp && npm install && npm run buildThen point your client at node /path/to/humanpen-mcp/dist/index.js instead of
npx -y humanpen-mcp.
Any MCP client works: this is a plain stdio server started by
npx -y humanpen-mcp with HUMANPEN_API_KEY in its environment.
Tools
Tool | What it does | Credits |
| Rewrite a | yes |
| Continue a finished | free |
| Convert in-text citations and the reference list to APA 7, MLA 9, Harvard, Chicago, IEEE, Vancouver, GB/T 7714, AMA, ACS or OSCOLA. Body text untouched. | yes |
| Shorten a | yes |
| Translate | yes |
| Read a Turnitin or iThenticate AI Writing report: overall AI percentage and the flagged passages. | free |
| Look up a job and download its result. | free |
| Credits remaining. | free |
Two things worth knowing
Jobs take minutes; tool calls do not. Each operation waits about 55 seconds
— enough for most documents — then returns a job_id with a note to call
check_job. The work continues on the server either way; nothing is lost by the
tool returning early.
ai_percent can be null, and that is usually good news. Turnitin prints
* instead of a number whenever AI writing comes in under 20% — it will not
quantify that band, because too much of it is false positives. So null means
"under 20%, and Turnitin will say no more", never "0%" and never "no result".
Questions people ask
Will this bring a Turnitin AI score down?
Usually under 20% in one pass with balanced — the threshold below which
Turnitin prints * instead of a number. If it misses, hand the result back with
the new report; only the passages still flagged get rewritten.
Does it work with iThenticate too? Yes — pass either report. The format is read from the file.
Is my document sent to the model? No. It uploads the file and answers with a path. A 40-page paper costs no tokens.
Privacy Policy
Documents you pass to a tool are uploaded over HTTPS to HumanPen's API
(api.humanpen.net) for processing; results are written back to your disk, and
processed files are kept server-side for about 7 days so check_job and the
free re-humanize pass can find them. Document contents never enter the model's
context. The full policy — what is collected, retention, and how to reach us —
is at https://humanpen.net/legal/privacy.
Development
npm install
npm run build
HUMANPEN_API_KEY=hp_... node selftest.mjs sample.docx report.pdfselftest.mjs spawns the built server and talks JSON-RPC to it over stdio the
way a real client does — proving the protocol, the tool registrations, stdout
hygiene and one end-to-end job, not merely that the functions return. It needs a
live key and spends credits, so it is a pre-release check rather than a CI step.
Links
humanpen-skill — the same operations as an Agent Skill, if you would rather not run a server
Apache-2.0
Available Tools
8 toolscheck_jobCheck a jobA
Look up a job by id, and download its result if it has finished. Use this after a tool returned before the job was done.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The job id an earlier call returned | |
| output_path | No | Where to write the result | |
| document_path | No | The original document, so a downloaded result can be named after it |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations mark it as not read-only, and the description is consistent by disclosing that it may download a result. However, it does not explain what happens if the job is still running, failed, or how polling should be handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no wasted text, and the primary action is front-loaded.
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?
It covers the basic purpose and timing for a job-checking tool, but without an output schema it does not describe return values or behavior when the job is incomplete or fails. The schema documents the parameters, but the description leaves some operational gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema. The description mentions looking up by id and downloading a result but adds no extra detail about output_path or document_path beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: look up a job by id and download its result if finished. It is clear and actionable, though it does not explicitly distinguish this job-checking tool from any sibling tool.
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 gives a clear usage condition: use this after a tool returned before the job was done. It does not state when not to use it or describe alternatives, but the triggering scenario is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
condense_documentCondense a documentA
Shorten a .docx to a target word count, keeping meaning, structure and citations. Saves the result next to the source and returns its path. COSTS CREDITS at 20 per 1,000 words processed (10 minimum) - say so and get agreement first.
| Name | Required | Description | Default |
|---|---|---|---|
| max_words | Yes | Target word count for the whole document | |
| output_path | No | Where to write the result; defaults to beside the source | |
| instructions | No | Extra requirements for this job | |
| wait_seconds | No | How long to wait before returning a job id (default 55) | |
| document_path | Yes | Absolute path to the .docx |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: output is saved next to the source, a path is returned, and the operation burns credits at 20/1,000 words with a 10 minimum. Minor gap: it implies a synchronous path return while the wait_seconds parameter suggests a job-id/async mode that the description never explains.
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 tight sentences: what it does, what it produces, then the cost warning. The most decision-critical information (credit cost and consent requirement) is placed where it will be read, with no filler.
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 5-parameter mutation tool with no output schema, the description covers purpose, output location, and cost—the things an agent most needs. The async job-id flow implied by wait_seconds and the check_job sibling is left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already documented. The description only reinforces max_words and the default output location, adding no syntax, format, or constraint detail beyond the schema. Baseline 3 applies.
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 ('Shorten a .docx to a target word count') plus the invariants it preserves (meaning, structure, citations). This is clearly distinct from siblings like humanize_document, translate_document, and fix_citations.
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 an explicit operational precondition ('say so and get agreement first') for the credit cost, which is a real gating instruction. It does not explicitly name alternatives or when-not-to-use, but the credit caveat is a strong usage signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fix_citationsConvert citation formatA
Rewrite a .docx's in-text citations and reference list into one target style, leaving the body text alone. Saves the result next to the source and returns its path. COSTS CREDITS at 5 per 1,000 words processed (10 minimum) - say so and get agreement first.
| Name | Required | Description | Default |
|---|---|---|---|
| style | Yes | Target style: apa7, mla9, harvard, chicago_author_date, chicago_notes, ieee, vancouver, gbt7714, gbt7714_author_year, ama, acs, or oscola | |
| output_path | No | Where to write the result; defaults to beside the source | |
| instructions | No | Extra requirements for this job | |
| wait_seconds | No | How long to wait before returning a job id (default 55) | |
| document_path | Yes | Absolute path to the .docx |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: it discloses that only citations and the reference list are touched, that a new file is written beside the source, that the path is returned, and a concrete credit price with a 10-credit floor. The agreement-before-charging instruction is exactly the kind of behavioral context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying distinct information: what changes, what is produced, and what it costs. The cost warning is capitalized and front-loaded enough to catch the eye before invocation.
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?
It covers scope, output location and pricing, and the missing output schema is offset by the stated return value. The gap is the async surface: wait_seconds and a job id are never mentioned, so an agent is not told that it may need to poll via check_job.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so style, output_path, instructions and wait_seconds are already documented in the schema and the description correctly does not repeat them. It adds only the notion of a single 'target style' and the beside-source default, both of which the schema already states, so this is baseline territory.
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 .docx's in-text citations and reference list') plus a precise scope constraint ('leaving the body text alone'). That scope line alone distinguishes it from any formatting-adjacent sibling and tells an agent exactly what changes and what does not.
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 an explicit precondition for invocation ('say so and get agreement first') tied to the credit cost, which is real usage guidance rather than none. It stops short of naming when-not-to-use-it or pointing at siblings like humanize_document, but the domain is different enough that little inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
free_rehumanizeRe-humanize a job's still-flagged passages for freeA
Continue a finished humanize job for FREE. Upload a fresh detection report for that job's result; only the passages it still flags are rewritten, at no credit cost. The server enforces strict limits: one free continuation per job, a per-day cap, the report must be of THAT job's own result (>=90% match) and show >=20% AI, and the result must still exist (kept ~7 days). If a limit is not met it returns a clear reason - relay it and stop; do not retry or silently fall back to a paid job. Pass the job_id a prior humanize_document (or check_job) returned.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The finished humanize job to continue (its job_id from humanize_document/check_job) | |
| segments | No | Per-passage word control for the still-flagged passages (optional), same shape and experimental caveat as humanize_document.segments | |
| output_path | No | Where to write the result; defaults to beside the report | |
| report_path | Yes | Absolute path to the fresh Turnitin/iThenticate report for that job's result | |
| instructions | No | Extra requirements for this job | |
| wait_seconds | No | How long to wait before returning a job id (default 55) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations by disclosing enforcement rules the agent cannot infer: one free continuation per job, a per-day cap, a >=90% report match requirement, a >=20% AI threshold, and a ~7-day result retention window. It also specifies failure behavior ('returns a clear reason - relay it and stop'), which is the most operationally important trait here.
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-loads the free-continuation purpose, then constraints, then the failure directive, then the parameter hint — a sensible priority order. Every sentence carries a distinct rule; nothing is redundant with the schema or annotations.
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 6-parameter, no-output-schema tool, the description covers preconditions, cost, limits, failure handling, and where job_id comes from. There is no output schema, and the description still tells the agent what to expect back (a job id or a clear refusal reason).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: job_id must come from a prior humanize_document or check_job call, and report_path must be a report of that job's own result. It leaves segments, output_path, and wait_seconds to the schema, which is reasonable since those are already documented.
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 ('Continue a finished humanize job') plus a distinctive constraint ('for FREE') that separates it from the sibling humanize_document. It also names the input artifact (a fresh detection report) and its effect (only still-flagged passages are rewritten), so an agent can identify the tool without opening the 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?
Explicitly scopes usage: only for an already-finished humanize job, requires a report of THAT job's result, and only runs once per job. It also closes off wrong behavior directly ('do not retry or silently fall back to a paid job'), which is precisely the routing decision an agent could get wrong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_credit_balanceCheck the credit balanceARead-only
How many credits the account has. Per 1,000 words processed: humanize 100 credits, citation fixes 5, condensing 20, translation 10, with a 10-credit minimum per job. Worth checking before a large document.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, so the description's value-add is the cost model: per-1,000-word rates for humanize/citation/condense/translate plus a 10-credit per-job minimum. That is genuinely useful planning context not present in any structured field. It stops short of describing the response shape or whether the balance is account- or workspace-scoped.
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 tight sentences: identity first, pricing second, usage recommendation last. Every clause carries information an agent would actually use, with no restatement of the title or 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?
For a zero-parameter read with no output schema, the description covers what it does, what things cost, and when to call it. The only gap is what the returned balance actually looks like (remaining vs. total, units), which an agent must infer.
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 for the description to disambiguate. The added per-unit cost detail is helpful orientation rather than parameter semantics.
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 states exactly what is returned — the account's credit count — which is unambiguous against siblings like check_job or read_detection_report. The verb is implicit (phrased as a question) rather than an explicit 'retrieve', which keeps it just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Worth checking before a large document' gives a concrete trigger condition, and the cost table lets the agent decide whether a job is affordable. No other balance-related sibling exists, so no exclusions are needed, but it never states what to do if the balance is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
humanize_documentHumanize a documentA
Rewrite a .docx or .pptx so it reads as human-written and scores lower on AI detectors, keeping meaning, citations, tables and layout. Optionally pass a Turnitin/iThenticate AI report to rewrite only the passages it flagged. If a fresh report still flags the result, run this tool again on the rewritten file with that new report - only the still-flagged passages are touched, and balanced remains the right strategy for the second pass. Saves the result next to the source and returns its path. COSTS CREDITS at 100 per 1,000 words processed (10 minimum) - say so and get agreement first.
| Name | Required | Description | Default |
|---|---|---|---|
| segments | No | Per-passage word control (optional): each item is a flagged passage plus its own min_words/max_words. Get the passage texts from read_detection_report and pass report_path alongside so the report defines scope. Experimental, same caveat as min_words. Cannot combine with the whole-document min_words/max_words. | |
| strategy | No | Rewriting intensity; balanced is the usual first choice, aggressive rewrites more heavily | |
| max_words | No | Upper word bound for the rewritten document (optional; omit for no limit). Same experimental caveat and exclusivity as min_words. | |
| min_words | No | Lower word bound for the rewritten document (optional; omit for no limit). Experimental - a word limit noticeably weakens AI-rate reduction, so omit unless the user requires a length. Cannot combine with report_path or segments. | |
| output_path | No | Where to write the result; defaults to beside the source | |
| report_path | No | Path to a Turnitin/iThenticate AI report PDF; only its flagged passages are rewritten | |
| instructions | No | Extra requirements for this job | |
| wait_seconds | No | How long to wait before returning a job id (default 55) | |
| document_path | Yes | Absolute path to the .docx or .pptx to rewrite |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say destructiveHint=false and readOnlyHint=false; the description adds the substantive behavior: 100 credits per 1,000 words (10 minimum) with a requirement to disclose and get consent, the result saved beside the source with a returned path, and the iterative second-pass semantics. That is far beyond what the annotations convey.
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 core action and preserved invariants are front-loaded, and the credit warning is capitalized and placed where it will be read. It is longer than typical but each sentence carries operational information, with only mild redundancy between the description and the schema on word-limit caveats.
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 paid, iterative mutation tool with no output schema, the description covers cost and consent, result location and return value, the report-scoped mode, and the rerun workflow. An agent has everything needed to call it and set expectations correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning the schema doesn't: 'balanced' remains correct for a second pass, and report_path scopes rewriting to flagged passages. It doesn't add syntax detail for output_path, instructions, or wait_seconds, keeping it at 4.
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 (rewrite), the exact resource types (.docx/.pptx), the goal (lower AI-detector scores) and the invariants preserved (meaning, citations, tables, layout). An agent can distinguish this from condense_document or translate_document without opening the 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 gives explicit when-to-use detail: optionally pass a Turnitin/iThenticate report to scope rewriting, and rerun with a fresh report if the result is still flagged. It also mandates getting user agreement before spending credits. It stops short of naming alternatives like free_rehumanize for the free path, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_detection_reportRead an AI-detection reportARead-only
Read a Turnitin or iThenticate AI Writing report PDF: returns the overall AI percentage and the flagged passages. Free - reads the file without starting a job. Pass the same report to humanize_document to rewrite only what was flagged.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Which product exported it; omit to identify it from the file | |
| report_path | Yes | Absolute path to the report PDF | |
| include_segments | No | Include the flagged passage texts, which can be long (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered; the description adds genuine context beyond that — the operation is free, does not start a job, and is the input to humanize_document. It stops short of describing failure modes for malformed or non-AI-writing PDFs, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the verb, resource, and payload, then cost/side-effect, then the handoff to the sibling tool. No filler and nothing an agent needs is buried.
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 carries the return-value burden and does so by naming the overall AI percentage and flagged passages. The one gap is error behavior for unreadable or unsupported PDFs, but for a simple read-only parse tool this is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (including the enum and the default-false include_segments) are already documented in the schema. The description mentions the return of flagged passages but adds no format or syntax detail beyond the schema, so baseline 3 applies.
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 ('Read a Turnitin or iThenticate AI Writing report PDF') and explicitly lists the return payload: overall AI percentage and flagged passages. This is clearly distinguishable from siblings like humanize_document or check_job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly notes 'Free - reads the file without starting a job,' which tells the agent no job/credit path is involved, and it names the downstream alternative: pass the same report to humanize_document to rewrite only flagged content. Both when-to-use and what-to-do-next are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translate_documentTranslate a documentA
Translate a document into another language while keeping its layout, tables, images and formulas. Takes .docx, .pdf, .pptx, .xlsx, .epub, .html and .txt. Saves the result next to the source and returns its path. COSTS CREDITS at 10 per 1,000 words processed (10 minimum) - say so and get agreement first.
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No | Where to write the result; defaults to beside the source | |
| source_lang | No | Source language, or auto to detect it (the default) | |
| target_lang | Yes | Target language: zh, en, zh-tw, ja, ko, es, fr, pt, ru, de, pl or it | |
| wait_seconds | No | How long to wait before returning a job id (default 55) | |
| document_path | Yes | Absolute path to the document |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it is a non-read-only, non-destructive write; the description adds the real behavioral facts an agent needs: credit cost and rate (10 per 1,000 words, 10 minimum), that output is saved beside the source, and that a path is returned. It omits that the call may return a job id requiring the check_job sibling, which is the one significant undisclosed trait.
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 tightly packed sentences led by the core action, then scope, then output, then the cost warning in caps. Every sentence carries distinct information and nothing is repeated from the schema.
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 paid mutation tool it covers the essentials: what is preserved, accepted formats, where output lands, what is returned, and the cost/consent requirement. The missing piece is the asynchronous job-id path (wait_seconds default 55, then check_job), which an agent needs to complete the workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema; the description only reinforces the default output location ('saves the result next to the source'). It adds no language-format guidance or detail on wait_seconds/job behavior beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (translate a document) plus the distinguishing property that sets it apart from siblings like condense_document or humanize_document: layout/tables/images/formulas are preserved, and a file is written. The supported format list further pins down exactly what it operates on.
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 a concrete, actionable usage rule: it costs credits, so the agent must say so and get agreement first. It does not name a sibling alternative or state when-not to use it (e.g. condense vs translate), so it falls short of the explicit routing seen in top-tier definitions.
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.
2 tool updates
v1.4.0- Added
free_rehumanize - Changed
humanize_document5 fields changed- added
Input schema / properties / max_wordsAdded value: +{ + "description": "Upper word bound for the rewritten document (optional; omit for no limit). Same experimental caveat and exclusivity as min_words.", + "exclusiveMinimum": 0, + "type": "integer" +} - added
Input schema / properties / min_wordsAdded value: +{ + "description": "Lower word bound for the rewritten document (optional; omit for no limit). Experimental - a word limit noticeably weakens AI-rate reduction, so omit unless the user requires a length. Cannot combine with report_path or segments.", + "exclusiveMinimum": 0, + "type": "integer" +} - added
Input schema / properties / segmentsAdded value: +{ + "description": "Per-passage word control (optional): each item is a flagged passage plus its own min_words/max_words. Get the passage texts from read_detection_report and pass report_path alongside so the report defines scope. Experimental, same caveat as min_words. Cannot combine with the whole-document min_words/max_words.", + "items": { + "additionalProperties": false, + "properties": { + "max_words": { + "description": "Upper word bound for this passage once rewritten", + "exclusiveMinimum": 0, + "type": "integer" + }, + "min_words": { + "description": "Lower word bound for this passage once rewritten", + "exclusiveMinimum": 0, + "type": "integer" + }, + "text": { + "description": "The exact flagged passage text to bound", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "text" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - changed
Input schema / properties / strategy / descriptionPrevious value: -"Rewriting intensity; balanced is the usual first choice"New value: +"Rewriting intensity; balanced is the usual first choice, aggressive rewrites more heavily" - changed
Input schema / properties / strategy / enumPrevious value: -[ - "conservative", - "balanced", - "aggressive", - "balanced_v2", - "aggressive_v2" -]New value: +[ + "balanced", + "aggressive" +]
7 tool updates
v1.0.0- First observed
check_job - First observed
condense_document - First observed
fix_citations - First observed
get_credit_balance - First observed
humanize_document - First observed
read_detection_report - First observed
translate_document
TDQS
Scored across 8 tools
Most tools have clearly distinct purposes: document transformation tools are separated by operation, and utility tools like get_credit_balance, read_detection_report, and check_job are unambiguous. The main potential confusion is between humanize_document and free_rehumanize, but their descriptions explicitly distinguish paid new jobs from free continuation of an existing job.
All names use consistent snake_case and are highly readable. Most follow a verb_noun pattern, though free_rehumanize begins with an adjective rather than a verb, which is a minor deviation from the otherwise predictable naming scheme.
Eight tools is well-scoped for a document-processing service with humanization, citation fixing, condensing, translation, reporting, job checking, and credit balance. Each tool appears to earn its place without excessive surface area.
The surface covers the core lifecycle: read detection reports, transform documents, check jobs, continue humanization for free, and check credits. Minor gaps exist around job history/listing, cancellation, or richer account usage management, but agents can work around these for the stated purpose.
Maintenance
Related MCP Connectors
Document-to-Markdown MCP server — convert PDF, Office and HTML into LLM-ready Markdown.
Walter Remote MCP Server — AI humanization and detection tools
An agent-first office suite Claude & ChatGPT read and write over one MCP URL.
Document conversion MCP server: PDF to Markdown, image OCR, spreadsheet parsing.
Related MCP Servers
- AlicenseAqualityNot gradedmaintenanceAn MCP server that enables AI agents to instantly convert Markdown into beautiful, ready-to-deliver Word, PDF, HTML with sidebars, and Slideshow documents, bridging the "last mile" of AI content generation.728 npm1-
- AlicenseAqualityDmaintenanceMCP server for Word document (.docx) creation and manipulation — the production-grade document automation tool for AI agents.918 npmMIT
- FlicenseNot gradedqualityCmaintenanceMCP server that provides document conversion and processing tools, enabling AI assistants to handle document formats through natural language.-
- FlicenseNot gradedqualityCmaintenanceMCP server for document conversion and processing, enabling AI assistants to handle various document formats.-