| name | iai-mcp-memory-server |
| description | Local MCP memory server for AI coding assistants with verbatim recall, semantic search, and automatic session capture |
| triggers | ["set up iai-mcp memory server","configure long-term memory for Claude","install iai-mcp capture hooks","debug iai-mcp daemon issues","query iai-mcp memory store","benchmark iai-mcp performance","troubleshoot memory recall","migrate iai-mcp embeddings"] |
iai-mcp Memory Server
Skill by ara.so — MCP Skills collection.
What It Is
iai-mcp is a local MCP server that provides long-term memory for AI coding assistants (Claude Code, Codex CLI, etc.). It captures every conversation turn verbatim, stores them encrypted with semantic embeddings, and automatically recalls relevant context at session start. All data stays local with no telemetry.
Key Features:
- ≥99% verbatim recall at 10k memories
- <100ms p95 recall latency
- AES-256-GCM encryption at rest
- Automatic capture/recall via hooks
- LanceDB vector storage with bge-small-en-v1.5 embeddings
- Background consolidation and duplicate merging
Installation
Prerequisites Check
python3 --version
node --version
uname -m
Install the Server
git clone https://github.com/CodeAbra/iai-mcp.git
cd iai-mcp
bash scripts/install.sh
This creates a Python venv, installs dependencies (LanceDB, sentence-transformers, torch, NetworkX, igraph), downloads the embedding model (~130 MB), and registers the daemon with launchd on macOS.
Add to PATH
export PATH="$HOME/.local/bin:$PATH"
iai-mcp --version
Install Capture Hooks
For Claude Code:
iai-mcp capture-hooks install
iai-mcp capture-hooks status
For Codex CLI:
iai-mcp capture-hooks install --target codex
For both:
iai-mcp capture-hooks install --target all
This installs three hooks to ~/.claude/hooks/:
iai-mcp-turn-capture.sh (UserPromptSubmit) — Captures each turn to session buffer
iai-mcp-session-capture.sh (Stop) — Processes buffer at session end
iai-mcp-session-recall.sh (SessionStart) — Injects memory context at start
Connect MCP Host
Claude Code:
cd /path/to/iai-mcp
claude mcp add iai-mcp -- node "$(pwd)/mcp-wrapper/dist/index.js"
Or edit ~/.claude.json manually:
{
"mcpServers": {
"iai-mcp": {
"command": "node",
"args": ["/absolute/path/to/iai-mcp/mcp-wrapper/dist/index.js"]
}
}
}
Codex CLI (~/.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"
Verify Installation
iai-mcp doctor
iai-mcp daemon status
tail ~/.iai-mcp/logs/capture-$(date -u +%Y-%m-%d).log
Key Commands
Daemon Management
iai-mcp daemon start
iai-mcp daemon status
iai-mcp daemon stop
iai-mcp daemon restart
tail -f ~/.iai-mcp/logs/daemon.log
Capture Hooks
iai-mcp capture-hooks install [--target {claude|codex|all}]
iai-mcp capture-hooks status
iai-mcp capture-hooks uninstall
iai-mcp capture-transcript --no-spawn
Memory Operations
iai-mcp session-start
iai-mcp query "what did we discuss about error handling?"
iai-mcp list --limit 20
iai-mcp export --output memories.json
iai-mcp clear --confirm
Diagnostics
iai-mcp doctor
iai-mcp doctor --check daemon
iai-mcp doctor --check store
iai-mcp doctor --check crypto
iai-mcp stats
iai-mcp info --embeddings
Migrations
iai-mcp migrate reembed --model bge-m3
iai-mcp migrate rebuild-graph
iai-mcp migrate compact
Configuration
Environment Variables
export IAI_MCP_STORE="/custom/path/to/store"
export IAI_MCP_EMBED_MODEL="bge-m3"
export IAI_MCP_SOCKET="/tmp/iai-mcp.sock"
export IAI_MCP_LOG_LEVEL="DEBUG"
Config File (~/.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": {
Real Usage Patterns
Pattern 1: Basic Setup for Claude Code
git clone https://github.com/CodeAbra/iai-mcp.git
cd iai-mcp
bash scripts/install.sh
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
iai-mcp capture-hooks install
claude mcp add iai-mcp -- node "$(pwd)/mcp-wrapper/dist/index.js"
iai-mcp doctor
Pattern 2: Multilingual Setup
export IAI_MCP_EMBED_MODEL="bge-m3"
bash scripts/install.sh
iai-mcp info --embeddings
Pattern 3: Manual Memory Query
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 {}
memories = query_memory("error handling patterns")
for mem in memories.get("results", []):
print(f"[{mem['timestamp']}] {mem['content'][:100]}...")
Pattern 4: Custom Hook Integration
#!/usr/bin/env bash
set -euo pipefail
SESSION_ID="$1"
TRANSCRIPT_PATH="$2"
iai-mcp capture-transcript --session-id "$SESSION_ID" --path "$TRANSCRIPT_PATH"
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
Pattern 5: Programmatic Memory Access
import lancedb
import os
from pathlib import Path
store_path = Path.home() / ".iai-mcp"
db = lancedb.connect(str(store_path / "lance"))
table = db.open_table("records")
results = table.search([0.1] * 384) \
.limit(10) \
.to_pandas()
print(results[["timestamp", "content", "session_id"]])
Benchmarks
Run the included benchmark suite to verify performance on your hardware:
cd /path/to/iai-mcp
python -m bench.verbatim
python -m bench.neural_map
python -m bench.memory_footprint
python -m bench.tokens
python -m bench.total_session_cost
python -m bench.trajectory
python -m bench.contradiction_longitudinal
python -m bench.longmemeval_blind
Troubleshooting
Daemon Won't Start
ps aux | grep iai-mcp
killall -9 iai-mcp-daemon
rm -f ~/.iai-mcp/daemon.sock
tail -n 100 ~/.iai-mcp/logs/daemon.log
iai-mcp daemon restart
Hooks Not Capturing
iai-mcp capture-hooks status
ls -la ~/.claude/hooks/iai-mcp-*.sh
~/.claude/hooks/iai-mcp-turn-capture.sh "test-session-id" "user" "Test prompt"
cat ~/.iai-mcp/session-buffers/test-session-id.jsonl
No Memory Recalled at Session Start
iai-mcp stats
iai-mcp session-start --debug
tail ~/.iai-mcp/logs/recall-$(date -u +%Y-%m-%d).log
iai-mcp daemon status
Encryption Key Lost
ls -la ~/.iai-mcp/.key
cat ~/.iai-mcp/.key.backup
iai-mcp clear --confirm
High Memory Usage
iai-mcp stats --memory
iai-mcp migrate compact
export IAI_MCP_EMBED_BATCH=16
iai-mcp daemon restart
Slow Recall
du -sh ~/.iai-mcp/lance/
iai-mcp migrate rebuild-graph
ls -lh ~/.cache/huggingface/hub/
time iai-mcp query "test query" --debug
Hook Timeout Errors
{
"hooks": {
"timeouts": {
"UserPromptSubmit": 10000,
"Stop": 60000,
"SessionStart": 45000
}
}
}
Doctor Check Failures
iai-mcp doctor --verbose
iai-mcp daemon start
chmod 600 ~/.iai-mcp/.key
iai-mcp migrate compact
rm ~/.iai-mcp/.daemon-state.json
iai-mcp daemon restart
Migration to New Machine
tar czf iai-mcp-backup.tar.gz ~/.iai-mcp/
git clone https://github.com/CodeAbra/iai-mcp.git
cd iai-mcp
bash scripts/install.sh
tar xzf iai-mcp-backup.tar.gz -C ~/
chmod 600 ~/.iai-mcp/.key
iai-mcp daemon restart
iai-mcp doctor
iai-mcp stats
Advanced: Custom Embedding Models
huggingface-cli scan-cache
huggingface-cli download BAAI/bge-large-en-v1.5
export IAI_MCP_EMBED_MODEL="bge-large-en-v1.5"
iai-mcp migrate reembed --model bge-large-en-v1.5 --confirm
iai-mcp info --embeddings
Security Notes
- All memories encrypted with AES-256-GCM at rest
- Encryption key:
~/.iai-mcp/.key (mode 0600)
- Backup the key — no key recovery possible
- No network calls except optional Anthropic API for insights (disabled by default)
- No telemetry, no analytics, fully local
- Socket: Unix domain socket (no network exposure)
cp ~/.iai-mcp/.key ~/secure-backup/.iai-mcp-key.backup
chmod 400 ~/secure-backup/.iai-mcp-key.backup
Notes
- Platform: macOS (Apple Silicon tested). Linux/Windows support planned.
- Python: 3.11 or 3.12 required (3.13 may have torch compatibility issues).
- Disk: ~500 MB for fresh install, grows with memories (~1-2 MB per 1000 turns).
- Model: Default
bge-small-en-v1.5 is ~130 MB. bge-m3 (multilingual) is ~380 MB.
- Token Cost: Session-start recall adds 1k-3k tokens (warm) or up to 8k (cold cache).
- Consolidation: Runs every 5 minutes of idle time. Socket briefly unavailable during sleep cycle (normal).