# 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](/mcp/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](https://github.com/writerslogic/scrivener-mcp/issues/95) · 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](https://github.com/writerslogic/scrivener-mcp/issues/93) · 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](https://github.com/writerslogic/scrivener-mcp/issues/66) · 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](https://github.com/writerslogic/scrivener-mcp/issues/45) · 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](https://github.com/writerslogic/scrivener-mcp/issues/7) · 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`:

```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](https://github.com/writerslogic/scrivener-mcp/issues/6) · 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](https://github.com/writerslogic/scrivener-mcp/issues/3) · 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](https://github.com/writerslogic/scrivener-mcp/issues/1) · 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](https://github.com/writerslogic/scrivener-mcp/issues/96) · 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`:

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