Skip to main content

Scribe MCP server, tooling, and universal CLI

Project description

๐Ÿ“ Scribe MCP Server

Tests Version License

Enterprise-grade documentation governance for AI-powered development โ€” by Corta Labs

Drop-in ready โ€ข 13+ specialized templates โ€ข Zero-config SQLite โ€ข Production-tested


Update v2.2 (Architecture Cleanup)

Scribe MCP v2.2 delivers major architectural improvements:

Performance:

  • Connection Pooling: New storage/pool.py with SQLiteConnectionPool delivers 50-80% latency reduction
  • Optimized Indexes: New composite indexes for agent/emoji filtering

Code Quality:

  • ResponseFormatter Decomposition: Monolithic 2,934-line class split into 7 specialized modules in utils/formatters/
  • Database-First State: Session state migrated from state.json to database

Data Management:

  • Retention Policy: New scribe_entries_archive table with configurable cleanup (default 90 days)
  • Agent Isolation: All tools require agent parameter for session isolation

History: Update v2.1.1 (Diff Editor, Readable Output & ANSI Colors)

Scribe MCP 2.1.1 introduces foundational document lifecycle upgrades, including a fully automated YAML frontmatter engine with round-trip safety, canonical metadata defaults, and extensible schema support. Frontmatter is created on first edit if missing, auto-updates last_updated, and supports explicit overrides without breaking existing fields. These changes establish a metadata plane separate from document body content, enabling safe diff operations, deterministic header/TOC tooling, and template-driven document creation.

New: Enhanced Readable Output (Phase 1.5/1.6)

  • ANSI Color Support: Tool output now renders with colors in Claude Code/Codex - cyan boxes, green line numbers, bold titles
  • Green Line Numbers: Clean 1. content format with dot separator, matching Claude's native Read tool style
  • CallToolResult Fix: Workaround for Issue #9962 - returns TextContent-only for proper newline rendering
  • Config-Driven Colors: Enable/disable via use_ansi_colors: true in .scribe/config/scribe.yaml
  • 5-Char Line Padding: Consistent line number width for improved readability

Structured edits are now the default path: agents express intent, the server compiles and applies deterministic mutations, and diagnostics remain explicit. Structural actions no longer auto-heal doc targets; if doc_name is not registered, the action fails with DOC_NOT_FOUND rather than redirecting the write.

  • manage_docs now supports apply_patch and replace_range for precise edits.
  • apply_patch auto-detects mode: unified when patch provided, structured when edit provided.
  • patch_source_hash enforces stale-source protection for patches.
  • Reminder system teaches scaffold-only replace_section, preferring structured/line edits.
  • New doc lifecycle actions: normalize_headers, generate_toc, create, validate_crosslinks.
  • create is the unified document creation action. Use metadata.doc_type to specify type: custom, research, bug, review, or agent_card. Content goes in metadata.body. Use metadata.register_doc=true to add the doc to the project registry.
  • validate_crosslinks is read-only diagnostics (no write, no doc_updates log).
  • normalize_headers supports ATX headers with or without space and Setext (==== / ----), skipping fenced code blocks. Output is canonical ATX.
  • generate_toc uses GitHub-style anchors (NFKD normalization, ASCII folding, emoji removal, punctuation collapse, de-duped suffixes).
  • Structural actions validate doc_name against the registry and fail hard on unknown docs (no silent redirects).

New: read_file - Complete Code Intelligence System (Phase 5)

The read_file tool is now a comprehensive code intelligence platform for Python and Markdown files, providing SWE agents with instant codebase understanding without reading full files:

Python Intelligence:

  • Full Signature Extraction: Captures complete function/method signatures with type hints, default values, and return types
    • Example: async def fetch_project(self, name: str) -> Optional[ProjectRecord]
  • Line Range Analysis: Shows start-end lines for every class, function, and method with line counts for complexity assessment
    • Example: async def _initialise(self) -> None (lines 645-1121 (477)) - instantly identifies a 477-line method needing refactoring
  • Class Structure Display: Shows class hierarchy with first 10 methods by default, including async markers
  • Structure Filtering: Regex-based search to find specific classes or functions
    • Example: structure_filter="validate" finds all validation functions with full signatures
  • Structure Pagination: Browse large classes page-by-page (default: 10 items/page)
    • Navigate through a 62-method class: page 1 shows methods 1-10, page 2 shows 11-20, etc.
  • Dependency Analysis: Static import analysis with resolved paths for local modules

Markdown Intelligence:

  • Heading Extraction: Complete document outline with all heading levels and line numbers
  • Quick Navigation: Jump directly to specific sections using extracted line numbers

Complete Workflow Example:

