An MCP server that learns your personal writing style from a local document corpus and provides self-updating style context to Claude.
Server has 5 tools with complete input schemas and descriptions present. Naming follows verb_noun convention (analyze_, get_, apply_, find_, style_). Descriptions are adequate (40-80 chars) but lack LLM-optimized detail on WHEN to use each tool and dependencies between them. Parameter descriptions exist but are minimal. Output schemas are not documented in the visible code. Error handling and recovery guidance are absent. No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles (WRITE vs READ_ONLY). Composition is sound, each tool has one responsibility and tools chain logically (analyze → get_profile → apply_style).
(Re)scan the corpus, build profile.json + examples.db.
Compare a draft to the profile, return a rewrite brief.
FTS5/BM25 search for representative real excerpts.
Return the full persisted StyleProfile (call this before writing prose to match the author's voice).
Report profile/index health and readiness.
Output schemas not documented. LLMs cannot infer what fields each tool returns, forcing them to guess downstream field names and risk broken tool chains.
Tool annotations missing. analyze_writing_style is marked WRITE (destructive) but has no destructiveHint. get_style_profile, apply_style, find_writing_examples, style_status are READ_ONLY but lack readOnlyHint. Agents cannot distinguish safe from unsafe operations.
Descriptions lack WHEN-to-use guidance and prerequisites. E.g., apply_style says 'Compare a draft to the profile' but does not state 'Call get_style_profile first' or 'Requires a built profile (check style_status)'. Agents cannot plan multi-step workflows.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | <=2025-11-25 | v2 |
No error handling or recovery guidance in visible code. If analyze_writing_style fails (e.g., corpus not found, permission denied), agents have no guidance on what to do next.
find_writing_examples max_results parameter lacks explicit bounds in description. Rubric requires 'clamped 1-20' but description does not state the constraint, LLMs may pass invalid values.