上下文记忆
Claude Code的上下文防腐内存MCP服务器。为Claude提供跨会话的持久内存,并在源代码更改时自动检测过时情况。
特性
磁心存储器
- 持久化存储 -通过FTS5全文搜索,事实在SQLite的会话中得以保留
- 源追踪 -将事实链接到源文件(
file:line);检测代码更改何时使其无效 - 智能检索 -时间加权搜索将最近的高置信度事实排名靠前
- 项目隔离 -事实自动作用域到git存储库;支持跨项目查询
智能
- 矛盾检测 -当新事实与现有事实冲突时自动发出警告
- 会话跟踪 -知道在当前对话中学到了什么
- 事实版本控制 -跟踪事实随时间变化的历史
- 主题提取 -使用标签和关键字从内容中自动提取主题
内存卫生
- 信心衰退 -随着时间的推移,未使用的事实会失去信心
- 增强信心 -经常访问的事实会获得信心(每次访问增加2%)
- 汽车维修 -光衰在服务器启动时运行
- 修剪 -删除或存档旧的、低置信度的事实
- 整合 -查找并合并相似/重复的事实
关系
- 事实链接 -将事实与类型化关系(依赖、矛盾、阐述等)联系起来
- 取代 -跟踪事实何时取代旧版本
- 类别摘要 -查看按类别分组的事实
建筑
守护进程/客户端模型
Context Memory使用守护进程架构来支持并发会话。多个Claude Code会话可以安全地共享同一内存数据库。
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Claude Code #1 │ │ Claude Code #2 │ │ Claude Code #3 │
│ │ │ │ │ │
│ MCP (stdio) │ │ MCP (stdio) │ │ MCP (stdio) │
└────────┬─────────┘ └────────┬─────────┘ └────────┬─────────┘
│ │ │
▼ ▼ ▼
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Client Process │ │ Client Process │ │ Client Process │
│ (stdio bridge) │ │ (stdio bridge) │ │ (stdio bridge) │
└────────┬─────────┘ └────────┬─────────┘ └────────┬─────────┘
│ │ │
└──────────────────────┼──────────────────────┘
│
Unix Socket │ (~/.claude/context-memory/daemon.sock)
▼
┌──────────────────────────────────────────────────────┐
│ Daemon Process │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ MCP Server │ │ MCP Server │ │ MCP Server │ │
│ │ (session 1) │ │ (session 2) │ │ (session 3) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ └───────────────┼───────────────┘ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ Shared Storage │ │
│ │ (Connection Pool) │ │
│ └──────────┬──────────┘ │
└─────────────────────────┼────────────────────────────┘
│
▼
~/.claude/context-memory/memory.db
它是如何工作的:
- 客户端模式 (默认):由Claude Code创建,桥接stdio↔ 守护进程套接字
- 后台模式 (
--daemon):长时间运行的进程接受并发连接 - 自动启动:如果未运行,客户端会自动启动守护进程
内部架构
┌────────────────────────────────────────────────────────────────────────────┐
│ Context Memory Server │
│ │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ Tool Router (rmcp) │ │
│ │ │ │
│ │ remember recall forget verify link decay prune merge ... │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ Tool Handler │ │
│ │ │ │
│ │ • Input validation • Contradiction detection │ │
│ │ • Topic extraction • Session ID injection │ │
│ │ • Source hash computation • Confidence management │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ Storage Layer │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌────────────┐ │ │
│ │ │ facts │ │ relations │ │fact_history │ │ facts_fts │ │ │
│ │ │ │ │ │ │ │ │ (FTS5) │ │ │
│ │ │ • content │ │ • from_id │ │ • version │ │ │ │ │
│ │ │ • source │ │ • to_id │ │ • content │ │ Full-text │ │ │
│ │ │ • confidence│ │ • type │ │ • changed_at│ │ search │ │ │
│ │ │ • topics │ │ • metadata │ │ │ │ index │ │ │
│ │ │ • session_id│ │ │ │ │ │ │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ └────────────┘ │ │
│ │ │ │
│ │ SQLite + WAL Mode │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────────────────┘
数据流
┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ remember │────▶│ Validate Input │────▶│ Extract Topics │
│ (new fact) │ │ Check Length │ │ from Content │
└─────────────┘ └──────────────────┘ └─────────────────┘
│
┌──────────────────┐ ▼
│ Check for │◀─────┌─────────────────┐
│ Contradictions │ │ Compute Source │
│ (topic overlap) │ │ Hash (SHA256) │
└──────────────────┘ └─────────────────┘
│
▼
┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Return ID │◀────│ Store in SQLite │◀────│ Add Session ID │
│ + Warnings │ │ + FTS5 Index │ │ + Project Path │
└─────────────┘ └──────────────────┘ └─────────────────┘
┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ recall │────▶│ Sanitize Query │────▶│ Build SQL with │
│ (search) │ │ (FTS5 injection) │ │ Filters │
└─────────────┘ └──────────────────┘ └─────────────────┘
│
┌──────────────────┐ ▼
│ Boost Confidence │◀─────┌─────────────────┐
│ (+2% per access) │ │ Time-Weighted │
└──────────────────┘ │ Scoring │
│ └─────────────────┘
▼
┌──────────────────┐
│ Return Ranked │
│ Facts │
└──────────────────┘
数据模型
Fact
├── id (UUID)
├── content (the fact itself)
├── project_path (git root - for project isolation)
├── session_id (conversation tracking)
├── source (file:line reference)
├── source_content_hash (SHA256 for staleness)
├── confidence (0.0-1.0)
├── importance (critical/high/normal/low)
├── certainty (definite/likely/uncertain/speculative)
├── category (architecture/decision/pattern/bug/todo/...)
├── scope (global/project/branch/task)
├── topics[] (tags)
├── evidence[] (supporting observations)
├── access_count
├── last_accessed
├── stale (boolean)
└── archived (boolean)
Fact History
├── fact_id
├── version
├── content (snapshot)
├── confidence (snapshot)
├── changed_at
└── change_reason
Relations
├── from_id → to_id
├── type (depends_on/contradicts/elaborates/related_to/part_of/supersedes)
└── metadata
安装
先决条件
快速开始
# Clone and build
git clone https://github.com/praneethpuligundla/context-memory
cd context-memory
cargo build --release
# Add to Claude Code MCP config (~/.claude/.mcp.json)
{
"mcpServers": {
"context-memory": {
"command": "/absolute/path/to/context-memory/target/release/context-memory",
"args": []
}
}
}
# Restart Claude Code
验证安装
> What memory tools do you have?
Claude should list: remember, recall, forget, verify, decay, prune, etc.
MCP工具参考
磁心存储器
| 工具 | 说明 | 关键参数 |
|---|
remember | 存储事实 | content, source?, topics?, category?, importance? |
recall | 搜索事实 | query, all_projects?, session_id?, topics?, category?, min_confidence?, limit? |
forget | 删除事实 | fact_id |
forget_observation | 删除证据 | fact_id, observation |
验证
| 工具 | 说明 | 关键参数 |
|---|
verify | 检查来源是否改变 | fact_id |
get_stale | 列出过时的事实 | threshold_hours? |
refresh_all | 批量验证所有 | - |
关系
| 工具 | 说明 | 关键参数 |
|---|
link | 连接事实 | fact_a, fact_b, relation_type, metadata? |
unlink | 断开连接 | fact_a, fact_b, relation_type |
get_related | 查找相关事实 | fact_id |
find_contradictions | 检测冲突 | - |
会议和历史
| 工具 | 说明 | 关键参数 |
|---|
get_session_facts | 当前/特定会议的事实 | session_id?, limit? |
get_fact_history | 事实的版本历史 | fact_id |
探索
| 工具 | 说明 | 关键参数 |
|---|
list_topics | 列出所有主题 | - |
summarize | 关于某一主题的事实 | topic, limit? |
get_category_summary | 按类别分组的事实 | category?, limit_per_category? |
stats | 内存统计 | - |
内存维护
| 工具 | 说明 | 关键参数 |
|---|
decay | 减少旧的信心 | threshold_days? (30), decay_factor? (0.9) |
prune | 删除未使用的事实 | days_unused? (90), min_confidence? (0.5), archive? (真) |
consolidate | 查找类似事实 | similarity_threshold? (0.5) |
merge_facts | 结合两个事实 | fact_a, fact_b, merged_content? |
archive | 软删除 | fact_id |
unarchive | 恢复已存档 | fact_id |
get_archived | 列表已存档 | limit? |
运作原理
时间加权检索
score = confidence × importance_weight × time_decay
where:
importance_weight = { critical: 4, high: 2, normal: 1, low: 0.5 }
time_decay = 1 / (1 + days_since_access / 30)
稳定性检测
当事实引用源文件时(例如。, src/auth.rs:42):
- 计算存储中文件内容的SHA256哈希值
- 开
verify(),重新计算哈希值并进行比较 - 将事实标记为
stale: true 如果更改
矛盾检测
存储新事实时:
- 查找主题重叠超过50%的现有事实(Jaccard相似性)
- 分析否定词的内容(
not, never, don't等等) - 检查是否存在相反的值对(
true/false, enabled/disabled等等) - 返回警告,但仍存储事实
- 自动创建
contradicts 高置信度冲突关系
配置
环境变量
| 变量 | 默认值 | 描述 |
|---|
CONTEXT_MEMORY_DECAY_DAYS | 7 | 腐烂前几天不活动 |
CONTEXT_MEMORY_DECAY_FACTOR | 0.95 | 衰减倍数(0.95=5%衰减) |
CONTEXT_MEMORY_SKIP_MAINTENANCE | 0 | 设置为“1”跳过启动维护 |
文件
| 路径 | 描述 |
|---|
~/.claude/context-memory/memory.db | SQLite数据库 |
~/.claude/context-memory/daemon.sock | 客户端Unix套接字↔守护进程IPC |
~/.claude/context-memory/daemon.pid | 守护进程的PID文件 |
命令行
context-memory # Run in client mode (default, used by Claude Code)
context-memory --daemon # Run as daemon (auto-started by client if needed)
安全
- 路径穿越预防 -源路径被规范化
- FTS5查询消毒 -防止查询注入
- 输入验证 -所有文本字段的长度限制
- SQLite安全 -foreign_keys、secure_delete、WAL模式已启用
发展
cargo test # Run tests
cargo build # Build debug
cargo build --release # Build release
RUST_LOG=debug ./target/debug/context-memory # Run with logging
许可证
麻省理工学院