# Step 1: Find the class (scan_only mode - zero content, pure metadata)
read_file(path="storage/sqlite.py", mode="scan_only", structure_filter="SQLiteStorage")
# โ†’ Shows: class SQLiteStorage at lines 32-2334 (2303 lines)
#          Methods (page 1 of 7, showing 1-10 of 62)

# Step 2: Browse methods with pagination
read_file(path="storage/sqlite.py", mode="scan_only",
          structure_filter="SQLiteStorage", structure_page=2)
# โ†’ Methods 11-20 with full signatures and line ranges
#   Found: async def fetch_recent_entries(self) -> List[Dict[str, Any]] (lines 338-427 (90))

# Step 3: Read exact method implementation
read_file(path="storage/sqlite.py", mode="line_range", start_line=338, end_line=427)
# โ†’ Full method code for analysis

# Step 4: Edit with confidence
Edit(file_path="storage/sqlite.py", old_string="...", new_string="...")

Key Benefits:

  • Token Efficiency: Get complete structural overview without reading full file content
  • Instant Complexity Assessment: Line counts reveal 477-line monsters needing refactoring
  • Type-Aware Navigation: Full signatures show exactly how to call each function
  • Regex Precision: Find all functions matching ^_validate.*|^_sanitize in seconds
  • Pagination for Scale: Browse classes with 50+ methods without overwhelming output

Parameters: path, mode (scan_only/chunk/page/line_range/search), structure_filter, structure_page, structure_page_size, include_dependencies, format

New: search - Multi-File Codebase Search (v2.2)

The search tool provides grep/ripgrep-equivalent codebase search directly through MCP, with repo-boundary enforcement and audit logging:

  • Regex and Literal Patterns: Full regex by default, with regex=False for literal string matching
  • File Filtering: Filter by glob pattern (glob="*.py") or file type (type="py")
  • Three Output Modes: content (matching lines with context), files_with_matches (file paths only), count (match counts per file)
  • Context Control: Configurable before/after context lines around matches
  • Multiline Matching: Patterns can span multiple lines with multiline=True
  • Safety Limits: Configurable max matches per file (50), total matches (200), max files (100), and file size cap (10MB)
# Find all async methods in Python files
search(agent="CoderAgent", pattern="async def ", type="py", output_mode="content", context_lines=2)

# Count occurrences of a function across the codebase
search(agent="CoderAgent", pattern="append_entry", output_mode="count")

# Search with glob filter
search(agent="CoderAgent", pattern="class.*Storage", glob="storage/*.py", output_mode="files_with_matches")

Parameters: agent, pattern, path, glob, type, output_mode, format, context_lines, before_context, after_context, case_insensitive, regex, multiline, max_matches_per_file, max_total_matches, max_files, line_numbers, skip_binary, max_file_size_mb

New: edit_file - Safe File Editing with Audit Trail (v2.2)

The edit_file tool provides exact string replacement with built-in safety mechanisms:

  • Read-Before-Edit Enforcement: The file MUST have been read with read_file in the current session before editing (tool-enforced)
  • Dry-Run by Default: dry_run=True is the default -- you must explicitly set dry_run=False to commit changes
  • Exact String Matching: Finds and replaces exact strings (no regex), failing clearly if the target string is not found or is ambiguous
  • Replace All Mode: Optional replace_all=True for renaming variables or updating repeated patterns
  • Diff Preview: Dry-run mode returns a unified diff preview before committing
  • Repo-Boundary Enforcement: Cannot edit files outside the repository root
# Preview a change (dry_run=True is default)
edit_file(agent="CoderAgent", path="config/settings.py", old_string="DEBUG = True", new_string="DEBUG = False")

# Commit a change
edit_file(agent="CoderAgent", path="config/settings.py", old_string="DEBUG = True", new_string="DEBUG = False", dry_run=False)

# Rename across file
edit_file(agent="CoderAgent", path="utils/helpers.py", old_string="old_name", new_string="new_name", replace_all=True, dry_run=False)

Parameters: agent, path, old_string, new_string, replace_all (default: False), dry_run (default: True), format

  • scribe_doctor reports repo root, config, plugin status, and vector readiness for faster diagnostics.
  • manage_docs now supports semantic search via action="search" with search_mode="semantic", including doc/log separation and doc_k/log_k overrides.
  • Vector indexing now prefers registry-managed docs only; log/rotated-log files are excluded from doc indexing.
  • Reindex supports --rebuild (clear index), --safe (low-thread fallback), and --wait-for-drain to block until embeddings are written.

Example (structured mode with edit):

{
  "action": "apply_patch",
  "doc_name": "architecture",
  "edit": {
    "type": "replace_range",
    "start_line": 12,
    "end_line": 12,
    "content": "Updated line\n"
  }
}

Example (unified diff mode - auto-detected when patch provided):

{
  "action": "apply_patch",
  "doc_name": "architecture",
  "patch": "<compiler output>"
}

