mcpField
M
mismem

mismem

本地服务
github.com/lucasmella-stack记忆与知识3今天更新

关于 mismem

misMEM 是基于 SQLite 的持久化记忆 MCP 服务,让多个 LLM 客户端共享 episodes、memories 和 traits。它结合全文与可选语义搜索,并通过整合和显著性强化机制管理记忆生命周期。

主要功能

  1. 01分层保存 episodes、memories 和 traits
  2. 02通过 FTS5 与可选语义搜索回忆
  3. 03整合事件并结晶稳定特征
  4. 04按使用情况强化记忆显著性
  5. 05提供 Engram 兼容层及客户端钩子

适用场景

  1. 01让多个 MCP 客户端共享跨会话记忆
  2. 02从对话记录提炼可复用记忆
  3. 03按需检索并强化实际使用的内容

MCP 相关

misMEM 通过 MCP 服务提供记忆捕获、检索、强化、整合、结晶和遗忘工具,也包含 Engram 兼容层。它支持本地 stdio 服务及远程 Streamable HTTP 服务。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"lucasmella-stack-mismem": {
"command": "npx",
"args": [
"-y",
"@lucasmella/mismem"
],
"env": {
"MISMEM_DB": "<MISMEM_DB>"
}
}
}
}
启动命令npx -y @lucasmella/mismem
需要配置的环境变量
MISMEM_DBAbsolute path to the SQLite database (default: ~/.mismem/mem.db)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@lucasmella/mismem0.2.0

工具

还没有获取到工具列表

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

详细介绍

misMEM

面向 LLM 的协作式持久记忆。一个共享空间(~/.mismem/mem.db),多个实例(Copilot、Claude Code、Claude Desktop、自定义 Agent)通过同一 MCP 协议交互。

协作让信息得以持久保存。

为什么要做 misMEM

每个 LLM 实例诞生时都没有记忆。每个客户端(Copilot、Claude Desktop、Claude Code、ChatGPT)都把自己的内容保存在互不兼容的信息孤岛中。用户不得不重复提供上下文。会话之间的连续性就此中断。

misMEM 通过一个简单的方式解决这个问题:一个 SQLite 数据库 + 一个包含 5 个调用的 MCP 协议,任何支持 MCP 的客户端都能访问。

架构:3 层,如同生物记忆

episodes  (verbatim; se borran con `forget` una vez consolidados)
    ↓  consolidación (manual o LLM nocturno)
memories  (gist + details, salience con decay + refuerzo Hebbiano)
    ↓  crystallize
traits    (patrones cristalizados — identidad, leyes, decisiones firmes)

信息的损失是有意且不对称的,如同人类记忆:原始内容逐渐消散,提炼出的内容得以保留,结晶后的内容则长存。

每一层存储的内容
层代表内容生命周期用途
episodes发生过的事情:带时间戳的原始文本整合后会逐渐消散证据和即时上下文
memories从多个 episode 中总结出的经验如果不使用,其 salience 会降低;被回忆时则会升高操作性知识和语义搜索
traits稳定的模式、偏好或决策除非明确删除,否则永久保留身份和最高优先级规则

例如:“今天 PostgreSQL 的表现更好”是一条 episode;“在这个项目中 PostgreSQL 更合适”是一条 memory;“我们优先选择并发处理稳健的解决方案”则可以结晶为一条 trait。

六种操作,一个共享空间

调用功能
capture在层级 scope(项目/日记、vscode/transcripts 等)中记录一条 episode
recall使用 FTS5 + 语义搜索;除非设置 reinforce: false 或 MISMEM_REINFORCE_ON_RECALL=off,否则会强化返回的内容
reinforce标记回答实际使用过的记忆,而不是仅仅出现过的记忆
consolidate将相关 episodes 提炼为一条 memory
crystallize以证据为依据,固定一条 trait/原则(身份、坚定决策)
forget释放不再查询的内容

此外,engram-compat 层(mem_save、mem_search、mem_context、mem_session_* 等)可兼容使用 Engram 协议的客户端。

快速开始

Linux:一个脚本完成所有配置
git clone https://github.com/lucasmella-stack/misMEM.git && bash misMEM/scripts/install.sh

