brandvoice-mcp
Provides embedding generation for chunk similarity search.
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., "@brandvoice-mcpingest samples from my blog posts"
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.
brandvoice-mcp
An MCP server that learns your writing style and makes every AI client sound like you.
Quick start
Install
pip install brandvoice-mcpConfigure Claude Desktop
Add to your claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"brandvoice": {
"command": "python",
"args": ["-m", "brandvoice_mcp"],
"env": {
"ANTHROPIC_API_KEY": "sk-ant-...",
"OPENAI_API_KEY": "sk-..."
}
}
}
}Set ANTHROPIC_API_KEY and OPENAI_API_KEY in the env block (both required for normal use: Claude for analysis/alignment, OpenAI for chunk embeddings). The server will exit with a clear error if either is missing.
Teach it your voice
In Claude Desktop, ask the model to use ingest_samples with real writing:
Use the
ingest_samplestool to learn my writing style from this blog post: [paste content]
The server chunks the text, stores embeddings in ChromaDB, and (for samples of about 50+ words) runs LLM style analysis. Shorter snippets are still stored for retrieval but skip style analysis to avoid unreliable profiles.
Write in your voice
Before any writing task, call get_voice_context with your task and platform. The returned prompt_injection is wrapped in <voice_context>...</voice_context> — prepend it to your request or system prompt.
Use
get_voice_contextfor a LinkedIn post about React performance, then write it in my voice.
Check alignment
After drafting text, call check_alignment with the draft. You get a 0–100 score, drift flags, and rewrite hints against your stored profile and samples.
Use
check_alignmenton this draft: [paste text]
Related MCP server: my-voice-mcp
Tools reference
Tool | Description |
| Ingest writing; chunk, embed, and update style profile when thresholds are met |
| Voice guidelines, similar samples, and |
| Merge explicit brand voice rules (pillars, tone, vocabulary, etc.) |
| Score how well content matches your voice |
| Full profile: learned style (including |
| Paginated list of ingested samples (each row includes the Chroma document |
| Delete samples by |
How it works
Ingestion: Text is split into chunks, embedded with OpenAI (default text-embedding-3-small), and stored in a local ChromaDB collection (writing_samples) for similarity search. The aggregate learned style and explicit guidelines live in ~/.brandvoice/profile.json (human-readable, separate from vectors) so a vector DB issue does not silently wipe your profile alongside embeddings.
Style analysis: For sufficiently long samples, Claude analyzes tone and patterns (including humor, technical depth, and warmth scores used in get_voice_context). If the API fails, a heuristic fallback runs; profile_source records "llm" vs "heuristic". After enough stored chunks (see BRANDVOICE_PROFILE_THRESHOLD), each qualifying ingest re-merges the corpus via Claude (prompts/corpus_aggregate.md) into a single aggregate profile; on failure, the latest per-sample LLM snapshot is used when available.
Writing assistance: For a task, the server retrieves your profile and the top similar chunks, then builds prompt_injection from markdown templates under brandvoice_mcp/prompts/.
Configuration
Variable | Default | Description |
| (required) | Anthropic API key (style analysis, alignment) |
| (required) | OpenAI API key (chunk embeddings; Anthropic has no embeddings API) |
|
| Data directory ( |
|
| OpenAI embedding model name |
|
| Model for style analysis |
|
| Minimum stored samples before aggregate profile can update after an LLM-analyzed ingest |
Model deprecation: If the default
claude-sonnet-4-6is deprecated or unavailable in your region, setBRANDVOICE_ANALYSIS_MODELto a supported model ID (e.g.claude-opus-4-6orclaude-haiku-4-5-20251001). Claude 4 model IDs use no date suffix; check Anthropic's model documentation for the current list.
Limitations
Single client: Designed for one MCP client at a time. Multiple clients sharing the same
~/.brandvoicedirectory may hit SQLite/Chroma lock errors.API costs: Style analysis and alignment use Anthropic; chunk embeddings use OpenAI. Each
ingest_samplesandcheck_alignmentconsumes tokens; budget accordingly.
Requirements
Python 3.11+
Anthropic API key (
ANTHROPIC_API_KEY) — LLM callsOpenAI API key (
OPENAI_API_KEY) — embeddings for ChromaDB similarity search
Development
git clone https://github.com/jsliapark/brandvoice-mcp.git
cd brandvoice-mcp
pip install -e ".[dev]"
pytestArchitecture (overview)
MCP client (Claude Desktop, Cursor, …)
│ stdio
▼
brandvoice-mcp server
│
├── profile.json ← aggregate learned style + explicit guidelines
└── ChromaDB ← writing_samples (embeddings + chunks)Manual testing in a terminal
The server speaks JSON-RPC on stdin/stdout. When you run python -m brandvoice_mcp, it should block until the client disconnects or you press Ctrl+C — there is no interactive prompt.
Do not type in that terminal while the server is running; random text is not valid JSON-RPC and you will see errors like
Invalid JSON/JSONRPCMessagevalidation errors.Do not run two copies of the server on the same stdio session.
If you use Cursor / Claude Desktop with this project, let only the IDE spawn the process — don’t also run
python -m brandvoice_mcpin a terminal unless you are debugging with a real MCP client attached.
If python -m brandvoice_mcp crashes with Server has no attribute tool, your checkout is on the old low-level Server API — use FastMCP (from mcp.server import FastMCP) and sync __main__.py to call run_server() without asyncio.run (see current server.py on main).
For a local run, export both ANTHROPIC_API_KEY and OPENAI_API_KEY (see Configuration above).
License
MIT — see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
AI voice generation: text-to-speech and voice cloning from any MCP client.
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.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceAn MCP server that analyzes your unique Twitter voice to generate, manage, and post AI-powered tweets and quote tweet drafts. It supports multiple AI providers and provides tools for draft management, voice profiling, and automated content creation from images.-
- FlicenseNot gradedqualityDmaintenanceA local-first MCP server that builds compact voice profiles from writing samples, then compares, rewrites, or generates new text in that voice.-
- FlicenseAqualityDmaintenanceAn MCP server that automatically generates technical blog posts using AI (Gemini and Claude), supporting various input types, styles, and collaborative workflow.10-

style-memory-mcpofficial
AlicenseAqualityBmaintenanceA tiny local MCP server that learns a user's conversational style, catchphrases, dialect markers, emoji habits, tone preferences, and concrete collaboration preferences without storing private memories.151MIT