๐Ÿš€ Why Scribe MCP?

Scribe transforms how AI agents and developers maintain project documentation. Instead of scattered notes and outdated docs, Scribe provides bulletproof audit trails, automated template generation, and cross-project intelligence that keeps your entire development ecosystem in sync.

Perfect for:

  • ๐Ÿค– AI Agent Teams - Structured workflows and quality grading
  • ๐Ÿข Enterprise Teams - Audit trails and compliance documentation
  • ๐Ÿ‘จโ€๐Ÿ’ป Solo Developers - Automatic documentation that actually works
  • ๐Ÿ“š Research Projects - Structured logs and reproducible reports

Immediate Value:

  • โœ… 30-second setup - Drop into any repository and start logging
  • ๐ŸŽฏ 18+ specialized templates - From architecture guides to bug reports
  • ๐Ÿ” Cross-project search - Find patterns across your entire codebase
  • ๐Ÿ“Š Agent report cards - Performance grading for AI workflows
  • ๐Ÿ›ก๏ธ Bulletproof storage - Atomic operations with crash recovery

โšก Quick Start

Get Scribe running in under 60 seconds (MCP-first, CLI optional):

1๏ธโƒฃ Install Dependencies

# Clone and navigate to Scribe
git clone <your-repo-url>
cd scribe_mcp

# Set up Python environment
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install Scribe (editable + dev extras)
python -m pip install -e ".[dev]"

# Optional: verify wheel/non-editable install path too
python -m pip install .

2๏ธโƒฃ Add Scribe MCP Server to Claude Code, Codex

  • Codex CLI registration example:
    codex mcp add scribe \
      --env SCRIBE_STORAGE_BACKEND=sqlite \
      -- bash -lc 'cd /home/path/to/scribe_mcp && exec scribe-server'
    
  • Claude Code registration example:
    claude mcp add scribe \
      --env SCRIBE_STORAGE_BACKEND=sqlite \
      -- bash -lc 'cd /home/path/to/scribe_mcp && exec scribe-server'
    
  • Global Claude MCP example:
    claude mcp add scribe --scope user --env SCRIBE_STORAGE_BACKEND=sqlite -- bash -lc 'cd /home/path/to/scribe_mcp && exec scribe-server'
    

Compatibility note: legacy launch python -m server still works during migration.

Once connected from Claude / Codex MCP:

  • Use set_project to register/select a project and bootstrap dev_plan docs (pass root=/abs/path/to/repo to work in any repo).
  • Use append_entry for all logging (single/bulk).
  • Use manage_docs for architecture/phase/checklist updates. 2.1.1 introduces diff edits.
  • Use read_file for safe, auditable file reads (scan/chunk/page/search).
  • Use scribe_doctor for readiness checks (repo root, config, vector index status).
  • Use read_recent / list_projects to resume context after compaction.

Automatic log routing (BUG / SECURITY)

  • status=bug (or a bug emoji) will also write to BUG_LOG.md when required meta is present (severity, component, status).
  • Security events can also tee to SECURITY_LOG.md (example: use a security emoji, or --meta security_event=true,impact=...,status=...).
  • If required meta is missing, Scribe returns a teaching reminder instead of inventing data.

3๏ธโƒฃ (Optional) Manual CLI Tool Calls

For shell workflows or CI checks, use the unified CLI runtime:

# List all registered MCP tools
python -m scribe_mcp.cli.main tools --json

# Call any tool directly (example: append_entry)
python -m scribe_mcp.cli.main call append_entry \
  --agent Codex \
  --arg message="Scribe CLI call works" \
  --arg status=success

This path uses the same runtime dispatcher as MCP (invoke_tool), so mode/session guard behavior stays aligned.


๐ŸŽฏ Try These Examples

Project Management:

# Log project milestones
python -m scribe_mcp.scripts.scribe "Completed authentication module" --status success --meta component=auth,tests=47

# Track bugs and issues
python -m scribe_mcp.scripts.scribe "Fixed JWT token expiry bug" --status bug --meta severity=high,component=security

Research Workflows:

# Document research findings
python -m scribe_mcp.scripts.scribe "Discovered performance bottleneck in database queries" --status info --meta research=true,impact=high

Team Collaboration:

# List all projects
python -m scribe_mcp.scripts.scribe --list-projects

# Switch between projects
python -m scribe_mcp.scripts.scribe "Starting new feature work" --project frontend --status plan

๐Ÿ› ๏ธ Installation Options

Prerequisites

  • Python 3.11+ - Modern Python with async support
  • pip - Standard Python package manager
  • Optional: PostgreSQL for team deployments (SQLite works out of the box)

Storage Backends

๐Ÿ—„๏ธ SQLite (Default - Zero Config)

  • Perfect for solo developers and small teams
  • No setup required - just run and go
  • Automatic database creation and management

