hannasdev avatar

Writing MCP

hannasdev/mcp-writing

Built for novelists working with long manuscripts that don't fit in a single context window. Syncs from Scrivener or native markdown, builds a SQLite index of scenes, characters, places, and relationships, then lets the AI query that index before loading prose. Core operations: sync project structure, find scenes by tag or character, get character arcs across chapters, read specific scene prose, edit with confirmation and git history, flag continuity issues. Includes backup and restore tooling, sidecar metadata maintenance, and review bundle generation. Designed to pair with OpenClaw but works with any MCP client over stdio. Ships with agent boot files and workflow guidance for continuity passes, subplot tracking, and targeted revisions without feeding the full manuscript into every prompt.

GitHub stars
1
tools
27
auth
Required
transport
STDIO
env vars
3
last updated
Jun 11, 2026

Tools

27 tools

Public tool metadata for what this MCP can expose to an agent.

syncRun `sync` after your latest writing session.

Run `sync` after your latest writing session.

No parameter schema in public metadata yet.

find_scenesAsk `find_scenes` for scenes involving a specific character or tag (for example, all scenes tagged `injury` or `promise`).

Ask `find_scenes` for scenes involving a specific character or tag (for example, all scenes tagged `injury` or `promise`).

No parameter schema in public metadata yet.

get_arcUse `get_arc` to review that character's ordered progression across the manuscript.

Use `get_arc` to review that character's ordered progression across the manuscript.

No parameter schema in public metadata yet.

get_scene_proseLoad only the suspect scenes with `get_scene_prose`.

Load only the suspect scenes with `get_scene_prose`.

No parameter schema in public metadata yet.

flag_sceneAttach follow-up notes with `flag_scene` where continuity needs a fix.

Attach follow-up notes with `flag_scene` where continuity needs a fix.

No parameter schema in public metadata yet.

list_threadsRun `list_threads` for the project.

Run `list_threads` for the project.

No parameter schema in public metadata yet.

get_thread_arcUse `get_thread_arc` to inspect scene order and beat labels for each thread.

Use `get_thread_arc` to inspect scene order and beat labels for each thread.

No parameter schema in public metadata yet.

track_thread_arcWhen a beat is missing, call `track_thread_arc` to add or update it on the right scene.

When a beat is missing, call `track_thread_arc` to add or update it on the right scene.

No parameter schema in public metadata yet.

enrich_sceneAfter rewriting scenes, call `enrich_scene` to re-derive lightweight metadata from current prose.

After rewriting scenes, call `enrich_scene` to re-derive lightweight metadata from current prose.

No parameter schema in public metadata yet.

update_scene_metadataUse `update_scene_metadata` for intentional editorial fields (for example, beat, POV, status, and tags).

Use `update_scene_metadata` for intentional editorial fields (for example, beat, POV, status, and tags).

No parameter schema in public metadata yet.

connect_character_place_evidenceUse `connect_character_place_evidence` when a scene proves paired sheet-backed character/place evidence.

Use `connect_character_place_evidence` when a scene proves paired sheet-backed character/place evidence.

No parameter schema in public metadata yet.

connect_scene_character_evidenceUse `connect_scene_character_evidence` for character-only evidence.

Use `connect_scene_character_evidence` for character-only evidence.

No parameter schema in public metadata yet.

connect_scene_place_evidenceUse `connect_scene_place_evidence` for place-only evidence.

Use `connect_scene_place_evidence` for place-only evidence.

No parameter schema in public metadata yet.

audit_relationship_metadataUse `audit_relationship_metadata` for retained sidecar/frontmatter relationship fields.

Use `audit_relationship_metadata` for retained sidecar/frontmatter relationship fields.

No parameter schema in public metadata yet.

list_chaptersUse `list_chapters` plus `assign_scene_to_chapter` or `move_scene` for chapter placement and ordering.

Use `list_chapters` plus `assign_scene_to_chapter` or `move_scene` for chapter placement and ordering.

No parameter schema in public metadata yet.

assign_scene_to_chapterUse `list_chapters` plus `assign_scene_to_chapter` or `move_scene` for chapter placement and ordering.

