Loading...
Loading...
Local MCP memory server for AI coding assistants with verbatim recall, semantic search, and automatic session capture
npx skill4agent add aradotso/mcp-skills iai-mcp-memory-serverSkill by ara.so — MCP Skills collection.
# Verify requirements
python3 --version # Must be 3.11 or 3.12
node --version # Must be 18+
uname -m # Apple Silicon recommendedgit clone https://github.com/CodeAbra/iai-mcp.git
cd iai-mcp
bash scripts/install.sh# Add to ~/.zshrc or ~/.bashrc
export PATH="$HOME/.local/bin:$PATH"
# Verify
iai-mcp --versioniai-mcp capture-hooks install
iai-mcp capture-hooks status # Should show "status: ACTIVE"iai-mcp capture-hooks install --target codexiai-mcp capture-hooks install --target all~/.claude/hooks/iai-mcp-turn-capture.shiai-mcp-session-capture.shiai-mcp-session-recall.shcd /path/to/iai-mcp
claude mcp add iai-mcp -- node "$(pwd)/mcp-wrapper/dist/index.js"~/.claude.json{
"mcpServers": {
"iai-mcp": {
"command": "node",
"args": ["/absolute/path/to/iai-mcp/mcp-wrapper/dist/index.js"]
}
}
}~/.codex/config.toml[mcp_servers.iai-mcp]
command = "node"
args = ["/absolute/path/to/iai-mcp/mcp-wrapper/dist/index.js"]
[mcp_servers.iai-mcp.env]
IAI_MCP_PYTHON = "/absolute/path/to/iai-mcp/.venv/bin/python"
IAI_MCP_STORE = "/Users/you/.iai-mcp"
TRANSFORMERS_VERBOSITY = "error"
TOKENIZERS_PARALLELISM = "false"iai-mcp doctor # Should show 14/14 PASS or 13/14 during sleep cycle
iai-mcp daemon status
# Check logs after first session
tail ~/.iai-mcp/logs/capture-$(date -u +%Y-%m-%d).log
# Look for "rc=0" indicating successful capture# Start daemon (usually auto-starts via launchd)
iai-mcp daemon start
# Check status
iai-mcp daemon status
# Stop daemon
iai-mcp daemon stop
# Restart daemon
iai-mcp daemon restart
# View daemon logs
tail -f ~/.iai-mcp/logs/daemon.log# Install hooks
iai-mcp capture-hooks install [--target {claude|codex|all}]
# Check hook status
iai-mcp capture-hooks status
# Uninstall hooks
iai-mcp capture-hooks uninstall
# Manual transcript capture (fallback)
iai-mcp capture-transcript --no-spawn# Trigger session start (usually called by hook)
iai-mcp session-start
# Query memory directly
iai-mcp query "what did we discuss about error handling?"
# View recent memories
iai-mcp list --limit 20
# Export memories
iai-mcp export --output memories.json
# Clear all memories (irreversible)
iai-mcp clear --confirm# Full health check (14 tests)
iai-mcp doctor
# Check specific components
iai-mcp doctor --check daemon
iai-mcp doctor --check store
iai-mcp doctor --check crypto
# View statistics
iai-mcp stats
# Check embedding model
iai-mcp info --embeddings# Re-embed store with different model
iai-mcp migrate reembed --model bge-m3
# Rebuild graph indices
iai-mcp migrate rebuild-graph
# Compact database
iai-mcp migrate compact# Data directory (default: ~/.iai-mcp/)
export IAI_MCP_STORE="/custom/path/to/store"
# Embedding model (default: bge-small-en-v1.5)
export IAI_MCP_EMBED_MODEL="bge-m3" # For multilingual support
# Daemon socket path (advanced)
export IAI_MCP_SOCKET="/tmp/iai-mcp.sock"
# Log level
export IAI_MCP_LOG_LEVEL="DEBUG" # DEBUG, INFO, WARN, ERROR~/.iai-mcp/config.json{
"embedding": {
"model": "bge-small-en-v1.5",
"batch_size": 32,
"normalize": true
},
"recall": {
"max_tokens": 3000,
"cold_max_tokens": 8000,
"min_similarity": 0.3
},
"consolidation": {
"enabled": true,
"idle_delay_seconds": 300,
"cluster_threshold": 0.7,
"decay_rate": 0.95
},
"encryption": {
"enabled": true,
"algorithm": "aes-256-gcm"
},
"insights": {
"enabled": false,
"api_key_env": "ANTHROPIC_API_KEY"
}
}# Clone and install
git clone https://github.com/CodeAbra/iai-mcp.git
cd iai-mcp
bash scripts/install.sh
# Add to PATH
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# Install hooks
iai-mcp capture-hooks install
# Connect to Claude Code
claude mcp add iai-mcp -- node "$(pwd)/mcp-wrapper/dist/index.js"
# Verify
iai-mcp doctor# Set multilingual model
export IAI_MCP_EMBED_MODEL="bge-m3"
# Install with custom model
bash scripts/install.sh
# Verify model loaded
iai-mcp info --embeddings
# Should show: Model: bge-m3# Not typical usage (hooks handle this), but for debugging:
import subprocess
import json
def query_memory(text: str) -> dict:
"""Query iai-mcp memory directly."""
result = subprocess.run(
["iai-mcp", "query", text, "--json"],
capture_output=True,
text=True
)
return json.loads(result.stdout) if result.returncode == 0 else {}
# Example
memories = query_memory("error handling patterns")
for mem in memories.get("results", []):
print(f"[{mem['timestamp']}] {mem['content'][:100]}...")#!/usr/bin/env bash
# Custom post-session hook: ~/.claude/hooks/my-custom-capture.sh
set -euo pipefail
SESSION_ID="$1"
TRANSCRIPT_PATH="$2"
# Let iai-mcp process the transcript
iai-mcp capture-transcript --session-id "$SESSION_ID" --path "$TRANSCRIPT_PATH"
# Custom logic: export to external system
if [ -f "$HOME/.iai-mcp/exports/latest.json" ]; then
curl -X POST https://my-backup.example.com/sync \
-H "Authorization: Bearer $MY_BACKUP_TOKEN" \
--data-binary "@$HOME/.iai-mcp/exports/latest.json"
fi# Advanced: Direct LanceDB access (not recommended for normal use)
import lancedb
import os
from pathlib import Path
store_path = Path.home() / ".iai-mcp"
db = lancedb.connect(str(store_path / "lance"))
# Query episodic memories
table = db.open_table("records")
results = table.search([0.1] * 384) \ # Replace with actual embedding
.limit(10) \
.to_pandas()
print(results[["timestamp", "content", "session_id"]])cd /path/to/iai-mcp
# Verbatim recall accuracy
python -m bench.verbatim
# Expected: >=99% byte-exact recall at N=10k
# Recall latency
python -m bench.neural_map
# Expected: p95 <100ms
# Memory footprint
python -m bench.memory_footprint
# Expected: ~150-300 MB steady state
# Session-start token cost
python -m bench.tokens
# Expected: <=3000 tokens warm, <=8000 cold
# Full session cost
python -m bench.total_session_cost
# Longitudinal trajectory (30 sessions)
python -m bench.trajectory
# Contradiction detection
python -m bench.contradiction_longitudinal
# LongMemEval-S blind run (no tuning)
python -m bench.longmemeval_blind# Check for orphan processes
ps aux | grep iai-mcp
# Kill orphans
killall -9 iai-mcp-daemon
# Remove stale socket
rm -f ~/.iai-mcp/daemon.sock
# Check logs
tail -n 100 ~/.iai-mcp/logs/daemon.log
# Restart
iai-mcp daemon restart# Verify hook installation
iai-mcp capture-hooks status
# Check hook permissions
ls -la ~/.claude/hooks/iai-mcp-*.sh
# Should be -rwxr-xr-x
# Test hook manually
~/.claude/hooks/iai-mcp-turn-capture.sh "test-session-id" "user" "Test prompt"
# Check buffer
cat ~/.iai-mcp/session-buffers/test-session-id.jsonl# Check if store is empty
iai-mcp stats
# Should show total_memories > 0
# Test recall manually
iai-mcp session-start --debug
# Check recall hook logs
tail ~/.iai-mcp/logs/recall-$(date -u +%Y-%m-%d).log
# Verify daemon is running
iai-mcp daemon status# Check key exists
ls -la ~/.iai-mcp/.key
# Should be -rw------- (600)
# If lost, data is unrecoverable
# Backup key location (if you made one):
cat ~/.iai-mcp/.key.backup
# Start fresh (destroys all memories)
iai-mcp clear --confirm
# New key generated on next capture# Check current footprint
iai-mcp stats --memory
# Compact database
iai-mcp migrate compact
# Reduce embedding batch size
export IAI_MCP_EMBED_BATCH=16 # Default 32
# Restart daemon
iai-mcp daemon restart# Check store size
du -sh ~/.iai-mcp/lance/
# Rebuild indices
iai-mcp migrate rebuild-graph
# Check embedding model is cached
ls -lh ~/.cache/huggingface/hub/
# Should see models--BAAI--bge-small-en-v1.5
# Profile a query
time iai-mcp query "test query" --debug# Increase hook timeout (Claude Code settings.json)
# Edit: ~/.claude/settings.json
{
"hooks": {
"timeouts": {
"UserPromptSubmit": 10000, # Default 5000ms
"Stop": 60000, # Default 35000ms
"SessionStart": 45000 # Default 30000ms
}
}
}# Run with verbose output
iai-mcp doctor --verbose
# Fix common issues:
# Check (a) Daemon alive
iai-mcp daemon start
# Check (b) Socket fresh (may fail during consolidation - normal)
# Wait 30s and retry
# Check (h) Crypto file state
chmod 600 ~/.iai-mcp/.key
# Check (i) Lance versions piling up
iai-mcp migrate compact
# Check (k) Lifecycle history
rm ~/.iai-mcp/.daemon-state.json
iai-mcp daemon restart# On old machine: backup store and key
tar czf iai-mcp-backup.tar.gz ~/.iai-mcp/
# On new machine: install iai-mcp
git clone https://github.com/CodeAbra/iai-mcp.git
cd iai-mcp
bash scripts/install.sh
# Restore backup
tar xzf iai-mcp-backup.tar.gz -C ~/
# Verify key permissions
chmod 600 ~/.iai-mcp/.key
# Restart daemon
iai-mcp daemon restart
# Verify
iai-mcp doctor
iai-mcp stats# List available models
huggingface-cli scan-cache
# Download custom model
huggingface-cli download BAAI/bge-large-en-v1.5
# Configure
export IAI_MCP_EMBED_MODEL="bge-large-en-v1.5"
# Re-embed existing store
iai-mcp migrate reembed --model bge-large-en-v1.5 --confirm
# Verify
iai-mcp info --embeddings~/.iai-mcp/.key# Backup encryption key
cp ~/.iai-mcp/.key ~/secure-backup/.iai-mcp-key.backup
chmod 400 ~/secure-backup/.iai-mcp-key.backupbge-small-en-v1.5bge-m3