๐Ÿ˜ PostgreSQL (Enterprise)

  • Ideal for large teams and production deployments
  • Set environment variables before starting:
    export SCRIBE_STORAGE_BACKEND=postgres
    export SCRIBE_DB_URL=postgresql://user:pass@host:port/database
    

MCP Integration

In all examples below, REPO_ROOT means the directory that contains pyproject.toml for this project (the repo root). The runtime package lives under src/scribe_mcp/.

For Claude Desktop (JSON config):

{
  "mcpServers": {
    "scribe": {
      // Run from REPO_ROOT so `scribe_mcp` imports resolve
      "command": "bash",
      "args": [
        "-lc",
        "cd /absolute/path/to/REPO_ROOT && exec scribe-server"
      ],
      "env": {
        // Optional: override storage backend; SQLite is default
        "SCRIBE_STORAGE_BACKEND": "sqlite"
      }
    }
  }
}

For Codex / Claude Code CLI:

# From anywhere; codex will remember this configuration
codex mcp add scribe \
  --env SCRIBE_STORAGE_BACKEND=sqlite \
  -- bash -lc 'cd /absolute/path/to/REPO_ROOT && exec scribe-server'

Notes:

  • We intentionally do not bake a per-repo root into the MCP config. Scribe is multi-repo: switch repos by calling set_project(name=..., root=/abs/path/to/repo) (no MCP re-register needed).
  • The same bash -lc "cd REPO_ROOT && scribe-server" pattern works for any MCP client that expects a stdio server command.

๐ŸŒ Using Scribe Outside This Repo

You can run Scribe from any codebase (not just MCP_SPINE) by pointing it at that projectโ€™s root:

  1. Start the MCP server from the Scribe codebase (once), then use set_project(..., root=/abs/path/to/your/repo) to target any repository.
  2. Optional env vars:
    • SCRIBE_STATE_PATH=/abs/path/to/state.json (DEPRECATED in v2.2 - sessions now stored in database)
    • SCRIBE_STORAGE_BACKEND=postgres and SCRIBE_DB_URL=postgresql://... if you want Postgres.
  3. Prefer launching via installed entry points (scribe-server, scribe) so no manual PYTHONPATH wiring is required.

๐Ÿง  Project Registry & Lifecycle (High-Level)

Scribe includes a SQLite-backed Project Registry that tracks every projectโ€™s lifecycle and documentation state:

  • Lifecycle states: planning, in_progress, blocked, complete, archived, abandoned.
  • Core hooks:
    • set_project โ€“ bootstraps docs (ARCHITECTURE_GUIDE, PHASE_PLAN, CHECKLIST, PROGRESS_LOG) and ensures a registry row exists.
    • append_entry โ€“ writes progress logs, updates activity metrics, and can autoโ€‘promote planning โ†’ in_progress once docs + first entry exist.
    • manage_docs โ€“ applies atomic doc updates and records baseline/current hashes and docโ€‘hygiene flags in the registry.
    • list_projects โ€“ surfaces registry data (status, timestamps, counts, tags, meta.activity, meta.docs.flags) with filters like status, tags, and order_by.

At a glance, you can:

  • See which projects are fresh, stale, or long inactive.
  • Detect when architecture/phase/checklist docs are still at template state.
  • Spot drift between implementation logs and documentation.

For full technical details, see docs/whitepapers/scribe_mcp_whitepaper.md.


๐Ÿ“œ License & Commercial Use

Scribe MCP is source-available and free to use for:

  • Individual developers
  • Open-source contributors
  • Researchers and educational use
  • Small teams and small businesses that:
    • Have fewer than 25 employees, and
    • Generate less than $1,000,000 USD in annual revenue, and
    • Are not selling, hosting, or packaging Scribe MCP (or derivatives) as part of a paid product or service.

You may not use Scribe MCP under the community license if:

  • Your organization exceeds the employee or revenue limits above, or
  • You embed Scribe MCP into a paid SaaS, internal platform, or commercial agent/orchestration product.

For enterprise or large-scale commercial use, contact licensing@cortalabs.com to obtain a commercial license.

Details:

  • Current code is licensed under the Scribe MCP License (Community + Small Business License) in LICENSE.
  • Earlier snapshots were MIT-licensed; see LICENSE_HISTORY.md for historical licensing context.

Notes:

  • .env is auto-loaded on startup when present (via python-dotenv); shell exports/direnv still work the same.
  • Overlap checks only block true path collisions (same progress_log/docs_dir). Sharing one repo root with many dev_plan folders is supported.

๐ŸŽจ Template System Showcase

Scribe includes 13+ specialized templates that auto-generate professional documentation:

