Scrivener MCP
The definitive MCP server for Scrivener — connect your novels, screenplays, and manuscripts to Claude, ChatGPT, and any AI assistant. 53 tools: document management, writing analysis, content enhancement, offline semantic search, and character/plot tracking.

Install ·
What You Can Do ·
All Tools ·
Guides ·
Contributing
Scrivener MCP lets your AI assistant open, read, edit, analyze, and search your Scrivener projects directly. No exporting, no copy-pasting text back and forth. Tell it which project to open and start working.
You: Open my novel and analyze the pacing in Chapter 12.
Claude: Opens the .scriv project, reads Chapter 12, runs pacing analysis. The first half moves well, but the middle stalls — a three-page internal monologue starting at paragraph 14 kills the momentum you built in the confrontation scene. Consider cutting it to a paragraph and moving the backstory to Chapter 8.
Works with Claude Desktop, Claude Code, VS Code (Copilot/Continue), Cursor, and any MCP-compatible client. Scrivener 3 on macOS, Windows, and Linux. Listed on the official MCP Registry as io.github.writerslogic/scrivener-mcp.
Install
npm install -g scrivener-mcp
Restart Claude Desktop and it's ready. Other clients need one more step:
This finds Claude Code, Claude Desktop, and Cursor and configures them for you. To set up Claude Code by hand instead: claude mcp add -s user scrivener -- npx scrivener-mcp, then restart it (or run /mcp).
Other ways to install
Smithery
npx -y @smithery/cli install scrivener-mcp --client claude
npx, no install
or add it to Claude Desktop's config directly:
{
"mcpServers": {
"scrivener": { "command": "npx", "args": ["scrivener-mcp"] }
}
}
From GitHub
npm install -g writerslogic/scrivener-mcp
npm install -g writerslogic/scrivener-mcp#v0.12.0
Homebrew (macOS)
brew install writerslogic/tap/scrivener-mcp
Docker
docker build -t scrivener-mcp https://github.com/writerslogic/scrivener-mcp.git
docker run -i --rm -v /path/to/your/projects:/projects scrivener-mcp
Any other MCP client: point it at npx scrivener-mcp as a stdio server.
Optional: AI-powered features
Document management, deterministic analysis, keyword search, and project memory work with no API key at all. Writing analysis, generation, enhancement, and semantic search need one — Anthropic, OpenAI, or OpenRouter. Set more than one and Claude handles chat by default; override with AI_PROVIDER=openai or AI_PROVIDER=openrouter (OpenRouter defaults to anthropic/claude-sonnet-4.6, change it with OPENROUTER_MODEL). If the active provider fails on an account-level error — bad key, no credit, an outage — the server retries on the next one you've configured. If your MCP client supports sampling, chat-based features can run through the client's own model instead, no separate key needed. Semantic indexing itself always runs locally through the Holographic Memory System; only semantic_search's query interpretation needs a provider.
Keys are picked up automatically from:
ANTHROPIC_API_KEY / OPENAI_API_KEY / OPENROUTER_API_KEY
~/.env or ~/.scrivener-mcp/.env
~/.anthropic/key, ~/.openai/key, ~/.openrouter/key
- macOS Keychain (
anthropic-api-key / openai-api-key / openrouter-api-key)
security add-generic-password -s anthropic-api-key -a anthropic -w sk-ant-your-key-here
export ANTHROPIC_API_KEY="sk-ant-..."
What You Can Do
Open a project first. The server has no link to the Scrivener app itself and can't see what's open there — say "Open my Scrivener project at ~/Documents/My Novel.scriv", or "Discover my Scrivener projects" if you don't know the path. On macOS, "Use the project I have open in Scrivener" works too (the first time, macOS will ask permission to control Scrivener). Do this once per conversation. If the project is also open and unsaved in Scrivener itself, save or close it there first, or the two can write over each other.
Manage your manuscript. Read chapters, create scenes, reorganize the binder, update synopses — all through conversation. "Create a new scene called 'The Reveal' after Chapter 5, and move the old epilogue to the trash."
Analyze your writing. Readability, pacing, style, dialogue quality, emotional arc — grounded in your actual prose, not generic advice. Ask whether a chapter's pacing is off and get specifics: which paragraphs stall, how the scene compares to your other chapters, filter-word density against your own average.
Enhance your prose. Targeted edits: cut filter words, strengthen verbs, vary sentence structure, add sensory detail, turn telling into showing, tighten dialogue, fix pacing.
Track characters and plot. Character profiles, plot threads, and style guides persist with the project across sessions. Save a profile for a character once; a consistency check months later catches contradictions — dialogue that doesn't sound like them, a limp that disappears for a chapter.
Search by meaning. "Find scenes where the protagonist feels isolated" works even if that word never appears. Indexing and similarity scoring run locally through the Holographic Memory System; semantic_search also needs a configured AI provider to interpret the query and explain the results.
Track relationships. Query how characters, locations, themes, and plot threads connect. No Neo4j required — relationships live in the semantic memory engine and persist with the project; Neo4j adds deeper graph analysis if you have it.
Compile and export. Assemble chapters into one manuscript with your own formatting and structure preserved. Export inline as Markdown, HTML, or JSON, or write a DOCX, EPUB, or PDF to disk.
57 tools organized by workflow. To keep token usage low, tools load progressively — project tools at startup, document and search tools once a project is open, the rest on demand. Set SCRIVENER_MCP_EAGER_TOOLS=1 to load everything up front.
Project -- open, browse, manage
| Tool | What it does |
|---|
open_project | Open a .scriv project (accepts .scriv folders or .scrivx files) and make it active |
discover_projects | Scan common locations for Scrivener projects when you don't know the path |
detect_open_project | Detect the project currently open in the Scrivener app (macOS) so you don't need a path |
get_structure | Browse the binder hierarchy (folders, documents, word counts) |
refresh_project | Reload from disk after external edits |
close_project | Close the active project and flush pending changes |
verify_project_integrity | Read-only scan for structural problems (missing/duplicate UUIDs, unreadable content) |
get_compile_settings | Read the project's compile formats and taxonomy -- labels/statuses (with colors), collections, section types |
get_manuscript_briefing | One "where am I?" snapshot: words vs. target (% to goal), document/status/label counts, longest/shortest documents |
list_snapshots | List Scrivener snapshots (title, date) for one document or the whole project |
read_snapshot | Read a snapshot's text as plain text, with word count |
compare_snapshot | Diff a snapshot against the current document (or another snapshot): paragraphs added/removed and net word change |
create_snapshot | Take a Scrivener-native snapshot of a document (restorable from Scrivener's own Snapshots browser) before editing |
Documents -- read, write, create, organize
| Tool | What it does |
|---|
get_document_info | Metadata for one document (title, type, word count, synopsis, label, status) |
read_document | Read content; format: "formatted" for rich text, offset/limit to page long docs |
write_document | Replace a document's content (atomic, with pre-write backup) |
create_document | Create a new text document or folder |
update_document | Change title and/or metadata (synopsis, notes, label, status, custom fields) |
move_document | Reorganize within the binder |
delete_document | Move to trash (reversible) |
Search -- find content, passages, and mentions
| Tool | What it does |
|---|
search | Keyword/full-text search; field: "title" for titles, scope: "trash" for trash |
semantic_search | Find passages by meaning using the local HMS index plus provider-backed query interpretation, with similarity scores |
find_mentions | Locate every occurrence of a specific name or term, with context |
list_trash | List trashed documents |
restore_document | Restore a document from trash |
read_annotations | Read a document's comments and footnotes |
Analysis -- quality, consistency, structure
| Tool | What it does |
|---|
analyze_document | AI writing analysis; focus with aspects (structure, style, pacing, themes...) |
check_consistency | Project-wide continuity check; scope for plot, characters, or timeline |
analyze_writing_style | Style-focused analysis |
check_plot_consistency | Plot-thread consistency check |
suggest_improvements | AI-generated improvement suggestions |
enhance_content | Suggest a specific improvement to a document |
generate_content | Generate new prose from a prompt and context |
set_writing_goal | Set a word-count goal (daily, weekly, or whole project) with an optional target date |
get_writing_goals | List goals with progress -- percent complete, words remaining, on-pace status |
set_writing_preferences | Set author preferences (tone, complexity, length, POV, style guide) that steer AI output |
get_writing_preferences | Show current preferences plus feedback insights and suggestions |
collect_feedback | Record a rating/comment on an AI operation to inform those insights |
Enhancement types: eliminate-filter-words, strengthen-verbs, vary-sentences, add-sensory-details, show-dont-tell, improve-flow, enhance-descriptions, strengthen-dialogue, fix-pacing, expand, condense, rewrite
Compile & Export -- assemble and ship the manuscript
| Tool | What it does |
|---|
compile_documents | Combine documents; mode: "structured" compiles the Draft folder with the binder hierarchy as headings and honors "Include in Compile" (no AI), mode: "intelligent" for AI-optimized output |
export_project | Write the manuscript to disk -- Markdown, HTML, JSON inline, or DOCX, EPUB, PDF as a file |
get_statistics | Project-level word/document/character counts |
generate_marketing_materials | Draft synopsis, query letter, pitch, and related materials |
Memory -- persistent project knowledge
| Tool | What it does |
|---|
remember | Store information that persists across sessions with the project |
recall | Retrieve previously stored memory |
Memory is stored within each .scriv project and travels with it.
Relationships -- entity connections and story graph
| Tool | What it does |
|---|
add_relationship | Store a relationship between characters, locations, themes, or plot threads |
find_relationships | Query entities related to a given character/theme/location |
discover_connections | Find co-occurring entities across the manuscript |
character_network | The character relationship network |
get_entity_references | Trace the reference graph in either direction: entities a document mentions (by documentId), or documents mentioning an entity (by entity) |
find_orphaned_entities | List registered characters/locations that no document actually mentions |
suggest_connections | Suggest entities a document may be missing, inferred from cross-document co-occurrence |
Works without Neo4j -- relationships live in the Holographic Memory System and are available immediately. The document cross-reference tools are fully deterministic (exact whole-word matching, no AI) and need no external services; Neo4j adds advanced graph analysis when connected.
Background Jobs -- long-running analysis
| Tool | What it does |
|---|
queue_document_analysis | Enqueue an async analysis of one document; returns a job id |
queue_project_analysis | Enqueue an async analysis of the whole project |
get_job_status | Poll progress/results for a queued job |
cancel_job | Cancel a queued or running job |
Discovery -- explore capabilities
| Tool | What it does |
|---|
list_skills | List the available tool groups and their tools |
use_skill | Activate a tool group (most are pre-activated by default) |
Guides
- Getting Started -- Installation, configuration, your first session
- MCP Client Setup -- Copy-paste config for Claude Desktop, Claude Code, Cursor, and VS Code
- Writing with AI -- Analysis workflows, enhancement strategies, memory management
- Troubleshooting -- Common issues and fixes
- Token Optimization -- How the server minimizes context window usage
- Architecture -- How the server works, module structure, data flow
- Scrivener Compatibility -- Supported Scrivener versions, platforms, and format coverage
- Scrivener File Format -- The reverse-engineered
.scriv format, what we read vs. infer, and safe-modification guidance
- Fuzzing -- Jazzer.js target and OSS-Fuzz integration details
- Contributing -- Development setup, code conventions, adding new tools
Requirements
- Node.js 18+
- Scrivener 3 project files (.scriv)
- macOS, Windows, or Linux
- Optional: Anthropic, OpenAI, or OpenRouter API key for provider-backed AI features
- Optional: Neo4j for persistence and advanced graph queries; core relationship tools work without it
Development
git clone https://github.com/writerslogic/scrivener-mcp.git
cd scrivener-mcp
npm install
npm run dev
npm run build
npm test
npm run typecheck
Why This One?
A few Scrivener MCP servers exist. Feature claims below come from each project's own docs, published package, and advertised tools, last re-read on 2026-08-22; stars, forks, activity, and published version were refreshed 2026-09-15. "No" means undocumented — not necessarily impossible through the connected AI client.
| Feature | scrivener-mcp | jiayun | TwelveTake | Scrivener Assistant | ricopicone | zaphodsdad |
|---|
| Public MCP tools | 57 | 29 | 22 | 38 | 18 | 10 |
| Manuscript access | read/write | read/write | read/write | read-only; writes sidecar data/metadata | read-only by default; opt-in content/notes/synopsis writes | read-only |
| RTF handling | formatted reads; fidelity-preserving span writes | reads/writes document content | reads/writes document content | converts RTF to text; manuscript read-only | RTF-to-text reads; snapshot-protected content writes | converts RTF to text; read-only |
| Built-in writing analysis | readability, pacing, style, emotion, AI critique | readability, style, sentiment | continuity comparison | agent-driven five-point review workflow | no dedicated analysis tool | no dedicated analysis tool |
| Content generation/enhancement | generation + 12 targeted enhancement types | no | no | brainstorm/draft agent workflow | no | no |
| Local semantic retrieval | HMS index and similarity search | no | no | no | no | no |
| Continuity/project memory | persistent memory + consistency checks | persistent notes + consistency checks | mention/description comparison | world bible, story state, characters, locations, review history | no persistent memory | no persistent memory |
| Relationship tooling | persistent relationships, networks, reference graph; optional Neo4j | no | no | human-editable relations data | no | no |
| Token optimization | progressive skill loading, compact output, paged reads | no documented equivalent | no documented equivalent | no documented equivalent | scoped binder/chapter reads | scoped overview/read tools |
| Export / compilation | Markdown, HTML, JSON, DOCX, EPUB, PDF | compile + whole-draft export | PDF | saves AI drafts; no manuscript export documented | no | no |
| Windows support | yes | yes (prebuilt binary) | yes | not documented | not documented | yes |
| Installation | npm, Homebrew, Docker, Smithery | Cargo or prebuilt binary | npm package (deprecated) | MCPB or source | source / uv | source / pip install -e |
| License | AGPL-3.0 / commercial dual-license | MIT | MIT | MIT | not declared | MIT |
| Repository/package status | weekly activity; npm 0.12.0 | monthly activity | discontinued and unmaintained | occasional activity | occasional activity; no releases | occasional activity; no releases |
| Community | ⭐ 54 · 18 forks | ⭐ 7 | source repository unavailable | ⭐ 1 | ⭐ 0 | ⭐ 5 · 1 fork |
Counts and feature claims can change. Follow the linked projects for their own latest documentation. The table is generated from docs/comparison.yml — edit claims there, not here.
The alternative that isn't an MCP server
Scrivener can also Sync to External Folder, writing each document out as RTF or plain text, which any generic file-access MCP server (like @modelcontextprotocol/server-filesystem) can then read and write.
It's free and works today. What you lose is everything tied to the actual project — binder hierarchy, metadata, labels and status, snapshots, compile settings, RTF formatting — and edits land in the sync folder rather than the project itself, so a bad edit gets reconciled by Scrivener on the next sync instead of caught before it happens. Fine for occasional read-only help with prose; not if you want the structure to survive the round trip.
Contributing
We welcome contributions of all sizes. Check the issue tracker for good first issue labels, or see the contributing guide for development setup.
Areas where help is especially welcome:
- Test coverage (#18)
- Windows testing and path handling
- Scrivener 2 compatibility testing
- Documentation improvements (#25)
Security
Found a vulnerability? Please report it privately — see SECURITY.md.
License
AGPL-3.0 © WritersLogic, Inc.
Free for personal use and open-source projects. Commercial license available for proprietary integration. See COMMERCIAL_LICENSE.md for details.
GitHub ·
npm ·
Issues ·
Changelog