← 返回目录
M

Memora

社区
为你的 AI 智能体提供持久的集体记忆
GitHub 源仓库 ↗
★ 719 Stars 分类 · 其他 非常热门
60FMRS · C

Memora 是一个社区维护(MIT 许可,非厂商官方)的 MCP 记忆层,把 AI 智能体的跨会话记忆做成可检索、可追溯、可视化的图谱数据。它的差异化在于 absorb 的 LLM 分类写入与取代血缘机制——更新不是覆盖而是新增版本并沿链检索——再加上 memory_digest 的主题聚合检索、结构化文档片段存储和内置图谱 UI。代价是配置面较大:嵌入与 LLM 是两个独立可拆分的供应商配置,存在部分拆分被拒绝、端点错误导致静默降级等陷阱;容器化部署还需常驻代理与 LaunchAgent。适合愿意自行配置密钥与端点、并对跨会话记忆有实际需求的团队;不适合追求零配置或需要官方支持的场景。

可靠性
12/20
安全与权限
11/20
维护活跃度
11/20
文档质量
14/20
安装易用性
12/20
查看 FMRS 评分方法 →

Memora 是一个面向 AI 智能体的 MCP 记忆层,提供结构化存储、语义检索、图谱关系以及可溯源的跨会话上下文。它使用 SQLite 作为本地存储,并可选同步到云端(S3、R2、Cloudflare D1)。核心能力包括:absorb(由 LLM 对写入事实分类为重复/更新/矛盾/相关/新增,跳过重复并建立关联)、supersession 血缘(更新以取代旧知识而非删除,检索默认沿链取当前版本)、memory_digest(topic) 主题摘要(聚合相关记忆、未完成的 TODO/Issue、关联边与来源 ID)、向量语义搜索(TF-IDF、sentence-transformers、OpenAI 三种后端)、LLM 去重、带类型的记忆链接、结构化文档片段存储、知识图谱可视化与内置实时图谱服务器、RAG 聊天面板、事件通知、统计与洞察、操作历史。一个进程可通过 MEMORA_DATABASES 注册表服务多个工作区,客户端用 /mcp/<name> 路径选择存储。

工具能力

memory_absorb
写入事实,由 LLM 分类为重复/更新/矛盾/相关/新增,跳过重复、建立关系并合并相关事实,支持 dry_run 预览
memory_digest
围绕某个主题汇总相关记忆、未完成的 TODO/Issue、关联边与来源 ID
memory_create
创建一条记忆(自动计算嵌入与交叉引用)
memory_update
更新一条记忆
memory_delete
删除一条记忆;删除文档片段需 force=True
memory_delete_batch
批量删除记忆
memory_get
按 ID 获取单条记忆
memory_list
列出记忆
memory_list_compact
以紧凑格式列出记忆
memory_semantic_search
向量语义搜索记忆
memory_hybrid_search
全文与向量的混合检索
memory_related
查找与某条记忆相关的记忆
memory_link
在两段记忆之间建立带类型的边(references、implements、supersedes、extends、contradicts、related_to)
memory_unlink
移除两段记忆之间的链接
memory_boost
提升某条记忆的重要性权重,影响排序
memory_clusters
检测相关记忆形成的簇
memory_stats
返回统计信息,含本会话实际绑定的 database 与 database_source
memory_tags
列出标签
memory_create_todo
创建带状态与优先级的 TODO
memory_create_issue
创建带严重程度与组件的 Issue
memory_create_section
创建章节占位节点(图谱中隐藏)
memory_store_document
将 Markdown 文档解析为带类型的片段树(claim、plan_item、reference、section_chunk、risk)并存储
memory_get_document
按 document_key 取回整篇文档或指定片段类型
memory_delete_document
删除文档及其全部片段
memory_find_duplicates
借助交叉引用与可选 LLM 分析查找潜在重复记忆
memory_merge
按 append、prepend 或 replace 策略合并重复记忆;拒绝合并文档片段
memory_detect_supersessions
检测记忆之间的取代关系
memory_rebuild_embeddings
在嵌入模型、端点、模型 ID 或向量维度变化后重建全部嵌入
memory_rebuild_crossrefs
重建交叉引用以更新知识图谱
memory_insights
输出活动摘要、开放条目与陈旧检测、合并建议,以及可选的 LLM 模式分析
memory_export_graph
将记忆导出为静态 HTML 图谱文件以供离线查看

安装接入

方式一(pip,本地 stdio):1) 执行 pip install memora-mcp(PyPI 包名为 memora-mcp,裸 memora 是无关项目);如需离线本地嵌入可执行 pip install "memora-mcp[local]"(约 2GB PyTorch)。2) 在项目根的 .mcp.json 中添加 "command": "memora-server",并按需设置 MEMORA_DB_PATH、MEMORA_ALLOW_ANY_TAG、MEMORA_GRAPH_PORT 等环境变量。3) 重启客户端。
方式二(容器,HTTP 服务):默认运行时为 Apple 的 container CLI,需 Apple 芯片且 macOS 26。依次执行 container system start;git clone 仓库并 cd 进入;cp instances/example.env instances/myinstance.env 并编辑 PORT 与后端(STORAGE_URI、VOLUME 或 MEMORA_DATABASES);创建凭证文件 ~/.config/memora/credentials.mcp.json(副本可通过 CRED_SOURCE 指定)并 chmod 600;复制 scripts/memora_proxy.py 到 ~/.local/libexec/memora/;然后执行 ./scripts/memora-instance.sh build myinstance、up myinstance、proxy myinstance,并运行其打印的 launchctl 命令。工作区 URL 为 http://127.0.0.1:<PORT>/mcp(非默认存储需追加 /<name>)。
Codex CLI 则写入 ~/.codex/config.toml 的 [mcp_servers.memora] 段,设置 command 与 env。