๐Ÿ“‹ Document Templates

  • ๐Ÿ“ Architecture Guides - System design and technical blueprints
  • ๐Ÿ“… Phase Plans - Development roadmaps with milestones
  • โœ… Checklists - Verification ledgers with acceptance criteria
  • ๐Ÿ”ฌ Research Reports - Structured investigation documentation
  • ๐Ÿ› Bug Reports - Automated issue tracking with indexing
  • ๐Ÿ“Š Agent Report Cards - Performance grading and quality metrics
  • ๐Ÿ“ Progress Logs - Append-only audit trails with UTC timestamps
  • ๐Ÿ”’ Security Logs - Compliance and security event tracking

๐Ÿš€ Template Features

  • ๐Ÿ”’ Security Sandboxing - Jinja2 templates run in restricted environments
  • ๐Ÿ“ Template Inheritance - Create custom template families
  • ๐ŸŽฏ Smart Discovery - Project โ†’ Repository โ†’ Built-in template hierarchy (precedence: .scribe/templates โ†’ repo custom โ†’ project templates โ†’ packs โ†’ built-ins)
  • โšก Atomic Generation - Bulletproof template creation with integrity verification

For a deeper dive into available variables and expected metadata per template, see docs/TEMPLATE_VARIABLES.md.

Example: Generate Architecture Guide

# Auto-generate a complete architecture document
python -m scribe_mcp.scripts.scribe "Generated architecture guide for new project" --status success --meta template=architecture,auto_generated=true

๐Ÿ’ป CLI Power Tools

Scribe's command-line interface (386 lines of pure functionality) gives you complete control:

๐ŸŽฏ Core Commands

# List all available projects
python -m scribe_mcp.scripts.scribe --list-projects

# Log with rich metadata
python -m scribe_mcp.scripts.scribe "Fixed critical bug" \
  --status success \
  --emoji ๐Ÿ”ง \
  --meta component=auth,tests=12,severity=high

# Dry run to preview entries
python -m scribe_mcp.scripts.scribe "Test message" --dry-run

# Switch between projects
python -m scribe_mcp.scripts.scribe "Starting frontend work" \
  --project mobile_app \
  --status plan

๐ŸŽจ Rich Features

  • ๐ŸŽญ Emoji Support - Built-in emoji mapping for all status types
  • ๐Ÿ“Š Metadata Tracking - Rich key=value metadata for organization
  • ๐Ÿ” Multiple Log Types - Progress, bugs, security, and custom logs
  • ๐Ÿ“… Timestamp Control - Override timestamps for bulk imports
  • ๐ŸŽฏ Project Discovery - Automatic project configuration detection

Status Types & Emojis

  • info โ„น๏ธ - General information and updates
  • success โœ… - Completed tasks and achievements
  • warn โš ๏ธ - Warning messages and cautions
  • error โŒ - Errors and failures
  • bug ๐Ÿž - Bug reports and issues
  • plan ๐Ÿ“‹ - Planning and roadmap entries

๐Ÿ” Enterprise Features

๐Ÿ“Š Agent Report Cards

Performance grading infrastructure for AI workflows:

  • Quality metrics tracking and trend analysis
  • Performance levels with UPSERT operations
  • Automated agent evaluation and reporting

๐Ÿ”’ Security & Compliance

  • ๐Ÿ›ก๏ธ Security Sandboxing - Restricted Jinja2 environments with 22+ built-in controls
  • ๐Ÿ“‹ Audit Trails - Complete change tracking with metadata
  • ๐Ÿ” Access Control - Path validation and input sanitization
  • ๐Ÿ“Š Compliance Reporting - Structured logs for regulatory requirements

โšก Advanced Search

Phase 4 Enhanced Search capabilities:

  • ๐Ÿ” Cross-Project Validation - Find patterns across your entire codebase
  • ๐Ÿ“Š Relevance Scoring - 0.0-1.0 quality filtering
  • ๐ŸŽฏ Code Reference Verification - Validate referenced code exists
  • ๐Ÿ“… Temporal Filtering - Search by time ranges ("last_30d", "last_7d")

๐Ÿ“ Documentation Management

Structured doc editing with full schema exposure:

  • ๐Ÿ”ง Complete MCP Schema - All manage_docs parameters properly exposed via JSON Schema
  • ๐ŸŽฏ Type-Safe Operations - Proper parameter typing for reliable tool discovery and validation
  • ๐Ÿ“‹ Action-Driven Interface - Atomic updates for architecture, phase plans, checklists, and research docs

manage_docs Quick Reference

7 Primary Actions:

Action Purpose Required Params
create Create new doc (research/bug/custom) doc_name, metadata.doc_type
replace_section Replace content by section anchor doc_name, section, content
apply_patch Apply unified diff patch doc_name, patch
replace_range Replace explicit line range doc_name, start_line, end_line, content
replace_text Find/replace text pattern doc_name, metadata.find, metadata.replace
append Append content to doc/section doc_name, content
status_update Update checklist item status doc_name, section, metadata