Use `list_chapters` plus `assign_scene_to_chapter` or `move_scene` for chapter placement and ordering.

No parameter schema in public metadata yet.

move_sceneUse `list_chapters` plus `assign_scene_to_chapter` or `move_scene` for chapter placement and ordering.

Use `list_chapters` plus `assign_scene_to_chapter` or `move_scene` for chapter placement and ordering.

No parameter schema in public metadata yet.

search_metadataUse `search_metadata` for keyword/FTS metadata searches across indexed titles, loglines, tags, characters, places, and versions.

Use `search_metadata` for keyword/FTS metadata searches across indexed titles, loglines, tags, characters, places, and versions.

No parameter schema in public metadata yet.

propose_editAsk the AI to call `propose_edit` for a specific scene.

Ask the AI to call `propose_edit` for a specific scene.

No parameter schema in public metadata yet.

commit_editAccept with `commit_edit` or reject with `discard_edit`.

Accept with `commit_edit` or reject with `discard_edit`.

No parameter schema in public metadata yet.

discard_editAccept with `commit_edit` or reject with `discard_edit`.

Accept with `commit_edit` or reject with `discard_edit`.

No parameter schema in public metadata yet.

list_snapshotsUse `list_snapshots` (and optional `snapshot_scene`) to inspect or preserve revision history.

Use `list_snapshots` (and optional `snapshot_scene`) to inspect or preserve revision history.

No parameter schema in public metadata yet.

snapshot_sceneUse `list_snapshots` (and optional `snapshot_scene`) to inspect or preserve revision history.

Use `list_snapshots` (and optional `snapshot_scene`) to inspect or preserve revision history.

No parameter schema in public metadata yet.

enrich_scene_characters_batchStart with `enrich_scene_characters_batch` using the default `dry_run=true` to preview inferred links for a project, chapter, or explicit scene list.

Start with `enrich_scene_characters_batch` using the default `dry_run=true` to preview inferred links for a project, chapter, or explicit scene list.

No parameter schema in public metadata yet.

get_async_job_statusPoll `get_async_job_status` until the batch job completes, then review `job.result.results` for changed scenes, ambiguous matches, and partial failures.

Poll `get_async_job_status` until the batch job completes, then review `job.result.results` for changed scenes, ambiguous matches, and partial failures.

No parameter schema in public metadata yet.

get_runtime_configStart by checking `get_runtime_config` (or `describe_workflows`) and confirm whether `db_migration_warnings` contains `LEGACY_JOIN_ROWS_SKIPPED`.

Start by checking `get_runtime_config` (or `describe_workflows`) and confirm whether `db_migration_warnings` contains `LEGACY_JOIN_ROWS_SKIPPED`.

No parameter schema in public metadata yet.

describe_workflowsStart by checking `get_runtime_config` (or `describe_workflows`) and confirm whether `db_migration_warnings` contains `LEGACY_JOIN_ROWS_SKIPPED`.

Start by checking `get_runtime_config` (or `describe_workflows`) and confirm whether `db_migration_warnings` contains `LEGACY_JOIN_ROWS_SKIPPED`.

No parameter schema in public metadata yet.

Sponsors

Configuration

WRITING_SYNC_DIR*

Path to the manuscript sync folder that mcp-writing indexes and edits.

DB_PATH

Optional path for the SQLite index database used by the server.

OWNERSHIP_GUARD_MODEdefault: warn

Startup ownership policy for sync-folder files.

Readme

mcp-writing

CI GitHub release npm version npm downloads Node.js License: AGPL v3

An MCP service for AI-assisted reasoning and editing on long-form fiction projects.

Designed to work with OpenClaw but compatible with any MCP-capable AI gateway.

Quick launch

For local stdio MCP clients, run the published package directly:

WRITING_SYNC_DIR=/path/to/sync-dir DB_PATH=./writing.db npx -y @hanna84/mcp-writing

View the full README on GitHub

Details

Repository
github.com/hannasdev/mcp-writing
Website
hannasdev.github.io/mcp-writing
Package
@hanna84/mcp-writing
Transport
STDIO
Auth
Required
Registry
MCP registry, active