claude_desktop_config.json
{"mcpServers":{"memora":{"command":"memora-server","args":[],"env":{"MEMORA_DB_PATH":"~/.local/share/memora/memories.db","MEMORA_ALLOW_ANY_TAG":"1","MEMORA_GRAPH_PORT":"8765"}}}}

选型与风险

适合谁

  • 使用 Claude Code、Codex CLI 等 MCP 客户端并需要跨会话记忆的开发团队
  • 希望自托管 SQLite 或使用 Cloudflare D1/R2 做云同步的用户
  • 需要取代血缘(supersession lineage)与去重、而不只是追加文本的长期记忆场景
  • 愿意自行配置嵌入与 LLM 供应商(OpenAI、OpenRouter、Cloudflare Workers AI 等)的高级用户

不适合谁

  • 只想零配置开箱即用的用户——嵌入与 LLM 需要自行准备密钥与端点
  • 不需要持久记忆、单次问答即可完成任务的场景
  • 不愿承担运行容器或 LaunchAgent 代理这类常驻服务运维成本的环境
  • 期望官方厂商支持或 SLA 的用户——该项目由社区维护

所需权限

  • 本地文件读写:创建并读写 SQLite 数据库文件(默认 ~/.local/share/memora/memories.db)及缓存目录
  • 网络访问:调用配置的嵌入端点与 LLM 端点(OpenAI、OpenRouter、Cloudflare Workers AI 等)
  • 云存储凭证:使用 S3/R2 同步时需 AWS_PROFILE、AWS_ENDPOINT_URL 等凭证;使用 D1 时需 CLOUDFLARE_API_TOKEN
  • 本地端口监听:图谱服务器默认监听 127.0.0.1:8765;HTTP 传输默认 127.0.0.1:8000
  • 容器部署需运行 Apple container CLI,并通过 LaunchAgent 启动本地代理进程

风险与副作用

  • 嵌入端点配置错误时(例如把嵌入指向 OpenRouter),若未设置 MEMORA_EMBEDDING_STRICT=1,Memora 会静默退化为 TF-IDF 关键词匹配,向量质量下降而表面仍显示正常
  • MEMORA_DATABASES 中写错存储名不会报错:读取正常,但写入会落入另一个项目的存储,需用 memory_stats 核对 database 字段
  • 凭证以环境变量注入进程,配置文件若权限过宽可能被本机其他账户读取(文档建议 chmod 600)
  • 记忆内容会被发送到配置的嵌入与 LLM 服务商,涉及敏感数据时需自行评估
  • 容器运行时每次启动都会重新分配 IP,若不经代理直连会产生静默挂起
  • LLM 去重与 absorb 可能合并或取代记忆,虽然保留血缘,但错误判断仍会影响检索结果
  • 文档片段受完整性保护,但整篇文档删除会连带删除全部片段

常见排障

  1. 写入似乎成功但检索不到内容:先调用 memory_stats 确认本会话绑定的 database 是否为预期的工作区存储
  2. 语义搜索退化为关键词匹配:检查是否设置了 MEMORA_EMBEDDING_STRICT=1,并确认 MEMORA_EMBEDDING_BASE_URL 指向的端点确实提供嵌入接口
  3. 更换嵌入模型、端点或向量维度后检索异常:执行 memory_rebuild_embeddings,再执行 memory_rebuild_crossrefs 重建交叉引用
  4. 在 D1 上 absorb 超时:把 MEMORA_VECTOR_SCAN_PAGE_SIZE 调小(文档建议 D1 上用 100)
  5. 客户端启动后无响应:容器运行时 IP 会变动,需确认通过 scripts/memora_proxy.py 的稳定 127.0.0.1:<PORT> 连接
  6. 多存储进程中选择不到存储:/mcp/<name> 中的名称须为注册表条目;未知名称返回 404 unknown database
  7. 工具列表比预期少:检查 MEMORA_TOOL_PROFILE,full 暴露全部 43 个工具,leader 为 19 个,agent 为 12 个
  8. HTTP 部署健康检查:GET /health 为存活探针,GET /health/db 汇总各库状态,GET /health/db/{name} 为单库探针

使用场景

让多个智能体会话共享一份持久的项目记忆,避免重复交代上下文
用 memory_absorb 把智能体产出的事实沉淀为带血缘的图谱记忆
用 memory_digest(topic) 一次性取回某主题的相关记忆、未完成 TODO/Issue 与来源 ID
用语义搜索在大量历史记忆中检索相关结论
把研究报告、架构决策、复盘文档存为可逐条检索的片段树
在内置图谱 UI 中查看关系网络、时间线与操作历史
通过 RAG 聊天面板直接对记忆库提问并让模型创建/更新/删除记忆

支持客户端

Claude Code完整支持
Codex CLI完整支持
Neovim (Telescope)部分支持