mcpField
L
Local Memory

Local Memory

本地服务
matthiasmeyer.tech记忆与知识151 周前更新

关于 Local Memory

Local Memory 是供 Claude、Cursor 和 Codex 使用的本地持久记忆 MCP 服务,适合需要跨会话保留学习、决策和实体信息的用户。数据保存在单个 SQLite 文件中,并结合 BM25 与本地向量检索,无需云服务或 API 密钥。

主要功能

  1. 01SQLite 本地持久记忆
  2. 02BM25 与向量混合检索
  3. 03实体知识图谱与重复检测
  4. 04按时间查询及事实替代
  5. 05矛盾检测与记忆反思

适用场景

  1. 01在新对话中恢复之前的工作上下文
  2. 02跨语言搜索已保存的学习与事实
  3. 03追踪实体信息随时间的变化

MCP 相关

该项目通过 MCP 服务提供记忆记录、检索、实体观察和生命周期管理等工具。README 描述了 25 个工具,可供 Claude、Cursor、Codex 等 MCP 客户端连接。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"studiomeyer-io-local-memory": {
"command": "npx",
"args": [
"-y",
"@studiomeyer/local-memory-mcp"
],
"env": {
"MEMORY_DB_PATH": "<MEMORY_DB_PATH>",
"MEMORY_EMBED_DISABLED": "<MEMORY_EMBED_DISABLED>",
"MEMORY_EMBED_MODEL": "<MEMORY_EMBED_MODEL>",
"MEMORY_EMBED_CACHE_DIR": "<MEMORY_EMBED_CACHE_DIR>"
}
}
}
}
启动命令npx -y @studiomeyer/local-memory-mcp
需要配置的环境变量
MEMORY_DB_PATHCustom path for the SQLite database file
MEMORY_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@studiomeyer/local-memory-mcp2.4.3

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

属于 StudioMeyer MCP Stack — 在马略卡岛打造 🌴 · 如果你在使用,请点个 ⭐

local-memory-mcp

npm version npm downloads License Last commit GitHub stars 为 Claude、Cursor 和 Codex 提供持久化本地记忆。25 个工具。混合检索(BM25 + 向量余弦相似度、RRF)。双时态 asOf 查询 + 事实取代。无需 LLM 的矛盾检测 + 反思。可移植的 JSON 导出/导入。多语言嵌入。无云端服务。无需 API 密钥。

MIT License npm TypeScript

关闭聊天后,你的 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-vec vec0 虚拟表,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-mcpPenfieldOfficial MCP MemoryMemPalaceMem0ZepLettaAutoMem
本地优先是是是是否(云端)否(云端)部分支持是
混合检索(BM25 + 向量)是(RRF)是否否(仅向量)仅向量仅向量向量 + 图向量 + 图
多语言嵌入是(e5-small,DE/EN/ES + 另外 100 种)未知否未知偏重英语偏重英语混合混合
知识图谱是(实体 + 关系)是是(三元组)否付费套餐是是是(FalkorDB)
双时态事实是(架构)未知否否是是部分支持未知
重复项防护是(FTS5 + 相似度)否否否未知未知未知未知
决策跟踪是(独有)否否否否否否否
会话上下文是(自动加载)是否否否否是是
工具数2517529APIAPIAPIAPI
双时态 asOf是(v2.1)未知否否是是部分支持未知
矛盾扫描器是(v2.1,无需 LLM)否否否LLM 驱动LLM 驱动否否
事实取代是(v2.2,保留 asOf)否否否LLM 驱动是部分支持未知
反思 / 整合是(v2.1,无需 LLM)否否否LLM 驱动是(休眠时)是(休眠时)否
可移植导出 / 导入是(v2.2,JSON 信封)未知否否APIAPI.af 文件未知
语言TypeScriptTypeScriptTypeScriptPythonPythonPythonPythonPython
存储SQLite + sqlite-vecSQLiteJSON 文件ChromaDB云端云端多种FalkorDB + Qdrant
是否需要 API 密钥否否否否是(云端)是(云端)可选可选
安装npx 或 .mcpbnpxnpxpip + venv注册账号注册账号pip / Dockerpip / 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,欧盟)
工具数2556
搜索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-mcpstudiomeyer-memory(文档)

从本地版开始。当你需要团队协作、多设备同步或交叉编码器重排序时,再升级即可——memory_export 会生成一个可直接导入托管版的信封,让你完整迁移所有记忆。

StudioMeyer 的其他产品

服务功能链接
StudioMeyer Memory托管式 AI 记忆,提供 56 个工具、语义搜索和多 Agent 支持memory.studiomeyer.io
StudioMeyer CRMAI 原生 CRM——提供 33 个工具、销售管道、潜在客户和营收管理crm.studiomeyer.io
StudioMeyer GEOAI 可见度监控——支持 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 实现可观测性,同时配备内部防护层。

许可证

MIT


由 StudioMeyer 打造——来自马略卡岛的 AI 优先型 Web 工作室。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。