E EidosAGI
MCP Server

scribe

Technical writer for your repo. Authors and curates docs as code changes — card, README, CHANGELOG, skills, anything that tells the project what it is.

uvx --from git+https://github.com/eidos-agi/scribe.git@v0.1.3 scribe

What it does

When an agent changes the code, the documentation should follow. It never does — README lags a month, CHANGELOG has three open "write me" TODOs, the card says features that got renamed. Scribe is the teammate that closes that gap: it authors, curates, and keeps the whole repo's self-description coherent as the code evolves.

It reads what you changed, decides which docs need to move, writes the diffs, and pushes them as part of the same commit. The README keeps up, the CHANGELOG has real entries, and the repo's self-description never drifts from the code.

What coherence looks like

An agent ships a schema migration. Scribe detects that the change touches the data-layer section of the README, the CHANGELOG has no entry for this release, and the card's feature list is outdated. It authors fresh copy for each, groups them into one commit, and hands the agent a clean PR.

1. Scribe sees the change, authors the updates

scribe · backend
agent-7 committed: migrations/0042_user_preferences.sql scribe scans the repo for docs the change should touch. stale README.md ← "data layer" section claims 2 tables; code has 3 stale CHANGELOG.md ← no entry since v1.2.0; 6 commits ago stale .scribe/card.md ← feature list predates /session rename fresh docs/schema.md ← authored in this commit, ok author README.md · data layer · +user_preferences table author CHANGELOG.md · v1.3.0 entry · 6 commits grouped author .scribe/card.md · feature list refreshed Grouped into one commit. Ready for review. "chore: scribe · coherence pass after schema migration"

2. One PR, every doc in lockstep with the code

eidos-agi / backend Public
Watch 18 Fork 9 Star 127
⟨⟩ Code Issues 3 Pull requests 1 Actions
scribe/coherence-128 / PR #128 · coherence pass
Commits on Apr 22, 2026
SC chore: scribe · coherence pass after schema migration scribe committed 3a91c20 · just now
A7 feat(backend): user_preferences table + schema v4 agent-7 committed c1e9b22 · 3 min ago
A3 fix: redis reconnection backoff for session pool agent-3 committed b1f2c40 · 1 hr ago
Files changed · 3 +18 −6 · 3a91c20
README.md · data layer section
4141## Data layer
42Two tables: `users`, `sessions`. Postgres 16.
42+Three tables: `users`, `sessions`, `user_preferences`. Schema v4. Postgres 16.
4343Migrations via Alembic. See `docs/schema.md`.
CHANGELOG.md · v1.3.0 entry (6 commits grouped)
11# Changelog
3+## [1.3.0] — 2026-04-22
4+### Added
5+- `user_preferences` table + schema migration to v4
.scribe/card.md · feature list refresh
12features: [auth, sessions]
12+features: [sessions, user_preferences, redis_pool]

One PR, three files, all coherent. Reviewers see the code change and every piece of documentation that had to move with it — in the same place, the same tooling, the same review flow they already use.

Key features

Install

git clone https://github.com/eidos-agi/scribe
cd scribe
uv sync
claude mcp add scribe --scope user -- /path/to/scribe/.venv/bin/scribe

Usage

# initialize .scribe/ — writes a default scribe.yaml tracked list
mcp__scribe__scribe_init repo: "/path/to/my-repo"

# review: which tracked docs look stale after recent code changes?
mcp__scribe__scribe_review repo: "my-repo"

# suggest: given a change description, rank the docs that should move
mcp__scribe__scribe_suggest \
  repo: "my-repo" \
  change: "added user_preferences table"

# update: author a fresh version of any tracked doc (path is repo-relative)
mcp__scribe__scribe_update \
  repo: "my-repo" \
  path: "README.md" \
  change_summary: "data layer: 2 → 3 tables" \
  new_content: "# my-repo\n\n..." \
  author_tool: "scribe-review"

# read: card + last N updates + callers_seen
mcp__scribe__scribe_read repo: "my-repo"

Five MCP tools: scribe_init, scribe_read, scribe_update, scribe_review, scribe_suggest. scribe_suggest delegates to claude -p via subprocess — no Anthropic SDK import, ever. If claude isn't on PATH the call returns status: "claude-unavailable" with an empty suggestions list. Never raises.