Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.writerslogic/scrivener-mcp

NPM · SCRIVENER-MCP · SCANNED SEP 21

MCP server for Scrivener: read, write, analyze, and search your manuscripts with AI assistants.

Available components

0 this week 92 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security91
  • No malware found by supply-chain analysis.Pass
  • Known CVEs were checked across the 286 of 287 dependencies we could resolve, so this covers what we could see, not the whole tree.Partial
  • Runs a script at install time (postinstall) that we could not recognise. It may be perfectly ordinary, but we do not read the published tarball, so we cannot say what it does. View diagnostics → Partial
  • Dependency health was assessed across the 286 of 287 dependencies we could resolve, so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to writerslogic/scrivener-mcp). View diagnostics → Pass
  • Clear OSI-approved license (AGPL-3.0-only).Pass
  • Actively maintained (last published 57 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability81
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 1892 tokens (~126/item across 15 items; 15 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
  • Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (73% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 15 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 15 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the io.github.writerslogic/scrivener-mcp server?

io.github.writerslogic/scrivener-mcp runs locally as an npm package, launched with npx -y scrivener-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · scrivener-mcp

# add to Claude Code
claude mcp add writerslogic-scrivener-mcp -- npx -y scrivener-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "writerslogic-scrivener-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "scrivener-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "writerslogic-scrivener-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "scrivener-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add writerslogic-scrivener-mcp -- npx -y scrivener-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "writerslogic-scrivener-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "scrivener-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add writerslogic-scrivener-mcp --command npx --arg -y --arg scrivener-mcp
# ~/.hermes/config.yaml
mcp_servers:
  writerslogic-scrivener-mcp:
    command: "npx"
    args: ["-y", "scrivener-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "writerslogic-scrivener-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "scrivener-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add writerslogic-scrivener-mcp -t stdio -c npx -a -y scrivener-mcp
// mcp.json
{
  "mcpServers": {
    "writerslogic-scrivener-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "scrivener-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 21 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 20 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 19 Sept 26 +1
    • Stability: 0.97 → pass security
  • 17 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 14 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 13 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 12 Sept 26 +1
    • Stability: 0.97 → pass security
  • 10 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Analysed npm/scrivener-mcp@0.12.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo writerslogic/scrivener-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/writerslogic/scrivener-mcp/.github/workflows/release.yml@refs/tags/v0.12.0
Rekor log index 2252378580
Predicate type https://slsa.dev/provenance/v1
Subject digest sha512:53172ecc10c34a4fff0bb04a8fea1873eb8f763d89a6bb6090203d2ff7c641dc185488ca70a634667062c9c920c6886253a99a9a89d188c91a4671779

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
postinstall unreviewed node scripts/postinstall.cjs

Background: Why install scripts are a supply-chain risk →

Dependencies 286 packages
Packages resolved 286
Deprecated 4
Stale 112
Tree resolution Partial

The dependency tree was only partially resolved, so these counts may be incomplete.

Background: SBOMs and build attestations, explained →

MCP tools · 15 exposed · ~1,892 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
close_project ~76

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.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

compare_snapshot ~129

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.

NameTypeReqDescription
againstSnapshotIdstringOptional second snapshot id to compare against. Omit to compare against the current document text.
documentIdstringyesUUID of the document.
snapshotIdstringyesThe baseline snapshot id (from list_snapshots).
NameTypeReqDescription
addedParagraphsarrayyesParagraphs present in the compared-to text but not the snapshot.
documentIdstringyes
fromobjectyesThe baseline snapshot.
removedParagraphsarrayyesParagraphs present in the snapshot but not the compared-to text.
toobjectyesWhat it was compared against ("current" or a snapshot id).
unchangedParagraphsnumberCount of paragraphs common to both.
wordDeltanumberyesto.wordCount minus from.wordCount (negative means text was cut).
wordsAddednumberWords present in the compared-to text but not the snapshot (word-level).
wordsRemovednumberWords present in the snapshot but not the compared-to text (word-level).

No examples provided.

create_snapshot ~115

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.

NameTypeReqDescription
documentIdstringyesUUID of the document to snapshot.
titlestringSnapshot title shown in Scrivener. Defaults to "Snapshot".
NameTypeReqDescription
datestringyesTimestamp recorded for the snapshot.
documentIdstringyes
snapshotIdstringyesId of the new snapshot (for read_snapshot).
titlestringyes

No examples provided.

detect_open_project ~171

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.

NameTypeReqDescription
searchPathstringOptional extra directory to resolve project names against, in addition to the default locations. Absolute or ~-relative path.
NameTypeReqDescription
countnumberyesNumber of resolved open projects.
openProjectsarrayyesOpen projects resolved to a .scriv path.
runningbooleanyesWhether the Scrivener app appears to be running.
supportedbooleanyesFalse on platforms where detection is not implemented (non-macOS).
unresolvedarrayyesOpen project names that could not be matched to a .scriv folder on disk.

No examples provided.

discover_projects ~136

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.

NameTypeReqDescription
searchPathstringOptional extra directory to search in addition to the default locations, e.g. an external drive or a custom projects folder. Absolute or ~-relative path.
NameTypeReqDescription
countnumberyesNumber of projects found.
projectsarrayyesAbsolute paths of the .scriv projects found.

No examples provided.

get_compile_settings ~116

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).

Input schema present but exposes no named parameters.

NameTypeReqDescription
collectionsarraySaved collections (binder, saved searches, groups).
compileFormatsarrayyesNamed compile formats the project defines.
currentFileTypestringDefault output file type of the last-used compile (e.g. "pdf").
hasCompileSettingsbooleanyesFalse when Settings/compile.xml is absent or unreadable.
labelsarrayLabel definitions with colors.
optionsobjectGlobal compile options.
sectionTypesarrayUser-defined section types (Scene, Chapter, Part Heading, ...).
statusesarrayStatus definitions.

No examples provided.

get_manuscript_briefing ~100

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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
authorstring
averageDocumentLengthnumberMean words per text document.
byLabelobjectyesCount of text documents per label.
byStatusobjectyesCount of text documents per status (e.g. To Do, Done).
documentsobjectyes
longestobjectLongest text document by word count, or null.
shortestobjectShortest text document by word count, or null.
titlestring
wordsobjectyes

No examples provided.

get_structure ~260

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).

NameTypeReqDescription
flatbooleanWhen true (default), return a compact flat array of [id, title, type, depth, wordCount, hasChildren] tuples. When false, return the nested tree object.
folderIdstringUUID of a binder folder, as returned by get_structure.
includeTrashbooleanSet true to include trashed items in the result. Default false.
maxDepthnumberMaximum depth to descend into the binder tree, starting at 0 for top-level items. Omit to return the full hierarchy.
summaryOnlybooleanWhen true, skip the tree and return only project-level counts (documents, words) plus title and author. Default false.
NameTypeReqDescription
documentsarrayFlat list of binder items in tree order (present unless summaryOnly).
structureobjectNested binder tree (present when flat is false).
summaryobjectProject-level counts plus title and author (present when summaryOnly).

No examples provided.

list_skills ~75

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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
skillsarrayyesThe available skills (tool groups).

No examples provided.

list_snapshots ~139

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).

NameTypeReqDescription
documentIdstringUUID of a single document to list snapshots for. Omit to list all documents.
NameTypeReqDescription
documentsarrayyesOne entry per document that has snapshots.

No examples provided.

open_project ~150

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.

NameTypeReqDescription
pathstringyesPath to the Scrivener project: either the .scriv folder (e.g. "~/Documents/My Novel.scriv") or the .scrivx file inside it. Absolute or ~-relative.

No output schema declared.

No examples provided.

read_snapshot ~90

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).

NameTypeReqDescription
documentIdstringyesUUID of the document.
snapshotIdstringyesSnapshot id from list_snapshots.
NameTypeReqDescription
datestringSnapshot date.
documentIdstringyes
snapshotIdstringyes
textstringyesSnapshot content as plain text.
titlestringSnapshot title ("" if none).
wordCountnumberyesWord count of the snapshot text.

No examples provided.

refresh_project ~62

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.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

use_skill ~114

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).

NameTypeReqDescription
namestringyesThe skill to activate, e.g. "documents", "search", or "analysis". Get valid names from list_skills.

No output schema declared.

No examples provided.

verify_project_integrity ~159

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.

NameTypeReqDescription
includeTrashbooleanWhether to also verify documents in the project trash. Defaults to true so the whole project is checked; set false to skip trashed items.
NameTypeReqDescription
checkednumberyesNumber of binder items inspected.
issuesarrayyesEvery integrity problem found; empty when the project is clean.
okbooleanyesTrue when no error-severity issues were found.
summarystringyesOne-line human-readable summary of the check.

No examples provided.

Common questions

What is the io.github.writerslogic/scrivener-mcp server?

io.github.writerslogic/scrivener-mcp is listed in the public MCP registry as io.github.writerslogic/scrivener-mcp. MCP server for Scrivener: read, write, analyze, and search your manuscripts with AI assistants. This page covers its npm package (scrivener-mcp).

Is the io.github.writerslogic/scrivener-mcp server safe to use?

io.github.writerslogic/scrivener-mcp scores 92 out of 100 on VerifyMCP. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.writerslogic/scrivener-mcp server expose?

io.github.writerslogic/scrivener-mcp exposes 15 tools: list_skills, use_skill, open_project, get_structure, refresh_project, and 10 more. Their descriptions and schemas cost roughly 1,892 tokens of context every time the server is loaded.

Is the io.github.writerslogic/scrivener-mcp server still maintained?

io.github.writerslogic/scrivener-mcp is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.writerslogic/scrivener-mcp server under?

io.github.writerslogic/scrivener-mcp declares the AGPL-3.0-only licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.