vestige/crates/vestige-mcp
Sam Valladares 72e353ae02 fix(predict): surface degraded state instead of silent empty responses
All four PredictiveMemory calls (predict_needed_memories, get_proactive_suggestions,
get_top_interests, prediction_accuracy) return Result, and all four were being
swallowed by `.unwrap_or_default()` / `.unwrap_or(0.0)` — every lock-poisoning or
internal error produced a response indistinguishable from a genuine cold-start
"I have no predictions yet." Callers (dashboard, Claude Code, Cursor) had no way
to tell "the system is broken" from "there genuinely isn't anything to predict."

Now each call uses `unwrap_or_else` to (a) `tracing::warn!` the error with its
source channel for observability, (b) flip a local `degraded` flag. The JSON
response gains a new `predict_degraded: bool` field. Empty + degraded=false =
cold start (expected). Empty + degraded=true = something went wrong, check logs.

6 existing predict tests pass (return shape unchanged on success path).
2026-04-19 16:46:31 -05:00
..
src fix(predict): surface degraded state instead of silent empty responses 2026-04-19 16:46:31 -05:00
Cargo.toml chore(release): v2.0.6 "Composer" — rebuild + version bump + CHANGELOG 2026-04-18 18:33:31 -05:00
README.md Switch embedding model from BGE to nomic-embed-text-v1.5 2026-01-25 03:11:15 -06:00

Vestige MCP Server

A bleeding-edge Rust MCP (Model Context Protocol) server for Vestige - providing Claude and other AI assistants with long-term memory capabilities.

Features

  • FSRS-6 Algorithm: State-of-the-art spaced repetition (21 parameters, personalized decay)
  • Dual-Strength Memory Model: Based on Bjork & Bjork 1992 cognitive science research
  • Local Semantic Embeddings: nomic-embed-text-v1.5 (768d) via fastembed v5 (no external API)
  • HNSW Vector Search: USearch-based, 20x faster than FAISS
  • Hybrid Search: BM25 + semantic with RRF fusion
  • Codebase Memory: Remember patterns, decisions, and context

Installation

cd /path/to/vestige/crates/vestige-mcp
cargo build --release

Binary will be at target/release/vestige-mcp

Claude Desktop Configuration

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "vestige": {
      "command": "/path/to/vestige-mcp"
    }
  }
}

Available Tools

Core Memory

Tool Description
ingest Add new knowledge to memory
recall Search and retrieve memories
semantic_search Find conceptually similar content
hybrid_search Combined keyword + semantic search
get_knowledge Retrieve a specific memory by ID
delete_knowledge Delete a memory
mark_reviewed Review with FSRS rating (1-4)

Statistics & Maintenance

Tool Description
get_stats Memory system statistics
health_check System health status
run_consolidation Apply decay, generate embeddings

Codebase Tools

Tool Description
remember_pattern Remember code patterns
remember_decision Remember architectural decisions
get_codebase_context Get patterns and decisions

Available Resources

Memory Resources

URI Description
memory://stats Current statistics
memory://recent?n=10 Recent memories
memory://decaying Low retention memories
memory://due Memories due for review

Codebase Resources

URI Description
codebase://structure Known codebases
codebase://patterns Remembered patterns
codebase://decisions Architectural decisions

Example Usage (with Claude)

User: Remember that we decided to use FSRS-6 instead of SM-2 because it's 20-30% more efficient.

Claude: [calls remember_decision]
I've recorded that architectural decision.

User: What decisions have we made about algorithms?

Claude: [calls get_codebase_context]
I found 1 decision:
- We decided to use FSRS-6 instead of SM-2 because it's 20-30% more efficient.

Data Storage

  • Database: ~/Library/Application Support/com.vestige.mcp/vestige-mcp.db (macOS)
  • Uses SQLite with FTS5 for full-text search
  • Vector embeddings stored in separate table

Protocol

  • JSON-RPC 2.0 over stdio
  • MCP Protocol Version: 2024-11-05
  • Logging to stderr (stdout reserved for JSON-RPC)

License

MIT