Other formats agents might prefer:
markdownjsonllms.txt

Agent? You probably want markdown or json, or Pod over MCP.

Reported issues for scrivener-mcp

Pod holds 17 of 17 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to scrivener-mcp.

Most discussed

project_metadata is read and written but no CREATE TABLE exists — project memory never persists

Version

0.12.0.

What happens

Every ~9 seconds, on a timer:

[ERROR] [memory-manager] Failed to save to database {"name":"SqliteError","message":"no such table: project_metadata"}
    at MemoryManager.saveToDatabase (dist/memory-manager.js:406)

Project memory — style guide, writing stats, custom context — is therefore never persisted, and the reciprocal read in loadFromDatabase() cannot work either.

Why

memory-manager.js and analysis/context-analyzer.js both re

Read the thread · 2026-08-24 · closed · external user · 1 comment

documents.path is NOT NULL but the insert never passes it — document mirror is always empty

Version

0.12.0, Node 22, macOS, Scrivener 3 project with 85 binder items.

What happens

Every project open logs one error per binder item:

[ERROR] [scrivener-project] Failed to sync document 7907A415-…: {"error":"NOT NULL constraint failed: documents.path"}

85 items → 85 errors, every time. The documents table therefore stays empty, and everything reading it (search, analytics, story intelligence) silently works on nothing.

Why

The schema declares the column as re

Read the thread · 2026-08-24 · closed · external user · 1 comment

[Bug]: getAllDocuments() never recurses into folders

Description

Environment

scrivener-mcp 0.8.1 (global npm install), Node v26.4.0, npm 11.17.0, macOS arm64 (Darwin 25.5.0). Project created with Scrivener 3.5.2 for macOS (Version="2.0" scrivx). File/line references are to the published dist/ JavaScript.

