内存MCP服务器
用于AI助手(Claude、Copilot CLI等)的个人长期记忆系统,使用局部语义搜索、时间知识图和源感知复合排名来存储、检索和管理上下文记忆。
没有外部API密钥,没有Docker,没有云服务。一切都在本地运行。
特性
- 语义搜索:通过句子变换器(全MiniLM-L6-v2)和LanceDB实现向量相似性
- 综合排名:分数结合了相似性、新近性、重要性、访问频率和源可靠性
- 来源感知评分:第一手观察(来自对话)比批量导入的数据更有价值,防止过时的导入淹没当前的事实
- 知识图谱:SQLite支持的时态事实存储,具有实体关系三元组、时间有效性窗口和时间点查询
- 智能上下文注入:通过模式(编码、聊天、快速、项目)进行令牌预算感知检索,以实现最佳上下文加载
- 会议简报:在会话开始时立即提供预先烘焙的上下文,包括最近的对话摘要、关键记忆和KG事实;无嵌入延迟
- 对话摄取:通过文件系统监视器自动索引Copilot CLI会话以进行跨会话搜索
- 内存生命周期:固定、存档、遗忘和巩固记忆;指令记忆在每次会话中强制加载
- 持久HTTP服务器:作为Windows计划任务运行,具有监督程序、监视器和睡眠/唤醒弹性
建筑
server.py MCP server (stdio or HTTP transport)
├── memory_store.py LanceDB vector storage (memories + conversations)
├── embeddings.py Local sentence-transformers, LRU cache, background preload
├── ranking.py Composite scoring with source boost
├── knowledge_graph.py SQLite temporal fact store (entity/predicate/object triples)
├── briefing.py Pre-baked session context generator (zero-latency startup)
├── config.py Environment-based configuration
├── watcher.py Filesystem watcher for Copilot CLI session ingestion + briefing
├── server_service.py Windows Task Scheduler service (install/start/stop)
└── service.py Watcher scheduled task service快速开始
# Create virtual environment
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # Linux/macOS
# Install dependencies
pip install -r requirements.txt
# Run via stdio (for MCP client integration)
python server.py
# Run as persistent HTTP server
python server.py --http --port 5123持久后台服务(Windows)
# Install as a Windows scheduled task with auto-restart
python server_service.py install
python server_service.py start
# Check status
python server_service.py status
# Stop/restart
python server_service.py stop
python server_service.py start弹性层:
- 监督模式:瞬态Python崩溃的内部重启循环
- 重复触发:如果未运行,任务计划程序每2分钟重新启动一次
- 恢复触发器:从睡眠/休眠中唤醒时重新启动
- 看门狗:每5分钟进行一次健康检查,如果挂起,则强制重新启动
MCP工具(共22个)
内存管理
| 工具 | 说明 |
|---|---|
memory_store | 使用类别、重要性、标签和来源存储新内存 |
memory_search | 具有复合排名的语义搜索 |
memory_list_recent | 按创建时间列出记忆 |
memory_pin / memory_unpin | 固定记忆,这样它们在相关时总是会出现 |
memory_forget | 永久删除内存 |
memory_stats | 收集统计数据(按类别、来源、固定/存档计数) |
memory_context | 用于会话启动的令牌预算感知上下文blob(模式:编码、聊天、快速、项目) |
memory_refresh_briefing | 手动重新生成会话简报 |
memory_consolidate | 查找并合并接近重复的内存集群 |
知识图谱
| 工具 | 说明 |
|---|---|
memory_kg_add | 具有时间有效性的存储实体关系对象三元组 |
memory_kg_query | 查询实体的事实(支持时间点查询) |
memory_kg_invalidate | 软过期事实(保留历史记录,从当前查询中排除) |
memory_kg_timeline | 显示所有变化的实体的按时间顺序的历史 |
memory_kg_stats | 图形统计(实体、关系、活动/过期计数) |
对话搜索
| 工具 | 说明 |
|---|---|
conversation_search | 跨摄入的Copilot CLI会话进行语义搜索 |
conversation_get_session | 检索特定会话的完整对话 |
conversation_stats | 摄入统计数据(回合、会话、日期范围) |
排名系统
搜索结果使用五个信号的加权组合进行评分:
| 信号 | 默认权重 | 描述 |
|---|---|---|
| 相似度 | 0.55 | 来自向量搜索的余弦相似度 |
| 近期 | 0.20 | 指数衰减(30天半衰期) |
| 重要性 | 0.15 | 用户指定的1-10分制 |
| 频率 | 0.10 | 记录具有最近度衰减的按比例访问计数 |
| 源增强 | 乘数 | chat =1.10倍, import =0.90倍,其他=1.0倍 |
源提升被用作综合得分的最终乘数,确保在相关性可比的情况下,第一手观察结果始终超过批量进口数据。
固定记忆绕过正常排名,只要满足最小相似性阈值,就会被包括在内。
会议简报
会话简报在会话开始时提供零延迟上下文注入。而不是对每个对象运行嵌入+向量搜索 memory_context() 呼叫时,系统会预先生成一个压缩 briefing.json 文件在后台。
它是如何工作的:
- 观察者接收Copilot CLI会话并存储会话元数据(第一条用户消息、转数、时间戳)
- 每次摄入后(每5分钟一次),简报会从以下内容重新生成:
- 最近会话摘要(过去7天,最多20个会话),带有会话ID,用于深入查看 - 关键记忆(固定+高度重要性) - 主动知识图谱事实
- 当
memory_context()在没有主题的情况下调用,它会立即提供缓存的简报(文件读取,无ML) - 当使用主题调用时,它会回退到动态嵌入+搜索
滞留处理:
- 修改工具(存储、固定、忘记、KG添加/无效)通过标记文件将简报标记为过时
- 观察者的周期性再生会清除过时的标记并刷新
- 这
memory_refresh_briefing工具可以手动触发再生
手动生成简报:
python watcher.py --generate-briefing配置
所有设置均可通过环境变量进行配置:
| 变量 | 默认值 | 描述 |
|---|---|---|
EMBEDDING_MODEL | all-MiniLM-L6-v2 | 句子变压器型号名称 |
EMBEDDING_DIMENSIONS | 384 | 矢量维度 |
EMBEDDING_CACHE_SIZE | 512 | 用于嵌入向量的LRU缓存 |
WEIGHT_SIMILARITY | 0.55 | 语义相似度的权重排序 |
WEIGHT_RECENCY | 0.20 | 近期排名权重 |
WEIGHT_IMPORTANCE | 0.15 | 按重要性排序权重 |
WEIGHT_FREQUENCY | 0.10 | 访问频率排名权重 |
RECENCY_HALF_LIFE_DAYS | 30.0 | 距离最近度评分降至0.5的天数 |
SOURCE_BOOST_CHAT | 1.10 | 对话来源记忆的分数乘数 |
SOURCE_BOOST_IMPORT | 0.90 | 批量导入内存的分数乘数 |
SOURCE_BOOST_DEFAULT | 1.0 | 其他来源的分数乘数 |
PIN_SIMILARITY_THRESHOLD | 0.4 | 固定内存包含的最小相似性 |
MEMORY_DATA_DIR | (项目目录) | 所有数据文件的基本目录 |
COPILOT_SESSION_DIR | ~/.copilot/session-state | 用于摄取的Copilot CLI会话目录 |
BRIEFING_MAX_AGE_MINUTES | 120 | 简报前的最长年龄被视为过时 |
BRIEFING_RECENT_DAYS | 7 | 简报中包括多少天的会议 |
BRIEFING_MAX_SESSIONS | 20 | 简报会最近几次会议的最大次数 |
BRIEFING_REGEN_INTERVAL | 5 | 定期简报再生之间的会议纪要 |
MCP客户端配置
Copilot命令行界面(GitHub Copilot)
添加到您的MCP设置中(例如。, ~/.config/github-copilot/mcp.json):
{
"servers": {
"memory": {
"url": "http://localhost:5123/mcp"
}
}
}克劳德桌面
添加 claude_desktop_config.json:
{
"mcpServers": {
"memory": {
"command": "python",
"args": ["path/to/server.py"]
}
}
}数据存储
所有数据都是本地的、基于文件的,忽略git:
lancedb_data/:矢量数据库(记忆+对话)knowledge_graph.db:SQLite知识图ingestion_state.db:对话观察者状态logs/:服务器和监视器日志
许可证
麻省理工学院