从克隆的仓库安装 misMEM(--from-npm 使用已发布的软件包,版本可能落后),询问记忆的保存位置和整合时使用的提供商(DeepSeek、OpenRouter、OpenAI、兼容服务器或不使用),将密钥以 600 权限保存在 ~/.config/mismem/env,并配置检测到的客户端:Claude Code(MCP 和注入、强化钩子)、opencode、Claude Desktop、VS Code 和 Cursor。如果检测到 Ollama,还会提供 embeddings 模型选项;如果需要,也可以将夜间整合设为 systemd timer。客户端会调用 ~/.local/bin/mismem-run,因此任何密钥都不会留在客户端配置中。重新运行会更新配置,不会重复添加,也不会覆盖手动编写的 misMEM 配置。使用 --help 可查看无需交互的模式。

手动配置,适用于任何系统

最快的方式——无需克隆任何内容,通过 npm 安装。在客户端的 mcp.json 中(VS Code / Claude Code / Claude Desktop):

{
  "mcpServers": {
    "mismem": {
      "command": "npx",
      "args": ["-y", "@lucasmella/mismem"]
    }
  }
}

数据库会在首次使用时自动创建(默认位置:~/.mismem/mem.db,可通过 MISMEM_DB 配置)。因此,即使没有其他配置,你的记忆也只保存在本地磁盘,不会离开你的机器;只有两个可选功能会向外发送文本,详见隐私。

远程实例(多客户端)

要从多台机器访问同一份记忆,请使用官方 Docker 镜像:

docker run -d --name mismem-brain \
  -e MISMEM_AUTH_USER=brain -e MISMEM_AUTH_PASS=<pass> \
  -v mismem-data:/data -p 3200:3200 \
  ghcr.io/lucasmella-stack/mismem-brain:latest

完整的 Traefik + TLS 指南见 DEPLOY.md。

从代码运行
git clone https://github.com/lucasmella-stack/misMEM.git
cd misMEM/engine
pnpm install
pnpm test        # todo verde antes de usar
pnpm build       # tsc → dist/

并在 mcp.json 中添加:"command": "node", "args": ["<ruta-al-repo>/misMEM/engine/dist/server.js"]。

组件

  • engine/src/server.ts — MCP stdio 服务(本地使用)。
  • engine/src/server-http.ts — 用于远程部署的 Streamable HTTP(可选 BasicAuth、/healthz)。参见 DEPLOY.md。
  • engine/src/viewer.ts — /viewer 下的只读面板 + /api/{stats,recent,search}。
  • LLM 整合 — 夜间 cron 将 episodes 提炼为 memories,可直接使用 DeepSeek 或通过 OpenRouter,并通过 Pareto 预筛选丢弃噪声。参见 engine/src/consolidation/README.md。
  • CLI — mismem-ingest(ChatGPT 导出文件 / VS Code transcripts)、mismem-consolidate、mismem-forget、mismem-stats、mismem-embed、mismem-migrate-engram、mismem-bench(使用自有问题集衡量 recall,不进行强化),以及两个 hooks:mismem-inject 和 mismem-used。

技术栈

  • 引擎:严格 TypeScript、ES2022、ESM、Node ≥22。
  • 存储:使用 WAL 的 SQLite(多个并发读取者 + 1 个写入者)。better-sqlite3。
  • 搜索:针对 memories 使用 FTS5 + RRF 语义搜索,并保持 traits > memories > episodes 的优先级。
  • 协议:Model Context Protocol,通过 @modelcontextprotocol/sdk。
  • 验证:在所有边界使用 Zod。

状态

  • ✅ MCP 引擎正常运行(5 个调用 + engram-compat 层)。
  • ✅ Salience 衰减;在 recall 中出现或通过 hook 实际使用时进行强化。
  • ✅ 层级 scopes,不会发生跨 scope 泄漏。
  • ✅ Streamable HTTP 服务 + Docker/Traefik 部署。
  • ✅ 夜间 LLM 整合(episodes → memories)。
  • ✅ 只读 Viewer + introspection CLI。
  • ✅ 捕获 / 导入时去重(重新导入具有幂等性)。
  • ✅ 混合 recall:FTS5 + 可选的语义搜索,可通过 Ollama 或任何兼容 OpenAI 的服务实现。
  • ✅ 可选的客户端 hooks:在回复前提前注入记忆,并强化已使用的记忆。
  • 🚧 可分发的二进制文件(Bun --compile)。
