Local MCP server: five tools to store, retrieve, and retire project decisions. SQLite by default.
π Read the Systems Deep Dive: Check out the published architecture essay Beyond Flat Vector RAG: What Makes krusch-context-mcp Special on krusch.dev, or the local companion guide in
docs/WHAT_MAKES_IT_SPECIAL.md.
Krusch Context MCP gives AI coding agents (Cursor, Claude Code, Windsurf, Antigravity) persistent working memory across sessions. It captures architectural decisions, invariants, lessons, and bug diagnoses, warns on near-duplicate memories, maintains temporal lineage when facts are superseded or invalidated, and audits diffs against active constraints.
- Not a codebase AST or Git indexer: Code symbol search, call graphs, and Git DAG traversal belong in
krusch-gitor your IDE's native search. - Not a 61-tool cafeteria: Collapsed to strictly 5 canonical verbs (~350 prompt tokens) for boring reliability.
- Not a cloud SaaS platform: Runs 100% locally on your machine with zero external cloud dependencies.
- Not a monolithic domain suite: Legal compliance (
krusch-law), document ingestion (krusch-nexus), and contract graphs (krusch-biz) live in separate companion repositories.
Requires Node.js >= 22.0.0. Run once inside your project repository:
npx krusch-context-mcp initThis command will:
- Validate Node >= 22.0.0 and initialize
.agent/context.dbvianode:sqlite. - Clear stale MCP tool schemas from local IDE caches.
- Create your project
.envwith sensible defaults. - Seed initial project context and run a diagnostic health check.
- Print copy-paste JSON configurations for Cursor, Claude Code, and Claude Desktop.
Krusch Context MCP exposes strictly 5 canonical verbs designed to fit into standard coding workflows:
| Verb | Short Alias | Purpose |
|---|---|---|
krusch_context_retrieve |
retrieve |
Pulls active memories, steering rules, and project state briefings within a strict limit_tokens budget. Returns citations. |
krusch_context_remember |
remember |
Writes episodic facts and steering nuggets. Detects near-duplicates (similarity >= 0.85) and proposes revise(action: 'supersede') without blocking contrasting rules. |
krusch_context_revise |
revise |
Updates stale knowledge (supersede with lineage tracking) or revokes obsolete rules (invalidate with mandatory reason). |
krusch_context_nudge |
nudge |
Pre-commit auditor that checks proposed diffs against active project invariants (max 1β3 findings). Trigger defaults to pre_commit or manual; rejects every_turn. |
krusch_context_health |
health |
Reports storage mode, memory counts by closed taxonomy, and 30-day TTL decay review. |
Coding agents should interact with memory at specific lifecycle boundaries:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 1. SESSION START β
β Agent calls retrieve(query: '*', include_state: true) β
β -> Obtains active invariants, recent decisions, blockers β
ββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββ
β 2. DURING WORK β
β Agent calls remember(content: '...', category: '...') β
β -> If near-duplicate returned, agent calls revise(...) β
ββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββ
β 3. PRE-COMMIT / PRE-EDIT β
β Agent calls nudge(trigger: 'pre_commit') β
β -> Audits code against active invariants (max 3 findings)β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
To prevent memory hallucination and database pollution:
-
Closed Taxonomy: Every write must use one of 5 categories:
-
decision: Architectural choices, design directions, trade-offs. -
invariant: Non-negotiable rules (e.g., "Use node:sqlite, zero native compiles"). -
bug: Solved defects, regressions, and root-cause analyses. -
lesson: Tactical insights and framework discoveries. -
blocker: Active dependencies or external obstacles.
-
-
Near-Duplicate Detection: If a proposed memory matches an existing active record (
$\ge 0.85$ cosine similarity), the memory is saved with a warning proposingrevise(action: 'supersede', target_id: ...). This protects contrasting rules (e.g., "Allow CORS" vs "Do not allow CORS") while flagging twin facts. -
Compulsory Invalidation Reasons: Calling
revise(action: 'invalidate')strictly requires a non-emptyreason. -
Focused Audits:
nudgecaps findings at 3 with concrete evidence, rejectingevery_turntriggers to eliminate auditor nagware.
- Zero-GPU Default: If neither Ollama nor an API key is present, the engine runs 100% offline using deterministic keyword extraction, recency scoring, and heuristic tag indexing.
- Local Ollama (Optional): Set
OLLAMA_URL="http://127.0.0.1:11434"withEMBED_MODEL="bge-large"(1024 dims). - Remote Cloud (Optional): Set
OPENROUTER_API_KEY="sk-..."withEMBED_MODEL="baai/bge-large-en-v1.5"for zero-local-VRAM embeddings.
- Use SQLite (Default): Perfect for single developers, local IDE sessions, and projects with hundreds to thousands of decisions. Zero Docker, zero setup.
- Use PostgreSQL (
STORAGE_MODE=postgres): Required only when scaling to multi-agent swarms across different machines needing centralized persistence and server-side pgvector HNSW indexing.
- Tool Aliases: Legacy tool names (
add_memory,search_memory,compile_state,supersede_memory,invalidate_memory,proactive_nudge) are automatically aliased to the 5 verbs with a deprecation notice. - Database Path: v1.7 used
.agent/memory.db. v1.8.0 uses.agent/context.db. Runnpx krusch-context-mcp initto migrate. - See docs/MIGRATION.md for the complete mapping table.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AI Coding Agent (Cursor / Claude) β
ββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ
β
βββββββββββββββββ΄ββββββββββββββββ
βΌ βΌ
βββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ
β krusch-context-mcp (v1.8) β β krusch-git (External) β
β Project Memory & Steering β β Codebase RAG & AST Search β
β (5 Canonical Verbs) β β (7 Specialized Tools) β
ββββββββββββββββ¬βββββββββββββββ βββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββ
β .agent/context.db β
β (node:sqlite, Node β₯22) β
βββββββββββββββββββββββββββββββ
Other specialized tools (krusch-nexus, krusch-law, krusch-biz) run as independent MCP servers in their own repositories.
{
"mcpServers": {
"krusch-context": {
"command": "npx",
"args": ["-y", "krusch-context-mcp"]
}
}
}claude mcp add krusch-context -- npx -y krusch-context-mcp{
"mcpServers": {
"krusch-context": {
"command": "npx",
"args": ["-y", "krusch-context-mcp"]
}
}
}- Canonical Tool Reference: Generated directly from live schemas (
npm run docs:generate). - Architecture & Failure Modes: 2-page specification covering schemas, indexes, and invariants.
- Setup & Operations Guide: Zero-Docker setup and optional configurations.
- Migration Guide: Step-by-step v1.5 β v1.6 β v1.7 β v1.8.0 mapping.
- Episodic Memory Guide: Deep dive into the closed taxonomy and lifecycle.
- Changelog: Version release notes.
- Evaluation Baseline Notes: Preliminary benchmark fixtures and token-budget metrics.
# Run full unit & contract test suite (100% SQLite, zero Docker)
npm test
# Check storage and memory health
npm run healthMIT Β© kruschdev