Global Optional Params: project, dry_run, target_dir

doc_type Values (INSIDE metadata): custom (default), research, bug, review, agent_card

Create Examples:

# Research doc
manage_docs(
    action="create",
    doc_name="RESEARCH_AUTH_20260119",
    metadata={"doc_type": "research", "research_goal": "Analyze auth flow"}
)

# Bug report (doc_name auto-generated)
manage_docs(
    action="create",
    metadata={
        "doc_type": "bug",
        "category": "logic",
        "slug": "auth_leak",
        "severity": "high",
        "title": "Auth token not invalidated"
    }
)

# Custom doc
manage_docs(
    action="create",
    doc_name="COORDINATION_PROTOCOL",
    metadata={"doc_type": "custom", "body": "# Protocol\n\nContent..."}
)

Edit Examples:

# Replace section
manage_docs(
    action="replace_section",
    doc_name="architecture",
    section="problem_statement",
    content="## Problem Statement\nNew content here..."
)

# Apply unified diff patch (context-aware matching)
manage_docs(
    action="apply_patch",
    doc_name="architecture",
    patch="--- a/file.md\n+++ b/file.md\n@@ -10,3 +10,3 @@\n-old line\n+new line\n context"
)

# Update checklist status
manage_docs(
    action="status_update",
    doc_name="checklist",
    section="phase_1_task_1",
    metadata={"status": "done", "proof": "PR #123 merged"}
)

For complete documentation, see docs/Scribe_Usage.md or the /scribe-mcp-usage skill.

๐Ÿ’พ Bulletproof Storage

  • ๐Ÿ—„๏ธ Multi-Backend Support - SQLite (zero-config) + PostgreSQL (enterprise)
  • โšก Atomic Operations - Temp-file-then-rename with fsync guarantees
  • ๐Ÿ”„ Write-Ahead Logging - Bulletproof crash recovery with journaling
  • โœ… Integrity Verification - Automatic corruption detection and recovery

๐Ÿง  Intelligent Reminders

Scribe keeps your documentation in sync with intelligent context awareness:

๐Ÿ“‹ Smart Reminders

Every MCP tool response includes contextual reminders about:

  • ๐Ÿ“… Stale Documentation - When architecture docs need updates
  • โฐ Overdue Logs - Gentle nudges to maintain progress tracking
  • ๐ŸŽฏ Project Context - Active project status and recent activity
  • ๐Ÿ”„ Drift Detection - When implementation deviates from plans

Reminders are throttled with a short cooldown per (repo_root, agent_id) so you see what matters without constant repetition. If an agent gets confused, you can clear cooldowns with set_project(reset_reminders=true).

If you call a project-bound tool without selecting a project, Scribe returns a โ€œlast known projectโ€ hint (including last access time) to help you recover quickly.

โš™๏ธ Customization

{
  "name": "my_project",
  "defaults": {
    "reminder": {
      "tone": "friendly",
      "log_warning_minutes": 15,
      "log_urgent_minutes": 30,
      "severity_weights": {"warning": 7, "urgent": 10}
    }
  }
}

๐ŸŒ Environment Variables

  • SCRIBE_REMINDER_IDLE_MINUTES - Work session reset timeout (default: 45)
  • SCRIBE_REMINDER_WARMUP_MINUTES - Grace period after resuming (default: 5)
  • SCRIBE_REMINDER_DEFAULTS - JSON configuration for all projects
  • SCRIBE_REMINDER_CACHE_PATH - Optional path for reminder cooldown cache (default: data/reminder_cooldowns.json)

๐Ÿ—๏ธ Project Structure

scribe_mcp/
โ”œโ”€โ”€ pyproject.toml             # Packaging + console scripts (scribe, scribe-server)
โ”œโ”€โ”€ src/
โ”‚   โ””โ”€โ”€ scribe_mcp/
โ”‚       โ”œโ”€โ”€ server.py          # MCP server runtime
โ”‚       โ”œโ”€โ”€ __main__.py        # Entry point for scribe-server / scribe-mcp
โ”‚       โ”œโ”€โ”€ cli/               # Unified CLI (tools/call/session)
โ”‚       โ”œโ”€โ”€ config/            # Path + runtime configuration
โ”‚       โ”œโ”€โ”€ tools/             # MCP tool implementations
โ”‚       โ”œโ”€โ”€ storage/           # SQLite/Postgres backends
โ”‚       โ”œโ”€โ”€ plugins/           # Vector indexer and plugin registry
โ”‚       โ”œโ”€โ”€ template_engine/   # Jinja document template engine
โ”‚       โ”œโ”€โ”€ doc_management/    # manage_docs action pipeline
โ”‚       โ””โ”€โ”€ templates/         # Built-in templates (documents/fragments)
โ”œโ”€โ”€ tests/                     # Repo-root test suite (installed-package flow)
โ”œโ”€โ”€ docs/                      # Curated project docs
โ””โ”€โ”€ README.md

