Scrivener MCP
Scrivener MCP lets an AI assistant work directly with Scrivener 3 projects: manage the binder, edit documents, search content, analyze and improve prose, track project knowledge/relationships, and compile or export manuscripts.
Open, discover, refresh, close, and integrity-check Scrivener projects; inspect binder structure, compile settings, manuscript briefing, statistics, and snapshots.
Read, write, create, move, delete, restore, and update documents, including titles, synopses, notes, labels, statuses, and custom metadata; read annotations.
Search document content or titles, search trash, find every mention of an entity, and run semantic search.
Analyze documents for readability, pacing, style, and issues; check project consistency and plot consistency; get AI suggestions, enhancements, or generated prose.
Set writing goals and author preferences, review goal progress, and collect feedback on AI operations.
Compile documents and export manuscripts as Markdown, HTML, JSON, DOCX, EPUB, or PDF; generate synopsis/query/pitch/blurb marketing materials.
Persist project memory for characters, worldbuilding, plot threads, and style guides; add/query relationships, character networks, entity references, orphans, and missing-connection suggestions.
Queue, poll, and cancel background analysis jobs; discover and activate tool groups with list_skills and use_skill.
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., "@Scrivener MCP analyze the writing style of my current project"
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.
Scrivener MCP
MCP server for Scrivener: connect your novels, screenplays, and manuscripts to Claude, ChatGPT, and any AI assistant, with document management, writing analysis, content enhancement, offline semantic search, and character/plot tracking.
Start with the safe first session, then use editorial review and workflows, export presets, Content Credentials, or the Windows guide. Compatibility evidence records actual coverage and limits.
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. Reads Scrivener 3 projects on the
supported platforms. Listed on the
official MCP Registry as
io.github.writerslogic/scrivener-mcp.