Observed

  • compile_documents returns {"text": "", "wordCount": 0, "charCount": 0, "sections": 0} in every variant.
  • get_structure reports wordCount: 0 for every document, even ones with thousands of words.
  • Calling `S

Read the thread · 2026-07-08 · closed · external user · 2 comments

Server crashes on startup: ERR_MODULE_NOT_FOUND for @hms/native (unpublished file:../HMS optional dependency) — v0.4.3 through v0.5.1

Thanks for creating this project To be clear up front: this is a fresh install for me — I've never had it working. I installed it for the first time and have not been able to connect to Scrivener at all. The crash happens at startup before a project can be opened, so I've adapted the "To reproduce" steps to match.

Describe the bug

On a brand-new install of the current version (0.5.1), the server crashes immediately on startup with ERR_MODULE_NOT_FOUND, so it never connects to Scrivener. I

Read the thread · 2026-06-17 · closed · external user · 2 comments

Tool results unreadable in Claude Desktop — payload returned in non-standard data field, and logging written to stdout

Hi, and thanks for building this. Using scrivener-mcp v0.3.2 with Claude Desktop (macOS, Node v24) I hit two issues that together make the read/structure tools unusable. Here's what I found, with likely root causes.

  1. Tool payloads are attached as a non-standard data property, so MCP clients never see them.

Handlers such as get_structure, get_document_info and open_project return a text content block whose text is only a status string ("Project structure retrieved"), while the real payloa

Read the thread · 2026-05-30 · closed · external user · 3 comments

MCP scrivener: Expected ',' or ']' after array element in JSON at position 5 (line 1 column 6)

Added the following to my claude_desktop_config.json:

    "scrivener": {
      "command": "npx",
      "args": [
        "scrivener-mcp"
      ]
    }

and getting as the title states in claude desktop: MCP scrivener: Expected ',' or ']' after array element in JSON at position 5 (line 1 column 6)

Read the thread · 2026-04-24 · closed · external user · 1 comment

No Data Reaches Claude

I've installed the mcp and trying to work through Claude to access my Scrivener files. I keep getting json read errors, and Claude suggested I open an issue and say: tools execute without error, return confirmation messages, but no actual data reaches Claude.

Update: I created a new Short Story project, and asked Claude to read it. Mid process, a set of error messages appeared on my screen.

Top error: MCP scrivener: Expected ',' or ']' after array element in JSON at position 5 (line 1 column

Read the thread · 2026-02-23 · closed · external user · 3 comments

Thank you + offering bug fixes from my fork

Hi David,

I wanted to reach out to say thank you for creating scrivener-mcp! I'm a writer using Scrivener and your project was exactly what I needed to integrate AI assistants with my workflow.

I've been using and extending your code, and in the process found and fixed a few bugs that I'd be happy to contribute back if you're interested:

Bugs Fixed

1. RTF formatting lost in grouped syntax

Text styles (italic, bold, underline) were being lost when using grouped RTF syntax like `{\i tex

Read the thread · 2025-12-08 · closed · external user · 3 comments

Most recent

Job queue passes a file path to DatabaseService(projectPath), creating a nested second database inside the .scriv bundle

Version

0.12.0.

What happens

A directory named scrivener.db appears inside the Scrivener bundle, containing a second, live database:

Chroniques.scriv/.scrivener-databases/scrivener.db          <- the real one, 84 documents
Chroniques.scriv/scrivener.db/.scrivener-databases/scrivener.db  <- a second one, also open, own WAL

Both are written by different sessions of the same server. On my install the nested one had a 510 KB WAL and an open file descriptor while the other

Read the thread · 2026-08-24 · closed · external user · 1 comment

UNION ALL between themes and locations has mismatched column counts — loadFromDatabase() always throws

Version

0.12.0, Node 22, macOS.

What happens

Every project load logs:

[ERROR] [memory-manager] Failed to load from database {"name":"SqliteError","message":"SELECTs to the left and right of UNION ALL do not have the same number of result columns"}

loadFromDatabase() throws at that point, so everything it was about to load is lost: style guide, custom context, writing stats, and the world-building entries themselves.

Why

memory-manager.js:

const worldElem

[Read the thread](https://github.com/writerslogic/scrivener-mcp/issues/94) · 2026-08-24 · closed · external user · 1 comment

### commandTimeout: 5000 on the BullMQ connection aborts blocking worker commands

### Version

0.12.0, Node 22, macOS, Redis 8.10 on `127.0.0.1:6379`.

### What happens

With a real Redis reachable, BullMQ workers fail in a loop:

[ERROR] [job-queue-v2] Worker error {"name":"Error","message":"Command timed out"}


~1.6 per second, indefinitely.

### Why

`createBullMQConnection()` in `services/queue/keydb-detector.js`:

```js
const client = new Redis(url, {
    maxRetriesPerRequest: null, // Required for BullMQ
    enableReadyCheck: false,
    enableOfflineQueue: true,

[Read the thread](https://github.com/writerslogic/scrivener-mcp/issues/92) · 2026-08-24 · closed · external user · 1 comment

### Embedded queue fallback still opens a real connection to 127.0.0.1:6379 (43k errors/hour)

### Version

0.12.0 (npm latest), Node 22, macOS 14, stdio transport behind supergateway.

### What happens

With no Redis/KeyDB running, the server logs the embedded fallback and *then* opens a real TCP socket to `127.0.0.1:6379`, forever:

[INFO] [keydb-detector] No KeyDB/Redis available, will use embedded queue [ERROR] [job-queue-v2] Worker error {"message":"connect ECONNREFUSED 127.0.0.1:6379"}


Measured on a production install: **43 651 `ECONNREFUSED` per hour** (~17/s), continuous

[Read the thread](https://github.com/writerslogic/scrivener-mcp/issues/91) · 2026-08-24 · closed · external user · 1 comment

### [Feature]: Support for Anthropic API key alongside OpenAI

### Problem

I use Claude/Anthropic rather than OpenAI, and the AI-powered features (analysis, consistency checking, content generation) are currently locked behind an OpenAI key only.

### Proposed Solution

Support an ANTHROPIC_API_KEY environment variable (and equivalent ~/.env / ~/.scrivener-mcp/.env entries) as an alternative provider, with a config option to select which provider to use, e.g.:

AI_PROVIDER=anthropic   # or "openai" (default)
ANTHROPIC_API_KEY=sk-ant-...

Alternatively, sin

[Read the thread](https://github.com/writerslogic/scrivener-mcp/issues/71) · 2026-07-23 · closed · external user · 1 comment

### Activated skills' tools never reach MCP clients that don't honor tools/list_changed

## Summary
Progressive tool loading registers only the meta-tools + the `project` skill at startup; `documents`, `search`, etc. are activated at runtime (on `open_project` / `use_skill`), and the server relies on a `notifications/tools/list_changed` to tell the client about the newly registered tools.

Some MCP clients — including Claude Desktop's "Cowork" / local-agent client — do **not** re-fetch the tool list after the initial handshake. On those clients the activated tools never become calla

[Read the thread](https://github.com/writerslogic/scrivener-mcp/issues/50) · 2026-06-24 · closed · outside contributor · 1 comment

### RTF reader doubles non-ASCII characters and drops paragraph breaks on Scrivener documents

## Summary
`read_document` / `read_document_formatted` return corrupted text for real Scrivener RTF files:

1. every non-ASCII character is **duplicated**: `è`→`èè`, `à`→`àà`, `«`→`««`, `»`→`»»`;
2. **paragraph breaks are lost** — paragraphs are concatenated with no separator (e.g. `...Santino Garro.Garro chiama...`).

Any read → modify → write round-trip therefore corrupts the document (doubled characters get persisted, paragraph structure collapses).

## Cause (analysis)
In `src/services/parse

[Read the thread](https://github.com/writerslogic/scrivener-mcp/issues/49) · 2026-06-24 · closed · outside contributor · 1 comment

### MCP server logs to stdout instead of stderr, causing JSON parse errors and state loss in Claude Desktop

## Bug Report

### Symptoms
- Claude Desktop shows: `MCP scrivener: Expected ',' or ']' after array element in JSON at position 5 (line 1 column 6)`
- The server does not maintain state between tool calls (project opened with `open_project` is lost before the next call)

### Root Cause
The startup log line:

[2026-05-31T15:25:47.652Z] [INFO] [main] Scrivener MCP Server started

is written to **stdout** instead of **stderr**. The MCP protocol uses stdout exclusively for JSON-RPC communicati

[Read the thread](https://github.com/writerslogic/scrivener-mcp/issues/8) · 2026-05-31 · closed · outside contributor · 1 comment

### updateDocumentMetadata() not fully wired to handle custom metadata.

The underlying `MetadataManager.updateDocumentMetadata()` does support custom metadata via a `customMetadata: Record<string, string>` parameter, and the `updateCustomMetadata()` helper writes it as `{ ID: key, Value: value }` items. But the **handler** in `document-handlers.ts` only passes through `synopsis`, `notes`, `label`, and `status` — it never reads or forwards a `customMetadata` argument.

[Read the thread](https://github.com/writerslogic/scrivener-mcp/issues/5) · 2026-03-19 · closed · external user · 1 comment

The remaining reports are on [the project's issue tracker](https://github.com/writerslogic/scrivener-mcp/issues).