scrivener-mcp
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-mcplist my scrivener projects"
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
A local MCP server that exposes your Scrivener projects to Claude (or any MCP-compatible client). Create new projects from scratch, navigate the binder, read and write document content, and update metadata — all without opening Scrivener.
Requirements
Node.js 18 or later
Scrivener 3 on macOS (
.scrivpackages)
Related MCP server: Mac MCP
Setup
cd scrivener-mcp
npm installEnvironment variables
Variable | Description |
| Path to a directory containing |
| Path to a single |
|
|
At least one of SCRIV_DIR or SCRIV_PATH must be set. Both can be set simultaneously.
Running manually
# Multi-project mode (recommended)
SCRIV_DIR="/path/to/ScrivenerProjects" npm start
# Single-project mode
SCRIV_PATH="/path/to/MyProject.scriv" npm startConfiguring Claude Desktop
Edit the Claude Desktop config file:
Mac:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Mac:
{
"mcpServers": {
"scrivener": {
"command": "node",
"args": ["/absolute/path/to/scrivener-mcp/src/index.js"],
"env": {
"SCRIV_DIR": "/Users/you/Writing/ScrivenerProjects"
}
}
}
}Windows:
{
"mcpServers": {
"scrivener": {
"command": "node",
"args": ["C:\\path\\to\\scrivener-mcp\\src\\index.js"],
"env": {
"SCRIV_DIR": "C:\\Users\\you\\Documents\\ScrivenerProjects",
"SCRIV_PLATFORM": "windows"
}
}
}
}Restart Claude Desktop after saving.
Available tools
Project management
Tool | Description |
| Lists all |
| Opens a project by name, making it active for all document tools. |
| Creates a new project and opens it. See below. |
Document tools (require an open project)
Tool | Description |
| Returns the binder as a nested tree with synopses, labels, and statuses. Pass |
| Returns the binder as a flat list with depth indicators. Useful for getting UUIDs. |
| Returns metadata and plain text content for a single document. |
| Batch version of |
| Adds a new document or folder to the binder. |
| Moves a binder item to a different parent folder. |
| Writes new plain text content to a document (stored as RTF). |
| Updates title, synopsis, label, status, or compile inclusion. |
| Batch version of |
| Searches titles and synopses across the binder. |
Creating a project
create_project accepts a full binder structure so Claude can scaffold an entire project from an idea in one call.
Parameters
Parameter | Type | Description |
| string | Project name (becomes the |
| array | Label definitions. Each is a string or |
| array | Status names. Defaults to: To Do, In Progress, First Draft, Revised Draft, Done. |
| array | Binder items in the Draft (Manuscript) folder. |
| array | Binder items in the Research folder. |
Binder item structure
{
"title": "Chapter 1",
"type": "Folder",
"synopsis": "Alice finds the letter and confronts Bob.",
"content": "Optional initial body text (Text items only).",
"label": "POV: Alice",
"status": "To Do",
"includeInCompile": true,
"children": [...]
}type:"Folder"for containers (acts, parts, chapters);"Text"for documents (scenes, notes). Defaults to"Text".synopsis: The virtual index card text — appears in Scrivener's corkboard and outliner views. Write a 1–3 sentence summary of what happens or what this item covers.labelandstatusmust match names defined in the project'slabelsandstatusesarrays.
Example
{
"name": "My Novel",
"labels": [
{ "name": "POV: Alice", "color": "blue" },
{ "name": "POV: Bob", "color": "red" }
],
"statuses": ["To Do", "First Draft", "Revised", "Done"],
"manuscript": [
{
"title": "Act One",
"type": "Folder",
"synopsis": "Alice discovers the conspiracy.",
"children": [
{
"title": "Chapter 1",
"type": "Folder",
"synopsis": "A normal Tuesday turns strange.",
"children": [
{
"title": "The Letter",
"type": "Text",
"synopsis": "Alice finds an unsigned letter in her mailbox.",
"label": "POV: Alice",
"status": "To Do"
}
]
}
]
}
],
"research": [
{
"title": "Characters",
"type": "Folder",
"children": [
{
"title": "Alice",
"type": "Text",
"synopsis": "Protagonist. Mid-30s journalist, sceptical but curious."
}
]
}
]
}Collaborative workflow
The intended pattern is to work with Claude on the structure and content of a project together, using Scrivener's own organisational features:
Start with
get_outline— Claude reads the full nested structure with synopses before suggesting or making any changes. This is how it understands the story shape.Build structure with
add_document— Add scenes, chapters, acts, or research notes at any point in the hierarchy. Always include a synopsis; it is what appears on the index card in Scrivener's corkboard.Reorganise with
move_document— Move items between parents to restructure the narrative without losing any content or metadata.Write prose with
write_document— Once structure is agreed, populate scenes with content.Track progress with
update_metadata— Update labels (e.g. POV, scene type) and statuses (e.g. First Draft, Revised) as work progresses.
Notes
Close Scrivener before writing.
write_document,update_metadata,add_document, andmove_documentmodify project files directly. The server detects an open Scrivener instance via theFiles/user.lockfile Scrivener creates and refuses to write while it exists, so concurrent edits won't silently corrupt the project. Close Scrivener and retry.Mutations re-read state automatically. Each mutating call reloads the
.scrivxfrom disk before writing, so external edits made between MCP calls aren't overwritten.binder.autosaveis kept in sync. Every binder write also refreshesFiles/binder.autosave(the zipped snapshot Scrivener cross-references on launch). Without this, Scrivener can decide the on-disk binder is "newer than expected" and shunt MCP-added items into a "Recovered Files" folder.write_documentgenerates minimal RTF compatible with Scrivener 3. Non-ASCII characters are Unicode-escaped.Label and status IDs are discoverable via
list_documents—labelId/statusIdare raw IDs,label/statusare the resolved names.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
- mcpOAuthco.aistoryhub
Remote MCP server for AIStoryHub: stories, chapters, story bible, Voiceprints, AI generation.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA lightweight MCP server that bridges AI agents and macOS, enabling automation of file navigation, application control, UI interaction, browser automation, and system operations.184MIT
- AlicenseNot gradedqualityAmaintenanceA local macOS MCP server for AI Agents that exposes safe endpoints for shell commands, files, processes, macOS automation, browser control, and more.71MIT

datacore-mcpofficial
AlicenseAqualityAmaintenanceMCP server exposing Datacore's knowledge base, GTD, and engram memory to any AI assistant.526 npmMIT- AlicenseAqualityCmaintenanceMCP server that exposes local Python scripts as tools for AI clients (e.g. Claude Desktop), enabling directory tree generation, Excel-to-text conversion, Python code extraction, and text file merging.51MIT