Per-repo output location (dev plans + logs)

  • Default: <repo>/.scribe/docs/dev_plans/<project_slug>/...
  • Back-compat: if <repo>/docs/dev_plans/<project_slug> exists, Scribe keeps using it.
  • Override: set SCRIBE_DEV_PLANS_BASE (example: docs/dev_plans) to force a different base.

๐Ÿงช Testing & Quality

Comprehensive testing infrastructure with 79+ test files:

๐Ÿงช Run Tests

# Run all functional tests (69 tests)
pytest

# Run performance tests with file size benchmarks
pytest -m performance

# Run specific test categories
pytest tests/test_tools.py
pytest tests/test_storage.py

โœ… Quality Assurance

  • ๐Ÿ”ฌ Functional Testing - 69 comprehensive tests covering all core functionality
  • โšก Performance Testing - Optimized benchmarks for file operations
  • ๐Ÿ›ก๏ธ Security Testing - Template sandboxing and access control validation
  • ๐Ÿ”„ Integration Testing - MCP server protocol compliance verification

๐Ÿš€ Smoke Test

# Quick MCP server validation
python scripts/test_mcp_server.py

๐Ÿ’ก Real-World Use Cases

๐Ÿค– AI Agent Teams

Structured workflows for AI development:

# Research phase
python -m scribe_mcp.scripts.scribe "Research completed: authentication patterns" --status info --meta phase=research,confidence=0.9

# Architecture phase
python -m scribe_mcp.scripts.scribe "Architecture guide updated with auth design" --status success --meta phase=architecture,sections=5

# Implementation phase
python -m scribe_mcp.scripts.scribe "JWT authentication implemented" --status success --meta phase=implementation,tests=47,coverage=95%

๐Ÿข Enterprise Documentation

Compliance and audit trails:

# Security events
python -m scribe_mcp.scripts.scribe "Security audit completed - all controls verified" --log security --status success --meta auditor=external,findings=0

# Change management
python -m scribe_mcp.scripts.scribe "Production deployment completed" --status success --meta version=v2.1.0,rollback_available=true

๐Ÿ“š Research Projects

Structured research documentation:

# Research findings
python -m scribe_mcp.scripts.scribe "Performance bottleneck identified in database queries" --status info --meta research=true,impact=high,evidence=query_analysis

# Experiment results
python -m scribe_mcp.scripts.scribe "A/B test results: new algorithm 23% faster" --status success --meta experiment=performance_optimization,improvement=23%

๐Ÿ”ง Troubleshooting

Common Issues & Solutions

๐Ÿšจ MCP SDK Missing

# Install the MCP Python SDK
pip install mcp

๐Ÿ”ง No Tools Returned

# Ensure all modules are properly imported
# Check that your virtual environment is active
source .venv/bin/activate

# Verify tool imports
python -c "from scribe_mcp.tools import *; print('All tools loaded')"

๐Ÿ—„๏ธ SQLite Permission Issues

# Check your state/db paths are writable
echo $SCRIBE_STATE_PATH
ls -la $(dirname "$SCRIBE_STATE_PATH")

# Check the target repo is writable (Scribe writes under <repo>/.scribe/ by default)
ls -la /abs/path/to/your/repo
ls -la /abs/path/to/your/repo/.scribe || true

๐Ÿ Python Path / Packaging Issues

# Verify package import and resolved src-root path
python -c "import scribe_mcp; from scribe_mcp.config.paths import package_root; print(package_root())"

# Verify console-script entry points
scribe --help
scribe-server --help

๐Ÿค– BertModel / torchvision mismatch warning

If startup logs show Could not import module 'BertModel', your torch and torchvision builds are likely mismatched (common CUDA tag mismatch).

python - <<'PY'
import torch
print('torch:', torch.__version__)
try:
    import torchvision
    print('torchvision:', torchvision.__version__)
except Exception as exc:
    print('torchvision import failed:', exc)
PY

Scribe now guards this case by disabling broken torchvision integration for transformers so text embeddings can still initialize. For a full env-level fix, install matching torch/torchvision builds (same CUDA tag), or remove torchvision if your workload is text-only.

โšก Server Not Starting

# Ensure package + dev deps are installed
python -m pip install -e ".[dev]"

# Verify server startup
python -m server --help

Getting Help

  • ๐Ÿ“– Documentation: Check docs/whitepapers/scribe_mcp_whitepaper.md for comprehensive technical details
  • ๐Ÿงช Test Suite: Run pytest to verify system functionality
  • ๐Ÿ“‹ Project Templates: Use --list-projects to see available configurations
  • ๐Ÿ” Smoke Test: Run python scripts/test_mcp_server.py for MCP validation