Install
Mac app: Draftbridge for Scrivener, $4.99
Not a terminal person? Draftbridge for Scrivener is the ready-made Mac app. It finds your AI apps — Claude Desktop, BoltAI, Cursor, VS Code, LM Studio, Raycast, Claude Code — connects Scrivener MCP to each with one click, shows your projects, and repairs the connection after an app update. No Terminal, no Node.js, no settings files. One-time $4.99, up to 3 Macs, signed and notarized by Apple.
The server, setup tool, and Claude Desktop extension here stay free and open source. The app is
closed source; the fee buys the notarized build and supports development. See the
Mac install guide and FAQ. Report app problems with the
mac-app label.
Free: Claude Desktop extension or command line
Prefer to do it yourself? The .mcpb extension (Claude Desktop only) and the terminal setup below
do the same job for free.
From a terminal:
npm install -g scrivener-mcpRestart Claude Desktop and it's ready. Other clients need one more step:
npx scrivener-setupThis finds Claude Desktop, Claude Code, Cursor, VS Code, LM Studio, BoltAI, and Raycast and
configures them for you, then confirms the server starts. No Node.js on your Mac? See the
Mac install guide. To set up Claude Code by hand instead:
claude mcp add -s user scrivener -- npx scrivener-mcp, then restart it (or run /mcp).
npx, no install
npx scrivener-mcpor add it to Claude Desktop's config directly:
{
"mcpServers": {
"scrivener": { "command": "npx", "args": ["scrivener-mcp"] }
}
}From GitHub
npm install -g writerslogic/scrivener-mcp # latest main; requires pinned Rust/wasm-pack
npm install -g writerslogic/scrivener-mcp#v0.12.0 # a specific releaseHomebrew (macOS)
brew install writerslogic/tap/scrivener-mcpDocker
docker build --platform linux/amd64 -t scrivener-mcp https://github.com/writerslogic/scrivener-mcp.git
docker run --platform linux/amd64 -i --rm -v /path/to/your/projects:/projects scrivener-mcpThe container uses Linux x64 with glibc because the pinned Narrative Lens 0.2.0 package has no Linux
ARM64 or musl binary. Linux ARM64 and musl hosts can use this Docker configuration; ARM hosts need
Docker's amd64 emulation. The image runs as the non-root node user;
mounted project directories must permit that user to read and write.
Any other MCP client: point it at npx scrivener-mcp as a stdio server.
Document management, deterministic analysis, local passage search, and project memory work with no
API key. Provider-assisted interpretation, generation and enhancement use 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 on legacy MCP connections, no separate key needed. MCP 2026-07-28 connections currently use configured providers for AI features; modern multi-round sampling is not implemented. Passage retrieval runs locally
through Holographic Memory 0.6.4; interpretation and explanations are optional provider features.
Keys are picked up automatically from:
ANTHROPIC_API_KEY/OPENAI_API_KEY/OPENROUTER_API_KEY~/.envor~/.scrivener-mcp/.env~/.anthropic/key,~/.openai/key,~/.openrouter/keymacOS 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 # Keychain
export ANTHROPIC_API_KEY="sk-ant-..." # or export it directlyLocal passage search works without installing a model runtime. To use your own offline ONNX embedding or reranking models with a global installation, install the optional runtime alongside the server:
npm install -g scrivener-mcp '@huggingface/transformers@^4.3.2'For a local installation, run the same command without -g in the server's installation directory.
Set SCRIVENER_WARM_EMBED_MODEL_PATH to a complete local model directory and provide
SCRIVENER_WARM_EMBED_MODEL_ID and SCRIVENER_WARM_EMBED_REVISION. Set
SCRIVENER_WARM_RERANK_MODEL_PATH to enable a local reranker. No model weights are downloaded; the
available options are listed in .env.example.
Related MCP server: Scrivener MCP Server
What You Can Do
For manuscript operations, 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. Warm 0.6.4 combines native BM25 with local embeddings and optional cross-encoder reranking. Configure local ONNX models for general semantic search; the default encoder covers a disclosed English story-concept vocabulary. Results include exact passages, locations and saved revisions; changed passages update incrementally. No embedding provider is required. See local search configuration.
Track relationships. Record and query how characters, locations, themes, and plot threads connect. Relationships persist in the project's local SQLite state. Discovery proposes unrecorded character/location pairs using saved-text co-occurrence with source revisions.
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.
Sign and validate exports. Activate credentials with use_skill({"name":"credentials"}), then
call c2pa_capabilities to inspect the installed SDK. Export a PDF with export_project, sign it
to a new embedded output with sign_content_credentials, and check that output with
validate_content_credentials. Credential operations run locally without an open project and use
administrator-configured signing material. They do not establish human authorship or formal C2PA
conformance. See Content Credentials for setup, mode coverage and
limits.
All Tools
84 tools organized by workflow. MCP 2026-07-28 connections list all of them at once. On earlier
protocol versions, tools load progressively to keep token usage low — 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.
Tool | What it does |
| Open a .scriv project (accepts .scriv folders or .scrivx files) and make it active |
| Scan common locations for Scrivener projects when you don't know the path |
| Detect the project currently open in the Scrivener app (macOS) so you don't need a path |
| Browse the binder hierarchy (folders, documents, word counts) |
| Reload from disk after external edits |
| Close the active project and flush pending changes |
| Read-only scan for structural problems (missing/duplicate UUIDs, unreadable content) |
| Read the project's compile formats and taxonomy -- labels/statuses (with colors), collections, section types |
| One "where am I?" snapshot: words vs. target (% to goal), document/status/label counts, longest/shortest documents |
| List Scrivener snapshots (title, date) for one document or the whole project |
| Read a snapshot's text as plain text, with word count |
| Diff a snapshot against the current document (or another snapshot): paragraphs added/removed and net word change |
| Take a Scrivener-native snapshot of a document (restorable from Scrivener's own Snapshots browser) before editing |
Tool | What it does |
| Metadata for one document (title, type, word count, synopsis, label, status) |
| Read content; |
| Replace saved content with revision checks, native snapshots and disclosed formatting risks |
| Propose, preview, selectively approve or reject, apply batches, recover and undo saved edits |
| Interactive binder, scene context, pacing, findings and review; text fallback for other clients |
| Create a new text document or folder |
| Change title and/or metadata (synopsis, notes, label, status, custom fields) |
| Reorganize within the binder |
| Move to trash (reversible) |
Tool | What it does |
| Literal full-text search across the active binder; |
| Local concept-vector passage retrieval, with scores, context and source revisions; no API key |
| Local keyword, bounded English concept, or hybrid retrieval with exact quoted evidence |
| Locate every occurrence of a specific name or term, with context |
| List trashed documents |
| Restore a document from trash |
| Read a document's comments and footnotes |
Tool | What it does |
| Analyze complete saved text; |
| Evidence-backed continuity report with source revisions, canon and inferred candidates |
| Confirm, dismiss, resolve and recheck evidence-bound continuity findings |
| Style-focused analysis |
| Plot-thread consistency check |
| AI-generated improvement suggestions |
| Propose a complete saved-document rewrite with source revisions; maximum 12000 UTF-16 characters |
| Generate prose from a prompt, saved-text excerpts and character profiles with revision-checked context |
| Set a word-count goal (daily, weekly, or whole project) with an optional target date |
| List goals with progress -- percent complete, words remaining, on-pace status |
| Set author preferences (tone, complexity, length, POV, style guide) that steer AI output |
| Show current preferences plus feedback insights and suggestions |
| Record a rating/comment on an AI operation to inform those insights |
| Local manuscript findings with exact evidence, author controls, coverage, persistent baselines and revision comparisons |
| Check author-supplied causality, knowledge, promises, subtext and other annotations against saved quotations |
| Offline readability, grammar, syntax-tension, dialogue, and word-frequency report for one document (narrative-lens, no AI call) |
| Offline timeline and world-state continuity pass across the manuscript |
| Offline setup/payoff tracking across scenes |
| Compare a character's earlier vs later dialogue for voice drift |
| Offline opening cues, source ranges and coverage; editorial quality remains unassessed |
| Line-edit one document for adverbs, filter words, hedges, clichés, passive voice, nominalizations, and personal tics, each with line and column (bluepencil, no AI call) |
| Echoes (a word reappearing within a window) and repeated phrases, with both locations |
| Sentence-length distribution, monotonous runs, overlong sentences, and repeated openers |
| Dialogue ratio and every quoted line's tag classified as plain, showy, adverb-modified, or untagged |
| Per-document style density across the manuscript with word-weighted means and outliers |
Manuscript comparisons include comparisonBaseline.name and its original envelope, alongside the
current result's envelope, so both saved source revisions remain identifiable after a baseline name
is reused.
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
Tool | What it does |
| Combine documents; |
| Write the manuscript to disk -- Markdown, HTML, JSON inline, or DOCX, EPUB, PDF as a file |
| Retrieve large compiled/analysis results in bounded UTF-8 chunks without filesystem tools |
| Preflight and export submission DOCX, beta-reader DOCX and validated EPUB presets |
| Project-level word/document/character counts |
| Draft synopsis, query letter, pitch, and related materials |
Intelligent compilation returns provider warnings, explicit quality availability, and saved-source
revisions. Rewrites require the complete source to fit 12000 UTF-16 characters; otherwise the
complete original is preserved. Quality opinions cover at most 4000 characters and identify that
coverage. Marketing generation reads the saved Draft by default; use documentIds to select a
smaller scope within the same 12000-character limit. Both reject source changes during generation
and provide read_result references for large output.
Activate the credentials skill on demand; these tools do not require an open project.
Tool | What it does |
| Inspect actual SDK availability, declared format/mode coverage, limits and unassessed conformance status |
| Sign a local asset to a distinct new embedded or supported |
| Validate a local asset and optional sidecar; report integrity separately from signer trust, with raw reports opt-in |
Format declarations are not proof of native compatibility. Use the Content Credentials guide and per-format native evidence before making coverage claims.
Tool | What it does |
| Store information that persists across sessions with the project |
| Create, join or leave an explicitly scoped series of selected projects |
| Curate shared characters, aliases, locations, world rules and chronology with provenance |
| Retrieve previously stored memory |
Project memory travels within each .scriv project. Explicit series memberships and shared facts use the server's persistent registry; see editorial workflows.
remember validates nested records and acknowledges the saved snapshot with its revision and record
ID. Use that ID for updates; identical creations reuse their ID, and unknown update IDs fail.
Unrecorded profile fields, style preferences and writing statistics stay absent. worldBuilding
stores named records, for example { name: "Moon Harbor", type: "location" }; all merges custom
JSON by key. Requests are capped at 64 KiB and complete project memory at 16 MiB. Large recall
results use read_result. Earlier custom world data remains available under recall with all.
Tool | What it does |
| Store a relationship between characters, locations, themes, or plot threads |
| Query entities related to a given character/theme/location |
| Find unrecorded pairs of known characters/locations that co-occur in saved Draft documents, with source revisions |
| The character relationship network |
| Trace the reference graph in either direction: entities a document mentions (by documentId), or documents mentioning an entity (by entity) |
| List registered characters/locations that no document actually mentions |
| Suggest entities a document may be missing, inferred from cross-document co-occurrence |
Relationship tools use project-owned SQLite without an external service. Storage admits up to
10000 relationships; names contain at most 128 UTF-16 characters and labels 64. Discovery covers
the characters and locations already recorded in that graph, up to 256 entities, 1000 Draft
documents, 2 Mi UTF-16 source characters and a source-character count multiplied by entity count
of at most 134217728. Its score is the
fraction of documents mentioning both entities among those mentioning either; it is a candidate
association, not a confirmed story fact. Result limits disclose omitted candidates, and large
responses use read_result. Relationship queries page in stable identity order using nextOffset
and graphRevision; edits require restarting the query. Document cross-reference tools use the
character/location registries and saved text, including Research and Draft items excluded from
Compile. Document queries read only the requested document; entity-wide queries and suggestions
inspect all active text within the same source limits. They disclose missing registries, reject
source/registry changes, and preserve every admitted match offset (up to 1000000 positions and
16 MiB of serialized mention records).
Tool | What it does |
| Analyze supplied document text asynchronously; returns a job id |
| Analyze an ordered batch of supplied document texts |
| Poll progress/results for a queued job |
| Inspect project-scoped queue counts, connectivity and legacy migration guidance |
| Run chapter review, continuity audit or beta-reader preparation with durable progress and resuming |
| Request cancellation; running embedded work finishes internally and its result is discarded |
Queued analysis always runs local prose analysis and includes readability by default. Optional
named entities require a native build with ONNX support and a loaded NER model; unavailable results
are explicit. Optional sentiment uses a local lexicon heuristic. Source revisions hash the supplied
UTF-8 text, and the envelope identifies this raw policy separately from saved RTF analysis and saved
project controls. Project batches preserve input order and run sequentially unless parallel is
selected, with at most five documents in flight. Large completed results return a _ref retrieved
through read_result. Redis/KeyDB cannot remove an active job; embedded cancellation prevents work
that has not started and discards the result of work already running.
suggest_improvements accepts async: true for the same suggestion result through get_job_status.
With useContext: true, documentId is required: generation uses up to the first 16000 UTF-16
characters of that saved document and rejects a changed revision. Its result reports the exact
excerpt range, truncation and source revision. The default useContext: false sends only the prompt.
Suggestions use the configured provider or client sampling, and queued generation is not automatically
retried. Large synchronous and queued results use read_result references.
analyze_writing_style accepts 1–64 nonempty text samples, each up to 64000 UTF-16 characters.
Its provider prompt includes at most 8000 characters including separators; coverage reports the
range used from every sample, including any omitted samples. Missing or malformed profile fields
are explicitly unavailable, partial finding lists preserve valid entries, and sample revisions
hash the original supplied UTF-8 text. Large profiles also use read_result references.
Tool | What it does |
| List the available tool groups and their tools |
| Activate another tool group on demand |
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 -- Response limits and measured context costs
0.14 Validation -- Candidate evidence, supported scope and remaining qualification limits
Architecture -- How the server works, module structure, data flow
Scrivener Compatibility -- Supported Scrivener versions, platforms, and format coverage
Content Credentials -- Local C2PA signing and validation, administrator setup, tested modes and conformance limits
Scrivener File Format -- The reverse-engineered
.scrivformat, what we read vs. infer, and safe-modification guidanceFuzzing -- Jazzer.js target and OSS-Fuzz integration details
Contributing -- Development setup, code conventions, adding new tools
Requirements
Stable Node.js
^22.23.4 || ^24.22.1 || >=26.12.1(24.22.1 or newer on Node 24 recommended)Scrivener 3 project files (.scriv)
Native npm/npx installs: macOS x64/ARM64, Windows x64, or Linux x64 with glibc. Architecture refers to the Node.js runtime.
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
The patched floors protect Node TLS paths used by the pinned CAI native SDK; SQLite 13 also requires Node-API 10. Node 23 and 25 are excluded. See the runtime compatibility policy.
Development
See the compatibility and upgrade policy for runtime checks, protocol contracts, dependency upgrades and the stable release gate.
git clone https://github.com/writerslogic/scrivener-mcp.git
cd scrivener-mcp
npm install --ignore-scripts
# Install the pinned Rust/wasm-pack tools listed in native/c2pa-binding/README.md
npm run build:c2pa # Generate the engine from source
npm run dev # Development mode with hot reload
npm run build # Compile TypeScript
npm test # Run tests
npm run typecheck # Type checking onlyWhy This One?
A few Scrivener MCP servers exist. Our column describes the current server; other feature claims come from each project's own docs, published package, and advertised tools, last re-read on 2026-10-22; stars, forks, activity, and published version were refreshed
necessarily impossible through the connected AI client.
Feature | scrivener-mcp | |||||
Public MCP tools | 84 | 30 | 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 | local concept vectors, BM25 and quoted passages | 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 | saves AI drafts; no manuscript export documented | no | no | |
Windows support | native CI verified; synthetic projects | yes (prebuilt binary) | yes | not documented | not documented | yes |
Installation | npm, Homebrew, Docker, or the Draftbridge Mac app | crates.io, prebuilt binary, or source | npm package (deprecated) | MCPB or source | source / | source / |
License | AGPL-3.0 / commercial dual-license | MIT | MIT | MIT | not declared | MIT |
Repository/package status | weekly activity; npm | occasional activity | removed from npm | weekly activity | occasional activity; no releases | repository unavailable |
Community | ⭐ 71 · 25 forks | ⭐ 7 | source repository unavailable | ⭐ 1 | ⭐ 0 | unavailable |
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.
Scrivener is a trademark of Literature & Latte Ltd. This project is independent and is not affiliated with, endorsed by, or sponsored by Literature & Latte.
Free for personal use and open-source projects. Commercial license available for proprietary integration. See COMMERCIAL_LICENSE.md for details.
Also from WritersLogic: WritersProof witnesses your keystrokes, pauses, and revisions as you write, then seals that process into tamper-evident, independently verifiable proof you wrote it yourself — AI accusations, settled with evidence instead of your word.
MCP 2026-07-28 uses server/discover and a stable full tool catalog. Each request supplies the protocol version and client capabilities in standard MCP _meta. open_project returns projectHandle in text and structured content; pass it as an ordinary argument on subsequent project tool calls. The legacy com.writerslogic/project request metadata token is also accepted. Handles expire on close, reopen or restart. Calls are serialized per modern stdio connection. Legacy MCP initialization, implicit project scope and progressive skill discovery remain available.
Each connection admits at most 32 active or queued tool calls and 16 MiB of retained request parameters, with a burst of 120 attempts and refill of two attempts per second. Rejections are explicit and report retry guidance. Canceled queued work releases its slot; running work retains capacity until it settles. These limits do not bound total process memory, tool results or native worker allocations. Prefer the documented report page defaults and follow revision-bound continuation cursors when retrieving large reports.
Available Tools
57 toolsadd_relationshipAdd RelationshipAIdempotent
Record a typed, directed relationship between two story entities (e.g. a character "mentors" another, or a character "appears in" a document) in the project story graph. Returns the stored edge with its generated id. Use this to build the knowledge graph that find_relationships, character_network, and discover_connections then query. Requires an open project with the relationship engine initialized.
Inputs: head (required), tail (required), headType (required), relation (required), +1 more.
analyze_documentAnalyze DocumentARead-onlyIdempotent
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.
Inputs: documentId (required), analysisTypes. Returns: issues, pacing, readability
analyze_writing_styleAnalyze Writing StyleARead-onlyIdempotent
Analyze the prose style of one or more text samples — sentence variety, tone, voice, pacing, and other stylistic features — and return a structured style profile. Use this to characterize how something is written; use analyze_document for document-level metrics or check_plot_consistency for narrative coherence.
Inputs: samples (required). Returns: analysis
cancel_jobCancel JobAIdempotent
Cancel a queued or running background job by its type and id. Returns whether the cancellation succeeded. Cancelling an already-finished or unknown job is harmless. Use get_job_status first to check whether a job is still in progress.
Inputs: jobId (required), jobType (required).
character_networkCharacter NetworkARead-onlyIdempotent
THE default tool for "map my characters" / "how do my characters connect": returns the full character relationship network — every character and the typed relationships between them — for rendering a graph or analyzing cast structure. Prefer this for any whole-cast question. Use find_relationships only for one entity's connections, get_entity_references for which documents mention an entity, and suggest_connections to surface missing links. Requires an open project with the relationship engine initialized. Takes no parameters.
Inputs: no named parameters. Returns: network
check_consistencyCheck Project ConsistencyARead-onlyIdempotent
Scan the whole project for continuity problems and return the issues found: character contradictions, timeline conflicts, location mismatches, and dropped or inconsistent plot threads. This is the project-wide continuity checker; use analyze_document to critique a single document's prose instead. Narrow the scan with checkTypes. Requires an open project.
Inputs: checkTypes. Returns: counts, issues, checkTypes
check_plot_consistencyCheck Plot ConsistencyARead-onlyIdempotent
Scan a set of documents for plot-level inconsistencies — timeline conflicts, contradicted facts, dropped threads — and return the issues found with the documents involved. Use this for story/plot coherence across chapters; use check_consistency for general consistency checks or analyze_writing_style for prose-level analysis.
Inputs: documents (required), async. Returns: jobId, issues, message
close_projectClose ProjectAIdempotent
Close the currently open project, flush any pending memory/auto-save state, and clear the active session. After this, document and analysis tools have no project to act on until open_project is called again. Use this to switch projects cleanly or release file handles at the end of a session. Requires an open project. Takes no parameters.
Inputs: no named parameters.
collect_feedbackCollect FeedbackA
Record feedback on an AI operation (e.g. "enhance_content") so it feeds the insights returned by get_writing_preferences. Provide a 1-5 rating, whether the output was kept (accepted), and/or a comment. Use after the writer reacts to AI output. Requires an open project.
Inputs: operation (required), rating, comment, accepted.
compare_snapshotCompare SnapshotARead-onlyIdempotent
Compare a document snapshot against the current document text, or against another snapshot (pass againstSnapshotId). Returns the paragraphs added and removed and the net word-count change — use this to see what changed since a snapshot was taken. Read-only. Requires an open project (call open_project first). Get snapshot ids from list_snapshots.
Inputs: documentId (required), snapshotId (required), againstSnapshotId. Returns: to, from, wordDelta, documentId, +5 more
compile_documentsCompile DocumentsARead-onlyIdempotent
Compile the project's documents into a single continuous manuscript in the requested format and return the compiled text (large results are spooled to a file reference). In "standard" mode it joins documents in binder order; in "intelligent" mode it uses AI to optimize the output for a specific target such as an agent query or synopsis. To write a manuscript to disk in a publishing format (EPUB, etc.) use export_project instead. Requires an open project.
Inputs: mode, format, separator, documentIds, +8 more. Returns: file, text, format, sections, +2 more
create_documentCreate DocumentA
Create a new text document or folder in the binder and return its new id. Optionally set the initial body content and the parent folder; if no parent is given the item is added at the top level. Each call creates a distinct item (not idempotent). Use write_document to change content afterward. Requires an open project.
Inputs: title (required), force, content, parentId, +1 more. Returns: documentId
create_snapshotCreate Document SnapshotA
Take a Scrivener-native snapshot of a document's current content, restorable from Scrivener's own Snapshots browser. Use this before rewriting a document to give the writer a native rollback point. Copies the live content into the project's Snapshots directory with a title and timestamp; does not modify the document. Requires an open project and a document that has content.
Inputs: documentId (required), title. Returns: date, title, documentId, snapshotId
delete_documentDelete DocumentADestructiveIdempotent
Move a document to the project trash. This is reversible: the document can be listed with list_trash and brought back with restore_document until the trash is emptied in Scrivener. Deleting an already-trashed document is a no-op. Requires an open project and a valid document id.
Inputs: documentId (required), force.
detect_open_projectDetect Open Scrivener ProjectARead-onlyIdempotent
Detect which Scrivener project the user currently has open in the desktop Scrivener app, so you can act on it without asking for a path. Use this when the user says "my project", "the project I have open", or gives a command with no project specified. Reads the open window names from the running app and resolves them to .scriv paths on disk; it does not open anything. If exactly one project is open, pass its path to open_project. macOS only right now (returns supported=false elsewhere; fall back to discover_projects). The first use may prompt macOS to allow the client app to control Scrivener.
Inputs: searchPath. Returns: count, running, supported, unresolved, +1 more
discover_connectionsDiscover ConnectionsARead-onlyIdempotent
Surface previously unrecorded relationships across the project by analyzing entity co-occurrence, returning candidate connections the story graph does not yet contain. Use this to find latent links to confirm with add_relationship; use find_relationships for known connections of a specific entity. Requires an open project with the relationship engine initialized.
Inputs: k. Returns: connections
discover_projectsDiscover Scrivener ProjectsARead-onlyIdempotent
Scan common locations (Documents, Desktop, and iCloud Mobile Documents) for Scrivener projects and return the paths of every .scriv folder found, searching up to three levels deep. Use this when the user refers to their project by name rather than path ("open my novel"): present the results and pass the chosen path to open_project. Does not open anything itself. Returns a list of project paths, or a message if none are found.
Inputs: searchPath. Returns: count, projects
enhance_contentEnhance ContentARead-only
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.
Inputs: documentId (required), enhancementType (required), options.
export_projectExport Project To FileARead-onlyIdempotent
Export the whole project to a publishing/interchange format. Markdown, HTML, and JSON are returned inline; DOCX (agent/editor submission), EPUB (e-readers), and PDF (print/review) are written to a file on disk and the path is returned. Use this to produce a deliverable file; use compile_documents when you want the compiled text back in the response rather than written to disk. Requires an open project.
Inputs: format (required), options, outputPath. Returns: path, bytes, format, content, +1 more
find_mentionsFind Entity MentionsARead-onlyIdempotent
Find every occurrence of a specific name or term (a character, place, or keyword) across all documents, returning each hit with surrounding context and its document. Use this for exact "where does X appear" lookups; use search for relevance-ranked results or semantic_search for meaning-based matches. Returns up to 50 mentions. Requires an open project.
Inputs: entity (required), contextLength. Returns: mentions
find_orphaned_entitiesFind Orphaned EntitiesARead-onlyIdempotent
List registered characters and locations that no document actually mentions — entities added to the registry but with no textual presence, which are candidates for removal or for prose that still needs writing. Uses exact whole-word matching, no AI. Requires an open project.
Inputs: no named parameters. Returns: orphans, registrySize
find_relationshipsFind RelationshipsARead-onlyIdempotent
Query the story graph for entities related to a given entity, returning the connected entities and the relationship types that link them. This covers cross-references and discovered connections for a specific entity; use character_network for the whole-cast graph, or discover_connections to surface co-occurring entities project-wide. Requires an open project with the relationship engine initialized.
Inputs: entity (required), k, relation. Returns: relationships
generate_contentGenerate ContentARead-only
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 (ANTHROPIC_API_KEY, OPENAI_API_KEY, or OPENROUTER_API_KEY); without one a placeholder is returned.
Inputs: prompt (required), length, context.
generate_marketing_materialsGenerate Marketing MaterialsARead-only
Generate a publishing/marketing artifact from the manuscript — a synopsis, query letter, pitch packet, elevator pitch, or book blurb — using the project content as context, and return the generated text. Use this for submission and pitching materials; use compile_documents to assemble the manuscript itself. Requires an open project with text content. Each call regenerates fresh output (not idempotent).
Inputs: materialType (required), length, targetAudience.
get_compile_settingsGet Compile & Taxonomy SettingsARead-onlyIdempotent
Return the project's compile-format definitions (from Settings/compile.xml) and its taxonomy: the named compile formats and their section-layout counts, the current output file type, label and status definitions (with colors), saved collections, and user-defined section types. Use this to discover what compile formats and metadata categories a project defines before compiling or organizing. Read-only; does not run a compile. If a project has never been compiled, hasCompileSettings is false and only the taxonomy is returned. Requires an open project (call open_project first).
Inputs: no named parameters. Returns: labels, options, statuses, collections, +4 more
get_document_infoGet Document InfoARead-onlyIdempotent
Return metadata for a single document without its body text: title, type, word count, synopsis, label, status, parent, and custom metadata. Use this to inspect a document or to read its word count cheaply; call read_document when you need the actual prose, or get_structure for the whole binder. Requires an open project and a valid document id.
Inputs: documentId (required). Returns: path, document, location, metadata
get_entity_referencesGet Entity ReferencesARead-onlyIdempotent
Trace the reference graph between documents and registered characters/locations, in either direction. Pass documentId to list the entities a document mentions (its cast and settings, with counts and offsets); pass entity (registry id or name) to list every document that mentions it, ranked by count. Provide exactly one of documentId or entity. Exact whole-word, case-insensitive matching against the registries — no AI. Returns empty when there are no matches or the registries are empty. Requires an open project.
Inputs: entity, documentId. Returns: entity, mentions, documents, documentId
get_job_statusGet Job StatusARead-onlyIdempotent
Look up the status and progress of a background job previously started by queue_document_analysis, queue_project_analysis, or another async tool. Returns the job state (queued, running, completed, failed), progress, and result when finished. Poll this after enqueuing work; use cancel_job to stop a job.
Inputs: jobId (required), jobType (required). Returns: error, state, result, progress
get_manuscript_briefingManuscript BriefingARead-onlyIdempotent
One "where am I?" snapshot of the whole manuscript: total word count against the project draft target (with percent-to-goal and deadline), document/folder counts, the per-status and per-label breakdown, and the longest and shortest documents. Use this right after open_project to orient before diving in, instead of stitching get_statistics, get_writing_goals, and get_compile_settings together. Read-only. Requires an open project.
Inputs: no named parameters. Returns: title, words, author, byLabel, +5 more
get_statisticsGet Project StatisticsARead-onlyIdempotent
Return project-wide statistics: total word and document counts, plus title and author. Use this for a quick project overview; use get_structure for the per-document breakdown or get_document_info for a single document. Requires an open project.
Inputs: detailed. Returns: title, author, metadata, totalWords, +14 more
get_structureGet Project StructureARead-onlyIdempotent
Return the binder hierarchy of the open project: its folders and documents in tree order, each with id, title, type, depth, and word count. Use this to understand the manuscript layout and to obtain the document ids that read_document, write_document, and the analysis tools require. By default returns a compact flat array of [id, title, type, depth, wordCount, hasChildren] tuples to save tokens; set summaryOnly for just project-level counts. Requires an open project (call open_project first).
Inputs: flat, folderId, maxDepth, summaryOnly, +1 more. Returns: summary, documents, structure
get_writing_goalsGet Writing GoalsARead-onlyIdempotent
List writing goals with computed progress: percent complete, words remaining, and whether each goal is on pace given its target date and the current project word count. Use when the writer asks how close they are to a goal or for a progress dashboard; not when defining a new goal (use set_writing_goal) or forecasting a finish date from writing velocity (use predict_completion). Related: set_writing_goal. Requires an open project and the project database.
Inputs: status. Returns: goals, projectWords
get_writing_preferencesGet Writing PreferencesARead-onlyIdempotent
Return the current author writing preferences plus feedback insights: how much feedback has been recorded, average satisfaction per operation, and non-binding suggestions for adjusting preferences. Use to review what is currently steering AI output, or to see whether recorded feedback points to a change. Related: set_writing_preferences, collect_feedback. Requires an open project.
Inputs: no named parameters. Returns: insights, preferences
list_skillsList SkillsARead-onlyIdempotent
List the available skills (tool groups) — project, documents, search, analysis, compilation, memory, relationships — with a description, the tool count, whether the skill is already active, and its tool names. Use this to discover capabilities, then call use_skill to activate a group whose tools you need. Takes no parameters.
Inputs: no named parameters. Returns: skills
list_snapshotsList Document SnapshotsARead-onlyIdempotent
List the snapshots Scrivener has saved of a project's documents (from the .scriv package's Snapshots/ directory). Pass documentId to list one document's snapshots, or omit it to list snapshots for every document that has any. Each entry gives the owning document id and title, a snapshotId (pass it to read_snapshot to get the text), the snapshot's title, and its date. Read-only. Returns an empty list when nothing has been snapshotted. Requires an open project (call open_project first).
Inputs: documentId. Returns: documents
list_trashList TrashARead-onlyIdempotent
List all documents currently in the project trash, with their ids and titles. Use this to see what can be brought back with restore_document, or to confirm a delete_document call. Requires an open project. Takes no parameters.
Inputs: no named parameters. Returns: items
move_documentMove DocumentAIdempotent
Move a document or folder to a different parent folder in the binder, optionally at a specific position among the target folder's children. Changes only the location, not the content. Requires an open project, a valid document id, and a valid target folder id.
Inputs: documentId (required), targetFolderId (required), force, position.
open_projectOpen Scrivener ProjectAIdempotent
Open a Scrivener project and make it the active project for this session. Every document, structure, search, and analysis tool operates on the project opened here, so call this first. Accepts the path to a .scriv folder or the .scrivx file inside it and resolves the project automatically. Returns the project title, author, and metadata. Opening a project closes any project already open. If you do not know the path, call discover_projects first.
Inputs: path (required).
queue_document_analysisQueue Document AnalysisA
Enqueue a background NLP analysis of one document (readability, entities, sentiment) and return a job id immediately without blocking. Poll the job with get_job_status and stop it with cancel_job. Use this for large documents where a synchronous analyze_document call would be slow; use analyze_document directly for quick, inline results.
Inputs: content (required), documentId (required), options. Returns: jobId
queue_project_analysisQueue Project AnalysisA
Enqueue a background batch analysis across many documents at once and return a job id immediately. Poll progress with get_job_status and stop it with cancel_job. Use this to analyze a whole manuscript or large set of documents; for a single document prefer queue_document_analysis or the synchronous analyze_document.
Inputs: documents (required), projectId (required), options. Returns: jobId
read_annotationsRead Document AnnotationsARead-onlyIdempotent
Return the inline comments and footnotes attached to a document, grouped by type. Use this to review editorial notes and references without reading the full body; use read_document for the prose itself. Requires an open project and a valid document id.
Inputs: documentId (required), includeComments, includeFootnotes. Returns: comments, footnotes
read_documentRead DocumentARead-onlyIdempotent
Read the text of a single document. By default returns plain text; set format to "formatted" to get rich text with styling and structure preserved. Use offset and limit to page through long documents by word range instead of returning the whole thing. Use get_document_info when you only need metadata, or search/semantic_search to find content across many documents. Requires an open project and a valid document id.
Inputs: documentId (required), limit, format, offset.
read_snapshotRead Document SnapshotARead-onlyIdempotent
Return the text of a single document snapshot. Pass the documentId and the snapshotId from list_snapshots. The snapshot's RTF is converted to plain text. Read-only; does not alter the document or restore the snapshot. Requires an open project (call open_project first).
Inputs: documentId (required), snapshotId (required). Returns: date, text, title, wordCount, +2 more
recallRecall Project FactsARead-onlyIdempotent
Read back the project's persistent memory: stored characters, world-building, plot threads, and style guide. Returns the requested store, or the full memory when memoryType is omitted or "all". Use remember to write new facts. Requires an open project.
Inputs: memoryType. Returns: memory
refresh_projectReload Project From DiskAIdempotent
Reload the open project from disk, discarding the in-memory cache. Use this when the project has been changed by the Scrivener app or another process while open here, so that subsequent reads reflect the latest saved state. Requires an open project. Takes no parameters.
Inputs: no named parameters.
rememberRemember Project FactsA
Store or update a fact in the project's persistent memory so later tools and sessions stay consistent: a character profile, world-building detail, plot thread, or style-guide entry. Pass an id inside data to update an existing entry, or omit it to add a new one. Use recall to read memory back. Requires an open project.
Inputs: data (required), memoryType (required).
restore_documentRestore Document From TrashAIdempotent
Restore a trashed document back into the binder, optionally into a specific target folder (otherwise it returns to a default location). Use list_trash to find the document id first. This is the inverse of delete_document. Requires an open project and a valid document id.
Inputs: documentId (required), force, targetFolderId.
searchSearch DocumentsARead-onlyIdempotent
Search the open project and return matching documents with relevance-ranked snippets. By default performs an intelligent full-text/semantic search of document content; set field to "title" for a fast case-insensitive title lookup, or scope to "trash" to search only trashed documents. For meaning-based "find passages about X" queries use semantic_search; to find every occurrence of a specific name or term use find_mentions. Requires an open project.
Inputs: query (required), field, regex, scope, +2 more. Returns: results
semantic_searchSemantic SearchARead-onlyIdempotent
Find passages by meaning rather than exact words, using embeddings over the project, and return the most relevant documents with similarity scores and related entities. Use this for conceptual "find passages about X" queries; use search for keyword/full-text matching and find_mentions to locate every occurrence of a specific name or term. Calls an external embedding model. Requires an open project with semantic indexing available.
Inputs: query (required), threshold, maxResults. Returns: results, searchType
set_writing_goalSet Writing GoalADestructive
Create or replace the active word-count goal for a cadence (daily, weekly, or whole project), optionally with a target date. Setting a goal of a type that already has an active goal updates that goal in place rather than stacking duplicates. Use when the writer commits to a target ("write 1000 words a day", "finish an 80k novel by December"); not when you only want to read current progress (use get_writing_goals) or log a finished session. Related: get_writing_goals, predict_completion. Requires the project database.
Inputs: type (required), targetWords (required), targetDate.
set_writing_preferencesSet Writing PreferencesAIdempotent
Set the author writing preferences that shape AI writing output (enhance_content and other generative tools). Preferences are injected into the AI prompt, so changes take effect on the next enhancement. All fields are optional and merge into the existing profile. Use when the writer states a preferred tone, complexity, length, point of view, style guide, or a custom instruction. Requires an open project (preferences persist in the project database).
Inputs: tone, length, enabled, complexity, +3 more.
suggest_connectionsSuggest Missing ConnectionsARead-onlyIdempotent
Suggest characters or locations a document might be missing: entities it does not mention but that frequently co-occur — in other documents — with the entities it does mention. Deterministic co-occurrence inference (no AI), ranked by how many of the document’s entities each suggestion travels with. Use this to spot a scene that omits a character who usually appears with its cast. Returns empty when the document has no known entities. Requires an open project.
Inputs: documentId (required). Returns: documentId, suggestions
suggest_improvementsSuggest ImprovementsARead-only
Generate AI writing suggestions for a prompt or a specific document — ideas for revision, next steps, or alternatives. Returns suggestion text. Optionally grounds the suggestions in a document's content. Use this for generative "how could this be better" help; use analyze_document for structured metrics or check_consistency to find contradictions.
Inputs: prompt (required), async, documentId, useContext.
update_documentUpdate Document Title & MetadataAIdempotent
Update a document's title and/or its metadata (synopsis, notes, label, status, and custom fields) in a single call. Pass only the fields you want to change; omitted fields are left untouched. To change the body text use write_document; to move it use move_document. Requires an open project and a valid document id.
Inputs: documentId (required), force, label, notes, +4 more.
use_skillActivate SkillAIdempotent
Activate a skill so its tools become available to call. Returns the activated skill's tool names and their schemas; clients that support tools/list_changed will also see the new tools appear automatically. Call list_skills first to see the available skill names. Tools are progressively disclosed, so activate the skill you need before using its tools (most tools are pre-activated by default).
Inputs: name (required).
verify_project_integrityVerify Project IntegrityARead-onlyIdempotent
Scan the open project for structural problems and return a read-only report: binder entries with missing, malformed, or duplicate UUIDs, entries missing their type, and text documents whose backing content is unreadable or empty. Use when a project looks corrupted, after manual edits to the .scrivx file, or before a bulk operation; not when you just want the document tree (use get_structure) or a single document (use get_document_info). This tool only detects problems and never repairs them. related: get_structure, get_document_info. Requires an open project.
Inputs: includeTrash. Returns: ok, issues, checked, summary
write_documentWrite DocumentAIdempotent
Replace a document's text with new content, preserving the surrounding Scrivener formatting the edit did not touch (stylesheet, styles, images, footnotes) byte-for-byte. The result reports whether formatting was fully preserved; when an edit would drop non-round-trippable content it takes a Scrivener snapshot first (restorable in Scrivener) and says so. To change only the title or metadata use update_document; to add a new document use create_document. Requires an open project and a valid document id.
Inputs: content (required), documentId (required), force.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 57 tools
Most tools have clearly differentiated purposes, especially around document CRUD, snapshots, search modes, and export. However, the cluster of analysis and feedback tools—analyze_document, analyze_writing_style, check_consistency, check_plot_consistency, and suggest_improvements—has meaningful overlap and requires careful description-reading to select correctly.
The naming convention is overwhelmingly verb_noun snake_case with consistent prefixes like get_, list_, create_, read_, write_, and set_. A few bare-verb or noun-style exceptions such as search, remember, recall, and character_network deviate slightly, preventing a perfect score.
At 57 tools, this server is in the extreme mismatch range and presents a very heavy namespace for agents to navigate. The skills-based progressive disclosure mitigates discovery cost, but it does not reduce the total surface, and many analysis and generation tools could likely be consolidated.
The tool surface covers the full Scrivener workflow: project discovery and session lifecycle, document CRUD and trash recovery, snapshots, metadata, multiple search modes, AI analysis and generation, goals, memory, relationship graphs, compile/export, and background jobs. There are no obvious dead ends for the stated domain.
Maintenance
Related MCP Connectors
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
Connect Claude to your Platform7n workspaces: chat, links, work and decks. One-click OAuth.
Connect Claude to your Platform7n workspaces: chat, links, work and decks. One-click OAuth.
Give Claude only the Google Drive files you choose. Every action logged.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables Claude Desktop to search and query personal document collections (PDF, Word, Markdown, text) using semantic search and conversational AI with full context preservation across exchanges.MIT
- AlicenseAqualityNot gradedmaintenanceEnables AI assistants to read, write, organize, search, and compile Scrivener writing projects. Supports manuscript editing, document management, consistency checking, and PDF export for writers using Scrivener 3.228 npm-
- AlicenseBqualityNot gradedmaintenanceEnables AI-powered knowledge management and creative support by connecting Scrapbox data to Claude. Supports advanced search, relationship analysis between pages, theme extraction, and literary analysis of personal knowledge bases.32-
- AlicenseNot gradedqualityDmaintenanceLocal MCP server that exposes Scrivener projects to AI clients, enabling project creation, binder navigation, document read/write, and metadata updates without opening Scrivener.275 npm1AGPL 3.0