MCP server for Scrivener - Read, write, analyze, and search manuscripts with semantic search, character/plot tracking, writing analysis, and content enhancement. Works with Claude, ChatGPT, and other AI assistants.
The server demonstrates moderate quality with well-structured tool definitions, comprehensive descriptions, and proper schema validation infrastructure. However, significant gaps exist: only 3 visible tools are documented in the provided code, all three lack explicit outputSchema declarations despite being READ_ONLY operations that do return content, and parameter validation relies on undescribed optional 'options' objects. The codebase shows strong architectural patterns (skill registry with metadata validation, comprehensive tool-registry gate script) but the sample size is too small to assess overall quality reliably. Tool naming follows verb_noun conventions well (analyze_document, enhance_content, generate_content). Descriptions are substantive (100-180 chars each) and include usage guidance ('Use analyze_document for a critique instead of a rewrite'). All three visible tools have documented parameters with descriptions and enum constraints where appropriate. The server implements a tool-registry validation gate that enforces 5/5 metadata (title, annotations, description, parameter descriptions), a strong quality control mechanism, but the three visible tools in the sample do not show complete metadata in the provided code excerpts (only names, descriptions, input schemas visible). The presence of hidden tools and progressive tool disclosure adds complexity but is architecturally sound. Major issue: the three tools return AI-generated text (rewritten prose, new content, analysis summaries) but lack documented outputSchema, preventing LLMs from understanding response structure. The enhance_content and generate_content tools both have vague 'options' parameters lacking specific field documentation.
Analyze the writing quality of a single document and return a summary of readability, pacing, and the top issues found. This is the general-purpose prose analyzer: narrow it with analysisTypes to focus on style, structure, themes, characters, sentiment, or pacing. Use check_consistency for project-wide continuity instead, or enhance_content to get rewritten prose rather than a critique. Calls an external AI model. Requires an open project and a valid document id.
Produce an AI-improved version of a document's text for a chosen goal (fix grammar, refine style, improve clarity, expand, summarize, or rework creatively) and return the suggested rewrite. This does NOT modify the document; review the result and call write_document to save it. Use analyze_document for a critique instead of a rewrite, or generate_content to create new text from a prompt. Calls an external AI model. Requires an open project.
Generate new prose from a natural-language prompt and return the generated text, optionally steered by project context (a document, characters, or a target style) and a desired length. This creates fresh text and does not modify any document. Use enhance_content to improve existing text instead, or analyze_document to critique it. Calls an external AI model and requires an AI provider key.
Missing or undocumented outputSchema for all three visible tools. analyze_document, enhance_content, and generate_content all return AI-generated text/analysis but provide no structured schema for the response. LLMs cannot infer what fields or data structure to expect.
The 'options' parameter in enhance_content is underdocumented. Schema shows type 'object' with description 'Optional enhancement parameters passed through to the enhancer' but does not specify what properties are valid, their types, or constraints. This forces LLMs to guess at valid keys.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) are declared as implemented in the server features but the provided tool definitions do not explicitly show the annotation object structure for the three visible tools.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2025-06-18+ | v2 |
All three tools call external AI models but lack error documentation. No guidance on what happens if the API is unavailable, rate-limited, or fails. LLMs have no recovery path documented.
generate_content accepts only a 'prompt' parameter (required) and lacks optional steering parameters documented in the description (project context, characters, target style, desired length) in the inputSchema. The schema should formalize these optional parameters rather than hiding them in prose.