AgentStack
MCP verified Apache-2.0 Self-run

Voice Analyser Mcp

mcp-houtini-ai-voice-analyser-mcp · by houtini-ai

MCP server that analyses your published writing and generates a Claude Skill so Claude writes prose in your voice by mimicking real samples instead of working through a rules checklist.

No reviews yet
0 installs
12 views
0.0% view→install

Install

$ agentstack add mcp-houtini-ai-voice-analyser-mcp

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Voice Analyser Mcp? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Voice Analyser: Generate a Skill.md for your Writing Style to Make Claude Talk like You - MCP analyses your sitemap, fetches and analyses a Corpus and generates a skill.md file

[](https://www.npmjs.com/package/@houtini/voice-analyser) [](https://opensource.org/licenses/Apache-2.0)

> MCP server that analyses your published writing and generates a Claude Skill so Claude writes prose in your voice by mimicking real samples instead of working through a rules checklist.

> Quick Navigation > > [Why this exists](#why-this-exists) | [Why rules don't work](#why-rule-based-style-guides-dont-work) | [How a Claude Skill changes things](#how-a-claude-skill-changes-things) | [Installation](#installation) | [Quick start](#quick-start) | [Using the skill](#using-the-voice-skill) | [What's in the bundle](#whats-in-the-bundle) | [Analysers](#the-six-analysers) | [Tools reference](#mcp-tools-reference) | [Known limitations](#known-limitations)

Why this exists

For me, this started because I write a lot. Articles, blog posts, page copy – each has its own rhythm, and when I started leaning on Claude to draft new posts I quickly fell down the slippery slope of trying to make the output sound like me.

The first thing I tried was a long style guide. I'd run linguistic analysis across forty-odd articles and ended up with a 500-line markdown document full of "ZERO TOLERANCE" rules, forbidden words, formality scores per 1000, and a validation checklist. I thought this was a good idea. It wasn't. The output got stilted – I'm pretty sure the model was working harder to comply with the rules than to write naturally. Cognitive load, basically.

I'll be completely transparent about why I built this, and where I could have saved time. There are many things I'd do differently if I was starting from scratch. What you're looking at is what I settled on after trying to brute-force my own voice into Claude with rule lists, and watching it get worse the more rules I added.

Why rule-based style guides don't work

Tone of voice is hard to describe. Try it sometime – take a paragraph of your own writing and explain to someone why it sounds like you. You end up with vague things ("conversational, but not too casual") and specific things ("I never use em-dashes; I always start with a personal anchor"). The vague things are useless to a model. The specific things are easy enough to write down – but that's where it goes wrong.

If you tell Claude "avoid em-dashes" and "use first-person 4× per 100 words" and "score formality below 5" and "always include an honest caveat", it'll obey. The output is technically correct. It just reads like someone hitting marks on a checklist instead of actually writing. Every sentence becomes a small compliance task.

In my experience, the more rules I added, the worse it got. I'd write longer style guides thinking I was capturing more of the voice. I was capturing more of the constraints. Those aren't the same thing.

How a Claude Skill changes things

A while back I came across a Claude skill called "caveman" that compresses Claude's output by ~75% by talking like, well, a caveman. Drop articles, drop filler, fragments OK. The whole thing was a short SKILL.md – maybe 40 lines.

It worked. And it worked without "ZERO TOLERANCE" framing or formality scoring. The skill didn't try to define caveman speak with rules. It showed examples. "Not: 'Sure! I'd be happy to help...'. Yes: 'Bug in auth. Token expiry use //skill/`:

skill/
  SKILL.md
  samples/
    001-.md
    002-.md
    ... (25 by default, sampled across the article-length spectrum)

SKILL.md itself is short. Sections are emitted only when the corpus produces real data for them:

| Section | What it contains | |---------|------------------| | YAML frontmatter | Skill name and a description packed with trigger phrases ("write like X", "in X's voice", "in our voice") so Claude auto-loads the skill on relevant prose tasks | | Hero paragraph | Read three random samples, match the cadence, don't paraphrase | | ## Persistence | Stay active across the conversation. Drop the voice for code blocks, error messages, JSON, tables | | ## Rules | Bare imperatives – only the ones the corpus justifies. Em-dash policy, hollow intensifiers ("honestly", "really"), AI slop with replacement hints, equipment naming conventions | | ## How sentences start | Up to 12 real opening shapes pulled from your corpus | | ## Phrases that recur | Top signature hedges, collegial patterns, identity markers, uncertainty markers – with frequency counts | | ## How to hedge | Real caveat sentences from the corpus, filtered to genuine hedges | | ## When stuck | "Read another sample" |

A small slice of generated output, from a six-article test:

## Rules

- No em-dashes (—). En-dashes (–) are fine and used liberally for asides.
- No "honestly", "really".
- No AI slop: "optimize" (use "improve").
- Name kit by make with a first-person possessive: "my LAN", "our Zotac",
  "my SupraHex". Not "the GPU", "the PCB".

## Phrases that recur

- "Of course" (6×)
- "I think" (6×)
- "Could be" (2×)
- "I'm pretty sure"
- "Fell down the slippery slope"

The Six Analysers

Each one feeds at least one part of the SKILL.md. Output goes to //analysis/:

| File | What it captures | Where it shows up in SKILL.md | |------|-----------------|-------------------------------| | phrase-library.json | Opening patterns, transitions, caveat phrases, equipment phrases, AI clichés | ## How sentences start, ## How to hedge, ## Rules (AI clichés) | | voice.json | First-person markers, hollow intensifiers, signature hedging, marketing speak, identity markers | ## Rules (intensifiers, marketing), ## Phrases that recur | | punctuation.json | Dash types (em vs en), comma density, parentheticals | ## Rules (em-dash policy) | | vocabulary-tiers.json | Formality scoring, AI slop detection with replacement alternatives | ## Rules (no AI slop) | | vulnerability-patterns.json | Uncertainty markers, mistake admissions, limitation statements | ## Phrases that recur (multi-word patterns only) | | specificity-patterns.json | Possessive vs generic references, dominant nouns | ## Rules (equipment naming) |

If a section in SKILL.md is missing, it's because the analyser didn't find enough data to fill it. That's intentional – better no rule than a rule built on a single occurrence.

Minimum Corpus Requirements

  • Minimum: 15,000 words (~20 articles)
  • Recommended: 30,000 words (~40 articles)
  • Ideal: 50,000+ words

Below 15k words phrase frequencies become unreliable. The skill still generates – it just won't have the same density of signature phrases.

MCP Tools Reference

collect_corpus

Crawls sitemap and collects clean writing corpus.

| Parameter | Required | Description | |-----------|----------|-------------| | sitemap_url | Yes | XML sitemap URL | | output_name | Yes | Corpus identifier (e.g. "my-voice") | | output_dir | Yes | Storage directory | | max_articles | No | Article limit (default: 100) | | article_pattern | No | Regex URL filter |

analyze_corpus

Runs the six analysers on the collected corpus.

| Parameter | Required | Description | |-----------|----------|-------------| | corpus_name | Yes | Name from collect_corpus | | corpus_dir | Yes | Directory containing corpus |

generatevoiceskill

Generates the Claude Skill bundle (SKILL.md plus real article samples) so Claude writes prose in the corpus author's voice by mimicking actual writing rather than following rule lists. Output goes to //skill/.

| Parameter | Required | Description | |-----------|----------|-------------| | corpus_name | Yes | Name from analyze_corpus | | corpus_dir | Yes | Directory containing analysis | | sample_count | No | Number of article samples to bundle (default: 25) |

Development

git clone https://github.com/houtini-ai/voice-analyser-mcp.git
cd voice-analyser-mcp
npm install
npm run build

Local development mode in Claude Desktop config:

{
  "mcpServers": {
    "voice-analysis": {
      "command": "node",
      "args": ["C:\\path\\to\\voice-analyser-mcp\\dist\\index.js"]
    }
  }
}

Known Limitations

  • Needs an XML sitemap. RSS feeds aren't supported yet.
  • Works best with single-author content. Mixed authorship weakens the recurring-phrase signal – the analysis can't tell whose voice is whose.
  • Heavily edited content produces less distinct voice patterns. If your articles have been through a copy-editor, you'll capture the editor's hand as much as yours.
  • SKILL.md sections are omitted when the corpus doesn't produce enough data for reliable patterns. This is intentional – better no rule than a rule built on a single occurrence.
  • The MCP runs locally. The corpus and analysis stay on your machine. Nothing leaves the device.

License: Apache 2.0 Author: Houtini Version: 1.5.0

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.