brand-voice-mcp
Provides a CI integration that checks brand voice violations on changed .md/.mdx files in pull requests, with optional GitHub Actions annotations for inline PR comments.
Click on "Install 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., "@brand-voice-mcpCheck myfile.md for brand voice violations"
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.
brand-voice
Brand writing enforcement for Claude Code — automatic, configurable, zero-friction.
Every time Claude writes or edits a Markdown file, brand-voice checks it against your brand guidelines and signals Claude to fix violations before the file saves. No manual review. No rule reminders in every prompt.
Claude reads the violation list, corrects the file, and retries the write — automatically.
Why brand-voice?
Your brand guidelines live in a doc somewhere. Claude doesn't read them unless you paste them into every prompt. Even then, the rules drift over time.
brand-voice makes the rules structural:
Works for any company — configure your own vocabulary, voice, and visual identity
Auto-corrects, doesn't just report — the PostToolUse hook blocks bad writes and triggers a retry
Covers the full stack — hook for Claude Code, MCP server for on-demand checks, CLI for CI pipelines
Smart about code — ignores fenced blocks, indented code, inline code spans, and table cells
Escape hatches —
.brand-voice-ignorefor whole files,<!-- brand-voice-disable-line -->for individual linesVisual identity included — colors, fonts, logo URLs live in the same guidelines file
Related MCP server: mcp-dev-tools
Install
npm install -g brand-voiceOr run without installing:
npx brand-voice@latest checkRequires Node.js 18+.
Quick Start
Option A — Guided setup in Claude Code (recommended)
Run the setup skill inside any Claude Code session:
/brand-voice-setupThe skill does everything:
Asks whether you have existing brand docs or want to answer four questions
Optionally researches your brand automatically via web
Writes
brand-guidelines.mdto your projectInjects a summary block into
CLAUDE.mdRegisters the PostToolUse hook in
.claude/settings.jsonRegisters the MCP server in
.mcp.json
After setup, every .md and .mdx file Claude touches is checked automatically.
Option B — Manual setup
# 1. Install
npm install -g brand-voice
# 2. Create brand-guidelines.md in your project root (see schema below)
# 3. Register the hook
brand-voice setupHow It Works
Three components work together:
Component | What it does |
PostToolUse hook ( | Runs after every Write/Edit/MultiEdit on |
MCP server ( | Exposes |
CLI ( | Standalone checker for CI pipelines, ratchet baselines, and GitHub PR annotations |
What gets checked
Rule | Severity | Description |
Forbidden terms | error | Whole-word, case-insensitive match — blocks the write |
Avoid terms | warning | Same matching — signals a preferred alternative |
Sentence length | warning | Configurable max words per sentence (default: 25) |
Passive voice | warning | Auxiliary + past-participle pattern detection |
Readability grade | warning | Flesch-Kincaid grade per sentence vs. your target |
Code blocks, inline code, indented blocks, and table rows are never checked — only prose.
Never checked: physical line length or line breaks. The CLAUDE.md injection always includes a formatting rule telling Claude to write continuous paragraphs and let the renderer word-wrap, but the analyzer itself has no line-width rule and never will — sentence length is measured in words, not characters or lines, so hard-wrapped and unwrapped prose score identically.
PostToolUse hook exit codes
Code | Meaning |
| No violations — file accepted |
| Violations found — Claude reads output, corrects, and retries |
Exit 1 is never used (it aborts the session rather than triggering a retry).
brand-guidelines.md
One Markdown file holds your entire brand configuration. Keep it under 600 words so it fits cleanly in context.
# Brand Guidelines
## Persona
Who you are and who you write for.
## Tone & Voice
- Direct, honest, clear
- Person: second ← "first" | "second" | "third"
- Voice: active ← "active" | "passive"
- Sentences: max 25 words
- Contractions: yes ← "yes" | "no"
- Exclamation marks: no
## Vocabulary
**Always use:** Acme, Acme Platform, APIs
**Avoid:** leverage, utilize, synergy, seamless
**Forbidden:** [competitor names, unverified claims]
## On-Tone Examples
> Connect your data in minutes — Acme handles the routing.
## Off-Tone Examples
> Leverage our cutting-edge platform to seamlessly integrate.
## Visual Identity
- Primary color: #006EFA
- Secondary color: #0050C3
- Accent color: #FF9DFF
- Background color: #FFFFFF
- Text color: #282828
- Logo (light): https://cdn.example.com/logo-light.svg
- Logo (dark): https://cdn.example.com/logo-dark.svg
- Heading font: Inter
- Body font: Source Sans Pro
## Formatting Rules
- Heading style: sentence case
- Oxford comma: yes
- Readability target: 8th grade
## Quick Reference
Repeat your top 5 rules here. This section appears last —
where LLM attention is highest — to reinforce critical rules
against context-window attention drop-off.See example/brand-guidelines.md for a complete working example.
Section aliases
## On-Brand Examples and ## Off-Brand Examples are accepted as aliases for ## On-Tone Examples / ## Off-Tone Examples. All other section names are case-insensitive exact matches.
Search path
The hook and CLI search for brand-guidelines.md in this order:
Current working directory
~/.claude/brand-guidelines.md(user scope — enforces rules across all your projects)Parent directories up to the git root
Suppressing Violations
Skip files or directories — .brand-voice-ignore
Create a .brand-voice-ignore file in your project root. Uses gitignore-style patterns:
# Auto-generated content
dist/
CHANGELOG.md
# Agent prompt files — intentional brand vocabulary exceptions
data/prompts/**
# Vendor docs
vendor/Skip a single line — inline comment
<!-- brand-voice-disable-line -->Add this comment anywhere on a line to suppress all violations on that line. Useful for one-off exceptions where the violation is intentional.
MCP Server
analyze_readability
Check a file or inline text for violations and readability scores.
Inputs:
Field | Type | Required | Description |
| string | one of | Absolute or relative path to a |
| string | one of | Inline Markdown to analyze |
| string | no | Working directory for locating |
Returns: { filePath, passed, violations[], readabilityScores, visualIdentity }
apply_suggestions
Apply safe word-level substitutions for forbidden/avoid terms. Does not fix sentence length, passive voice, or grade — those need human judgment.
Inputs:
Field | Type | Required | Description |
| string | yes | Path to the file to fix |
| boolean | no | Preview diff without writing (default: |
Returns: diff + change list (dry run) or confirmation + change list (live)
Tip: Run dryRun: true first to preview, then apply.
CI Integration
brand-voice works independently of Claude Code — add it to any pipeline.
Check all .md files:
npx brand-voice@latest checkCheck only files changed in the current branch:
npx brand-voice@latest check --changed-onlyGitHub Actions inline annotations (PR diff comments):
npx brand-voice@latest check --reporter github-pr-reviewRatchet enforcement — block regressions without requiring a clean slate:
# Run once, commit the file
npx brand-voice@latest baseline --save
# In CI: fail only if violations increase above baseline
npx brand-voice@latest check --baseline .brand-voice-baseline.jsonExample GitHub Actions workflow:
name: Brand Voice
on:
pull_request:
paths: ['**.md', '**.mdx']
jobs:
prose:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 0 }
- run: npx brand-voice@latest check --changed-only --reporter github-pr-reviewExit 0 = clean or within baseline. Exit 1 = errors found or baseline exceeded.
CLI Reference
brand-voice <command> [options]
Commands:
check [file] Check a file or all .md files in cwd
setup Print instructions to run /brand-voice-setup in Claude Code
import <file> Normalize a brand-guidelines.md into cwd
baseline --save Save current violation count as ratchet baseline
vale-sync Check that the Vale binary is available
Check options:
--changed-only Only check files changed in git (requires git)
--baseline <file> Compare against a baseline JSON file (ratchet check)
--reporter github-pr-review Emit GitHub Actions annotation formatProgrammatic API
import { parseGuidelines, analyzeText, loadGuidelines } from 'brand-voice';
const guidelines = loadGuidelines(process.cwd());
if (guidelines) {
const result = analyzeText(markdownString, 'doc.md', guidelines);
console.log(result.violations); // Violation[]
console.log(result.readabilityScores); // ReadabilityScores
console.log(result.passed); // false if any error-severity violations
}See src/types.ts for full type definitions.
Distribution Patterns
Scenario | What to do |
Solo developer | Run |
Team | Commit |
Global (all projects) | Run |
claude.ai (browser) | Setup skill outputs a paste block for Claude Project instructions — no hook or MCP needed |
Enterprise / CI | Use |
Requirements
Node.js 18+
brand-guidelines.md— created by/brand-voice-setupor written manuallyVale — optional; only required for
vale-sync
Contributing
Bug reports, feature requests, and pull requests are welcome. See CONTRIBUTING.md for setup instructions, key invariants to preserve, and code style guidance.
License
MIT — see LICENSE.
This server cannot be installed
Maintenance
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/zoharbabin/brand-voice'
If you have feedback or need assistance with the MCP directory API, please join our Discord server