HumanizeMCP
HumanizeMCP
Un servidor de Protocolo de Contexto de Modelo (MCP) de código abierto que reescribe la prosa generada por IA como si fuera escrita por humanos, con soporte de primer nivel para los escritores que los detectores identifican erróneamente.
Por qué existe esto
Investigadores de Stanford probaron siete detectores de IA importantes en ensayos del TOEFL escritos por personas cuyo idioma nativo no es el inglés y el 61,3% fueron clasificados como generados por IA. Los estudiantes estadounidenses nativos de octavo grado que escribieron el mismo tipo de ensayos fueron clasificados correctamente. Ese único resultado, publicado en Patterns (Cell Press, 2023), es la razón por la que existe este proyecto.
La misma firma estadística que los detectores llaman "IA" es también la firma de:
Escritores neurodivergentes, especialmente adultos autistas, cuya prosa tiende a una menor diversidad léxica, vocabulario más concreto y estructuras frasales repetidas.
Escritores de ESL (inglés como segunda lengua), cuya gramática derivada de libros de texto se lee como artificialmente regular.
Académicos en disciplinas formales, cuyo registro es, por diseño, uniforme y denso en marcadores del discurso.
Un estudio de Springer de 2026 midió la tasa de falsos positivos en el mundo real de Originality.ai en escritura académica en un 14%, un orden de magnitud por encima de la tasa declarada por la empresa. Las pruebas independientes de ZeroGPT en 2026 midieron un 26,4% de falsos positivos en ensayos de estudiantes y más del 21% en escritores de ESL.
Estos detectores se despliegan en flujos de trabajo académicos, laborales, editoriales y de visados. HumanizeMCP ofrece a los escritores afectados una herramienta para defenderse, construida sobre la literatura de evasión revisada por pares publicada, en lugar de las heurísticas de código cerrado enviadas por los humanizadores comerciales.
La base de evidencia completa se encuentra en research/. Lea docs/ETHICS.md para conocer el límite que trazamos entre el uso legítimo de accesibilidad y el fraude académico.
Related MCP server: originality-mcp
Qué es
HumanizeMCP es un servidor de Protocolo de Contexto de Modelo. Cualquier cliente compatible con MCP (Claude Code, GitHub Copilot CLI, Continue, Zed, Cursor y otros) puede llamar a sus herramientas. Se ejecuta localmente, no envía telemetría y las únicas llamadas de red que realiza son las descargas opcionales de modelos de Hugging Face en la primera ejecución.
Capacidades principales:
Un pipeline de 9 pasos (preprocesamiento, sustitución de indicadores superficiales, eliminación de marcas de agua, suavizado estilométrico, paráfrasis controlada, iteración guiada por detector, retrotraducción opcional, preservación de voz, verificación) siguiendo el diseño en
research/06_implementation_recommendations.md.Preajustes de estilo (
casual,blog,academic,esl,neurodivergent,preserve, ...) configurables por llamada.Evaluación comparativa de detectores locales frente a modelos abiertos (RoBERTa-OpenAI-detector, Fast-DetectGPT, Binoculars) además de adaptadores opcionales para APIs comerciales cuando el usuario proporciona su propia clave.
Un bucle de verificación e iteración (
humanize_and_verify) que rehumaniza hasta que se alcanza una puntuación objetivo del detector o se agota un presupuesto.
Inicio rápido
Instalación
# Using uv (recommended)
uv venv
source .venv/bin/activate
uv pip install -e .
# Or with pip
python -m venv .venv
source .venv/bin/activate
pip install -e .La primera llamada que toca un modelo de Hugging Face descargará los pesos en ~/.cache/huggingface/. El detector base (roberta-base-openai-detector) ocupa unos 500 MB.
Registrar con su cliente MCP
Claude Code (~/.config/claude-code/mcp.json o equivalente):
{
"mcpServers": {
"humanize": {
"command": "humanize-mcp"
}
}
}GitHub Copilot CLI (~/.copilot/mcp-config.json):
{
"mcpServers": {
"humanize": {
"command": "humanize-mcp"
}
}
}Si instaló en un virtualenv, apunte command a la ruta absoluta del script (/path/to/.venv/bin/humanize-mcp).
Primera llamada
Desde cualquier cliente MCP:
> use humanize on the following text with style="academic":
>
> In this paper, we delve into the multifaceted intricacies of consensus
> mechanisms — leveraging robust theoretical frameworks to underscore the
> pivotal role of decentralized governance in fostering trust.El servidor devuelve una reescritura que elimina el grupo delve, descompone el guion largo, varía la longitud de las oraciones y (si se usa humanize_and_verify) confirma con un detector local que la reescritura obtiene una puntuación por debajo del umbral de IA solicitado.
Referencia de herramientas
Todas las herramientas son invocables por MCP. Las firmas de tipo son aplicadas por Pydantic.
humanize(text, style="default", preserve_voice=True, intensity=0.7) -> str
Ejecuta el pipeline completo de humanización en text. intensity está en [0, 1] y se asigna a las palancas mínima/equilibrada/agresiva del dossier de investigación.
humanize(
text="The implementation leverages a robust framework...",
style="academic",
preserve_voice=True,
intensity=0.7,
)
# -> "The implementation uses a sturdy framework..."detect_tells(text) -> TellsReport
Localiza indicadores de IA sin reescribir. Devuelve números de línea, desplazamientos de caracteres, gravedad (1-5 estrellas coincidiendo con research/02_ai_tells_catalog.md) y sugerencias de sustitución.
detect_tells("We delve into the intricate tapestry of...")
# -> TellsReport(
# tell_count=3,
# tells=[TellLocation(category="excess_vocabulary", fragment="delve",
# line=1, char_start=3, char_end=8, severity=5,
# suggestion="examine"),
# ...],
# summary={"excess_vocabulary": 3},
# )score_humanity(text, detectors=["roberta-base"]) -> HumanityReport
Ejecuta uno o más detectores locales y devuelve probabilidades por detector más un agregado. El veredicto es uno de "human", "uncertain", "ai", "unknown".
score_humanity(text, detectors=["roberta-base", "fast_detect_gpt"])
# -> HumanityReport(
# detector_scores=[DetectorScore(detector="roberta-base",
# probability_ai=0.87, ...),
# DetectorScore(detector="fast_detect_gpt",
# probability_ai=0.91, ...)],
# aggregate_probability_ai=0.89,
# verdict="ai",
# )apply_style(text, style) -> str
Traducción de registro pura, sin humanización. Útil cuando desea pasar de académico a blog o de formal a casual sin tocar los indicadores de IA.
list_styles() -> list[str]
Enumera los preajustes de estilo registrados actualmente en styles/.
humanize_and_verify(text, style="default", target_ai_score=0.3, max_iterations=3) -> VerifyResult
Humaniza, puntúa, rehumaniza a mayor intensidad si la puntuación está por encima del objetivo, repite hasta alcanzar el objetivo o alcanzar max_iterations. Devuelve el texto final junto con las puntuaciones antes/después y un registro por iteración.
result = humanize_and_verify(text, target_ai_score=0.2, max_iterations=5)
print(result.final_score.aggregate_probability_ai) # e.g. 0.18
print(result.target_reached) # TruePreajustes de estilo
Definidos en styles/. El conjunto evoluciona a medida que madura el proyecto; llame a list_styles() para obtener la lista en vivo. El MVP incluye:
Preajuste | Diseñado para | Notas |
| Reescritura de propósito general | Intensidad equilibrada, preservación de voz conservadora |
| Correo personal, publicaciones sociales | Elimina formalidad, aumenta la variabilidad |
| Escritura personal de formato largo | Mantiene el ritmo del párrafo |
| Ponencias de congresos, tesis | Preserva marcadores del discurso, elimina el grupo |
| Escritores de inglés L2 | Preserva sintaxis más simple, elimina indicadores superficiales marcados por el detector |
| Escritores autistas / ND | Preserva estructuras frasales repetidas, baja diversidad léxica |
| "No cambies mi voz" | Solo indicadores superficiales, sin pasos de paráfrasis |
El esquema de preajustes y cómo añadir el suyo propio está documentado en docs/ARCHITECTURE.md.
Arquitectura
+------------------------+
| MCP Client (Claude |
| Code, Copilot, ...) |
+-----------+------------+
| stdio (MCP)
v
+------------------------+
| server.py (FastMCP) | <-- this package
+-----+-----+-----+------+
| | |
v v v
+--------+ +--------+ +----------+
| pipe- | | styles | | bench- |
| lines/ | | | | mark/ |
+--------+ +--------+ +----------+
| |
v v
+----------------------------+
| 9-pass pipeline: |
| 1. preprocess |
| 2. surface tells |
| 3. watermark scrub |
| 4. stylometric smoothing |
| 5. DIPPER paraphrase |
| 6. detector-guided loop |
| 7. back-translation (opt) |
| 8. style transfer |
| 9. verification |
+----------------------------+Arquitectura completa y puntos de extensión: docs/ARCHITECTURE.md.
Benchmarks
El arnés de evaluación comparativa reside en benchmark/ y actualmente se está desarrollando. Los números principales a continuación son marcadores de posición que el Ingeniero de Benchmarks reemplazará con valores medidos del conjunto de pruebas RAID.
Detector | Pre-humanización (media P(IA)) | Post-humanización (media P(IA)) | Reducción |
RoBERTa-OpenAI | TBD | TBD | TBD |
Fast-DetectGPT | TBD | TBD | TBD |
Binoculars | TBD | TBD | TBD |
GPTZero (API) | TBD | TBD | TBD |
Originality.ai (API) | TBD | TBD | TBD |
Reproducir localmente:
python -m benchmark.run --dataset raid_subset --pipeline defaultUso ético
Esta herramienta está construida para, y documentada en torno a, un uso legítimo de accesibilidad y equidad:
Un escritor neurodivergente cuya propia escritura está siendo clasificada erróneamente.
Un escritor de ESL cuya presentación académica está siendo marcada por una herramienta que ha sido medida independientemente con tasas de falsos positivos del 21-61% en su cohorte.
Un académico cuya prosa de disciplina formal está activando un detector frágil que no debería haberse desplegado en el flujo de trabajo de su institución.
Un periodista o ensayista que intenta escapar de la desplatificación impulsada por detectores.
Esta herramienta no está construida para, y los mantenedores no ayudarán con:
Enviar trabajo generado por LLM como su propia escritura en una tarea académica calificada que requiere autoría original.
Generar desinformación, spam o contenido diseñado para engañar a gran escala.
Derrotar detectores en contextos críticos para la seguridad (consejos médicos, presentaciones legales, divulgación relevante para la seguridad).
Los pipelines técnicos soportan a ambas poblaciones de manera idéntica; eso es inevitable y es la misma postura ética adoptada por Tor, Signal y cualquier herramienta de paráfrasis que haya existido. Lea la declaración completa en docs/ETHICS.md.
No enviamos ataques de homoglifos, eliminación de marcas de agua para modelos cerrados, inyección de caracteres de ancho cero ni ninguna técnica que rompa herramientas de accesibilidad como los lectores de pantalla. Esos son exploits, no humanización.
Citación
Si utiliza HumanizeMCP en una investigación, por favor cite el dossier y el proyecto:
@software{humanize_mcp_2026,
author = {Olivas, Kit},
title = {HumanizeMCP: an open-source MCP server for accessibility-first
AI-text humanization},
year = {2026},
url = {https://github.com/kitfoxs/humanize-mcp},
version = {0.1.0},
note = {Research dossier in research/, evidence base in
research/references.bib}
}El dossier de investigación en research/ es en sí mismo un documento citable y contiene la bibliografía completa del trabajo revisado por pares sobre el que se construye este proyecto.
Licencia
MIT. Ver LICENSE.
Agradecimientos
Construido por Kit Olivas (@kitfoxs) y Ada Marie.
El dossier de investigación se basa en el trabajo de Liang et al. (Stanford, 2023), Dugan et al. (RAID, 2024), Krishna et al. (DIPPER, 2023), Cheng et al. (Adversarial Paraphrasing, 2025), David & Gervais (AuthorMist, 2025), Kobak et al. (estudio de cambio de vocabulario, 2024), Juzek & Ward (análisis de palabras focales, 2024) y muchos otros. Citas completas en research/references.bib.
Un agradecimiento especial a los escritores, estudiantes y académicos cuyos relatos publicados sobre el daño de los falsos positivos motivaron este trabajo.
Available Tools
6 toolsapply_styleA
Apply a style preset to text without running humanization passes.
Useful when the caller wants pure register translation (formal to
casual, academic to blog, etc.) without removing AI tells. The set
of legal style names is whatever :func:list_styles returns.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The input prose. | |
| style | Yes | Name of a style preset registered in ``styles/``. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It clearly discloses that this tool does NOT humanize and performs only style/register transformation. It could add details about side effects or atomicity, but for a text-transform tool the key behavioral trait is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: a single lead sentence stating core action and exclusions, followed by a brief usage context. No redundant wording exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter set (text, style), output schema existence, and sibling context, the description fully covers what the tool does, when to use it, and how to obtain valid style values. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value beyond the schema by clarifying that 'style' is a registered preset (from list_styles) and providing examples of register translation. This supplements the schema's generic type/description information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Apply') and resource ('style preset to text') and clearly distinguishes itself from siblings by stating 'without running humanization passes.' This makes its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Useful when the caller wants pure register translation... without removing AI tells.' It also points to list_styles for legal style names, providing clear guidance on prerequisites and differentiation from humanization tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_tellsA
Locate AI writing tells in the input text.
Reports surface signatures catalogued in
research/02_ai_tells_catalog.md: excess vocabulary (the "delve"
cluster), em-dash overuse, sentence-initial discourse markers,
copular templates, conversational scaffolding, and parallel-structure
overuse. Each tell carries a 1-indexed line number, character offsets,
a 1-to-5 severity, and an optional substitution suggestion.
The intended use is diagnostic: surface what would be edited by
:func:humanize so a writer can decide which tells to preserve and
which to remove.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The input prose to scan. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tells | Yes | |
| summary | No | Count of tells per category. |
| tell_count | Yes | |
| text_length | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It details what the tool reports (specific signature categories) and the output structure (line number, offsets, severity, substitution), plus its diagnostic role. It does not mention read-only nature or error handling, but the scanning behavior is well defined.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with the core action in the first sentence. The subsequent sentences add concrete detail about signature types, returned fields, and intended use without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter detection tool with an output schema, the description is thorough: it states the purpose, lists detection categories, describes the output fields, and explains why a writer would use it. Some limitations (e.g., input length, language) are omitted, but they are minor and the overall context is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the single parameter 'text' as 'The input prose to scan' (100% coverage). The description adds minimal extra parameter meaning, only reinforcing that it scans prose. Therefore it meets the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb 'Locate' and a clear resource 'AI writing tells in the input text', then enumerates concrete tell categories and output fields. This clearly distinguishes it from sibling tools like humanize (which edits) by framing itself as diagnostic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the intended use: 'diagnostic: surface what would be edited by humanize so a writer can decide which tells to preserve and which to remove.' This tells the agent when to use it (before humanize) and expresses a clear alternative (humanize) but does not explicitly address all sibling tools like score_humanity, which might also be diagnostic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
humanizeA
Rewrite AI-generated text so it reads as human-authored.
Runs the configured pipeline of passes (preprocess, surface-tell
substitution, watermark scrub, stylometric smoothing, optional
paraphrase passes; see docs/ARCHITECTURE.md) and returns the final
text. For diagnostic output (per-pass diff, before/after detector
scores) use :func:humanize_and_verify instead.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The input prose to humanize. Markdown formatting is tolerated and normalized in the preprocess pass. | |
| style | No | Name of a style preset registered in ``styles/``. Common presets include ``"casual"``, ``"blog"``, ``"academic"``, ``"esl"``, ``"neurodivergent"``, ``"preserve"``. Use :func:`list_styles` to enumerate what is actually available at runtime. | default |
| intensity | No | Continuous control in [0, 1] mapping to the ``minimal`` / ``balanced`` / ``aggressive`` levers documented in the research dossier. Roughly: 0.0-0.33 minimal, 0.34-0.66 balanced, 0.67-1.0 aggressive. Higher values run more passes and apply heavier per-pass edits. | |
| preserve_voice | No | When True, the pipeline retains identifying stylistic features the author would want to keep (sentence-length distribution, lexical idiom, characteristic punctuation). When False, the pipeline is free to flatten voice in pursuit of detector evasion. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the internal pipeline (preprocess, surface-tell substitution, watermark scrub, stylometric smoothing, optional paraphrase passes), which is valuable behavioral context. It does not explicitly state whether the tool is read-only or has side effects, but for a text transformation tool this is largely implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: a one-sentence purpose, one sentence on process, and one sentence pointing to an alternative. Every sentence adds value with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (configurable pipeline) and rich schema/output schema, the description is complete enough for selection. It explains the purpose, distinguishes from the diagnostic variant, and provides a pointer to further architecture docs without over-explaining return values already covered by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The tool description itself does not add substantial parameter meaning beyond the schema; it references docs and list_styles but repeats concepts already covered in the schema's property descriptions. Thus it does not exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource+outcome: 'Rewrite AI-generated text so it reads as human-authored.' It distinguishes itself from sibling humanize_and_verify by explicitly noting that the latter provides diagnostic output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly tells when to use this tool vs the alternative: use humanize for the final text, and humanize_and_verify for diagnostic output. It also points to list_styles for enumerating available style presets, giving practical usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
humanize_and_verifyA
Humanize, then iterate against detectors until a target score is met.
v0.2.0 (Bet 3): wraps :class:pipelines.IterativeHumanizer, which
implements the Cheng et al. 2025 detector-guided loop (research/04
section 1.3). Each iteration:
Locates the worst-scoring paragraph in the current text.
Generates
candidates_per_iterationstochastic paraphrase candidates of that paragraph (viaParaphrasePass.paraphrase_candidates).Scores each candidate, keeps the lowest, splices it back in.
Re-scores the whole text. If at or below
target_ai_score, returns.
This replaces the v0.1.0 loop, which re-ran the deterministic 9-pass
pipeline at ramped intensities. As documented in
docs/REVIEW_v0.1.0.md section 2.9, every pass except 9-heavy is
idempotent on its own output, so iterations 2-3 of the old loop did no
work. The new loop is meaningfully different because it depends on
stochastic candidate generation: only non-deterministic search can
converge on a lower score after a deterministic fixed point.
The function always returns a result, even if the target was not
reached; callers should check target_reached to know.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The input prose to humanize. | |
| style | No | Name of a style preset; see :func:`list_styles`. | blog |
| max_iterations | No | Hard upper bound on improvement iterations. Must be >= 1. Iteration 0 is always the baseline humanization and does not count against this bound. | |
| target_ai_score | No | The aggregate probability_ai value below which the loop exits. Must be in [0, 1]. Cheng et al. 2025 use 0.15 as their stop value; we keep 0.3 ("comfortably human") as the default for backwards compatibility with v0.1.x callers. | |
| target_detector | No | Which detector field the loop optimizes against. ``"trusted_mean"`` (default) uses the suite's mean over detectors without documented bias caveats. ``"raw_mean"`` uses the unweighted mean across all detectors. Any other value is treated as a specific detector name (e.g. ``"roberta_openai"``). | trusted_mean |
| candidates_per_iteration | No | How many stochastic paraphrase candidates to generate per iteration. The Cheng et al. 2025 paper uses 3-5; we default to 3 as a quality / latency tradeoff. Must be >= 1. |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| notes | No | |
| iterations | Yes | |
| final_score | Yes | The full output of :func:`score_humanity`. |
| initial_score | Yes | The full output of :func:`score_humanity`. |
| total_time_ms | No | Total wall-clock time including baseline humanization. |
| target_reached | Yes | |
| target_ai_score | Yes | |
| target_detector | No | Which detector field the loop optimized against. One of "trusted_mean", "raw_mean", or a specific detector name. |
| per_iteration_scores | No | Whole-text AI probability after iteration 0 (baseline) then after each accepted improvement. Empty if scoring was unavailable. |
| candidates_per_iteration | No | How many stochastic paraphrase candidates were generated per iteration. 1 reduces the loop to deterministic paraphrasing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden and does well: it explains the stochastic candidate generation, the per-iteration splicing, and the critical behavior that the function always returns a result, requiring the caller to check 'target_reached'. It also discloses the algorithm's reliance on non-determinism to break fixed points, adding meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a one-sentence purpose and uses numbered steps for algorithm clarity. The historical comparison to v0.1.0 adds several sentences, but it serves to explain why the loop is stochastic, which is behaviorally relevant. It is longer than strictly necessary but well-structured and justifiable for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the iterative process, parameter behavior, and return-value expectations (checking 'target_reached'). It does not explicitly contrast with sibling tools, but the tool is complex and the description provides enough detail to understand its role. The presence of an output schema also offloads return-structure details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for all six parameters, so the schema already provides defaults, constraints, and semantics. The description does mention 'candidates_per_iteration' and 'target_ai_score' in the loop description, but this adds only illustrative context rather than new parameter meaning beyond the schema's own thorough explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence 'Humanize, then iterate against detectors until a target score is met' clearly specifies the verb (humanize and verify), resource (text), and goal (target score). This distinguishes the tool from siblings like 'humanize' by emphasizing the iterative detector-guided loop rather than a single-pass transformation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for cases where a target AI score must be reached, but it never explicitly states when to prefer this over sibling tools such as 'humanize' or 'score_humanity'. It provides no exclusions or alternative conditions, and the 'always returns a result even if target was not reached' note is more behavioral than usage-oriented.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_stylesA
List the names of all currently registered style presets.
Style presets are loaded from the styles/ package. If the package
is unavailable an empty list is returned.
Returns
list of str
Sorted list of preset names, e.g. ["academic", "blog", "casual", "esl", "neurodivergent", "preserve"].
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return type (list of str), sorted order, example values, and an edge case (empty list if package unavailable). This gives the agent an accurate expectation of behavior, though it doesn't explicitly state side-effect-free behavior (which is implied by 'list').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a single purpose line, a brief source/edge-case note, and a Returns section with type and example. Every sentence adds value without unnecessary fluff, and the formatting is clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameter-less listing tool with an output schema, the description is complete. It explains what is returned, the ordering, a representative example, and what happens if the package is unavailable. No critical information is missing for the agent to effectively invoke and use this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is an empty object. The description adds no parameter details, but none are needed. The baseline for a zero-parameter tool is 4, and the description provides relevant return-value context that compensates adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List the names of all currently registered style presets.' This uses a specific verb (list) and resource (style presets), distinguishing it from siblings like apply_style or humanize. It also adds context about the source package and an example output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by explaining the purpose (listing preset names) and the behavior when the package is unavailable. While it doesn't explicitly mention alternatives or when not to use it, the intended use as a lookup tool is evident. The absence of explicit exclusions is acceptable for such a simple read-only operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
score_humanityA
Score how AI-like the text reads to one or more open detectors.
Wraps the local detector adapters in benchmark/. The default
detector list is ["roberta-base"] (the canonical academic
baseline; see research/01_detector_landscape.md). Other adapters
such as "fast_detect_gpt" and "binoculars" are added as the
benchmark package matures.
Aggregate probability is the arithmetic mean of detector scores that
returned successfully. If every detector failed, aggregate is
-1.0 and the verdict is "unknown".
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The input prose to score. | |
| detectors | No | Names of detector adapters to run. Defaults to ``["roberta-base"]`` if not given or empty. |
Output Schema
| Name | Required | Description |
|---|---|---|
| verdict | Yes | One of "human", "uncertain", "ai", or "unknown". |
| text_length | Yes | |
| detector_scores | Yes | |
| aggregate_probability_ai | Yes | Mean of successful detector probability_ai scores. Equals -1.0 if no detector returned a score. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for disclosure. It explains key behaviors: aggregate probability as arithmetic mean, failure handling (if every detector fails, aggregate is -1.0 and verdict is 'unknown'), and the default detector list. This goes beyond the schema and gives the agent a solid understanding of expected outcomes and edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a clear one-sentence purpose, followed by concise details on defaults, adapter examples, and aggregate behavior. Every sentence earns its place without unnecessary fluff. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, parameters, default behavior, and edge-case output. Since an output schema exists, the return structure is already defined, but the description adds crucial context about the aggregate value and verdict string. For a tool with 2 parameters and moderate complexity, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaningful context. It clarifies the 'detectors' parameter with the default value, the empty-list behavior, and examples of allowed adapter names. The description also explains how outputs are aggregated, which is directly relevant to interpreting the parameters. This significantly enriches the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Score how AI-like the text reads to one or more open detectors.' This clearly states the tool's function and distinguishes it from siblings like humanize (which transforms text) and detect_tells (which likely identifies tells). The reference to detectors also sets it apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for scoring AI-likeness but does not explicitly state when to prefer this over alternatives. It mentions the default detector list and adapters, giving context about configuration, but it does not contrast with sibling tools or provide exclusion criteria. Usage guidance is clear enough for a scoring tool but not explicitly framed as 'use when...'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
apply_style - First observed
detect_tells - First observed
humanize - First observed
humanize_and_verify - First observed
list_styles - First observed
score_humanity
TDQS
Scored across 6 tools
Most tools are clearly distinct: detect_tells, score_humanity, apply_style, and list_styles each serve unique purposes. The only potential confusion is between humanize and humanize_and_verify, but their descriptions clearly delineate the simple pipeline from the iterative verification loop, so agents should be able to choose correctly.
All tool names follow a consistent verb_noun pattern: humanize, detect_tells, score_humanity, apply_style, list_styles, humanize_and_verify. Even the compound name follows the convention. No mixing of styles or vague verbs.
Six tools is well-scoped for a text humanization server. Each tool covers a distinct aspect: core humanization, diagnostic analysis, scoring, style control, and verification loop. This is an appropriate size without redundancy or bloat.
The toolset provides complete coverage of the humanization workflow: humanize for direct rewriting, humanize_and_verify for iterative improvement, detect_tells for diagnostics, score_humanity for evaluation, and apply_style/list_styles for style manipulation. There are no obvious gaps in the lifecycle.
Maintenance
Related MCP Connectors
An MCP server that integrates with Discord to provide AI-powered features.
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
Walter Remote MCP Server — AI humanization and detection tools
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceHumanizer PRO - The Best AI Text Humanizer MCP Server Transform AI-generated content into natural, human-sounding text that bypasses GPTZero, Turnitin, Originality.ai, Copyleaks, ZeroGPT, and other AI detectors. Undetectable AI content rewriting with Stealth, Academic, and SEO modes.3-
- FlicenseAqualityCmaintenanceMCP server for Originality.ai that provides tools for AI detection, plagiarism checking, fact verification, readability analysis, grammar/spelling, and SEO optimization.52-
- AlicenseNot gradedqualityDmaintenanceDetects and fixes LLM prose patterns in text, exposing tools for auditing and improving writing quality in MCP-compatible hosts.19 npm2MIT
- FlicenseNot gradedqualityDmaintenanceA local-first MCP server that builds compact voice profiles from writing samples, then compares, rewrites, or generates new text in that voice.-