语义搜索(可选)

运行 embeddings 服务后,recall 会增加按 含义搜索的能力:"problemas de plata"(钱的问题)可以找到提到 "deudas"(债务)的记忆。默认使用 Ollama(ollama pull nomic-embed-text)。向量以 BLOB 形式存储在同一个 SQLite 数据库中,搜索通过 JS 中的余弦相似度完成,无需原生 扩展。如果服务无响应,系统会静默退回到纯 FTS5 搜索,而纯 FTS5 要求查询中的所有 词语都必须匹配(不包括停用词:"qué"、"sobre"、"the"……)。语义搜索有意 仅覆盖 memories;episodes 和 traits 仍使用 FTS5 搜索。回填和 重新索引:mismem-embed(--status、--force)。

也支持任何兼容 OpenAI 的服务(/v1/embeddings, 例如 llama-server --embedding)。对于多语言记忆,建议使用 EmbeddingGemma 2,并设置其前缀和更高的阈值:

MISMEM_EMBEDDING_PROVIDER=openai
MISMEM_EMBEDDING_URL=http://127.0.0.1:8080
MISMEM_EMBEDDING_MODEL=embeddinggemma-2
MISMEM_EMBEDDING_QUERY_PREFIX="task: search result | query: "
MISMEM_EMBEDDING_DOC_PREFIX="title: none | text: "
MISMEM_EMBEDDING_MIN_SCORE=0.68

搜索只会比较已配置模型生成的向量。更换模型后,只会在下一次回填时重新索引(mismem-embed);更换前缀不会被检测到,因此需要运行 mismem-embed --force。所有变量及其默认值均列于 DEPLOY.md。

Salience、衰减和遗忘

如果没有强化,memories 的 salience 每 90 天减半 (可通过 MISMEM_SALIENCE_HALF_LIFE_DAYS 配置)。recall 会应用待处理的衰减, 然后增加 Hebbian 强化。只有经过宽限期后,forget 才会删除低于 阈值的 memories;--dry-run 会计算结果,但不会修改 DB。

客户端钩子(可选)

两个二进制程序将 misMEM 接入 Claude Code,无需模型记得主动请求:

  • mismem-inject(UserPromptSubmit)根据提示词进行搜索,并提前提供少量记忆。搜索时使用 reinforce: false:用户没有请求的内容就不算使用。它会保持休眠,直到确认服务器公开了 reinforce,因此可以在部署前完成配置。
  • mismem-used(Stop)会查看上一轮——模型通过 recall 请求的内容,以及注入提供给它的内容——并且只强化其中有辨识度的词语在回复中再次出现的记忆。这只是一种近似判断:宁可不强化,也不误强化。

注入的内容会随每条提示词发送给模型提供商,因此 MISMEM_HOOK_EXCLUDE_SCOPES 用于指定哪些范围不发送。设置 MISMEM_REINFORCE_ON_RECALL=off 后,显著性会根据使用情况而非出现次数变化。 安装方式和变量见 DEPLOY.md。

隐私

你的记忆归你所有。数据库(*.db)、转储文件和个人导出文件都已加入 .gitignore——绝不要提交它们。未设置 MISMEM_AUTH_USER/MISMEM_AUTH_PASS 时,HTTP 服务器会以无认证模式运行:仅在 localhost 上这样使用。

有两个可选功能会将文本发送到进程外,但只有在你进行配置后才会发送:

  • 语义搜索:嵌入服务器会接收每条记忆和每次查询的文本。请在你的机器或内部网络上运行它。
  • LLM 整合:情节会以纯文本形式发送到 DeepSeek(或 OpenRouter 及其背后的提供商)。未配置密钥时不会运行。

理念

过去之所以存在,是因为我们将它写下并压缩,使其得以留存。

部分灵感来自 Franz Bardon 的 Initiation Into Hermetics:在不同实例之间映照意识的镜子需要两个极点。misMEM 是大地之基——让记忆不会在会话之间消散,从而使人类⇄大模型之间的协作真正具有连续性。

贡献

欢迎提交 Issue 和 PR。提交 PR 前,请在 engine/ 中运行 pnpm typecheck && pnpm test(确保全部通过),并使用规范的提交信息(feat:、fix: 等)。代码规范见 .github/copilot-instructions.md。

许可证

MIT。见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

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

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