๐Ÿค Contributing

We welcome contributions! Here's how to get started:

๐Ÿงช Development Workflow

# 1. Run the test suite
pytest

# 2. Verify MCP server functionality
python scripts/test_mcp_server.py

# 3. Test your changes
python -m scribe_mcp.scripts.scribe "Testing new feature" --dry-run

# 4. Log your contribution
python -m scribe_mcp.scripts.scribe "Added new feature: description" --status success --meta contribution=true,feature_type=enhancement

๐Ÿ“‹ Development Guidelines

  • โœ… Test Coverage: All new features must include tests
  • ๐Ÿ“ Documentation: Update relevant documentation sections
  • ๐Ÿ”ง Integration: Ensure MCP server compatibility
  • ๐Ÿ›ก๏ธ Security: Follow security best practices for templates and inputs

๐Ÿš€ Quality Standards

  • ๐Ÿงช 69+ functional tests must pass
  • โšก Performance benchmarks for file operations
  • ๐Ÿ”’ Security validation for template sandboxing
  • ๐Ÿ“‹ MCP protocol compliance verification

๐Ÿ“š Further Reading

๐Ÿ“– Technical Documentation

๐Ÿ”’ Hooks & Enforcement

  • Hooks Setup Guide - Protect managed docs from direct Write/Edit with Claude Code hooks
  • Scribe Onboarding Prompt - Full instructional prompt for onboarding any project to Scribe MCP (protocol, tools, manage_docs, hooks)

๐ŸŒŸ Advanced Features

  • ๐Ÿค– Claude Code Integration - Structured workflows and subagent coordination
  • ๐Ÿ“Š Agent Report Cards - Performance grading and quality metrics
  • ๐Ÿ” Vector Search - FAISS integration for semantic search
  • ๐Ÿ” Security Framework - Comprehensive access control and audit trails

๐Ÿš€ Production Deployment

  • ๐Ÿ˜ PostgreSQL Setup - Enterprise-scale deployment guide
  • ๐Ÿ“ˆ Monitoring - Performance tracking and alerting
  • ๐Ÿ”„ Backup & Recovery - Data protection strategies
  • ๐ŸŒ Multi-tenant - Organizational deployment patterns

โš ๏ธ Known Limitations

Concurrent Agent Session Collision

MCP Transport Limitation: Session identity is {repo_root}:{transport}:{agent_name}. When multiple agents with the same name work on different Scribe projects within the same repository concurrently, their sessions collide.

Best Practice: Use scoped agent names for concurrent work:

# โŒ Same name = collision
agent="CoderAgent"  # on project_x
agent="CoderAgent"  # on project_y โ†’ logs may go to wrong project!

# โœ… Scoped names = safe
agent="CoderAgent-ProjectX"
agent="CoderAgent-ProjectY"

Not affected: Sequential dispatches, different repositories, or single agent switching projects.

See Scribe_Usage.md for details.


๐Ÿ™ Acknowledgments

Built with passion for better documentation and AI-human collaboration. Special thanks to:

  • The MCP protocol team for the standardized AI tool interface
  • Jinja2 for the powerful and secure templating system
  • Our early adopters for invaluable feedback and feature suggestions

๐Ÿš€ Ready to transform your documentation?

Start Logging โ€ข Explore Templates โ€ข Read Whitepaper

Join thousands of developers and AI teams using Scribe for bulletproof documentation governance

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scribe_mcp-2.2.tar.gz (920.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

scribe_mcp-2.2-py3-none-any.whl (681.2 kB view details)

Uploaded Python 3

File details

Details for the file scribe_mcp-2.2.tar.gz.

File metadata

  • Download URL: scribe_mcp-2.2.tar.gz
  • Upload date:
  • Size: 920.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for scribe_mcp-2.2.tar.gz
Algorithm Hash digest
SHA256 d396ddaa55539ddbd4e5489cf6fce333acbf8f9bcbc536b19922c437fee7a65b
MD5 11643fe41c836c7ab22dde43896bb062
BLAKE2b-256 74604e126a3e65d337c02bb950ee661e061a3244ac4493d5ea149880621db58d

See more details on using hashes here.

File details

Details for the file scribe_mcp-2.2-py3-none-any.whl.

File metadata

  • Download URL: scribe_mcp-2.2-py3-none-any.whl
  • Upload date:
  • Size: 681.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for scribe_mcp-2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5afb3c8a6e596cbaac30c9954c2d2c90f04274ed2d1a5cc21445b3bd192c7c28
MD5 a6e189f3bb5a4466421098c57f4893ed
BLAKE2b-256 b71b24c2c4920f61ef9dcb714fda057b1fe8ae3e17f9e7d76ca4c8b387d96e36

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page