Find AI-isms with evidence and fingerprint a writing voice from samples. 3 of 5 free.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Scan a draft for the measurable tells of AI-generated prose. FREE. Flags stock phrases (with exact quotes), structural reflexes, uniform sentence rhythm, em-dash overuse, and hedging boilerplate — every flag cites the actual text. Typical input {"text": "<draft>"} returns {"reads_human_score": 0-100, "metrics": {"burstiness": ..., "avg_sentence_len": ..., ...}, "evidence": [{"type": "stock_phrase", "quote": "..."}], "note": "..."}. Use for a first read on whether a draft carries machine-writing signals. Reports measurable patterns, not a verdict on who wrote the text, and must not be used to accuse a person of anything. Not for rhythm detail (burstiness_report) or for a rewrite brief (humanize_plan). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "empty text"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
The draft to scan — at least one full sentence of plain text.
Scan a draft for the measurable tells of AI-generated prose. FREE. Flags stock phrases (with exact quotes), structural reflexes, uniform sentence rhythm, em-dash overuse, and hedging boilerplate — every flag cites the actual text. Typical input {"text": "<draft>"} returns {"reads_human_score": 0-100, "metrics": {"burstiness": ..., "avg_sentence_len": ..., ...}, "evidence": [{"type": "stock_phrase", "quote": "..."}], "note": "..."}. Use for a first read on whether a draft carries machine-writing signals. Reports measurable patterns, not a verdict on who wrote the text, and must not be used to accuse a person of anything. Not for rhythm detail (burstiness_report) or for a rewrite brief (humanize_plan). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "empty text"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| text* | string | The draft to scan — at least one full sentence of plain text. |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "The draft to scan — at least one full sentence of plain text."
}
},
"additionalProperties": false
}Map a draft's sentence rhythm and find where it goes flat. FREE. Reports per-sentence lengths, the burstiness coefficient, and runs of similar-length sentences. Typical input {"text": "<draft>"} returns {"sentence_lengths": [12, 14, 13, 5, 28], "burstiness": 0.52, "flat_runs": [{"sentences": "1-3", "lengths": [12, 14, 13]}], "tip": "..."}. Use when prose reads flat and sentence-length pattern is the suspect. Not for a full inventory of tells (ai_tell_scan). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "need 3+ sentences"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| text* | string | The draft to analyze; needs at least 3 sentences. |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "The draft to analyze; needs at least 3 sentences."
}
},
"additionalProperties": false
}Produce a precise rewrite brief that de-AIs a draft, with numeric targets. PREMIUM (license). Lists every flagged tell with its fix and sentence-rhythm surgery targets; when a voice_fingerprint result is supplied, adds numeric targets to hit that person's voice. Apply the brief with your agent, then confirm with verify_rewrite. Typical input {"text": "<draft>", "fingerprint": <voice_fingerprint result>} returns {"current_score": 0-100, "edit_list": ["..."], "numeric_targets": {...}, "process": ..., "integrity_note": ...}. Use after a scan has identified what to fix; returns a brief, not rewritten prose. Not for checking whether a rewrite worked (verify_rewrite). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| text* | string | The AI draft to plan a rewrite for. |
| fingerprint | object | Optional voice profile object exactly as returned by voice_fingerprint; omit for a style-only pass. |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "The AI draft to plan a rewrite for."
},
"fingerprint": {
"type": "object",
"default": null,
"description": "Optional voice profile object exactly as returned by\nvoice_fingerprint; omit for a style-only pass.",
"additionalProperties": true
}
},
"additionalProperties": false
}Verify a rewrite actually improved: score delta, meaning check, voice distance. PREMIUM (license). Compares reads-human score before/after, a meaning-preservation proxy, and (with a fingerprint) numeric distance to the target voice. Typical input {"original": "<draft>", "rewrite": "<edited draft>"} returns {"score_before": N, "score_after": N, "score_delta": N, "content_word_retention_pct": N, "remaining_tells": [...], "verdict": "Improved — ship it" | "Marginal — ..."}. Use only when both the before and the after text are available. Not for scoring a single draft (ai_tell_scan). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "both texts must be non-empty"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| rewrite* | string | The same content after the humanize_plan edits. |
| original* | string | The draft before editing. |
| fingerprint | object | Optional voice profile object exactly as returned by voice_fingerprint, to measure distance to the target voice. |
{
"type": "object",
"required": [
"original",
"rewrite"
],
"properties": {
"rewrite": {
"type": "string",
"description": "The same content after the humanize_plan edits."
},
"original": {
"type": "string",
"description": "The draft before editing."
},
"fingerprint": {
"type": "object",
"default": null,
"description": "Optional voice profile object exactly as returned by\nvoice_fingerprint, to measure distance to the target voice.",
"additionalProperties": true
}
},
"additionalProperties": false
}Build a measurable voice profile from samples of a person's real writing. FREE. Feed it 2+ samples (emails, posts, essays — 150+ words total) and use the result with humanize_plan / verify_rewrite. Typical input {"samples": ["<email text>", "<blog post>"]} returns {"label": "my-voice", "target_metrics": {"avg_sentence_len": ..., "burstiness": ..., ...}, "favorite_words": [...], "signature_habits": ["..."], "words_analyzed": N}. Use on samples the person actually wrote, to build a target profile. Not for scoring an unknown draft (ai_tell_scan) and not on text the person did not write. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "need 150+ words of real writing across the samples"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Argument | Type | Description |
|---|---|---|
| label | string | Optional name for this voice profile. Default "my-voice". |
| samples* | array | List of real writing samples by the same person; 150+ words combined across all samples. |
{
"type": "object",
"required": [
"samples"
],
"properties": {
"label": {
"type": "string",
"default": "my-voice",
"description": "Optional name for this voice profile. Default \"my-voice\"."
},
"samples": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of real writing samples by the same person; 150+\nwords combined across all samples."
}
},
"additionalProperties": false
}