关于 Local Memory
Local Memory 是供 Claude、Cursor 和 Codex 使用的本地持久记忆 MCP 服务,适合需要跨会话保留学习、决策和实体信息的用户。数据保存在单个 SQLite 文件中,并结合 BM25 与本地向量检索,无需云服务或 API 密钥。
主要功能
- 01SQLite 本地持久记忆
- 02BM25 与向量混合检索
- 03实体知识图谱与重复检测
- 04按时间查询及事实替代
- 05矛盾检测与记忆反思
适用场景
- 01在新对话中恢复之前的工作上下文
- 02跨语言搜索已保存的学习与事实
- 03追踪实体信息随时间的变化
MCP 相关
该项目通过 MCP 服务提供记忆记录、检索、实体观察和生命周期管理等工具。README 描述了 25 个工具,可供 Claude、Cursor、Codex 等 MCP 客户端连接。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @studiomeyer/local-memory-mcpMEMORY_DB_PATHCustom path for the SQLite database fileMEMORY_EMBED_DISABLEDDisable the local embedding pipeline (forces FTS5-only search). Useful in restricted networks where the model can't be downloaded.MEMORY_EMBED_MODELOverride the embedding model id (defaults to Xenova/multilingual-e5-small).MEMORY_EMBED_CACHE_DIROverride the Transformers.js cache directory (defaults to the OS data dir).本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
属于 StudioMeyer MCP Stack — 在马略卡岛打造 🌴 · 如果你在使用,请点个 ⭐
local-memory-mcp
为 Claude、Cursor 和 Codex 提供持久化本地记忆。25 个工具。混合检索(BM25 + 向量余弦相似度、RRF)。双时态 asOf 查询 + 事实取代。无需 LLM 的矛盾检测 + 反思。可移植的 JSON 导出/导入。多语言嵌入。无云端服务。无需 API 密钥。
关闭聊天后,你的 AI 助手就会忘记一切。这个工具可以解决这个问题。
学习心得、决策、人物、项目——都存储在你设备上的单个 SQLite 文件中,绝不会离开你的电脑。内置知识图谱、重复项检测、FTS5 关键词搜索,以及(v2 新增的)混合检索:通过 Reciprocal Rank Fusion 将 BM25 与设备本地的向量余弦相似度融合。嵌入模型支持多种语言(德语 / 英语 / 西班牙语 / 100 多种语言),并在本地运行——无需 API 密钥,无需云端服务。
📄 深入了解:WHITEPAPER.md — 架构、设计原则、本地优先契约,以及与其他记忆系统的坦诚比较。
与
danieleugenewilliams/local-memory-releases无关联 — 那是另一个名称相同的“Local Memory”项目。本软件包以@studiomeyer/local-memory-mcp名称发布——请始终使用带作用域的名称,以免混淆。
我们想说的话
过去两年里,我们一直在为自己打造工具和系统。这个代码仓库规模小、星标少,并不是因为它是新项目,而是因为我们刚刚决定分享已完成的成果。这不是一个刚起步的实验,而是一个漫长故事,最近才提交到代码仓库。
我们热爱创造和分享。不喜欢社交媒体手段、增长黑客,也不热衷追逐星标和关注者。所以这个代码仓库规模不大。代码是真实的,我们自己在用,也会认真回复问题。欢迎自行判断。
如果它对你有帮助,分享、测试和反馈都能帮到我们。如果你觉得它还有改进空间,提交问题会更有帮助。如果你用它构建了什么,欢迎告诉我们:[email protected]。这真的会让我们开心一整天。
来自马略卡岛帕尔马的一间小工作室。
快速开始
Claude Code
claude mcp add memory -- npx -y @studiomeyer/local-memory-mcp
Claude Desktop
安装 Node.js 22 后,将以下内容添加到 claude_desktop_config.json。这会使用已发布的 npm 软件包。
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@studiomeyer/local-memory-mcp"]
}
}
}
Cursor / VS Code
添加到 .cursor/mcp.json 或 .vscode/mcp.json:
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@studiomeyer/local-memory-mcp"]
}
}
}
Codex
# ~/.codex/config.toml
[mcp_servers.memory]
command = "npx"
args = ["-y", "@studiomeyer/local-memory-mcp"]
自动会话跟踪
你可以完全自动跟踪会话,无需再为此操心。
Claude Code(CLAUDE.md): 将以下行添加到项目的 CLAUDE.md 中:
Always call memory_session_start at the beginning of each conversation and memory_session_end when done.
Claude Code(Hook): 如需在系统范围内设置,请在 ~/.claude/settings.json 中添加 SessionStart hook:
{
"hooks": {
"SessionStart": [{
"hooks": [{
"type": "command",
"command": "echo '{\"hookSpecificOutput\":{\"hookEventName\":\"SessionStart\",\"additionalContext\":\"Call memory_session_start now.\"}}'",
"timeout": 5
}]
}]
}
}
这两种方式都会让 Claude 自动调用 memory_session_start。CLAUDE.md 方式更简单,Hook 方式则适用于所有项目。
功能说明
开始对话时,服务会加载你上次会话的上下文,让 AI 知道你一直在处理什么。
对话期间,AI 会通过 memory_learn 存储模式、见解和错误。它会通过 memory_entity_observe 记录有关人员、项目和工具的信息,随着时间推移构建知识图谱。每条存储的记录还会通过 multilingual-e5-small 模型转换为本地 384 维向量。
搜索时,统一的 memory_search 会执行混合检索:将采用 BM25 排序的 FTS5 与向量余弦相似度通过倒数排名融合(RRF,k=60)结合起来。这能弥合词汇差异(“send”可以找到“publish”),支持 DE / EN / ES / 100 多种语言,并能在查询与存储内容没有任何完全匹配的词元时找到相关内容。如果你的设备无法加载向量扩展,搜索会透明地退回仅使用 FTS5,不会造成故障,只是失去语义检索能力。
重复项拦截机制仍会防止重复存储相同信息。
混合搜索(v2.0.0+)
memory_search({ query: "...", mode: "hybrid" }) // default
memory_search({ query: "...", mode: "fts" }) // keyword only
memory_search({ query: "...", mode: "vector" }) // cosine only
架构
search_fts(FTS5,BM25)— 关键词召回,即 v1 路径。embeddings(sqlite-vecvec0虚拟表,float[384])— 向量召回。- 当
mode: "hybrid"时,倒数排名融合(k=60)会合并两者的结果。 - 嵌入向量由 Transformers.js 调用
Xenova/multilingual-e5-small(Apache-2.0)生成,采用 q8 量化(缓存约 30 MB)。模型在首次嵌入时按需加载,完全由 CPU 运行。 - 插入时自动生成嵌入向量,适用于学习记录、决策和实体观察。实体本身不会生成嵌入向量,其附属观察记录承载语义信息。
多语言。 默认模型使用 100 多种语言训练,在 DE/EN/ES 检索方面表现出色。存储的数据可以混合使用多种语言——即使查询使用一种语言,余弦相似度检索部分仍能找到另一种语言中的相关结果。
环境变量覆盖
MEMORY_EMBED_DISABLED=1— 强制仅使用 FTS5(例如,在隔离网络或企业代理网络中)。MEMORY_EMBED_MODEL=...— 替换为其他 Transformers.js 特征提取模型。MEMORY_EMBED_CACHE_DIR=...— 覆盖 Transformers.js 缓存位置。MEMORY_EMBED_DTYPE=fp32|fp16|q8|q4— 模型量化方式(默认值为q8)。
生命周期与反思(v2.1.0+)
v2.1 弥合了“存储事实”与“随时间管理记忆”之间的差距。架构从 v1 起就包含 archived、lifecycle_state、valid_from 和 valid_to,但没有工具能访问这些字段。现在有四个工具可以做到。
双时态 asOf —“日期 X 时我知道什么?”
memory_entity_open({ id: "...", asOf: "2026-04-15" })
返回实体,以及有效期包含 2026-04-15 的观察记录集合。筛选条件为 valid_from <= asOf AND (valid_to IS NULL OR valid_to > asOf)。接受 SQLite 的 datetime() 可识别的任何格式:ISO 8601(2026-04-15T00:00:00Z)、SQLite 风格(2026-04-15 00:00:00)或仅日期(2026-04-15)。不提供 asOf 时,会返回旧版实时视图(每条 valid_to IS NULL 的观察记录)。
设计选择——仅有效时间,不是完整双时态。 SQL:2011、XTDB、Datomic 提供双轴双时态(有效时间 × 事务时间)。我们仅采用有效时间;事务时间被动地记录在 created_at 中,但无法作为独立轴进行查询。对于本地 AI 记忆产品,问题是“AI 在日期 Y 对 X 知道什么”——这属于有效时间。完整双时态适用于受监管的审计跟踪(保险、银行);如果你需要这类功能,请使用 XTDB。
规模说明。 asOf 谓词会对 valid_from 使用 SQLite 的 datetime(),以确保比较不受格式影响,因此查询规划器无法直接使用该列上的索引。对于每个实体少于 1000 条观察记录的语料库(常见情况),扫描耗时不到 1 毫秒。如果某个实体有 10k+ 条观察记录,请添加表达式索引——CREATE INDEX idx_obs_valid_from_dt ON entity_observations(datetime(valid_from))——即可让谓词重新支持索引查找。
矛盾扫描器——无需 LLM
memory_contradictions({ minCosine: 0.75, minConfidenceDrift: 0.2 })
memory_contradictions({ entityId: "...", limit: 20 })
找出语义上非常接近(余弦相似度高于 minCosine)但在以下任一方面存在分歧的观察记录对:
- 否定标记 XOR——一方肯定,另一方否定(正则表达式涵盖 EN / DE / ES / Catalan)。
- 置信度偏差——表述相同的主张,但
confidence值相差很大。
特意不使用 LLM——无需 API 密钥的承诺仍然有效。此启发式方法较为保守;由 AI 客户端进行判断。纯重复项(没有否定,也没有置信度偏差)不会被标记。余弦计算通过 vec_distance_cosine 在 SQL 中执行,因此必须加载扩展;如果某个平台无法加载扩展,该工具会返回 VECTOR_DISABLED 并给出清晰说明,而不会静默降级。
校准。 默认值 minCosine = 0.75 参考了 2026 年检索器调优文献(Arguana 上的 SparseCL;Milvus 阈值调优指南),这些资料指出低于 0.7 时误报会急剧增加。偏重召回率时可调低至 0.6,偏重精确率时可调高至 0.85。否定正则表达式涵盖 EN / DE / ES / Catalan / Portuguese / Italian / French——即 multilingual-e5-small 表现最强的七种语言。
Supersede——使过时事实失效(v2.2)
memory_observation_supersede({ observationId: "..." })
memory_observation_supersede({ observationId: "...", supersededById: "..." })
扫描器找出过时事实;memory_observation_supersede 则对其采取操作。它会设置较旧观察记录的 valid_to(墓碑标记),使该事实不再出现在实时 memory_search 和 memory_entity_open 结果中——但该行仍保留在数据库中,因此 asOf 查询仍会将其作为截止时间之前有效的信念返回。这是 Zep 的事实替代模式:使其失效,而不是删除。传入 supersededById 时,截止时间会设为较新事实的 valid_from(旧事实直到新事实被记录时才失效);传入 validTo 可指定明确的时间点;两者都不传时则使用当前时间。同一实体检查和禁止替代自身的检查可确保操作合理,第二次调用具有幂等性(already_superseded)。
归档 + 更新 — 学习内容的生命周期
memory_learn_archive({ learningId: "...", reason: "wrong" })
memory_learn_update({ learningId: "...", content: "…", confidence: 0.9 })
archive 是软删除:记录会保留在 learnings 中(其中 archived = 1,并设置 archived_at 和 lifecycle_state = 'archived' | 'archived:<reason>'),嵌入向量也会保留在 vec0 中(因此仍可解析 asOf 风格的交叉引用),但 recall / search / 重复项检查都会将其过滤掉。此操作具有幂等性。
update 会编辑一条未归档的学习记录。如果 content 发生变化,则会按照 F4 原子模式重新生成嵌入(在事务外计算,在一个同步的 db.transaction() 中写入)。如果嵌入写入失败或 vec 已禁用,就会清除现已过时的旧嵌入,避免余弦搜索返回不再对应当前文本的向量。此操作会增加 usage_count 并设置 last_used,因此编辑也算一次使用。
权衡 — 没有审计记录。 update 会覆盖之前的内容,旧文本不会保存在任何地方。这样可以保持架构简洁;未来的版本可能会为需要按时间点恢复的用户添加 memory_learn_history,以及不可变的 learnings_history 表。如果现在需要审计记录,可以对旧学习内容调用 memory_learn_archive(reason: "wrong"),再通过 memory_learn 将新内容作为一条新记录保存——旧文本会保留在已归档记录中。
反思 — 当前最重要的内容
memory_reflect({ lookbackDays: 7, staleThresholdDays: 30 })
对近期记忆流进行汇总——Stanford Generative Agents 的反思步骤,但不使用大模型。返回结构化负载以及一份 Markdown 摘要,内容包括:
- 使用最多的学习内容 — 回溯时间范围内按
usage_count排名靠前的 N 项。 - 过时的学习内容 — 创建时间早于
staleThresholdDays天且从未被回忆的内容。可考虑归档。 - 热门实体 — 回溯时间范围内按新增观察次数排名靠前的 N 个实体。
- 未解决的决策 — 早于回溯时间范围且
verified = 0的决策。可考虑跟进。
Markdown 供大模型在会话开始时阅读;结构化字段则供下游自动化使用(Claude Code Hook、n8n 工作流),以便在无需重新解析的情况下做出响应。传入 project 可将范围限定为一个项目。
通过钩子实现休眠时间。 Letta / Zep / Mem0 会在后台“休眠时间”循环中运行反思。由于我们是无状态的 stdio 守护进程,因此按需运行;但只需配置 Claude Code SessionStart 或 SessionEnd 钩子(或 n8n cron、crontab 条目)来调用 memory_reflect,即可免费获得休眠时间语义。摘要会与 memory_session_start 快照同时进入大模型的上下文。无需新增基础设施。
工具(25)
会话
memory_session_start -- 在每次对话中首先调用此工具。加载最近 3 个会话的上下文(摘要、近期学习内容),帮助 AI 了解你正在处理的事项。可选的 project 参数用于按项目限定会话范围。
memory_session_end -- 在对话结束时调用以保存摘要。传入描述已完成事项的 summary 字符串。下一个会话会自动加载此摘要。不带参数时,它会关闭当前会话。
学习记录
memory_learn -- 核心工具。按类别和内容存储一条知识。类别包括:pattern(反复取得成功的做法)、mistake(出错之处)、insight(战略性认识)、research(外部知识)、architecture、infrastructure、tool、workflow、performance、security。重复项检查机制会检查是否已存储完全相同的内容。如果是,则会增加使用计数,而不是创建重复项。若要扩展现有条目而非添加新条目,请使用 memory_learn_update 并提供其 id。可选参数:tags、confidence(0-1)、project、memoryType(episodic 或 semantic;若省略则自动分类)。
memory_recall -- 仅针对学习记录的快速搜索。传入 query 字符串可进行关键词搜索;省略该参数则返回最新的学习记录。适用于“我关于 X 学到了什么”这类问题。使用 limit 控制返回结果数量(默认值为 10)。
memory_search -- 跨所有内容的统一搜索:学习记录、决策、实体和观察结果。使用 FTS5 和 bm25 排名。多词查询会匹配其中任意词语,并按相关性排序。使用 types 数组进行筛选(例如,["learning", "decision"])。这是覆盖范围最广的搜索工具。
memory_learn_archive (v2.1+) -- 软删除一条学习记录。该行仍保留在数据库中(因此引用它的 asOf 查询仍可正常解析),但不会再出现在回忆或搜索结果中。可选参数 reason 会以 archived:<reason> 的形式存储在 lifecycle_state 中。此操作幂等——调用两次会返回 already_archived。
memory_learn_update (v2.1+) -- 编辑一条未归档的学习记录(content / confidence / tags)。至少需要提供一个字段。会增加 usage_count 并更新 last_used,因此编辑也算作一次使用。content 发生变化时,会以原子方式重新生成嵌入(F4 模式:在事务外计算,在单个同步 db.transaction() 内写入)。拒绝编辑已归档的学习记录,并返回 code: 'ARCHIVED'。
memory_learn_bulk (v2.2+) -- 在一次原子调用中批量插入最多 500 条学习记录。每个条目接受与 memory_learn 相同的字段。仅检查内容完全重复的项(不进行模糊合并),因此结果确定为插入或跳过;批次内内容重复的条目会合并到首次出现的条目。仅对新内容生成嵌入,并通过一次批量模型前向计算完成。适用于还原备份、为全新数据库填充数据,或从其他系统迁移。
**何时使用回忆还是搜索:**若要查找特定的学习记录,请使用 recall。若要跨所有类型查找内容,包括实体和决策,请使用 search。
决策
memory_decide -- 记录一项包含结构化上下文的决策。参数:title(决定的事项)、decision(作出的选择)、reasoning(原因)、alternatives(考虑过的其他方案)。可选参数:confidence、project、tags。这适用于在几个月后回顾过往决策并了解当时为何作出某项选择。
知识图谱
memory_entity_observe -- 记录有关某个人、项目、公司、工具或任何其他实体的事实。如果实体尚不存在,系统会自动创建。参数:entityName、entityType(person、project、company、tool、concept 等)、content(事实)。观察记录具有双时态特性,这意味着它们可以随时间被取代,同时保留历史记录。
memory_entity_search -- 对实体名称及其观察记录进行模糊搜索。即使搜索“claude ai”,也能找到“Claude”。可选的 entityType 筛选器可缩小结果范围。
memory_entity_open -- 加载完整的实体视图:实体本身、所有当前观察记录,以及与其他实体的所有关系。按 name 或 id 搜索。v2.1:可选的 asOf 参数,用于查看双时态的历史时间点视图——“在日期 X,我对这个实体了解什么?”
memory_entity_relate -- 在两个实体之间创建有类型、带方向的边。参数:fromEntityId、toEntityId、relationType(例如“works_at”、“uses”、“created”、“depends_on”)。可选的 weight(0-1)。构建事物之间关联关系的图谱。
memory_contradictions (v2.1+) -- 无需 LLM 的扫描器,用于找出余弦相似度较高,但在否定标记或置信度上存在分歧的观察记录对。由 AI 客户端(Claude / Cursor)判断候选项。可选范围:entityId 或 entityName + entityType。可调参数:minCosine(默认值 0.75)、minConfidenceDrift(默认值 0.2)、limit(默认值 20)。需要 sqlite-vec——如果未加载,则返回 VECTOR_DISABLED。
memory_observation_supersede (v2.2+) -- memory_contradictions 的执行工具:通过设置 valid_to(墓碑标记)使过时的观察记录失效。该行仍保留在 DB 中,因此 asOf 查询仍会显示它,但它不会出现在实时的 memory_search 和 memory_entity_open 结果中。传入 supersededById,将截止时间设为较新事实的 valid_from(Zep 事实取代);传入 validTo 可指定明确的时间点;两者都不传则使用 now()。提供同一实体和自我取代防护;支持幂等操作。
推荐的实体类型: person、project、company、tool、concept、service、team。请根据你的领域选择合适的类型。
反思
memory_reflect (v2.1+) -- 对近期记忆流进行聚合处理。返回结构化数据和 Markdown 摘要,涵盖:最常用的学习内容(回溯时间范围内按 usage_count 排序的前 N 项)、过时的学习内容(创建时间早于 staleThresholdDays 天且从未被回忆)、活跃实体(回溯时间范围内新增观察记录最多的前 N 个实体)、未决决策(verified = 0 且早于回溯范围)。无需 LLM——这是 Stanford Generative Agents 的反思步骤,但不调用 API。默认值:lookbackDays: 7、staleThresholdDays: 30、limit: 5。可选的 project 筛选器。
memory_insights -- 概览统计:记忆涵盖的天数、会话总数、学习内容、决策和实体的数量。按类别和实体类型细分。适用于“Claude 对我了解多少”这类场景。可选的 project 筛选器。
memory_profile -- 在本地存储个人信息。使用 set 存储字段(姓名、角色、偏好、语言、时区),使用 get 检索这些字段。你的 AI 可以在会话开始时读取这些信息,以个性化其行为。
memory_guide -- 内置帮助。主题包括:quickstart(如何开始)、session(会话工作流)、search(搜索原理)、entities(知识图谱说明)、learn(学习类别)、privacy(数据存储位置及收集内容)。
可移植性 (v2.2+)
memory_export -- 导出全部记忆——包括经验、决策、实体、观察、关系、会话、个人资料和目标——并封装为带版本号的 camelCase JSON 对象(format: "studiomeyer-memory-export"、version: 1)。不会导出嵌入向量;导入时会重新生成,因此文件体积小,且与模型无关。标志:includeSessions(默认值为 true)、includeArchived(默认值为 true)。数据由你掌控——它本来就存储在一个 SQLite 文件中,现在也可以作为可移植文档使用。
memory_import -- 导入 memory_export 封装对象({ data: <envelope> })。纯增量且具幂等性:每次写入都会基于源 ID 执行 INSERT OR IGNORE,因此重复导入同一文件不会产生任何变化,也绝不会覆盖现有行。按外键安全顺序导入,并跳过悬空引用(会计数跳过项,绝不会抛出异常)。导入过程中会重新生成嵌入向量。设计上没有 replace 模式——要清空本地存储,请删除 memory.sqlite。同一封装对象也可导入托管版 StudioMeyer Memory,因此,当你不再满足于单台设备时,可以通过它迁移。
提示
- 从会话和经验开始。 只要在开始时调用
memory_session_start,并在遇到重要事项时调用memory_learn,就已经能发挥 80% 的价值。 - 用实体记录人物和项目。 当你反复提到同事、客户或项目时,就创建一个实体。随着时间推移,你会构建出 AI 可以遍历的知识图谱。
- 决策的价值常被低估。 三个月后,你不会记得当初为什么为那个项目选择 Postgres 而不是 SQLite。
memory_decide可以记录决策依据。 - 让 AI 来驱动。 工具可用后,AI 会自然而然地开始使用它们。你无需手动调用工具。说“记住这个”,它就会调用
memory_learn。说“你知道 Sarah 的哪些事”,它就会调用memory_entity_search。 - 备份 SQLite 文件。 数据都在一个文件中。将它复制到 U 盘、Dropbox 或其他位置即可。你也可以用任意 SQLite 浏览器打开它,查看 AI 学到了什么。
功能
- 知识图谱——不只是扁平文本,还包括实体、双时态观察和类型化关系。
- 重复项防护——通过 FTS5 相似度检查,避免重复存储相同内容。重复时改为增加使用计数。
- 会话上下文——启动时自动加载最近 3 个会话。AI 可以从上次中断处继续。
- 决策跟踪——记录决策及其依据和备选方案。在记忆服务中独具特色。
- 全文搜索——使用 FTS5 和 bm25 排序,对经验、决策、实体和观察进行搜索。
- 单个 SQLite 文件——一个文件,便于移植、备份和删除。使用 WAL 模式支持并发访问。
- 零配置——运行
npx即可。无需 Docker、Postgres、Redis 或 API 密钥。
数据存储位置
所有数据都在一个 SQLite 文件中。备份、迁移或删除它——数据由你掌控。
| 操作系统 | 路径 |
|---|---|
| macOS | ~/Library/Application Support/local-memory-mcp/memory.sqlite |
| Linux | ~/.local/share/local-memory-mcp/memory.sqlite |
| Windows | %APPDATA%\local-memory-mcp\memory.sqlite |
覆盖路径:MEMORY_DB_PATH=/your/preferred/path.sqlite
隐私
- 你的数据绝不会离开你的设备
- 无遥测、无回传、无分析
- 无需账号,也不需要 API 密钥
- 开源——每一行代码都可以查看
对比
| 功能 | local-memory-mcp | Penfield | Official MCP Memory | MemPalace | Mem0 | Zep | Letta | AutoMem |
|---|---|---|---|---|---|---|---|---|
| 本地优先 | 是 | 是 | 是 | 是 | 否(云端) | 否(云端) | 部分支持 | 是 |
| 混合检索(BM25 + 向量) | 是(RRF) | 是 | 否 | 否(仅向量) | 仅向量 | 仅向量 | 向量 + 图 | 向量 + 图 |
| 多语言嵌入 | 是(e5-small,DE/EN/ES + 另外 100 种) | 未知 | 否 | 未知 | 偏重英语 | 偏重英语 | 混合 | 混合 |
| 知识图谱 | 是(实体 + 关系) | 是 | 是(三元组) | 否 | 付费套餐 | 是 | 是 | 是(FalkorDB) |
| 双时态事实 | 是(架构) | 未知 | 否 | 否 | 是 | 是 | 部分支持 | 未知 |
| 重复项防护 | 是(FTS5 + 相似度) | 否 | 否 | 否 | 未知 | 未知 | 未知 | 未知 |
| 决策跟踪 | 是(独有) | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
| 会话上下文 | 是(自动加载) | 是 | 否 | 否 | 否 | 否 | 是 | 是 |
| 工具数 | 25 | 17 | 5 | 29 | API | API | API | API |
| 双时态 asOf | 是(v2.1) | 未知 | 否 | 否 | 是 | 是 | 部分支持 | 未知 |
| 矛盾扫描器 | 是(v2.1,无需 LLM) | 否 | 否 | 否 | LLM 驱动 | LLM 驱动 | 否 | 否 |
| 事实取代 | 是(v2.2,保留 asOf) | 否 | 否 | 否 | LLM 驱动 | 是 | 部分支持 | 未知 |
| 反思 / 整合 | 是(v2.1,无需 LLM) | 否 | 否 | 否 | LLM 驱动 | 是(休眠时) | 是(休眠时) | 否 |
| 可移植导出 / 导入 | 是(v2.2,JSON 信封) | 未知 | 否 | 否 | API | API | .af 文件 | 未知 |
| 语言 | TypeScript | TypeScript | TypeScript | Python | Python | Python | Python | Python |
| 存储 | SQLite + sqlite-vec | SQLite | JSON 文件 | ChromaDB | 云端 | 云端 | 多种 | FalkorDB + Qdrant |
| 是否需要 API 密钥 | 否 | 否 | 否 | 否 | 是(云端) | 是(云端) | 可选 | 可选 |
| 安装 | npx 或 .mcpb | npx | npx | pip + venv | 注册账号 | 注册账号 | pip / Docker | pip / Docker |
| 多平台安装包 | 是(4 种操作系统) | 否 | 否 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
| 价格 | 永久免费 | 免费 | 免费 | 免费 | $0-249/月 | $0-499/月 | 免费 | 免费 |
我们的突出优势: 唯一一款本地、采用 MIT 许可、无需 API 密钥的记忆 MCP,提供混合检索(BM25 + 通过 RRF 实现的向量余弦相似度)、多语言嵌入,以及适用于所有桌面操作系统的一键安装程序。决策跟踪功能仍是我们的独有优势。
local-memory-mcp 与 StudioMeyer Memory 的对比
两个产品,同一个团队,适用于不同场景:
| local-memory-mcp(本仓库) | StudioMeyer Memory(托管版) | |
|---|---|---|
| 部署位置 | 你的设备(SQLite + sqlite-vec) | 云端(我们自有的 Postgres,位于德国 Hetzner,欧盟) |
| 工具数 | 25 | 56 |
| 搜索 | FTS5 + sqlite-vec 混合检索(RRF) | FTS5 + pgvector + 交叉编码器重排序 |
| 嵌入 | 本地(multilingual-e5-small,384 维) | 云端(多种模型,含重排序) |
| 多设备 | 否 | 是 |
| 多 Agent | 否 | 是 |
| 价格 | 永久免费 | 免费套餐 / EUR 9 Pro / EUR 19 Team |
| 安装 | npx 或 .mcpb(Linux / macOS / Windows) | memory.studiomeyer.io |
| 仓库 | local-memory-mcp | studiomeyer-memory(文档) |
从本地版开始。当你需要团队协作、多设备同步或交叉编码器重排序时,再升级即可——memory_export 会生成一个可直接导入托管版的信封,让你完整迁移所有记忆。
StudioMeyer 的其他产品
| 服务 | 功能 | 链接 |
|---|---|---|
| StudioMeyer Memory | 托管式 AI 记忆,提供 56 个工具、语义搜索和多 Agent 支持 | memory.studiomeyer.io |
| StudioMeyer CRM | AI 原生 CRM——提供 33 个工具、销售管道、潜在客户和营收管理 | crm.studiomeyer.io |
| StudioMeyer GEO | AI 可见度监控——支持 23 个工具和 8 个大模型平台 | geo.studiomeyer.io |
| MCP Crew | 面向 Claude 的 Agent 角色——提供 10 个工具、8 种角色和 3 个工作流 | crew.studiomeyer.io |
安全
请参阅 SECURITY.md,了解威胁模型、报告流程,以及关于已知 SAST 扫描器误报的说明。特别注意:src/db/client.ts 中的 db.exec(schema) 是 better-sqlite3 的 SQL 字符串执行器,而不是 child_process.exec——一些基于模式的扫描器在不解析导入的情况下会将其标记出来。代码库中不包含任何 Shell 执行代码(可通过 grep -rn child_process src/ 验证)。
贡献
欢迎提交问题和 PR。请参阅 CONTRIBUTING.md。
关于 StudioMeyer
StudioMeyer 是一家位于马略卡岛帕尔马的 AI 与设计工作室,服务全球客户。我们为中小型企业打造定制网站和 AI 基础设施。生产技术栈基于 Claude Agent SDK、MCP 和 n8n,并使用 Sentry、Langfuse 和 LangGraph 实现可观测性,同时配备内部防护层。
许可证
由 StudioMeyer 打造——来自马略卡岛的 AI 优先型 Web 工作室。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。